{"version":3,"sources":["vendor/ember-cli/app-prefix.js","geotechnical-data-platform-new/adapters/acceleration-value.js","geotechnical-data-platform-new/adapters/alert-event.js","geotechnical-data-platform-new/adapters/alert.js","geotechnical-data-platform-new/adapters/application.js","geotechnical-data-platform-new/adapters/axial-displacement-value.js","geotechnical-data-platform-new/adapters/axial-strain-value.js","geotechnical-data-platform-new/adapters/bending-strain-value.js","geotechnical-data-platform-new/adapters/bluvibev2_backup.js","geotechnical-data-platform-new/adapters/calibration-calibration-profile.js","geotechnical-data-platform-new/adapters/calibration-type-profile.js","geotechnical-data-platform-new/adapters/displacement-value.js","geotechnical-data-platform-new/adapters/event-frequency.js","geotechnical-data-platform-new/adapters/event-ppa.js","geotechnical-data-platform-new/adapters/event-ppv.js","geotechnical-data-platform-new/adapters/firmware-value.js","geotechnical-data-platform-new/adapters/frequency-ppa.js","geotechnical-data-platform-new/adapters/frequency-ppv.js","geotechnical-data-platform-new/adapters/gateway-temperature.js","geotechnical-data-platform-new/adapters/gateway-value.js","geotechnical-data-platform-new/adapters/gateway.js","geotechnical-data-platform-new/adapters/instrument.js","geotechnical-data-platform-new/adapters/load-value.js","geotechnical-data-platform-new/adapters/log-viewer.js","geotechnical-data-platform-new/adapters/packs-validation-type.js","geotechnical-data-platform-new/adapters/readings-value.js","geotechnical-data-platform-new/adapters/reconnection-value.js","geotechnical-data-platform-new/adapters/rig-profile.js","geotechnical-data-platform-new/adapters/rssi-value.js","geotechnical-data-platform-new/adapters/strain-rate-value.js","geotechnical-data-platform-new/adapters/strain-value.js","geotechnical-data-platform-new/adapters/temp-value.js","geotechnical-data-platform-new/adapters/temperature-gateway-value.js","geotechnical-data-platform-new/adapters/temperature-value.js","geotechnical-data-platform-new/adapters/uploads-value.js","geotechnical-data-platform-new/adapters/uptime-value.js","geotechnical-data-platform-new/adapters/velocity-value.js","geotechnical-data-platform-new/adapters/vendor.js","geotechnical-data-platform-new/adapters/voltage-value.js","geotechnical-data-platform-new/app.js","geotechnical-data-platform-new/authenticators/basic-auth.js","geotechnical-data-platform-new/authenticators/jwt.js","geotechnical-data-platform-new/authenticators/myauth.js","geotechnical-data-platform-new/authenticators/oauth-jwt.js","geotechnical-data-platform-new/component-managers/glimmer.js","geotechnical-data-platform-new/components/actions-alerts.js","geotechnical-data-platform-new/components/adict/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/components/adict/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/adict/create-instrument.js","geotechnical-data-platform-new/components/adict/create-new-raw-data-value-form.js","geotechnical-data-platform-new/components/adict/edit-instrument.js","geotechnical-data-platform-new/components/adict/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/components/adict/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/adict/raw-data.js","geotechnical-data-platform-new/components/adict/spatial-chart-dropdown.js","geotechnical-data-platform-new/components/adict/temporal-CABLE-chart-dropdown.js","geotechnical-data-platform-new/components/adict/temporal-MPBX-chart-dropdown.js","geotechnical-data-platform-new/components/adict/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/advanced-filter-alert-events.js","geotechnical-data-platform-new/components/advanced-filter-alerts.js","geotechnical-data-platform-new/components/advanced-filter.js","geotechnical-data-platform-new/components/alert-profile-sidebar-alert-events.js","geotechnical-data-platform-new/components/alert-profile-sidebar-alert-more.js","geotechnical-data-platform-new/components/alert-profile-sidebar-home.js","geotechnical-data-platform-new/components/alert-profile-sidebar.js","geotechnical-data-platform-new/components/alerts-list.js","geotechnical-data-platform-new/components/analytics/packsValidationAnalyticsMainPage.js","geotechnical-data-platform-new/components/analytics/sensorCalibrationAnalyticsMainPage.js","geotechnical-data-platform-new/components/array-path-layer.js","geotechnical-data-platform-new/components/base-layer.js","geotechnical-data-platform-new/components/basic-dropdown-content.js","geotechnical-data-platform-new/components/basic-dropdown-trigger.js","geotechnical-data-platform-new/components/basic-dropdown-wormhole.js","geotechnical-data-platform-new/components/basic-dropdown.js","geotechnical-data-platform-new/components/batch-actions-alerts.js","geotechnical-data-platform-new/components/batch-confirmation-modal.js","geotechnical-data-platform-new/components/blu900gw/chartjs-temporal-gateway-line-chart.js","geotechnical-data-platform-new/components/blu900gw/create-gateway.js","geotechnical-data-platform-new/components/blu900gw/create-new-raw-gateway-data-value-form.js","geotechnical-data-platform-new/components/blu900gw/edit-gateway.js","geotechnical-data-platform-new/components/blu900gw/nvd3-temporal-gateway-line-chart.js","geotechnical-data-platform-new/components/blu900gw/raw-gateway-data.js","geotechnical-data-platform-new/components/blu900gw/temporal-gateway-chart-dropdown.js","geotechnical-data-platform-new/components/blu900gw/temporal-gateway-left-axis-dropdown.js","geotechnical-data-platform-new/components/blu900gw/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/components/blu900node/chartjs-temporal-gateway-line-chart.js","geotechnical-data-platform-new/components/blu900node/create-gateway.js","geotechnical-data-platform-new/components/blu900node/create-new-raw-gateway-data-value-form.js","geotechnical-data-platform-new/components/blu900node/edit-gateway.js","geotechnical-data-platform-new/components/blu900node/nvd3-temporal-gateway-line-chart.js","geotechnical-data-platform-new/components/blu900node/raw-gateway-data.js","geotechnical-data-platform-new/components/blu900node/temporal-gateway-chart-dropdown.js","geotechnical-data-platform-new/components/blu900node/temporal-gateway-left-axis-dropdown.js","geotechnical-data-platform-new/components/blu900node/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/components/blucell/chartjs-temporal-gateway-line-chart.js","geotechnical-data-platform-new/components/blucell/create-gateway.js","geotechnical-data-platform-new/components/blucell/create-new-raw-gateway-data-value-form.js","geotechnical-data-platform-new/components/blucell/edit-gateway.js","geotechnical-data-platform-new/components/blucell/nvd3-temporal-gateway-line-chart.js","geotechnical-data-platform-new/components/blucell/raw-gateway-data.js","geotechnical-data-platform-new/components/blucell/temporal-gateway-chart-dropdown.js","geotechnical-data-platform-new/components/blucell/temporal-gateway-left-axis-dropdown.js","geotechnical-data-platform-new/components/blucell/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/components/blugate/chartjs-temporal-gateway-line-chart.js","geotechnical-data-platform-new/components/blugate/create-gateway.js","geotechnical-data-platform-new/components/blugate/edit-gateway.js","geotechnical-data-platform-new/components/blugate/nvd3-temporal-gateway-line-chart.js","geotechnical-data-platform-new/components/blugate/nvd3-temporal-gateway-line-chart_old.js","geotechnical-data-platform-new/components/blugate/raw-gateway-data.js","geotechnical-data-platform-new/components/blugate/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/blugate/temporal-gateway-chart-dropdown.js","geotechnical-data-platform-new/components/blugate/temporal-gateway-left-axis-dropdown.js","geotechnical-data-platform-new/components/blugate/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/components/bluvibe/create-gateway.js","geotechnical-data-platform-new/components/bluvibe/create-new-raw-gateway-data-value-form.js","geotechnical-data-platform-new/components/bluvibe/edit-gateway.js","geotechnical-data-platform-new/components/bluvibe/nvd3-temporal-gateway-line-chart.js","geotechnical-data-platform-new/components/bluvibe/nvd3-temporal-gateway-line-chart_old.js","geotechnical-data-platform-new/components/bluvibe/raw-gateway-data.js","geotechnical-data-platform-new/components/bluvibe/temporal-gateway-chart-dropdown.js","geotechnical-data-platform-new/components/bluvibe/temporal-gateway-left-axis-dropdown.js","geotechnical-data-platform-new/components/bluvibe/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/components/bread-crumbs.js","geotechnical-data-platform-new/components/bs-accordion.js","geotechnical-data-platform-new/components/bs-accordion/item.js","geotechnical-data-platform-new/components/bs-accordion/item/body.js","geotechnical-data-platform-new/components/bs-accordion/item/title.js","geotechnical-data-platform-new/components/bs-alert.js","geotechnical-data-platform-new/components/bs-button-group.js","geotechnical-data-platform-new/components/bs-button-group/button.js","geotechnical-data-platform-new/components/bs-button.js","geotechnical-data-platform-new/components/bs-carousel.js","geotechnical-data-platform-new/components/bs-carousel/slide.js","geotechnical-data-platform-new/components/bs-collapse.js","geotechnical-data-platform-new/components/bs-dropdown.js","geotechnical-data-platform-new/components/bs-dropdown/button.js","geotechnical-data-platform-new/components/bs-dropdown/menu.js","geotechnical-data-platform-new/components/bs-dropdown/menu/divider.js","geotechnical-data-platform-new/components/bs-dropdown/menu/item.js","geotechnical-data-platform-new/components/bs-dropdown/toggle.js","geotechnical-data-platform-new/components/bs-form.js","geotechnical-data-platform-new/components/bs-form/element.js","geotechnical-data-platform-new/components/bs-form/element/control.js","geotechnical-data-platform-new/components/bs-form/element/control/checkbox.js","geotechnical-data-platform-new/components/bs-form/element/control/input.js","geotechnical-data-platform-new/components/bs-form/element/control/radio.js","geotechnical-data-platform-new/components/bs-form/element/control/switch.js","geotechnical-data-platform-new/components/bs-form/element/control/textarea.js","geotechnical-data-platform-new/components/bs-form/element/errors.js","geotechnical-data-platform-new/components/bs-form/element/feedback-icon.js","geotechnical-data-platform-new/components/bs-form/element/help-text.js","geotechnical-data-platform-new/components/bs-form/element/label.js","geotechnical-data-platform-new/components/bs-form/element/layout/horizontal.js","geotechnical-data-platform-new/components/bs-form/element/layout/horizontal/checkbox.js","geotechnical-data-platform-new/components/bs-form/element/layout/inline.js","geotechnical-data-platform-new/components/bs-form/element/layout/inline/checkbox.js","geotechnical-data-platform-new/components/bs-form/element/layout/vertical.js","geotechnical-data-platform-new/components/bs-form/element/layout/vertical/checkbox.js","geotechnical-data-platform-new/components/bs-form/element/legend.js","geotechnical-data-platform-new/components/bs-link-to.js","geotechnical-data-platform-new/components/bs-modal-simple.js","geotechnical-data-platform-new/components/bs-modal.js","geotechnical-data-platform-new/components/bs-modal/body.js","geotechnical-data-platform-new/components/bs-modal/dialog.js","geotechnical-data-platform-new/components/bs-modal/footer.js","geotechnical-data-platform-new/components/bs-modal/header.js","geotechnical-data-platform-new/components/bs-modal/header/close.js","geotechnical-data-platform-new/components/bs-modal/header/title.js","geotechnical-data-platform-new/components/bs-nav.js","geotechnical-data-platform-new/components/bs-nav/item.js","geotechnical-data-platform-new/components/bs-navbar.js","geotechnical-data-platform-new/components/bs-navbar/content.js","geotechnical-data-platform-new/components/bs-navbar/link-to.js","geotechnical-data-platform-new/components/bs-navbar/nav.js","geotechnical-data-platform-new/components/bs-navbar/toggle.js","geotechnical-data-platform-new/components/bs-popover.js","geotechnical-data-platform-new/components/bs-popover/element.js","geotechnical-data-platform-new/components/bs-progress.js","geotechnical-data-platform-new/components/bs-progress/bar.js","geotechnical-data-platform-new/components/bs-tab.js","geotechnical-data-platform-new/components/bs-tab/pane.js","geotechnical-data-platform-new/components/bs-tooltip.js","geotechnical-data-platform-new/components/bs-tooltip/element.js","geotechnical-data-platform-new/components/cable/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/components/cable/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/cable/create-instrument.js","geotechnical-data-platform-new/components/cable/create-new-raw-data-value-form.js","geotechnical-data-platform-new/components/cable/edit-instrument.js","geotechnical-data-platform-new/components/cable/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/components/cable/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/cable/raw-data.js","geotechnical-data-platform-new/components/cable/spatial-chart-dropdown.js","geotechnical-data-platform-new/components/cable/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/chartjs-scatter-library.js","geotechnical-data-platform-new/components/circle-layer.js","geotechnical-data-platform-new/components/circle-marker-layer.js","geotechnical-data-platform-new/components/create-alert-profile-form-alert-types.js","geotechnical-data-platform-new/components/create-alert-profile-form.js","geotechnical-data-platform-new/components/create-alert-profile-sidebar.js","geotechnical-data-platform-new/components/create-alert-profile-subforms/dhq-flatline.js","geotechnical-data-platform-new/components/create-alert-profile-subforms/dhq-no-data.js","geotechnical-data-platform-new/components/create-alert-profile-subforms/dhq-spike.js","geotechnical-data-platform-new/components/create-alert-profile-subforms/disp-temp-correlation.js","geotechnical-data-platform-new/components/create-alert-profile-subforms/oor-arbitrary.js","geotechnical-data-platform-new/components/create-alert-profile-subforms/oor-reference.js","geotechnical-data-platform-new/components/create-alert-profile-subforms/roc-rolling.js","geotechnical-data-platform-new/components/create-new-blast-event-form.js","geotechnical-data-platform-new/components/create-new-seismic-event-form.js","geotechnical-data-platform-new/components/dash-map.js","geotechnical-data-platform-new/components/data-export-form.js","geotechnical-data-platform-new/components/data-export-gateway-form.js","geotechnical-data-platform-new/components/data-import-form-seis.js","geotechnical-data-platform-new/components/data-import-form.js","geotechnical-data-platform-new/components/data-import-gateway-form.js","geotechnical-data-platform-new/components/data-row-modal.js","geotechnical-data-platform-new/components/data-tables-details.js","geotechnical-data-platform-new/components/dconv/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/dconv/create-instrument.js","geotechnical-data-platform-new/components/dconv/create-new-raw-data-value-form.js","geotechnical-data-platform-new/components/dconv/edit-instrument.js","geotechnical-data-platform-new/components/dconv/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/components/dconv/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/dconv/raw-data.js","geotechnical-data-platform-new/components/dconv/spatial-chart-dropdown.js","geotechnical-data-platform-new/components/dconv/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/displacement-units-group.js","geotechnical-data-platform-new/components/div-overlay-layer.js","geotechnical-data-platform-new/components/dppc/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/dppc/create-instrument.js","geotechnical-data-platform-new/components/dppc/create-new-raw-data-value-form.js","geotechnical-data-platform-new/components/dppc/edit-instrument.js","geotechnical-data-platform-new/components/dppc/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/components/dppc/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/dppc/raw-data.js","geotechnical-data-platform-new/components/dppc/spatial-chart-dropdown.js","geotechnical-data-platform-new/components/dppc/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/dropdown-option.js","geotechnical-data-platform-new/components/edit-my-profile-contact-modal.js","geotechnical-data-platform-new/components/edit-my-profile-contractors-modal.js","geotechnical-data-platform-new/components/edit-my-profile-group-modal.js","geotechnical-data-platform-new/components/edit-my-profile-user-modal.js","geotechnical-data-platform-new/components/ember-modal-dialog-positioned-container.js","geotechnical-data-platform-new/components/ember-modal-dialog/-basic-dialog.js","geotechnical-data-platform-new/components/ember-modal-dialog/-in-place-dialog.js","geotechnical-data-platform-new/components/ember-modal-dialog/-liquid-dialog.js","geotechnical-data-platform-new/components/ember-modal-dialog/-liquid-tether-dialog.js","geotechnical-data-platform-new/components/ember-modal-dialog/-tether-dialog.js","geotechnical-data-platform-new/components/ember-modal-dialog/overlay.js","geotechnical-data-platform-new/components/ember-wormhole.js","geotechnical-data-platform-new/components/extoBMultiInstrument/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/extoBMultiInstrument/raw-data.js","geotechnical-data-platform-new/components/fa-icon.js","geotechnical-data-platform-new/components/file-field.js","geotechnical-data-platform-new/components/file-gateway-upload.js","geotechnical-data-platform-new/components/file-upload-seis.js","geotechnical-data-platform-new/components/file-upload.js","geotechnical-data-platform-new/components/filter-text-input-events.js","geotechnical-data-platform-new/components/filter-text-input-gateway.js","geotechnical-data-platform-new/components/filter-text-input-log-viewer.js","geotechnical-data-platform-new/components/filter-text-input.js","geotechnical-data-platform-new/components/frequency-display-records-dropdown.js","geotechnical-data-platform-new/components/frequency-event-tabs.js","geotechnical-data-platform-new/components/gateway-list-children.js","geotechnical-data-platform-new/components/gateway-list.js","geotechnical-data-platform-new/components/gateway-selector.js","geotechnical-data-platform-new/components/geojson-layer.js","geotechnical-data-platform-new/components/have-an-issue.js","geotechnical-data-platform-new/components/hid/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/components/hid/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/hid/create-instrument.js","geotechnical-data-platform-new/components/hid/create-new-raw-data-value-form.js","geotechnical-data-platform-new/components/hid/edit-instrument.js","geotechnical-data-platform-new/components/hid/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/components/hid/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/hid/raw-data.js","geotechnical-data-platform-new/components/hid/spatial-chart-dropdown.js","geotechnical-data-platform-new/components/hid/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/image-layer.js","geotechnical-data-platform-new/components/influx-readings-with-instrument-id-with-datetime.js","geotechnical-data-platform-new/components/instrument-anchors-diagram.js","geotechnical-data-platform-new/components/instrument-drop-down.js","geotechnical-data-platform-new/components/instruments-list.js","geotechnical-data-platform-new/components/interactive-layer.js","geotechnical-data-platform-new/components/key-import-form.js","geotechnical-data-platform-new/components/key-upload.js","geotechnical-data-platform-new/components/leaflet-map.js","geotechnical-data-platform-new/components/log-viewer.js","geotechnical-data-platform-new/components/mapbox-gl-call.js","geotechnical-data-platform-new/components/mapbox-gl-control.js","geotechnical-data-platform-new/components/mapbox-gl-image.js","geotechnical-data-platform-new/components/mapbox-gl-layer.js","geotechnical-data-platform-new/components/mapbox-gl-marker.js","geotechnical-data-platform-new/components/mapbox-gl-on.js","geotechnical-data-platform-new/components/mapbox-gl-popup.js","geotechnical-data-platform-new/components/mapbox-gl-source.js","geotechnical-data-platform-new/components/mapbox-gl.js","geotechnical-data-platform-new/components/marker-layer.js","geotechnical-data-platform-new/components/micro/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/components/micro/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/micro/create-instrument.js","geotechnical-data-platform-new/components/micro/create-new-raw-data-value-form.js","geotechnical-data-platform-new/components/micro/edit-instrument.js","geotechnical-data-platform-new/components/micro/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/components/micro/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/micro/raw-data.js","geotechnical-data-platform-new/components/micro/spatial-chart-dropdown.js","geotechnical-data-platform-new/components/micro/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/modal-dialog.js","geotechnical-data-platform-new/components/multiDExto/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/multiDExto/create-instrument.js","geotechnical-data-platform-new/components/multiDExto/dExto-children-table-row.js","geotechnical-data-platform-new/components/multiDExto/dExto-children.js","geotechnical-data-platform-new/components/multiDExto/edit-instrument.js","geotechnical-data-platform-new/components/multiDExto/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/multiDExto/raw-data.js","geotechnical-data-platform-new/components/multiDExto/selected-dExtos.js","geotechnical-data-platform-new/components/multiDExto/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/my-profile-sidebar-addon.js","geotechnical-data-platform-new/components/my-profile-sidebar-contacts.js","geotechnical-data-platform-new/components/my-profile-sidebar-contractors.js","geotechnical-data-platform-new/components/my-profile-sidebar-home.js","geotechnical-data-platform-new/components/my-profile-sidebar-more.js","geotechnical-data-platform-new/components/my-profile-sidebar-users.js","geotechnical-data-platform-new/components/my-profile-sidebar.js","geotechnical-data-platform-new/components/navbar.js","geotechnical-data-platform-new/components/node.js","geotechnical-data-platform-new/components/oneforone/chartjs-temporal-gateway-line-chart.js","geotechnical-data-platform-new/components/oneforone/create-gateway.js","geotechnical-data-platform-new/components/oneforone/create-new-raw-gateway-data-value-form.js","geotechnical-data-platform-new/components/oneforone/edit-gateway.js","geotechnical-data-platform-new/components/oneforone/nvd3-temporal-gateway-line-chart.js","geotechnical-data-platform-new/components/oneforone/raw-gateway-data.js","geotechnical-data-platform-new/components/oneforone/temporal-gateway-chart-dropdown.js","geotechnical-data-platform-new/components/oneforone/temporal-gateway-left-axis-dropdown.js","geotechnical-data-platform-new/components/oneforone/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/components/pack/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/components/pack/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/pack/create-instrument.js","geotechnical-data-platform-new/components/pack/create-new-raw-data-value-form.js","geotechnical-data-platform-new/components/pack/edit-instrument.js","geotechnical-data-platform-new/components/pack/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/components/pack/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/pack/raw-data.js","geotechnical-data-platform-new/components/pack/spatial-chart-dropdown.js","geotechnical-data-platform-new/components/pack/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/pagination-links.js","geotechnical-data-platform-new/components/path-layer.js","geotechnical-data-platform-new/components/piezo/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/components/piezo/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/piezo/create-instrument.js","geotechnical-data-platform-new/components/piezo/create-new-raw-data-value-form.js","geotechnical-data-platform-new/components/piezo/edit-instrument.js","geotechnical-data-platform-new/components/piezo/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/components/piezo/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/piezo/raw-data.js","geotechnical-data-platform-new/components/piezo/spatial-chart-dropdown.js","geotechnical-data-platform-new/components/piezo/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/point-path-layer.js","geotechnical-data-platform-new/components/polygon-layer.js","geotechnical-data-platform-new/components/polyline-layer.js","geotechnical-data-platform-new/components/popup-layer.js","geotechnical-data-platform-new/components/popup-list.js","geotechnical-data-platform-new/components/production/calibrationMainPage.js","geotechnical-data-platform-new/components/production/packsValidationMainPage.js","geotechnical-data-platform-new/components/rate-velocity-units-group.js","geotechnical-data-platform-new/components/raw-drop-down.js","geotechnical-data-platform-new/components/raw-frequency-events-drop-down.js","geotechnical-data-platform-new/components/raw-port-drop-down.js","geotechnical-data-platform-new/components/rebar/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/components/rebar/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/rebar/create-instrument.js","geotechnical-data-platform-new/components/rebar/create-new-raw-data-value-form.js","geotechnical-data-platform-new/components/rebar/edit-instrument.js","geotechnical-data-platform-new/components/rebar/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/components/rebar/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/rebar/raw-data.js","geotechnical-data-platform-new/components/rebar/spatial-chart-dropdown.js","geotechnical-data-platform-new/components/rebar/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/rebarv2/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/components/rebarv2/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/rebarv2/create-instrument.js","geotechnical-data-platform-new/components/rebarv2/create-new-raw-data-value-form.js","geotechnical-data-platform-new/components/rebarv2/edit-instrument.js","geotechnical-data-platform-new/components/rebarv2/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/components/rebarv2/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/rebarv2/raw-data.js","geotechnical-data-platform-new/components/rebarv2/spatial-chart-dropdown.js","geotechnical-data-platform-new/components/rebarv2/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/record-selector.js","geotechnical-data-platform-new/components/rectangle-layer.js","geotechnical-data-platform-new/components/root.js","geotechnical-data-platform-new/components/searchable-select-option.js","geotechnical-data-platform-new/components/searchable-select.js","geotechnical-data-platform-new/components/settings-about.js","geotechnical-data-platform-new/components/settings-general.js","geotechnical-data-platform-new/components/settings-more-clear-logs-confirmation-modal.js","geotechnical-data-platform-new/components/settings-more.js","geotechnical-data-platform-new/components/settings-sidebar.js","geotechnical-data-platform-new/components/single-save-checkbox.js","geotechnical-data-platform-new/components/single-save-datetime-picker.js","geotechnical-data-platform-new/components/single-save-gateway-inputs-array-table-row-cells.js","geotechnical-data-platform-new/components/single-save-geo-input.js","geotechnical-data-platform-new/components/single-save-input-InstType.js","geotechnical-data-platform-new/components/single-save-input-numeric.js","geotechnical-data-platform-new/components/single-save-input-password.js","geotechnical-data-platform-new/components/single-save-input.js","geotechnical-data-platform-new/components/single-save-inputs-array-table-row-cells-2.js","geotechnical-data-platform-new/components/single-save-inputs-array-table-row-cells-temperature.js","geotechnical-data-platform-new/components/single-save-inputs-array-table-row-cells.js","geotechnical-data-platform-new/components/single-save-instrument-anchors-rebar.js","geotechnical-data-platform-new/components/single-save-instrument-anchors.js","geotechnical-data-platform-new/components/single-save-interval-dropdown.js","geotechnical-data-platform-new/components/single-save-lookup.js","geotechnical-data-platform-new/components/single-save-select-alt.js","geotechnical-data-platform-new/components/single-save-select-non-model.js","geotechnical-data-platform-new/components/single-save-select.js","geotechnical-data-platform-new/components/single-save-time-picker.js","geotechnical-data-platform-new/components/slough/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/components/slough/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/slough/create-instrument.js","geotechnical-data-platform-new/components/slough/create-new-raw-data-value-form.js","geotechnical-data-platform-new/components/slough/edit-instrument.js","geotechnical-data-platform-new/components/slough/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/components/slough/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/slough/raw-data.js","geotechnical-data-platform-new/components/slough/spatial-chart-dropdown.js","geotechnical-data-platform-new/components/slough/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/sortable-table-header.js","geotechnical-data-platform-new/components/spatial-blast-dropdown.js","geotechnical-data-platform-new/components/spatial-event-dropdown.js","geotechnical-data-platform-new/components/spatial-group-dropdown.js","geotechnical-data-platform-new/components/spatial-seismic-dropdown.js","geotechnical-data-platform-new/components/spatial-time-dropdown.js","geotechnical-data-platform-new/components/spatial-window-dropdown.js","geotechnical-data-platform-new/components/svg-instrument.js","geotechnical-data-platform-new/components/table-legend-alerts.js","geotechnical-data-platform-new/components/temperature-units-group.js","geotechnical-data-platform-new/components/temporal-blast-dropdown.js","geotechnical-data-platform-new/components/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/temporal-display-records-dropdown.js","geotechnical-data-platform-new/components/temporal-event-dropdown.js","geotechnical-data-platform-new/components/temporal-group-dropdown.js","geotechnical-data-platform-new/components/temporal-seismic-dropdown.js","geotechnical-data-platform-new/components/temporal-window-dropdown.js","geotechnical-data-platform-new/components/thermo/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/components/thermo/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/thermo/create-instrument.js","geotechnical-data-platform-new/components/thermo/create-new-raw-data-value-form.js","geotechnical-data-platform-new/components/thermo/edit-instrument.js","geotechnical-data-platform-new/components/thermo/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/components/thermo/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/thermo/raw-data.js","geotechnical-data-platform-new/components/thermo/spatial-chart-dropdown.js","geotechnical-data-platform-new/components/thermo/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/tile-layer.js","geotechnical-data-platform-new/components/tilt/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/tilt/create-instrument.js","geotechnical-data-platform-new/components/tilt/create-new-raw-data-value-form.js","geotechnical-data-platform-new/components/tilt/edit-instrument.js","geotechnical-data-platform-new/components/tilt/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/tilt/raw-data.js","geotechnical-data-platform-new/components/tilt/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/time-units-group.js","geotechnical-data-platform-new/components/tooltip-layer.js","geotechnical-data-platform-new/components/torii-iframe-placeholder.js","geotechnical-data-platform-new/components/vendor-instrument.js","geotechnical-data-platform-new/components/vibe/chartjs-frequency-chart.js","geotechnical-data-platform-new/components/vibe/chartjs-temporal-gateway-line-chart.js","geotechnical-data-platform-new/components/vibe/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/vibe/create-gateway.js","geotechnical-data-platform-new/components/vibe/create-instrument.js","geotechnical-data-platform-new/components/vibe/create-new-raw-data-value-form.js","geotechnical-data-platform-new/components/vibe/create-new-raw-gateway-data-value-form.js","geotechnical-data-platform-new/components/vibe/echarts-frequency-event.js","geotechnical-data-platform-new/components/vibe/edit-gateway.js","geotechnical-data-platform-new/components/vibe/edit-instrument.js","geotechnical-data-platform-new/components/vibe/frequency-chart-dropdown.js","geotechnical-data-platform-new/components/vibe/frequency-events-dropdown.js","geotechnical-data-platform-new/components/vibe/nvd3-frequency-line-chart.js","geotechnical-data-platform-new/components/vibe/nvd3-temporal-gateway-line-chart.js","geotechnical-data-platform-new/components/vibe/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/vibe/raw-data.js","geotechnical-data-platform-new/components/vibe/raw-frequency-events-data.js","geotechnical-data-platform-new/components/vibe/raw-gateway-data.js","geotechnical-data-platform-new/components/vibe/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/vibe/temporal-gateway-chart-dropdown.js","geotechnical-data-platform-new/components/vibe/temporal-gateway-left-axis-dropdown.js","geotechnical-data-platform-new/components/vibe/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/components/video-layer.js","geotechnical-data-platform-new/components/welcome-page.js","geotechnical-data-platform-new/components/wire-single-save-inputs-array-table-row-cells.js","geotechnical-data-platform-new/components/wire/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/components/wire/create-instrument.js","geotechnical-data-platform-new/components/wire/create-new-raw-data-value-form.js","geotechnical-data-platform-new/components/wire/edit-instrument-port-drop-down.js","geotechnical-data-platform-new/components/wire/edit-instrument.js","geotechnical-data-platform-new/components/wire/geo-pt-edit.js","geotechnical-data-platform-new/components/wire/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/components/wire/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/components/wire/raw-data-dropdown.js","geotechnical-data-platform-new/components/wire/raw-data.js","geotechnical-data-platform-new/components/wire/roc-jms-edit.js","geotechnical-data-platform-new/components/wire/roc-pws-edit.js","geotechnical-data-platform-new/components/wire/rst-pt-edit.js","geotechnical-data-platform-new/components/wire/spatial-chart-dropdown.js","geotechnical-data-platform-new/components/wire/temporal-chart-dropdown.js","geotechnical-data-platform-new/components/wms-tile-layer.js","geotechnical-data-platform-new/container-debug-adapter.js","geotechnical-data-platform-new/controllers/alerts.js","geotechnical-data-platform-new/controllers/application.js","geotechnical-data-platform-new/controllers/blast-events.js","geotechnical-data-platform-new/controllers/contact-us.js","geotechnical-data-platform-new/controllers/create-alert-profile.js","geotechnical-data-platform-new/controllers/create-gateway.js","geotechnical-data-platform-new/controllers/create-instrument.js","geotechnical-data-platform-new/controllers/create-lookup.js","geotechnical-data-platform-new/controllers/edit-alert-profile.js","geotechnical-data-platform-new/controllers/edit-gateway.js","geotechnical-data-platform-new/controllers/edit-instrument.js","geotechnical-data-platform-new/controllers/edit-lookups.js","geotechnical-data-platform-new/controllers/forgot-password.js","geotechnical-data-platform-new/controllers/frequency-events.js","geotechnical-data-platform-new/controllers/frequency-events/frequency-event-edit-form.js","geotechnical-data-platform-new/controllers/frequency-events/frequency-event.js","geotechnical-data-platform-new/controllers/frequency-graphs.js","geotechnical-data-platform-new/controllers/frequency-graphs/frequency-graph.js","geotechnical-data-platform-new/controllers/gateway.js","geotechnical-data-platform-new/controllers/have-an-issue.js","geotechnical-data-platform-new/controllers/index.js","geotechnical-data-platform-new/controllers/instruments.js","geotechnical-data-platform-new/controllers/keys.js","geotechnical-data-platform-new/controllers/list-lookups.js","geotechnical-data-platform-new/controllers/log-viewer.js","geotechnical-data-platform-new/controllers/login.js","geotechnical-data-platform-new/controllers/my-profile.js","geotechnical-data-platform-new/controllers/packs-validation-analytics.js","geotechnical-data-platform-new/controllers/packs-validation.js","geotechnical-data-platform-new/controllers/progress-bar.js","geotechnical-data-platform-new/controllers/raw-data.js","geotechnical-data-platform-new/controllers/raw-frequency-events-data.js","geotechnical-data-platform-new/controllers/raw-gateway-data.js","geotechnical-data-platform-new/controllers/register.js","geotechnical-data-platform-new/controllers/reset-password.js","geotechnical-data-platform-new/controllers/seismic-events.js","geotechnical-data-platform-new/controllers/sensor-calibration-analytics.js","geotechnical-data-platform-new/controllers/sensor-calibration.js","geotechnical-data-platform-new/controllers/settings.js","geotechnical-data-platform-new/controllers/spatial-graphs.js","geotechnical-data-platform-new/controllers/spatial-graphs/spatial-graph.js","geotechnical-data-platform-new/controllers/temporal-gateway-graphs.js","geotechnical-data-platform-new/controllers/temporal-gateway-graphs/temporal-gateway-graph.js","geotechnical-data-platform-new/controllers/temporal-graphs.js","geotechnical-data-platform-new/controllers/temporal-graphs/temporal-graph.js","geotechnical-data-platform-new/controllers/vibration-events.js","geotechnical-data-platform-new/data-adapter.js","geotechnical-data-platform-new/helpers/-base.js","geotechnical-data-platform-new/helpers/active-class.js","geotechnical-data-platform-new/helpers/alert-get-id.js","geotechnical-data-platform-new/helpers/and.js","geotechnical-data-platform-new/helpers/app-version.js","geotechnical-data-platform-new/helpers/arrayAt.js","geotechnical-data-platform-new/helpers/bs-contains.js","geotechnical-data-platform-new/helpers/bs-default.js","geotechnical-data-platform-new/helpers/bs-eq.js","geotechnical-data-platform-new/helpers/bs-form-horiz-input-class.js","geotechnical-data-platform-new/helpers/bs-form-horiz-offset-class.js","geotechnical-data-platform-new/helpers/bs-noop.js","geotechnical-data-platform-new/helpers/bs-size-class.js","geotechnical-data-platform-new/helpers/bs-type-class.js","geotechnical-data-platform-new/helpers/buttonclass.js","geotechnical-data-platform-new/helpers/calibration-language-library.js","geotechnical-data-platform-new/helpers/calibration-library.js","geotechnical-data-platform-new/helpers/cancel-all.js","geotechnical-data-platform-new/helpers/compare-anchors.js","geotechnical-data-platform-new/helpers/current-date.js","geotechnical-data-platform-new/helpers/did-insert-helper.js","geotechnical-data-platform-new/helpers/did-insert.js","geotechnical-data-platform-new/helpers/did-update-helper.js","geotechnical-data-platform-new/helpers/did-update.js","geotechnical-data-platform-new/helpers/div-icon.js","geotechnical-data-platform-new/helpers/element.js","geotechnical-data-platform-new/helpers/ember-leaflet-assign-to.js","geotechnical-data-platform-new/helpers/ember-leaflet-eq.js","geotechnical-data-platform-new/helpers/ember-leaflet-hash.js","geotechnical-data-platform-new/helpers/ember-leaflet-or.js","geotechnical-data-platform-new/helpers/ensure-safe-component.js","geotechnical-data-platform-new/helpers/eq.js","geotechnical-data-platform-new/helpers/format-number.js","geotechnical-data-platform-new/helpers/frequency-event-language-library.js","geotechnical-data-platform-new/helpers/frequency-event-library.js","geotechnical-data-platform-new/helpers/frequency-events-library.js","geotechnical-data-platform-new/helpers/frequency-events-validate-for-red-warning.js","geotechnical-data-platform-new/helpers/get-array-element.js","geotechnical-data-platform-new/helpers/get-array-value.js","geotechnical-data-platform-new/helpers/get-packs-validation-progression.js","geotechnical-data-platform-new/helpers/get-packs-validation-verdict.js","geotechnical-data-platform-new/helpers/gt.js","geotechnical-data-platform-new/helpers/gte.js","geotechnical-data-platform-new/helpers/icon.js","geotechnical-data-platform-new/helpers/if-empty-string-or-null.js","geotechnical-data-platform-new/helpers/if-meet-sub-model-requirement.js","geotechnical-data-platform-new/helpers/ignore-children.js","geotechnical-data-platform-new/helpers/is-after.js","geotechnical-data-platform-new/helpers/is-array.js","geotechnical-data-platform-new/helpers/is-before.js","geotechnical-data-platform-new/helpers/is-between.js","geotechnical-data-platform-new/helpers/is-empty.js","geotechnical-data-platform-new/helpers/is-equal.js","geotechnical-data-platform-new/helpers/is-greater-than.js","geotechnical-data-platform-new/helpers/is-in.js","geotechnical-data-platform-new/helpers/is-instrument-anchors-set.js","geotechnical-data-platform-new/helpers/is-same-or-after.js","geotechnical-data-platform-new/helpers/is-same-or-before.js","geotechnical-data-platform-new/helpers/is-same.js","geotechnical-data-platform-new/helpers/is-stroke-length-required-and-set.js","geotechnical-data-platform-new/helpers/isAlertChecked.js","geotechnical-data-platform-new/helpers/lat-lng-bounds.js","geotechnical-data-platform-new/helpers/logger.js","geotechnical-data-platform-new/helpers/lt.js","geotechnical-data-platform-new/helpers/lte.js","geotechnical-data-platform-new/helpers/make-timestamp-global-format-aware-bluvibe.js","geotechnical-data-platform-new/helpers/moment-add.js","geotechnical-data-platform-new/helpers/moment-calendar.js","geotechnical-data-platform-new/helpers/moment-diff.js","geotechnical-data-platform-new/helpers/moment-duration.js","geotechnical-data-platform-new/helpers/moment-format.js","geotechnical-data-platform-new/helpers/moment-from-now.js","geotechnical-data-platform-new/helpers/moment-from.js","geotechnical-data-platform-new/helpers/moment-subtract.js","geotechnical-data-platform-new/helpers/moment-to-date.js","geotechnical-data-platform-new/helpers/moment-to-now.js","geotechnical-data-platform-new/helpers/moment-to.js","geotechnical-data-platform-new/helpers/moment.js","geotechnical-data-platform-new/helpers/network-library.js","geotechnical-data-platform-new/helpers/not-eq.js","geotechnical-data-platform-new/helpers/not.js","geotechnical-data-platform-new/helpers/now.js","geotechnical-data-platform-new/helpers/on-document.js","geotechnical-data-platform-new/helpers/on-window.js","geotechnical-data-platform-new/helpers/on.js","geotechnical-data-platform-new/helpers/or.js","geotechnical-data-platform-new/helpers/packs-validation-analytics-library.js","geotechnical-data-platform-new/helpers/packs-validation-language-library.js","geotechnical-data-platform-new/helpers/packs-validation-library.js","geotechnical-data-platform-new/helpers/page-title.js","geotechnical-data-platform-new/helpers/parseint.js","geotechnical-data-platform-new/helpers/perform.js","geotechnical-data-platform-new/helpers/pluralize.js","geotechnical-data-platform-new/helpers/point.js","geotechnical-data-platform-new/helpers/popper-modifier.js","geotechnical-data-platform-new/helpers/radio-group-is-checked.js","geotechnical-data-platform-new/helpers/range.js","geotechnical-data-platform-new/helpers/ref-to.js","geotechnical-data-platform-new/helpers/searchable-select-get.js","geotechnical-data-platform-new/helpers/searchable-select-highlight-match.js","geotechnical-data-platform-new/helpers/sensor-calibration-analytics-library.js","geotechnical-data-platform-new/helpers/singularize.js","geotechnical-data-platform-new/helpers/sum.js","geotechnical-data-platform-new/helpers/task.js","geotechnical-data-platform-new/helpers/unix.js","geotechnical-data-platform-new/helpers/utc.js","geotechnical-data-platform-new/helpers/validate-dExto.js","geotechnical-data-platform-new/helpers/validate-initial-channels.js","geotechnical-data-platform-new/helpers/will-destroy-helper.js","geotechnical-data-platform-new/helpers/will-destroy.js","geotechnical-data-platform-new/helpers/xor.js","geotechnical-data-platform-new/initializers/app-version.js","geotechnical-data-platform-new/initializers/ember-data.js","geotechnical-data-platform-new/initializers/ember-simple-auth.js","geotechnical-data-platform-new/initializers/initialize-torii-callback.js","geotechnical-data-platform-new/initializers/initialize-torii-session.js","geotechnical-data-platform-new/initializers/initialize-torii.js","geotechnical-data-platform-new/initializers/leaflet-assets.js","geotechnical-data-platform-new/initializers/load-bootstrap-config.js","geotechnical-data-platform-new/instance-initializers/add-modals-container.js","geotechnical-data-platform-new/instance-initializers/setup-routes.js","geotechnical-data-platform-new/instance-initializers/walk-providers.js","geotechnical-data-platform-new/models/acceleration-value.js","geotechnical-data-platform-new/models/alert-event.js","geotechnical-data-platform-new/models/alert-profile.js","geotechnical-data-platform-new/models/alert.js","geotechnical-data-platform-new/models/anchor.js","geotechnical-data-platform-new/models/axial-displacement-value.js","geotechnical-data-platform-new/models/axial-strain-value.js","geotechnical-data-platform-new/models/bending-strain-value.js","geotechnical-data-platform-new/models/blast-event.js","geotechnical-data-platform-new/models/blast-type.js","geotechnical-data-platform-new/models/blu-vibe-v2-data-model2.js","geotechnical-data-platform-new/models/blu-vibe-v2-profile-model.js","geotechnical-data-platform-new/models/blu-vibe-v2-velocity-data-model.js","geotechnical-data-platform-new/models/calibration-calibration-profile.js","geotechnical-data-platform-new/models/calibration-instrument-data.js","geotechnical-data-platform-new/models/calibration-instrument-lookup.js","geotechnical-data-platform-new/models/calibration-instrument-profile.js","geotechnical-data-platform-new/models/calibration-type-profile.js","geotechnical-data-platform-new/models/chart.js","geotechnical-data-platform-new/models/displacement-value.js","geotechnical-data-platform-new/models/event-frequency.js","geotechnical-data-platform-new/models/event-ppa.js","geotechnical-data-platform-new/models/event-ppv.js","geotechnical-data-platform-new/models/firmware-value.js","geotechnical-data-platform-new/models/frequency-ppa.js","geotechnical-data-platform-new/models/frequency-ppv.js","geotechnical-data-platform-new/models/gateway-child-relation.js","geotechnical-data-platform-new/models/gateway-interval.js","geotechnical-data-platform-new/models/gateway-stat.js","geotechnical-data-platform-new/models/gateway-temperature.js","geotechnical-data-platform-new/models/gateway-type.js","geotechnical-data-platform-new/models/gateway-value.js","geotechnical-data-platform-new/models/gateway.js","geotechnical-data-platform-new/models/head-at.js","geotechnical-data-platform-new/models/instrument-stat.js","geotechnical-data-platform-new/models/instrument-type.js","geotechnical-data-platform-new/models/instrument.js","geotechnical-data-platform-new/models/licence-key.js","geotechnical-data-platform-new/models/licence.js","geotechnical-data-platform-new/models/load-value.js","geotechnical-data-platform-new/models/log-viewer.js","geotechnical-data-platform-new/models/lookup.js","geotechnical-data-platform-new/models/measurement.js","geotechnical-data-platform-new/models/oauth-provider.js","geotechnical-data-platform-new/models/packs-validation-type.js","geotechnical-data-platform-new/models/project-setting.js","geotechnical-data-platform-new/models/readings-value.js","geotechnical-data-platform-new/models/reconnection-value.js","geotechnical-data-platform-new/models/rig-profile.js","geotechnical-data-platform-new/models/rssi-value.js","geotechnical-data-platform-new/models/seismic-event.js","geotechnical-data-platform-new/models/seismic-type.js","geotechnical-data-platform-new/models/strain-rate-value.js","geotechnical-data-platform-new/models/strain-value.js","geotechnical-data-platform-new/models/temp-value.js","geotechnical-data-platform-new/models/temperature-gateway-value.js","geotechnical-data-platform-new/models/temperature-value.js","geotechnical-data-platform-new/models/uploads-value.js","geotechnical-data-platform-new/models/uptime-value.js","geotechnical-data-platform-new/models/validation-packs-profile.js","geotechnical-data-platform-new/models/velocity-value.js","geotechnical-data-platform-new/models/vendor.js","geotechnical-data-platform-new/models/vibration-event.js","geotechnical-data-platform-new/models/voltage-value.js","geotechnical-data-platform-new/models/vwmodel.js","geotechnical-data-platform-new/models/vwproperty.js","geotechnical-data-platform-new/models/vwvendor.js","geotechnical-data-platform-new/modifiers/basic-dropdown-trigger.js","geotechnical-data-platform-new/modifiers/create-ref.js","geotechnical-data-platform-new/modifiers/did-insert.js","geotechnical-data-platform-new/modifiers/did-update.js","geotechnical-data-platform-new/modifiers/focus-trap.js","geotechnical-data-platform-new/modifiers/popper-tooltip.js","geotechnical-data-platform-new/modifiers/popper.js","geotechnical-data-platform-new/modifiers/style.js","geotechnical-data-platform-new/modifiers/will-destroy.js","geotechnical-data-platform-new/router.js","geotechnical-data-platform-new/routes/AuthenticatedRoute.js","geotechnical-data-platform-new/routes/alerts.js","geotechnical-data-platform-new/routes/application.js","geotechnical-data-platform-new/routes/blast-event.js","geotechnical-data-platform-new/routes/blast-events.js","geotechnical-data-platform-new/routes/contact-us.js","geotechnical-data-platform-new/routes/create-alert-profile.js","geotechnical-data-platform-new/routes/create-gateway.js","geotechnical-data-platform-new/routes/create-instrument.js","geotechnical-data-platform-new/routes/create-lookup.js","geotechnical-data-platform-new/routes/edit-alert-profile.js","geotechnical-data-platform-new/routes/edit-gateway.js","geotechnical-data-platform-new/routes/edit-instrument.js","geotechnical-data-platform-new/routes/forgot-password.js","geotechnical-data-platform-new/routes/frequency-events.js","geotechnical-data-platform-new/routes/frequency-events/frequency-event.js","geotechnical-data-platform-new/routes/frequency-graphs.js","geotechnical-data-platform-new/routes/frequency-graphs/frequency-graph.js","geotechnical-data-platform-new/routes/gateway.js","geotechnical-data-platform-new/routes/have-an-issue.js","geotechnical-data-platform-new/routes/index.js","geotechnical-data-platform-new/routes/instruments.js","geotechnical-data-platform-new/routes/keys.js","geotechnical-data-platform-new/routes/list-lookups.js","geotechnical-data-platform-new/routes/log-viewer.js","geotechnical-data-platform-new/routes/login.js","geotechnical-data-platform-new/routes/my-profile.js","geotechnical-data-platform-new/routes/packs-validation-analytics.js","geotechnical-data-platform-new/routes/packs-validation.js","geotechnical-data-platform-new/routes/raw-data.js","geotechnical-data-platform-new/routes/raw-frequency-events-data.js","geotechnical-data-platform-new/routes/raw-gateway-data.js","geotechnical-data-platform-new/routes/register.js","geotechnical-data-platform-new/routes/reset-password.js","geotechnical-data-platform-new/routes/seismic-event.js","geotechnical-data-platform-new/routes/seismic-events.js","geotechnical-data-platform-new/routes/sensor-calibration-analytics.js","geotechnical-data-platform-new/routes/sensor-calibration.js","geotechnical-data-platform-new/routes/settings.js","geotechnical-data-platform-new/routes/spatial-graphs.js","geotechnical-data-platform-new/routes/spatial-graphs/spatial-graph.js","geotechnical-data-platform-new/routes/temporal-gateway-graphs.js","geotechnical-data-platform-new/routes/temporal-gateway-graphs/temporal-gateway-graph.js","geotechnical-data-platform-new/routes/temporal-graphs.js","geotechnical-data-platform-new/routes/temporal-graphs/temporal-graph.js","geotechnical-data-platform-new/routes/vibration-events.js","geotechnical-data-platform-new/serializers/application.js","geotechnical-data-platform-new/services/-ensure-registered.js","geotechnical-data-platform-new/services/ajax.js","geotechnical-data-platform-new/services/alerts-batch.js","geotechnical-data-platform-new/services/api.js","geotechnical-data-platform-new/services/configuration.js","geotechnical-data-platform-new/services/cookies.js","geotechnical-data-platform-new/services/ember-leaflet.js","geotechnical-data-platform-new/services/modal-dialog.js","geotechnical-data-platform-new/services/moment.js","geotechnical-data-platform-new/services/oauth-config.js","geotechnical-data-platform-new/services/page-title.js","geotechnical-data-platform-new/services/popup.js","geotechnical-data-platform-new/services/session.js","geotechnical-data-platform-new/services/store.js","geotechnical-data-platform-new/services/torii-session.js","geotechnical-data-platform-new/services/torii.js","geotechnical-data-platform-new/services/user-profile-service.js","geotechnical-data-platform-new/session-stores/application.js","geotechnical-data-platform-new/templates/alerts.js","geotechnical-data-platform-new/templates/application.js","geotechnical-data-platform-new/templates/blast-events.js","geotechnical-data-platform-new/templates/components/actions-alerts.js","geotechnical-data-platform-new/templates/components/adict/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/adict/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/adict/create-instrument.js","geotechnical-data-platform-new/templates/components/adict/create-new-raw-data-value-form.js","geotechnical-data-platform-new/templates/components/adict/edit-instrument.js","geotechnical-data-platform-new/templates/components/adict/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/adict/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/adict/raw-data.js","geotechnical-data-platform-new/templates/components/adict/spatial-chart-dropdown.js","geotechnical-data-platform-new/templates/components/adict/temporal-CABLE-chart-dropdown.js","geotechnical-data-platform-new/templates/components/adict/temporal-MPBX-chart-dropdown.js","geotechnical-data-platform-new/templates/components/adict/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/advanced-filter-alert-events.js","geotechnical-data-platform-new/templates/components/advanced-filter-alerts.js","geotechnical-data-platform-new/templates/components/advanced-filter.js","geotechnical-data-platform-new/templates/components/alert-profile-sidebar-alert-events.js","geotechnical-data-platform-new/templates/components/alert-profile-sidebar-alert-more.js","geotechnical-data-platform-new/templates/components/alert-profile-sidebar-home.js","geotechnical-data-platform-new/templates/components/alert-profile-sidebar.js","geotechnical-data-platform-new/templates/components/alerts-list.js","geotechnical-data-platform-new/templates/components/analytics/packsValidationAnalyticsMainPage.js","geotechnical-data-platform-new/templates/components/analytics/sensorCalibrationAnalyticsMainPage.js","geotechnical-data-platform-new/templates/components/batch-actions-alerts.js","geotechnical-data-platform-new/templates/components/batch-confirmation-modal.js","geotechnical-data-platform-new/templates/components/blu900gw/chartjs-temporal-gateway-line-chart.js","geotechnical-data-platform-new/templates/components/blu900gw/create-gateway.js","geotechnical-data-platform-new/templates/components/blu900gw/create-new-raw-gateway-data-value-form.js","geotechnical-data-platform-new/templates/components/blu900gw/edit-gateway.js","geotechnical-data-platform-new/templates/components/blu900gw/nvd3-temporal-gateway-line-chart.js","geotechnical-data-platform-new/templates/components/blu900gw/raw-gateway-data.js","geotechnical-data-platform-new/templates/components/blu900gw/temporal-gateway-chart-dropdown.js","geotechnical-data-platform-new/templates/components/blu900gw/temporal-gateway-left-axis-dropdown.js","geotechnical-data-platform-new/templates/components/blu900gw/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/templates/components/blu900node/chartjs-temporal-gateway-line-chart.js","geotechnical-data-platform-new/templates/components/blu900node/create-gateway.js","geotechnical-data-platform-new/templates/components/blu900node/create-new-raw-gateway-data-value-form.js","geotechnical-data-platform-new/templates/components/blu900node/edit-gateway.js","geotechnical-data-platform-new/templates/components/blu900node/nvd3-temporal-gateway-line-chart.js","geotechnical-data-platform-new/templates/components/blu900node/raw-gateway-data.js","geotechnical-data-platform-new/templates/components/blu900node/temporal-gateway-chart-dropdown.js","geotechnical-data-platform-new/templates/components/blu900node/temporal-gateway-left-axis-dropdown.js","geotechnical-data-platform-new/templates/components/blu900node/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/templates/components/blucell/chartjs-temporal-gateway-line-chart.js","geotechnical-data-platform-new/templates/components/blucell/create-gateway.js","geotechnical-data-platform-new/templates/components/blucell/create-new-raw-gateway-data-value-form.js","geotechnical-data-platform-new/templates/components/blucell/edit-gateway.js","geotechnical-data-platform-new/templates/components/blucell/nvd3-temporal-gateway-line-chart.js","geotechnical-data-platform-new/templates/components/blucell/raw-gateway-data.js","geotechnical-data-platform-new/templates/components/blucell/temporal-gateway-chart-dropdown.js","geotechnical-data-platform-new/templates/components/blucell/temporal-gateway-left-axis-dropdown.js","geotechnical-data-platform-new/templates/components/blucell/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/templates/components/blugate/chartjs-temporal-gateway-line-chart.js","geotechnical-data-platform-new/templates/components/blugate/create-gateway.js","geotechnical-data-platform-new/templates/components/blugate/create-new-raw-gateway-data-value-form.js","geotechnical-data-platform-new/templates/components/blugate/edit-gateway.js","geotechnical-data-platform-new/templates/components/blugate/nvd3-temporal-gateway-line-chart.js","geotechnical-data-platform-new/templates/components/blugate/raw-gateway-data.js","geotechnical-data-platform-new/templates/components/blugate/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/blugate/temporal-gateway-chart-dropdown.js","geotechnical-data-platform-new/templates/components/blugate/temporal-gateway-left-axis-dropdown.js","geotechnical-data-platform-new/templates/components/blugate/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/templates/components/bluvibe/create-gateway.js","geotechnical-data-platform-new/templates/components/bluvibe/create-new-raw-gateway-data-value-form.js","geotechnical-data-platform-new/templates/components/bluvibe/edit-gateway.js","geotechnical-data-platform-new/templates/components/bluvibe/nvd3-temporal-gateway-line-chart.js","geotechnical-data-platform-new/templates/components/bluvibe/raw-gateway-data.js","geotechnical-data-platform-new/templates/components/bluvibe/temporal-gateway-chart-dropdown.js","geotechnical-data-platform-new/templates/components/bluvibe/temporal-gateway-left-axis-dropdown.js","geotechnical-data-platform-new/templates/components/bluvibe/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/templates/components/bread-crumbs.js","geotechnical-data-platform-new/templates/components/cable/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/cable/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/cable/create-instrument.js","geotechnical-data-platform-new/templates/components/cable/create-new-raw-data-value-form.js","geotechnical-data-platform-new/templates/components/cable/edit-instrument.js","geotechnical-data-platform-new/templates/components/cable/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/cable/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/cable/raw-data.js","geotechnical-data-platform-new/templates/components/cable/spatial-chart-dropdown.js","geotechnical-data-platform-new/templates/components/cable/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/create-alert-profile-form-alert-types.js","geotechnical-data-platform-new/templates/components/create-alert-profile-form.js","geotechnical-data-platform-new/templates/components/create-alert-profile-sidebar.js","geotechnical-data-platform-new/templates/components/create-alert-profile-subforms/dhq-flatline.js","geotechnical-data-platform-new/templates/components/create-alert-profile-subforms/dhq-no-data.js","geotechnical-data-platform-new/templates/components/create-alert-profile-subforms/dhq-spike.js","geotechnical-data-platform-new/templates/components/create-alert-profile-subforms/disp-temp-correlation.js","geotechnical-data-platform-new/templates/components/create-alert-profile-subforms/oor-arbitrary.js","geotechnical-data-platform-new/templates/components/create-alert-profile-subforms/oor-reference.js","geotechnical-data-platform-new/templates/components/create-alert-profile-subforms/roc-rolling.js","geotechnical-data-platform-new/templates/components/create-new-blast-event-form.js","geotechnical-data-platform-new/templates/components/create-new-seismic-event-form.js","geotechnical-data-platform-new/templates/components/data-export-form.js","geotechnical-data-platform-new/templates/components/data-export-gateway-form.js","geotechnical-data-platform-new/templates/components/data-import-form-seis.js","geotechnical-data-platform-new/templates/components/data-import-form.js","geotechnical-data-platform-new/templates/components/data-import-gateway-form.js","geotechnical-data-platform-new/templates/components/data-row-modal.js","geotechnical-data-platform-new/templates/components/dconv/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/dconv/create-instrument.js","geotechnical-data-platform-new/templates/components/dconv/create-new-raw-data-value-form.js","geotechnical-data-platform-new/templates/components/dconv/edit-instrument.js","geotechnical-data-platform-new/templates/components/dconv/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/dconv/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/dconv/raw-data.js","geotechnical-data-platform-new/templates/components/dconv/spatial-chart-dropdown.js","geotechnical-data-platform-new/templates/components/dconv/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/displacement-units-group.js","geotechnical-data-platform-new/templates/components/display-noneditable-numeric.js","geotechnical-data-platform-new/templates/components/dppc/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/dppc/create-instrument.js","geotechnical-data-platform-new/templates/components/dppc/create-new-raw-data-value-form.js","geotechnical-data-platform-new/templates/components/dppc/edit-instrument.js","geotechnical-data-platform-new/templates/components/dppc/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/dppc/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/dppc/raw-data.js","geotechnical-data-platform-new/templates/components/dppc/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/edit-my-profile-contact-modal.js","geotechnical-data-platform-new/templates/components/edit-my-profile-contractors-modal.js","geotechnical-data-platform-new/templates/components/edit-my-profile-group-modal.js","geotechnical-data-platform-new/templates/components/edit-my-profile-user-modal.js","geotechnical-data-platform-new/templates/components/extoBMultiInstrument/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/extoBMultiInstrument/raw-data.js","geotechnical-data-platform-new/templates/components/file-upload-seis.js","geotechnical-data-platform-new/templates/components/file-upload.js","geotechnical-data-platform-new/templates/components/filter-text-input-events.js","geotechnical-data-platform-new/templates/components/filter-text-input-gateway.js","geotechnical-data-platform-new/templates/components/filter-text-input-log-viewer.js","geotechnical-data-platform-new/templates/components/filter-text-input.js","geotechnical-data-platform-new/templates/components/frequency-chart-dropdown.js","geotechnical-data-platform-new/templates/components/frequency-display-records-dropdown.js","geotechnical-data-platform-new/templates/components/frequency-event-tabs.js","geotechnical-data-platform-new/templates/components/gateway-list-children.js","geotechnical-data-platform-new/templates/components/gateway-list.js","geotechnical-data-platform-new/templates/components/gateway-selector.js","geotechnical-data-platform-new/templates/components/getTotalsGateway.js","geotechnical-data-platform-new/templates/components/getTotalsInstruments.js","geotechnical-data-platform-new/templates/components/getTotalsLogViewers.js","geotechnical-data-platform-new/templates/components/have-an-issue.js","geotechnical-data-platform-new/templates/components/hid/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/hid/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/hid/create-instrument.js","geotechnical-data-platform-new/templates/components/hid/create-new-raw-data-value-form.js","geotechnical-data-platform-new/templates/components/hid/edit-instrument.js","geotechnical-data-platform-new/templates/components/hid/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/hid/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/hid/raw-data.js","geotechnical-data-platform-new/templates/components/hid/spatial-chart-dropdown.js","geotechnical-data-platform-new/templates/components/hid/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/influx-readings-with-instrument-id-with-datetime.js","geotechnical-data-platform-new/templates/components/instrument-anchors-diagram.js","geotechnical-data-platform-new/templates/components/instrument-drop-down.js","geotechnical-data-platform-new/templates/components/instruments-list.js","geotechnical-data-platform-new/templates/components/key-import-form.js","geotechnical-data-platform-new/templates/components/key-upload.js","geotechnical-data-platform-new/templates/components/log-viewer-list.js","geotechnical-data-platform-new/templates/components/micro/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/micro/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/micro/create-instrument.js","geotechnical-data-platform-new/templates/components/micro/create-new-raw-data-value-form.js","geotechnical-data-platform-new/templates/components/micro/edit-instrument.js","geotechnical-data-platform-new/templates/components/micro/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/micro/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/micro/raw-data.js","geotechnical-data-platform-new/templates/components/micro/spatial-chart-dropdown.js","geotechnical-data-platform-new/templates/components/micro/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/multiDExto/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/multiDExto/create-instrument.js","geotechnical-data-platform-new/templates/components/multiDExto/dExto-children-table-row.js","geotechnical-data-platform-new/templates/components/multiDExto/dExto-children.js","geotechnical-data-platform-new/templates/components/multiDExto/edit-instrument.js","geotechnical-data-platform-new/templates/components/multiDExto/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/multiDExto/raw-data.js","geotechnical-data-platform-new/templates/components/multiDExto/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/my-profile-sidebar-addon.js","geotechnical-data-platform-new/templates/components/my-profile-sidebar-contacts.js","geotechnical-data-platform-new/templates/components/my-profile-sidebar-contractors.js","geotechnical-data-platform-new/templates/components/my-profile-sidebar-home.js","geotechnical-data-platform-new/templates/components/my-profile-sidebar-more.js","geotechnical-data-platform-new/templates/components/my-profile-sidebar-users.js","geotechnical-data-platform-new/templates/components/my-profile-sidebar.js","geotechnical-data-platform-new/templates/components/navbar.js","geotechnical-data-platform-new/templates/components/oneforone/chartjs-temporal-gateway-line-chart.js","geotechnical-data-platform-new/templates/components/oneforone/create-gateway.js","geotechnical-data-platform-new/templates/components/oneforone/create-new-raw-gateway-data-value-form.js","geotechnical-data-platform-new/templates/components/oneforone/edit-gateway.js","geotechnical-data-platform-new/templates/components/oneforone/nvd3-temporal-gateway-line-chart.js","geotechnical-data-platform-new/templates/components/oneforone/raw-gateway-data.js","geotechnical-data-platform-new/templates/components/oneforone/temporal-gateway-chart-dropdown.js","geotechnical-data-platform-new/templates/components/oneforone/temporal-gateway-left-axis-dropdown.js","geotechnical-data-platform-new/templates/components/oneforone/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/templates/components/pack/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/pack/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/pack/create-instrument.js","geotechnical-data-platform-new/templates/components/pack/create-new-raw-data-value-form.js","geotechnical-data-platform-new/templates/components/pack/edit-instrument.js","geotechnical-data-platform-new/templates/components/pack/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/pack/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/pack/raw-data.js","geotechnical-data-platform-new/templates/components/pack/spatial-chart-dropdown.js","geotechnical-data-platform-new/templates/components/pack/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/page-item-count.js","geotechnical-data-platform-new/templates/components/pagination-links.js","geotechnical-data-platform-new/templates/components/piezo/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/piezo/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/piezo/create-instrument.js","geotechnical-data-platform-new/templates/components/piezo/create-new-raw-data-value-form.js","geotechnical-data-platform-new/templates/components/piezo/edit-instrument.js","geotechnical-data-platform-new/templates/components/piezo/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/piezo/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/piezo/raw-data.js","geotechnical-data-platform-new/templates/components/piezo/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/popup-list.js","geotechnical-data-platform-new/templates/components/production/calibrationMainPage.js","geotechnical-data-platform-new/templates/components/production/packsValidationMainPage.js","geotechnical-data-platform-new/templates/components/progress-bar.js","geotechnical-data-platform-new/templates/components/radio-buttons.js","geotechnical-data-platform-new/templates/components/rate-velocity-units-group.js","geotechnical-data-platform-new/templates/components/raw-drop-down.js","geotechnical-data-platform-new/templates/components/raw-frequency-events-drop-down.js","geotechnical-data-platform-new/templates/components/raw-gateway-drop-down.js","geotechnical-data-platform-new/templates/components/raw-port-drop-down.js","geotechnical-data-platform-new/templates/components/rebar/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/rebar/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/rebar/create-instrument.js","geotechnical-data-platform-new/templates/components/rebar/create-new-raw-data-value-form.js","geotechnical-data-platform-new/templates/components/rebar/edit-instrument.js","geotechnical-data-platform-new/templates/components/rebar/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/rebar/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/rebar/raw-data.js","geotechnical-data-platform-new/templates/components/rebar/spatial-chart-dropdown.js","geotechnical-data-platform-new/templates/components/rebar/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/rebarv2/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/rebarv2/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/rebarv2/create-instrument.js","geotechnical-data-platform-new/templates/components/rebarv2/create-new-raw-data-value-form.js","geotechnical-data-platform-new/templates/components/rebarv2/edit-instrument.js","geotechnical-data-platform-new/templates/components/rebarv2/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/rebarv2/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/rebarv2/raw-data.js","geotechnical-data-platform-new/templates/components/rebarv2/spatial-chart-dropdown.js","geotechnical-data-platform-new/templates/components/rebarv2/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/record-selector.js","geotechnical-data-platform-new/templates/components/searchable-select-option.js","geotechnical-data-platform-new/templates/components/searchable-select.js","geotechnical-data-platform-new/templates/components/selected-dExtos.js","geotechnical-data-platform-new/templates/components/settings-about.js","geotechnical-data-platform-new/templates/components/settings-general.js","geotechnical-data-platform-new/templates/components/settings-more-clear-logs-confirmation-modal.js","geotechnical-data-platform-new/templates/components/settings-more.js","geotechnical-data-platform-new/templates/components/settings-sidebar.js","geotechnical-data-platform-new/templates/components/single-save-checkbox.js","geotechnical-data-platform-new/templates/components/single-save-datetime-picker.js","geotechnical-data-platform-new/templates/components/single-save-gateway-inputs-array-table-row-cells.js","geotechnical-data-platform-new/templates/components/single-save-geo-input.js","geotechnical-data-platform-new/templates/components/single-save-input-InstType.js","geotechnical-data-platform-new/templates/components/single-save-input-numeric.js","geotechnical-data-platform-new/templates/components/single-save-input-password.js","geotechnical-data-platform-new/templates/components/single-save-input.js","geotechnical-data-platform-new/templates/components/single-save-inputs-array-table-row-cells-2.js","geotechnical-data-platform-new/templates/components/single-save-inputs-array-table-row-cells-temperature.js","geotechnical-data-platform-new/templates/components/single-save-inputs-array-table-row-cells.js","geotechnical-data-platform-new/templates/components/single-save-instrument-anchors-rebar.js","geotechnical-data-platform-new/templates/components/single-save-instrument-anchors.js","geotechnical-data-platform-new/templates/components/single-save-interval-dropdown.js","geotechnical-data-platform-new/templates/components/single-save-lookup.js","geotechnical-data-platform-new/templates/components/single-save-select-alt.js","geotechnical-data-platform-new/templates/components/single-save-select-non-model.js","geotechnical-data-platform-new/templates/components/single-save-select.js","geotechnical-data-platform-new/templates/components/single-save-time-picker.js","geotechnical-data-platform-new/templates/components/slough/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/slough/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/slough/create-instrument.js","geotechnical-data-platform-new/templates/components/slough/create-new-raw-data-value-form.js","geotechnical-data-platform-new/templates/components/slough/edit-instrument.js","geotechnical-data-platform-new/templates/components/slough/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/slough/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/slough/raw-data.js","geotechnical-data-platform-new/templates/components/slough/spatial-chart-dropdown.js","geotechnical-data-platform-new/templates/components/slough/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/sortable-table-header.js","geotechnical-data-platform-new/templates/components/spatial-blast-dropdown.js","geotechnical-data-platform-new/templates/components/spatial-chart-dropdown.js","geotechnical-data-platform-new/templates/components/spatial-event-dropdown.js","geotechnical-data-platform-new/templates/components/spatial-group-dropdown.js","geotechnical-data-platform-new/templates/components/spatial-seismic-dropdown.js","geotechnical-data-platform-new/templates/components/spatial-time-dropdown.js","geotechnical-data-platform-new/templates/components/spatial-window-dropdown.js","geotechnical-data-platform-new/templates/components/svg-instrument.js","geotechnical-data-platform-new/templates/components/table-legend-alerts.js","geotechnical-data-platform-new/templates/components/temperature-units-group.js","geotechnical-data-platform-new/templates/components/temporal-blast-dropdown.js","geotechnical-data-platform-new/templates/components/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/temporal-display-records-dropdown.js","geotechnical-data-platform-new/templates/components/temporal-event-dropdown.js","geotechnical-data-platform-new/templates/components/temporal-gateway-chart-dropdown.js","geotechnical-data-platform-new/templates/components/temporal-gateway-left-axis-dropdown.js","geotechnical-data-platform-new/templates/components/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/templates/components/temporal-group-dropdown.js","geotechnical-data-platform-new/templates/components/temporal-seismic-dropdown.js","geotechnical-data-platform-new/templates/components/temporal-window-dropdown.js","geotechnical-data-platform-new/templates/components/thermo/chartjs-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/thermo/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/thermo/create-instrument.js","geotechnical-data-platform-new/templates/components/thermo/create-new-raw-data-value-form.js","geotechnical-data-platform-new/templates/components/thermo/edit-instrument.js","geotechnical-data-platform-new/templates/components/thermo/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/thermo/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/thermo/raw-data.js","geotechnical-data-platform-new/templates/components/thermo/spatial-chart-dropdown.js","geotechnical-data-platform-new/templates/components/thermo/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/threeD.js","geotechnical-data-platform-new/templates/components/tilt/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/tilt/create-instrument.js","geotechnical-data-platform-new/templates/components/tilt/create-new-raw-data-value-form.js","geotechnical-data-platform-new/templates/components/tilt/edit-instrument.js","geotechnical-data-platform-new/templates/components/tilt/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/tilt/raw-data.js","geotechnical-data-platform-new/templates/components/tilt/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/time-units-group.js","geotechnical-data-platform-new/templates/components/vendor-instrument.js","geotechnical-data-platform-new/templates/components/vibe/chartjs-frequency-chart.js","geotechnical-data-platform-new/templates/components/vibe/chartjs-temporal-gateway-line-chart.js","geotechnical-data-platform-new/templates/components/vibe/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/vibe/create-gateway.js","geotechnical-data-platform-new/templates/components/vibe/create-instrument.js","geotechnical-data-platform-new/templates/components/vibe/create-new-raw-data-value-form.js","geotechnical-data-platform-new/templates/components/vibe/create-new-raw-gateway-data-value-form.js","geotechnical-data-platform-new/templates/components/vibe/echarts-frequency-event.js","geotechnical-data-platform-new/templates/components/vibe/edit-gateway.js","geotechnical-data-platform-new/templates/components/vibe/edit-instrument.js","geotechnical-data-platform-new/templates/components/vibe/frequency-chart-dropdown.js","geotechnical-data-platform-new/templates/components/vibe/frequency-events-dropdown.js","geotechnical-data-platform-new/templates/components/vibe/nvd3-frequency-line-chart.js","geotechnical-data-platform-new/templates/components/vibe/nvd3-temporal-gateway-line-chart.js","geotechnical-data-platform-new/templates/components/vibe/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/vibe/raw-data.js","geotechnical-data-platform-new/templates/components/vibe/raw-frequency-events-data.js","geotechnical-data-platform-new/templates/components/vibe/raw-gateway-data.js","geotechnical-data-platform-new/templates/components/vibe/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/components/vibe/temporal-gateway-chart-dropdown.js","geotechnical-data-platform-new/templates/components/vibe/temporal-gateway-left-axis-dropdown.js","geotechnical-data-platform-new/templates/components/vibe/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/templates/components/wire-single-save-inputs-array-table-row-cells.js","geotechnical-data-platform-new/templates/components/wire/chartjs-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/wire/create-instrument.js","geotechnical-data-platform-new/templates/components/wire/create-new-raw-data-value-form.js","geotechnical-data-platform-new/templates/components/wire/edit-instrument-port-drop-down.js","geotechnical-data-platform-new/templates/components/wire/edit-instrument-tabs.js","geotechnical-data-platform-new/templates/components/wire/edit-instrument.js","geotechnical-data-platform-new/templates/components/wire/geo-pt-edit.js","geotechnical-data-platform-new/templates/components/wire/nvd3-spatial-line-chart.js","geotechnical-data-platform-new/templates/components/wire/nvd3-temporal-line-chart.js","geotechnical-data-platform-new/templates/components/wire/raw-data-dropdown.js","geotechnical-data-platform-new/templates/components/wire/raw-data.js","geotechnical-data-platform-new/templates/components/wire/roc-jms-edit.js","geotechnical-data-platform-new/templates/components/wire/roc-pws-edit.js","geotechnical-data-platform-new/templates/components/wire/rst-pt-edit.js","geotechnical-data-platform-new/templates/components/wire/spatial-chart-dropdown.js","geotechnical-data-platform-new/templates/components/wire/temporal-chart-dropdown.js","geotechnical-data-platform-new/templates/contact-us.js","geotechnical-data-platform-new/templates/create-alert-profile.js","geotechnical-data-platform-new/templates/create-gateway.js","geotechnical-data-platform-new/templates/create-instrument.js","geotechnical-data-platform-new/templates/create-lookup.js","geotechnical-data-platform-new/templates/dash-map.js","geotechnical-data-platform-new/templates/edit-alert-profile.js","geotechnical-data-platform-new/templates/edit-gateway.js","geotechnical-data-platform-new/templates/edit-instrument.js","geotechnical-data-platform-new/templates/edit-lookups.js","geotechnical-data-platform-new/templates/forgot-password.js","geotechnical-data-platform-new/templates/frequency-events.js","geotechnical-data-platform-new/templates/frequency-events/frequency-event.js","geotechnical-data-platform-new/templates/frequency-events/frequency-graph-loading.js","geotechnical-data-platform-new/templates/frequency-graphs.js","geotechnical-data-platform-new/templates/frequency-graphs/frequency-graph-loading.js","geotechnical-data-platform-new/templates/frequency-graphs/frequency-graph.js","geotechnical-data-platform-new/templates/gateway.js","geotechnical-data-platform-new/templates/have-an-issue.js","geotechnical-data-platform-new/templates/index.js","geotechnical-data-platform-new/templates/instruments.js","geotechnical-data-platform-new/templates/keys.js","geotechnical-data-platform-new/templates/list-lookups.js","geotechnical-data-platform-new/templates/log-viewer.js","geotechnical-data-platform-new/templates/login.js","geotechnical-data-platform-new/templates/my-profile.js","geotechnical-data-platform-new/templates/packs-validation-analytics.js","geotechnical-data-platform-new/templates/packs-validation.js","geotechnical-data-platform-new/templates/raw-data.js","geotechnical-data-platform-new/templates/raw-frequency-events-data.js","geotechnical-data-platform-new/templates/raw-gateway-data.js","geotechnical-data-platform-new/templates/register.js","geotechnical-data-platform-new/templates/reset-password.js","geotechnical-data-platform-new/templates/seismic-events.js","geotechnical-data-platform-new/templates/sensor-calibration-analytics.js","geotechnical-data-platform-new/templates/sensor-calibration.js","geotechnical-data-platform-new/templates/settings.js","geotechnical-data-platform-new/templates/spatial-graphs.js","geotechnical-data-platform-new/templates/spatial-graphs/spatial-graph-loading.js","geotechnical-data-platform-new/templates/spatial-graphs/spatial-graph.js","geotechnical-data-platform-new/templates/temporal-gateway-graphs.js","geotechnical-data-platform-new/templates/temporal-gateway-graphs/temporal-gateway-graph-loading.js","geotechnical-data-platform-new/templates/temporal-gateway-graphs/temporal-gateway-graph.js","geotechnical-data-platform-new/templates/temporal-gateway-right-axis-dropdown.js","geotechnical-data-platform-new/templates/temporal-graphs.js","geotechnical-data-platform-new/templates/temporal-graphs/temporal-graph-loading.js","geotechnical-data-platform-new/templates/temporal-graphs/temporal-graph.js","geotechnical-data-platform-new/templates/vibration-events.js","geotechnical-data-platform-new/transforms/boolean.js","geotechnical-data-platform-new/transforms/date.js","geotechnical-data-platform-new/transforms/digits.js","geotechnical-data-platform-new/transforms/number.js","geotechnical-data-platform-new/transforms/object.js","geotechnical-data-platform-new/transforms/string.js","geotechnical-data-platform-new/transforms/text.js","geotechnical-data-platform-new/uploaders/s3.js","geotechnical-data-platform-new/uploaders/uploader.js","geotechnical-data-platform-new/utils/alert-evaluation-types-translation.js","geotechnical-data-platform-new/utils/api-config.js","geotechnical-data-platform-new/utils/color-palette.js","geotechnical-data-platform-new/utils/inject.js","geotechnical-data-platform-new/utils/instrument-id.js","geotechnical-data-platform-new/utils/is-fastboot.js","geotechnical-data-platform-new/utils/location.js","geotechnical-data-platform-new/utils/objects-are-equal.js","vendor/ember-cli/app-suffix.js","vendor/ember-cli/app-config.js","vendor/ember-cli/app-boot.js"],"sourcesContent":["'use strict';\n\n\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/instruments/' + query.instrument_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import ApplicationAdapter from './application';\n\nexport default class AlertEventAdapter extends ApplicationAdapter {\n\n  buildURL(modelName, id, snapshot, requestType, query) {\n\n    // All Events\n    if (!id) {\n      return `${this.host}/alerts-events/`;\n    }\n    // ID Specific Events\n    return `${this.host}/alerts-events/${id}/`;\n  }\n\n}","// app/adapters/alert.js\nimport ApplicationAdapter from './application';\n\nexport default class AlertAdapter extends ApplicationAdapter {\n\n  buildURL(modelName, id, snapshot, requestType, query) {\n    // Single alert (GET / PATCH / DELETE)\n    if (id) {\n      return `${this.host}/alerts/${id}/`;\n    }\n\n    // Collection (GET list)\n    return `${this.host}/alerts/`;\n  }\n\n  createRecord(store, type, snapshot) {\n    const data = {};\n    const serializer = store.serializerFor(type.modelName);\n\n    serializer.serializeIntoHash(data, type, snapshot, { includeId: true });\n\n    const url = `${this.host}/alerts/create/`;\n    return this.ajax(url, 'POST', { data });\n  }\n\n  updateRecord(store, type, alert) {\n    const data = {};\n    const serializer = store.serializerFor(type.modelName);\n\n    serializer.serializeIntoHash(data, type, alert, { includeId: true });\n\n    const id = alert.id;\n    const url = `${this.host}/alerts/${id}/`;\n\n    return this.ajax(url, 'PATCH', { data });\n  }\n\n  deleteRecord(store, type, alert) {\n    const id = alert.id;\n    const url = `${this.host}/alerts/${id}/`;\n\n    return this.ajax(url, 'DELETE');\n  }\n\n  updateChannels(alertId, channels) {\n    const url = `${this.host}/alerts/${alertId}/channels/`;\n\n    return this.ajax(url, 'PATCH', {\n      contentType: 'application/json',\n      data: {\n        channels: channels\n      }\n    });\n  }\n}","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport DS from 'ember-data';\n\n\nexport default DS.JSONAPIAdapter.extend({\n    host: getApiBaseUrl(),\n    session: service(),\n\n    buildURL(type, id, record) {\n    return this._super(type, id, record) + '/';\n    },\n\n    headers: computed(function () {\n    return {\n        Accept: 'application/vnd.api+json',\n        withCredentials: true,\n        Authorization: `Bearer ${localStorage.token}`\n    };\n    }),\n\n    query(store, type, query) {\n    return this._super(store, type, query).then(function(payload) {\n        if (payload && payload.data && !Array.isArray(payload.data)) {\n            payload.data = [payload.data];\n        }\n        return payload;\n    });\n    },\n\n    handleResponse(status, headers, payload, requestData) {\n    if (requestData?.url?.includes('/api/logout')) {\n        return this._super(status, headers, payload, requestData);\n    }\n\n    if (status === 401 && this.session.isAuthenticated) {\n        this.session.invalidate();\n    }\n\n    return this._super(status, headers, payload, requestData);\n    }\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/instruments/' + query.instrument_id + '/' + pluralize(modelName) + '/';\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/instruments/' + query.instrument_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/instruments/' + query.instrument_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/bluvibev2s/' + query.instrument_id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/bluvibev2s/' + query.instrument_id + '/';\n        }\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { isPresent } from '@ember/utils';\nimport ApplicationAdapter from './application';\n\nexport default class CalibrationCalibrationProfileAdapter extends ApplicationAdapter {\n  handleResponse(status, headers, payload, requestData) {\n    if (status === 403) {\n      const error = {\n        errors: payload.errors || [\n          {\n            status: `${status}`,\n            title: 'Forbidden',\n            detail: 'You do not have permission to perform this action.',\n          },\n        ],\n      };\n      return error; // Pass the formatted error object\n    }\n    return super.handleResponse(status, headers, payload, requestData);\n  }\n}\n","import { isPresent } from '@ember/utils';\nimport ApplicationAdapter from './application';\n\nexport default class CalibrationTypeAdapter extends ApplicationAdapter {\n  handleResponse(status, headers, payload, requestData) {\n    if (status === 403) {\n      const error = {\n        errors: payload.errors || [\n          {\n            status: `${status}`,\n            title: 'Forbidden',\n            detail: 'You do not have permission to perform this action.',\n          },\n        ],\n      };\n      return error; // Pass the formatted error object\n    }\n    return super.handleResponse(status, headers, payload, requestData);\n  }\n}\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/instruments/' + query.instrument_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/bluvibe/instrument_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/bluvibe/instrument_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/instruments/bluvibe/' + query.instrument_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/bluvibe/instrument_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/bluvibe/instrument_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/instruments/bluvibe/' + query.instrument_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/bluvibe/instrument_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/bluvibe/instrument_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/instruments/bluvibe/' + query.instrument_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/gateways/' + query.gateway_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/bluvibe/instrument_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/bluvibe/instrument_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/instruments/bluvibe/' + query.instrument_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/bluvibe/instrument_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/bluvibe/instrument_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/instruments/bluvibe/' + query.instrument_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        // console.log(\"in buildURL: modelName: \" + modelName + \"  ID: \" + id + \"  requestType: \" + requestType + \"  query: \" + query)\n        if (requestType === 'createRecord') {\n        //  console.log(\"gateway_value adapter createRecord modelName: \" + modelName);\n          return this.host + '/gateway/gateway_id/' + modelName + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n        // console.log(\"gateway_value adapter update modelName: \" + modelName);\n          return this.host + '/gateway/gateway_id/' + modelName + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n        //  console.log(\"gateway_value adapter undefined modelName: \" + modelName);\n          return this.host + '/gateway/' + query.gateway_id + '/' + modelName + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n    \n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/gateways/' + query.gateway_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            // console.log(\"Create record:::::::::::::::::::: \" + this.host + '/gateway/');\n            return this.host + '/gateway/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/gateway/gateway_id/';\n        }\n        if (typeof id !== 'undefined' && id !== null) {\n            return this.host + '/gateway/' + id + '/';\n        }\n        if (typeof query === 'undefined') {\n            return this.host + '/gateway/';\n        }\n        if (typeof query.gateway_id === 'undefined') {\n            return this.host + '/gateway/';\n        } else {\n            return this.host + '/gateway/' + query.gateway_id + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n        // console.log(\"Create record:::::::::::::::::::: \" + url  + \" \" + snapshot + \" \" + JSON.stringify(data)    );\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (id) {\n            url = url.replace(\"gateway_id\", id);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n        // console.log(\"Delete record:::::::::::::::::::: \");\n \n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (id) {\n            url = url.replace(\"gateway_id\", id);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/instrument_id/';\n        }\n        if (typeof id !== 'undefined' && id !== null) {\n            return this.host + '/instruments/' + id + '/';\n        }\n        if (typeof query === 'undefined') {\n            return this.host + '/instruments/';\n        }\n        if (typeof query.instrument_id === 'undefined') {\n            return this.host + '/instruments/';\n        } else {\n            // console.log(\"requestType: \" + requestType)\n            // console.log(\"query: \" + this.host + '/instruments/' + query.instrument_id + '/')\n        \n            return this.host + '/instruments/' + query.instrument_id + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (id) {\n            url = url.replace(\"instrument_id\", id);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n        if (id) {\n            url = url.replace(\"instrument_id\", id);\n        }\n        // console.log(\"Delete record:::::::::::::::::::: \" + url);\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n    query(store, type, query) {\n        // If it's a search request\n        if (query.search) {\n            return this.ajax(`${this.host}/instruments/`, 'GET', {\n            data: {\n                search: query.search,\n                page_size: query.page_size || 5,\n                page: query.page || 1\n            }\n            });\n        }\n\n        // Fallback to default behaviour\n        return this._super(...arguments);\n    }\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/instruments/' + query.instrument_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/log-viewers/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/log-viewers/log-viewers_id/';\n        }\n        if (typeof id !== 'undefined' && id !== null) {\n            return this.host + '/log-viewers/' + id + '/';\n        }\n        if (typeof query === 'undefined') {\n            return this.host + '/log-viewers/';\n        }\n        // console.log(\"query::: \" + JSON.stringify(query))\n        if (typeof query.logViewer_id === 'undefined') {\n            return this.host + '/log-viewers/';\n        } else {\n            return this.host + '/log-viewers/' + query.logViewer_id + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"log-viewers_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (id) {\n            url = url.replace(\"log-viewers_id\", id);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n        if (id) {\n            url = url.replace(\"log-viewers_id\", id);\n        }\n        // console.log(\"Delete record:::::::::::::::::::: \" + url);\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { isPresent } from '@ember/utils';\nimport ApplicationAdapter from './application';\n\nexport default class PackValidationTypeAdapter extends ApplicationAdapter {\n  handleResponse(status, headers, payload, requestData) {\n    if (status === 403) {\n      const error = {\n        errors: payload.errors || [\n          {\n            status: `${status}`,\n            title: 'Forbidden',\n            detail: 'You do not have permission to perform this action.',\n          },\n        ],\n      };\n      return error; // Pass the formatted error object\n    }\n    return super.handleResponse(status, headers, payload, requestData);\n  }\n}\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/gateways/' + query.gateway_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/gateways/' + query.gateway_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { isPresent } from '@ember/utils';\nimport ApplicationAdapter from './application';\n\nexport default class RigProfileAdapter extends ApplicationAdapter {\n  handleResponse(status, headers, payload, requestData) {\n    if (status === 403) {\n      const error = {\n        errors: payload.errors || [\n          {\n            status: `${status}`,\n            title: 'Forbidden',\n            detail: 'You do not have permission to perform this action.',\n          },\n        ],\n      };\n      return error; // Pass the formatted error object\n    }\n    return super.handleResponse(status, headers, payload, requestData);\n  }\n}\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/gateways/' + query.gateway_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/instruments/' + query.instrument_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/instruments/' + query.instrument_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/gateways/' + query.gateway_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/gateways/' + query.gateway_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n        // console.log(\"URL::: \" + url);\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/instruments/' + query.instrument_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/gateways/' + query.gateway_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/gateways/' + query.gateway_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/instruments/instrument_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/instruments/' + query.instrument_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"instrument_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        // console.log(\"host: \", this.host);\n        if (requestType === 'createRecord') {\n            return this.host + '/vendors/vendor_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/vendors/vendor_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        \n        if (query!=null && query != undefined) {\n            if(query.vendorType == 'GENERIC') {\n                // console.log(\"Query: \", query);\n                // console.log(\"host: \", this.host);\n                let vendorType = query.vendorType;\n                delete query.vendorType;\n                // console.log(\"Using custom URL for vendorType:\", vendorType);\n                return this.host + '/vendors/get_by_vendor_type/?vendorType=' + vendorType;\n            }\n        }\n\n        if (typeof query === 'undefined') {\n            // BE endpoint is `/vendors/`. The previous version appended pluralize(modelName)\n            // which produced `/vendors/vendors/` for the vendor model — 404.\n            return this.host + '/vendors/';\n        }\n    },\n  \n});","import { computed } from '@ember/object';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport ApplicationAdapter from './application';\n\nexport default ApplicationAdapter.extend({\n    buildURL: function(modelName, id, snapshot, requestType, query) {\n        if (requestType === 'createRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/';\n        }\n        if (requestType === 'updateRecord' || requestType === 'deleteRecord') {\n            return this.host + '/gateways/gateway_id/' + pluralize(modelName) + '/' + snapshot.id + '/';\n        }\n        if (typeof query !== 'undefined') {\n            return this.host + '/gateways/' + query.gateway_id + '/' + pluralize(modelName) + '/';\n        }\n    },\n    createRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'createRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'POST', {data: data});\n    },\n    updateRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'PATCH', {data: data});\n    },\n    deleteRecord(store, type, snapshot) {\n\n        const data = {};\n        const serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, {includeId: true});\n\n        const id = snapshot.id;\n        let url = this.buildURL(type.modelName, id, snapshot, 'deleteRecord');\n\n        if (snapshot.adapterOptions) {\n            url = url.replace(\"gateway_id\", snapshot.adapterOptions);\n        }\n\n        return this.ajax(url, 'DELETE', {data: data});\n    },\n});\n","import Application from '@ember/application';\nimport Resolver from 'ember-resolver';\nimport loadInitializers from 'ember-load-initializers';\nimport config from './config/environment';\nimport { registerDeprecationHandler } from '@ember/debug';\n\n// Silence noisy Ember Data / warp-drive deprecations that fire on every store request.\n// These require a full serializer-to-request-handler migration and are safe to suppress for now.\nregisterDeprecationHandler((message, options, next) => {\n    if (options?.id === 'warp-drive:deprecate-legacy-request-methods') return;\n    next(message, options);\n});\n\nexport default class App extends Application {\n  modulePrefix = config.modulePrefix;\n  podModulePrefix = config.podModulePrefix;\n  Resolver = Resolver;\n}\n\nloadInitializers(App, config.modulePrefix);\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getApiBaseUrl } from '../utils/api-config';\n// app/authenticators/custom.js\nimport EmberObject from '@ember/object';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\nimport Base from 'ember-simple-auth/authenticators/base';\nimport base64 from 'base-64';\n\n\nexport default class BasicAuth extends Base {\n    @service session;\n    @service userProfileService;\n    @service api;\n\n    provider = \"\";\n\n    restore(data) {\n        //console.log('restore');\n        if(data) {\n            let promise = new Promise(function(resolve, reject) {\n                if (data['auth'] == true) {\n                    resolve(data);\n                } else {\n                    reject(new Error(\"session no longer exists\"));\n                }\n            });\n            return promise;\n        }\n    }\n\n    async invalidate(data) {\n        try {\n            // If there is no access token, just clear storage and exit\n            if (!data?.access) {\n            localStorage.removeItem('token');\n            localStorage.removeItem('refresh');\n            return;\n            }\n\n            const logoutUrl = `${getApiBaseUrl()}/api/logout`;\n\n            const refreshToken = localStorage.getItem('refresh')?.replace(/^\"|\"$/g, '');\n\n            await this.api.fetch(logoutUrl, {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application/json',\n                'Authorization': `Bearer ${data.access}`,\n            },\n            body: JSON.stringify({\n                data: {\n                type: 'logout-request',\n                attributes: {\n                    code: refreshToken,\n                },\n                },\n            }),\n            });\n        } catch (error) {\n            // Logout endpoint failure should NOT block local logout\n            console.warn('Logout request failed, continuing local logout', error);\n        } finally {\n            // Always clear local state\n            localStorage.removeItem('token');\n            localStorage.removeItem('refresh');\n        }\n    }\n\n\n    // async invalidate() {\n    //     if (!data?.access) {\n    //     return;\n    //     }\n    //     const logoutWithToken = `${getApiBaseUrl()}/api/logout`;\n            \n    //     let refreshToken = localStorage.getItem('refresh');\n    //     refreshToken = refreshToken.replace(/^\"|\"$/g, '');\n    //     const postData = {\n    //         data: {\n    //           type: 'logout-request',  // This should match the type your API expects\n    //           attributes: {\n    //             code: JSON.stringify(refreshToken)\n    //           }\n    //         }\n    //       };\n          \n    //       this.api.fetch(logoutWithToken, {\n    //         method: 'POST',\n    //         headers: {\n    //           'Content-Type': 'application/json',  // Set the correct content type for JSON:API\n    //           'Authorization': `Bearer ${localStorage.getItem('token')}` // Assuming you use token authentication\n    //         },\n    //         body: JSON.stringify(postData),\n    //         data: JSON.stringify(postData)\n    //       }).then(response => {\n    //         if (!response.ok) {\n    //           throw new Error('Logout failed with status:', response.status);\n    //         }\n    //         return response.json();  // Optionally process the response further\n    //       }).then(data => {\n    //         console.log('Logout successful', data);\n    //         localStorage.removeItem('token'); // Clear the token from local storage on logout\n    //         resolve();\n    //       }).catch(error => {\n    //         console.error('Logout request failed:', error);\n    //         reject(error);\n    //       });   \n    // }\n\n\n\n    async authenticate(provider, options) {\n        let jwtExchangeUrl = `${getApiBaseUrl()}/api/token/`; // JWT exchange endpoint\n        \n        //  basic-auth\n        this.provider = provider; \n\n        let credentials = base64.encode(`${options.username}:${options.password}`);\n\n        // Request for JWT\n        let jwtResponse = await this.api.fetch(jwtExchangeUrl, {\n            method: 'POST',\n            headers: {\n                'Authorization': `Basic ${credentials}`,\n                'Content-Type': 'application/json'\n            },\n        });\n\n        if (!jwtResponse.ok) {\n            let errorText = await jwtResponse.text();\n            throw new Error(errorText);\n        }\n\n        // Assuming jwtResponse includes 'access' token\n        let { refresh, access } = await jwtResponse.json();\n        // console.log(\"Access:  \" + access);\n        // console.log(\"Refresh:  \" + refresh);\n        localStorage.setItem('token', access); // Store JWT access token for later use\n        localStorage.setItem('refresh', refresh); // Store JWT Refresh token for later use\n        \n        // Now, make a separate request to the `licences/` endpoint using the JWT\n        let licensesUrl = `${getApiBaseUrl()}/licences/`; // Adjust to your actual licenses endpoint\n\n        let licenseResponse = await this.api.fetch(licensesUrl, {\n            method: 'GET',\n            headers: {\n                'Authorization': `Bearer ${access}`, // Use the JWT for authorization\n                'Content-Type': 'application/json'\n            },\n        });\n\n        if (!licenseResponse.ok) {\n            let errorText = await licenseResponse.text();\n            throw new Error(errorText);\n        }\n\n        // Assuming licenseResponse contains the license information\n        let expirationTime = ( 60 * 10 );\n        this.set('session.store.cookieExpirationTime', expirationTime);\n        let licence;\n        let isValid = false;\n        let limit = 0;\n        let modules = {};\n        try {\n            licence = await licenseResponse.json();\n            licence = licence.data[0];\n            // console.log(licence)\n            isValid = licence.attributes['is-valid'];\n            limit = licence.attributes['within-limit'];\n            modules = licence.attributes['modules'];\n        } catch (ex) {\n        }\n        this.set('session.store.cookieExpirationTime', expirationTime);\n        // Now, make a separate request to the `licences/` endpoint using the JWT\n        let userProfileURL = `${getApiBaseUrl()}/api/auth/user/profile/`; // Adjust to your actual licenses endpoint\n\n        let userProfileResponse = await this.api.fetch(userProfileURL, {\n            method: 'GET',\n            headers: {\n                'Authorization': `Bearer ${access}`, // Use the JWT for authorization\n                'Content-Type': 'application/json'\n            },\n        });\n\n        if (!userProfileResponse.ok) {\n            let errorText = await userProfileResponse.text();\n            throw new Error(errorText);\n        }\n        let userProfileData = await userProfileResponse.json();\n        this.userProfileService.loadFromServer(userProfileData);\n\n        // Return the authentication data along with the license data\n        let sessionData = {\n            auth: true,\n            user:options.username,\n            isValid:isValid, \n            limit:limit, \n            modules:modules,\n            access, // Access token\n            licence, // Add the license data to the return object\n            provider:this.provider,\n            userProfile: userProfileData\n        };\n        return sessionData;\n    }\n}","import { getApiBaseUrl } from '../utils/api-config';\nimport { inject as service } from '@ember/service';\n// app/authenticators/jwt.js\nimport BaseAuthenticator from \"ember-simple-auth/authenticators/base\";\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default class JwtAuthenticator extends BaseAuthenticator {\n  @service session;\n  @service userProfileService;\n  @service api;\n\n  /**\n   * Restore a saved session\n   */\n  async restore(data) {\n    if (!data?.access) {\n      throw \"No active session\";\n    }\n\n    const licensesUrl = `${getApiBaseUrl()}/licence/`; // singular\n\n    try {\n      let response = await this.api.fetch(licensesUrl, {\n        method: \"GET\",\n        headers: {\n          Authorization: `Bearer ${data.access}`,\n          \"Content-Type\": \"application/json\",\n        },\n      });\n\n      let isValid = false;\n      let limit = false;\n      let modules = {};\n      let licence = null;\n\n      if (response.ok) {\n        let json = await response.json();\n        if (json.data?.[0]) {\n          licence = json.data[0];\n          isValid = licence.attributes[\"is-valid\"];\n          limit = licence.attributes[\"within-limit\"];\n          modules = licence.attributes[\"modules\"];\n        }\n      }\n\n      return {\n        ...data,\n        isValid,\n        limit,\n        modules,\n        licence\n      };\n\n    } catch (e) {\n      console.warn(\"Licence refresh failed during restore\", e);\n      return data; // fallback to previous data\n    }\n  }\n  // restore(data) {\n  //   return new Promise((resolve, reject) => {\n  //     if (data?.access) {\n  //       resolve(data);\n  //     } else {\n  //       reject(\"No active session\");\n  //     }\n  //   });\n  // }\n\n  /**\n   * Invalidate (logout)\n   */\n\n  async invalidate(data) {\n      try {\n          // If there is no access token, just clear storage and exit\n          if (!data?.access) {\n          localStorage.removeItem('token');\n          localStorage.removeItem('refresh');\n          return;\n          }\n\n          const logoutUrl = `${getApiBaseUrl()}/api/logout`;\n\n          const refreshToken = localStorage.getItem('refresh')?.replace(/^\"|\"$/g, '');\n\n          await this.api.fetch(logoutUrl, {\n          method: 'POST',\n          headers: {\n              'Content-Type': 'application/json',\n              'Authorization': `Bearer ${data.access}`,\n          },\n          body: JSON.stringify({\n              data: {\n              type: 'logout-request',\n              attributes: {\n                  code: refreshToken,\n              },\n              },\n          }),\n          });\n      } catch (error) {\n          // Logout endpoint failure should NOT block local logout\n          console.warn('Logout request failed, continuing local logout', error);\n      } finally {\n          // Always clear local state\n          localStorage.removeItem('token');\n          localStorage.removeItem('refresh');\n      }\n  }\n  // async invalidate(data) {\n  //   if (!data?.access) {\n  //     return;\n  //   }\n  //   const logoutUrl = `${getApiBaseUrl()}/api/logout`;\n\n  //   try {\n  //     await this.api.fetch(logoutUrl, {\n  //       method: \"POST\",\n  //       headers: {\n  //         \"Content-Type\": \"application/json\",\n  //         Authorization: `Bearer ${data.access}`,\n  //       },\n  //       body: JSON.stringify({\n  //         data: {\n  //           type: \"logout\",\n  //           attributes: { code: data.refresh },\n  //         },\n  //       }),\n  //     });\n  //   } catch (e) {\n  //     console.warn(\"Logout request failed but session will still be cleared\");\n  //   }\n\n  //   return Promise.resolve();\n  // }\n\n  /**\n   * Authenticate → Login → Fetch Licence → Fetch Profile\n   */\n  async authenticate(options) {\n    const loginUrl = `${getApiBaseUrl()}/api/oauth-providers/token_exchange/`;\n\n    // --- STEP 1: Login and get JWT ---\n    let loginResponse = await this.api.fetch(loginUrl, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({\n        username: options.username,\n        password: options.password,\n      }),\n    });\n\n    if (!loginResponse.ok) {\n      let err = await loginResponse.json().catch(() => ({}));\n      throw new Error(err.error || \"Invalid username/password.\");\n    }\n\n    let { access, refresh } = await loginResponse.json();\n\n    // -- (OPTIONAL) Store tokens in localStorage for compatibility\n    localStorage.setItem(\"token\", access);\n    localStorage.setItem(\"refresh\", refresh);\n\n    // --- STEP 2: Fetch License Info ---\n    const licensesUrl = `${getApiBaseUrl()}/licences/`;\n\n    let licenseResponse = await this.api.fetch(licensesUrl, {\n      method: \"GET\",\n      headers: {\n        Authorization: `Bearer ${access}`,\n        \"Content-Type\": \"application/json\",\n      },\n    });\n\n    let licence = null;\n    let isValid = false;\n    let limit = 0;\n    let modules = {};\n\n    if (licenseResponse.ok) {\n      let data = await licenseResponse.json();\n      if (data.data?.[0]) {\n        licence = data.data[0];\n        isValid = licence.attributes[\"is-valid\"];\n        limit = licence.attributes[\"within-limit\"];\n        modules = licence.attributes[\"modules\"];\n      }\n    }\n\n    // --- STEP 3: Fetch User Profile ---\n    const profileUrl = `${getApiBaseUrl()}/api/auth/user/profile/`;\n\n    let userProfileResponse = await this.api.fetch(profileUrl, {\n      method: \"GET\",\n      headers: {\n        Authorization: `Bearer ${access}`,\n        \"Content-Type\": \"application/json\",\n      },\n    });\n\n    if (!userProfileResponse.ok) {\n        let errorText = await userProfileResponse.text();\n        throw new Error(errorText);\n    }\n    let userProfileData = await userProfileResponse.json();\n    this.userProfileService.loadFromServer(userProfileData);\n\n    // Return the authentication data along with the license data\n    let sessionData = {\n        auth: true,\n        user:options.username,\n        isValid:isValid, \n        limit:limit, \n        modules:modules,\n        access, // Access token\n        licence, // Add the license data to the return object\n        provider:this.provider,\n        userProfile: userProfileData\n    };\n    return sessionData;\n  }\n}\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getApiBaseUrl } from '../utils/api-config';\n// app/authenticators/custom.js\nimport EmberObject from '@ember/object';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\nimport Base from 'ember-simple-auth/authenticators/base';\nimport base64 from 'base-64';\n\nconst {\n    $,\n    RSVP,\n  } = Ember;\n  \nexport default class CustomAuthenticator extends Base {\n    @service session;\n\n    restore(data) {\n        //console.log('restore');\n        if(data) {\n            let promise = new Promise(function(resolve, reject) {\n                if (data['auth'] == true) {\n                    resolve(data);\n                } else {\n                    reject(new Error(\"session no longer exists\"));\n                }\n            });\n            return promise;\n        }\n    }\n    \n    async authenticate(auth) {\n        //console.log('authenticate');\n\n        return new RSVP.Promise((resolve, reject) => {\n            return $.ajax('http://localhost:4200/api/oauth-providers/', {\n            type: 'POST',\n            data: {\n                username: auth[0], //TESTING ONLY\n                password: auth[1] //TESTING ONLY\n            },\n            success: resolve,\n            error: reject\n            });\n        }).then(async (data)=>{\n            // console.log(\"data response is::::\");\n            // console.log(data['access']);\n            localStorage.setItem('token', data['access']);\n\n            let url = getApiBaseUrl();\n            // let url = \"http://\" + document.location.host.split(':')[0] + \":8000\";\n            url += url.endsWith(\"/\") ? \"\" : \"/\";\n            url += \"licences/\";\n            let login = base64.encode(auth[0]+\":\"+auth[1]);\n    \n            let response = await this.api.fetch(url, {\n                method: 'GET',\n                headers: {\n                    'Content-Type': 'application/json',\n                    Authorization: 'Bearer ' + localStorage.token  \n                },\n            });\n            if (response.ok) {\n                let expirationTime = ( 60 * 10 );\n                this.set('session.store.cookieExpirationTime', expirationTime);\n                let licence;\n                let isValid = false;\n                let limit = 0;\n                let modules = {};\n                try {\n                    licence = await response.json();\n                    licence = licence.data[0];\n                    isValid = licence.attributes['is-valid'];\n                    limit = licence.attributes['within-limit'];\n                    modules = licence.attributes['modules'];\n                } catch (ex) {\n                }\n                return { auth: true, user: auth[0], isValid:isValid, limit:limit, modules:modules, login:login };\n            } else {\n                let error = await response.text();\n                //console.log('error');\n                try {\n                    let er = JSON.parse(error);\n                    if (er.hasOwnProperty('detail')) {\n                        error = er.detail;\n                    }\n                } catch(error) {\n                    //console.log(error);\n                    //error = errorText;\n                }\n                throw new Error(error);\n            }\n        });\n\n\n    }\n}","import { getApiBaseUrl } from '../utils/api-config';\nimport { inject as service } from '@ember/service';\n// app/authenticators/oauth-jwt.js\nimport BaseAuthenticator from \"ember-simple-auth/authenticators/base\";\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default class OAuthJwtAuthenticator extends BaseAuthenticator {\n  @service torii;\n  @service session;\n  @service oauthConfig; // <-- NEW dynamic provider config service\n  @service api;\n  async restore(data) {\n    if (!data?.access) {\n      throw \"No active session\";\n    }\n\n    const licensesUrl = `${getApiBaseUrl()}/licence/`; // singular\n\n    try {\n      let response = await this.api.fetch(licensesUrl, {\n        method: \"GET\",\n        headers: {\n          Authorization: `Bearer ${data.access}`,\n          \"Content-Type\": \"application/json\",\n        },\n      });\n\n      let isValid = false;\n      let limit = false;\n      let modules = {};\n      let licence = null;\n\n      if (response.ok) {\n        let json = await response.json();\n        if (json.data?.[0]) {\n          licence = json.data[0];\n          isValid = licence.attributes[\"is-valid\"];\n          limit = licence.attributes[\"within-limit\"];\n          modules = licence.attributes[\"modules\"];\n        }\n      }\n\n      return {\n        ...data,\n        isValid,\n        limit,\n        modules,\n        licence\n      };\n\n    } catch (e) {\n      console.warn(\"Licence refresh failed during restore\", e);\n      return data; // fallback to previous data\n    }\n  }\n\n  async authenticate(options) {\n    const provider = options.provider;\n\n    // Load the Microsoft/Google OAuth provider config from backend\n    let providerConfig = await this.oauthConfig.loadProviderConfig(provider);\n\n    // Inject runtime config into Torii BEFORE opening popup\n    ENV.torii.providers[provider] = {\n      clientId: providerConfig.client_id,\n      tenantId: providerConfig.tenant_id,\n      redirectUri: providerConfig.redirect_uri,\n      scope: \"openid profile email User.Read\",\n      responseType: \"code\"\n    };\n\n    // Open OAuth popup (now using dynamic config)\n    let authResponse = await this.torii.open(provider);\n\n    // Torii returns:\n    // {\n    //   authorizationCode: \"...\",\n    //   redirectUri: \"...\"\n    // }\n\n    //Exchange auth code → JWT tokens\n    const loginUrl = `${getApiBaseUrl()}/api/oauth-providers/token_exchange/`;\n\n    let loginResponse = await this.api.fetch(loginUrl, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({\n        code: authResponse.authorizationCode,\n        provider\n      }),\n    });\n\n    if (!loginResponse.ok) {\n      let err = await loginResponse.json().catch(() => ({}));\n      throw new Error(err.error || \"OAuth login failed.\");\n    }\n\n    let { access, refresh } = await loginResponse.json();\n\n    localStorage.setItem(\"token\", access);\n    localStorage.setItem(\"refresh\", refresh);\n\n    //GET licence\n    const licensesUrl = `${getApiBaseUrl()}/licences/`;\n\n    let licenseResponse = await this.api.fetch(licensesUrl, {\n      method: \"GET\",\n      headers: {\n        Authorization: `Bearer ${access}`,\n        \"Content-Type\": \"application/json\"\n      }\n    });\n\n    let licence = null;\n    let isValid = false;\n    let limit = 0;\n    let modules = {};\n\n    if (licenseResponse.ok) {\n      let data = await licenseResponse.json();\n      if (data.data?.[0]) {\n        licence = data.data[0];\n        isValid = licence.attributes[\"is-valid\"];\n        limit = licence.attributes[\"within-limit\"];\n        modules = licence.attributes[\"modules\"];\n      }\n    }\n\n    // GET user profile\n    const profileUrl = `${getApiBaseUrl()}/api/auth/user/profile/`;\n\n    let profileResponse = await this.api.fetch(profileUrl, {\n      method: \"GET\",\n      headers: {\n        Authorization: `Bearer ${access}`,\n        \"Content-Type\": \"application/json\"\n      }\n    });\n\n    if (!profileResponse.ok) {\n      throw new Error(\"Failed to load user profile.\");\n    }\n\n    let userProfileData = await profileResponse.json();\n\n    localStorage.setItem(\"userProfile\", JSON.stringify(userProfileData));\n    // final session payload\n    let sessionData = {\n      auth: true,\n      access,\n      refresh,\n      provider,\n      licence,\n      isValid,\n      limit,\n      modules,\n      userProfile: userProfileData\n    };\n\n    return sessionData;\n  }\n\n\n  async invalidate(data) {\n      try {\n          // If there is no access token, just clear storage and exit\n          if (!data?.access) {\n          localStorage.removeItem('token');\n          localStorage.removeItem('refresh');\n          return;\n          }\n\n          const logoutUrl = `${getApiBaseUrl()}/api/logout`;\n\n          const refreshToken = localStorage.getItem('refresh')?.replace(/^\"|\"$/g, '');\n\n          await this.api.fetch(logoutUrl, {\n          method: 'POST',\n          headers: {\n              'Content-Type': 'application/json',\n              'Authorization': `Bearer ${data.access}`,\n          },\n          body: JSON.stringify({\n              data: {\n              type: 'logout-request',\n              attributes: {\n                  code: refreshToken,\n              },\n              },\n          }),\n          });\n      } catch (error) {\n          // Logout endpoint failure should NOT block local logout\n          console.warn('Logout request failed, continuing local logout', error);\n      } finally {\n          // Always clear local state\n          localStorage.removeItem('token');\n          localStorage.removeItem('refresh');\n      }\n  }\n  // async invalidate(data) {\n  //   if (!data?.access) {\n  //   return;\n  //   }\n  //   const logoutUrl = `${getApiBaseUrl()}/api/logout`;\n\n  //   try {\n  //     await this.api.fetch(logoutUrl, {\n  //       method: \"POST\",\n  //       headers: {\n  //         \"Content-Type\": \"application/json\",\n  //         Authorization: `Bearer ${data.access}`,\n  //       },\n  //       body: JSON.stringify({\n  //         data: {\n  //           type: \"logout\",\n  //           attributes: { code: data.refresh },\n  //         },\n  //       }),\n  //     });\n  //   } catch (e) {\n  //     console.warn(\"OAuth logout failed\");\n  //   }\n\n  //   // Close the OAuth popup session\n  //   this.torii.close(data.provider);\n\n  //   localStorage.removeItem(\"token\");\n  //   localStorage.removeItem(\"refresh\");\n\n  //   return Promise.resolve();\n  // }\n}\n","export { default } from '@glimmer/component/-private/ember-component-manager';\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n    router: service(),\n\n    init() {\n        this._super(...arguments);\n    },\n\n    actions: {\n        createAlert() {\n            this.router.transitionTo('create-alert-profile');\n        },\n    },\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nexport default Component.extend({\n    store: service(),\n    _spatialChart: null,\n\n    // anchor distances from instrument anchors, trimmed for strain-values\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        const firstObject = this.get('zoomChartData').get('firstObject');\n        if (!firstObject) { return []; }\n        const dataValuesCount = firstObject.get ? (firstObject.get('values')?.length ?? 0) : (firstObject.values?.length ?? 0);\n        const anchors = this.get('instrument').get('anchors');\n        let anchorDistances = (anchors.content ?? anchors).map(anchor => anchor.get('distance'));\n\n        const modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && modelName === 'strain-values') {\n            anchorDistances.splice(0, 1);\n        }\n        return anchorDistances;\n    }),\n\n    // midpoints between anchor distances for strain-values\n    anchorMidDistances: computed('anchorDistances', function() {\n        const anchorDistances = [...this.get('anchorDistances')];\n        const midDistances = [];\n        anchorDistances.unshift(0);\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            midDistances.push(+((anchorDistances[i] + anchorDistances[i + 1]) / 2).toFixed(2));\n        }\n        return midDistances;\n    }),\n\n    // x-axis depth values for the spatial chart\n    spatialXValues: computed('anchorDistances', 'anchorMidDistances', 'chartDataModelName', function() {\n        const modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            return this.get('anchorMidDistances');\n        }\n        return this.get('anchorDistances');\n    }),\n\n    // spatial lines: one line per timestamp reading (X = depth, Y = displacement)\n    spatialChartLinesData: computed('zoomChartData', 'spatialXValues', 'chartDataModelName', function() {\n        const zoomChartData = this.get('zoomChartData');\n        const xValues = this.get('spatialXValues');\n        const modelName = this.get('chartDataModelName');\n\n        return zoomChartData.map((item) => {\n            let values = item.get('values') || [];\n            // strain-values: prepend duplicate of first value (matching NVD3 behavior)\n            if (modelName === 'strain-values') {\n                values = [values[0], ...values];\n            }\n            return {\n                key: moment(item.get('id')).format('DD MMM YYYY HH:mm'),\n                timestamp: item.get('id'),\n                values: values.map((v, idx) => ({\n                    x: xValues[idx] !== undefined ? xValues[idx] : null,\n                    y: v !== undefined ? v : null\n                })).filter(pt => pt.x !== null)\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        const chartDataModelName = this.get('chartDataModelName');\n        const chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes')\n        }));\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        const title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName');\n                units = \"kN\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n\n        const spatialLinesData = this.get('spatialChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildSpatialChart(spatialLinesData, yAxisTitle);\n        });\n    },\n\n    _buildSpatialChart(linesData, yAxisTitle) {\n        const canvas = this.element.querySelector('canvas.chartjs-spatial');\n        if (!canvas) return;\n\n        let instrumentLength = 0;\n        try {\n            instrumentLength = this.instrument.get('instrumentLength') || 0;\n        } catch (e) { /* ignore */ }\n\n        const anchorXValues = this.get('spatialXValues');\n\n        const lineDatasets = linesData.map((line, i) => ({\n            label: line.key,\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            parsing: false,\n            _isLine: true\n        }));\n\n        // Anchor reference datasets: hidden from the chart (drawn by plugin instead)\n        // but still needed for legend generation\n        const anchorDatasets = anchorXValues.map((dist, i) => ({\n            label: String(dist),\n            data: [],\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            borderWidth: 0,\n            pointRadius: 0,\n            showLine: false,\n            _isRef: true\n        }));\n\n        const datasets = [...lineDatasets, ...anchorDatasets];\n\n        // \"No data\" overlay plugin\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds._isRef) return;\n                    if (!ds.hidden) ds.data.forEach(pt => { if (pt && pt.y != null) hasData = true; });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data available', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        // Plugin: draw anchor reference dots pinned to the bottom of the chart area\n        const anchorDotsPlugin = {\n            id: 'anchorDots',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                const yArea = chart.chartArea.bottom;\n                const ctx = chart.ctx;\n\n                anchorXValues.forEach((dist, i) => {\n                    const px = xScale.getPixelForValue(dist);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.arc(px, yArea, 6, 0, 2 * Math.PI);\n                    ctx.fillStyle = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                    ctx.fill();\n                    ctx.restore();\n                });\n            }\n        };\n\n        // Crosshair plugin — vertical dashed line following cursor\n        let crosshairX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                if (crosshairX === null) return;\n                const { ctx, chartArea: { top, bottom } } = chart;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        // --- Legend-tooltip helpers ---\n        let legendTooltipEl = null;\n        let highlightedIndex = null;\n        let lastTooltipIdx = null;\n\n        function buildSpatialLegendItems(chart) {\n            return chart.data.datasets.filter(ds => ds._isLine).map((ds) => {\n                const i = chart.data.datasets.indexOf(ds);\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:1;margin-right:3px;\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div></div>`;\n            }).join('');\n        }\n\n        function highlightLine(chart, idx, skipUpdate) {\n            highlightedIndex = idx;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine) return;\n                ds.borderColor = (i === idx)\n                    ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                    : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '22';\n            });\n            if (!skipUpdate) chart.update('none');\n        }\n\n        function restoreLines(chart, skipUpdate) {\n            highlightedIndex = null;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine) return;\n                ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n            });\n            if (!skipUpdate) chart.update('none');\n        }\n\n        function attachSpatialLegendHandlers(el, chart) {\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                highlightLine(chart, parseInt(item.dataset.ds));\n            };\n            el.onmouseout = function() { restoreLines(chart); };\n        }\n\n        function initSpatialLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildSpatialLegendItems(chart);\n            attachSpatialLegendHandlers(legendTooltipEl, chart);\n        }\n\n        function distToSegment(px, py, x1, y1, x2, y2) {\n            const dx = x2 - x1, dy = y2 - y1;\n            const lenSq = dx * dx + dy * dy;\n            let t = lenSq === 0 ? 0 : Math.max(0, Math.min(1, ((px - x1) * dx + (py - y1) * dy) / lenSq));\n            const projX = x1 + t * dx, projY = y1 + t * dy;\n            const ex = px - projX, ey = py - projY;\n            return Math.sqrt(ex * ex + ey * ey);\n        }\n\n        function findClosestLine(chart, mouseX, mouseY) {\n            let closestIdx = -1, closestDist = Infinity;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine || chart.getDatasetMeta(i).hidden) return;\n                const pts = chart.getDatasetMeta(i).data;\n                if (!pts || pts.length < 2) return;\n                for (let j = 0; j < pts.length - 1; j++) {\n                    const p1 = pts[j], p2 = pts[j + 1];\n                    if (!p1 || !p2) continue;\n                    const dist = distToSegment(mouseX, mouseY, p1.x, p1.y, p2.x, p2.y);\n                    if (dist < closestDist) { closestDist = dist; closestIdx = i; }\n                }\n            });\n            return { datasetIndex: closestIdx, pixelDist: closestDist };\n        }\n\n        function updateSpatialTooltip(chart, mouseX, mouseY) {\n            if (!legendTooltipEl) return;\n            const { left, right, top, bottom } = chart.chartArea;\n            if (mouseX < left || mouseX > right || mouseY < top || mouseY > bottom) {\n                if (highlightedIndex !== null) restoreLines(chart, true);\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildSpatialLegendItems(chart);\n                attachSpatialLegendHandlers(legendTooltipEl, chart);\n                lastTooltipIdx = null;\n                return;\n            }\n            const closest = findClosestLine(chart, mouseX, mouseY);\n            if (closest.datasetIndex < 0) return;\n            if (closest.datasetIndex !== highlightedIndex) {\n                highlightLine(chart, closest.datasetIndex, true);\n            }\n            const activeIdx = highlightedIndex != null ? highlightedIndex : closest.datasetIndex;\n            if (activeIdx !== lastTooltipIdx) {\n                lastTooltipIdx = activeIdx;\n                const ds = chart.data.datasets[activeIdx];\n                const valuesHtml = ds.data.map((pt, idx) => {\n                    const anchorColor = CHART_LINE_COLORS[idx % CHART_LINE_COLORS.length];\n                    return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${anchorColor};\"></div>${pt && pt.y != null ? pt.y.toFixed(2) : '—'}</div>`;\n                }).join('');\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = `<div class=\"legend-tooltip-date\">${ds.label}</div>${valuesHtml}`;\n            }\n        }\n\n        const spatialChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true, maintainAspectRatio: false, parsing: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'nearest', intersect: false },\n                onHover(e) { if (e.x != null) { crosshairX = e.x; } },\n                scales: {\n                    x: {\n                        type: 'linear', min: 0,\n                        max: instrumentLength > 0 ? instrumentLength : undefined,\n                        title: { display: true, text: 'Depth (mm)', font: { size: 12 } },\n                        afterBuildTicks(axis) {\n                            const visibleAnchors = anchorXValues\n                                .filter(v => v >= axis.min && v <= axis.max)\n                                .map(v => ({ value: v }));\n                            if (visibleAnchors.length > 0) { axis.ticks = visibleAnchors; }\n                        },\n                        ticks: { callback(val) { return val.toLocaleString(); } }\n                    },\n                    y: {\n                        title: { display: true, text: yAxisTitle, font: { size: 12 } },\n                        ticks: { callback(val) { return val.toFixed ? val.toFixed(2) : val; } }\n                    }\n                },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                }\n            },\n            plugins: [noDataPlugin, anchorDotsPlugin, crosshairPlugin]\n        });\n\n        initSpatialLegendTooltip(canvas.parentElement, spatialChart);\n\n        // --- Scroll-to-zoom (both axes) ---\n        const origXMin = spatialChart.options.scales.x.min;\n        const origXMax = spatialChart.options.scales.x.max;\n        canvas.addEventListener('wheel', e => {\n            e.preventDefault();\n            const rect = canvas.getBoundingClientRect();\n            const xScale = spatialChart.scales['x'];\n            const yScale = spatialChart.scales['y'];\n            const factor = e.deltaY < 0 ? 1.15 : 0.87;\n            const cursorX = xScale.getValueForPixel(e.clientX - rect.left);\n            const cursorY = yScale.getValueForPixel(e.clientY - rect.top);\n            spatialChart.options.scales.x.min = cursorX - (cursorX - xScale.min) * factor;\n            spatialChart.options.scales.x.max = cursorX + (xScale.max - cursorX) * factor;\n            spatialChart.options.scales.y.min = cursorY - (cursorY - yScale.min) * factor;\n            spatialChart.options.scales.y.max = cursorY + (yScale.max - cursorY) * factor;\n            spatialChart.update('none');\n        }, { passive: false });\n\n        // --- Drag-to-pan (both axes) ---\n        let panStartX = null, panStartY = null;\n        let panXMin = null, panXMax = null, panYMin = null, panYMax = null;\n        canvas.addEventListener('mousedown', e => {\n            panStartX = e.clientX; panStartY = e.clientY;\n            panXMin = spatialChart.scales['x'].min; panXMax = spatialChart.scales['x'].max;\n            panYMin = spatialChart.scales['y'].min; panYMax = spatialChart.scales['y'].max;\n            canvas.style.cursor = 'grabbing';\n        });\n        canvas.addEventListener('mousemove', e => {\n            const rect = canvas.getBoundingClientRect();\n            const px = e.clientX - rect.left;\n            const py = e.clientY - rect.top;\n            const { left, right } = spatialChart.chartArea;\n            crosshairX = (px >= left && px <= right) ? px : null;\n            if (panStartX !== null) {\n                const xPxRange = spatialChart.chartArea.right - spatialChart.chartArea.left;\n                const yPxRange = spatialChart.chartArea.bottom - spatialChart.chartArea.top;\n                spatialChart.options.scales.x.min = panXMin - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.x.max = panXMax - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.y.min = panYMin + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n                spatialChart.options.scales.y.max = panYMax + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n            } else {\n                updateSpatialTooltip(spatialChart, px, py);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('mouseleave', () => {\n            crosshairX = null;\n            if (highlightedIndex !== null) restoreLines(spatialChart);\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildSpatialLegendItems(spatialChart);\n                attachSpatialLegendHandlers(legendTooltipEl, spatialChart);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('dblclick', () => {\n            spatialChart.options.scales.x.min = origXMin;\n            spatialChart.options.scales.x.max = origXMax;\n            spatialChart.options.scales.y.min = undefined;\n            spatialChart.options.scales.y.max = undefined;\n            spatialChart.update('none');\n        });\n        const onPanEnd = () => {\n            panStartX = panStartY = panXMin = panXMax = panYMin = panYMax = null;\n            canvas.style.cursor = 'default';\n        };\n        canvas.addEventListener('mouseup', onPanEnd);\n        document.addEventListener('mouseup', onPanEnd);\n\n        this.set('_spatialChart', spatialChart);\n    },\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const spatialChart = this.get('_spatialChart');\n        if (spatialChart) { spatialChart.destroy(); }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\n// Chart line colors — sourced from color-palette\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,    // #0077b6\n    colorPalette.orange2,   // #FF7444\n    colorPalette.green3,    // #2a9d8f\n    colorPalette.red1,      // #D25353\n    colorPalette.purple7,   // #8b5cf6\n    colorPalette.beige22,   // #b08968\n    colorPalette.pink6,     // #ec4899\n    colorPalette.gray5,     // #6b7280\n    colorPalette.teal6,     // #10b981\n    colorPalette.cyan4,     // #06b6d4\n];\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    isMDT: computed('instrument', function() {\n        let vendor = this.instrument.get('vendor');\n        if (vendor) {\n            return vendor.vendorType.includes('MDT');\n        }\n        return false;\n    }),\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let anchors = this.get('instrument').get('anchors');\n        const arr = anchors.content ?? anchors;\n        let anchorDistances = arr.map(anchor => anchor.get('distance'));\n\n        if (this.get('isMDT')) {\n            anchorDistances.pop();\n        }\n\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            var midPoints = [];\n            for (var ctr = 0; ctr < anchorDistances.length - 1; ctr++) {\n                midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n            }\n            if (modelName === 'displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        }\n\n        return anchorDistances;\n    }),\n\n    // Main chart sourced from zoomChartData to mirror NVD3 (Group By applies to visible chart).\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'anchorDistances', 'chartDataModelName', function() {\n        const anchorDistances = this.get('anchorDistances');\n        const fullRangeChartData = this.get('zoomChartData');\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n\n        const lines = anchorDistances.map((chartLineName, chartLineIndex) => ({\n            key: chartLineName,\n            values: fullRangeChartData.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[chartLineIndex] !== undefined) ? arr[chartLineIndex] : null\n                };\n            })\n        }));\n\n        // Add temperature overlay on y2 (unless viewing temperature data itself)\n        if (modelName !== 'temperature-values') {\n            const zoomTempData = this.get('zoomTempData');\n            if (zoomTempData && zoomTempData.length) {\n                lines.push({\n                    key: 'T (°C)',\n                    yAxis: 'y2',\n                    hidden: false,\n                    values: zoomTempData.map(item => {\n                        const rawValues = item.get('values');\n                        const arr = Array.isArray(rawValues) ? rawValues : [];\n                        return {\n                            x: moment(item.get('id')).valueOf(),\n                            y: arr[0] !== undefined ? arr[0] : null\n                        };\n                    })\n                });\n            }\n        }\n\n        return lines;\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    _buildYAxisTitle(yAxisLegend, _chartData) {\n        let axisName = '';\n        let units = '';\n        let title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = \"Displacement\";\n                units = this.get('yAxisUnit') || \"mm\";\n                break;\n            case 'velocity':\n                axisName = \"mm\";\n                units = \"/day\";\n                break;\n            case 'acceleration':\n                axisName = \"mm\";\n                units = \"/day²\";\n                break;\n            case 'strain':\n                axisName = \"Strain\";\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = \"Strain Rate\";\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = \"Load\";\n                units = \"kN\";\n                break;\n            case 'temperature':\n                axisName = \"Temperature\";\n                units = \"°C\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const fullRangeChartLinesData = this.get('fullRangeChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildMainChart(fullRangeChartLinesData, yAxisTitle);\n            this._buildOverviewChart();\n        });\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        const datasets = anchorDistances.map((chartLineName, i) => ({\n            label: String(chartLineName),\n            data: fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        anchorDistances.forEach((chartLineName, i) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(chartLineName));\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport Component from '@ember/component';\nimport { getAnchorCountFromId } from '../../utils/instrument-id';\n\nfunction resetNewInstrumentObject(_this) {\n    _this.set('newInstrumentObject', {instrumentStiffness:0, elasticLimitPct:0.8, ultimateLimitPct:3, elasticLimitFce:240, ultimateLimitFce:260});\n    _this.set('zeroTimestamp', null);\n    _this.set('installDate', null);\n    _this.set('vendor', null);\n    _this.set('strokeLength', null);\n}\n\nexport default Component.extend({\n    store: service(),\n    formDisabled: false,\n    fieldVisible: false,\n    selectedVendor: null,\n    isAuthenticated: true,\n    newInstrumentObject: {},\n    headAt: 'HAC',\n    zeroTimestamp: null,\n    installDate: null,\n    authError: false,\n    project: null,\n    level: null,\n\n    init() {\n        this._super(...arguments);\n        resetNewInstrumentObject(this);\n    },\n\n    actions: {\n        setProject(value) {\n            const foundObject = this.projectLookupList.find(l => l.id === value);\n            if (foundObject) this.set('project', foundObject);\n        },\n\n        setLevel(value) {\n            const foundObject = this.levelLookupList.find(l => l.id === value);\n            if (foundObject) this.set('level', foundObject);\n        },\n\n        vendorTypeChanged(object) {\n            let badValues = ['null', 'undefined', ''];\n            if (badValues.includes(object)) {\n                this.set('formDisabled', true);\n            } else {\n                this.set('formDisabled', false);\n                let vendor = this.vendors.find(v => v.id === object);\n                if (vendor) {\n                    this.set('selectedVendor', vendor);\n                    this.set('newInstrumentObject.vendor', vendor);\n                    this.set('fieldVisible', vendor.vendorType == \"MDT_CABLE\");\n                } else {\n                    this.set('selectedVendor', null);\n                    this.set('newInstrumentObject.vendor', null);\n                }\n            }\n        },\n\n        strokeLengthChanged(strokeLength) {\n            this.set('newInstrumentObject.strokeLength', strokeLength);\n        },\n\n        createInstrument() {\n            let _this = this;\n            let store = this.get('store');\n            let newInstrumentObject = this.get('newInstrumentObject');\n\n            this.setError('isVisibleError', false);\n            this.setError('duplicateError', false);\n            this.setError('fieldError', false);\n\n            let error = false;\n\n            newInstrumentObject.id = this.get('id');\n            newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n            newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n            newInstrumentObject.active = true;\n\n            if (typeof newInstrumentObject.id === 'undefined' || newInstrumentObject.id === \"\") {\n                error = true;\n                this.setError('fieldError', true);\n                this.setError('isVisibleError', true);\n            }\n\n            if (this.get('zeroTimestamp') != null) {\n                newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'), 'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('installDate') != null) {\n                newInstrumentObject.installDate = moment(this.get('installDate'), 'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            let newInstrument = null;\n            if (!error) {\n                try {\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                } catch (err) {\n                    this.setError('isVisibleError', true);\n                    if (err.message.includes('has already been used')) {\n                        this.setError('duplicateError', true);\n                        error = true;\n                    }\n                }\n            }\n\n            this.setError('authError', false);\n\n            if (!error) {\n                newInstrument.save().then(function(results) {\n                    if (results.id != null) {\n                        let anchorCount = getAnchorCountFromId(newInstrumentObject.id);\n                        for (var ctr = 0; ctr <= anchorCount; ctr++) {\n                            store.createRecord('anchor', {number: ctr, distance: ctr, instrument: results}).save();\n                        }\n                        _this.get('submit')(results.id);\n                    } else {\n                        _this.setError('isVisibleError', true);\n                    }\n                }).catch(function() {\n                    _this.setError('isVisibleError', true);\n                    _this.setError('authError', true);\n                });\n            }\n        }\n    }\n});","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let displacementValueObjectValues = _this.get('displacementValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(displacementValueObjectValues).forEach(function(key,index) {\n        displacementValueObjectValues[key] = 0;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n    // newTimestampValue: computed('dateFormat', function() {\n    //     return moment().format(this.get('dateFormat'));\n    // }),\n    async getInstrument() {\n        const store = this.get('store');\n        const instrumentId = this.get('instrumentId');\n\n        return store.findRecord('instrument', instrumentId);\n    },\n    anchorDistances: computed('instrument', async function() {\n        const inst = await this.getInstrument();\n        \n        const anchors = inst.anchors;\n        const anchorNumber = (anchors.content ?? anchors).length;\n        const isMDT = this.get(\"isAdictMDT\");\n    \n        const dist = (anchors.content ?? anchors).map((anchor, index) => {\n            const counter = index + 1;\n            const label = isMDT && counter === anchorNumber ? \"µA\" : anchor.get('distance');\n            return { counter, label };\n        });\n\n        // console.log(\"dist\");    \n        // console.log(dist);    \n        return dist;\n    }),\n    getAnchorLabel:computed('instrumentAnchors', function(){\n        let anchors = this.get('instrumentAnchors');\n        return ` (mm)`\n    }),\n    isAdictMDT: computed('instrument', async function() {\n        const inst = await this.getInstrument();\n        // console.log(inst.id);\n        const vendor = inst.vendor;\n        let isMDT = false;\n        try{\n            isMDT = vendor.vendorType.includes('MDT');\n        }\n        catch (e) {\n            isMDT = false;\n            // console.log(e);\n        }\n        return isMDT;\n    }),\n\n\n    instrumentAnchorsLength: computed('instrumentAnchors', function() {\n        if(this.isMDT) {\n            return this.get('instrumentAnchors').length - 1;\n        } else {\n            return this.get('instrumentAnchors').length;\n        }\n    }),  \n\n    instrumentAnchorsSorted: sort('instrumentAnchors', 'instrumentAnchorsSorting'),\n\n    instrumentAnchorsForAdictMDT: computed('instrumentAnchors', function() {\n        let instrumentAnchors = this.instrumentAnchorsSorted;\n        \n        // Check if there are anchors to remove\n        if (instrumentAnchors.length > 0) {\n            instrumentAnchors.pop(); // Remove the last anchor\n        }\n        return instrumentAnchors;\n    }),\n\n    newDisplacementValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n    displacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    newDisplacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n    convertMMToAdictBits: function(arrayMMs){\n        let bitsArray = [];\n        arrayMMs.forEach((mmValue)=>{\n            bitsArray.push((mmValue / this.get(\"instrument\").get('strokeLength') ) * 65536)\n        });\n        return bitsArray;\n    },\n    actions: {\n         saveNew(){\n            let _this = this,\n                store = this.get('store'),\n                newDisplacementValuesObject = this.get('newDisplacementValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                displacementValues = this.get('displacementValues'),\n                temperatureValues = this.get('temperatureValues')\n            ;\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n            let mmVals = this.get('newDisplacementValueObjectValues');\n            let bitsVals = this.convertMMToAdictBits(mmVals);\n            newDisplacementValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newDisplacementValuesObject.values = Object.values(bitsVals);\n\n            const newDisplacementValues = store.createRecord('displacement-value', newDisplacementValuesObject);\n            // save new displacement-value to DB\n            const savedDisplacementValuesObject = newDisplacementValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if displacement-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //displacementValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n                \n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import { getApiBaseUrl } from '../../utils/api-config';\nimport { computed, observer } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    didReceiveAttrs() {\n        this._super(...arguments);\n      },\n    router:service(),\n    store:service(),\n    api:service(),\n    session: service(),\n    //Old Declarations\n    formDisabled: false,\n    fieldVisible: false,\n    selectedVendor: null,\n    selectedModel: null,\n    editing: 0,\n    strokeLengthArray : {type: {modelName: \"instrument\"},options: [\n        {id: 31.75, value: \"31.75 mm\"}, \n        {id: 63.5, value: \"63.5 mm\"}, \n        {id: 127, value: \"127 mm\"}, \n        {id: 190.5, value: \"190.5 mm\"}, \n        {id: 254, value: \"254 mm\"}, \n        {id: 508, value: \"508 mm\"}\n    ]},\n    //New Declarations\n    activeActionTab:null,\n    ordering:null,\n    paginationSearchConfig:{    \n        searchObject:{ calibrationDateOrdering:\"DESC\"},\n        pagination:{page:1, pageSize:5, totalPages:1},\n        alertProfilePaginationList : [],\n    },\n    anchorDiagramInputInitalValue:[],\n    batchSelectedAlertsID:[],\n    isAlertsListVisible:false,\n    isEditAnchorDiagram:false,\n\n    async init() {\n        this._super(...arguments);\n        await this.getAlertsList();\n    },\n    getAlertsList:async function(){\n\n        let payload = {\n            instrumentId: this.get(\"instrument\").id,\n            page: this.paginationSearchConfig.pagination.page,\n            page_size:this.paginationSearchConfig.pagination.pageSize,\n            \n        };\n        if (this.get(\"ordering\") != null ){\n            payload[\"ordering\"] = this.get(\"ordering\");\n        }\n        let url = getApiBaseUrl() + \"/alerts/\";\n        const queryString = new URLSearchParams(payload).toString();\n        if (queryString) {\n            url += `?${queryString}`;\n        }\n        const response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json(); \n            const metaPaginationData = responseData['meta'];\n            this.set(\"paginationSearchConfig.pagination.totalPages\", metaPaginationData['pagination']['total_pages']);\n\n            this.processAlertsList(responseData.data);\n            this.updatePaginationList();\n        }\n        else {\n            this.set(\"alertsList\", [])\n        } \n    },\n    processAlertsList:function(rawList){\n        let list = [];\n        rawList.forEach(element => {\n            let rawElement = element;\n            element = element[\"attributes\"]\n            list.push({\n                id: rawElement[\"id\"],\n                counter: element[\"counter\"],\n                createdAt: element[\"created-at\"],\n                evaluationType: element[\"evaluation-type\"],\n                instrumentId: element[\"instrument-id\"],\n                isAcknowledged: element[\"is-acknowledged\"],\n                isActive: element[\"is-active\"],\n                isMuted: element[\"is-muted\"],\n                lastDataReceivedAt: element[\"last-data-received-at\"],\n                lastEvaluatedAt: element[\"last-evaluated-at\"],\n                lastTriggeredAt: element[\"last-triggered-at\"],\n                level: element[\"level\"],\n                name: element[\"name\"],\n                channels: element[\"channels\"],\n                note: element[\"note\"],\n                parameters: element[\"parameters\"],\n                softResetCounter: element[\"soft-reset-counter\"],\n            })\n        });\n        this.set(\"alertsList\", list)\n    },\n    updatePaginationList: function () {\n        let range = [];\n        const maxPageToShow = 3; // Adjust this based on how many pages you want to show in the middle\n        const paginationObj = this.get('paginationSearchConfig.pagination');\n    \n        // Always include the first page\n        range.push(1);\n    \n        if (paginationObj['totalPages'] <= maxPageToShow + 2) {\n            // If total pages are small enough, show all pages\n            for (let i = 2; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else if (paginationObj['page'] <= maxPageToShow) {\n            // Current page is within the first few pages\n            for (let i = 2; i <= maxPageToShow + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        } else if (paginationObj['page'] >= paginationObj['totalPages'] - maxPageToShow + 1) {\n            // Current page is within the last few pages\n            range.push('...');\n            for (let i = paginationObj['totalPages'] - maxPageToShow; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else {\n            // Current page is in the middle\n            range.push('...');\n            for (let i = paginationObj['page'] - 1; i <= paginationObj['page'] + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        }\n    \n        this.set('paginationSearchConfig.alertProfilePaginationList', range);\n    },\n    orderingObserver: observer('ordering',async function() {\n        await this.getAlertsList();\n    }), \n    anchorDiagramLabelInitalValue:computed(\"instrument\", function(){\n        let data = {};\n        ((_a) => _a.content ?? _a)(this.get(\"instrument\").anchors).forEach((anchorObj, i)=>{\n            if(i == 0){\n                \n            }\n            else{\n                data[`channel_${i}`] = anchorObj.distance;\n            }\n        })\n        return data;\n    }),\n    licenceIsValid: computed('',function() {\n        let valid = false;\n        try {\n            valid = this.session.data.authenticated.isValid;\n        } catch {}\n        return valid;\n    }), \n    instrumentChannels: computed('instrument.channelsNum', 'instrument.vendor', function() {\n        let channelsNum = this.get('instrument.channelsNum');\n        let vendor = this.get('instrument.vendor');\n        // console.log(`Vendor: ${vendor}`);\n        if (vendor) {\n            if ( (vendor.vendorType === 'MDT_CABLE') || (vendor.vendorType === 'MDT_MPBX') ) {\n                // console.log(`Channels num: ${channelsNum -1}`);\n                return channelsNum -1;\n            } else {\n                return channelsNum;\n            }\n        }\n    }),\n    actions:{\n        async saveAnchors(){\n            try{\n                let anchors = this.get(\"instrument.anchors\");\n                let anchorMap = {};\n\n                (anchors.content ?? anchors).forEach(anchor => {\n                anchorMap[anchor.get(\"number\")] = anchor;\n                });\n                let savePromises = [];\n\n                let channels = this.get(\"instrument\").channelsNum;\n                for (let i = 0; i < channels; i ++){\n                    let anchorNumber = i;\n                    let newDistance = (i === 0)\n                        ? 0\n                        : this.get(\"anchorDiagramInputInitalValue\")[`channel_${i}`] \n                            ? this.get(\"anchorDiagramInputInitalValue\")[`channel_${i}`]\n                            : 0;\n  \n                    let existingAnchor = anchorMap[anchorNumber];\n                    if (existingAnchor) {\n                        // Update if value changed\n                        if (existingAnchor.get(\"distance\") !== newDistance) {\n                            existingAnchor.set(\"distance\", newDistance);\n                            savePromises.push(existingAnchor.save());\n                        }\n\n                    } else {\n                        // Create new anchor\n                        let newAnchor = this.get(\"store\").createRecord(\"anchor\", {\n                            instrument: this.get(\"instrument\"),\n                            number: anchorNumber,\n                            distance: newDistance\n                        });\n\n                        savePromises.push(newAnchor.save());\n                    }\n                }\n                await Promise.all(savePromises);\n                window.location.reload();\n            }\n            catch(error){\n                console.log(\"Error in saveAnchors: \" + error)\n                console.log(error);\n            }\n        },\n        updateChannelInput(key, value){\n            try{\n                let anchors = this.get(\"anchorDiagramInputInitalValue\");\n                anchors[key] = value ? value : 0;\n                this.set(\"anchorDiagramInputInitalValue\", anchors)\n            }\n            catch(error){\n                console.log(\"Error in updateChannelInput: \" + error)\n            }\n        },\n        cycleEditAnchorDiagram(){\n            let data = {};\n            ((_a) => _a.content ?? _a)(this.get(\"instrument\").anchors).forEach((anchorObj, i)=>{\n                if(i == 0){\n                    \n                }\n                else{\n                    data[`channel_${i}`] = anchorObj.distance;\n                }\n            })\n            this.set(\"anchorDiagramInputInitalValue\", data)\n            this.set(\"isEditAnchorDiagram\", !this.get(\"isEditAnchorDiagram\"));\n        },\n        cycleActionBar(tabName){\n            if (tabName === this.activeActionTab){\n                this.set(\"activeActionTab\", null);\n            }\n            else{ \n                this.set(\"activeActionTab\", tabName);\n            }\n        },\n        async jumpToPage(page){\n            try{\n                if(page != \"...\"){\n                    this.set('paginationSearchConfig.pagination.page', Number.parseInt(page))\n                    await this.getAlertsList();\n                }\n            }\n            catch(err){\n\n            }\n        },\n        cycleAlertsListVisibility(){\n            this.set(\"isAlertsListVisible\", !this.get(\"isAlertsListVisible\"));\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        updatePage(){\n            let instrument = this.get('instrument');\n            //let instrument = this.get('tableRow');\n            try {\n                let stiffness = instrument.get('elasticLimitFce') / instrument.get('elasticLimitPct');\n                // stiffness = Math.round(stiffness * 1000) / 1000;\n                instrument.set('instrumentStiffness', stiffness);\n            } catch (ex) {\n                instrument.set('instrumentStiffness', 0);\n            }\n            instrument.save();\n        },\n        strokeLengthChanged(object){\n            console.log(`Stroke length changed: ${object}`);\n        }, \n        vendorTypeChanged(object){\n            let badValues = ['null', 'undefined', ''];\n            let instrument = this.get('instrument');\n            \n            // console.log(`Vendor type changed: ${object}`);\n            if(badValues.includes(object)) {\n                this.fieldVisible = false;\n                this.formDisabled = true;\n            } else {\n                this.form = false;\n                let vendor = this.vendors.find(vendor => vendor.id === object);\n                if (vendor) {\n                    this.fieldsEnabled = true;\n                    instrument.set('vendor', vendor);\n                    // console.log(`Vendor found: ${JSON.stringify(vendor)}`);\n                    \n                    if(vendor.vendorType === 'MDT_CABLE'){\n                        this.fieldVisible = true;\n                        try{\n                            instrument.elasticLimitPct = 0.8;\n                            instrument.ultimateLimitPct = 3;\n                            instrument.elasticLimitFce = 240;\n                            instrument.ultimateLimitFce = 260;\n                            this.set('elasticLimitPct',instrument.elasticLimitPct)\n                            let stiffness = instrument.get('elasticLimitFce') / instrument.get('elasticLimitPct');\n                            // stiffness = Math.round(stiffness * 1000) / 1000;\n                            instrument.instrumentStiffness = stiffness;\n                            instrument.save();\n                        }\n                        catch(ex){\n                            console.log(ex);\n                        }\n                    }else {\n                        this.fieldVisible = false;\n                        this.fieldsEnabled = false;\n                    }\n                } \n            }                 \n        },\n        viewData(id) {\n            let endDateObj = new moment();\n            let startDateObj = moment(endDateObj).subtract(7, 'days').format('YYYY-MM-DDTHH:mm');\n            let formattedEndDateObj = endDateObj.format('YYYY-MM-DDTHH:mm');\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\");\n            // console.log(\"startDateObj: \" + startDateObj + \" endDateObj: \" + formattedEndDateObj);\n            // console.log(\"base unit for this instrument is: \" +  baseUnit)\n            this.get('router').transitionTo('raw-data', id, { queryParams: { \"advancedStartDate\": startDateObj, \"advancedEndDate\": formattedEndDateObj, \"advancedYAxisUnit\": baseUnit}});\n            //this.viewData(id);\n        },\n        tGraph(id) {\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\");\n            // console.log(\"startDateObj: \" + startDateObj + \" endDateObj: \" + formattedEndDateObj);\n            // console.log(\"base unit for this instrument is: \" +  baseUnit)\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values', { queryParams: { \"advancedYAxisUnit\": baseUnit}});\n            //this.tGraph(id, 'displacement-values');\n        },\n        sGraph(id) {\n            this.get('router').transitionTo('spatial-graphs.spatial-graph', id, 'displacement-values');\n            //this.sGraph(id, 'displacement-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveInstrument(){\n            const _this = this;\n            // console.log(\"test\");\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/instruments\";    \n                }\n            } else {\n                window.location.href = \"/instruments\";\n            }            \n        }\n\n    },\n    didInsertElement() {\n        // Call the parent's implementation of the hook first\n        this._super(...arguments);  \n        let instrument = this.get('instrument');\n        \n        if (instrument.vendor != null) {\n            this.fieldVisible = instrument.vendor.vendorType == 'MDT_CABLE' ? true : false;\n        } else {\n                        \n            // If vendor is null, query the store for the default vendor\n            this.store.queryRecord('vendor', { vendorType: 'GENERIC' }).then(vendor => {\n                instrument.set('vendor', vendor);\n                instrument.save();\n            }).catch((error) => {\n                console.error(\"Error fetching default vendor:\", error);\n            });\n        }\n\n        try {\n            let elasticLimitFce = instrument.get('elasticLimitFce');\n            let elasticLimitPct = instrument.get('elasticLimitPct');\n            let stiffness = elasticLimitFce / elasticLimitPct;\n\n            // Check if the stiffness is a valid number (not NaN or Infinity)\n            if (!isNaN(stiffness) && isFinite(stiffness)) {\n                // Round the stiffness to three decimal places (optional)\n                stiffness = Math.round(stiffness * 1000) / 1000;\n\n                // Set the calculated stiffness as the default value for instrumentStiffness\n                instrument.set('instrumentStiffness', stiffness);\n            } else {\n                instrument.set('instrumentStiffness', 0);\n            }\n        } catch (ex) {\n            instrument.set('instrumentStiffness', 0);\n        }\n    }\n})","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { copy } from 'ember-copy';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'spatial-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    progressAnimationDuration: 100, //set 50, was 700\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 50, //set 25, was 500\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return this.get('blastEvents').map(function(event) {\n                return {\n                    type: 'Blast',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    isMDT: computed('instrument', function() {\n                    \n        let instrumentVendor = this.instrument.vendor;            \n        if(instrumentVendor && instrumentVendor.vendorType.includes('MDT')) {\n            return true;\n        }\n        return false;\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n            let chartData = { values: item.get(\"values\") };\n            \n            if(this.isMDT){\n                let temporaryChartData = chartData[linesKyes]\n                temporaryChartData.pop();\n                chartData[linesKyes] = temporaryChartData;\n\n            } else {\n                var modelName = this.get('chartDataModelName');\n                if (modelName === 'strain-values') { \n                    chartData.values.unshift(chartData.values[0]);\n                }\n            }\n            // console.log(\"chartData:::::::::::: \" + JSON.stringify(chartData));\n            \n            return chartData;\n        } catch (error) {\n            return [];\n        }\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n        try {\n\n            let temporaryValue = { values: item.get(\"values\") };            \n            \n            if(this.isMDT){\n                let temporaryChartData = temporaryValue[linesKyes]\n                temporaryChartData.pop();\n                temporaryValue[linesKyes] = temporaryChartData;\n            }\n            console.log(\"FullRangeDataPoints::::::::::::: \" + JSON.stringify(temporaryValue));\n            return temporaryValue;\n        } catch (error) {\n            return [];\n        }\n    }),\n\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0;\n        let anchors = this.get('instrument').get('anchors');\n\n        const arr = anchors.content ?? anchors;\n\n        let anchorDistances = arr.map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && modelName === 'strain-values') {\n            anchorDistances.splice(0, 1);\n        }\n\n        if(this.isMDT){\n            anchorDistances.pop(); // Remove the last element if isMDT is true\n        }\n        return anchorDistances;\n    }),\n\n    // calculate mid distances between anchors for strain values\n    anchorMidDistances: computed('anchorDistances', function() {\n        const anchorDistances = copy(this.get('anchorDistances'));\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0;\n        let midDistances = [];\n\n        var type = this.get('instrument').get('instrumentType').get('title');\n        // console.log(\"anchorDistances:::::::::::: \" + JSON.stringify(anchorDistances));\n        anchorDistances.unshift(0);\n\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            let mid = (anchorDistances[i] + anchorDistances[i + 1]) / 2;\n            midDistances.push( +mid.toFixed(2) );\n        }\n\n        return midDistances;\n    }),\n\n    anchorColors: d3.scale.category10().range(),\n\n    anchorDistancesChartReferencePoints: computed('chartDataModelName', 'instrument', 'anchorDistances', 'anchorMidDistances', function() {\n        let anchorDistances = this.get('anchorDistances');\n        var modelName = this.get('chartDataModelName');\n        var anchorMidDistances = this.get('anchorMidDistances');\n\n        // console.log(this.get('instrument').get('instrumentTypeID'));\n\n        if(modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            return anchorMidDistances.map(function(anchorDistance){\n                return {\n                    key: anchorDistance,\n                    type: 'referencePoints',\n                    values: [\n                        anchorDistance\n                    ]\n                };\n            });\n                \n        }\n\n        return anchorDistances.map(function(anchorDistance){\n            return {\n                key: anchorDistance,\n                type: 'referencePoints',\n                values: [\n                    anchorDistance\n                ]\n            };\n        });\n    }),\n\n    inlineHoverValuesSideOffset: computed('chartDataModelName', function() {\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values') {\n            return 28;\n        }\n        return 0;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints'),\n            anchorDistances = this.get('anchorDistances'),\n            anchorDistancesChartReferencePoints = this.get('anchorDistancesChartReferencePoints')\n        ;\n        let zoomChartLinesData = [];\n\n        var modelName = this.get('chartDataModelName');\n        var anchorDist = anchorDistances;\n        \n        if(modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            anchorDist = this.get('anchorMidDistances'); \n        }\n\n        zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n            return {\n                key: chartLineIndex,\n                // mean: 3,\n                type: 'lines',\n                timestamp: zoomTimePoints[chartLineIndex],\n                values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        anchorDist[dataPointIndex],\n                        dataPoint\n                    ];\n                })\n            };\n        });\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (anchorDistancesChartReferencePoints) {\n            zoomChartLinesData = zoomChartLinesData.concat(anchorDistancesChartReferencePoints);\n        }\n\n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        var modelName = this.get('chartDataModelName');\n        var type = this.get('instrument').get('instrumentType').get('title');        \n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[chartLineIndex]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n    }),\n\n    numLines: computed('zoomTimePoints', function() {\n        return this.get('zoomTimePoints').length;\n    }),\n\n    lineDrawDelay: computed('numLines', function() {\n        return (13000 / (this.get('numLines') + 1)) ^ (1 / 20);\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').queryRecord('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            inlineHoverValuesSideOffset = _this.get('inlineHoverValuesSideOffset'),\n            progressAnimationDuration = _this.get('progressAnimationDuration'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];//.get('firstObject');\n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let axisName = '';\n                let units = chartData.get('units');\n                switch(yAxisLegend.get('title')) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        units = \"mm\";\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n                \n                title = axisName + \" (\" + units + \")\";\n            }\n\n            let zoomChart = nv.models.lineChartProgressAnimationAPI()\n                .margin({top: 55, right: 10, bottom: 85, left: 60})\n                .useInteractiveGuideline(false)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .distXAxisScale(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(false)\n                .showLegend(true)\n                .progressAnimationDuration(progressAnimationDuration)\n                .showXAxis(false)\n                .noData('No usable data')\n                ;\n\n\n            let length = 0;\n            try {\n                length = _this.instrument.get('instrumentLength');\n                let type = _this.instrument.get('instrumentType');\n                if (type === 'dRebar') {\n                    length = length * 1000;\n                }\n                \n            } catch (ex) {\n\n            }\n            \n            if(length !== null && length === 0) {\n                length = 0;\n            }\n\n            zoomChart.forceX([0, length]);\n/*             if (yAxisLegend.get('title') != 'bending_strain' && yAxisLegend.get('title') != 'axial_strain') {\n                \n            }\n */\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .tickFormat(d3.format(\".2f\"))\n                     .tickFormat(function(d) {\n                        // console.log(\"xaxis: D:::::::::::::::::::::::::::::::::::::::: \" + d);\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    //     let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                    //     return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    });\n                zoomChart.yAxis\n                    .axisLabel(title)\n                    .tickFormat(d3.format(\".2f\"));\n\n                zoomChart.distXAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .ticks(5)\n                    .tickFormat(function(d) {\n                        // console.log(\"D:::::::::::::::::::::::::::::::::::::::: \" + d);\n                        //     if (fullRangeChartLinesData.length > 0) {\n                    //         let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                    //         return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                    //     } else {\n                    //         return [0, 0];\n                    //     }\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    });\n                    \n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(45)\n                    .isDistXTooltip(isDistXTooltip)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2);\n\n                //zoomChart.legend.inlineHoverValuesSideOffset(inlineHoverValuesSideOffset);\n                // console.log(\"zoomChartLinesData:::::::::::: \" + JSON.stringify(zoomChartLinesData));\n                zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n\n                }\n\n/*                 zoomChart.xAxis.dispatch.on('xAxisMouseMove', function (mouseMove) {\n                    console.log('test');\n                });\n */\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log('test');\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n\n                    if (!seismicEventsArray.length || !blastEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (!activeTooltipContent) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                return zoomChart;\n            });\n\n            // declare fullRangeChart because later in zoom chart we need axis from fullRangeChart for events axis on zoomChart\n            let fullRangeChart = nv.models.focus(nv.models.line())\n               .margin({top: 10, right: 10, bottom: 30, left: 60})\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .syncBrushing(false)\n                .independentBrushing(true)\n                .showXAxis(true)\n                .showYAxis(false)\n                ;\n\n\n            nv.addGraph(function() {\n\n                fullRangeChart.xAxis\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0], true)(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n                fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n                fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(fullRangeChart.update);\n\n                // set zoom based on query params if set\n                let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n                let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n                if (startTimestamp && endTimestamp) {\n                    fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n                }\n\n                return fullRangeChart;\n            });\n\n        });\n\n    }\n\n});\n\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n//import JSONAPISerializer from '@ember-data/serializers/json';\n\nexport default Component.extend({\n\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n    title: null,\n    yAxisUnit:null,\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if(yAxisUnitParam){\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n    isMDT: computed('instrument', function() {\n        let instrument = this.instrument;\n        let vendor = this.instrument.get('vendor');\n        let isMDT = false;\n        if(vendor) {\n            isMDT = vendor.vendorType.includes('MDT');\n        }\n        return isMDT;\n    }),\n    anchorCount: computed('instrument', function() {\n        let instrument = this.instrument;\n        if(this.isMDT) {\n            return (anchorCount -1);\n        }           \n        return anchorCount;\n    }),\n    // vibeEventsChartDistXData: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log('vibeEvents');\n    //     //console.log(events);\n    //     if ( this.get('vibeEvents') ) {\n    //         return [{\n    //             key: 'BluVibe',\n    //             type: 'distX',\n    //             color: '#80bf5c',\n    //             values: this.get('vibeEvents').map(function(event) {\n    //                 return [\n    //                     moment( event.get('id') ).valueOf(),\n    //                     event.get('size') ? (event.get('size') * -20) + 20 : 20\n    //                 ];\n    //             })\n    //         }];\n    //     }\n    //     return false;\n    // }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sortBy('time');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            let data_set = this.get('blastEvents').map(function(event) {\n                //console.log(event.get('timestamp'));\n                return {\n                    type: 'Blast',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes'),\n                    location: event.get('location')\n                };\n            }).sortBy('time');\n            //console.log(data_set);\n            return data_set;\n        }\n        return false;\n    }),\n\n    // vibeEventsArray: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log(events);\n    //     if ( events ) {\n    //         return events.map(function(event) {\n    //             return {\n    //                 type: 'BluVibe',\n    //                 time: event.get('id'),\n    //                 timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n    //                 ppa: event.get('ppa'),\n    //                 ppv: event.get('ppv'),\n    //                 freq: event.get('frequency')\n    //             };\n    //         }).sortBy('time');\n    //     }\n    //     return false;\n    // }),\n\n    // For zoomTempPoints\n    zoomTempPoints: computed('zoomTempData', function() {\n        let discreteData = this.get('zoomTempData').map(item => {\n            var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n            // Convert the chartData to discrete variables\n            var discreteData = {};\n            for (let key in chartData) {\n                discreteData[key] = chartData[key];\n            }\n            return discreteData;\n        });\n        // console.log(\":::::::::::::::::::::::: Discrete TEMP Points: \" + JSON.stringify(discreteData));\n        // console.log(\":::::::::::::::::::::::: Discrete TEMP Points SIZE: \" + discreteData.length);\n        if (this.get(\"zoomDataPoints\").length == 0) {\n            return [];\n        } else {\n            return discreteData;\n        }\n            \n    }),\n\n    // For zoomDataPoints\n    zoomDataPoints: computed('zoomChartData', function() {\n        let discreteData = this.get('zoomChartData');\n\n        discreteData = discreteData.map(item => {\n            var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n            \n            var modelName = this.get('chartDataModelName');\n            if (modelName === 'strain-values' || modelName === 'strain-rate-values') { \n                chartData.values.push(0);\n            }\n\n            // Convert the chartData to discrete variables\n            var discreteData = {};\n            for (let key in chartData) {\n                // Get the value array from chartData\n                let valueArray = chartData[key];\n                // Check if valueArray is defined and is an array\n                if (Array.isArray(valueArray) ) {\n                   valueArray.pop(); // Remove the last element - the last elememt is not actually a displacement value in MDT adict readings. it's a voltagae.\n                }\n                // Store the modified object in discreteData\n                // valueArray = this.convertDataAndReverse(valueArray);\n                discreteData[key] = valueArray;\n            }\n\n            return discreteData;\n        });\n        \n        // console.log(JSON.stringify(discreteData));\n        \n        if(discreteData.length == 0) {\n            return [];\n        } else {\n            return discreteData;\n        }\n    }),\n    convertDataAndReverse: function(valueArray) {\n        let convertedData = [];\n        let instrument = this.instrument;\n        let multiplier = instrument.get('strokeLength');\n        let DENOMINATOR = 2**16;\n        valueArray.forEach(function(item) {\n            item = ((item / DENOMINATOR) * multiplier).toFixed(2);\n            convertedData.push(parseFloat(item)); // using parseFloat to convert the string back to a number\n        });\n        // console.log(\":::::::::::::::::::::::: Discrete Points valueArray: \" + JSON.stringify(valueArray))\n        // console.log(\":::::::::::::::::::::::: Discrete Points convertedData: \" + JSON.stringify(convertedData))\n        return convertedData.reverse();\n    },\n\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n\n/*     fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        let chartData = this.get('fullRangeChartData');\n        let dataValuesCount;\n        try {\n            dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n        let anchors = this.get('instrument').get('anchors');\n        \n        const arr = anchors.content ?? anchors;\n        \n        let anchorDistances = arr.map(function(anchor) {\n            return anchor.get('distance');\n          });\n          \n        if (this.isMDT) {\n            anchorDistances.pop(); // Remove the last element if isMDT is true\n        }\n\n        //IF chart is Strain-Values chart\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') { \n            var midPoints = [];\n            for(var ctr = 0; ctr < anchorDistances.length-1; ctr++) {\n                midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n            }\n            if(modelName==='displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        }\n        //console.log(anchorDistances);\n        return anchorDistances;\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n        // console.log(\"zoomChartLinesData********************************************\");   \n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTempPoints = this.get('zoomTempPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n\n        //console.log(blastEventsChartDistXData);\n        //console.log(vibeEventsChartDistXData);\n\n        let anchorDistances = this.get('anchorDistances'),\n            zoomChartLinesData = []\n        ;\n        if(zoomDataPoints.length != 0) {\n            // an exception for temperature sensor in dExto\n            if (_this.get('chartDataModelName') !== 'temperature-values') {\n                zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                    return {\n                        key: chartLineName,\n                        // mean: 3,\n                        type: 'lines',\n                        yAxis: 1,\n                        values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                            return [\n                                moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                                (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                            ];\n                        })\n                    };\n                });\n            } else {\n                zoomChartLinesData = [{\n                    key: 'T. ℃',\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[0] : null\n                        ];\n                    })\n                }];\n            }\n        \n            //console.log(zoomDataPoints.length);\n            //console.log(zoomTempPoints.length);\n\n            if (_this.get('chartDataModelName') !== 'temperature-values') {\n                if (_this.get('chartDataModelName') !== 'displacement-values'){\n                    while(zoomTempPoints.length > zoomDataPoints.length) {\n                        zoomTempPoints.pop();\n                        zoomTempPoints.shift();\n                    }\n                }\n                var temp = {key: 'T',\n                    type: 'lines',\n                    yAxis: 2,\n                    values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[0] : null,\n                        ];\n                    })\n                };\n                //console.log(temp);\n                zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n                //console.log(zoomChartLinesData);\n            }\n\n            // mix data with events\n            if (seismicEventsChartDistXData) {\n                zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n            }\n            if (blastEventsChartDistXData) {\n                zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n            }\n            // if (vibeEventsChartDistXData) {\n            //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n            // }\n            return zoomChartLinesData;\n        }    \n        return [];\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        //console.log(\"********************************************\");\n        let chartDataModelName = this.get('chartDataModelName');\n        this.title = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_');\n        let promise = this.get('store').queryRecord('measurement', {title: this.title});\n        return promise;\n    }),\n\n    didInsertElement: function() {\n\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            // TODO::: fix me\n            //vibeEventsArray = this.get('vibeEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = yAxisLegend\n        ;\n\n        //console.log(vibeEventsArray);\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];//.get(this.title);\n                \n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let instType = _this.instrument.get('instrumentType').get('title');\n\n                let axisName = '';\n                let units = '';//chartData.get('units');\n                title = yAxisLegend.get('title');\n                let vendorType = _this.instrument.vendor.vendorType;\n                // console.log(\"Title::::::::::::::::: \" + title);\n                switch(title) {\n                    case 'displacement':\n                        if (vendorType === 'MDT_CABLE') {\n                            axisName = \"Displacement\";\n                        } else if (vendorType === 'MDT_MPBX') {\n                            axisName = \"Displacement \";\n                        } else {\n                            axisName = \"Displacement\";\n                        }\n                        units += _this.get('yAxisUnit') ? _this.get('yAxisUnit') :  \"mm\";\n                        break;\n                    case 'velocity':\n                        if (vendorType === 'MDT_CABLE') {\n                            axisName = \"mm\";\n                        } else if (vendorType === 'MDT_MPBX') {\n                            axisName = \"mm\";\n                        } else {\n                            axisName = \"mm\";\n                        }\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        if (vendorType === 'MDT_CABLE') {\n                            axisName = \"mm\";\n                        } else if (vendorType === 'MDT_MPBX') {\n                            axisName = \"mm\";\n                        } else {\n                            axisName = \"mm\";\n                        }\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = 'Strain'\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = 'Strain Rate'\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = 'Load'\n                        units = \"kN\";\n                        break;\n                    case 'temperature':\n                        axisName = \"Temperature\";\n                        units = \"°C\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n\n                if (yAxisLegend) {\n                    let raw = _this.raw;\n                    title = axisName + \" (\" + units + \")\";\n                } else {\n                    title = axisName + \" (\" + units + \")\";\n                }\n                //title = yAxisLegend.get('unit');\n            }\n\n            function usesPoints(chartName) {\n                //console.log(chartName);\n                switch(chartName) {\n                    case 'event-ppv':\n                    case 'event-ppa':\n                        return true;\n                }\n                return false;\n            }\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(usesPoints(_this.get('chartDataModelName')))\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data')\n            ;\n\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                // zoomChart.xAxis\n                //     .tickPadding(40)\n                //     .showMaxMin(false)\n                //     .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                //         let positionOne = null;\n                //         let positionTwo = null;\n\n                //         try{\n                //             let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                //             positionOne = zoomChartLinesData[0].values[0][0];\n                //             positionTwo = zoomChartLinesData[0].values[zoomChartXDomainLength-1][0];    \n                //         } catch (ex) {\n                //             console.log(ex);\n                //             return [0, 0];\n                //         }\n                //         console.log(\"positionOne: \" + positionOne);\n                //         console.log(\"positionTwo: \" + positionTwo);\n                //         return nv.utils.getDateAutoscaleFormat (positionOne, positionTwo)(new Date(d));\n                //     })\n                // ;\n                // Determine the start and end dates\n                // Generate tick values\n                let tickValues = [];\n                if(zoomChartLinesData.length != 0){\n                    let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                    let startDate = new Date(zoomChartLinesData[0].values[0][0]);\n                    let endDate = new Date(zoomChartLinesData[0].values[zoomChartXDomainLength-1][0]);\n    \n                    // Determine the interval\n                    let interval = (endDate - startDate) / 7;\n    \n                    for (let i = 0; i < 8; i++) {\n                        tickValues.push(new Date(startDate.getTime() + interval * i));\n                    }\n                }\n\n                // Apply the tick values\n                zoomChart.xAxis\n                .tickPadding(40)\n                .showMaxMin(false)\n                .tickValues(tickValues)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    return d3.time.format('%x')(new Date(d)); // Format as you like\n                });\n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                if (_this.instrument.get('instrumentType').get('title') === 'Tilt') {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".3f\"));\n                    zoomChart.legend.numDecimals(3);\n                } else {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                }\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n                if(zoomChartLinesData !== null) {\n                    zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n                }\n                \n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(vibeEventsArray);\n                    //console.log(distXMouseMove);\n/* \n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    } */\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length){ // || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            //activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) _this.setData(zoomChartLinesData);\n                if (_this.setChart) _this.setChart(zoomChart);\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n\n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\n// adict raw-data — N anchor channels (per instrument) + Temperature.\n// Special MDT vendor case: the last anchor is current-sensing, labeled \"µA\" instead of distance.\n//\n// Conversion convention (from legacy create-form + single-save-inputs-array-table-row-cells):\n//   - User enters values in MM in the modal\n//   - On save, FE converts MM → \"Adict bits\" using `(mm / strokeLength) * 65536` and sends bits\n//     to the BE for every channel (including the µA last channel — same formula, matches legacy)\n//   - BE stores and returns raw bits; the table renders those bits directly (legacy behavior)\n//   - Edit modal converts bits back to MM so the user sees the same number they entered\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    isModalOpen: false,\n    modalMode: 'add',\n    modalEditingRowId: null,\n\n    isMDT: computed('instrument.vendor.vendorType', function(){\n        try{\n            const vendor = this.get('instrument.vendor');\n            return vendor.vendorType.includes('MDT');\n        }catch(_e){\n            return false;\n        }\n    }),\n\n    // Per-anchor labels: distance for normal anchors, \"µA\" for the last anchor on MDT instruments.\n    anchorLabels: computed('instrument', 'isMDT', function(){\n        const anchors = this.get('instrument') ? this.get('instrument').get('anchors') : null;\n        const arr = (anchors && (anchors.content ?? anchors)) || [];\n        const isMDT = this.get('isMDT');\n        const total = arr.length;\n        return arr.map((anchor, idx) => {\n            const counter = idx + 1;\n            const distance = anchor.get ? anchor.get('distance') : (anchor && anchor.distance);\n            const isUASlot = isMDT && counter === total;\n            return {\n                index: idx,\n                isUASlot,\n                tableLabel: isUASlot ? 'µA' : (distance == null ? '' : String(distance)),\n                modalLabel: isUASlot ? 'µA' : `Anchor ${counter} (mm)`,\n            };\n        });\n    }),\n\n    columnSpecs: computed('anchorLabels', function(){\n        const anchors = this.get('anchorLabels') || [];\n        const out = anchors.map((a) => ({\n            key: `anchor_${a.index}`,\n            label: a.modalLabel,\n            tableLabel: a.tableLabel,\n            valuesIndex: a.index,\n            isTemp: false,\n        }));\n        out.push({ key: '__temp__', label: 'Temperature', tableLabel: 'Temperature', isTemp: true });\n        return out;\n    }),\n\n    _strokeLength: computed('instrument.strokeLength', function(){\n        const sl = Number(this.get('instrument.strokeLength'));\n        return Number.isFinite(sl) && sl !== 0 ? sl : 1;\n    }),\n\n    _mmToBits(mm){\n        const n = Number(mm);\n        if(!Number.isFinite(n)){ return 0; }\n        return (n / this.get('_strokeLength')) * 65536;\n    },\n\n    _bitsToMm(bits){\n        const n = Number(bits);\n        if(!Number.isFinite(n)){ return 0; }\n        return (n / 65536) * this.get('_strokeLength');\n    },\n\n    // Table renders raw bits (legacy parity). Modal reads bits-back-to-MM for the user.\n    tableRows: computed('displacementData.[]', 'temperatureData.[]', 'columnSpecs', 'globalDatetimeFormat.value', function(){\n        const dispData = this.get('displacementData') || [];\n        const tempData = this.get('temperatureData') || [];\n        const specs = this.get('columnSpecs') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n\n        const tempById = {};\n        tempData.forEach(r => { tempById[r.id] = r; });\n\n        return dispData.map((dispRow) => {\n            const id = dispRow.id;\n            const dispValues = (dispRow.values || dispRow.get?.('values') || []);\n            const tempRow = tempById[id];\n            const tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n\n            const cells = specs.map((spec) => {\n                if(spec.isTemp){\n                    const v = tempValues[0];\n                    return { key: spec.key, label: spec.label, value: v == null ? '' : v };\n                }\n                const raw = dispValues[spec.valuesIndex];\n                return { key: spec.key, label: spec.label, value: raw == null ? '' : raw };\n            });\n\n            return {\n                id,\n                date: id,\n                formattedDate: moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt),\n                cells,\n            };\n        });\n    }),\n\n    modalFields: computed('columnSpecs', 'modalMode', 'modalEditingRowId', 'displacementData.[]', 'temperatureData.[]', '_strokeLength', function(){\n        const specs = this.get('columnSpecs') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingRowId');\n\n        let dispValues = [];\n        let tempValues = [];\n        if(mode === 'edit' && editingId){\n            const dispRow = (this.get('displacementData') || []).find(r => r.id === editingId);\n            const tempRow = (this.get('temperatureData') || []).find(r => r.id === editingId);\n            dispValues = dispRow ? (dispRow.values || dispRow.get?.('values') || []) : [];\n            tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n        }\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && editingId\n                ? moment(editingId, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm:ss')\n                : moment().format('YYYY-MM-DDTHH:mm:ss'),\n        };\n\n        const channelFields = specs.map((spec) => {\n            let value = '';\n            if(mode === 'edit'){\n                if(spec.isTemp){\n                    value = tempValues[0];\n                }else{\n                    const bits = dispValues[spec.valuesIndex];\n                    value = bits == null ? '' : this._bitsToMm(bits);\n                }\n            }\n            return {\n                key: spec.key,\n                label: spec.label,\n                type: 'text',\n                value: value == null ? '' : value,\n            };\n        });\n\n        return [dateField, ...channelFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function(){\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingRowId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingRowId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const instrumentId = this.get('instrument.id');\n            const dispData = this.get('displacementData');\n            const tempData = this.get('temperatureData');\n            const dispRow = dispData ? dispData.find(r => r.id === rowId) : null;\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            const promises = [];\n            if(dispRow && dispRow.deleteRecord){ dispRow.deleteRecord(); promises.push(dispRow.save(adapterOptions)); }\n            if(tempRow && tempRow.deleteRecord){ tempRow.deleteRecord(); promises.push(tempRow.save(adapterOptions)); }\n            Promise.all(promises)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const specs = this.get('columnSpecs') || [];\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            const safeNum = (v) => {\n                const n = Number(v);\n                return Number.isFinite(n) ? n : 0;\n            };\n\n            // Convert each anchor's MM input → bits (matches legacy convertMMToAdictBits).\n            const dispValues = [];\n            specs.forEach((spec) => {\n                if(spec.isTemp){ return; }\n                dispValues.push(this._mmToBits(snapshot[spec.key]));\n            });\n            const tempValues = [safeNum(snapshot['__temp__'])];\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingRowId');\n\n            const tempData = this.get('temperatureData') || [];\n            const dispData = this.get('displacementData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            const existingTempAtNew = findRow(tempData, newId);\n            const existingDispAtNew = findRow(dispData, newId);\n            const hasExistingAtNewId = !!(existingTempAtNew || existingDispAtNew);\n\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                const oldDisp = findRow(dispData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n                if(oldDisp){ oldDisp.deleteRecord(); oldDisp.save(adapterOptions); }\n            }\n\n            if(hasExistingAtNewId){\n                const promises = [];\n                if(existingTempAtNew){ existingTempAtNew.set('values', tempValues); promises.push(existingTempAtNew.save(adapterOptions)); }\n                else { promises.push(store.createRecord('temperature-value', { id: newId, values: tempValues }).save(adapterOptions)); }\n                if(existingDispAtNew){ existingDispAtNew.set('values', dispValues); promises.push(existingDispAtNew.save(adapterOptions)); }\n                else { promises.push(store.createRecord('displacement-value', { id: newId, values: dispValues }).save(adapterOptions)); }\n                Promise.all(promises).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            const tempRecord = store.createRecord('temperature-value', { id: newId, values: tempValues });\n            tempRecord.save(adapterOptions);\n\n            const dispRecord = store.createRecord('displacement-value', { id: newId, values: dispValues });\n            dispRecord.save(adapterOptions).then(refreshRoute).catch(handleErr);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import Component from '@ember/component';\n\nexport default Component.extend({\n});","import Component from '@ember/component';\n\nexport default Component.extend({\n});","import Component from '@ember/component';\n\nexport default Component.extend({\n});","import Component from '@ember/component';\n\nexport default Component.extend({\n});","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    router: service(),\n    advancedSearchLoading:false,\n\n    startTriggerDate: \"\",\n    endTriggerDate:\"\",\n    search:\"\",\n    level:\"\",\n\n    init() {\n        this._super(...arguments);\n        this.loadSearchFieldsFromURL();\n    },\n\n    loadSearchFieldsFromURL() {\n        let paramsObj = this.get(\"paginationSearchConfig.searchObject\");\n        this.setProperties({\n            startTriggerDate: paramsObj[\"startTriggerDate\"] ? paramsObj[\"startTriggerDate\"] : undefined,\n            endTriggerDate: paramsObj[\"endTriggerDate\"] ? paramsObj[\"endTriggerDate\"] : undefined,\n            search: paramsObj[\"search\"] ? paramsObj[\"search\"] : undefined,\n            instrumentId: paramsObj[\"instrumentId\"] ? paramsObj[\"instrumentId\"] : undefined,\n            level: paramsObj[\"level\"] ? paramsObj[\"level\"] : undefined,\n        });\n    },\n    dispatchRequest(mode){\n        this.set(\"visibleAdvancedFilter\", true);\n        if(mode === \"search\"){\n            \n            this.set(\"paginationSearchConfig.searchObject.page\",this.get(\"page\"));\n            this.set(\"paginationSearchConfig.searchObject.page\",this.get(\"page_size\"));\n\n            // Helper: only add non-empty values\n            const addIfPresent = (key, value) => {\n            if (value !== null && value !== undefined && value !== \"\") {\n                this.set(`paginationSearchConfig.searchObject.${key}`, value);\n            }\n            };\n\n            addIfPresent(\"startTriggerDate\", this.startTriggerDate);\n            addIfPresent(\"endTriggerDate\", this.endTriggerDate);\n            addIfPresent(\"search\", this.search);\n            addIfPresent(\"level\", this.level);\n            \n            this.get(\"refreshAlertEvents\")();\n        }\n        else{\n            this.set(\"paginationSearchConfig.searchObject.page\",this.get(\"page\"));\n            this.set(\"paginationSearchConfig.searchObject.page\",this.get(\"page_size\"));\n            this.set(`paginationSearchConfig.searchObject.startTriggerDate`, undefined);\n            this.set(`paginationSearchConfig.searchObject.endTriggerDate`, undefined);\n            this.set(`paginationSearchConfig.searchObject.search`, undefined);\n            this.set(`paginationSearchConfig.searchObject.level`, undefined);\n\n            // Clear local state\n            this.setProperties({\n                startTriggerDate: null,\n                endTriggerDate: null,\n                search: null,\n                level: null,\n            });\n            this.get(\"refreshAlertEvents\")();\n\n        }\n\n    },\n    actions: {\n        apply() {\n            this.dispatchRequest(\"search\");\n        },\n        reset(){\n            this.dispatchRequest(\"reset\");\n        }\n    },\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    router: service(),\n    advancedSearchLoading:false,\n\n    startCreationDate: \"\",\n    endCreationDate:\"\",\n    startTriggerDate: \"\",\n    endTriggerDate:\"\",\n    search:\"\",\n    instrumentId:\"\",\n    level:\"\",\n\n    init() {\n        this._super(...arguments);\n        this.loadSearchFieldsFromURL();\n    },\n\n    loadSearchFieldsFromURL() {\n        let paramsObj = Object.fromEntries(new URLSearchParams(window.location.search).entries());\n        this.setProperties({\n            startCreationDate: paramsObj[\"startCreationDate\"] ? paramsObj[\"startCreationDate\"] : undefined,\n            endCreationDate: paramsObj[\"endCreationDate\"] ? paramsObj[\"endCreationDate\"] : undefined,\n            startTriggerDate: paramsObj[\"startTriggerDate\"] ? paramsObj[\"startTriggerDate\"] : undefined,\n            endTriggerDate: paramsObj[\"endTriggerDate\"] ? paramsObj[\"endTriggerDate\"] : undefined,\n            search: paramsObj[\"search\"] ? paramsObj[\"search\"] : undefined,\n            instrumentId: paramsObj[\"instrumentId\"] ? paramsObj[\"instrumentId\"] : undefined,\n            level: paramsObj[\"level\"] ? paramsObj[\"level\"] : undefined,\n        });\n    },\n    dispatchRequest(mode){\n        this.set(\"visibleAdvancedFilter\", true);\n        if(mode === \"search\"){\n            let queryParams = {\n                page: this.get(\"page\"),\n                page_size: this.get(\"page_size\"),\n            };\n\n            // Helper: only add non-empty values\n            const addIfPresent = (key, value) => {\n            if (value !== null && value !== undefined && value !== \"\") {\n                queryParams[key] = value;\n            }\n            };\n\n            addIfPresent(\"startCreationDate\", this.startCreationDate);\n            addIfPresent(\"endCreationDate\", this.endCreationDate);\n            addIfPresent(\"startTriggerDate\", this.startTriggerDate);\n            addIfPresent(\"endTriggerDate\", this.endTriggerDate);\n            addIfPresent(\"search\", this.search);\n            addIfPresent(\"instrumentId\", this.instrumentId);\n            addIfPresent(\"level\", this.level);\n\n            this.get(\"router\")\n                .transitionTo(\"alerts\", { queryParams })\n                .then(() => {\n                    if (!this.isDestroyed && !this.isDestroying) {\n                    this.set(\"advancedSearchLoading\", false);\n                    this.loadSearchFieldsFromURL();\n                    }\n                });\n        }\n        else{\n            let queryParams = {\n                page: this.get(\"page\"),\n                page_size: this.get(\"page_size\"),\n                startCreationDate: undefined,\n                endCreationDate: undefined,\n                startTriggerDate: undefined,\n                endTriggerDate: undefined,\n                search: undefined,\n                instrumentId: undefined,\n                level: undefined,\n            };\n\n            // Clear local state\n            this.setProperties({\n                startCreationDate: null,\n                endCreationDate: null,\n                startTriggerDate: null,\n                endTriggerDate: null,\n                search: null,\n                instrumentId: null,\n                level: null,\n            });\n            this.get(\"router\")\n                .replaceWith(\"alerts\", { queryParams })\n                .then(() => {\n                if (!this.isDestroyed && !this.isDestroying) {\n                    this.set(\"advancedSearchLoading\", false);\n                    this.loadSearchFieldsFromURL();\n                }\n                });\n        }\n\n    },\n    actions: {\n        apply() {\n            this.dispatchRequest(\"search\");\n        },\n        reset(){\n            this.dispatchRequest(\"reset\");\n        }\n    },\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\n\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    approvedInstrForYAxisUnit:['Adict', 'dExto', 'dCable','dRebar','dMPBX','dConv','d-micro','dRebarv2','BluVibe'],\n    router: service(),\n    page:1,\n    page_size:20,\n    displayFrequencyEventsDropDown:false,\n    advancedSearchLoading:false,\n    startDate: undefined,\n    chartType: undefined,\n    endDate:undefined,\n         xMin:undefined,\n         xMax:undefined,\n     yLeftMin:undefined,\n     yLeftMax:undefined,\n    yRightMin:undefined,\n    yRightMax:undefined,\n    yAxisUnit:undefined,\n    selectedFrequencyEventsDropdownDate:undefined,\n    visibleAdvancedFilter:true,\n    isFrequencyGraph:false,\n    init() {\n        this._super(...arguments);\n        this.setFieldsFromURL();\n    },\n    isInstrumentApproved: computed('instrumentType', function() {\n        return this.approvedInstrForYAxisUnit.includes(this.instrumentType);\n    }),\n    getFrequencyEventsDropDownData:computed(\"frequencyEventsDropDownDateData\",function(){\n        let data = []\n        if(this.get(\"displayFrequencyEventsDropDown\") == true && this.get(\"frequencyEventsDropDownDateData\") != null){\n            this.get(\"frequencyEventsDropDownDateData\") .forEach((timestampString, index)=>{\n                if(!data.includes(timestampString)){\n                    data.push(timestampString);\n                }\n            });\n        }\n        return data;\n    }),\n    setFieldsFromURL() {\n        //Store initial values from the URL and pre load it into corresponding components\n\n        const queryParams = new URLSearchParams(window.location.search);\n        const startDateParam = queryParams.get('advancedStartDate');\n        const endDateParam = queryParams.get('advancedEndDate');\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        const xMinParam = queryParams.get('advancedXMin');\n        const xMaxParam = queryParams.get('advancedXMax');\n        const yLeftMinParam = queryParams.get('advancedYLeftMin');\n        const yLeftMaxParam = queryParams.get('advancedYLeftMax');\n        const yRightMinParam = queryParams.get('advancedYRightMin');\n        const yRightMaxParam = queryParams.get('advancedYRightMax');\n        const selectedFreqEventDateParam = queryParams.get('selectedFreqEventDate');\n    \n        if (selectedFreqEventDateParam) {\n            this.set('selectedFrequencyEventsDropdownDate', selectedFreqEventDateParam.trim());\n        } else {\n            this.set('selectedFrequencyEventsDropdownDate', undefined);\n        }\n    \n        if (startDateParam) {\n            this.set('startDate', startDateParam);//this.formatDateForDatetimeLocal(decodedStartDate));\n        } else {\n            this.set('startDate', undefined);\n        }\n    \n        if (endDateParam) {\n            this.set('endDate', endDateParam);//this.formatDateForDatetimeLocal(decodedEndDate));\n        } else {\n            this.set('endDate', undefined);\n        }\n    \n        if (yAxisUnitParam) {\n            let unitSymbolTranslator = yAxisUnitParam == \"m\" ? \"meterValue\" : yAxisUnitParam == \"mm\" ? \"millimeterValue\" : yAxisUnitParam == \"ft\" ? \"footValue\" : \"inchValue\"\n            // console.log(\"translated unit symbol is \" + unitSymbolTranslator);\n            // this.set(unitSymbolTranslator , true);\n            this.set(\"yAxisUnit\", yAxisUnitParam);\n        } else {\n            this.set(\"yAxisUnit\", undefined);\n            // this.set(\"meterValue\" , false);\n            // this.set(\"millimeterValue\", false);\n            // this.set(\"footValue\", false);\n            // this.set(\"inchValue\", false); \n        }\n    \n        if (xMinParam) {\n            this.set('xMin', xMinParam);\n        } else {\n            this.set('xMin', undefined);\n        }\n    \n        if (xMaxParam) {\n            this.set('xMax', xMaxParam);\n        } else {\n            this.set('xMax', undefined);\n        }\n    \n        if (yLeftMinParam) {\n            this.set('yLeftMin', yLeftMinParam);\n        } else {\n            this.set('yLeftMin', undefined);\n        }\n    \n        if (yLeftMaxParam) {\n            this.set('yLeftMax', yLeftMaxParam);\n        } else {\n            this.set('yLeftMax', undefined);\n        }\n    \n        if (yRightMinParam) {\n            this.set('yRightMin', yRightMinParam);\n        } else {\n            this.set('yRightMin', undefined);\n        }\n    \n        if (yRightMaxParam) {\n            this.set('yRightMax', yRightMaxParam);\n        } else {\n            this.set('yRightMax', undefined);\n        }\n\n    },\n    formatDateForDatetimeLocal(dateStr) {\n        // Assuming the format from the URL is 'YYYY-MM-DDTHH:mm' or similar\n        const date = new Date(dateStr);\n        return date.toISOString().slice(0, 16); // Converts to 'YYYY-MM-DDTHH:mm' format\n    },\n    dispatchRequest:function(mode){\n        this.set(\"advancedSearchLoading\", true);\n        let id = this.get(\"instrumentId\");\n        let page = this.get(\"page\");\n        let page_size = this.get(\"page_size\");\n        let chart_type = this.get(\"chartType\");\n        let startDate = this.get(\"startDate\");\n        let endDate   = this.get(\"endDate\");\n        let yAxisUnit = this.get(\"yAxisUnit\");\n        let xMax      = this.get(\"xMax\"); \n        let xMin      = this.get(\"xMin\");\n        let yLeftMax  = this.get(\"yLeftMax\"); \n        let yLeftMin  = this.get(\"yLeftMin\");\n        let yRightMax = this.get(\"yRightMax\"); \n        let yRightMin = this.get(\"yRightMin\");\n        let selectedFreqEventDate = this.get(\"selectedFrequencyEventsDropdownDate\");\n        if(mode == \"search\"){\n            if(this.get(\"filterType\") == \"frequency\"){\n                this.get('router').transitionTo(\"frequency-graphs.frequency-graph\", id, \"displacement-values\",{ queryParams: { \"chart_type\":chart_type,\n                    \"advancedStartDate\":startDate,\n                    \"advancedEndDate\": endDate,\n                    \"advancedYAxisUnit\": yAxisUnit,\n                    \"advancedXMin\": xMin,\n                    \"advancedXMax\": xMax,\n                    \"advancedYLeftMin\": yLeftMin,\n                    \"advancedYLeftMax\": yLeftMax,\n                    \"advancedYRightMin\": yRightMin,\n                    \"advancedYRightMax\": yRightMax, \n                }}).then(() => {\n                    if (!this.isDestroyed && !this.isDestroying) {\n                        this.set(\"advancedSearchLoading\", false);\n                        this.setFieldsFromURL();\n                    }      \n                  });\n            }else if(this.get(\"filterType\") == \"temporal\"){         \n                this.get('router').transitionTo(\"temporal-graphs.temporal-graph\", id, \"displacement-values\",{ queryParams: { \"advancedStartDate\":startDate,\n                    \"advancedEndDate\": endDate,\n                    \"advancedYAxisUnit\": yAxisUnit,\n                    \"advancedXMin\": xMin,\n                    \"advancedXMax\": xMax,\n                    \"advancedYLeftMin\": yLeftMin,\n                    \"advancedYLeftMax\": yLeftMax,\n                    \"advancedYRightMin\": yRightMin,\n                    \"advancedYRightMax\": yRightMax, \n                }}).then(() => {\n                    if (!this.isDestroyed && !this.isDestroying) {\n                        this.set(\"advancedSearchLoading\", false);\n                        this.setFieldsFromURL();\n                    }      \n                  });\n            }\n            else if(this.get(\"filterType\") == \"raw-data\"){\n                // console.log(`SEND instrument Type:${this.instrumentType}, yAxisUnit:${yAxisUnit}`);\n                this.get('router').transitionTo(\"raw-data\", id, { queryParams: {\"advancedStartDate\":startDate,\n                    \"page\":page,\n                    \"page_size\":page_size,\n                    \"advancedEndDate\": endDate,\n                    \"advancedYAxisUnit\": yAxisUnit,\n                    \"advancedXMin\": xMin,\n                    \"advancedXMax\": xMax,\n                    \"advancedYLeftMin\": yLeftMin,\n                    \"advancedYLeftMax\": yLeftMax,\n                    \"advancedYRightMin\": yRightMin,\n                    \"advancedYRightMax\": yRightMax, \n                }}).then(() => {\n                    if (!this.isDestroyed && !this.isDestroying) {\n                        this.set(\"advancedSearchLoading\", false);\n                        this.setFieldsFromURL();\n                    }      \n                  });\n            }\n            else if(this.get(\"filterType\") == \"raw-frequency-events-data\"){\n                this.get('router').transitionTo(\"raw-frequency-events-data\", id, { queryParams: {\n                    \"page\": page,\n                    \"page_size\": page_size,\n                    // \"instrument_id\": this.get[\"instrumentId\"] ? this.get[\"instrumentId\"] : undefined,\n                    \"selectedFreqEventDate\":selectedFreqEventDate != undefined ? selectedFreqEventDate : undefined,\n                    \"advancedYAxisUnit\": yAxisUnit,\n                }}).then(() => {\n                    if (!this.isDestroyed && !this.isDestroying) {\n                        this.set(\"advancedSearchLoading\", false);\n                        this.setFieldsFromURL();\n                    }      \n                });\n            }\n            else if(this.get(\"filterType\") == \"frequency-events\"){\n                this.get('router').transitionTo(\"frequency-events\", id, { queryParams: {\n                    \"page\": page,\n                    \"page_size\": page_size,\n                    \"advancedStartDate\":startDate,\n                    \"advancedEndDate\": endDate,\n                    \"advancedYAxisUnit\": yAxisUnit,\n                }}).then(() => {\n                    if (!this.isDestroyed && !this.isDestroying) {\n                        this.set(\"advancedSearchLoading\", false);\n                        this.setFieldsFromURL();\n                    }      \n                });\n            }\n        }else if(mode == \"reset\"){\n            let newYAxisUnit = this.instrumentType === \"Adict\" ? \"RAW\" : this.instrumentType === \"d-micro\" ? \"μm\" : this.instrumentType === \"BluVibe\" ? \"mm\" : this.approvedInstrForYAxisUnit.includes(this.instrumentType) ? \"mm\" :  undefined;\n            this.set(\"yAxisUnit\", newYAxisUnit);\n            this.set(\"startDate\", undefined);\n            this.set(\"endDate\", undefined);\n            this.set(\"selectedFreqEventDate\", undefined);\n\n            if(this.get(\"filterType\") === \"frequency\"){\n                this.get('router').transitionTo('frequency-graphs.frequency-graph', id, 'displacement-values',{ queryParams: { \"chart_type\":chart_type,\n                    \"advancedStartDate\":undefined,\n                    \"advancedEndDate\": undefined,\n                    \"advancedYAxisUnit\": newYAxisUnit,\n                    \"advancedXMin\": undefined,\n                    \"advancedXMax\": undefined,\n                    \"advancedYLeftMin\": undefined,\n                    \"advancedYLeftMax\": undefined,\n                    \"advancedYRightMin\": undefined,\n                    \"advancedYRightMax\": undefined, \n                }}).then(() => {\n                    if (!this.isDestroyed && !this.isDestroying) {\n                        this.set(\"advancedSearchLoading\", false);\n                        this.setFieldsFromURL();\n                      }      \n                  });\n            }\n            else if(this.get(\"filterType\") === \"raw-data\"){\n                this.get('router').transitionTo(\"raw-data\", id, { queryParams: {\"advancedStartDate\":undefined,\n                    \"advancedEndDate\": undefined,\n                    \"page\":1,\n                    \"page_size\":20,\n                    \"advancedYAxisUnit\": newYAxisUnit,\n                    \"advancedXMin\": undefined,\n                    \"advancedXMax\": undefined,\n                    \"advancedYLeftMin\": undefined,\n                    \"advancedYLeftMax\": undefined,\n                    \"advancedYRightMin\": undefined,\n                    \"advancedYRightMax\": undefined, \n                }}).then(() => {\n                    if (!this.isDestroyed && !this.isDestroying) {\n                        this.set(\"advancedSearchLoading\", false);\n                        this.setFieldsFromURL();\n                    }      \n                  });\n            }\n            else if(this.get(\"filterType\") == \"temporal\"){\n                this.get('router').transitionTo(\"temporal-graphs.temporal-graph\", id, \"displacement-values\",{ queryParams: {\"advancedStartDate\":undefined,\n                    \"advancedEndDate\": undefined,\n                    \"advancedYAxisUnit\": newYAxisUnit,\n                    \"advancedXMin\": undefined,\n                    \"advancedXMax\": undefined,\n                    \"advancedYLeftMin\": undefined,\n                    \"advancedYLeftMax\": undefined,\n                    \"advancedYRightMin\": undefined,\n                    \"advancedYRightMax\": undefined,\n                }}).then(() => {\n                    if (!this.isDestroyed && !this.isDestroying) {\n                        this.set(\"advancedSearchLoading\", false);\n                        this.setFieldsFromURL();\n                      }       \n                  });\n            }\n            else if(this.get(\"filterType\") == \"raw-frequency-events-data\"){\n                this.get('router').transitionTo(\"raw-frequency-events-data\", id, { queryParams: {\n                    \"page\": 1,\n                    \"page_size\": 20,\n                    // \"instrument_id\": this.get[\"instrumentId\"] ? this.get[\"instrumentId\"] : undefined,\n                    \"selectedFreqEventDate\": undefined, \n                    \"advancedStartDate\":undefined,\n                    \"advancedEndDate\": undefined,\n                    \"advancedEndDate\": undefined,\n                    \"advancedYAxisUnit\": newYAxisUnit,\n                }}).then(() => {\n                    if (!this.isDestroyed && !this.isDestroying) {\n                        this.set(\"advancedSearchLoading\", false);\n                        this.setFieldsFromURL();\n                    }      \n                  });\n            }\n            else if(this.get(\"filterType\") == \"frequency-events\"){\n                this.get('router').transitionTo(\"frequency-events\", id, { queryParams: {\n                    \"page\": 1,\n                    \"page_size\": 20,\n                    \"advancedStartDate\":undefined,\n                    \"advancedEndDate\": undefined,\n                    \"advancedYAxisUnit\": newYAxisUnit,\n                }}).then(() => {\n                    if (!this.isDestroyed && !this.isDestroying) {\n                        this.set(\"advancedSearchLoading\", false);\n                        this.setFieldsFromURL();\n                    }      \n                  });\n            }\n\n        }\n    },\n    meterValue: computed('yAxisUnit', function() {\n        return this.get('yAxisUnit') === 'm';\n    }),\n    millimeterValue: computed('yAxisUnit', function() {\n        return this.get('yAxisUnit') === 'mm';\n    }),\n    footValue: computed('yAxisUnit', function() {\n        return this.get('yAxisUnit') === 'ft';\n    }),\n    inchValue: computed('yAxisUnit', function() {\n        return this.get('yAxisUnit') === 'in';\n    }),\n    microValue: computed('yAxisUnit', function() {\n        return this.get('yAxisUnit') === 'μm';\n    }),\n    RAWValue: computed('yAxisUnit', function() {\n        //There are special cases for specific instruments\n        //For Adict, RAW = bits\n        return this.get('yAxisUnit') === 'RAW' || this.get('yAxisUnit') === 'bits';\n    }),\n    actions: {\n        updateFrequencyEventsSelectedDatetime(input){\n            console.log(\"updateFrequencyEventsSelectedDatetime\")\n            console.log(input);\n            if(input.length == 0){\n                this.set(\"selectedFrequencyEventsDropdownDate\", undefined);\n            }else{\n                this.set(\"selectedFrequencyEventsDropdownDate\", input);\n            }\n        },\n        toggleVisibility(){\n            // console.log(\"clicked Advanced Filter\");\n            let visiblity = this.get('visibleAdvancedFilter');\n            this.set(\"visibleAdvancedFilter\", !visiblity);\n        },\n        toggleYAxisUnit(property) {\n            this.set(\"yAxisUnit\", property);\n        },\n        updateDateProperty(propertyName, changeEvent) {\n            this.set(propertyName, changeEvent.target.value == \"\" ? undefined : changeEvent.target.value);\n        },\n        search(){\n            // console.log(`charrtType:${this.get(\"chartType\")}`)\n            this.dispatchRequest(\"search\");\n        },\n        reset(){\n            // console.log(`charrtType:${this.get(\"chartType\")}`)\n            this.dispatchRequest(\"reset\");\n        }\n    },\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    store: service(),\n    session: service(),\n    userProfileService: service(),\n    api: service(),\n    userProfile:null,\n\n    activeActionTab:null,\n    alertEventsPaginationList: null,\n    paginationSearchConfig:{\n        pagination:{page:1, page_size:20, total_pages:1},\n        searchObject:{}\n    },\n    settingsConfig:{\n        MAX_TIMEOUT_AWAITING_SAMPLING: 750,ASCENDING_CONST: \"ASC\",DESCENDING_CONST: \"DESC\",\n    },\n\n    isMasterUser:  computed(\n    'userProfileService.is_master_key_account',\n        function () {\n            return (\n                this.userProfileService.userProfileService?.profile?.is_master_key_account || false\n            );\n        }\n    ),\n    async init() {\n        this._super(...arguments);\n        await this.getAlertEvents();\n    },\n    getAlertEvents: async function(){\n        this.set(\"isLoading\", true);\n        this.set(\"alertEventList\", []);\n        this.set(\"alertEventRecord\", null)\n        let payload = {\n            profile_id: this.get(\"alert.id\"),\n            page: this.paginationSearchConfig.pagination.page,\n            page_size: this.paginationSearchConfig.pagination.page_size\n        };\n        let ordering = \"\";\n        //Build ordering=\n        if ('id' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.id') != null){\n            ordering += this.get('paginationSearchConfig.searchObject')['id'] + \",\";\n        }\n\n        if ('level' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.level') != null){\n            ordering += this.get('paginationSearchConfig.searchObject')['level'] + \",\";\n        }\n\n        if ('triggered_at' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.triggered_at') != null){\n            ordering += this.get('paginationSearchConfig.searchObject')['triggered_at'] + \",\";\n        }\n        if(ordering != \"\")\n            payload[\"ordering\"] = ordering;\n\n        //Build Search Filters\n        if ('search' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.search') != null){\n            payload[\"search\"] = this.get('paginationSearchConfig.searchObject.search');\n        }\n        if ('level' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.level') != null){\n            payload[\"level\"] = this.get('paginationSearchConfig.searchObject.level');\n        }\n        if ('startCreationDate' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.startCreationDate') != null){\n            payload[\"startCreationDate\"] = this.get('paginationSearchConfig.searchObject.startCreationDate');\n        }\n        if ('endCreationDate' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.endCreationDate') != null){\n            payload[\"endCreationDate\"] = this.get('paginationSearchConfig.searchObject.endCreationDate');\n        }\n        if ('startTriggerDate' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.startTriggerDate') != null){\n            payload[\"startTriggerDate\"] = this.get('paginationSearchConfig.searchObject.startTriggerDate');\n        }\n        if ('endTriggerDate' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.endTriggerDate') != null){\n            payload[\"endTriggerDate\"] = this.get('paginationSearchConfig.searchObject.endTriggerDate');\n        }\n        \n        let records = await this.store.query('alert-event', payload);\n        this.set(\"paginationSearchConfig.pagination.total_pages\", records.meta.pagination.total_pages);\n        this.processAlertEvents(records);\n        this.updatePaginationList();\n        this.set(\"alertEventRecord\", records);\n        this.set(\"isLoading\", false);\n    },\n    processAlertEvents:function(rawData){\n        let list = [];\n        let globalDatetimeFormat = this.get(\"globalDatetimeFormat\").value;\n        rawData.forEach(alert => {\n            list.push({\n                id:alert.id,\n                isMuted:alert.isMuted,\n                level:alert.level,\n                message: alert.message,\n                triggeredAt: alert.triggeredAt\n                    ? moment(alert.triggeredAt).format(globalDatetimeFormat)\n                    : '',\n            })\n        });\n        this.set(\"alertEventList\", list);\n    },\n    updatePaginationList: function () {\n        let range = [];\n        const maxPageToShow = 3; // Adjust this based on how many pages you want to show in the middle\n        const paginationObj = this.paginationSearchConfig.pagination;\n    \n        // Always include the first page\n        range.push(1);\n    \n        if (paginationObj['total_pages'] <= maxPageToShow + 2) {\n            // If total pages are small enough, show all pages\n            for (let i = 2; i <= paginationObj['total_pages']; i++) {\n                range.push(i);\n            }\n        } else if (paginationObj['page'] <= maxPageToShow) {\n            // Current page is within the first few pages\n            for (let i = 2; i <= maxPageToShow + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['total_pages']);\n        } else if (paginationObj['page'] >= paginationObj['total_pages'] - maxPageToShow + 1) {\n            // Current page is within the last few pages\n            range.push('...');\n            for (let i = paginationObj['total_pages'] - maxPageToShow; i <= paginationObj['total_pages']; i++) {\n                range.push(i);\n            }\n        } else {\n            // Current page is in the middle\n            range.push('...');\n            for (let i = paginationObj['page'] - 1; i <= paginationObj['page'] + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['total_pages']);\n        }\n    \n        this.set('alertEventsPaginationList', range);\n    },\n    actions: {\n        jumpToPage(page){\n            // this.getSensorProfileList();\n            if(page != \"...\"){\n                this.set('paginationSearchConfig.pagination.page', Number.parseInt(page))\n                this.getAlertEvents();\n            }\n        },\n        cycleActionBar(tabName){\n            if (tabName === this.activeActionTab){\n                this.set(\"activeActionTab\", null);\n            }\n            else{ \n                this.set(\"activeActionTab\", tabName);\n            }\n        },\n        columnCycleOrdering(id){\n            const searchObject = this.get(\"paginationSearchConfig.searchObject\");\n            switch(id){\n                case \"id\":\n                    const idColumnComp = document.getElementById(\"id\");\n                    if(searchObject['id'] === `id`){\n                        this.set(\"paginationSearchConfig.searchObject.id\", `-id`);\n                        idColumnComp.textContent = \"ID v\";\n                    }else if(searchObject['id'] === `-id`){\n                        this.set(\"paginationSearchConfig.searchObject.id\", null);\n                        idColumnComp.textContent = \"ID \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.id\", `id`);\n                        idColumnComp.textContent = \"ID ^\";\n                    };\n                    break;\n                case \"level\":\n                    const firstNameColumnComp = document.getElementById(\"level\");\n                    if(searchObject['level'] === `level`){\n                        this.set(\"paginationSearchConfig.searchObject.level\", `-level`);\n                        firstNameColumnComp.textContent = \"Level v\";\n                    }else if(searchObject['level'] === `-level`){\n                        this.set(\"paginationSearchConfig.searchObject.level\", null);\n                        firstNameColumnComp.textContent = \"Level \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.level\", `level`);\n                        firstNameColumnComp.textContent = \"Level ^\";\n                    };\n                    break;\n                case \"triggered_at\":\n                    const lastNameColumnComp = document.getElementById(\"triggered_at\");\n                    if(searchObject['triggered_at'] === `triggered_at`){\n                        this.set(\"paginationSearchConfig.searchObject.triggered_at\", `-triggered_at`);\n                        lastNameColumnComp.textContent = \"Triggered At v\";\n                    }else if(searchObject['triggered_at'] === `-triggered_at`){\n                        this.set(\"paginationSearchConfig.searchObject.triggered_at\", null);\n                        lastNameColumnComp.textContent = \"Triggered At \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.triggered_at\", `triggered_at`);\n                        lastNameColumnComp.textContent = \"Triggered At ^\";\n                    };\n                    break;\n            }\n            this.getAlertEvents();\n        }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport { fas } from '@fortawesome/free-solid-svg-icons';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    session: service(),\n    userProfileService: service(),\n    api: service(),\n    userProfile:null,\n    isLoading:false,\n\n\n    DISPFIELDS:[\"flatline_threshold_unit\", \"spike_threshold_unit\", \"disp_threshold_unit\", \"threshold_unit\", \"delta_unit\"],\n    TIMEFIELDS:[\"max_duration_unit\", \"period_window_unit\", \"period_window_unit\"],\n    TEMPFIELDS:[\"temp_threshold_unit\"],\n    RATEFIELDS:[\"roc_threshold_unit\"],\n    DISPCATEGORYCONST:\"disp\",\n    TIMECATEGORYCONST:\"time\",\n    TEMPCATEGORYCONST:\"temp\",\n    RATECATEGORYCONST:\"rate\",\n    BOOLEANCATEGORYCONST:\"boolean\",\n    NUMBERCATEGORYCONST:\"number\",\n    TEXTCATEGORYCONST:\"text\",\n\n    alertParameter:[],\n    isEditing:false,\n    changesForm:{},\n\n    outOfDispDistMatchError: \"Displacement units must be matching\",\n    outOfTimeMatchError: \"Time units must be matching\",\n\n    isMasterUser:  computed(\n    'userProfileService.is_master_key_account',\n        function () {\n            return (\n                this.userProfileService.userProfileService?.profile?.is_master_key_account || false\n            );\n        }\n    ),\n    async init() {\n        this._super(...arguments);\n        // tempUnits=@model.tempUnits dispUnits=@model.dispUnits timeUnits=@model.timeUnits\n        // console.log(\"dispUnits\");\n        // console.log(this.get(\"dispUnits\"))\n        // console.log(\"tempUnits\");\n        // console.log(this.get(\"tempUnits\"))\n        // console.log(\"timeUnits\");\n        // console.log(this.get(\"timeUnits\"))\n        await this.getAlertParameters();\n    },\n    getAlertParameters: async function(){\n        try{\n            this.set(\"isLoading\", true);\n            this.set(\"alertParameter\", []);\n\n            let url = getApiBaseUrl() + `/alerts-parameters/?profile_id=${this.get(\"alert.id\")}`;\n            let response = await this.api.fetch(url, {\n                method: 'GET',\n                headers: {\n                    'Content-Type': 'application/json',\n                    Authorization: 'Bearer ' + localStorage.token  \n                },\n            });\n            if (response.ok) {\n                let data = await response.json();\n                this.processAlertParamter(data[\"data\"]);\n            } else {\n                console.log(\"Error in getAlertParameters Fetch:\");\n            }\n        }\n        catch(error){\n            console.log(\"Error in getAlertParameters General:\" + error);\n        }\n        this.set(\"isLoading\", false);\n    },\n    processAlertParamter: function(obj){\n        let final =[];\n        Object.keys(obj).forEach((key, i) =>{\n            const dataObj = {\n                index: i,\n                key:key,\n                formValue: obj[key] === \"True\"\n                    ? true\n                    : obj[key] === \"False\"\n                    ? false\n                    : obj[key], \n                value: obj[key] === \"True\"\n                    ? true\n                    : obj[key] === \"False\"\n                    ? false\n                    : obj[key], \n                category:this.isRateDispTempTime(obj[key]),\n                keyText: this.translateParameterKey(key)\n            };\n            final.push(dataObj);\n            this.set(`isEditing_${key}`, false );\n        });\n        this.set(\"alertParameter\", final);\n    },\n    translateParameterKey: function(text) {\n        if (!text) return '';\n\n        return text\n            .replace(/_/g, ' ')     // replace underscores with spaces\n            .toLowerCase()          // normalize\n            .replace(/^\\w/, c => c.toUpperCase());  // capitalize first letter\n    },\n    arrayCastString:function(strArr){\n        return strArr.split(',');\n    },\n    isBooleanString: function(value) {\n        return (\n            typeof value === \"string\" &&\n            (value.toLowerCase() === \"true\" || value.toLowerCase() === \"false\")\n        );\n    },\n    isRateDispTempTime:function(paramUnitValue){\n        //paramUnitKey: \"flatline_threshold_unit\" \n        //paramUnitValue: \"in\"\n        let dispArr = this.get(\"dispUnits\").value.split(',');\n        let tempArr = this.get(\"tempUnits\").value.split(',');\n        let timeArr = this.get(\"timeUnits\").value.split(',');\n        if(dispArr.includes(paramUnitValue)){\n            return this.DISPCATEGORYCONST;\n        }\n        else if(tempArr.includes(paramUnitValue)){\n            return this.TEMPCATEGORYCONST;\n        }\n        else if(timeArr.includes(paramUnitValue)){\n            return this.TIMECATEGORYCONST;\n        }\n        else if(paramUnitValue.includes(\"/\")){\n            return this.RATECATEGORYCONST;\n        }\n        else if(this.isBooleanString(paramUnitValue)){\n            return this.BOOLEANCATEGORYCONST;\n        }\n        else if(!isNaN(paramUnitValue)){\n            return this.NUMBERCATEGORYCONST;\n        }else{\n            return this.TEXTCATEGORYCONST;\n        }\n    },\n    handleRevertChanges:function(){\n        this.set(\"changesForm\", {});\n        let curr = this.get(\"alertParameter\");\n        for(let i=0; i< curr.length; i ++){\n            let obj = curr[i];\n            this.set(`ERROR_DISP_${obj.key}`, false);\n            this.set(`ERROR_TIME_${obj.key}`, false);\n\n        }\n\n    },\n    validateDispAndTimeConsistency(changesForm) {\n\n        const dispUnitsMap = {};\n        const timeUnitsMap = {};\n\n        const DISP_FIELDS = this.get(\"DISPFIELDS\");\n        const TIME_FIELDS = this.get(\"TIMEFIELDS\");\n        const RATE_FIELDS = this.get(\"RATEFIELDS\");\n\n        Object.entries(changesForm).forEach(([key, rawValue]) => {\n\n            if (!key.endsWith(\"_unit\")) return;\n            if (!rawValue) return;\n\n            let value = String(rawValue).trim().toLowerCase();\n\n            // ---------- RATE ----------\n            if (RATE_FIELDS.includes(key) && value.includes(\"/\")) {\n                const [disp, time] = value.split(\"/\");\n\n                if (!dispUnitsMap[disp]) dispUnitsMap[disp] = [];\n                if (!timeUnitsMap[time]) timeUnitsMap[time] = [];\n\n                dispUnitsMap[disp].push(key);\n                timeUnitsMap[time].push(key);\n                return;\n            }\n\n            // ---------- DISPLACEMENT ----------\n            if (DISP_FIELDS.includes(key)) {\n                if (!dispUnitsMap[value]) dispUnitsMap[value] = [];\n                dispUnitsMap[value].push(key);\n                return;\n            }\n\n            // ---------- TIME ----------\n            if (TIME_FIELDS.includes(key)) {\n                if (!timeUnitsMap[value]) timeUnitsMap[value] = [];\n                timeUnitsMap[value].push(key);\n                return;\n            }\n\n            // ---------- TEMPERATURE ----------\n            // Explicitly ignored for disp/time consistency\n        });\n\n        const dispUnitTypes = Object.keys(dispUnitsMap);\n        const timeUnitTypes = Object.keys(timeUnitsMap);\n\n        const isDispConsistent = dispUnitTypes.length <= 1;\n        const isTimeConsistent = timeUnitTypes.length <= 1;\n\n        let dispKeysInconsistent = [];\n        let timeKeysInconsistent = [];\n\n        if (!isDispConsistent) {\n            dispKeysInconsistent = Object.values(dispUnitsMap).flat();\n        }\n\n        if (!isTimeConsistent) {\n            timeKeysInconsistent = Object.values(timeUnitsMap).flat();\n        }\n\n        return {\n            isDispConsistent,\n            isTimeConsistent,\n            dispKeysInconsistent,\n            timeKeysInconsistent\n        };\n    },\n    async patchAlertParameters() {\n        try {\n            const response = await fetch(\n            `${getApiBaseUrl()}/alerts-parameters/`,\n            {\n                method: \"PATCH\",\n                headers: {\n                \"Content-Type\": \"application/json\",\n                Authorization: `Bearer ${localStorage.token}`\n                },\n                body: JSON.stringify({\n                    profile_id: Number(this.get(\"alert\").id),\n                    parameters:this.get(\"changesForm\")\n                })\n            }\n            );\n\n            if (response.status === 200) {\n                const data = await response.json();\n                //Reset UI\n                this.handleRevertChanges();\n                this.set(\"isEditing\", false);\n                window.location.reload();\n            } else {\n                console.error(\"PATCH failed:\", response.status);\n            }\n\n        } catch (error) {\n            console.error(\"PATCH error:\", error);\n        }\n    },\n    actions: {\n        async applyChanges() {\n            let curr = this.get(\"alertParameter\");\n            let currForm = this.get(\"changesForm\");\n            curr.forEach(obj =>{\n                if(Object.hasOwn(currForm, obj.key)){\n                }\n                else{\n                    currForm[obj.key] = isNaN(obj.value) ? obj.value : Number(obj.value);\n                }\n            });\n            this.set(\"changesForm\", currForm);\n            let validationReport = this.validateDispAndTimeConsistency(currForm);\n            console.log(validationReport)\n            console.log(currForm)\n            curr = this.get(\"alertParameter\");\n            for(let i=0; i< curr.length; i ++){\n                let obj = curr[i];\n                if(validationReport.timeKeysInconsistent.includes(obj.key)){\n                    this.set(`ERROR_TIME_${obj.key}`, true);\n                }\n                else{\n                    this.set(`ERROR_TIME_${obj.key}`, false);\n                }\n                if(validationReport.dispKeysInconsistent.includes(obj.key)){\n                    this.set(`ERROR_DISP_${obj.key}`, true);\n                }\n                else{\n                    this.set(`ERROR_DISP_${obj.key}`, false);\n                }\n            }\n            if(validationReport.isDispConsistent && validationReport.isTimeConsistent){\n                await this.patchAlertParameters()\n            }\n\n        },\n        revertChanges() {\n            this.handleRevertChanges();\n            this.set(\"isEditing\", false);\n        },\n        updateCheckbox(pramObjKey, componentKey){\n            let comp = document.getElementById(componentKey)\n            let newForm = this.get(\"changesForm\");\n            newForm[pramObjKey] = comp.checked;\n            this.set(\"changesForm\", newForm);\n        },\n        updateInput(pramObjKey, componentKey){\n            let comp = document.getElementById(componentKey)\n            let newForm = this.get(\"changesForm\");\n            newForm[pramObjKey] = isNaN(comp.value) ? comp.value : Number(comp.value);\n            this.set(\"changesForm\", newForm);\n        },\n        updateRateDropdownUnit(key, value) {\n            let newForm = this.get(\"changesForm\");\n            newForm[key] = value;\n            this.set(\"changesForm\", newForm);\n        },\n        updateDispDropdownUnit(key, value) {\n            console.log(\"Disp:\" + \" key: \" + key + \" value: \" + value);\n            let newForm = this.get(\"changesForm\");\n            newForm[key] = value;\n            this.set(\"changesForm\", newForm);\n            //DO NOTHING\n        },\n        updateTimeDropdownUnit(key, value) {\n            console.log(\"Time:\" + \" key: \" + key + \" value: \" + value);\n            let newForm = this.get(\"changesForm\");\n            newForm[key] = value;\n            this.set(\"changesForm\", newForm);\n            //DO NOTHING\n        },\n        updateTempDropdownUnit(key, value) {\n            console.log(\"Temp:\" + \" key: \" + key + \" value: \" + value);\n            let newForm = this.get(\"changesForm\");\n            newForm[key] = value;\n            this.set(\"changesForm\", newForm);\n            //DO NOTHING\n        },\n        updateIsEditingProperty(){\n            let curr = this.get(\"isEditing\");\n            this.handleRevertChanges();\n            this.set(\"isEditing\", !curr);\n    }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\nimport moment from 'moment';\nimport {getAlertEvaluationTypesDictionary} from './../utils/alert-evaluation-types-translation';\nimport intlTelInput from 'intl-tel-input';\nimport { getApiBaseUrl } from './../utils/api-config';\n\nexport default Component.extend({\n    session: service(),\n    userProfileService: service(),\n    api: service(),\n    store: service(),\n    alertsBatch: service(),\n    userProfile:null,\n\n    instr:null,\n    currentSelectedChannelsAnchorDiagram:[],\n    isLoading:false,\n    emailTags: [],\n    phoneTags: [],\n    // Saved Contacts / Contact Groups recipients (mirrors the create form)\n    contactList: [],\n    groupList: [],\n    selectedContacts: [],   // [{ id, label, email, phone_number, use_email, use_phone }]\n    selectedGroups: [],     // [{ id, label, use_email, use_phone }]\n    isEditingName:false,\n    isEditingDeliveryMethod:false,\n    isEditingNote:false,\n    isEditingStatuses:false,\n    isEditingChannels:false,\n    isDisabledEmailTextbox:true,\n    isDisabledPhoneTextbox:true,\n    METHOD_DELIVERY_OBJ:{\n        \"NATIVE\": {\n            id: \"NATIVE\",\n            value: \"Native\"\n        },\n        \"EMAIL\": {\n            id: \"EMAIL\",\n            value: \"Email\"\n        },\n        \"PHONE\": {\n            id: \"PHONE\",\n            value: \"Phone\"\n        },\n    },\n    isMasterUser:  computed('userProfileService.is_master_key_account',\n        function () {\n            return (\n                this.userProfileService.userProfileService?.profile?.is_master_key_account || false\n            );\n        }\n    ),\n    async init(){\n        this._super(...arguments);\n\n        this.set(\"contactList\", []);\n        this.set(\"groupList\", []);\n        this.set(\"selectedContacts\", []);\n        this.set(\"selectedGroups\", []);\n        this.getContacts();\n        this.getGroups();\n\n        let instrID = this.get(\"alert\").instrumentId;\n        let instr = null;\n        if(instrID){\n            instr = await this.store.findRecord('instrument', instrID);\n            this.set(\"instr\", instr);\n        }\n        console.log(\"instr\")\n        console.log(this.get(\"instr\"))\n        console.log(\"alert\")\n        console.log(this.get(\"alert\"))\n    },\n    getContacts: async function(){\n        let url = `${getApiBaseUrl()}/api/contacts/`;\n        let response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: { \"Content-Type\": \"application/json\", Authorization: `Bearer ${localStorage.token}` },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json();\n            const list = (responseData.data || []).map(c => Object.assign({}, c, {\n                label: `${c.last_name || \"\"}, ${c.first_name || \"\"}`.trim()\n                    + (c.email ? ` — ${c.email}` : \"\")\n                    + (c.phone_number ? ` — ${c.phone_number}` : \"\")\n            }));\n            this.set(\"contactList\", list);\n        } else {\n            this.set(\"contactList\", []);\n        }\n    },\n    getGroups: async function(){\n        let url = `${getApiBaseUrl()}/api/contacts/groups/`;\n        let response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: { \"Content-Type\": \"application/json\", Authorization: `Bearer ${localStorage.token}` },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json();\n            const list = (responseData.data || []).map(g => Object.assign({}, g, {\n                label: `${g.name}${typeof g.contact_count === \"number\" ? ` (${g.contact_count})` : \"\"}`\n            }));\n            this.set(\"groupList\", list);\n        } else {\n            this.set(\"groupList\", []);\n        }\n    },\n    // reactive channel-gate proxies (the disabled flags are toggled with the method checkboxes)\n    emailCheckedEdit: computed(\"isDisabledEmailTextbox\", function(){\n        return !this.get(\"isDisabledEmailTextbox\");\n    }),\n    phoneCheckedEdit: computed(\"isDisabledPhoneTextbox\", function(){\n        return !this.get(\"isDisabledPhoneTextbox\");\n    }),\n    recipientsEnabledEdit: computed(\"emailCheckedEdit\", \"phoneCheckedEdit\", function(){\n        return this.get(\"emailCheckedEdit\") || this.get(\"phoneCheckedEdit\");\n    }),\n    directEmailDisabledStyle: computed(\"emailCheckedEdit\", function(){\n        return this.get(\"emailCheckedEdit\") ? \"\" : \"opacity:0.5;pointer-events:none;\";\n    }),\n    directPhoneDisabledStyle: computed(\"phoneCheckedEdit\", function(){\n        return this.get(\"phoneCheckedEdit\") ? \"\" : \"opacity:0.5;pointer-events:none;\";\n    }),\n    recipientsDisabledStyle: computed(\"recipientsEnabledEdit\", function(){\n        return this.get(\"recipientsEnabledEdit\") ? \"\" : \"opacity:0.5;pointer-events:none;\";\n    }),\n    displaySelectedContacts: computed(\"selectedContacts.[]\", \"emailCheckedEdit\", \"phoneCheckedEdit\", function(){\n        const e = this.get(\"emailCheckedEdit\");\n        const p = this.get(\"phoneCheckedEdit\");\n        return (this.get(\"selectedContacts\") || []).map(c => Object.assign({}, c, {\n            emailDisabled: !(e && c.email),\n            phoneDisabled: !(p && c.phone_number),\n        }));\n    }),\n    displaySelectedGroups: computed(\"selectedGroups.[]\", \"emailCheckedEdit\", \"phoneCheckedEdit\", function(){\n        const e = this.get(\"emailCheckedEdit\");\n        const p = this.get(\"phoneCheckedEdit\");\n        return (this.get(\"selectedGroups\") || []).map(g => Object.assign({}, g, {\n            emailDisabled: !e,\n            phoneDisabled: !p,\n        }));\n    }),\n    // Read-only (view mode) summaries of the saved recipients\n    channelsLabel: function(useEmail, usePhone){\n        const chans = [];\n        if (useEmail) chans.push(\"Email\");\n        if (usePhone) chans.push(\"Phone\");\n        return chans.length ? chans.join(\" & \") : \"no channels\";\n    },\n    displayViewContacts: computed(\"alert\", \"contactList.[]\", function(){\n        const alert = this.get(\"alert\");\n        const dmd = alert?.deliveryMethodData || {};\n        let raw = Array.isArray(dmd.contacts)\n            ? dmd.contacts.map(c => ({ id: c.id, use_email: c.use_email, use_phone: c.use_phone }))\n            : null;\n        const recipients = alert?.recipients;\n        if (raw === null && Array.isArray(recipients)) {\n            raw = recipients.filter(r => r.type === \"contact\").map(r => ({ id: r.id, use_email: r.use_email, use_phone: r.use_phone, _name: r.name }));\n        }\n        raw = raw || [];\n        return raw.map(rc => {\n            const full = (this.get(\"contactList\") || []).find(c => c.id === rc.id) || {};\n            const name = rc._name\n                || (full.first_name || full.last_name ? `${full.first_name || \"\"} ${full.last_name || \"\"}`.trim() : `Contact ${rc.id}`);\n            return { id: rc.id, summary: `${name} — ${this.channelsLabel(rc.use_email, rc.use_phone)}` };\n        });\n    }),\n    displayViewGroups: computed(\"alert\", \"groupList.[]\", function(){\n        const alert = this.get(\"alert\");\n        const dmd = alert?.deliveryMethodData || {};\n        let raw = Array.isArray(dmd.contact_groups)\n            ? dmd.contact_groups.map(g => ({ id: g.id, use_email: g.use_email, use_phone: g.use_phone }))\n            : null;\n        const recipients = alert?.recipients;\n        if (raw === null && Array.isArray(recipients)) {\n            raw = recipients.filter(r => r.type === \"group\" || r.type === \"contact_group\").map(r => ({ id: r.id, use_email: r.use_email, use_phone: r.use_phone, _name: r.name }));\n        }\n        raw = raw || [];\n        return raw.map(rg => {\n            const full = (this.get(\"groupList\") || []).find(g => g.id === rg.id) || {};\n            const name = rg._name || full.name || `Group ${rg.id}`;\n            return { id: rg.id, summary: `${name} — ${this.channelsLabel(rg.use_email, rg.use_phone)}` };\n        });\n    }),\n    // Prefill selected contacts/groups from the saved alert. Handles both the documented\n    // nested `delivery_method_data.contacts/contact_groups` shape AND the flat `recipients[]`\n    // shape the BE currently returns ([{type,id,use_email,use_phone,name,email,phone}]).\n    prefillRecipientsFromAlert: function(){\n        const alert = this.get(\"alert\");\n        const dmd = alert?.deliveryMethodData || {};\n        let rawContacts = Array.isArray(dmd.contacts)\n            ? dmd.contacts.map(c => ({ id: c.id, use_email: c.use_email, use_phone: c.use_phone }))\n            : null;\n        let rawGroups = Array.isArray(dmd.contact_groups)\n            ? dmd.contact_groups.map(g => ({ id: g.id, use_email: g.use_email, use_phone: g.use_phone }))\n            : null;\n\n        // Fallback to the flat recipients[] array (carries name/email/phone inline)\n        const recipients = alert?.recipients;\n        if ((rawContacts === null || rawGroups === null) && Array.isArray(recipients)) {\n            if (rawContacts === null) {\n                rawContacts = recipients\n                    .filter(r => r.type === \"contact\")\n                    .map(r => ({ id: r.id, use_email: r.use_email, use_phone: r.use_phone, _name: r.name, _email: r.email, _phone: r.phone }));\n            }\n            if (rawGroups === null) {\n                rawGroups = recipients\n                    .filter(r => r.type === \"group\" || r.type === \"contact_group\")\n                    .map(r => ({ id: r.id, use_email: r.use_email, use_phone: r.use_phone, _name: r.name }));\n            }\n        }\n        rawContacts = rawContacts || [];\n        rawGroups = rawGroups || [];\n\n        const selContacts = rawContacts.map(rc => {\n            const full = (this.get(\"contactList\") || []).find(c => c.id === rc.id) || {};\n            return {\n                id: rc.id,\n                label: full.label || rc._name || `Contact ${rc.id}`,\n                email: full.email !== undefined ? full.email : rc._email,\n                phone_number: full.phone_number !== undefined ? full.phone_number : rc._phone,\n                use_email: !!rc.use_email,\n                use_phone: !!rc.use_phone,\n            };\n        });\n        const selGroups = rawGroups.map(rg => {\n            const full = (this.get(\"groupList\") || []).find(g => g.id === rg.id) || {};\n            return {\n                id: rg.id,\n                label: full.name || rg._name || `Group ${rg.id}`,\n                use_email: !!rg.use_email,\n                use_phone: !!rg.use_phone,\n            };\n        });\n        this.set(\"selectedContacts\", selContacts);\n        this.set(\"selectedGroups\", selGroups);\n    },\n    anchorDiagramLabelInitalValue:computed(\"alert\", \"instr\", function(){\n        let alert = this.get(\"alert\");\n        let instr = this.get(\"instr\");\n        let channels = alert.channels;\n        let data = {};\n        if(instr){\n            for(let i=1; i <= instr.channelsNum; i++){\n                if(channels.includes(`channel_${i}`)){\n                    data[`channel_${i}`] = \"Selected\";\n                }\n                else{\n\n                    data[`channel_${i}`] = \"-\";\n                }\n            }\n        }\n        return data;\n    }),\n    anchorDiagramCheckboxInitalValue:computed(\"alert\", function(){\n        let alert = this.get(\"alert\");\n        let data = {};\n        alert.channels.forEach(element => {\n            data[element] = true;\n        });\n        return data;\n    }),\n    resetEmailPhoneTextboxToAlertProfile: function(){\n        let methodsArr = this.get(\"alert\").deliveryMethod;\n        if(methodsArr!= null && methodsArr.length > 0 && methodsArr.includes(\"EMAIL\")){\n            this.set(\"isDisabledEmailTextbox\", false);\n        }\n        else{\n            this.set(\"isDisabledEmailTextbox\", true);\n        }\n        if(methodsArr!= null && methodsArr.length > 0 && methodsArr.includes(\"PHONE\")){\n            this.set(\"isDisabledPhoneTextbox\", false);\n        }\n        else{\n            this.set(\"isDisabledPhoneTextbox\", true);\n        }\n    },\n    getMethodDeliveryList:computed(function(){\n        let arr = [];\n        Object.keys(this.METHOD_DELIVERY_OBJ).forEach(key =>{\n            arr.push(this.METHOD_DELIVERY_OBJ[key]);\n        })\n        console.log(arr)\n        return arr;\n    }),\n    isContainEmailMethod:computed(\"alert\", function(){\n        let methodsArr = this.get(\"alert\").deliveryMethod;\n        if(methodsArr!= null && methodsArr.length > 0 && methodsArr.includes(\"EMAIL\")){\n            return true;\n        }\n        else{\n            return false;\n        }\n    }),\n    isContainPhoneMethod:computed(\"alert\", function(){\n        let methodsArr = this.get(\"alert\").deliveryMethod;\n        if(methodsArr!= null && methodsArr.length > 0 && methodsArr.includes(\"PHONE\")){\n            return true;\n        }\n        else{\n            return false;\n        }\n    }),\n    getDeliveryMethod:computed(\"alert\", function(){\n        let methodsArr = this.get(\"alert\").deliveryMethod;\n        if(methodsArr!= null && methodsArr.length > 0){\n            return methodsArr;\n        }\n        else{\n            return [];\n        }\n    }),\n    getMethodTypesLabel:computed(\"alert\", function(){\n        let methodsArr = this.get(\"alert\").deliveryMethod;\n        if(methodsArr!= null && methodsArr.length > 0){\n            let selectedMethods = \"\";\n            for(let i=0; i < methodsArr.length; i++){\n                selectedMethods += this.METHOD_DELIVERY_OBJ[methodsArr[i]].value;\n                if(i < (methodsArr.length - 1)){\n                    selectedMethods += \", \";\n                }\n                \n            }  \n            console.log(selectedMethods)\n            return selectedMethods;\n        }\n        else{\n            return \"-\";\n        }\n    }),\n    getEmailMethod:computed(\"alert\", function(){\n        let email = this.get(\"alert\").email;\n        if(email != null){\n            return email;\n        }\n        else{\n            return \"\";\n        }\n    }),\n    getPhoneMethod:computed(\"alert\", function(){\n        let phone = this.get(\"alert\").phone;\n        if(phone != null){\n            return phone;\n        }\n        else{\n            return \"\";\n        }\n    }),\n    getEvaluationType:computed(\"alert\", function(){\n        return getAlertEvaluationTypesDictionary(this.get(\"alert\")?.evaluationType)  || \"-\";\n    }),\n    getLastEvaluatedAt:computed(\"alert\", function(){\n        let globalDatetimeFormat = this.get(\"globalDatetimeFormat\").value;\n        return this.get(\"alert\")?.lastEvaluatedAt && moment(this.get(\"alert\").lastEvaluatedAt).format(globalDatetimeFormat) || \"-\";\n    }),\n    getLastDataReceivedAt:computed(\"alert\", function(){\n        let globalDatetimeFormat = this.get(\"globalDatetimeFormat\").value;\n        return this.get(\"alert\")?.lastDataReceivedAt && moment(this.get(\"alert\").lastDataReceivedAt).format(globalDatetimeFormat) || \"-\";\n    }),\n    getTriggeredAt:computed(\"alert\", function(){\n        let globalDatetimeFormat = this.get(\"globalDatetimeFormat\").value;\n        return this.get(\"alert\")?.lastTriggeredAt && moment(this.get(\"alert\").lastTriggeredAt).format(globalDatetimeFormat) || \"-\";\n    }),\n    getCreatedAt:computed(\"alert\", function(){\n        let globalDatetimeFormat = this.get(\"globalDatetimeFormat\").value;\n        return this.get(\"alert\")?.createdAt && moment(this.get(\"alert\").createdAt).format(globalDatetimeFormat) || \"-\";\n    }),\n    getIsAcknowledged:computed(\"alert\", function(){\n        return this.get(\"alert\")?.isAcknowledged || \"\";\n    }),\n    getIsActive:computed(\"alert\", function(){\n        return this.get(\"alert\")?.isActive || \"\";\n    }),\n    getIsMuted:computed(\"alert\", function(){\n        return this.get(\"alert\")?.isMuted || \"\";\n    }),\n    getName:computed(\"alert\", function(){\n        return this.get(\"alert\")?.name || \"\";\n    }),\n    getID:computed(\"alert\", function(){\n        return this.get(\"alert\")?.id || \"\";\n    }),\n    getNote:computed(\"alert\", function(){\n        return this.get(\"alert\")?.note || \"\";\n    }),\n    initItlPhoneInput:function(){\n        setTimeout(() => {\n            const phoneInput = this.element.querySelector('#phone-input');\n            if (phoneInput && !this._iti) {\n                // Parse existing phone to separate dial code and number\n                const existingPhone = this.get('getPhoneMethod') || '';\n                this._iti = intlTelInput(phoneInput, {\n                    initialCountry: \"ca\",\n                    preferredCountries: [\"ca\", \"us\"],\n                    separateDialCode: true,\n                });\n                // Don't pre-fill — tags handle existing numbers\n                phoneInput.value = '';\n                phoneInput.addEventListener('keydown', (e) => {\n                    if (e.key === 'Enter') {\n                        e.preventDefault();\n                        const dialCode = this._iti.getSelectedCountryData().dialCode;\n                        const number = (phoneInput.value || \"\").replace(/\\D/g, '');\n                        const fullNumber = number ? `+${dialCode}${number}` : \"\";\n                        if (fullNumber && !this.phoneTags.includes(fullNumber)) {\n                            const tags = this.phoneTags.slice();\n                            tags.push(fullNumber);\n                            this.set('phoneTags', tags);\n                            phoneInput.value = '';\n                        }\n                    }\n                });\n            }\n        }, 150);\n\n    },\n    updateIsEditing:function(key){\n        switch(key){\n            case \"name\":\n                this.set(\"isEditingName\", !this.isEditingName);\n                break;\n            case \"deliveryMethod\":\n                this.set(\"isEditingDeliveryMethod\", !this.isEditingDeliveryMethod);\n                this.resetEmailPhoneTextboxToAlertProfile();\n                if (this.isEditingDeliveryMethod) {\n                    // Prefer the authoritative delivery_method_data arrays; fall back to legacy CSV columns\n                    const dmd = this.get('alert')?.deliveryMethodData || {};\n                    let emailTags = Array.isArray(dmd.email) ? dmd.email.slice() : [];\n                    if (emailTags.length === 0) {\n                        const existingEmail = this.get('getEmailMethod') || '';\n                        emailTags = existingEmail ? existingEmail.split(',').map(s => s.trim()).filter(Boolean) : [];\n                    }\n                    this.set('emailTags', emailTags);\n                    let phoneTags = Array.isArray(dmd.phone) ? dmd.phone.slice() : [];\n                    if (phoneTags.length === 0) {\n                        const existingPhone = this.get('getPhoneMethod') || '';\n                        phoneTags = existingPhone ? existingPhone.split(',').map(s => s.trim()).filter(Boolean) : [];\n                    }\n                    this.set('phoneTags', phoneTags);\n                    this.prefillRecipientsFromAlert();\n                    this.initItlPhoneInput();\n                } else {\n                    this.set('selectedContacts', []);\n                    this.set('selectedGroups', []);\n                    if (this._iti) {\n                        this._iti.destroy();\n                        this._iti = null;\n                    }\n                }\n                break;\n            case \"note\":\n                this.set(\"isEditingNote\", !this.isEditingNote);\n                break;\n            case \"statuses\":\n                this.set(\"isEditingStatuses\", !this.isEditingStatuses);\n                break;\n            case \"channels\":\n                if(!this.isEditingChannels){\n                    console.log(\"clearing currentSelectedChannelsAnchorDiagram\")\n                    this.set(\"currentSelectedChannelsAnchorDiagram\", this.get(\"alert\").channels)\n                }\n                this.set(\"isEditingChannels\", !this.isEditingChannels);\n                break;\n        }\n\n    },\n    updateError:function(typeKey, errorMessage){\n        switch(typeKey){\n        }\n    },\n    resetError:function(typeKey){\n        switch(typeKey){\n        }\n    },\n    validateEmail(email) {\n        if (!email) return false;\n        if (email.length > 254) return false;\n        const emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}$/;\n        return emailRegex.test(email);\n    },\n    actions: {\n        onEmailTagKeydown(e) {\n            if (e.key === 'Enter') {\n                e.preventDefault();\n                const value = e.target.value.trim();\n                if (value && !this.emailTags.includes(value)) {\n                    if (this.validateEmail(value)) {\n                        const tags = this.emailTags.slice();\n                        tags.push(value);\n                        this.set('emailTags', tags);\n                        e.target.value = '';\n                    }\n                }\n            }\n        },\n        removeEmailTag(tag) {\n            this.set('emailTags', this.emailTags.filter(t => t !== tag));\n        },\n        removePhoneTag(tag) {\n            this.set('phoneTags', this.phoneTags.filter(t => t !== tag));\n        },\n        addContactRecipient(event) {\n            const id = Number(event.target.value);\n            event.target.value = \"\";\n            if (!id) return;\n            if ((this.selectedContacts || []).some(c => c.id === id)) return;\n            const contact = (this.contactList || []).find(c => c.id === id);\n            if (!contact) return;\n            const emailOn = this.get(\"emailCheckedEdit\");\n            const phoneOn = this.get(\"phoneCheckedEdit\");\n            const entry = {\n                id: contact.id,\n                label: contact.label,\n                email: contact.email,\n                phone_number: contact.phone_number,\n                use_email: emailOn && !!contact.email,\n                use_phone: phoneOn && !!contact.phone_number,\n            };\n            this.set(\"selectedContacts\", (this.selectedContacts || []).concat([entry]));\n        },\n        removeContactRecipient(contact) {\n            this.set(\"selectedContacts\", (this.selectedContacts || []).filter(c => c.id !== contact.id));\n        },\n        toggleContactChannel(contact, channel) {\n            const list = (this.selectedContacts || []).map(c => {\n                if (c.id !== contact.id) return c;\n                const next = Object.assign({}, c);\n                if (channel === \"email\") next.use_email = !c.use_email;\n                if (channel === \"phone\") next.use_phone = !c.use_phone;\n                return next;\n            });\n            this.set(\"selectedContacts\", list);\n        },\n        addGroupRecipient(event) {\n            const id = Number(event.target.value);\n            event.target.value = \"\";\n            if (!id) return;\n            if ((this.selectedGroups || []).some(g => g.id === id)) return;\n            const group = (this.groupList || []).find(g => g.id === id);\n            if (!group) return;\n            const entry = {\n                id: group.id,\n                label: group.name,\n                use_email: this.get(\"emailCheckedEdit\"),\n                use_phone: this.get(\"phoneCheckedEdit\"),\n            };\n            this.set(\"selectedGroups\", (this.selectedGroups || []).concat([entry]));\n        },\n        removeGroupRecipient(group) {\n            this.set(\"selectedGroups\", (this.selectedGroups || []).filter(g => g.id !== group.id));\n        },\n        toggleGroupChannel(group, channel) {\n            const list = (this.selectedGroups || []).map(g => {\n                if (g.id !== group.id) return g;\n                const next = Object.assign({}, g);\n                if (channel === \"email\") next.use_email = !g.use_email;\n                if (channel === \"phone\") next.use_phone = !g.use_phone;\n                return next;\n            });\n            this.set(\"selectedGroups\", list);\n        },\n        toggleDeliveryMethod(id){\n            switch(id){\n                case \"EMAIL\":\n                    this.set(\"isDisabledEmailTextbox\", !this.isDisabledEmailTextbox);\n                    break;\n                case \"PHONE\":\n                    this.set(\"isDisabledPhoneTextbox\", !this.isDisabledPhoneTextbox);\n                    break;\n            }\n        },\n        triggerDiagramReset(){\n        },\n        updateChannelCheckboxInput(key, isChannelChecked){\n            console.log(\"Input key: \" + key + \" isChannelChecked: \" + isChannelChecked);\n            let channels = this.get(\"currentSelectedChannelsAnchorDiagram\");\n            if(isChannelChecked){\n                //Add channel   channels list\n                channels.push(key)\n            }\n            else{\n                //Remove channel from channels list\n                channels = channels.filter(ch => ch !== key);\n            }\n            this.set(\"currentSelectedChannelsAnchorDiagram\", channels)\n            console.log(this.get(\"currentSelectedChannelsAnchorDiagram\"))\n\n\n        },\n        async statusButton(type){\n            //type = deactivate or activate or unmute or mute or unacknowledge or acknowledge\n            \n            try {\n                this.set(\"isLoading\", true);\n\n                await this.alertsBatch.batchEdit(type, [this.get(\"alert\").id]);\n                window.location.reload();\n                this.set(\"isLoading\", false);\n                this.set(\"isEditingStatuses\", false);\n                \n            } catch (err) {\n                console.error('Batch edit error:', err);\n            } \n        },\n        updateIsEditingProperty(key){\n            this.updateIsEditing(key);\n        },\n        async updateChannelProperty(typeKey){\n            try{\n                //Eg. docukey: nameTextbox, typeKey: name\n                //Reset UI Error\n                \n                this.resetError(typeKey);\n                this.set(\"isLoading\", true);\n                \n                let channels = this.get(\"currentSelectedChannelsAnchorDiagram\");\n                let alert = this.get(\"alert\");\n\n                await this.store\n                    .adapterFor('alert')\n                    .updateChannels(alert.id, channels);\n                \n                //Reset UI\n                this.set(\"isLoading\", false);\n                this.updateIsEditing(typeKey);\n                window.location.reload();\n\n            }\n            catch(error){\n                console.log(\"Error in alert-profile-sidebar-home updateChannelProperty: \" + error);\n            }\n\n        },\n        async updateDeliveryMethodProperties(){\n            try{\n                this.set(\"isLoading\", true);\n                // Which channels are checked (read from the DOM checkboxes)\n                let newMethodsArr = [];\n                Object.keys(this.METHOD_DELIVERY_OBJ).forEach(key=>{\n                    let id = `${key}_checkbox`;\n                    const comp1 = document.getElementById(id);\n                    if(comp1 != null && comp1.checked)\n                        newMethodsArr.push(key)\n                });\n                const emailOn = newMethodsArr.includes(\"EMAIL\");\n                const phoneOn = newMethodsArr.includes(\"PHONE\");\n\n                // Build the NEW-shape delivery payload (matches the create contract)\n                const is_delivery_method = {\n                    native_alert_trigger_method: newMethodsArr.includes(\"NATIVE\"),\n                    email_alert_trigger_method: emailOn,\n                    phone_alert_trigger_method: phoneOn,\n                };\n                const delivery_method_data = {\n                    email: emailOn ? (this.emailTags || []).slice() : [],\n                    phone: phoneOn ? (this.phoneTags || []).slice() : [],\n                    contacts: (this.selectedContacts || []).map(c => ({\n                        id: c.id,\n                        use_email: !!c.use_email && emailOn,\n                        use_phone: !!c.use_phone && phoneOn,\n                    })),\n                    contact_groups: (this.selectedGroups || []).map(g => ({\n                        id: g.id,\n                        use_email: !!g.use_email && emailOn,\n                        use_phone: !!g.use_phone && phoneOn,\n                    })),\n                };\n\n                const alert = this.get(\"alert\");\n                const url = `${getApiBaseUrl()}/alerts/${alert.id}/delivery/`;\n                let response = await this.api.fetch(url, {\n                    method: \"PATCH\",\n                    headers: {\n                        \"Content-Type\": \"application/json\",\n                        Authorization: `Bearer ${localStorage.token}`,\n                    },\n                    body: JSON.stringify({ is_delivery_method, delivery_method_data }),\n                });\n\n                this.set(\"isLoading\", false);\n                if (response.status >= 200 && response.status < 300) {\n                    this.updateIsEditing(\"deliveryMethod\");\n                    window.location.reload();\n                } else {\n                    let detail = \"\";\n                    try { detail = JSON.stringify(await response.json()); } catch (e) { detail = \"\"; }\n                    console.log(`Error saving delivery (${response.status}).\\n${detail}`);\n                    window.alert(`Could not save delivery (${response.status}).\\n\\n${detail}`);\n                }\n            }\n            catch(error){\n                this.set(\"isLoading\", false);\n                console.log(\"Error in alert-profile-sidebar-home updateDeliveryMethodProperties: \" + error);\n            }\n\n        },\n        async updateProperty(docuKey,typeKey){\n            try{\n                //Eg. docukey: nameTextbox, typeKey: name\n                //Reset UI Error\n                this.resetError(typeKey);\n                this.set(\"isLoading\", true);\n                \n                let docu = document.getElementById(docuKey);\n                let newValue = docu.value.trim();\n                // console.log(\"typekey: \" + typeKey)\n                // console.log(\"newValue: \" + newValue)\n                let alert = this.get(\"alert\");\n                alert.set(typeKey, newValue);\n                await alert.save();\n                \n                //Reset UI\n                this.set(\"isLoading\", false);\n                this.updateIsEditing(typeKey);\n                window.location.reload();\n\n            }\n            catch(error){\n                console.log(\"Error in alert-profile-sidebar-home updateProperty: \" + error);\n            }\n\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n  userProfileService: service(),\n  api: service(),\n  init(){\n      this._super(...arguments);\n  },\n  rippleClass: computed('alert', function () {\n      return `alert-ripple-container level-${this.get('alert.level')} is-muted-${this.get('alert.isMuted')}`;\n  }),\n  getAlertName:computed(\"alert\",function(){\n      return this.get(\"alert\").name;\n  }),\n  actions: {\n    updateTab(value){\n      if(this.get(\"licenceIsValid\")){\n        this.set(\"currentTab\", value);\n      }\n    },\n  \n  }\n\n\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { getOwner } from '@ember/application';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\n\nexport default Component.extend({\n    router:service(),\n    alertsBatch:service(),\n    init() {\n        this._super(...arguments);\n    },\n\n    getAlertsList:computed(\"alerts\", function(){\n        let globalDatetimeFormat = this.get(\"globalDatetimeFormat\").value;\n\n        let alerts = this.get(\"alerts\");\n        let list = [];\n        alerts.forEach(alert => {\n            list.push({\n                id:alert.id,\n                instrumentId:alert.instrumentId,\n                isMuted:alert.isMuted,\n                isActive:alert.isActive,\n                name:alert.name,\n                level:alert.level,\n                createdAt: alert.createdAt\n                    ? moment(alert.createdAt).format(globalDatetimeFormat)\n                    : '',\n\n                lastTriggeredAt: alert.lastTriggeredAt\n                    ? moment(alert.lastTriggeredAt).format(globalDatetimeFormat)\n                    : '',\n            })\n        });\n        return list;\n    }),\n\n    actions:{\n        async deleteAlertProfile(alertID){\n            if (!window.confirm('Delete this alert profile? This cannot be undone.')) {\n                return;\n            }\n\n            this.set('batchActionLoading', true);\n            try {\n                await this.alertsBatch.batchDelete([alertID]);\n                getOwner(this).lookup('route:alerts').refresh();\n            } catch (err) {\n                console.error('Delete error:', err);\n            } finally {\n                this.set('batchActionLoading', false);\n            }\n        },\n        jumpToInstrumentProfile(aletID){\n            this.router.transitionTo('edit-alert-profile', aletID);\n        },\n        onCheckedAlertsRow(alertID) {\n\n            let curr = this.get(\"batchSelectedAlertsID\") || [];\n\n            if (curr.includes(alertID)) {\n                curr = curr.filter(id => id !== alertID);\n            } else {\n                curr = [...curr, alertID];\n            }\n\n            this.set(\"batchSelectedAlertsID\", curr);\n        }\n\n    }\n})","import { computed, observer } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { scheduleOnce } from '@ember/runloop';\nimport Component from \"@ember/component\";\nimport { getApiBaseUrl } from '../../utils/api-config';\nimport { renderChart, refreshMainChartData, updateChart, disableEnableBarChartLengend } from \"../../helpers/packs-validation-analytics-library\";\n\n// Main-data option keys mirror what BE expects on `?main=`. Display values are\n// what the operator sees in the dropdown.\nconst MAIN_OPTIONS = [\n    { key: 'validations_general',            value: 'Validations (General)' },\n    { key: 'validations_pack_type',          value: 'Validations (Pack Type)' },\n    { key: 'validations_general_failed',     value: 'Validations (General Failed)' },\n    { key: 'validations_pack_type_failed',   value: 'Validations (Pack Type Failed)' },\n    { key: 'validations_pack_type_repaired', value: 'Validations (Pack Type Repaired)' },\n    { key: 'validations_general_repaired',   value: 'Validations (General Repaired)' },\n    { key: 'validations_general_employee',   value: 'Validations (General Employee)' },\n    { key: 'validations_pack_type_employee', value: 'Validations (Pack Type Employee)' },\n    { key: 'employee_overruled',             value: 'Employee (Overruled)' },\n];\n\nconst PHASE_OPTIONS = [\n    { key: 'I',    value: 'I' },\n    { key: 'II',   value: 'II' },\n    { key: 'both', value: 'Both' },\n];\n\n// FE-side only — controls how the `YYYY-MM-DD` strings from BE are displayed on the X-axis\n// when secondary=Date. BE sends day-bucketed ISO dates regardless; FE re-formats client-side.\n// Time-portion variants always render as `00:00:00` since BE buckets by day.\nconst DATE_FORMAT_OPTIONS = [\n    { key: 'YYYY/MM/DD',          value: 'YYYY/MM/DD' },\n    { key: 'YYYY/DD/MM',          value: 'YYYY/DD/MM' },\n    { key: 'DD/MM/YYYY',          value: 'DD/MM/YYYY' },\n    { key: 'MM/DD/YYYY',          value: 'MM/DD/YYYY' },\n    { key: 'YYYY/MM/DD HH:mm:ss', value: 'YYYY/MM/DD HH:mm:ss' },\n    { key: 'YYYY/DD/MM HH:mm:ss', value: 'YYYY/DD/MM HH:mm:ss' },\n    { key: 'DD/MM/YYYY HH:mm:ss', value: 'DD/MM/YYYY HH:mm:ss' },\n    { key: 'MM/DD/YYYY HH:mm:ss', value: 'MM/DD/YYYY HH:mm:ss' },\n];\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    session: service(),\n\n    // Form state. Read directly from these properties — do NOT getElementById.\n    mainDataKey:      'validations_general',\n    secondaryDataKey: 'Count',\n    phaseKey:         'both',\n    companyKey:       null,           // initialized in init() to user's own company\n    dateFormatKey:    'YYYY/MM/DD',   // FE-only display format for Date axis labels\n\n    // Chart state. mainChartData is the raw BE payload — `{labels, datasets, meta}`.\n    mainChartData: null,\n    options: { isEmptyData: true, chartYAxisOriginal: 0 },\n\n    // Static option lists exposed to the template.\n    mainDataOptions:   MAIN_OPTIONS,\n    phaseOptions:      PHASE_OPTIONS,\n    dateFormatOptions: DATE_FORMAT_OPTIONS,\n\n    // Show the Date Format dropdown only when Secondary = Date.\n    showDateFormat: computed('secondaryDataKey', function(){\n        return this.get('secondaryDataKey') === 'Date';\n    }),\n\n    // Company dropdown. Always starts with the user's own company; only YP+supervisor\n    // gets the augmented list (loaded in init via /api/auth/company-codes/).\n    companyOptions: null,\n\n    // Privacy gate. BOTH conditions must hold (Q-F):\n    //   1. profile.company contains \"YieldPoint\"\n    //   2. profile.override_power_supervisor_level truthy (supervisor or higher)\n    isYieldPointSupervisor: computed(\n        'session.data.authenticated.userProfile.profile.{company,override_power_supervisor_level}',\n        function(){\n            const p = this.get('session.data.authenticated.userProfile.profile');\n            if(!p) return false;\n            const isYP  = typeof p.company === 'string' && p.company.includes('YieldPoint');\n            const isSup = !!p.override_power_supervisor_level;\n            return isYP && isSup;\n        }\n    ),\n\n    // Secondary dropdown: only Date and Count. Date is disabled when main is\n    // Pack Type Employee (Q-H) — the time-series form of that combo is unreadable.\n    secondaryDataOptions: computed('mainDataKey', function(){\n        const dateDisabled = this.get('mainDataKey') === 'validations_pack_type_employee';\n        return [\n            { key: 'Date',  value: 'Date',  disabled: dateDisabled },\n            { key: 'Count', value: 'Count', disabled: false },\n        ];\n    }),\n\n    // If main flips into pack_type_employee while secondary is Date, snap to Count.\n    snapSecondaryIfInvalid: observer('mainDataKey', function(){\n        if(this.get('mainDataKey') === 'validations_pack_type_employee'\n           && this.get('secondaryDataKey') === 'Date'){\n            this.set('secondaryDataKey', 'Count');\n            this._syncSelectDom('secondaryDataSelect', 'Count');\n        }\n    }),\n\n    emptyDataWarningListener: observer('mainChartData', function(){\n        const d = this.get('mainChartData');\n        const isEmpty = !d || !Array.isArray(d.labels) || d.labels.length === 0;\n        this.set('options.isEmptyData', isEmpty);\n    }),\n\n    async init(){\n        this._super(...arguments);\n\n        // Default company = user's own. Always present; the only entry unless YP+supervisor.\n        // Sent value is the CODE (e.g. \"YP\", \"C1\"); the dropdown displays the human name.\n        // `profile.company_code` is the source of truth (BE adds it to the userProfile payload);\n        // fall back to `profile.company` (the name) during any rollout window where BE hasn't\n        // shipped the field yet, so the page doesn't break.\n        const profile = this.get('session.data.authenticated.userProfile.profile');\n        const ownName = (profile && profile.company) ? profile.company : null;\n        const ownCode = (profile && profile.company_code) ? profile.company_code : ownName;\n        if(profile && !profile.company_code){\n            console.warn('userProfile.profile.company_code missing — falling back to company name. BE should add company_code.');\n        }\n        this.set('companyKey', ownCode);\n        this.set('companyOptions', ownCode ? [{ key: ownCode, value: ownName || ownCode }] : []);\n\n        // YP+supervisor: fetch the full company list + \"All Companies\" sentinel.\n        // This call is the privacy gate — never make it for any other caller.\n        if(this.get('isYieldPointSupervisor')){\n            await this._loadAllCompanies();\n        }\n\n        scheduleOnce('afterRender', this, () => {\n            // Sync DOM select values to current state (selects don't bind reactively).\n            this._syncSelectDom('mainDataSelect',      this.get('mainDataKey'));\n            this._syncSelectDom('secondaryDataSelect', this.get('secondaryDataKey'));\n            this._syncSelectDom('companySelect',       this.get('companyKey'));\n            // Kick off the first chart load.\n            refreshMainChartData(this);\n        });\n    },\n\n    didInsertElement(){\n        this._super(...arguments);\n        renderChart(this);\n    },\n\n    // Privacy-gated company list loader. Only call from inside the YP+supervisor branch.\n    _loadAllCompanies: async function(){\n        try{\n            const url = `${getApiBaseUrl()}/api/auth/company-codes/`;\n            const res = await fetch(url, {\n                method: 'GET',\n                headers: {\n                    'Content-Type': 'application/json',\n                    Authorization: 'Bearer ' + localStorage.token,\n                },\n            });\n            if(res.status !== 200){\n                console.warn(`_loadAllCompanies: ${res.status}`);\n                return;\n            }\n            const json = await res.json();\n            const rows = (json && json.data) || [];\n            const ownCode = this.get('companyKey');\n            const ownName = (this.get('companyOptions')[0] && this.get('companyOptions')[0].value) || ownCode;\n            const list = [];\n            if(ownCode) list.push({ key: ownCode, value: ownName });\n            rows.forEach(r => {\n                const code = r.code;\n                const name = r.company_name || r.name || code;\n                if(code && code !== ownCode) list.push({ key: code, value: name });\n            });\n            list.push({ key: 'all', value: 'All Companies' });\n            this.set('companyOptions', list);\n        } catch(err){\n            console.error('_loadAllCompanies error:', err);\n        }\n    },\n\n    _syncSelectDom(id, value){\n        const el = document.getElementById(id);\n        if(el && value != null) el.value = value;\n    },\n\n    actions: {\n        mainChanged(e){\n            this.set('mainDataKey', e.target.value);\n        },\n        secondaryChanged(e){\n            this.set('secondaryDataKey', e.target.value);\n        },\n        phaseChanged(e){\n            this.set('phaseKey', e.target.value);\n        },\n        companyChanged(e){\n            this.set('companyKey', e.target.value);\n        },\n        dateFormatChanged(e){\n            // FE-only display change — relabel the chart without a refetch.\n            this.set('dateFormatKey', e.target.value);\n            updateChart(this);\n        },\n        applyButton(){\n            refreshMainChartData(this);\n        },\n        resetButton(){\n            const profile = this.get('session.data.authenticated.userProfile.profile');\n            const ownName = (profile && profile.company) ? profile.company : null;\n            const ownCode = (profile && profile.company_code) ? profile.company_code : ownName;\n            this.set('mainDataKey',      'validations_general');\n            this.set('secondaryDataKey', 'Count');\n            this.set('phaseKey',         'both');\n            this.set('companyKey',       ownCode);\n            this.set('dateFormatKey',    'YYYY/MM/DD');\n            scheduleOnce('afterRender', this, () => {\n                this._syncSelectDom('mainDataSelect',      'validations_general');\n                this._syncSelectDom('secondaryDataSelect', 'Count');\n                this._syncSelectDom('companySelect',       ownCode);\n                this._syncSelectDom('dateFormatSelect',    'YYYY/MM/DD');\n                refreshMainChartData(this);\n            });\n        },\n        toggleLegend(e){\n            disableEnableBarChartLengend(this, e.target.checked);\n        },\n        resetScaleForm(labelID){\n            if(labelID === 'yAxisScaleLabel'){\n                const comp = document.getElementById('yAxisScale');\n                const orig = this.get('options.chartYAxisOriginal');\n                if(comp){\n                    comp.value = orig;\n                    comp.min = `${orig}`;\n                }\n                if(this.get('chart')){\n                    this.get('chart').options.scales.y.max = orig;\n                    this.get('chart').update();\n                }\n            }\n        },\n        updateScaleForm(e){\n            const v = e.target.value;\n            if(this.get('chart')){\n                this.get('chart').options.scales.y.max = (v === '' || v == null)\n                    ? this.get('options.chartYAxisOriginal')\n                    : Number.parseInt(v);\n                this.get('chart').update();\n            }\n        },\n    },\n});\n","import { computed, observer } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport {manageCustomUIDateData, disableEnableBarChartLengend, renderChart,refreshMainChartData, resetDataAndSearch} from \"../../helpers/sensor-calibration-analytics-library\"\n\n\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    session: service(),\n    mainChartData:[],\n    requestParams:{\n        x:null, \n        y:\"calibrationID\", \n        is_distinct:\"false\", \n        secondary:\"all\", \n        date_min:null, \n        date_max:null\n    },\n    options:{isEmptyData:true, chartYAxisOriginal:0,chartXAxisOriginal:0},\n    mainDataSelectionLabels: [\n        {key:'jobID',value:\"Jobs\"},\n        {key:'sensorID',value:\"Sensors(Overall)\"},\n        {key:'type',value:\"Sensors(Type)\"},\n        {key:'calibrationID',value:\"Calibrations(Overall)\"},\n        {key:'employee',value:\"Employee(Overall)\"},\n        {key:'rigID',value:\"Rigs(Overall)\"},\n        // Supervisor-only metrics (depend on phaseStatus audit trail)\n        {key:'completionRate',value:\"Completion Rate (Employee)\"},\n        {key:'abandonedPhaseI',value:\"Abandoned Phase I (Employee)\"},\n        {key:'abandonedPhaseISensor',value:\"Abandoned Phase I (Sensor)\"},\n        {key:'recalibrationRateEmployee',value:\"Re-Calibrations (Employee)\"},\n        {key:'recalibrationRate',value:\"Re-Calibrations (Sensor)\"},\n    ],\n    dateDataSelectionLabels: [\n        {key:'calibrationDate',value:\"Calibration Date\"},\n    ],\n    employeeGroupDataSelectionLabels: [\n        {key:'all',value:\"All\"},\n        {key:'employee',value:\"Employee(Logged In)\"}\n    ],\n    init() {\n        this._super(...arguments);\n        scheduleOnce('afterRender', this, async () => {\n            //Pre-GET Chart Data\n            const getResponse = await refreshMainChartData(this);\n\n            //Pre-Load Dropdown components for Main Data: Date Data: and Date Range:\n            const mainDataSelectComp = document.getElementById(\"mainDataSelect\");\n            mainDataSelectComp.value='3';\n            const usersSectionComp = document.getElementById(\"usersSection\");\n            usersSectionComp.value='0';   \n            const startRangeDateComponent = document.getElementById(\"startRangeDateComponent\");\n            startRangeDateComponent.value=null;  \n            const endRangeDateComponent = document.getElementById(\"endRangeDateComponent\");\n            endRangeDateComponent.value=null;\n            //Pre-Load Chart options section    \n            const showLegendCheckBoxComp = document.getElementById(\"showLegendCheckBox\");\n            showLegendCheckBoxComp.checked = false;    \n            \n            // const initialYAxisMax = getYAxisScaleMax(this);\n            // console.log('initial y axis max');\n            // console.log(initialYAxisMax)\n        });\n    },\n    getMainDataSelections:computed(function(){\n        let data = []\n        this.get('mainDataSelectionLabels').forEach((elementObj, index) => {\n            data.push({\n                id:index,\n                title:elementObj['value'],\n                code:elementObj['key']\n            })\n        });\n        return data;\n    }),\n    getDateDataSelections:computed(function(){\n        let data = []\n        this.get('dateDataSelectionLabels').forEach((elementObj, index) => {\n            data.push({\n                id:index,\n                title:elementObj['value'],\n                code:elementObj['key']\n            })\n        });\n        return data;\n    }),\n    getEmployeeGroupDataSelections:computed(function(){\n        let data = []\n        this.get('employeeGroupDataSelectionLabels').forEach((elementObj, index) => {\n            data.push({\n                id:index,\n                title:elementObj['value'],\n                code:elementObj['key']\n            })\n        });\n        return data;\n    }),\n    showLegendObserver: observer('updateShowLegendCheckbox', function(){\n        const showLegend = this.get(\"updateShowLegendCheckbox\").target.checked;\n        // console.log(`Show legend? ${showLegend}`);\n        disableEnableBarChartLengend(this, showLegend);\n    }),\n    emptyDataWarningListener:observer('mainChartData', \n        function(){\n            this.set('options.isEmptyData', this.get('mainChartData').length == 0)\n        }\n    ),\n    // Switching the Main Data metric is a fresh decision — clear the companion form fields\n    // so leftover filters from the previous metric don't bleed through, then auto-fetch.\n    // Pre-load in init() sets the dropdown's .value directly (no change event), so this\n    // observer only fires on real user interaction with the Main Data dropdown.\n    mainDataChangeObserver: observer('updateMainDataSelectDropDown', function(){\n        const dateDataSelectComp = document.getElementById(\"dateDataSelect\");\n        const startRangeDateComponent = document.getElementById(\"startRangeDateComponent\");\n        const endRangeDateComponent = document.getElementById(\"endRangeDateComponent\");\n        const employeeGroupDataSelectComp = document.getElementById(\"employeeGroupDataSelect\");\n        if(dateDataSelectComp){ dateDataSelectComp.value = \"-1\"; }\n        if(startRangeDateComponent){ startRangeDateComponent.value = null; }\n        if(endRangeDateComponent){ endRangeDateComponent.value = null; }\n        if(employeeGroupDataSelectComp){ employeeGroupDataSelectComp.value = \"0\"; }\n        // Mutate bound props so the combined observer below sees the resets and rebuilds requestParams.\n        this.set('updateDateDataSelectDropDown', \"-1\");\n        this.set('startRangeDateComponent', null);\n        this.set('endRangeDateComponent', null);\n        this.set('updateEmployeeDataSelectDropDown', \"0\");\n        // Defer the fetch until the runloop settles, so requestParams reflects the resets.\n        next(this, () => refreshMainChartData(this));\n    }),\n    mainSelectionDropDownHandlerOberserver:observer(\n        \"updateEmployeeDataSelectDropDown\",\n        \"updateMainDataSelectDropDown\",\n        \"updateDateDataSelectDropDown\",\n        \"startRangeDateComponent\",\n        \"endRangeDateComponent\",\n        \"updateIsDistinctCheckBox\",\n        function(){\n            // console.log(`updateDateDataSelectDropDown:`)\n            // console.log(this.get(\"updateDateDataSelectDropDown\"))\n            // console.log(`updateDateDataSelectDropDown:`)\n            // console.log(this.get(\"updateDateDataSelectDropDown\"))\n\n            const employeeGroupDataSelectComp = document.getElementById(\"employeeGroupDataSelect\");\n            const mainDataSelectComp = document.getElementById(\"mainDataSelect\");\n            const dateDataSelectComp = document.getElementById(\"dateDataSelect\");\n\n            //Update updateMainDataSelectDropDown\n            manageCustomUIDateData(this, \n                this.get('mainDataSelectionLabels')[mainDataSelectComp.value],\n                this.get('dateDataSelectionLabels')[dateDataSelectComp.value],\n                this.get('employeeGroupDataSelectionLabels')[employeeGroupDataSelectComp.value],\n                this.get(\"updateIsDistinctCheckBox\"),\n                this.get(\"startRangeDateComponent\"),\n                this.get(\"endRangeDateComponent\")\n                )\n        }\n    ),\n    actions: {\n        applyButton(){\n            // disableEnableBarChartLengend(this,this.get('requestParams.x') != null)\n\n            refreshMainChartData(this)\n        },\n        resetButton(){\n            resetDataAndSearch(this);\n        },\n        resetScaleForm(labelID){\n            if(labelID == 'yAxisScaleLabel'){\n\n                const yAxisMaxComponent = document.getElementById('yAxisScale');\n                yAxisMaxComponent.value = this.get('options.chartYAxisOriginal');\n                yAxisMaxComponent.min=`${this.get('options.chartYAxisOriginal')}`\n                if (this.get('chart')) {\n                    this.get('chart').options.scales.y.max = this.get('options.chartYAxisOriginal');\n                    this.get('chart').update();\n                }\n            }\n            // console.log(`componentKey:${componentKey};`);\n        },\n        updateScaleForm(e){\n            // console.log(e)\n            const componentKey = e.target.id;\n            const componentValue = e.target.value;\n            console.log(`componentKey:${componentKey}; componentValue:${componentValue}`);\n            if (this.get('chart')) {\n                this.get('chart').options.scales.y.max = componentValue == \"\" || componentValue == null ? this.get('options.chartYAxisOriginal') : Number.parseInt(componentValue);\n                this.get('chart').update();\n            }\n        }\n    },\n    didInsertElement() {\n        this._super(...arguments);\n        renderChart(this);\n    },\n    \n})","export { default } from 'ember-leaflet/components/array-path-layer';\n","export { default } from 'ember-leaflet/components/base-layer';\n","export { default } from \"ember-basic-dropdown/components/basic-dropdown-content\";\n","export { default } from \"ember-basic-dropdown/components/basic-dropdown-trigger\";\n","export { default } from \"ember-basic-dropdown/components/basic-dropdown-wormhole\";\n","export { default } from \"ember-basic-dropdown/components/basic-dropdown\";\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n    router: service(),\n    batchCommandsLoading:false,\n\n    init() {\n        this._super(...arguments);\n    },\n    getSelectedAlertsCount:computed(\"batchSelectedAlertsID\", function(){\n        return this.get(\"batchSelectedAlertsID\") ? this.get(\"batchSelectedAlertsID\").length : -1;\n    }),\n    dispatchRequest(mode){\n        this.set(\"visibleAdvancedFilter\", true);\n        if(mode === \"apply\"){\n            let queryParams = {\n            };\n\n            // Helper: only add non-empty values\n            const addIfPresent = (key, value) => {\n            if (value !== null && value !== undefined && value !== \"\") {\n                queryParams[key] = value;\n            }\n            };\n\n            // addIfPresent(\"search\", this.search);\n\n            this.get(\"router\")\n                .transitionTo(\"alerts\", { queryParams })\n                .then(() => {\n                    if (!this.isDestroyed && !this.isDestroying) {\n                    this.set(\"advancedSearchLoading\", false);\n                    this.loadSearchFieldsFromURL();\n                    }\n                });\n        }\n        else{\n            let queryParams = {\n                search: undefined,\n\n            };\n            this.get(\"router\")\n                .replaceWith(\"alerts\", { queryParams })\n                .then(() => {\n                if (!this.isDestroyed && !this.isDestroying) {\n                    this.set(\"advancedSearchLoading\", false);\n                    this.loadSearchFieldsFromURL();\n                }\n                });\n        }\n\n    },\n    actions: {\n        batchButton(mode) {\n            let message = \"\";\n            switch(mode){\n                case \"activate\":\n                    message = \"Are you sure you want to activate selected alerts?\";\n                    break;\n                case \"deactivate\":\n                    message = \"Are you sure you want to deactivate selected alerts?\";\n                    break;\n                case \"mute\":\n                    message = \"Are you sure you want to mute selected alerts?\\n\\nMuting means you will not receive SMS and/or email notifications and will have toned down UI notices.\";\n                    break;\n                case \"unmute\":\n                    message = \"Are you sure you want to unmute selected alerts?\\n\\nUnmuting means you will receive SMS and/or email notifications and will have standard UI notices.\";\n                    break;\n                case \"delete\":\n                    message = \"Are you sure you want to delete selected alerts?\\n\\nDeleting selected alerts is permenant and irreversible.\";\n                    break;\n            }\n        // console.log(\"typeBatch\" + mode);\n        // console.log(\"batchWarningMessage\" + message);\n        this.set(\"typeBatch\", mode)\n        this.set(\"batchWarningMessage\", message);\n        this.set(\"isShowBatchConfirmationModal\", true);\n\n        },\n        selectAll(){\n            let alerts = this.get(\"alerts\");\n            let curr = [];\n            alerts.forEach(alert=>{\n                curr.push(alert.id)\n            });\n            this.set(\"batchSelectedAlertsID\", curr);\n        },\n        deselectAll(){\n            this.set(\"batchSelectedAlertsID\", []);\n\n        },\n        apply() {\n            this.dispatchRequest(\"apply\");\n        },\n        reset(){\n            this.dispatchRequest(\"reset\");\n        }\n    },\n});\n","import { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    session: service(),\n    userProfileService: service(),\n    init() {\n        this._super(...arguments);\n    },\n    actions: {\n        \n        close(){\n            this.get(\"closeModal\")();\n        },\n        confirm(){\n            this.get(\"confirmModal\")(this.get(\"typeBatch\"));\n        }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nconst GATEWAY_ENUM = Object.freeze({\n    Firmware: 0,\n    Coordinator: 1,\n    Voltage: 2,\n    RSSI: 3,\n    carrier: 4,\n    Readings: 5,\n    Uptime: 6,\n    Reconnection: 7,\n    Uploads: 8,\n    Temperature: 9,\n    var_1: 10,\n    var_2: 11,\n    var_3: 12,\n});\n\nconst AXIS_LABELS = {\n    Voltage: \"Voltage (V)\",\n    RSSI: \"RSSI (dBm)\",\n    Firmware: \"Firmware Ver.\",\n    Coordinator: \"Coordinator\",\n    Readings: \"Readings\",\n    Uptime: \"Uptime (s)\",\n    Reconnection: \"Reconnects\",\n    Uploads: \"Uploads\",\n    Temperature: \"Temperature (\\u00B0C)\",\n    carrier: \"Carrier\",\n    var_1: \"Var 1\",\n    var_2: \"Var 2\",\n    var_3: \"Var 3\",\n};\n\n// Shared line-building helper for both main chart and overview chart.\nfunction buildGatewayLines(sourceData, tempData, leftAxis, rightAxis) {\n    if (!sourceData) return [];\n\n    const leftIndex = GATEWAY_ENUM[leftAxis];\n    const rightIndex = GATEWAY_ENUM[rightAxis];\n\n    const tempValues = [];\n    if (tempData) {\n        tempData.forEach(item => {\n            const vals = item.get('values');\n            tempValues.push(vals ? vals[0] : null);\n        });\n    }\n\n    const leftLine = {\n        key: leftAxis,\n        yAxis: 'y',\n        values: sourceData.map((item, i) => {\n            let val;\n            if (leftAxis === 'Temperature' && tempData) {\n                val = (i < tempValues.length) ? tempValues[i] : null;\n            } else {\n                val = item.values ? item.values[leftIndex] : null;\n            }\n            return { x: moment(item.get('id')).valueOf(), y: val };\n        })\n    };\n\n    const rightLine = {\n        key: rightAxis,\n        yAxis: 'y2',\n        values: sourceData.map((item, i) => {\n            let val;\n            if (rightAxis === 'Temperature' && tempData) {\n                val = (i < tempValues.length) ? tempValues[i] : null;\n            } else {\n                val = item.values ? item.values[rightIndex] : null;\n            }\n            return { x: moment(item.get('id')).valueOf(), y: val };\n        })\n    };\n\n    return [leftLine, rightLine];\n}\n\nexport default Component.extend({\n    store: service(),\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    leftAxis: computed(function() {\n        let leftAxis = this.attrs.getQueryParams('left_axis_field');\n        return leftAxis || 'Voltage';\n    }),\n\n    rightAxis: computed(function() {\n        let rightAxis = this.attrs.getQueryParams('right_axis_field');\n        return rightAxis || 'Temperature';\n    }),\n\n    // Main chart: sourced from zoomChartData so brushing refetches and adds detail.\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'leftAxis', 'rightAxis', function() {\n        return buildGatewayLines(this.get('zoomChartData'), this.get('zoomTempData'), this.get('leftAxis'), this.get('rightAxis'));\n    }),\n\n    // Overview chart: always the full history (doesn't refetch on brush).\n    overviewChartLinesData: computed('fullRangeChartData', 'leftAxis', 'rightAxis', function() {\n        return buildGatewayLines(this.get('fullRangeChartData'), null, this.get('leftAxis'), this.get('rightAxis'));\n    }),\n\n    didInsertElement() {\n        this._super(...arguments);\n        const linesData = this.get('fullRangeChartLinesData');\n        const leftAxis = this.get('leftAxis');\n        const rightAxis = this.get('rightAxis');\n\n        const y1Title = AXIS_LABELS[leftAxis] || leftAxis;\n        const y2Title = AXIS_LABELS[rightAxis] || rightAxis;\n\n        this._buildMainChart(linesData, y1Title, y2Title);\n        this._buildOverviewChart();\n    },\n\n    _buildMainChart(linesData, y1Title, y2Title) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        let xMin, xMax;\n        linesData.forEach(l => {\n            l.values.forEach(v => {\n                if (v.x != null && v.y != null) {\n                    if (xMin === undefined || v.x < xMin) xMin = v.x;\n                    if (xMax === undefined || v.x > xMax) xMax = v.x;\n                }\n            });\n        });\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        const label = typeof pt.y === 'number' ? pt.y.toFixed(2) : String(pt.y);\n                        ctx.fillText(label, element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: { display: true, text: y1Title },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => typeof v === 'number' ? v.toFixed(2) : v }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: y2Title },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => typeof v === 'number' ? v.toFixed(2) : v }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const linesData = this.get('overviewChartLinesData') || [];\n        if (!linesData.length) return;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        let xMin, xMax;\n        newLines.forEach(l => {\n            (l.values || []).forEach(v => {\n                if (v.x != null && v.y != null) {\n                    if (xMin === undefined || v.x < xMin) xMin = v.x;\n                    if (xMax === undefined || v.x > xMax) xMax = v.x;\n                }\n            });\n        });\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('overviewChartLinesData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const newLines = this.get('overviewChartLinesData') || [];\n\n        newLines.forEach((line) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                overviewChart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin = this.get('axis_min');\n        const axisMax = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    axisScaleObserver2: observer('autoAxis2', 'axis_min_2', 'axis_max_2', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis2 = this.get('autoAxis2');\n        const axisMin2 = this.get('axis_min_2');\n        const axisMax2 = this.get('axis_max_2');\n\n        if (autoAxis2) {\n            chart.options.scales.y2.min = undefined;\n            chart.options.scales.y2.max = undefined;\n        } else {\n            chart.options.scales.y2.min = (axisMin2 != null && axisMin2 !== '') ? parseFloat(axisMin2) : undefined;\n            chart.options.scales.y2.max = (axisMax2 != null && axisMax2 !== '') ? parseFloat(axisMax2) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'GatewayChart.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nfunction resetNewGatewayObject(_this) {\n    console.log(\"NewGatewayObject::: \");\n    _this.set('newGatewayObject', {});\n    _this.set('name', null);\n    _this.set('installDate', null);\n\n\n    // name: DS.attr('text'),\n    // gatewayType: DS.belongsTo('gateway-type', {async: false}),\n    // project: DS.attr('text'),\n    // location: DS.attr('text'),\n    // depth: DS.attr('number'),\n    // level: DS.attr('text'),\n    // installDate: DS.attr(),Core Ember 4.4 Update 5\n    // installedBy: DS.attr('text'),\n    // purpose: DS.attr('text'),\n    // notes: DS.attr('text'),\n    // gatewayTypeID: DS.attr(),\n    // active: DS.attr('boolean'),\n\n}\n\nexport default class CreateBluCellGateway extends Component {\n    //@service session;\n    //@service currentUser; \n\n\n    init() {\n        super.init(...arguments);\n        resetNewGatewayObject(this);\n    }\n\n    isAuthenticated = true;\n    newGatewayObject = {};\n    installDate = null;\n    authError = false;\n\n    actions = {\n        async createGateway(object){\n\n            let _this = this,\n            store = this.get('store'),\n            newGatewayObject = this.get('newGatewayObject');\n\n            this.set('isVisibleError',false);\n            this.set('duplicateError',false);\n            this.set('fieldError',false);\n\n            let error = false;\n\n            newGatewayObject.id = this.get('id');\n            newGatewayObject.installDate = this.get('installDate');\n            newGatewayObject.depth = this.get('depth');\n            newGatewayObject.active = true;\n\n            let interval_upload = await this.store.query('gateway-interval', {\n                filter: { interval_value: 5, interval_group_name: 'upload_interval' }\n            }).then(r => r.at(0)).catch(() => null);\n\n            let interval_read = await this.store.query('gateway-interval', {\n                filter: { interval_value: 5, interval_group_name: 'instrument_reading_interval' }\n            }).then(r => r.at(0)).catch(() => null);\n\n            let interval_mesh_cycle = await this.store.query('gateway-interval', {\n                filter: { interval_value: 10, interval_group_name: 'mesh_cycle' }\n            }).then(r => r.at(0)).catch(() => null);\n\n            let interval_transmission_power = await this.store.query('gateway-interval', {\n                filter: { interval_value: 7, interval_group_name: 'radio_transmission_power_level' }\n            }).then(r => r.at(0)).catch(() => null);\n\n            if(typeof newGatewayObject.id === 'undefined' || newGatewayObject.id === \"\") {\n                error = true;\n                this.set('fieldError',true);\n                this.set('isVisibleError',true);\n            }\n\n            if (this.get('installDate') != null) {\n                newGatewayObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            let newGateway = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newGateway = store.createRecord('gateway', newGatewayObject);\n                    newGateway.set('gatewayType', store.peekRecord('gateway-type', this.get('typeID')));\n                    newGateway.set('gatewayUploadInterval', interval_upload);\n                    newGateway.set('gatewayReadInterval', interval_read);\n                    newGateway.set('gatewayMeshCycleInterval', interval_mesh_cycle);\n                    newGateway.set('gatewayTransmissionPowerInterval', interval_transmission_power);\n                } catch (err) {\n                    console.error('createRecord error:', err);\n                    this.set('isVisibleError',true);\n                    error = true;\n                    if(err.message.includes('has already been used')) {\n                        this.set('duplicateError',true);\n                        dup = true;\n                    }\n                }\n            }\n            \n            this.set('authError', false);\n\n            if(!error) {\n                newGateway.save().then(function(results){\n                    // console.log(dup);\n                    if(results.id != null) {\n                        _this.get('submit')(results.id);\n                    } else {\n                        this.set('isVisibleError',true);\n                        error = true;\n                    }\n                }).catch(function(reason) {\n                    _this.set('isVisibleError',true);\n                    _this.set('authError',true);\n                }); \n            } \n        },\n        // bulbChanged(object)\n        // {\n        //     this.set(\"bulbed\",document.getElementById('newInstrumentObjectBulbed').checked);\n        // },\n        // plateChanged(object)\n        // {\n        //     this.set(\"plated\",document.getElementById('newInstrumentObjectPlated').checked);\n        // }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let gatewayValueObjectValues = _this.get('gatewayValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(gatewayValueObjectValues).forEach(function(key,index) {\n        gatewayValueObjectValues[key] = null;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n\n    newGatewayValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newGatewayValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n\n    gatewayValueObjectValues: computed('anchorDistances', function() {\n        let gatewayValueObjectValues = [];\n        for (let i = 0; i <= this.get('anchorDistances').length - 1; i++) {\n            gatewayValueObjectValues[i] = 0;\n        }\n        return gatewayValueObjectValues;\n    }),\n\n    newGatewayValueObjectValues: computed('gatewayValueObjectValues', function() {\n        let gatewayValueObjectValues = [];\n        for (let i = 0; i <= this.get('gatewayValueObjectValues').length - 1; i++) {\n            gatewayValueObjectValues[i] = 0;\n        }\n        return gatewayValueObjectValues;\n    }),\n\n    actions: {\n        saveNew(){\n            //  console.log(\"saveNew\");\n            let _this = this,\n                store = this.get('store'),\n                newGatewayValuesObject = this.get('newGatewayValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                gatewayValues = this.get('gatewayValues'),\n                temperatureValues = this.get('temperatureValues');\n                    \n            \n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-gateway-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('gatewayId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newGatewayValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            \n            const indexPositions = [0, 2, 12];\n            const values = Object.values(this.get('newGatewayValueObjectValues'));\n            const result = new Array(13);\n\n            indexPositions.forEach((index, i) => {\n            result[index] = values[i];\n            });\n\n            // console.log(\"Results::: \");\n            // console.log(result);\n\n            newGatewayValuesObject.values = result\n\n            const newGatewayValues = store.createRecord('gateway-value', newGatewayValuesObject);\n            // save new gateway-value to DB\n            const savedGatewayValuesObject = newGatewayValues.save({adapterOptions: this.get('gatewayId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if gateway-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //gatewayValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n\n            })\n            .catch(function(reason){\n                console.log(reason);\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import { camelize } from '@ember/string';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default class EditInstrument extends Component.extend({\n    gatewayReadingsIntervals: null,\n\n    childrenLoading: true,\n    childrenData: null,\n\n    init(){\n        this._super(...arguments);\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        // Lazy-load child nodes in a single query (doesn't block page render)\n        const gateway = this.get('gateway');\n        if (gateway.get('hasChildren')) {\n            this.set('childrenLoading', true);\n            this.get('store').query('gateway', { parent_gateway: gateway.get('id') })\n                .then((children) => {\n                    this.set('childrenData', children);\n                    this.set('childrenLoading', false);\n                })\n                .catch(() => {\n                    this.set('childrenLoading', false);\n                });\n        } else {\n            this.set('childrenLoading', false);\n        }\n    },\n    \n    store: service(),\n    isAuthenticated : true,\n    // selectedReadingIntervalID : null,\n    selectedModel : null,\n    editing : 0,\n    \n    getGatewayUploadIntervalID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayUploadInterval = gw.gatewayUploadInterval;\n        // console.log(\"gatewayUploadInterval::: \" + gatewayUploadInterval)\n        if(gatewayUploadInterval == null){\n            return 0;\n        }\n            return (gatewayUploadInterval.id).toString();\n    }),\n\n    getGatewayReadIntervalID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayReadInterval = gw.gatewayReadInterval;\n        // console.log(\"gatewayReadInterval::: \" + gatewayReadInterval)\n        if(gatewayReadInterval == null){\n            return 0;\n        }\n        return (gatewayReadInterval.id).toString();\n    }),\n    \n    getMeshCycleIntervalID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayMeshCycleInterval = gw.gatewayMeshCycleInterval\n        // console.log(\"gatewayMeshCycleInterval::: \" + gatewayMeshCycleInterval)\n        if(gatewayMeshCycleInterval == null){\n            return 0;\n        }\n        return (gatewayMeshCycleInterval.id).toString();\n    }),\n    \n    getTransmissionPowerIntervalsID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayRadioPowerLevelInterval = gw.gatewayRadioPowerLevelInterval;\n        // console.log(\"gatewayRadioPowerLevelInterval::: \" + gatewayRadioPowerLevelInterval)\n        if(gatewayRadioPowerLevelInterval == null){\n            return 0;\n        }\n        return (gatewayRadioPowerLevelInterval.id).toString();\n    }),\n    \n    \n}){\n    @service router;\n    @service store;\n    isAuthenticated = true;\n    _this = this;\n\n    actions = {\n        //in order for this to work the id of the select element must be the same as the attribute name\n        setGatewayInterval(event) {\n            let gateway = this.get('gateway');\n            const selectedOptions = Array.from(event.target.selectedOptions);\n            //id of the newly selected interval\n            const selectedValue = parseInt(selectedOptions.map(option => option.value));    \n            //interval attribute name\n            const intervalType = event.target.id;\n            \n            // console.log(\"intervalType::: \" + intervalType)\n            \n            // when the record has no interval records associated with it, when you try to save an error is thrown.\n            // I avoid this by defaulting the interval to 5 minutes when the one is saved and the other is null.\n            let notSelected = intervalType == 'gatewayReadInterval' ? 'gatewayUploadInterval' : 'gatewayReadInterval';\n\n            this.store.findRecord('gateway-interval', selectedValue).then((interval) => { \n                let notSelectedIntervalValue = gateway[notSelected];\n                let group_name = intervalType == 'gatewayReadInterval' ? 'instrument_reading_interval' : 'upload_interval';\n                if(notSelectedIntervalValue == null){\n                    //if the non-selected interval is null I default it here.\n                    this.store.query('gateway-interval', {\n                        filter: {\n                          interval_value: 5,\n                          interval_group_name: group_name\n                        }\n                        }).then(function(results) {\n                            gateway.set(notSelected, results.get('firstObject'));\n                            gateway.set(intervalType, interval); // Set the related object as the new value of the attribute\n                \n                            gateway.save().then(() => {\n                                console.log('Gateway saved successfully!');\n                            }).catch((error) => {\n                                console.log('Error saving gateway:', error);\n                            });\n            \n                        }).catch(function(error) {\n                        console.log(\"Error Getting interval_upload object::: \" + error);\n                      });\n                } else {\n                    \n                    gateway.set(intervalType, interval); // Set the related object as the new value of the attribute\n                    gateway.save().then(() => {\n                        console.log('Gateway saved successfully!');\n                    }).catch((error) => {\n                        console.log('Error saving gateway:', error);\n                    });\n                }                    \n            });\n            \n        },\n                \n        // setGatewayUploadIntervals(intervalID) {\n        //     this.store.findRecord('gateway-interval', intervalID).then((interval) => { \n        //         let gateway = this.get('gateway');\n\n        //         gateway.set('gatewayUploadInterval', interval); // Set the related object as the new value of the attribute\n        //         gateway.save().then(() => {\n        //             console.log('Gateway saved successfully!');\n        //         }).catch((error) => {\n        //             console.log('Error saving gateway:', error);\n        //         });\n        //     });\n            \n        // },\n        \n        updatePage(){\n            let store = this.get('store');\n            let gateway = this.get('gateway');\n            gateway.save();\n        },\n        viewData(id) {\n            this.get('router').transitionTo('raw-gateway-data', id);\n        },\n        tGraph(id) {\n            //console.log(\"Edit-gateway::: \" + id)\n            this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, 'voltage-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveGateway(){\n            const _this = this;\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/gateway\";\n                }\n            } else {\n                window.location.href = \"/gateway\";\n            }\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        // updateProperty(propertyName, propertyValue) {\n        //     this.set(propertyName, propertyValue);\n        // },\n    \n\n\n    }\n}\n\n\n\n// import Component from '@ember/component'; \n// export default Component.extend({ \n//     classNames: ['person-select'], \n//     people: null, \n//     selectedPerson: null, \n//     actions: { \n//         selectPerson(person) { \n//             this.set('selectedPerson', person); \n//         } \n//     } \n// });\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    temperaturePoints: [],\n    distXRiseUpAnimationDuration: 500,\n    // chartMetric: computed(function(){\n    // let chartMetric = this.attrs.getQueryParams('chart_type');\n    //     if(chartMetric == null){\n    //       return 'voltage';\n    //     }\n    //    //console.log(\"chartMetric::: \" + chartMetric);\n    //     return chartMetric;\n    // }),\n    leftAxis: computed(function(){\n        let leftAxis = this.attrs.getQueryParams('left_axis_field');\n        if(leftAxis == null){\n          leftAxis = 'Voltage';\n        }\n        return leftAxis;\n    }),      \n    rightAxis: computed(function(){\n        let rightAxis = this.attrs.getQueryParams('right_axis_field');\n        if(rightAxis == null){\n            rightAxis = 'Temperature';\n          }\n          return rightAxis;\n    }),\n    GATEWAY_ENUM: Object.freeze({\n        Firmware: 0,\n        Coordinator: 1,\n        Voltage: 2,\n        RSSI: 3,\n        carrier: 4, \n        Readings: 5, \n        Uptime: 6, \n        Reconnection: 7, \n        Uploads: 8, \n        Temperature: 9,\n        var_1: 10, \n        var_2: 11, \n        var_3: 12,\n    }),\n\n    zoomTempPoints: computed(function(){\n        // let right = this.get('zoomDataPointsRightAxis');\n        let temperaturePoints = [];\n        let zoomTempData = this.get(\"zoomTempData\");\n        zoomTempData.forEach(function(item, i){\n            var chartData = { values: item.get(\"values\") };\n            temperaturePoints.push(chartData.values[0]);\n            // let temperaturePoints = this.get('temperaturePoints').push(chartData.values);\n        });\n        // console.log(\"zoomTempPoints::::::::::::::: 7\");    \n        // var chartData = { values: item.get(\"values\") };\n        //  = this.get('temperaturePoints').push(chartData.values);\n        \n        return temperaturePoints; //chartData;\n    }),\n    zoomDataPointsLeftAxis: computed(function(){\n        \n        let zoomChartData = this.get(\"zoomChartData\");\n        let leftAxisIndex = this.GATEWAY_ENUM[this.leftAxis]\n        //TODO: fix this TA.  Hack because we added temperature at the last minute.\n        if(this.leftAxis == 'Temperature'){\n            // console.log(\"zoomDataPointsLeftAxis::::::::::::::: \" + this.get(\"temperaturePoints\"));\n            return this.get(\"zoomTempPoints\");\n        }\n        \n        let zoomLeftAxis = zoomChartData.map(function (item, i){\n            return item.values[leftAxisIndex];            \n        });\n        // console.log(\"zoomLeftAxis ::::::::::::::: \" + JSON.stringify(zoomLeftAxis));    \n        return zoomLeftAxis;\n    }),\n    zoomDataPointsRightAxis: computed(function(){\n       //console.log(\"zoomDataPointsRightAxis::::::::::::::: 8\");\n        let zoomRightAxis = null;\n        if(this.rightAxis != null && this.rightAxis != 'Temperature'){\n            let zoomChartData = this.get(\"zoomChartData\");\n            let rightAxisIndex = this.GATEWAY_ENUM[this.rightAxis]        \n            zoomRightAxis = zoomChartData.map(function (item, i){\n                return item.values[rightAxisIndex];            \n            });\n        }\n        if (this.rightAxis == 'Temperature'){\n            zoomRightAxis = this.get(\"zoomTempPoints\");\n        }\n        // console.log(\"zoomRightAxis::::::: \" + JSON.stringify(zoomRightAxis));\n        return zoomRightAxis;\n\n    }),\n    zoomDataPoints: computed('zoomChartData', function () {\n        \n        let left = this.get('zoomDataPointsLeftAxis');\n        // console.log(\"LEFT ::::::::::::::: 4 and 6 \" + left );\n        \n        return left;\n    }),\n\n    fullRangeDataPoints: computed('fullRangeChartData', function () {\n        let fullRangePoints = null;\n        let itemHolder = {};\n\n        if(this.leftAxis != 'Temperature'){\n            fullRangePoints = this.get('fullRangeChartData');\n            fullRangePoints.map(function (item, i){\n                let itemHolder = { values: item.get(\"values\") };\n                return itemHolder;\n            });\n        } else {\n            itemHolder.values = [];\n            fullRangePoints = this.get(\"temperaturePoints\");\n            if(this.leftAxis == 'Temperature'){\n                fullRangePoints.forEach(function(item){\n                    itemHolder.values.push(item[0]);\n                });\n            }\n            fullRangePoints = itemHolder;\n        }\n        return fullRangePoints;\n        \n    }),\n\n/*     \n    fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        // console.log(\"zoomTimePoints::::::::::::::: 9\");    \n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        // console.log(\"fullRangeTimePoints::::::::::::::: 13\");\n        return item.get('id');\n    }),\n    \n    anchorDistances: computed('gateway', 'fullRangeChartData', function() {\n        let leftAxis = this.get('leftAxis'); \n       //console.log(\"anchorDistances::::::::::::::: 10   ::\" + leftAxis);\n        return [leftAxis];\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n       //console.log(\"zoomChartLinesData::::::::::::::: 2\");    \n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n        let tempPoints = this.get('zoomTempPoints');\n            \n        // console.log(\"zoomTempPoints::: \" + JSON.stringify(tempPoints));\n        // console.log(\"zoomTempPoints::: \" + this.get('temperaturePoints'));\n        \n        let anchorDistances = this.get('anchorDistances');\n        let zoomChartLinesData = [];\n\n        var mName = _this.get('chartDataModelName');\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[0]\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n       //console.log(\"TEMP::: \" + _this.get('chartDataModelName'));\n        let zoomTempPoints = this.get('zoomDataPointsRightAxis');\n        var temp = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                //console.log(\"temp Points::: \" + zoomTempPoints);\n                return [\n                    moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        //console.log(temp);\n        zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        \n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n       //console.log(\"fullRangeChartLinesData::::::::::::::: 11\");    \n        const _this = this;\n        const fullRangeDataPoints = this.get('fullRangeDataPoints');\n        const fullRangeTimePoints = this.get('fullRangeTimePoints');\n        \n        let fullRangeTempPoints = this.get('zoomDataPointsRightAxis');\n        let anchorDistances = this.get('anchorDistances');\n\n        let fullRangeChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                   //console.log(\"fullReang:::::::::::::::::::\" + _this.GATEWAY_ENUM[_this.leftAxis])\n                    ////console.log(\"DataPoint::: \" + dataPoint.values[chartLineIndex]);\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[_this.GATEWAY_ENUM[_this.leftAxis]]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n\n        var temperature = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: fullRangeTempPoints.map(function(dataPoint, dataPointIndex) {\n                //console.log(\"temp Points::: \" + zoomTempPoints);\n                return [\n                    moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        // fullRangeChartLinesData.push(temperature); //#TODO: Add Temp Points\n        return fullRangeChartLinesData;           \n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n       //console.log(\"chartDataModelName::::::::::::::: 5   \" + this.get('zoomChartData').query.model_name);    \n        //console.log(\"zoomChartData:\" + this.get('zoomChartData').query.model_name);\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n       //console.log(\"yAxisLegend::::::::::::::: 14\");    \n        let chartTitle = 'voltage'\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        //let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n    getTitleAndUnits: function(axis){\n        let axisValues = {\"Voltage\": \"Voltage, V\", \"RSSI\": \"RSSI, dBm\", \"Firmware\": \"Firmware Ver.\", \"Readings\": \"Readings\", \n                            \"Uptime\": 'Uptime - in Seconds.', \"Reconnection\": \"Reconnects\", \"Uploads\": \"Uploads\",\n                            \"Temperature\": \"Temperature,C\", \"var_1\": 9, \"var_2\": 9,  \"var_3\": 10}\n        // console.log(\"getTitleAndUnits::::::::::::::: \" + axisValues[axis]);\n        return axisValues[axis];\n    },\n    didInsertElement: function() {\n        \n       //console.log(\"didInsertElement::::::::::::::: 1\");    \n        const _this = this,\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n        const zoomChartLinesData = _this.get('zoomChartLinesData');\n        const fullRangeChartLinesData = _this.get('fullRangeChartLinesData');\n        \n        let zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg');\n        \n        let fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg');\n        let yAxisLegend = this.get('yAxisLegend');\n        let apiCallsPromises = yAxisLegend;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(false)\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showLegend(true)\n                .showDistX(true)\n                .noData('No usable data');\n\n            zoomChart.showYAxis = true;\n            zoomChart.y2Axis.showYAxis = true;\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        //console.log(\"D:::::::::: \" + d);\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        //console.log(nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d)));\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n               \n                let axis1Title = _this.getTitleAndUnits(_this.get('leftAxis'));\n                let axis2Title = _this.getTitleAndUnits(_this.get('rightAxis'));\n                \n                zoomChart.y1Axis\n                    .axisLabel(axis1Title)\n                    .axisLabelDistance(10);\n                \n                zoomChart.y2Axis\n                    .axisLabel(axis2Title)\n                    .axisLabelDistance(10)\n                ;\n                    \n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                zoomChart.y2Axis.tickFormat(d3.format(\".2f\"));\n                \n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                let legend = zoomChart.legend;\n                if(legend.controls){\n                    legend.controls.forEach(function(d, i) {\n                        d.disabled = false;\n                    });\n                }\n\n                //console.log(\"zoomChart::::\" + zoomChart.legend);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    //console.log(\"BRUSH END::::::::::::::::::::\");\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(false);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n                \n                function selectControls() {\n                    // console.log(\":::::::::::::::::::::: selectControls\");\n                    //zoomChart.chartData.forEach(function(series) { series.disabled = false; });                  \n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n                    tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    tooltipClass = 'other';\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                        \n                }\n\n                //     if (typeof(tooltipContent) === 'object') {\n                //         if (tooltipContent.type === 'Blast') {\n                //             tooltipClass = 'blast';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                //         } else if (tooltipContent.type === 'Seismic') {\n                //             tooltipClass = 'seismic';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                //         } else if (tooltipContent.type === 'BluVibe') {\n                //             tooltipClass = 'bluvibe';\n                //             eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                //         } else if (tooltipContent.type === 'Other') {\n                //             tooltipClass = 'other';\n                //         }\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                //                       '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                //                       eventSize\n                //         ;\n                //     } else {\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                //     }\n\n                //     return {\n                //         tooltipClass: tooltipClass,\n                //         tooltipText: tooltipText\n                //     };\n                // }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(\"VibeEventsArray:::\" + vibeEventsArray);\n                    //console.log(distXMouseMove);\n \n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                // d3.select('.nv-y2.nv-axis')\n                // .classed('nv-disabled', false)\n                // .attr('transform', 'translate(0,0)');\n        \n                nv.utils.windowResize(zoomChart.update);\n\n                // zoomChart.dispatch.on('stateChange', function(e) { \n                //     nv.log('New State:', JSON.stringify(e)); \n                // });\n                // zoomChart.state.dispatch.on('change', function(state){\n                //     nv.log('state', JSON.stringify(state));\n                // });\n\n               //console.log(\":::::::::::::::::::::::::::setData called\")\n                // _this.sendAction('setData',zoomChartLinesData);\n                // _this.sendAction('setChart',zoomChart);\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            //.showYAxis(true)\n        ;\n        \n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) {\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n        \n    }\n});\n","import { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    isVisibleCreateNewForm: false,\n\n    anchorDistances: computed('gateway', function() {\n        return [\"Firmware Version\",\"Voltage\", \"RSSI\", \"Readings\", \"Uptime(Secs)\",\"Reconnection Attempts\", \"Uploads\",\"Temp\", \"Mesh ID\"]\n    }),\n\n\n\ngetGatewayData: computed('gateway', 'gatewayData', function() {\n  let fields = [0, 2, 14];\n  let items = [];\n  // Perform filtering logic on initial data\n  const filteredData = this.get('gatewayData');\n  if (filteredData) {\n    filteredData.forEach(item => {\n      let values = [];\n      let firmware = item.values[0];\n      let voltage = item.values[2];\n      let rssi = item.values[3];\n      let sigma_d_readings = item.values[5];\n      let sigma_t_modem_on_duration = item.values[6];\n      let reconnection_attempts = item.values[7];\n      let number_of_uploads = item.values[8];\n      let temp = item.values[12];\n      let mesh_id = item.values[item.values.length - 1];\n      items.push({ id: item.id, values: {\n        'firm_version':Number.parseFloat(firmware),\n        'voltage':voltage,\n        \"rssi\":rssi,\n        \"sigma_d_readings\":sigma_d_readings,\n        \"sigma_t_modem_on_duration\":sigma_t_modem_on_duration,\n        \"reconnection_attempts\":reconnection_attempts,\n        \"number_of_uploads\":number_of_uploads,\n        \"temp\":temp,\n        'mesh_id':mesh_id}, \n        originalValue: item, save_values:{\n          'firm_version':Number.parseFloat(firmware),\n          'voltage':voltage,\n          \"rssi\":rssi,\n          \"sigma_d_readings\":sigma_d_readings,\n          \"sigma_t_modem_on_duration\":sigma_t_modem_on_duration,\n          \"reconnection_attempts\":reconnection_attempts,\n          \"number_of_uploads\":number_of_uploads,\n          \"temp\":temp,\n          'mesh_id':mesh_id\n        }\n      });\n    });\n  }        \n  \n  return items;\n}),\n\n    actions: {\n        updateProperty(propertyName, propertyValue) {\n          // console.log(\"Update property: \" + propertyValue);\n          this.set(propertyName, propertyValue);\n        }\n    },\n    didInsertElement() {\n        this._super(...arguments);\n            \n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class LeftAxisDropdown extends Component.extend({}) {\n    @service router;\n    @service store;\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    actions = {\n        tGraph(id, modelName, params) {\n            // console.log(\"in LeftAxisDropdown:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\")\n            this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, modelName, params);\n        },\n    }\n}","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n  rightAxisField: '', // Set the initial value to 'RSSI'\n  routeValue: 'voltage-values',\n\n  defaultRightAxisField: computed('rightAxisField', function() {\n    const rightAxisField = this.rightAxisField;\n    // console.log('rightAxisField:::::::::::: ' + rightAxisField);\n    return rightAxisField === '' ? 'Temperature' : rightAxisField;\n  }),\n\n  getRouteValue: computed('selected', function () {\n    const selected = this.selected.toLowerCase();\n    // console.log('selected:::::::::::: ' + selected);\n    this.set('routeValue', selected + '-values');\n  }),\n\n  actions: {\n    handleRightAxisFieldChange(newValue) {\n      // console.log('handleRightAxisFieldChange:::::::::::: ' + newValue);    \n      this.set('rightAxisField', newValue);\n    }\n  }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nconst GATEWAY_ENUM = Object.freeze({\n    Firmware: 0,\n    Coordinator: 1,\n    Voltage: 2,\n    RSSI: 3,\n    carrier: 4,\n    Readings: 5,\n    Uptime: 6,\n    Reconnection: 7,\n    Uploads: 8,\n    var_1: 9,\n    var_2: 10,\n    var_3: 11,\n    Temperature: 12,\n});\n\nconst AXIS_LABELS = {\n    Voltage: \"Voltage (V)\",\n    RSSI: \"RSSI (dBm)\",\n    Firmware: \"Firmware Ver.\",\n    Coordinator: \"Coordinator\",\n    Readings: \"Readings\",\n    Uptime: \"Uptime (s)\",\n    Reconnection: \"Reconnects\",\n    Uploads: \"Uploads\",\n    Temperature: \"Temperature (\\u00B0C)\",\n    carrier: \"Carrier\",\n    var_1: \"Var 1\",\n    var_2: \"Var 2\",\n    var_3: \"Var 3\",\n};\n\n// Shared line-building helper for both main chart and overview chart.\nfunction buildGatewayLines(sourceData, tempData, leftAxis, rightAxis) {\n    if (!sourceData) return [];\n\n    const leftIndex = GATEWAY_ENUM[leftAxis];\n    const rightIndex = GATEWAY_ENUM[rightAxis];\n\n    const tempValues = [];\n    if (tempData) {\n        tempData.forEach(item => {\n            const vals = item.get('values');\n            tempValues.push(vals ? vals[0] : null);\n        });\n    }\n\n    const leftLine = {\n        key: leftAxis,\n        yAxis: 'y',\n        values: sourceData.map((item, i) => {\n            let val;\n            if (leftAxis === 'Temperature' && tempData) {\n                val = (i < tempValues.length) ? tempValues[i] : null;\n            } else {\n                val = item.values ? item.values[leftIndex] : null;\n            }\n            return { x: moment(item.get('id')).valueOf(), y: val };\n        })\n    };\n\n    const rightLine = {\n        key: rightAxis,\n        yAxis: 'y2',\n        values: sourceData.map((item, i) => {\n            let val;\n            if (rightAxis === 'Temperature' && tempData) {\n                val = (i < tempValues.length) ? tempValues[i] : null;\n            } else {\n                val = item.values ? item.values[rightIndex] : null;\n            }\n            return { x: moment(item.get('id')).valueOf(), y: val };\n        })\n    };\n\n    return [leftLine, rightLine];\n}\n\nexport default Component.extend({\n    store: service(),\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    leftAxis: computed(function() {\n        let leftAxis = this.attrs.getQueryParams('left_axis_field');\n        return leftAxis || 'Voltage';\n    }),\n\n    rightAxis: computed(function() {\n        let rightAxis = this.attrs.getQueryParams('right_axis_field');\n        return rightAxis || 'RSSI';\n    }),\n\n    // Main chart: sourced from zoomChartData so brushing refetches and adds detail.\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'leftAxis', 'rightAxis', function() {\n        return buildGatewayLines(this.get('zoomChartData'), this.get('zoomTempData'), this.get('leftAxis'), this.get('rightAxis'));\n    }),\n\n    // Overview chart: always the full history (doesn't refetch on brush).\n    overviewChartLinesData: computed('fullRangeChartData', 'leftAxis', 'rightAxis', function() {\n        return buildGatewayLines(this.get('fullRangeChartData'), null, this.get('leftAxis'), this.get('rightAxis'));\n    }),\n\n    didInsertElement() {\n        this._super(...arguments);\n        const linesData = this.get('fullRangeChartLinesData');\n        const leftAxis = this.get('leftAxis');\n        const rightAxis = this.get('rightAxis');\n\n        const y1Title = AXIS_LABELS[leftAxis] || leftAxis;\n        const y2Title = AXIS_LABELS[rightAxis] || rightAxis;\n\n        this._buildMainChart(linesData, y1Title, y2Title);\n        this._buildOverviewChart();\n    },\n\n    _buildMainChart(linesData, y1Title, y2Title) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        let xMin, xMax;\n        linesData.forEach(l => {\n            l.values.forEach(v => {\n                if (v.x != null && v.y != null) {\n                    if (xMin === undefined || v.x < xMin) xMin = v.x;\n                    if (xMax === undefined || v.x > xMax) xMax = v.x;\n                }\n            });\n        });\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        const label = typeof pt.y === 'number' ? pt.y.toFixed(2) : String(pt.y);\n                        ctx.fillText(label, element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: { display: true, text: y1Title },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => typeof v === 'number' ? v.toFixed(2) : v }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: y2Title },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => typeof v === 'number' ? v.toFixed(2) : v }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const linesData = this.get('overviewChartLinesData') || [];\n        if (!linesData.length) return;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        let xMin, xMax;\n        newLines.forEach(l => {\n            (l.values || []).forEach(v => {\n                if (v.x != null && v.y != null) {\n                    if (xMin === undefined || v.x < xMin) xMin = v.x;\n                    if (xMax === undefined || v.x > xMax) xMax = v.x;\n                }\n            });\n        });\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('overviewChartLinesData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const newLines = this.get('overviewChartLinesData') || [];\n\n        newLines.forEach((line) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                overviewChart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin = this.get('axis_min');\n        const axisMax = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    axisScaleObserver2: observer('autoAxis2', 'axis_min_2', 'axis_max_2', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis2 = this.get('autoAxis2');\n        const axisMin2 = this.get('axis_min_2');\n        const axisMax2 = this.get('axis_max_2');\n\n        if (autoAxis2) {\n            chart.options.scales.y2.min = undefined;\n            chart.options.scales.y2.max = undefined;\n        } else {\n            chart.options.scales.y2.min = (axisMin2 != null && axisMin2 !== '') ? parseFloat(axisMin2) : undefined;\n            chart.options.scales.y2.max = (axisMax2 != null && axisMax2 !== '') ? parseFloat(axisMax2) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'GatewayChart.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed, set } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nfunction resetNewGatewayObject(_this) {\n    // console.log(\"NewGatewayObject::: \");\n    _this.set('newGatewayObject', {});\n    _this.set('name', null);\n    _this.set('installDate', null);\n\n\n    // name: DS.attr('text'),\n    // gatewayType: DS.belongsTo('gateway-type', {async: false}),\n    // project: DS.attr('text'),\n    // location: DS.attr('text'),\n    // depth: DS.attr('number'),\n    // level: DS.attr('text'),\n    // installDate: DS.attr(),\n    // installedBy: DS.attr('text'),\n    // purpose: DS.attr('text'),\n    // notes: DS.attr('text'),\n    // gatewayTypeID: DS.attr(),\n    // active: DS.attr('boolean'),\n\n}\n\nexport default class CreateBluCellGateway extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewGatewayObject(this);\n        this.loadGateways(this.gatewayList);\n    }\n\n    loadGateways(gatewayList) {\n        const rawData = gatewayList; // Assuming gateways is an array of gateway objects\n        \n        // Filter gateways to get a list of only Blu900GW gateways\n        const filteredGateways = rawData.filter(function (gateway) {\n            if(gateway.active == true && gateway.get('gatewayType').title.toLowerCase() === 'blu900gw'){\n                return gateway.get('gatewayType').title.toLowerCase() === 'blu900gw';\n            }\n        });\n        \n        const mappedGateways = filteredGateways.map(function (gateway) {\n            // Retrieve parent gateway record based on available information\n            const parentId = gateway.get('parentId'); // Assuming there is a field 'parentId' in the gateway object\n            \n    \n            let gw = {\n                title: gateway.get('id') + ' - ' + gateway.get('gatewayType').title,\n                value: gateway.get('id'),\n                type: gateway.get('gatewayTypeID'),\n                parent: gateway, // Assign parent gateway to 'parent' property \n            };\n            \n            // console.log(gw);\n            return gw;\n        });\n    \n        this.set('gateways', mappedGateways);\n        // console.log(this.get('gateways'));\n    }\n        \n    isAuthenticated = true;\n    newGatewayObject = {};\n    installDate = null;\n    authError = false;\n    gateways = [];\n\n    // @computed(async function() {\n    //     return await getGateways();\n    // }) gateways;\n    \n\n\n    actions = {\n        setError(error,value) {\n            set(this, error, value);\n        },\n        \n        async createGateway(object){\n            let _this = this;\n            let store = _this.get('store');\n            let error = false;\n            _this.set('fieldError',false);\n            _this.set('isVisibleError',false);\n            \n            let parent = _this.get('newGatewayObject.parentGateway');\n\n            if ( parent ) {\n                // Perform save action here if a value is selected.\n                console.log('Value is selected, proceed to save.' + parent);\n            } else {\n                // Handle the case where no value is selected.\n                console.error('Please select a Parent Gateway before saving.');\n                error = true;\n                _this.set('fieldError',true);\n                _this.set('isVisibleError',true);\n                return\n            }\n\n            \n            let newGatewayObject = _this.get('newGatewayObject');\n            newGatewayObject.parentGatewayId = parent.id;\n\n            let parentGateway = parent;\n            \n            _this.set('isVisibleError',false);\n            _this.set('duplicateError',false);\n            _this.set('fieldError',false);\n\n            newGatewayObject.id = _this.get('id');\n            newGatewayObject.installDate = _this.get('installDate');\n            newGatewayObject.depth = _this.get('depth');\n            newGatewayObject.active = true;\n            newGatewayObject.parentGatewayId = parent.id;\n\n            let interval_upload = await _this.store.query('gateway-interval', {\n                filter: { interval_value: 5, interval_group_name: 'upload_interval' }\n            }).then(r => r.at(0)).catch(() => null);\n\n            let interval_read = await _this.store.query('gateway-interval', {\n                filter: { interval_value: 5, interval_group_name: 'instrument_reading_interval' }\n            }).then(r => r.at(0)).catch(() => null);\n\n            if(typeof newGatewayObject.id === 'undefined' || newGatewayObject.id === \"\") {\n                error = true;\n                _this.set('fieldError',true);\n                _this.set('isVisibleError',true);\n            }\n\n            if (_this.get('installDate') != null) {\n                newGatewayObject.installDate = moment(_this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            let newGateway = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newGateway = store.createRecord('gateway', newGatewayObject);\n                    newGateway.set('gatewayType', store.peekRecord('gateway-type', _this.typeID));\n                    newGateway.set('parentGateway', parentGateway);\n                    newGateway.set('gatewayUploadInterval', interval_upload);\n                    newGateway.set('gatewayReadInterval', interval_read);\n                } catch (err) {\n                    _this.set('isVisibleError',true);\n                    error = true;\n                    if(err.message.includes('has already been used')) {\n                        _this.set('duplicateError',true);\n                        dup = true;\n                    }\n                }\n            }\n            \n            _this.set('authError', false);\n            // console.log(\"id: \" + newGateway.parentGateway.id);\n            if(!error) {\n                newGateway.save().then(function(results){\n                    \n                    if(results.id != null) {\n                        // Create a new GatewayChildRelation\n                        let childRelation = store.createRecord('gateway-child-relation', {\n                            isCurrent: true,\n                        });\n                        childRelation.set('parentGateway', parentGateway);\n                        childRelation.set('childGateway', results);\n                        childRelation.save().then(() => {\n                            console.log(\"childRelation record saved...\");\n                        }).catch(function(reason){\n                            console.log(\"Reason: \" + reason);\n                        })\n\n                        window.localStorage.setItem('parentGateway', parent.id);\n                        _this.get('submit')(results.id);\n                        // let parentRelation = store.createRecord('gateway-child-relation', {\n                        //     parentGateway: parent, // Set the parent gateway\n                        //     childGateway: results, // Set the child gateway\n                        //     isCurrent: true, // Set any other attributes as needed\n                        //   });\n                        // parentRelation.save();\n    \n                    } else {\n                        this.set('isVisibleError',true);\n                        error = true;\n                    }\n                }).catch(function(reason) {\n                    _this.set('isVisibleError',true);\n                    _this.set('authError',true);\n                }); \n            } \n        },\n        async setID(gwId){\n            if(gwId != null && gwId !== '') {\n\n                let newGatewayObject = this.get('newGatewayObject');\n                // console.log(newGatewayObject);\n                // console.log(\"Parent Selected::: \" + gwId);\n\n                let parent = await this.store.findRecord('gateway', gwId).then((parentGateway) => {\n                    // Parent gateway retrieved successfully\n                    // console.log(parentGateway.id);\n                    return parentGateway;\n                }).catch((error) => {\n                    // Handle error if the parent gateway does not exist or any other issue occurs\n                    console.error(error);\n                });\n                this.set('newGatewayObject.parentGateway', parent);\n                // console.log(\"parentGateway::::::::::: \" + this.get('newGatewayObject').parentGateway.id);\n                \n            } else {\n                this.set('newGatewayObject.parentGateway', null);\n            }\n        },\n\n    }\n}\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let gatewayValueObjectValues = _this.get('gatewayValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(gatewayValueObjectValues).forEach(function(key,index) {\n        gatewayValueObjectValues[key] = null;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n\n    newGatewayValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newGatewayValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n\n    gatewayValueObjectValues: computed('anchorDistances', function() {\n        let gatewayValueObjectValues = [];\n        for (let i = 0; i <= this.get('anchorDistances').length - 1; i++) {\n            gatewayValueObjectValues[i] = 0;\n        }\n        return gatewayValueObjectValues;\n    }),\n\n    newGatewayValueObjectValues: computed('gatewayValueObjectValues', function() {\n        let gatewayValueObjectValues = [];\n        for (let i = 0; i <= this.get('gatewayValueObjectValues').length - 1; i++) {\n            gatewayValueObjectValues[i] = 0;\n        }\n        return gatewayValueObjectValues;\n    }),\n\n    actions: {\n        saveNew(){\n            //  console.log(\"saveNew\");\n            let _this = this,\n                store = this.get('store'),\n                newGatewayValuesObject = this.get('newGatewayValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                gatewayValues = this.get('gatewayValues'),\n                temperatureValues = this.get('temperatureValues');\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-gateway-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('gatewayId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newGatewayValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newGatewayValuesObject.values = Object.values(this.get('newGatewayValueObjectValues'));\n\n            const newGatewayValues = store.createRecord('gateway-value', newGatewayValuesObject);\n            // save new gateway-value to DB\n            const savedGatewayValuesObject = newGatewayValues.save({adapterOptions: this.get('gatewayId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if gateway-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //gatewayValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n\n            })\n            .catch(function(reason){\n                console.log(reason);\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import { camelize } from '@ember/string';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default class EditGateway extends Component.extend({\n\n    store: service(),\n    gatewayReadingsIntervals: null,\n    initialSelection: null,\n    isAuthenticated : true,\n    // selectedReadingIntervalID : null,\n    selectedModel : null,\n    editing : 0,\n    parent: null,\n    // gateway: null,        \n    parentLoading: false,\n    init(){\n        this._super(...arguments);\n    },\n    parent: computed('gateway', function() {\n        let gateway = this.get('gateway');\n        let parent = gateway.get('parentGateway');\n        if(parent == null){\n            // console.log(\"parent is null\");\n            return null;\n        }\n        // console.log(\"parent::: \" + parent.get('id'));\n        return parent.get('id');\n    }),\n    gateways: [],\n    \n    getGatewayUploadIntervalID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayUploadInterval = gw.gatewayUploadInterval;\n        // console.log(\"gatewayUploadInterval::: \" + gatewayUploadInterval)\n        if(gatewayUploadInterval == null){\n            return 0;\n        }\n            return (gatewayUploadInterval.id).toString();\n    }),\n\n    getGatewayReadIntervalID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayReadInterval = gw.gatewayReadInterval;\n        // console.log(\"gatewayReadInterval::: \" + gatewayReadInterval)\n        if(gatewayReadInterval == null){\n            return 0;\n        }\n        return (gatewayReadInterval.id).toString();\n    }),\n    // async addParentToGateway(childGateway, newParentGateway) {\n    //     let newRelation = this.store.createRecord('gateway-child-relation', {\n    //       parentGateway: newParentGateway,\n    //       childGateway: childGateway,\n    //       isCurrent: true\n    //     });\n    //     newRelation.save().then(() => {\n    //       // Do something on success, like notifying the user\n    //     }).catch((error) => {\n    //       // Handle errors\n    //     });\n    //   },\n\n\n    addParentToGateway(childGateway, newParentGateway) {\n        let newRelation = this.store.createRecord('gateway-child-relation', {\n            parentGateway: newParentGateway,\n            childGateway: childGateway,\n            isCurrent: true\n            });\n        // console.log(\"About to save gateways for parent and child: \" + childGateway.id + \"  \" + newParentGateway.id)\n        newRelation.save().then(() => {\n          // Add this line to also update the 'children' relationship\n          newParentGateway.get('children').addObject(childGateway);\n          newParentGateway.save();\n    \n          // Do something on success, like notifying the user\n        }).catch((error) => {\n          console.log(\"Error::::::::: \" + error);\n        });\n    }\n\n    \n}){\n    @service router;\n    @service store;\n    isAuthenticated = true;\n    _this = this;\n\n    actions = {\n        //in order for this to work the id of the select element must be the same as the attribute name\n        setGatewayInterval(event) {\n            let gateway = this.get('gateway');\n            const selectedOptions = Array.from(event.target.selectedOptions);\n            //id of the newly selected interval\n            const selectedValue = parseInt(selectedOptions.map(option => option.value));    \n            //interval attribute name\n            const intervalType = event.target.id;\n            // when the record has no interval records associated with it, when you try to save an error is thrown.\n            // I avoid this by defaulting the interval to 5 minutes when the one is saved and the other is null.\n            let notSelected = intervalType == 'gatewayReadInterval' ? 'gatewayUploadInterval' : 'gatewayReadInterval';\n\n            this.store.findRecord('gateway-interval', selectedValue).then((interval) => { \n                let notSelectedIntervalValue = gateway[notSelected];\n                let group_name = intervalType == 'gatewayReadInterval' ? 'instrument_reading_interval' : 'upload_interval';\n                if(notSelectedIntervalValue == null){\n                    //if the non-selected interval is null I default it here.\n                    this.store.query('gateway-interval', {\n                        filter: {\n                          interval_value: 5,\n                          interval_group_name: group_name\n                        }\n                        }).then(function(results) {\n                            gateway.set(notSelected, results.get('firstObject'));\n                            gateway.set(intervalType, interval); // Set the related object as the new value of the attribute\n                \n                            gateway.save().then(() => {\n                                console.log('Gateway saved successfully!');\n                            }).catch((error) => {\n                                console.log('Error saving gateway:', error);\n                            });\n            \n                        }).catch(function(error) {\n                        console.log(\"Error Getting interval_upload object::: \" + error);\n                      });\n                } else {\n                    \n                    gateway.set(intervalType, interval); // Set the related object as the new value of the attribute\n                    gateway.save().then(() => {\n                        console.log('Gateway saved successfully!');\n                    }).catch((error) => {\n                        console.log('Error saving gateway:', error);\n                    });\n                }                    \n            });\n            \n        },\n         \n        updatePage(){\n            let store = this.get('store');\n            let gateway = this.get('gateway');\n            gateway.save();\n        },\n        viewData(id, parentGateway) {\n            // console.log(\"Edit-gateway::: \" + id)\n            // console.log(\"parentGateway::: \" + parentGateway)\n            this.get('router').transitionTo('raw-gateway-data', id, {queryParams: {\"raw_parent_gateway\": parentGateway}});\n        },\n        tGraph(id, parentGateway) {\n            let badCodes = ['null', 'undefined', ''];\n            console.log(\"Edit-gateway::: \" + id)\n            console.log(\"parentGateway::: \" + parentGateway)\n            if( badCodes.includes(parentGateway) ){\n                parentGateway = localStorage.getItem('parentGateway');\n            }            \n            // this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, \"voltage-values\", {queryParams: {\"chart_type\": \"voltage-values\", \"chart_parent_gateway\": parentGateway}} );\n            // console.log('parentGateway::::::::::::::::::: ' +  this.get('parentGateway'));\n            this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, \"voltage-values\", { queryParams: { 'chart_type': 'voltage-values', 'parentGateway': this.get('parentGateway'), \"chart_parent_gateway\": parentGateway  }});\n\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveGateway(){\n            const _this = this;\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/gateway\";\n                }\n            } else {\n                window.location.href = \"/gateway\";\n            }\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        // updateProperty(propertyName, propertyValue) {\n        //     this.set(propertyName, propertyValue);\n        // },\n\n        async setID(gw){\n            if(gw != null) {\n\n                let gateway = this.get('gateway');\n                // console.log(gateway);\n                // console.log(\"Parent Selected::: \" + JSON.stringify(gw));\n                let parent = await this.store.findRecord('gateway', gw.value).then((parentGateway) => {\n                    // Parent gateway retrieved successfully\n                    // console.log(\"getting the parent gateway: \" + parentGateway.id);\n                    return parentGateway;\n                }).catch((error) => {\n                    // Handle error if the parent gateway does not exist or any other issue occurs\n                    console.error(\"Error getting parent gateway: \" + error);\n                });\n                this.addParentToGateway(gateway,parent);\n            } else {\n                this.set('gateway.parentGateway', null);\n            }\n        },\n    \n\n\n    }\n}\n\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    // temperaturePoints: [],\n    distXRiseUpAnimationDuration: 500,\n    \n    leftAxis: computed(function(){\n        let leftAxis = this.attrs.getQueryParams('left_axis_field');\n        if(leftAxis == null){\n          leftAxis = 'Voltage';\n        }\n        return leftAxis;\n    }),      \n\n    rightAxis: computed(function(){\n        let rightAxis = this.attrs.getQueryParams('right_axis_field');\n        if(rightAxis == null){\n            rightAxis = 'RSSI';\n          }\n          return rightAxis;\n    }),\n\n    // temperature_indexes_to_remove: [],\n    GATEWAY_ENUM: Object.freeze({\n        Firmware: 0,\n        Coordinator: 1,\n        Voltage: 2,\n        RSSI: 3,\n        carrier: 4, \n        Readings: 5, \n        Uptime: 6, \n        Reconnection: 7, \n        Uploads: 8, \n        var_1: 9, \n        var_2: 10, \n        var_3: 11,\n        Temperature: 12,        \n    }),\n\n    zoomDataPointsLeftAxis: computed(function(){\n        \n        let zoomChartData = this.get(\"zoomChartData\");\n        let leftAxisIndex = this.GATEWAY_ENUM[this.leftAxis]\n        // console.log(\"leftAxisIndex: \" + leftAxisIndex)\n        \n        let parentGateway = this.attrs.getQueryParams(\"chart_parent_gateway\");\n        let coordinatorPosition = this.GATEWAY_ENUM.Coordinator;\n        // keep track of id's that need to be removed from the temperature array too.\n        // let temperature_indexes = [];\n        let zoomLeftAxis = zoomChartData.filter(function(item) {\n            let coordinator = item.values[coordinatorPosition];\n            \n            if (parentGateway !== coordinator) {\n                return false;  // we're tryint to filter out items that don't belong to this gateway.\n            }\n            return true;  // Exclude this item from the output array\n        }).map(function(item) {\n            return item.values[leftAxisIndex];\n        });\n        return zoomLeftAxis;\n    }),\n\n    zoomDataPointsRightAxis: computed(function(){\n        \n        let zoomChartData = this.get(\"zoomChartData\");\n        let rightAxisIndex = this.GATEWAY_ENUM[this.rightAxis]\n        // console.log(\"righAxisIndex: \" + rightAxisIndex)\n        \n        let parentGateway = this.attrs.getQueryParams(\"chart_parent_gateway\");\n        let coordinatorPosition = this.GATEWAY_ENUM.Coordinator;\n        // keep track of id's that need to be removed from the temperature array too.\n        // let temperature_indexes = [];\n        let zoomRightAxis = zoomChartData.filter(function(item) {\n            let coordinator = item.values[coordinatorPosition];\n            \n            if (parentGateway !== coordinator) {\n                return false;  // we're tryint to filter out items that don't belong to this gateway.\n            }\n            return true;  // Exclude this item from the output array\n        }).map(function(item) {\n            return item.values[rightAxisIndex];\n        });\n        return zoomRightAxis;\n    }),\n\n    zoomDataPoints: computed('zoomChartData', function () {\n        let left = this.get('zoomDataPointsLeftAxis');\n        return left;\n    }),\n\n    fullRangeDataPoints: computed('fullRangeChartData', function () {\n        let fullRangePoints = [];\n        let itemHolder = {};\n        let newFullRangePoints = [];\n        let parentGateway = this.attrs.getQueryParams(\"chart_parent_gateway\");\n        let coordinatorPosition = this.GATEWAY_ENUM.Coordinator;\n\n        fullRangePoints = this.get('fullRangeChartData');\n        // First, filter the points where coordinator matches parentGateway\n        let filteredPoints = fullRangePoints.filter(item => {\n            let coordinator = item.get(\"values\")[coordinatorPosition]\n            // console.log(\"item: \" + coordinator + \"  parentGatway: \" + parentGateway + \"  Result: \" + (coordinator === parentGateway) );\n            return coordinator === parentGateway;\n        });\n        // Then, map over the filtered points to get their properties\n        newFullRangePoints = filteredPoints.map(item => {\n            return { values: item.get(\"values\") };\n        });\n        \n        return newFullRangePoints;\n    }),\n\n/*     \n    fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: computed('zoomChartData', 'parentGateway', 'GATEWAY_ENUM', function () {\n        let parentGateway = this.attrs.getQueryParams(\"chart_parent_gateway\");\n        let coordinatorPosition = this.GATEWAY_ENUM.Coordinator;\n        \n        return this.get('zoomChartData').filter(item => {\n            return item.get('values')[coordinatorPosition] === parentGateway;\n        }).map(item => {\n            return item.get('id');\n        });\n    }),\n\n    fullRangeTimePoints: computed('fullRangeChartData', 'parentGateway', 'GATEWAY_ENUM', function () {\n        let parentGateway = this.attrs.getQueryParams(\"chart_parent_gateway\");\n        let coordinatorPosition = this.GATEWAY_ENUM.Coordinator;\n    \n        return this.get('fullRangeChartData').filter(item => {\n            return item.get('values')[coordinatorPosition] === parentGateway;\n        }).map(item => {\n            return item.get('id');\n        });\n    }),\n    \n    // zoomTimePoints: map('zoomChartData', function(item){\n    //    //console.log(\"zoomTimePoints::::::::::::::: 9\");    \n    //     return item.get('id');\n    // }),\n\n    // fullRangeTimePoints: map('fullRangeChartData', function(item){\n    //    //console.log(\"fullRangeTimePoints::::::::::::::: 13\");\n    //     return item.get('id');\n    // }),\n    \n    anchorDistances: computed('gateway', 'fullRangeChartData', function() {\n        let leftAxis = this.get('leftAxis'); \n       //console.log(\"anchorDistances::::::::::::::: 10   ::\" + leftAxis);\n        return [leftAxis];\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n       //console.log(\"zoomChartLinesData::::::::::::::: 2\");    \n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n        // let tempPoints = this.get('zoomTempPoints');\n            \n        // console.log(\"zoomTempPoints::: \" + JSON.stringify(tempPoints));\n        // console.log(\"zoomTempPoints::: \" + this.get('temperaturePoints'));\n        \n        let anchorDistances = this.get('anchorDistances');\n        let zoomChartLinesData = [];\n\n        var mName = _this.get('chartDataModelName');\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[0]\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n       //console.log(\"TEMP::: \" + _this.get('chartDataModelName'));\n        let zoomTempPoints = this.get('zoomDataPointsRightAxis');\n        var temp = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                //console.log(\"temp Points::: \" + zoomTempPoints);\n                return [\n                    moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        //console.log(temp);\n        zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        \n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n       //console.log(\"fullRangeChartLinesData::::::::::::::: 11\");    \n        const _this = this;\n        const fullRangeDataPoints = this.get('fullRangeDataPoints');\n        const fullRangeTimePoints = this.get('fullRangeTimePoints');\n        \n        let fullRangeTempPoints = this.get('zoomDataPointsRightAxis');\n        let anchorDistances = this.get('anchorDistances');\n\n        let fullRangeChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                   //console.log(\"fullReang:::::::::::::::::::\" + _this.GATEWAY_ENUM[_this.leftAxis])\n                    ////console.log(\"DataPoint::: \" + dataPoint.values[chartLineIndex]);\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[_this.GATEWAY_ENUM[_this.leftAxis]]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n\n        var temperature = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: fullRangeTempPoints.map(function(dataPoint, dataPointIndex) {\n                //console.log(\"temp Points::: \" + zoomTempPoints);\n                return [\n                    moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        // fullRangeChartLinesData.push(temperature); //#TODO: Add Temp Points\n        return fullRangeChartLinesData;           \n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n       //console.log(\"chartDataModelName::::::::::::::: 5   \" + this.get('zoomChartData').query.model_name);    \n        //console.log(\"zoomChartData:\" + this.get('zoomChartData').query.model_name);\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n       //console.log(\"yAxisLegend::::::::::::::: 14\");    \n        let chartTitle = 'voltage'\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        //let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n    getTitleAndUnits: function(axis){\n        let axisValues = {\"Voltage\": \"Voltage, V\", \"RSSI\": \"RSSI, dBm\", \"Firmware\": \"Firmware Ver.\", \"Readings\": \"Readings\", \n                            \"Uptime\": 'Uptime - in Seconds.', \"Reconnection\": \"Reconnects\", \"Uploads\": \"Uploads\",\n                            \"Temperature\": \"Temperature,C\", \"var_1\": 9, \"var_2\": 9,  \"var_3\": 10}\n        // console.log(\"getTitleAndUnits::::::::::::::: \" + axisValues[axis]);\n        return axisValues[axis];\n    },\n    didInsertElement: function() {\n        \n       //console.log(\"didInsertElement::::::::::::::: 1\");    \n        const _this = this,\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n        const zoomChartLinesData = _this.get('zoomChartLinesData');\n        const fullRangeChartLinesData = _this.get('fullRangeChartLinesData');\n        \n        let zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg');\n        \n        let fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg');\n        let yAxisLegend = this.get('yAxisLegend');\n        let apiCallsPromises = yAxisLegend;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(false)\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showLegend(true)\n                .showDistX(true)\n                .noData('No usable data');\n\n            zoomChart.showYAxis = true;\n            zoomChart.y2Axis.showYAxis = true;\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .ticks(8)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        //console.log(\"D:::::::::: \" + d);\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        //console.log(nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d)));\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n               \n                let axis1Title = _this.getTitleAndUnits(_this.get('leftAxis'));\n                let axis2Title = _this.getTitleAndUnits(_this.get('rightAxis'));\n                \n                zoomChart.y1Axis\n                    .axisLabel(axis1Title)\n                    .axisLabelDistance(10);\n                \n                zoomChart.y2Axis\n                    .axisLabel(axis2Title)\n                    .axisLabelDistance(10)\n                ;\n                    \n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                zoomChart.y2Axis.tickFormat(d3.format(\".2f\"));\n                \n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                let legend = zoomChart.legend;\n                if(legend.controls){\n                    legend.controls.forEach(function(d, i) {\n                        d.disabled = false;\n                    });\n                }\n\n                //console.log(\"zoomChart::::\" + zoomChart.legend);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    //console.log(\"BRUSH END::::::::::::::::::::\");\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(false);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n                \n                function selectControls() {\n                    // console.log(\":::::::::::::::::::::: selectControls\");\n                    //zoomChart.chartData.forEach(function(series) { series.disabled = false; });                  \n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n                    tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    tooltipClass = 'other';\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                        \n                }\n\n                //     if (typeof(tooltipContent) === 'object') {\n                //         if (tooltipContent.type === 'Blast') {\n                //             tooltipClass = 'blast';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                //         } else if (tooltipContent.type === 'Seismic') {\n                //             tooltipClass = 'seismic';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                //         } else if (tooltipContent.type === 'BluVibe') {\n                //             tooltipClass = 'bluvibe';\n                //             eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                //         } else if (tooltipContent.type === 'Other') {\n                //             tooltipClass = 'other';\n                //         }\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                //                       '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                //                       eventSize\n                //         ;\n                //     } else {\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                //     }\n\n                //     return {\n                //         tooltipClass: tooltipClass,\n                //         tooltipText: tooltipText\n                //     };\n                // }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(\"VibeEventsArray:::\" + vibeEventsArray);\n                    //console.log(distXMouseMove);\n \n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                // d3.select('.nv-y2.nv-axis')\n                // .classed('nv-disabled', false)\n                // .attr('transform', 'translate(0,0)');\n        \n                nv.utils.windowResize(zoomChart.update);\n\n                // zoomChart.dispatch.on('stateChange', function(e) { \n                //     nv.log('New State:', JSON.stringify(e)); \n                // });\n                // zoomChart.state.dispatch.on('change', function(state){\n                //     nv.log('state', JSON.stringify(state));\n                // });\n\n               //console.log(\":::::::::::::::::::::::::::setData called\")\n                // _this.sendAction('setData',zoomChartLinesData);\n                // _this.sendAction('setChart',zoomChart);\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            //.showYAxis(true)\n        ;\n        \n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .ticks(8)\n                .showMaxMin(false)\n                .tickFormat(function(d) {\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n        \n    }\n});\n","import { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    isVisibleCreateNewForm: false,\n\n    anchorDistances: computed('gateway', function() {\n        return [\"Firmware Version\",\"Coordinator\", \"Voltage\", \"RSSI\", \"Mesh ID\"]\n    }),\n    \n    getGatewayData: computed('gateway', 'gatewayData', 'temperatureData', function() {\n        let items = [];\n        const filteredData = this.get('gatewayData');\n        \n        if (filteredData) {\n            filteredData.forEach(item => {\n                // console.log(JSON.stringify(item))\n                let firmware = item.values[0];\n                let coordinator = item.values[1];\n                let voltage = item.values[2];\n                let rssi = item.values[3];\n                let mesh_id = item.values[item.values.length - 1];\n                let temperature = item.values[item.values.length -2]\n                if (coordinator === this.get('raw_parent_gateway')) {\n                    items.push({\n                        id: item.id,\n                        values: {\n                            'firm_version': firmware,\n                            'coordinator': coordinator,\n                            'voltage': voltage,\n                            'rssi': rssi,\n                            'mesh_id': mesh_id,\n                            'temperature': temperature || 'Nan'// Added temperature here\n                        },\n                        originalValue: item,\n                        save_values: {\n                            'firm_version': firmware,\n                            'voltage': voltage,\n                            'mesh_id': mesh_id\n                        }\n                    });\n                } else {\n                    console.log(\"Record doesn't match: coordinator: \" + coordinator + \"  raw_parent_gateway: \" + this.get('raw_parent_gateway'));\n                }\n            });\n        }       \n        return items;\n    }),\n    actions: {\n        updateProperty(propertyName, propertyValue) {\n        //   console.log(\"Update property: \" + propertyValue);\n          this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n  selected: '', // Set the initial value to 'RSSI'\n\n  defaultSelected: computed('selected', function () {\n    const selected = this.selected;\n    // console.log('selected:::::::::::: ' + selected);\n    return selected === '' ? 'Voltage' : selected;\n  }),\n\n\n  actions: {\n    handleSelectedFieldChange(newValue) {\n      this.set('selected', newValue);\n    },\n  },\n});\n","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class LeftAxisDropdown extends Component.extend({}) {\n    @service router;\n    @service store;\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    actions = {\n        tGraph(id, modelName, params) {\n            // console.log(\"in LeftAxisDropdown:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\")\n            this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, modelName, params);\n        },\n    }\n}","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n  rightAxisField: '', // Set the initial value to 'RSSI'\n  routeValue: 'voltage-values',\n\n  defaultRightAxisField: computed('rightAxisField', function() {\n    const rightAxisField = this.rightAxisField;\n    // console.log('rightAxisField:::::::::::: ' + rightAxisField);\n    return rightAxisField === '' ? 'Temperature' : rightAxisField;\n  }),\n\n  getRouteValue: computed('selected', function () {\n    const selected = this.selected.toLowerCase();\n    // console.log('selected:::::::::::: ' + selected);\n    this.set('routeValue', selected + '-values');\n  }),\n\n  actions: {\n    handleRightAxisFieldChange(newValue) {\n      // console.log('handleRightAxisFieldChange:::::::::::: ' + newValue);    \n      this.set('rightAxisField', newValue);\n    }\n  }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nconst GATEWAY_ENUM = Object.freeze({\n    Firmware: 0,\n    Coordinator: 1,\n    Voltage: 2,\n    RSSI: 3,\n    carrier: 4,\n    Readings: 5,\n    Uptime: 6,\n    Reconnection: 7,\n    Uploads: 8,\n    var_1: 9,\n    var_2: 10,\n    var_3: 11,\n    Temperature: 12,\n});\n\nconst AXIS_LABELS = {\n    Voltage: \"Voltage (V)\",\n    RSSI: \"RSSI (dBm)\",\n    Firmware: \"Firmware Ver.\",\n    Coordinator: \"Coordinator\",\n    Readings: \"Readings\",\n    Uptime: \"Uptime (s)\",\n    Reconnection: \"Reconnects\",\n    Uploads: \"Uploads\",\n    Temperature: \"Temperature (\\u00B0C)\",\n    carrier: \"Carrier\",\n    var_1: \"Var 1\",\n    var_2: \"Var 2\",\n    var_3: \"Var 3\",\n};\n\n// Shared line-building helper for both main chart and overview chart.\nfunction buildGatewayLines(sourceData, tempData, leftAxis, rightAxis) {\n    if (!sourceData) return [];\n\n    const leftIndex = GATEWAY_ENUM[leftAxis];\n    const rightIndex = GATEWAY_ENUM[rightAxis];\n\n    const tempValues = [];\n    if (tempData) {\n        tempData.forEach(item => {\n            const vals = item.get('values');\n            tempValues.push(vals ? vals[0] : null);\n        });\n    }\n\n    const leftLine = {\n        key: leftAxis,\n        yAxis: 'y',\n        values: sourceData.map((item, i) => {\n            let val;\n            if (leftAxis === 'Temperature' && tempData) {\n                val = (i < tempValues.length) ? tempValues[i] : null;\n            } else {\n                val = item.values ? item.values[leftIndex] : null;\n            }\n            return { x: moment(item.get('id')).valueOf(), y: val };\n        })\n    };\n\n    const rightLine = {\n        key: rightAxis,\n        yAxis: 'y2',\n        values: sourceData.map((item, i) => {\n            let val;\n            if (rightAxis === 'Temperature' && tempData) {\n                val = (i < tempValues.length) ? tempValues[i] : null;\n            } else {\n                val = item.values ? item.values[rightIndex] : null;\n            }\n            return { x: moment(item.get('id')).valueOf(), y: val };\n        })\n    };\n\n    return [leftLine, rightLine];\n}\n\nexport default Component.extend({\n    store: service(),\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    leftAxis: computed(function() {\n        let leftAxis = this.attrs.getQueryParams('left_axis_field');\n        return leftAxis || 'Voltage';\n    }),\n\n    rightAxis: computed(function() {\n        let rightAxis = this.attrs.getQueryParams('right_axis_field');\n        return rightAxis || 'RSSI';\n    }),\n\n    // Main chart: sourced from zoomChartData so brushing refetches and adds detail.\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'leftAxis', 'rightAxis', function() {\n        return buildGatewayLines(this.get('zoomChartData'), this.get('zoomTempData'), this.get('leftAxis'), this.get('rightAxis'));\n    }),\n\n    // Overview chart: always the full history (doesn't refetch on brush).\n    overviewChartLinesData: computed('fullRangeChartData', 'leftAxis', 'rightAxis', function() {\n        return buildGatewayLines(this.get('fullRangeChartData'), null, this.get('leftAxis'), this.get('rightAxis'));\n    }),\n\n    didInsertElement() {\n        this._super(...arguments);\n        const linesData = this.get('fullRangeChartLinesData');\n        const leftAxis = this.get('leftAxis');\n        const rightAxis = this.get('rightAxis');\n\n        const y1Title = AXIS_LABELS[leftAxis] || leftAxis;\n        const y2Title = AXIS_LABELS[rightAxis] || rightAxis;\n\n        this._buildMainChart(linesData, y1Title, y2Title);\n        this._buildOverviewChart();\n    },\n\n    _buildMainChart(linesData, y1Title, y2Title) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        let xMin, xMax;\n        linesData.forEach(l => {\n            l.values.forEach(v => {\n                if (v.x != null && v.y != null) {\n                    if (xMin === undefined || v.x < xMin) xMin = v.x;\n                    if (xMax === undefined || v.x > xMax) xMax = v.x;\n                }\n            });\n        });\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        const label = typeof pt.y === 'number' ? pt.y.toFixed(2) : String(pt.y);\n                        ctx.fillText(label, element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: { display: true, text: y1Title },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => typeof v === 'number' ? v.toFixed(2) : v }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: y2Title },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => typeof v === 'number' ? v.toFixed(2) : v }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const linesData = this.get('overviewChartLinesData') || [];\n        if (!linesData.length) return;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        let xMin, xMax;\n        newLines.forEach(l => {\n            (l.values || []).forEach(v => {\n                if (v.x != null && v.y != null) {\n                    if (xMin === undefined || v.x < xMin) xMin = v.x;\n                    if (xMax === undefined || v.x > xMax) xMax = v.x;\n                }\n            });\n        });\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('overviewChartLinesData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const newLines = this.get('overviewChartLinesData') || [];\n\n        newLines.forEach((line) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                overviewChart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin = this.get('axis_min');\n        const axisMax = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    axisScaleObserver2: observer('autoAxis2', 'axis_min_2', 'axis_max_2', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis2 = this.get('autoAxis2');\n        const axisMin2 = this.get('axis_min_2');\n        const axisMax2 = this.get('axis_max_2');\n\n        if (autoAxis2) {\n            chart.options.scales.y2.min = undefined;\n            chart.options.scales.y2.max = undefined;\n        } else {\n            chart.options.scales.y2.min = (axisMin2 != null && axisMin2 !== '') ? parseFloat(axisMin2) : undefined;\n            chart.options.scales.y2.max = (axisMax2 != null && axisMax2 !== '') ? parseFloat(axisMax2) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'GatewayChart.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nfunction resetNewGatewayObject(_this) {\n    // console.log(\"NewGatewayObject::: \");\n    _this.set('newGatewayObject', {});\n    _this.set('name', null);\n    _this.set('installDate', null);\n\n\n    // name: DS.attr('text'),\n    // gatewayType: DS.belongsTo('gateway-type', {async: false}),\n    // project: DS.attr('text'),\n    // location: DS.attr('text'),\n    // depth: DS.attr('number'),\n    // level: DS.attr('text'),\n    // installDate: DS.attr(),\n    // installedBy: DS.attr('text'),\n    // purpose: DS.attr('text'),\n    // notes: DS.attr('text'),\n    // gatewayTypeID: DS.attr(),\n    // active: DS.attr('boolean'),\n\n}\n\nexport default class CreateBluCellGateway extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewGatewayObject(this);\n    }\n\n    isAuthenticated = true;\n    newGatewayObject = {};\n    installDate = null;\n    authError = false;\n\n    actions = {\n        async createGateway(object){\n\n            let _this = this,\n            store = this.get('store'),\n            newGatewayObject = this.get('newGatewayObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newGatewayObject.id = this.get('id');\n            newGatewayObject.installDate = this.get('installDate');\n            newGatewayObject.depth = this.get('depth');\n            newGatewayObject.active = true;\n\n            if(typeof newGatewayObject.id === 'undefined' || newGatewayObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n\n            if (this.get('installDate') != null) {\n                newGatewayObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            let newGateway = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newGateway = store.createRecord('gateway', newGatewayObject);\n                    newGateway.set('gatewayType', store.peekRecord('gateway-type', this.get('typeID')));\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    error = true;\n                    if(err.message.includes('has already been used')) {\n                        this.setError('duplicateError',true);\n                        dup = true;\n                    }\n                }\n            }\n            \n            this.setError('authError', false);\n\n            if(!error) {\n                newGateway.save().then(function(results){\n                    // console.log(dup);\n                    if(results.id != null) {\n                        _this.get('submit')(results.id);\n                    } else {\n                        this.setError('isVisibleError',true);\n                        error = true;\n                    }\n                }).catch(function(reason) {\n                    _this.setError('isVisibleError',true);\n                    _this.setError('authError',true);\n                }); \n            } \n        },\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let gatewayValueObjectValues = _this.get('gatewayValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(gatewayValueObjectValues).forEach(function(key,index) {\n        gatewayValueObjectValues[key] = null;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n\n    newGatewayValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newGatewayValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n\n    gatewayValueObjectValues: computed('anchorDistances', function() {\n        let gatewayValueObjectValues = [];\n        for (let i = 0; i <= this.get('anchorDistances').length - 1; i++) {\n            gatewayValueObjectValues[i] = 0;\n        }\n        return gatewayValueObjectValues;\n    }),\n\n    newGatewayValueObjectValues: computed('gatewayValueObjectValues', function() {\n        let gatewayValueObjectValues = [];\n        for (let i = 0; i <= this.get('gatewayValueObjectValues').length - 1; i++) {\n            gatewayValueObjectValues[i] = 0;\n        }\n        return gatewayValueObjectValues;\n    }),\n\n    actions: {\n        saveNew(){\n             // console.log(\"saveNew\");\n            let _this = this,\n                store = this.get('store'),\n                newGatewayValuesObject = this.get('newGatewayValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                gatewayValues = this.get('gatewayValues'),\n                temperatureValues = this.get('temperatureValues');\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-gateway-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('gatewayId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newGatewayValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newGatewayValuesObject.values = Object.values(this.get('newGatewayValueObjectValues'));\n\n            const newGatewayValues = store.createRecord('gateway-value', newGatewayValuesObject);\n            // save new gateway-value to DB\n            const savedGatewayValuesObject = newGatewayValues.save({adapterOptions: this.get('gatewayId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if gateway-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //gatewayValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n\n            })\n            .catch(function(reason){\n                console.log(reason);\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import { camelize } from '@ember/string';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default class EditInstrument extends Component.extend({\n    gatewayReadingsIntervals: null,\n\n    init(){\n        this._super(...arguments);\n    },\n    \n    store: service(),\n    isAuthenticated : true,\n    // selectedReadingIntervalID : null,\n    selectedModel : null,\n    editing : 0,\n    \n    getGatewayUploadIntervalID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayUploadInterval = gw.gatewayUploadInterval;\n        // console.log(\"gatewayUploadInterval::: \" + gatewayUploadInterval)\n        if(gatewayUploadInterval == null){\n            return 0;\n        }\n            return (gatewayUploadInterval.id).toString();\n    }),\n\n    getGatewayReadIntervalID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayReadInterval = gw.gatewayReadInterval;\n        // console.log(\"gatewayReadInterval::: \" + gatewayReadInterval)\n        if(gatewayReadInterval == null){\n            return 0;\n        }\n        return (gatewayReadInterval.id).toString();\n    }),\n    \n}){\n    @service router;\n    @service store;\n    isAuthenticated = true;\n    _this = this;\n\n    actions = {\n        //in order for this to work the id of the select element must be the same as the attribute name\n        setGatewayInterval(event) {\n            let gateway = this.get('gateway');\n            const selectedOptions = Array.from(event.target.selectedOptions);\n            //id of the newly selected interval\n            const selectedValue = parseInt(selectedOptions.map(option => option.value));    \n            //interval attribute name\n            const intervalType = event.target.id;\n            // when the record has no interval records associated with it, when you try to save an error is thrown.\n            // I avoid this by defaulting the interval to 5 minutes when the one is saved and the other is null.\n            let notSelected = intervalType == 'gatewayReadInterval' ? 'gatewayUploadInterval' : 'gatewayReadInterval';\n\n            this.store.findRecord('gateway-interval', selectedValue).then((interval) => { \n                let notSelectedIntervalValue = gateway[notSelected];\n                let group_name = intervalType == 'gatewayReadInterval' ? 'instrument_reading_interval' : 'upload_interval';\n                if(notSelectedIntervalValue == null){\n                    //if the non-selected interval is null I default it here.\n                    this.store.query('gateway-interval', {\n                        filter: {\n                          interval_value: 5,\n                          interval_group_name: group_name\n                        }\n                        }).then(function(results) {\n                            gateway.set(notSelected, results.get('firstObject'));\n                            gateway.set(intervalType, interval); // Set the related object as the new value of the attribute\n                \n                            gateway.save().then(() => {\n                                console.log('Gateway saved successfully!');\n                            }).catch((error) => {\n                                console.log('Error saving gateway:', error);\n                            });\n            \n                        }).catch(function(error) {\n                        console.log(\"Error Getting interval_upload object::: \" + error);\n                      });\n                } else {\n                    \n                    gateway.set(intervalType, interval); // Set the related object as the new value of the attribute\n                    gateway.save().then(() => {\n                        console.log('Gateway saved successfully!');\n                    }).catch((error) => {\n                        console.log('Error saving gateway:', error);\n                    });\n                }                    \n            });\n            \n        },\n                \n        // setGatewayUploadIntervals(intervalID) {\n        //     this.store.findRecord('gateway-interval', intervalID).then((interval) => { \n        //         let gateway = this.get('gateway');\n\n        //         gateway.set('gatewayUploadInterval', interval); // Set the related object as the new value of the attribute\n        //         gateway.save().then(() => {\n        //             console.log('Gateway saved successfully!');\n        //         }).catch((error) => {\n        //             console.log('Error saving gateway:', error);\n        //         });\n        //     });\n            \n        // },\n        \n        updatePage(){\n            let store = this.get('store');\n            let gateway = this.get('gateway');\n            gateway.save();\n        },\n        viewData(id) {\n            this.get('router').transitionTo('raw-gateway-data', id);\n        },\n        tGraph(id) {\n            //console.log(\"Edit-gateway::: \" + id)\n            this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, 'voltage-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveGateway(){\n            const _this = this;\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/gateway\";\n                }\n            } else {\n                window.location.href = \"/gateway\";\n            }\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n\n    }\n}\n\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    temperaturePoints: [],\n    distXRiseUpAnimationDuration: 500,\n    // chartMetric: computed(function(){\n    // let chartMetric = this.attrs.getQueryParams('chart_type');\n    //     if(chartMetric == null){\n    //       return 'voltage';\n    //     }\n    //    //console.log(\"chartMetric::: \" + chartMetric);\n    //     return chartMetric;\n    // }),\n    leftAxis: computed(function(){\n        let leftAxis = this.attrs.getQueryParams('left_axis_field');\n        if(leftAxis == null){\n          leftAxis = 'Voltage';\n        }\n        return leftAxis;\n    }),      \n    rightAxis: computed(function(){\n        let rightAxis = this.attrs.getQueryParams('right_axis_field');\n        if(rightAxis == null){\n            rightAxis = 'RSSI';\n          }\n          return rightAxis;\n    }),\n\n    GATEWAY_ENUM: Object.freeze({\n        Firmware: 0,\n        Coordinator: 1,\n        Voltage: 2,\n        RSSI: 3,\n        carrier: 4, \n        Readings: 5, \n        Uptime: 6, \n        Reconnection: 7, \n        Uploads: 8, \n        var_1: 9, \n        var_2: 10, \n        var_3: 11,\n        Temperature: 12,        \n    }),\n\n    // zoomTempPoints: computed(function(){\n    //     // let right = this.get('zoomDataPointsRightAxis');\n    //     let temperaturePoints = [];\n    //     let zoomTempData = this.get(\"zoomTempData\");\n    //     zoomTempData.forEach(function(item, i){\n    //         var chartData = { values: item.get(\"values\") };\n    //         temperaturePoints.push(chartData.values[0]);\n    //         // let temperaturePoints = this.get('temperaturePoints').push(chartData.values);\n    //     });\n        \n    //     return temperaturePoints; //chartData;\n    // }),\n    zoomDataPointsLeftAxis: computed(function(){\n        \n        let zoomChartData = this.get(\"zoomChartData\");\n        let leftAxisIndex = this.GATEWAY_ENUM[this.leftAxis]\n        \n        let zoomLeftAxis = zoomChartData.map(function (item, i){\n            return item.values[leftAxisIndex];            \n        });\n        // console.log(JSON.stringify(zoomLeftAxis))\n        return zoomLeftAxis;\n    }),\n    \n    zoomDataPointsRightAxis: computed(function(){\n        //console.log(\"zoomDataPointsRightAxis::::::::::::::: 8\");\n        let zoomRightAxis = null;\n        if(this.rightAxis != null){\n            let zoomChartData = this.get(\"zoomChartData\");\n            let rightAxisIndex = this.GATEWAY_ENUM[this.rightAxis]        \n            zoomRightAxis = zoomChartData.map(function (item, i){\n                return item.values[rightAxisIndex];            \n            });\n        }\n        ////console.log(\"zoomRightAxis::::::: \" + JSON.stringify(zoomRightAxis));\n        // console.log(JSON.stringify(zoomRightAxis))\n        return zoomRightAxis;\n\n    }),\n\n    zoomDataPoints: computed('zoomChartData', function () {\n       //console.log(\"zoomDataPoints::::::::::::::: 4 and 6 \" + this.get(\"chartDataValueName\") );\n        let left = this.get('zoomDataPointsLeftAxis');\n        \n        return left;\n    }),\n\n    fullRangeDataPoints: computed('fullRangeChartData', function () {\n        let fullRangePoints = null;\n        let itemHolder = {};\n\n        fullRangePoints = this.get('fullRangeChartData');\n        fullRangePoints.map(function (item, i){\n            let itemHolder = { values: item.get(\"values\") };\n            return itemHolder;\n        });\n        \n        return fullRangePoints;\n        \n    }),\n\n/*     \n    fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n       //console.log(\"zoomTimePoints::::::::::::::: 9\");    \n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n       //console.log(\"fullRangeTimePoints::::::::::::::: 13\");\n        return item.get('id');\n    }),\n    \n    anchorDistances: computed('gateway', 'fullRangeChartData', function() {\n        let leftAxis = this.get('leftAxis'); \n       //console.log(\"anchorDistances::::::::::::::: 10   ::\" + leftAxis);\n        return [leftAxis];\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n       //console.log(\"zoomChartLinesData::::::::::::::: 2\");    \n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n        let tempPoints = this.get('zoomTempPoints');\n            \n        // console.log(\"zoomTempPoints::: \" + JSON.stringify(tempPoints));\n        // console.log(\"zoomTempPoints::: \" + this.get('temperaturePoints'));\n        \n        let anchorDistances = this.get('anchorDistances');\n        let zoomChartLinesData = [];\n\n        var mName = _this.get('chartDataModelName');\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[0]\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n       //console.log(\"TEMP::: \" + _this.get('chartDataModelName'));\n        let zoomTempPoints = this.get('zoomDataPointsRightAxis');\n        var temp = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                //console.log(\"temp Points::: \" + zoomTempPoints);\n                return [\n                    moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        //console.log(temp);\n        zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        \n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n       //console.log(\"fullRangeChartLinesData::::::::::::::: 11\");    \n        const _this = this;\n        const fullRangeDataPoints = this.get('fullRangeDataPoints');\n        const fullRangeTimePoints = this.get('fullRangeTimePoints');\n        \n        let fullRangeTempPoints = this.get('zoomDataPointsRightAxis');\n        let anchorDistances = this.get('anchorDistances');\n\n        let fullRangeChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                   //console.log(\"fullReang:::::::::::::::::::\" + _this.GATEWAY_ENUM[_this.leftAxis])\n                    ////console.log(\"DataPoint::: \" + dataPoint.values[chartLineIndex]);\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[_this.GATEWAY_ENUM[_this.leftAxis]]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n\n        var temperature = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: fullRangeTempPoints.map(function(dataPoint, dataPointIndex) {\n                return [\n                    moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        return fullRangeChartLinesData;           \n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n       //console.log(\"chartDataModelName::::::::::::::: 5   \" + this.get('zoomChartData').query.model_name);    \n        //console.log(\"zoomChartData:\" + this.get('zoomChartData').query.model_name);\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n       //console.log(\"yAxisLegend::::::::::::::: 14\");    \n        let chartTitle = 'voltage'\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        //let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n    getTitleAndUnits: function(axis){\n        let axisValues = {\"Voltage\": \"Voltage, V\", \"RSSI\": \"RSSI, dBm\", \"Firmware\": \"Firmware Ver.\", \"Readings\": \"Readings\", \n                            \"Uptime\": 'Uptime - in Seconds.', \"Reconnection\": \"Reconnects\", \"Uploads\": \"Uploads\",\n                            \"Temperature\": \"Temperature,C\", \"var_1\": 9, \"var_2\": 9,  \"var_3\": 10}\n        // console.log(\"getTitleAndUnits::::::::::::::: \" + axisValues[axis]);\n        return axisValues[axis];\n    },\n    didInsertElement: function() {\n        \n       //console.log(\"didInsertElement::::::::::::::: 1\");    \n        const _this = this,\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n        const zoomChartLinesData = _this.get('zoomChartLinesData');\n        const fullRangeChartLinesData = _this.get('fullRangeChartLinesData');\n        \n        let zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg');\n        \n        let fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg');\n        let yAxisLegend = this.get('yAxisLegend');\n        let apiCallsPromises = yAxisLegend;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(false)\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showLegend(true)\n                .showDistX(true)\n                .noData('No usable data');\n\n            zoomChart.showYAxis = true;\n            zoomChart.y2Axis.showYAxis = true;\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        //console.log(\"D:::::::::: \" + d);\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        //console.log(nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d)));\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n               \n                let axis1Title = _this.getTitleAndUnits(_this.get('leftAxis'));\n                let axis2Title = _this.getTitleAndUnits(_this.get('rightAxis'));\n                \n                zoomChart.y1Axis\n                    .axisLabel(axis1Title)\n                    .axisLabelDistance(10);\n                \n                zoomChart.y2Axis\n                    .axisLabel(axis2Title)\n                    .axisLabelDistance(10)\n                ;\n                    \n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                zoomChart.y2Axis.tickFormat(d3.format(\".2f\"));\n                \n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                let legend = zoomChart.legend;\n                if(legend.controls){\n                    legend.controls.forEach(function(d, i) {\n                        d.disabled = false;\n                    });\n                }\n\n                //console.log(\"zoomChart::::\" + zoomChart.legend);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    //console.log(\"BRUSH END::::::::::::::::::::\");\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(false);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n                \n                function selectControls() {\n                    // console.log(\":::::::::::::::::::::: selectControls\");\n                    //zoomChart.chartData.forEach(function(series) { series.disabled = false; });                  \n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n                    tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    tooltipClass = 'other';\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                        \n                }\n\n                //     if (typeof(tooltipContent) === 'object') {\n                //         if (tooltipContent.type === 'Blast') {\n                //             tooltipClass = 'blast';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                //         } else if (tooltipContent.type === 'Seismic') {\n                //             tooltipClass = 'seismic';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                //         } else if (tooltipContent.type === 'BluVibe') {\n                //             tooltipClass = 'bluvibe';\n                //             eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                //         } else if (tooltipContent.type === 'Other') {\n                //             tooltipClass = 'other';\n                //         }\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                //                       '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                //                       eventSize\n                //         ;\n                //     } else {\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                //     }\n\n                //     return {\n                //         tooltipClass: tooltipClass,\n                //         tooltipText: tooltipText\n                //     };\n                // }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(\"VibeEventsArray:::\" + vibeEventsArray);\n                    //console.log(distXMouseMove);\n \n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                // d3.select('.nv-y2.nv-axis')\n                // .classed('nv-disabled', false)\n                // .attr('transform', 'translate(0,0)');\n        \n                nv.utils.windowResize(zoomChart.update);\n\n                // zoomChart.dispatch.on('stateChange', function(e) { \n                //     nv.log('New State:', JSON.stringify(e)); \n                // });\n                // zoomChart.state.dispatch.on('change', function(state){\n                //     nv.log('state', JSON.stringify(state));\n                // });\n\n               //console.log(\":::::::::::::::::::::::::::setData called\")\n                // _this.sendAction('setData',zoomChartLinesData);\n                // _this.sendAction('setChart',zoomChart);\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            //.showYAxis(true)\n        ;\n        \n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) {\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n        \n    }\n});\n","import { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    isVisibleCreateNewForm: false,\n    anchorDistances: computed('gateway', function() {\n        return [\"Firmware Version\", \"Voltage\",\"RSSI\",\"Carrier\",\"Readings\",\"Uptime in Seconds\",\"Reconnection Attempts\",\"Uploads\"]\n}),\n\ngetGatewayData: computed('gateway', 'gatewayData', function() {\n    let fields = [0,2,3,4,5,6,7,8];\n    let items = [];\n    // Perform filtering logic on initial data\n    const filteredData = this.get('gatewayData');\n    if (filteredData) {\n      filteredData.forEach(item => {\n        let values = [];\n        let firmware = item.values[0];\n        let voltage = item.values[2];\n        let rssi = item.values[3];\n        let carrier = item.values[4];\n        let readings = item.values[5];\n        let uptime = item.values[6];\n        let recon = item.values[7];\n        let uploads = item.values[8];\n        let temperature = item.values[item.values.length -2];\n        items.push({ id: item.id, values: {'firm_version':firmware,'voltage':voltage,'rssi': rssi, 'carrier': carrier, 'readings':readings,'uptime':uptime,'recon': recon, 'uploads': uploads, 'temperature': temperature}, \n        originalValue: item, save_values:{'firm_version':firmware,'voltage':voltage, 'rssi': rssi, 'carrier': carrier, 'readings':readings,'uptime':uptime,'recon': recon, 'uploads': uploads , 'temperature': temperature} });\n      });\n    }        \n    \n    return items;\n  }),\n\n    actions: {\n        updateProperty(propertyName, propertyValue) {\n          // console.log(\"Update property: \" + propertyValue);\n          this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n  selected: '', // Set the initial value to 'RSSI'\n\n  defaultSelected: computed('selected', function () {\n    const selected = this.selected;\n    // console.log('selected:::::::::::: ' + selected);\n    return selected === '' ? 'Voltage' : selected;\n  }),\n\n\n  actions: {\n    handleSelectedFieldChange(newValue) {\n      this.set('selected', newValue);\n    },\n  },\n});\n","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class LeftAxisDropdown extends Component.extend({}) {\n    @service router;\n    @service store;\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    actions = {\n        tGraph(id, modelName, params) {\n            // console.log(\"in LeftAxisDropdown:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\")\n            this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, modelName, params);\n        },\n    }\n}","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n  rightAxisField: '', // Set the initial value to 'RSSI'\n  routeValue: 'voltage-values',\n\n  defaultRightAxisField: computed('rightAxisField', function() {\n    const rightAxisField = this.rightAxisField;\n    // console.log('rightAxisField:::::::::::: ' + rightAxisField);\n    return rightAxisField === '' ? 'Temperature' : rightAxisField;\n  }),\n\n  getRouteValue: computed('selected', function () {\n    const selected = this.selected.toLowerCase();\n    // console.log('selected:::::::::::: ' + selected);\n    this.set('routeValue', selected + '-values');\n  }),\n\n  actions: {\n    handleRightAxisFieldChange(newValue) {\n      // console.log('handleRightAxisFieldChange:::::::::::: ' + newValue);    \n      this.set('rightAxisField', newValue);\n    }\n  }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nconst GATEWAY_ENUM = Object.freeze({\n    Firmware: 0,\n    Coordinator: 1,\n    Voltage: 2,\n    RSSI: 3,\n    carrier: 4,\n    Readings: 5,\n    Uptime: 6,\n    Reconnection: 7,\n    Uploads: 8,\n    var_1: 9,\n    var_2: 10,\n    var_3: 11,\n    Temperature: 12,\n});\n\nconst AXIS_LABELS = {\n    Voltage: \"Voltage (V)\",\n    RSSI: \"RSSI (dBm)\",\n    Firmware: \"Firmware Ver.\",\n    Coordinator: \"Coordinator\",\n    Readings: \"Readings\",\n    Uptime: \"Uptime (s)\",\n    Reconnection: \"Reconnects\",\n    Uploads: \"Uploads\",\n    Temperature: \"Temperature (\\u00B0C)\",\n    carrier: \"Carrier\",\n    var_1: \"Var 1\",\n    var_2: \"Var 2\",\n    var_3: \"Var 3\",\n};\n\n// Shared line-building helper for both main chart and overview chart.\nfunction buildGatewayLines(sourceData, tempData, leftAxis, rightAxis) {\n    if (!sourceData) return [];\n\n    const leftIndex = GATEWAY_ENUM[leftAxis];\n    const rightIndex = GATEWAY_ENUM[rightAxis];\n\n    const tempValues = [];\n    if (tempData) {\n        tempData.forEach(item => {\n            const vals = item.get('values');\n            tempValues.push(vals ? vals[0] : null);\n        });\n    }\n\n    const leftLine = {\n        key: leftAxis,\n        yAxis: 'y',\n        values: sourceData.map((item, i) => {\n            let val;\n            if (leftAxis === 'Temperature' && tempData) {\n                val = (i < tempValues.length) ? tempValues[i] : null;\n            } else {\n                val = item.values ? item.values[leftIndex] : null;\n            }\n            return { x: moment(item.get('id')).valueOf(), y: val };\n        })\n    };\n\n    const rightLine = {\n        key: rightAxis,\n        yAxis: 'y2',\n        values: sourceData.map((item, i) => {\n            let val;\n            if (rightAxis === 'Temperature' && tempData) {\n                val = (i < tempValues.length) ? tempValues[i] : null;\n            } else {\n                val = item.values ? item.values[rightIndex] : null;\n            }\n            return { x: moment(item.get('id')).valueOf(), y: val };\n        })\n    };\n\n    return [leftLine, rightLine];\n}\n\nexport default Component.extend({\n    store: service(),\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    leftAxis: computed(function() {\n        let leftAxis = this.attrs.getQueryParams('left_axis_field');\n        return leftAxis || 'Voltage';\n    }),\n\n    rightAxis: computed(function() {\n        let rightAxis = this.attrs.getQueryParams('right_axis_field');\n        return rightAxis || 'RSSI';\n    }),\n\n    // Main chart: sourced from zoomChartData so brushing refetches and adds detail.\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'leftAxis', 'rightAxis', function() {\n        return buildGatewayLines(this.get('zoomChartData'), this.get('zoomTempData'), this.get('leftAxis'), this.get('rightAxis'));\n    }),\n\n    // Overview chart: always the full history (doesn't refetch on brush).\n    overviewChartLinesData: computed('fullRangeChartData', 'leftAxis', 'rightAxis', function() {\n        return buildGatewayLines(this.get('fullRangeChartData'), null, this.get('leftAxis'), this.get('rightAxis'));\n    }),\n\n    didInsertElement() {\n        this._super(...arguments);\n        const linesData = this.get('fullRangeChartLinesData');\n        const leftAxis = this.get('leftAxis');\n        const rightAxis = this.get('rightAxis');\n\n        const y1Title = AXIS_LABELS[leftAxis] || leftAxis;\n        const y2Title = AXIS_LABELS[rightAxis] || rightAxis;\n\n        this._buildMainChart(linesData, y1Title, y2Title);\n        this._buildOverviewChart();\n    },\n\n    _buildMainChart(linesData, y1Title, y2Title) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        let xMin, xMax;\n        linesData.forEach(l => {\n            l.values.forEach(v => {\n                if (v.x != null && v.y != null) {\n                    if (xMin === undefined || v.x < xMin) xMin = v.x;\n                    if (xMax === undefined || v.x > xMax) xMax = v.x;\n                }\n            });\n        });\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        const label = typeof pt.y === 'number' ? pt.y.toFixed(2) : String(pt.y);\n                        ctx.fillText(label, element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: { display: true, text: y1Title },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => typeof v === 'number' ? v.toFixed(2) : v }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: y2Title },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => typeof v === 'number' ? v.toFixed(2) : v }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const linesData = this.get('overviewChartLinesData') || [];\n        if (!linesData.length) return;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        let xMin, xMax;\n        newLines.forEach(l => {\n            (l.values || []).forEach(v => {\n                if (v.x != null && v.y != null) {\n                    if (xMin === undefined || v.x < xMin) xMin = v.x;\n                    if (xMax === undefined || v.x > xMax) xMax = v.x;\n                }\n            });\n        });\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('overviewChartLinesData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const newLines = this.get('overviewChartLinesData') || [];\n\n        newLines.forEach((line) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                overviewChart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin = this.get('axis_min');\n        const axisMax = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    axisScaleObserver2: observer('autoAxis2', 'axis_min_2', 'axis_max_2', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis2 = this.get('autoAxis2');\n        const axisMin2 = this.get('axis_min_2');\n        const axisMax2 = this.get('axis_max_2');\n\n        if (autoAxis2) {\n            chart.options.scales.y2.min = undefined;\n            chart.options.scales.y2.max = undefined;\n        } else {\n            chart.options.scales.y2.min = (axisMin2 != null && axisMin2 !== '') ? parseFloat(axisMin2) : undefined;\n            chart.options.scales.y2.max = (axisMax2 != null && axisMax2 !== '') ? parseFloat(axisMax2) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'GatewayChart.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nfunction resetNewGatewayObject(_this) {\n    _this.set('newGatewayObject', {});\n    _this.set('name', null);\n    _this.set('installDate', null);\n}\n\nexport default class CreateBluGateGateway extends Component {\n\n    init() {\n        super.init(...arguments);\n        resetNewGatewayObject(this);\n    }\n\n    isAuthenticated = true;\n    newGatewayObject = {};\n    installDate = null;\n    authError = false;\n\n    actions = {\n        async createGateway(object){\n\n            let _this = this,\n            store = this.get('store'),\n            newGatewayObject = this.get('newGatewayObject');\n\n            this.set('isVisibleError',false);\n            this.set('duplicateError',false);\n            this.set('fieldError',false);\n\n            let error = false;\n\n            newGatewayObject.id = this.get('id');\n            newGatewayObject.installDate = this.get('installDate');\n            newGatewayObject.depth = this.get('depth');\n            newGatewayObject.active = true;\n\n            if(typeof newGatewayObject.id === 'undefined' || newGatewayObject.id === \"\") {\n                error = true;\n                this.set('fieldError',true);\n                this.set('isVisibleError',true);\n            }\n\n            if (this.get('installDate') != null) {\n                newGatewayObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            let newGateway = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newGateway = store.createRecord('gateway', newGatewayObject);\n                    newGateway.set('gatewayType', store.peekRecord('gateway-type', this.get('typeID')));\n                } catch (err) {\n                    this.set('isVisibleError',true);\n                    error = true;\n                    if(err.message.includes('has already been used')) {\n                        this.set('duplicateError',true);\n                        dup = true;\n                    }\n                }\n            }\n\n            this.set('authError', false);\n\n            if(!error) {\n                newGateway.save().then(function(results){\n                    if(results.id != null) {\n                        _this.get('submit')(results.id);\n                    } else {\n                        this.set('isVisibleError',true);\n                        error = true;\n                    }\n                }).catch(function(reason) {\n                    _this.set('isVisibleError',true);\n                    _this.set('authError',true);\n                });\n            }\n        },\n    }\n}\n","import { camelize } from '@ember/string';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default class EditInstrument extends Component.extend({\n    gatewayReadingsIntervals: null,\n\n    init(){\n        this._super(...arguments);\n    },\n    \n    store: service(),\n    isAuthenticated : true,\n    // selectedReadingIntervalID : null,\n    selectedModel : null,\n    editing : 0,\n    \n    getGatewayUploadIntervalID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayUploadInterval = gw.gatewayUploadInterval;\n        // console.log(\"gatewayUploadInterval::: \" + gatewayUploadInterval)\n        if(gatewayUploadInterval == null){\n            return 0;\n        }\n            return (gatewayUploadInterval.id).toString();\n    }),\n\n    getGatewayReadIntervalID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayReadInterval = gw.gatewayReadInterval;\n        // console.log(\"gatewayReadInterval::: \" + gatewayReadInterval)\n        if(gatewayReadInterval == null){\n            return 0;\n        }\n        return (gatewayReadInterval.id).toString();\n    }),\n    \n}){\n    @service router;\n    @service store;\n    isAuthenticated = true;\n    _this = this;\n\n    actions = {\n        //in order for this to work the id of the select element must be the same as the attribute name\n        setGatewayInterval(event) {\n            let gateway = this.get('gateway');\n            const selectedOptions = Array.from(event.target.selectedOptions);\n            //id of the newly selected interval\n            const selectedValue = parseInt(selectedOptions.map(option => option.value));    \n            //interval attribute name\n            const intervalType = event.target.id;\n            // when the record has no interval records associated with it, when you try to save an error is thrown.\n            // I avoid this by defaulting the interval to 5 minutes when the one is saved and the other is null.\n            let notSelected = intervalType == 'gatewayReadInterval' ? 'gatewayUploadInterval' : 'gatewayReadInterval';\n\n            this.store.findRecord('gateway-interval', selectedValue).then((interval) => { \n                let notSelectedIntervalValue = gateway[notSelected];\n                let group_name = intervalType == 'gatewayReadInterval' ? 'instrument_reading_interval' : 'upload_interval';\n                if(notSelectedIntervalValue == null){\n                    //if the non-selected interval is null I default it here.\n                    this.store.query('gateway-interval', {\n                        filter: {\n                          interval_value: 5,\n                          interval_group_name: group_name\n                        }\n                        }).then(function(results) {\n                            gateway.set(notSelected, results.get('firstObject'));\n                            gateway.set(intervalType, interval); // Set the related object as the new value of the attribute\n                \n                            gateway.save().then(() => {\n                                console.log('Gateway saved successfully!');\n                            }).catch((error) => {\n                                console.log('Error saving gateway:', error);\n                            });\n            \n                        }).catch(function(error) {\n                        console.log(\"Error Getting interval_upload object::: \" + error);\n                      });\n                } else {\n                    \n                    gateway.set(intervalType, interval); // Set the related object as the new value of the attribute\n                    gateway.save().then(() => {\n                        console.log('Gateway saved successfully!');\n                    }).catch((error) => {\n                        console.log('Error saving gateway:', error);\n                    });\n                }                    \n            });\n            \n        },\n                \n        updatePage(){\n            let store = this.get('store');\n            let gateway = this.get('gateway');\n            gateway.save();\n        },\n        viewData(id) {\n            this.get('router').transitionTo('raw-gateway-data', id);\n        },\n        tGraph(id) {\n            //console.log(\"Edit-gateway::: \" + id)\n            this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, 'voltage-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveGateway(){\n            const _this = this;\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/gateway\";\n                }\n            } else {\n                window.location.href = \"/gateway\";\n            }\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        // updateProperty(propertyName, propertyValue) {\n        //     this.set(propertyName, propertyValue);\n        // },\n    \n\n\n    }\n}\n\n\n\n// import Component from '@ember/component'; \n// export default Component.extend({ \n//     classNames: ['person-select'], \n//     people: null, \n//     selectedPerson: null, \n//     actions: { \n//         selectPerson(person) { \n//             this.set('selectedPerson', person); \n//         } \n//     } \n// });\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    temperaturePoints: [],\n    distXRiseUpAnimationDuration: 500,\n    // chartMetric: computed(function(){\n    // let chartMetric = this.attrs.getQueryParams('chart_type');\n    //     if(chartMetric == null){\n    //       return 'voltage';\n    //     }\n    //    //console.log(\"chartMetric::: \" + chartMetric);\n    //     return chartMetric;\n    // }),\n    leftAxis: computed(function(){\n        let leftAxis = this.attrs.getQueryParams('left_axis_field');\n        if(leftAxis == null){\n          leftAxis = 'Voltage';\n        }\n        return leftAxis;\n    }),      \n    rightAxis: computed(function(){\n        let rightAxis = this.attrs.getQueryParams('right_axis_field');\n        if(rightAxis == null){\n            rightAxis = 'RSSI';\n          }\n          return rightAxis;\n    }),\n\n    GATEWAY_ENUM: Object.freeze({\n        Firmware: 0,\n        Coordinator: 1,\n        Voltage: 2,\n        RSSI: 3,\n        carrier: 4, \n        Readings: 5, \n        Uptime: 6, \n        Reconnection: 7, \n        Uploads: 8, \n        var_1: 9, \n        var_2: 10, \n        var_3: 11,\n        Temperature: 12,        \n    }),\n\n    // zoomTempPoints: computed(function(){\n    //     // let right = this.get('zoomDataPointsRightAxis');\n    //     let temperaturePoints = [];\n    //     let zoomTempData = this.get(\"zoomTempData\");\n    //     zoomTempData.forEach(function(item, i){\n    //         var chartData = { values: item.get(\"values\") };\n    //         temperaturePoints.push(chartData.values[0]);\n    //         // let temperaturePoints = this.get('temperaturePoints').push(chartData.values);\n    //     });\n        \n    //     return temperaturePoints; //chartData;\n    // }),\n    zoomDataPointsLeftAxis: computed(function(){\n        \n        let zoomChartData = this.get(\"zoomChartData\");\n        console.log(\"this.leftAxis\");\n        console.log(this.leftAxis)\n        let leftAxisIndex = this.GATEWAY_ENUM[this.leftAxis]\n        \n        let zoomLeftAxis = zoomChartData.map(function (item, i){\n            return item.values[leftAxisIndex];            \n        });\n        // console.log(JSON.stringify(zoomLeftAxis))\n        return zoomLeftAxis;\n    }),\n    \n    zoomDataPointsRightAxis: computed(function(){\n        //console.log(\"zoomDataPointsRightAxis::::::::::::::: 8\");\n        let zoomRightAxis = null;\n        if(this.rightAxis != null){\n            let zoomChartData = this.get(\"zoomChartData\");\n            let rightAxisIndex = this.GATEWAY_ENUM[this.rightAxis]        \n            zoomRightAxis = zoomChartData.map(function (item, i){\n                return item.values[rightAxisIndex];            \n            });\n        }\n        ////console.log(\"zoomRightAxis::::::: \" + JSON.stringify(zoomRightAxis));\n        // console.log(JSON.stringify(zoomRightAxis))\n        return zoomRightAxis;\n\n    }),\n\n    zoomDataPoints: computed('zoomChartData', function () {\n       //console.log(\"zoomDataPoints::::::::::::::: 4 and 6 \" + this.get(\"chartDataValueName\") );\n        let left = this.get('zoomDataPointsLeftAxis');\n        \n        return left;\n    }),\n\n    fullRangeDataPoints: computed('fullRangeChartData', function () {\n        let fullRangePoints = null;\n        let itemHolder = {};\n\n        fullRangePoints = this.get('fullRangeChartData');\n        fullRangePoints.map(function (item, i){\n            let itemHolder = { values: item.get(\"values\") };\n            return itemHolder;\n        });\n        \n        return fullRangePoints;\n        \n    }),\n\n/*     \n    fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n       //console.log(\"zoomTimePoints::::::::::::::: 9\");    \n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n       //console.log(\"fullRangeTimePoints::::::::::::::: 13\");\n        return item.get('id');\n    }),\n    \n    anchorDistances: computed('gateway', 'fullRangeChartData', function() {\n        let leftAxis = this.get('leftAxis'); \n       //console.log(\"anchorDistances::::::::::::::: 10   ::\" + leftAxis);\n        return [leftAxis];\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n       //console.log(\"zoomChartLinesData::::::::::::::: 2\");    \n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n        let tempPoints = this.get('zoomTempPoints');\n            \n        // console.log(\"zoomTempPoints::: \" + JSON.stringify(tempPoints));\n        // console.log(\"zoomTempPoints::: \" + this.get('temperaturePoints'));\n        \n        let anchorDistances = this.get('anchorDistances');\n        let zoomChartLinesData = [];\n\n        var mName = _this.get('chartDataModelName');\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[0]\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n       //console.log(\"TEMP::: \" + _this.get('chartDataModelName'));\n        let zoomTempPoints = this.get('zoomDataPointsRightAxis');\n        var temp = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                //console.log(\"temp Points::: \" + zoomTempPoints);\n                return [\n                    moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        //console.log(temp);\n        zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        \n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n       //console.log(\"fullRangeChartLinesData::::::::::::::: 11\");    \n        const _this = this;\n        const fullRangeDataPoints = this.get('fullRangeDataPoints');\n        const fullRangeTimePoints = this.get('fullRangeTimePoints');\n        \n        let fullRangeTempPoints = this.get('zoomDataPointsRightAxis');\n        let anchorDistances = this.get('anchorDistances');\n\n        let fullRangeChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                   //console.log(\"fullReang:::::::::::::::::::\" + _this.GATEWAY_ENUM[_this.leftAxis])\n                    ////console.log(\"DataPoint::: \" + dataPoint.values[chartLineIndex]);\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[_this.GATEWAY_ENUM[_this.leftAxis]]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n\n        var temperature = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: fullRangeTempPoints.map(function(dataPoint, dataPointIndex) {\n                return [\n                    moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        return fullRangeChartLinesData;           \n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n       //console.log(\"chartDataModelName::::::::::::::: 5   \" + this.get('zoomChartData').query.model_name);    \n        //console.log(\"zoomChartData:\" + this.get('zoomChartData').query.model_name);\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n       //console.log(\"yAxisLegend::::::::::::::: 14\");    \n        let chartTitle = 'voltage'\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        //let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n    getTitleAndUnits: function(axis){\n        let axisValues = {\"Voltage\": \"Voltage, V\", \"RSSI\": \"RSSI, dBm\", \"Firmware\": \"Firmware Ver.\", \"Readings\": \"Readings\", \n                            \"Uptime\": 'Uptime - in Seconds.', \"Reconnection\": \"Reconnects\", \"Uploads\": \"Uploads\",\n                            \"Temperature\": \"Temperature,C\", \"var_1\": 9, \"var_2\": 9,  \"var_3\": 10}\n        // console.log(\"getTitleAndUnits::::::::::::::: \" + axisValues[axis]);\n        return axisValues[axis];\n    },\n    didInsertElement: function() {\n        \n       //console.log(\"didInsertElement::::::::::::::: 1\");    \n        const _this = this,\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n        const zoomChartLinesData = _this.get('zoomChartLinesData');\n        const fullRangeChartLinesData = _this.get('fullRangeChartLinesData');\n        \n        let zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg');\n        \n        let fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg');\n        let yAxisLegend = this.get('yAxisLegend');\n        let apiCallsPromises = yAxisLegend;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(false)\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showLegend(true)\n                .showDistX(true)\n                .noData('No usable data');\n\n            zoomChart.showYAxis = true;\n            zoomChart.y2Axis.showYAxis = true;\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        //console.log(\"D:::::::::: \" + d);\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        //console.log(nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d)));\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n               \n                let axis1Title = _this.getTitleAndUnits(_this.get('leftAxis'));\n                let axis2Title = _this.getTitleAndUnits(_this.get('rightAxis'));\n                \n                zoomChart.y1Axis\n                    .axisLabel(axis1Title)\n                    .axisLabelDistance(10);\n                \n                zoomChart.y2Axis\n                    .axisLabel(axis2Title)\n                    .axisLabelDistance(10)\n                ;\n                    \n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                zoomChart.y2Axis.tickFormat(d3.format(\".2f\"));\n                \n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                let legend = zoomChart.legend;\n                if(legend.controls){\n                    legend.controls.forEach(function(d, i) {\n                        d.disabled = false;\n                    });\n                }\n\n                //console.log(\"zoomChart::::\" + zoomChart.legend);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    //console.log(\"BRUSH END::::::::::::::::::::\");\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(false);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n                \n                function selectControls() {\n                    // console.log(\":::::::::::::::::::::: selectControls\");\n                    //zoomChart.chartData.forEach(function(series) { series.disabled = false; });                  \n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n                    tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    tooltipClass = 'other';\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                        \n                }\n\n                //     if (typeof(tooltipContent) === 'object') {\n                //         if (tooltipContent.type === 'Blast') {\n                //             tooltipClass = 'blast';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                //         } else if (tooltipContent.type === 'Seismic') {\n                //             tooltipClass = 'seismic';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                //         } else if (tooltipContent.type === 'BluVibe') {\n                //             tooltipClass = 'bluvibe';\n                //             eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                //         } else if (tooltipContent.type === 'Other') {\n                //             tooltipClass = 'other';\n                //         }\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                //                       '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                //                       eventSize\n                //         ;\n                //     } else {\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                //     }\n\n                //     return {\n                //         tooltipClass: tooltipClass,\n                //         tooltipText: tooltipText\n                //     };\n                // }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(\"VibeEventsArray:::\" + vibeEventsArray);\n                    //console.log(distXMouseMove);\n \n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                // d3.select('.nv-y2.nv-axis')\n                // .classed('nv-disabled', false)\n                // .attr('transform', 'translate(0,0)');\n        \n                nv.utils.windowResize(zoomChart.update);\n\n                // zoomChart.dispatch.on('stateChange', function(e) { \n                //     nv.log('New State:', JSON.stringify(e)); \n                // });\n                // zoomChart.state.dispatch.on('change', function(state){\n                //     nv.log('state', JSON.stringify(state));\n                // });\n\n               //console.log(\":::::::::::::::::::::::::::setData called\")\n                // _this.sendAction('setData',zoomChartLinesData);\n                // _this.sendAction('setChart',zoomChart);\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            //.showYAxis(true)\n        ;\n        \n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) {\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n        \n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    temperaturePoints: [],\n    distXRiseUpAnimationDuration: 500,\n    // chartMetric: computed(function(){\n    // let chartMetric = this.attrs.getQueryParams('chart_type');\n    //     if(chartMetric == null){\n    //       return 'voltage';\n    //     }\n    //    //console.log(\"chartMetric::: \" + chartMetric);\n    //     return chartMetric;\n    // }),\n    leftAxis: computed(function(){\n        let leftAxis = this.attrs.getQueryParams('left_axis_field');\n        if(leftAxis == null){\n          leftAxis = 'Voltage';\n        }\n        return leftAxis;\n    }),      \n    rightAxis: computed(function(){\n        let rightAxis = this.attrs.getQueryParams('right_axis_field');\n        if(rightAxis == null){\n            rightAxis = 'RSSI';\n          }\n          return rightAxis;\n    }),\n    GATEWAY_ENUM: Object.freeze({\n        Firmware: 0,\n        Voltage: 1,\n        RSSI: 2,\n        carrier: 3, \n        Readings: 4, \n        Uptime: 5, \n        Reconnection: 6, \n        Uploads: 7, \n        Temperature:8,\n        var_1: 9, \n        var_2: 9, \n        var_3: 10,\n    }),\n\n    zoomTempPoints: computed(function(){\n        // let right = this.get('zoomDataPointsRightAxis');\n        let temperaturePoints = [];\n        let zoomTempData = this.get(\"zoomTempData\");\n        zoomTempData.forEach(function(item, i){\n            var chartData = { values: item.get(\"values\") };\n            temperaturePoints.push(chartData.values[0]);\n            // let temperaturePoints = this.get('temperaturePoints').push(chartData.values);\n        });\n        // console.log(\"zoomTempPoints::::::::::::::: 7\");    \n        // var chartData = { values: item.get(\"values\") };\n        //  = this.get('temperaturePoints').push(chartData.values);\n        \n        return temperaturePoints; //chartData;\n    }),\n    zoomDataPointsLeftAxis: computed(function(){\n        \n        let zoomChartData = this.get(\"zoomChartData\");\n        let leftAxisIndex = this.GATEWAY_ENUM[this.leftAxis]\n        //TODO: fix this TA.  Hack because we added temperature at the last minute.\n        if(this.leftAxis == 'Temperature'){\n            // console.log(\"zoomDataPointsLeftAxis::::::::::::::: \" + this.get(\"temperaturePoints\"));\n            return this.get(\"zoomTempPoints\");\n        }\n        \n        let zoomLeftAxis = zoomChartData.map(function (item, i){\n            return item.values[leftAxisIndex];            \n        });\n        return zoomLeftAxis;\n    }),\n    zoomDataPointsRightAxis: computed(function(){\n       //console.log(\"zoomDataPointsRightAxis::::::::::::::: 8\");\n        let zoomRightAxis = null;\n        if(this.rightAxis != null && this.rightAxis != 'Temperature'){\n            let zoomChartData = this.get(\"zoomChartData\");\n            let rightAxisIndex = this.GATEWAY_ENUM[this.rightAxis]        \n            zoomRightAxis = zoomChartData.map(function (item, i){\n                return item.values[rightAxisIndex];            \n            });\n        }\n        if (this.rightAxis == 'Temperature'){\n            zoomRightAxis = this.get(\"zoomTempPoints\");\n        }\n        ////console.log(\"zoomRightAxis::::::: \" + JSON.stringify(zoomRightAxis));\n        return zoomRightAxis;\n\n    }),\n    zoomDataPoints: computed('zoomChartData', function () {\n        \n       //console.log(\"zoomDataPoints::::::::::::::: 4 and 6 \" + this.get(\"chartDataValueName\") );\n        let left = this.get('zoomDataPointsLeftAxis');\n        \n        return left;\n    }),\n\n    fullRangeDataPoints: computed('fullRangeChartData', function () {\n        let fullRangePoints = null;\n        let itemHolder = {};\n\n        if(this.leftAxis != 'Temperature'){\n            fullRangePoints = this.get('fullRangeChartData');\n            fullRangePoints.map(function (item, i){\n                let itemHolder = { values: item.get(\"values\") };\n                return itemHolder;\n            });\n        } else {\n            itemHolder.values = [];\n            fullRangePoints = this.get(\"temperaturePoints\");\n            if(this.leftAxis == 'Temperature'){\n                fullRangePoints.forEach(function(item){\n                    itemHolder.values.push(item[0]);\n                });\n            }\n            fullRangePoints = itemHolder;\n        }\n        return fullRangePoints;\n        \n    }),\n\n/*     \n    fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n       //console.log(\"zoomTimePoints::::::::::::::: 9\");    \n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n       //console.log(\"fullRangeTimePoints::::::::::::::: 13\");\n        return item.get('id');\n    }),\n    \n    anchorDistances: computed('gateway', 'fullRangeChartData', function() {\n        let leftAxis = this.get('leftAxis'); \n       //console.log(\"anchorDistances::::::::::::::: 10   ::\" + leftAxis);\n        return [leftAxis];\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n       //console.log(\"zoomChartLinesData::::::::::::::: 2\");    \n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n        let tempPoints = this.get('zoomTempPoints');\n            \n        // console.log(\"zoomTempPoints::: \" + JSON.stringify(tempPoints));\n        // console.log(\"zoomTempPoints::: \" + this.get('temperaturePoints'));\n        \n        let anchorDistances = this.get('anchorDistances');\n        let zoomChartLinesData = [];\n\n        var mName = _this.get('chartDataModelName');\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[0]\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n       //console.log(\"TEMP::: \" + _this.get('chartDataModelName'));\n        let zoomTempPoints = this.get('zoomDataPointsRightAxis');\n        var temp = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                //console.log(\"temp Points::: \" + zoomTempPoints);\n                return [\n                    moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        //console.log(temp);\n        zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        \n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n       //console.log(\"fullRangeChartLinesData::::::::::::::: 11\");    \n        const _this = this;\n        const fullRangeDataPoints = this.get('fullRangeDataPoints');\n        const fullRangeTimePoints = this.get('fullRangeTimePoints');\n        \n        let fullRangeTempPoints = this.get('zoomDataPointsRightAxis');\n        let anchorDistances = this.get('anchorDistances');\n\n        let fullRangeChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                   //console.log(\"fullReang:::::::::::::::::::\" + _this.GATEWAY_ENUM[_this.leftAxis])\n                    ////console.log(\"DataPoint::: \" + dataPoint.values[chartLineIndex]);\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[_this.GATEWAY_ENUM[_this.leftAxis]]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n\n        var temperature = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: fullRangeTempPoints.map(function(dataPoint, dataPointIndex) {\n                //console.log(\"temp Points::: \" + zoomTempPoints);\n                return [\n                    moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        // fullRangeChartLinesData.push(temperature); //#TODO: Add Temp Points\n        return fullRangeChartLinesData;           \n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n       //console.log(\"chartDataModelName::::::::::::::: 5   \" + this.get('zoomChartData').query.model_name);    \n        //console.log(\"zoomChartData:\" + this.get('zoomChartData').query.model_name);\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n       //console.log(\"yAxisLegend::::::::::::::: 14\");    \n        let chartTitle = 'voltage'\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        //let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n    getTitleAndUnits: function(axis){\n        let axisValues = {\"Voltage\": \"Voltage, V\", \"RSSI\": \"RSSI, dBm\", \"Firmware\": \"Firmware Ver.\", \"Readings\": \"Readings\", \n                            \"Uptime\": 'Uptime - in Seconds.', \"Reconnection\": \"Reconnects\", \"Uploads\": \"Uploads\",\n                            \"Temperature\": \"Temperature,C\", \"var_1\": 9, \"var_2\": 9,  \"var_3\": 10}\n        // console.log(\"getTitleAndUnits::::::::::::::: \" + axisValues[axis]);\n        return axisValues[axis];\n    },\n    didInsertElement: function() {\n        \n       //console.log(\"didInsertElement::::::::::::::: 1\");    \n        const _this = this,\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n        const zoomChartLinesData = _this.get('zoomChartLinesData');\n        const fullRangeChartLinesData = _this.get('fullRangeChartLinesData');\n        \n        let zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg');\n        \n        let fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg');\n        let yAxisLegend = this.get('yAxisLegend');\n        let apiCallsPromises = yAxisLegend;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(false)\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showLegend(true)\n                .showDistX(true)\n                .noData('No usable data');\n\n            zoomChart.showYAxis = true;\n            zoomChart.y2Axis.showYAxis = true;\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        //console.log(\"D:::::::::: \" + d);\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        //console.log(nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d)));\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n               \n                let axis1Title = _this.getTitleAndUnits(_this.get('leftAxis'));\n                let axis2Title = _this.getTitleAndUnits(_this.get('rightAxis'));\n                \n                zoomChart.y1Axis\n                    .axisLabel(axis1Title)\n                    .axisLabelDistance(10);\n                \n                zoomChart.y2Axis\n                    .axisLabel(axis2Title)\n                    .axisLabelDistance(10)\n                ;\n                    \n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                zoomChart.y2Axis.tickFormat(d3.format(\".2f\"));\n                \n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                let legend = zoomChart.legend;\n                if(legend.controls){\n                    legend.controls.forEach(function(d, i) {\n                        d.disabled = false;\n                    });\n                }\n\n                //console.log(\"zoomChart::::\" + zoomChart.legend);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    //console.log(\"BRUSH END::::::::::::::::::::\");\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(false);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n                \n                function selectControls() {\n                    // console.log(\":::::::::::::::::::::: selectControls\");\n                    //zoomChart.chartData.forEach(function(series) { series.disabled = false; });                  \n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n                    tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    tooltipClass = 'other';\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                        \n                }\n\n                //     if (typeof(tooltipContent) === 'object') {\n                //         if (tooltipContent.type === 'Blast') {\n                //             tooltipClass = 'blast';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                //         } else if (tooltipContent.type === 'Seismic') {\n                //             tooltipClass = 'seismic';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                //         } else if (tooltipContent.type === 'BluVibe') {\n                //             tooltipClass = 'bluvibe';\n                //             eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                //         } else if (tooltipContent.type === 'Other') {\n                //             tooltipClass = 'other';\n                //         }\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                //                       '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                //                       eventSize\n                //         ;\n                //     } else {\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                //     }\n\n                //     return {\n                //         tooltipClass: tooltipClass,\n                //         tooltipText: tooltipText\n                //     };\n                // }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(\"VibeEventsArray:::\" + vibeEventsArray);\n                    //console.log(distXMouseMove);\n \n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                // d3.select('.nv-y2.nv-axis')\n                // .classed('nv-disabled', false)\n                // .attr('transform', 'translate(0,0)');\n        \n                nv.utils.windowResize(zoomChart.update);\n\n                // zoomChart.dispatch.on('stateChange', function(e) { \n                //     nv.log('New State:', JSON.stringify(e)); \n                // });\n                // zoomChart.state.dispatch.on('change', function(state){\n                //     nv.log('state', JSON.stringify(state));\n                // });\n\n               //console.log(\":::::::::::::::::::::::::::setData called\")\n                // _this.sendAction('setData',zoomChartLinesData);\n                // _this.sendAction('setChart',zoomChart);\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            //.showYAxis(true)\n        ;\n        \n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) {\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n        \n    }\n});\n","import { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    isVisibleCreateNewForm: false,\n    anchorDistances: computed('gateway', function() {\n        return [\"Firmware Version\", \"Voltage\",\"RSSI\",\"Carrier\",\"Readings\",\"Uptime in Seconds\",\"Reconnection Attempts\",\"Uploads\"]\n}),\n\ngetGatewayData: computed('gateway', 'gatewayData', function() {\n    let fields = [0,2,3,4,5,6,7,8];\n    let items = [];\n    // Perform filtering logic on initial data\n    const filteredData = this.get('gatewayData');\n    if (filteredData) {\n      filteredData.forEach(item => {\n        let values = [];\n        let firmware = item.values[0];\n        console.log(JSON.stringify(firmware))\n        let voltage = item.values[2];\n        let rssi = item.values[3];\n        let carrier = item.values[4];\n        let readings = item.values[5];\n        let uptime = item.values[6];\n        let recon = item.values[7];\n        let uploads = item.values[8];\n        let temperature = item.values[item.values.length -2];\n        items.push({ id: item.id, values: {'firm_version':firmware,'voltage':voltage,'rssi': rssi, 'carrier': carrier, 'readings':readings,'uptime':uptime,'recon': recon, 'uploads': uploads, 'temperature': temperature}, \n        originalValue: item, save_values:{'firm_version':firmware,'voltage':voltage, 'rssi': rssi, 'carrier': carrier, 'readings':readings,'uptime':uptime,'recon': recon, 'uploads': uploads , 'temperature': temperature} });\n      });\n    }        \n    \n    return items;\n  }),\n\n    actions: {\n        updateProperty(propertyName, propertyValue) {\n          // console.log(\"Update property: \" + propertyValue);\n          this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class LeftAxisDropdown extends Component.extend({}) {\n    @service router;\n    @service store;\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    actions = {\n        tGraph(id, modelName, params) {\n            // console.log(\"in LeftAxisDropdown:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\")\n            this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, modelName, params);\n        },\n    }\n}","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport EmberObject from '@ember/object';\nimport Component from '@ember/component';\n\nexport default class TemporalGatewayRightAxisDropdown extends Component.extend({\n}) {\n    @service router;\n    @service store;\n\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    selectedOption = null;\n    \n    actions = {\n        setSelection(selected) {\n            this.set('selectedOption', selected)\n            // console.log(this.get('selectedOption'))\n        },\n    }\n}","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nfunction resetNewGatewayObject(_this) {\n    // console.log(\"NewGatewayObject::: \");\n    _this.set('newGatewayObject', {});\n    _this.set('name', null);\n    _this.set('installDate', null);\n\n}\n\nexport default class CreateBluCellGateway extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewGatewayObject(this);\n    }\n\n    isAuthenticated = true;\n    newGatewayObject = {};\n    installDate = null;\n    authError = false;\n\n    actions = {\n        async createGateway(object){\n\n            let _this = this,\n            store = this.get('store'),\n            newGatewayObject = this.get('newGatewayObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newGatewayObject.id = this.get('id');\n            newGatewayObject.installDate = this.get('installDate');\n            newGatewayObject.depth = this.get('depth');\n            newGatewayObject.active = true;\n\n            let interval_upload = await this.store.query('gateway-interval', {\n                filter: { interval_value: 5, interval_group_name: 'upload_interval' }\n            }).then(r => r.at(0)).catch(() => null);\n\n            let interval_read = await this.store.query('gateway-interval', {\n                filter: { interval_value: 5, interval_group_name: 'instrument_reading_interval' }\n            }).then(r => r.at(0)).catch(() => null);\n\n            if(typeof newGatewayObject.id === 'undefined' || newGatewayObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n\n            if (this.get('installDate') != null) {\n                newGatewayObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            let newGateway = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newGateway = store.createRecord('gateway', newGatewayObject);\n                    newGateway.set('gatewayType', store.peekRecord('gateway-type', this.get('typeID')));\n                    newGateway.set('gatewayUploadInterval', interval_upload);\n                    newGateway.set('gatewayReadInterval', interval_read);\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    error = true;\n                    if(err.message.includes('has already been used')) {\n                        this.setError('duplicateError',true);\n                        dup = true;\n                    }\n                }\n            }\n\n            this.setError('authError', false);\n\n            if(!error) {\n                newGateway.save().then(function(results){\n                    // console.log(dup);\n                    if(results.id != null) {\n                        _this.get('submit')(results.id);\n                    } else {\n                        this.setError('isVisibleError',true);\n                        error = true;\n                    }\n                }).catch(function(reason) {\n                    _this.setError('isVisibleError',true);\n                    _this.setError('authError',true);\n                }); \n            } \n        },\n        // bulbChanged(object)\n        // {\n        //     this.set(\"bulbed\",document.getElementById('newInstrumentObjectBulbed').checked);\n        // },\n        // plateChanged(object)\n        // {\n        //     this.set(\"plated\",document.getElementById('newInstrumentObjectPlated').checked);\n        // }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let gatewayValueObjectValues = _this.get('gatewayValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(gatewayValueObjectValues).forEach(function(key,index) {\n        gatewayValueObjectValues[key] = null;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n\n    newGatewayValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newGatewayValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n\n    gatewayValueObjectValues: computed('anchorDistances', function() {\n        let gatewayValueObjectValues = [];\n        for (let i = 0; i <= this.get('anchorDistances').length - 1; i++) {\n            gatewayValueObjectValues[i] = 0;\n        }\n        return gatewayValueObjectValues;\n    }),\n\n    newGatewayValueObjectValues: computed('gatewayValueObjectValues', function() {\n        let gatewayValueObjectValues = [];\n        for (let i = 0; i <= this.get('gatewayValueObjectValues').length - 1; i++) {\n            gatewayValueObjectValues[i] = 0;\n        }\n        return gatewayValueObjectValues;\n    }),\n\n    actions: {\n        saveNew(){\n            //  console.log(\"saveNew\");\n            let _this = this,\n                store = this.get('store'),\n                newGatewayValuesObject = this.get('newGatewayValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                gatewayValues = this.get('gatewayValues'),\n                temperatureValues = this.get('temperatureValues');\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-gateway-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('gatewayId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newGatewayValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newGatewayValuesObject.values = Object.values(this.get('newGatewayValueObjectValues'));\n\n            const newGatewayValues = store.createRecord('gateway-value', newGatewayValuesObject);\n            // save new gateway-value to DB\n            const savedGatewayValuesObject = newGatewayValues.save({adapterOptions: this.get('gatewayId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if gateway-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //gatewayValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n\n            })\n            .catch(function(reason){\n                console.log(reason);\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import { camelize } from '@ember/string';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default class EditInstrument extends Component.extend({\n    gatewayReadingsIntervals: null,\n\n    init(){\n        this._super(...arguments);\n    },\n    \n    store: service(),\n    isAuthenticated : true,\n    // selectedReadingIntervalID : null,\n    selectedModel : null,\n    editing : 0,\n    \n    getGatewayUploadIntervalID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayUploadInterval = gw.gatewayUploadInterval;\n        // console.log(\"gatewayUploadInterval::: \" + gatewayUploadInterval)\n        if(gatewayUploadInterval == null){\n            return 0;\n        }\n            return (gatewayUploadInterval.id).toString();\n    }),\n\n    getGatewayReadIntervalID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayReadInterval = gw.gatewayReadInterval;\n        // console.log(\"gatewayReadInterval::: \" + gatewayReadInterval)\n        if(gatewayReadInterval == null){\n            return 0;\n        }\n        return (gatewayReadInterval.id).toString();\n    }),\n    \n}){\n    @service router;\n    @service store;\n    isAuthenticated = true;\n    _this = this;\n\n    actions = {\n        //in order for this to work the id of the select element must be the same as the attribute name\n        setGatewayInterval(event) {\n            let gateway = this.get('gateway');\n            const selectedOptions = Array.from(event.target.selectedOptions);\n            //id of the newly selected interval\n            const selectedValue = parseInt(selectedOptions.map(option => option.value));    \n            //interval attribute name\n            const intervalType = event.target.id;\n            // when the record has no interval records associated with it, when you try to save an error is thrown.\n            // I avoid this by defaulting the interval to 5 minutes when the one is saved and the other is null.\n            let notSelected = intervalType == 'gatewayReadInterval' ? 'gatewayUploadInterval' : 'gatewayReadInterval';\n\n            this.store.findRecord('gateway-interval', selectedValue).then((interval) => { \n                let notSelectedIntervalValue = gateway[notSelected];\n                let group_name = intervalType == 'gatewayReadInterval' ? 'instrument_reading_interval' : 'upload_interval';\n                if(notSelectedIntervalValue == null){\n                    //if the non-selected interval is null I default it here.\n                    this.store.query('gateway-interval', {\n                        filter: {\n                          interval_value: 5,\n                          interval_group_name: group_name\n                        }\n                        }).then(function(results) {\n                            gateway.set(notSelected, results.get('firstObject'));\n                            gateway.set(intervalType, interval); // Set the related object as the new value of the attribute\n                \n                            gateway.save().then(() => {\n                                console.log('Gateway saved successfully!');\n                            }).catch((error) => {\n                                console.log('Error saving gateway:', error);\n                            });\n            \n                        }).catch(function(error) {\n                        console.log(\"Error Getting interval_upload object::: \" + error);\n                      });\n                } else {\n                    \n                    gateway.set(intervalType, interval); // Set the related object as the new value of the attribute\n                    gateway.save().then(() => {\n                        console.log('Gateway saved successfully!');\n                    }).catch((error) => {\n                        console.log('Error saving gateway:', error);\n                    });\n                }                    \n            });\n            \n        },\n                \n        updatePage(){\n            let store = this.get('store');\n            let gateway = this.get('gateway');\n            gateway.save();\n        },\n        viewData(id) {\n            this.get('router').transitionTo('raw-gateway-data', id);\n        },\n        tGraph(id) {\n            //console.log(\"Edit-gateway::: \" + id)\n            this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, 'voltage-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveGateway(){\n            const _this = this;\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/gateway\";\n                }\n            } else {\n                window.location.href = \"/gateway\";\n            }\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        // updateProperty(propertyName, propertyValue) {\n        //     this.set(propertyName, propertyValue);\n        // },\n    \n\n\n    }\n}\n\n\n\n// import Component from '@ember/component'; \n// export default Component.extend({ \n//     classNames: ['person-select'], \n//     people: null, \n//     selectedPerson: null, \n//     actions: { \n//         selectPerson(person) { \n//             this.set('selectedPerson', person); \n//         } \n//     } \n// });\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    temperaturePoints: [],\n    distXRiseUpAnimationDuration: 500,\n    // chartMetric: computed(function(){\n    // let chartMetric = this.attrs.getQueryParams('chart_type');\n    //     if(chartMetric == null){\n    //       return 'voltage';\n    //     }\n    //    //console.log(\"chartMetric::: \" + chartMetric);\n    //     return chartMetric;\n    // }),\n    leftAxis: computed(function(){\n        let leftAxis = this.attrs.getQueryParams('left_axis_field');\n        if(leftAxis == null){\n          leftAxis = 'Voltage';\n        }\n        return leftAxis;\n    }),      \n    rightAxis: computed(function(){\n        let rightAxis = this.attrs.getQueryParams('right_axis_field');\n        if(rightAxis == null){\n            rightAxis = 'RSSI';\n          }\n          return rightAxis;\n    }),\n\n    GATEWAY_ENUM: Object.freeze({\n        Firmware: 0,\n        Coordinator: 1,\n        Voltage: 2,\n        RSSI: 3,\n        carrier: 4, \n        Readings: 5, \n        Uptime: 6, \n        Reconnection: 7, \n        Uploads: 8, \n        var_1: 9, \n        var_2: 10, \n        var_3: 11,\n        Temperature: 12,        \n    }),\n\n    // zoomTempPoints: computed(function(){\n    //     // let right = this.get('zoomDataPointsRightAxis');\n    //     let temperaturePoints = [];\n    //     let zoomTempData = this.get(\"zoomTempData\");\n    //     zoomTempData.forEach(function(item, i){\n    //         var chartData = { values: item.get(\"values\") };\n    //         temperaturePoints.push(chartData.values[0]);\n    //         // let temperaturePoints = this.get('temperaturePoints').push(chartData.values);\n    //     });\n        \n    //     return temperaturePoints; //chartData;\n    // }),\n    zoomDataPointsLeftAxis: computed(function(){\n        \n        let zoomChartData = this.get(\"zoomChartData\");\n        let leftAxisIndex = this.GATEWAY_ENUM[this.leftAxis]\n        \n        let zoomLeftAxis = zoomChartData.map(function (item, i){\n            return item.values[leftAxisIndex];            \n        });\n        // console.log(JSON.stringify(zoomLeftAxis))\n        return zoomLeftAxis;\n    }),\n    \n    zoomDataPointsRightAxis: computed(function(){\n        //console.log(\"zoomDataPointsRightAxis::::::::::::::: 8\");\n        let zoomRightAxis = null;\n        if(this.rightAxis != null){\n            let zoomChartData = this.get(\"zoomChartData\");\n            let rightAxisIndex = this.GATEWAY_ENUM[this.rightAxis]        \n            zoomRightAxis = zoomChartData.map(function (item, i){\n                return item.values[rightAxisIndex];            \n            });\n        }\n        ////console.log(\"zoomRightAxis::::::: \" + JSON.stringify(zoomRightAxis));\n        // console.log(JSON.stringify(zoomRightAxis))\n        return zoomRightAxis;\n\n    }),\n\n    zoomDataPoints: computed('zoomChartData', function () {\n       //console.log(\"zoomDataPoints::::::::::::::: 4 and 6 \" + this.get(\"chartDataValueName\") );\n        let left = this.get('zoomDataPointsLeftAxis');\n        \n        return left;\n    }),\n\n    fullRangeDataPoints: computed('fullRangeChartData', function () {\n        let fullRangePoints = null;\n        let itemHolder = {};\n\n        fullRangePoints = this.get('fullRangeChartData');\n        fullRangePoints.map(function (item, i){\n            let itemHolder = { values: item.get(\"values\") };\n            return itemHolder;\n        });\n        \n        return fullRangePoints;\n        \n    }),\n\n/*     \n    fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n       //console.log(\"zoomTimePoints::::::::::::::: 9\");    \n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n       //console.log(\"fullRangeTimePoints::::::::::::::: 13\");\n        return item.get('id');\n    }),\n    \n    anchorDistances: computed('gateway', 'fullRangeChartData', function() {\n        let leftAxis = this.get('leftAxis'); \n       //console.log(\"anchorDistances::::::::::::::: 10   ::\" + leftAxis);\n        return [leftAxis];\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n       //console.log(\"zoomChartLinesData::::::::::::::: 2\");    \n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n        let tempPoints = this.get('zoomTempPoints');\n            \n        // console.log(\"zoomTempPoints::: \" + JSON.stringify(tempPoints));\n        // console.log(\"zoomTempPoints::: \" + this.get('temperaturePoints'));\n        \n        let anchorDistances = this.get('anchorDistances');\n        let zoomChartLinesData = [];\n\n        var mName = _this.get('chartDataModelName');\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[0]\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n       //console.log(\"TEMP::: \" + _this.get('chartDataModelName'));\n        let zoomTempPoints = this.get('zoomDataPointsRightAxis');\n        var temp = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                //console.log(\"temp Points::: \" + zoomTempPoints);\n                return [\n                    moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        //console.log(temp);\n        zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        \n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n       //console.log(\"fullRangeChartLinesData::::::::::::::: 11\");    \n        const _this = this;\n        const fullRangeDataPoints = this.get('fullRangeDataPoints');\n        const fullRangeTimePoints = this.get('fullRangeTimePoints');\n        \n        let fullRangeTempPoints = this.get('zoomDataPointsRightAxis');\n        let anchorDistances = this.get('anchorDistances');\n\n        let fullRangeChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                   //console.log(\"fullReang:::::::::::::::::::\" + _this.GATEWAY_ENUM[_this.leftAxis])\n                    ////console.log(\"DataPoint::: \" + dataPoint.values[chartLineIndex]);\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[_this.GATEWAY_ENUM[_this.leftAxis]]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n\n        var temperature = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: fullRangeTempPoints.map(function(dataPoint, dataPointIndex) {\n                return [\n                    moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        return fullRangeChartLinesData;           \n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n       //console.log(\"chartDataModelName::::::::::::::: 5   \" + this.get('zoomChartData').query.model_name);    \n        //console.log(\"zoomChartData:\" + this.get('zoomChartData').query.model_name);\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n       //console.log(\"yAxisLegend::::::::::::::: 14\");    \n        let chartTitle = 'voltage'\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        //let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n    getTitleAndUnits: function(axis){\n        let axisValues = {\"Voltage\": \"Voltage, V\", \"RSSI\": \"RSSI, dBm\", \"Firmware\": \"Firmware Ver.\", \"Readings\": \"Readings\", \n                            \"Uptime\": 'Uptime - in Seconds.', \"Reconnection\": \"Reconnects\", \"Uploads\": \"Uploads\",\n                            \"Temperature\": \"Temperature,C\", \"var_1\": 9, \"var_2\": 9,  \"var_3\": 10}\n        // console.log(\"getTitleAndUnits::::::::::::::: \" + axisValues[axis]);\n        return axisValues[axis];\n    },\n    didInsertElement: function() {\n        \n       //console.log(\"didInsertElement::::::::::::::: 1\");    \n        const _this = this,\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n        const zoomChartLinesData = _this.get('zoomChartLinesData');\n        const fullRangeChartLinesData = _this.get('fullRangeChartLinesData');\n        \n        let zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg');\n        \n        let fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg');\n        let yAxisLegend = this.get('yAxisLegend');\n        let apiCallsPromises = yAxisLegend;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(false)\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showLegend(true)\n                .showDistX(true)\n                .noData('No usable data');\n\n            zoomChart.showYAxis = true;\n            zoomChart.y2Axis.showYAxis = true;\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        //console.log(\"D:::::::::: \" + d);\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        //console.log(nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d)));\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n               \n                let axis1Title = _this.getTitleAndUnits(_this.get('leftAxis'));\n                let axis2Title = _this.getTitleAndUnits(_this.get('rightAxis'));\n                \n                zoomChart.y1Axis\n                    .axisLabel(axis1Title)\n                    .axisLabelDistance(10);\n                \n                zoomChart.y2Axis\n                    .axisLabel(axis2Title)\n                    .axisLabelDistance(10)\n                ;\n                    \n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                zoomChart.y2Axis.tickFormat(d3.format(\".2f\"));\n                \n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                let legend = zoomChart.legend;\n                if(legend.controls){\n                    legend.controls.forEach(function(d, i) {\n                        d.disabled = false;\n                    });\n                }\n\n                //console.log(\"zoomChart::::\" + zoomChart.legend);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    //console.log(\"BRUSH END::::::::::::::::::::\");\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(false);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n                \n                function selectControls() {\n                    // console.log(\":::::::::::::::::::::: selectControls\");\n                    //zoomChart.chartData.forEach(function(series) { series.disabled = false; });                  \n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n                    tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    tooltipClass = 'other';\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                        \n                }\n\n                //     if (typeof(tooltipContent) === 'object') {\n                //         if (tooltipContent.type === 'Blast') {\n                //             tooltipClass = 'blast';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                //         } else if (tooltipContent.type === 'Seismic') {\n                //             tooltipClass = 'seismic';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                //         } else if (tooltipContent.type === 'BluVibe') {\n                //             tooltipClass = 'bluvibe';\n                //             eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                //         } else if (tooltipContent.type === 'Other') {\n                //             tooltipClass = 'other';\n                //         }\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                //                       '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                //                       eventSize\n                //         ;\n                //     } else {\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                //     }\n\n                //     return {\n                //         tooltipClass: tooltipClass,\n                //         tooltipText: tooltipText\n                //     };\n                // }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(\"VibeEventsArray:::\" + vibeEventsArray);\n                    //console.log(distXMouseMove);\n \n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                // d3.select('.nv-y2.nv-axis')\n                // .classed('nv-disabled', false)\n                // .attr('transform', 'translate(0,0)');\n        \n                nv.utils.windowResize(zoomChart.update);\n\n                // zoomChart.dispatch.on('stateChange', function(e) { \n                //     nv.log('New State:', JSON.stringify(e)); \n                // });\n                // zoomChart.state.dispatch.on('change', function(state){\n                //     nv.log('state', JSON.stringify(state));\n                // });\n\n               //console.log(\":::::::::::::::::::::::::::setData called\")\n                // _this.sendAction('setData',zoomChartLinesData);\n                // _this.sendAction('setChart',zoomChart);\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            //.showYAxis(true)\n        ;\n        \n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) {\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n        \n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    temperaturePoints: [],\n    distXRiseUpAnimationDuration: 500,\n    // chartMetric: computed(function(){\n    // let chartMetric = this.attrs.getQueryParams('chart_type');\n    //     if(chartMetric == null){\n    //       return 'voltage';\n    //     }\n    //    //console.log(\"chartMetric::: \" + chartMetric);\n    //     return chartMetric;\n    // }),\n    leftAxis: computed(function(){\n        let leftAxis = this.attrs.getQueryParams('left_axis_field');\n        if(leftAxis == null){\n          leftAxis = 'Voltage';\n        }\n        return leftAxis;\n    }),      \n    rightAxis: computed(function(){\n        let rightAxis = this.attrs.getQueryParams('right_axis_field');\n        if(rightAxis == null){\n            rightAxis = 'RSSI';\n          }\n          return rightAxis;\n    }),\n    GATEWAY_ENUM: Object.freeze({\n        Firmware: 0,\n        Voltage: 1,\n        RSSI: 2,\n        carrier: 3, \n        Readings: 4, \n        Uptime: 5, \n        Reconnection: 6, \n        Uploads: 7, \n        Temperature:8,\n        var_1: 9, \n        var_2: 9, \n        var_3: 10,\n    }),\n\n    zoomTempPoints: computed(function(){\n        // let right = this.get('zoomDataPointsRightAxis');\n        let temperaturePoints = [];\n        let zoomTempData = this.get(\"zoomTempData\");\n        zoomTempData.forEach(function(item, i){\n            var chartData = { values: item.get(\"values\") };\n            temperaturePoints.push(chartData.values[0]);\n            // let temperaturePoints = this.get('temperaturePoints').push(chartData.values);\n        });\n        // console.log(\"zoomTempPoints::::::::::::::: 7\");    \n        // var chartData = { values: item.get(\"values\") };\n        //  = this.get('temperaturePoints').push(chartData.values);\n        \n        return temperaturePoints; //chartData;\n    }),\n    zoomDataPointsLeftAxis: computed(function(){\n        \n        let zoomChartData = this.get(\"zoomChartData\");\n        let leftAxisIndex = this.GATEWAY_ENUM[this.leftAxis]\n        //TODO: fix this TA.  Hack because we added temperature at the last minute.\n        if(this.leftAxis == 'Temperature'){\n            // console.log(\"zoomDataPointsLeftAxis::::::::::::::: \" + this.get(\"temperaturePoints\"));\n            return this.get(\"zoomTempPoints\");\n        }\n        \n        let zoomLeftAxis = zoomChartData.map(function (item, i){\n            return item.values[leftAxisIndex];            \n        });\n        return zoomLeftAxis;\n    }),\n    zoomDataPointsRightAxis: computed(function(){\n       //console.log(\"zoomDataPointsRightAxis::::::::::::::: 8\");\n        let zoomRightAxis = null;\n        if(this.rightAxis != null && this.rightAxis != 'Temperature'){\n            let zoomChartData = this.get(\"zoomChartData\");\n            let rightAxisIndex = this.GATEWAY_ENUM[this.rightAxis]        \n            zoomRightAxis = zoomChartData.map(function (item, i){\n                return item.values[rightAxisIndex];            \n            });\n        }\n        if (this.rightAxis == 'Temperature'){\n            zoomRightAxis = this.get(\"zoomTempPoints\");\n        }\n        ////console.log(\"zoomRightAxis::::::: \" + JSON.stringify(zoomRightAxis));\n        return zoomRightAxis;\n\n    }),\n    zoomDataPoints: computed('zoomChartData', function () {\n        \n       //console.log(\"zoomDataPoints::::::::::::::: 4 and 6 \" + this.get(\"chartDataValueName\") );\n        let left = this.get('zoomDataPointsLeftAxis');\n        \n        return left;\n    }),\n\n    fullRangeDataPoints: computed('fullRangeChartData', function () {\n        let fullRangePoints = null;\n        let itemHolder = {};\n\n        if(this.leftAxis != 'Temperature'){\n            fullRangePoints = this.get('fullRangeChartData');\n            fullRangePoints.map(function (item, i){\n                let itemHolder = { values: item.get(\"values\") };\n                return itemHolder;\n            });\n        } else {\n            itemHolder.values = [];\n            fullRangePoints = this.get(\"temperaturePoints\");\n            if(this.leftAxis == 'Temperature'){\n                fullRangePoints.forEach(function(item){\n                    itemHolder.values.push(item[0]);\n                });\n            }\n            fullRangePoints = itemHolder;\n        }\n        return fullRangePoints;\n        \n    }),\n\n/*     \n    fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n       //console.log(\"zoomTimePoints::::::::::::::: 9\");    \n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n       //console.log(\"fullRangeTimePoints::::::::::::::: 13\");\n        return item.get('id');\n    }),\n    \n    anchorDistances: computed('gateway', 'fullRangeChartData', function() {\n        let leftAxis = this.get('leftAxis'); \n       //console.log(\"anchorDistances::::::::::::::: 10   ::\" + leftAxis);\n        return [leftAxis];\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n       //console.log(\"zoomChartLinesData::::::::::::::: 2\");    \n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n        let tempPoints = this.get('zoomTempPoints');\n            \n        // console.log(\"zoomTempPoints::: \" + JSON.stringify(tempPoints));\n        // console.log(\"zoomTempPoints::: \" + this.get('temperaturePoints'));\n        \n        let anchorDistances = this.get('anchorDistances');\n        let zoomChartLinesData = [];\n\n        var mName = _this.get('chartDataModelName');\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[0]\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n       //console.log(\"TEMP::: \" + _this.get('chartDataModelName'));\n        let zoomTempPoints = this.get('zoomDataPointsRightAxis');\n        var temp = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                //console.log(\"temp Points::: \" + zoomTempPoints);\n                return [\n                    moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        //console.log(temp);\n        zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        \n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n       //console.log(\"fullRangeChartLinesData::::::::::::::: 11\");    \n        const _this = this;\n        const fullRangeDataPoints = this.get('fullRangeDataPoints');\n        const fullRangeTimePoints = this.get('fullRangeTimePoints');\n        \n        let fullRangeTempPoints = this.get('zoomDataPointsRightAxis');\n        let anchorDistances = this.get('anchorDistances');\n\n        let fullRangeChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                   //console.log(\"fullReang:::::::::::::::::::\" + _this.GATEWAY_ENUM[_this.leftAxis])\n                    ////console.log(\"DataPoint::: \" + dataPoint.values[chartLineIndex]);\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[_this.GATEWAY_ENUM[_this.leftAxis]]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n\n        var temperature = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: fullRangeTempPoints.map(function(dataPoint, dataPointIndex) {\n                //console.log(\"temp Points::: \" + zoomTempPoints);\n                return [\n                    moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        // fullRangeChartLinesData.push(temperature); //#TODO: Add Temp Points\n        return fullRangeChartLinesData;           \n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n       //console.log(\"chartDataModelName::::::::::::::: 5   \" + this.get('zoomChartData').query.model_name);    \n        //console.log(\"zoomChartData:\" + this.get('zoomChartData').query.model_name);\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n       //console.log(\"yAxisLegend::::::::::::::: 14\");    \n        let chartTitle = 'voltage'\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        //let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n    getTitleAndUnits: function(axis){\n        let axisValues = {\"Voltage\": \"Voltage, V\", \"RSSI\": \"RSSI, dBm\", \"Firmware\": \"Firmware Ver.\", \"Readings\": \"Readings\", \n                            \"Uptime\": 'Uptime - in Seconds.', \"Reconnection\": \"Reconnects\", \"Uploads\": \"Uploads\",\n                            \"Temperature\": \"Temperature,C\", \"var_1\": 9, \"var_2\": 9,  \"var_3\": 10}\n        // console.log(\"getTitleAndUnits::::::::::::::: \" + axisValues[axis]);\n        return axisValues[axis];\n    },\n    didInsertElement: function() {\n        \n       //console.log(\"didInsertElement::::::::::::::: 1\");    \n        const _this = this,\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n        const zoomChartLinesData = _this.get('zoomChartLinesData');\n        const fullRangeChartLinesData = _this.get('fullRangeChartLinesData');\n        \n        let zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg');\n        \n        let fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg');\n        let yAxisLegend = this.get('yAxisLegend');\n        let apiCallsPromises = yAxisLegend;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(false)\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showLegend(true)\n                .showDistX(true)\n                .noData('No usable data');\n\n            zoomChart.showYAxis = true;\n            zoomChart.y2Axis.showYAxis = true;\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        //console.log(\"D:::::::::: \" + d);\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        //console.log(nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d)));\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n               \n                let axis1Title = _this.getTitleAndUnits(_this.get('leftAxis'));\n                let axis2Title = _this.getTitleAndUnits(_this.get('rightAxis'));\n                \n                zoomChart.y1Axis\n                    .axisLabel(axis1Title)\n                    .axisLabelDistance(10);\n                \n                zoomChart.y2Axis\n                    .axisLabel(axis2Title)\n                    .axisLabelDistance(10)\n                ;\n                    \n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                zoomChart.y2Axis.tickFormat(d3.format(\".2f\"));\n                \n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                let legend = zoomChart.legend;\n                if(legend.controls){\n                    legend.controls.forEach(function(d, i) {\n                        d.disabled = false;\n                    });\n                }\n\n                //console.log(\"zoomChart::::\" + zoomChart.legend);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    //console.log(\"BRUSH END::::::::::::::::::::\");\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(false);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n                \n                function selectControls() {\n                    // console.log(\":::::::::::::::::::::: selectControls\");\n                    //zoomChart.chartData.forEach(function(series) { series.disabled = false; });                  \n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n                    tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    tooltipClass = 'other';\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                        \n                }\n\n                //     if (typeof(tooltipContent) === 'object') {\n                //         if (tooltipContent.type === 'Blast') {\n                //             tooltipClass = 'blast';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                //         } else if (tooltipContent.type === 'Seismic') {\n                //             tooltipClass = 'seismic';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                //         } else if (tooltipContent.type === 'BluVibe') {\n                //             tooltipClass = 'bluvibe';\n                //             eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                //         } else if (tooltipContent.type === 'Other') {\n                //             tooltipClass = 'other';\n                //         }\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                //                       '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                //                       eventSize\n                //         ;\n                //     } else {\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                //     }\n\n                //     return {\n                //         tooltipClass: tooltipClass,\n                //         tooltipText: tooltipText\n                //     };\n                // }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(\"VibeEventsArray:::\" + vibeEventsArray);\n                    //console.log(distXMouseMove);\n \n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                // d3.select('.nv-y2.nv-axis')\n                // .classed('nv-disabled', false)\n                // .attr('transform', 'translate(0,0)');\n        \n                nv.utils.windowResize(zoomChart.update);\n\n                // zoomChart.dispatch.on('stateChange', function(e) { \n                //     nv.log('New State:', JSON.stringify(e)); \n                // });\n                // zoomChart.state.dispatch.on('change', function(state){\n                //     nv.log('state', JSON.stringify(state));\n                // });\n\n               //console.log(\":::::::::::::::::::::::::::setData called\")\n                // _this.sendAction('setData',zoomChartLinesData);\n                // _this.sendAction('setChart',zoomChart);\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            //.showYAxis(true)\n        ;\n        \n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) {\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n        \n    }\n});\n","import { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    isVisibleCreateNewForm: false,\n    anchorDistances: computed('gateway', function() {\n        return [\"Firmware Version\", \"Voltage\",\"RSSI\",\"Carrier\",\"Readings\",\"Uptime in Seconds\",\"Reconnection Attempts\",\"Uploads\"]\n}),\n\ngetGatewayData: computed('gateway', 'gatewayData', function() {\n    let fields = [0,2,3,4,5,6,7,8];\n    let items = [];\n    // Perform filtering logic on initial data\n    const filteredData = this.get('gatewayData');\n    if (filteredData) {\n      filteredData.forEach(item => {\n        let values = [];\n        let firmware = item.values[0];\n        let voltage = item.values[2];\n        let rssi = item.values[3];\n        let carrier = item.values[4];\n        let readings = item.values[5];\n        let uptime = item.values[6];\n        let recon = item.values[7];\n        let uploads = item.values[8];\n        let temperature = item.values[item.values.length -2];\n        items.push({ id: item.id, values: {'firm_version':firmware,'voltage':voltage,'rssi': rssi, 'carrier': carrier, 'readings':readings,'uptime':uptime,'recon': recon, 'uploads': uploads, 'temperature': temperature}, \n        originalValue: item, save_values:{'firm_version':firmware,'voltage':voltage, 'rssi': rssi, 'carrier': carrier, 'readings':readings,'uptime':uptime,'recon': recon, 'uploads': uploads , 'temperature': temperature} });\n      });\n    }        \n    \n    return items;\n  }),\n\n    actions: {\n        updateProperty(propertyName, propertyValue) {\n          // console.log(\"Update property: \" + propertyValue);\n          this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class LeftAxisDropdown extends Component.extend({}) {\n    @service router;\n    @service store;\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    actions = {\n        tGraph(id, modelName, params) {\n            // console.log(\"in LeftAxisDropdown:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\")\n            this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, modelName, params);\n        },\n    }\n}","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport EmberObject from '@ember/object';\nimport Component from '@ember/component';\n\nexport default class TemporalGatewayRightAxisDropdown extends Component.extend({\n}) {\n    @service router;\n    @service store;\n\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    selectedOption = null;\n    \n    actions = {\n        setSelection(selected) {\n            this.set('selectedOption', selected)\n            // console.log(this.get('selectedOption'))\n        },\n    }\n}","import { isBlank, isPresent } from '@ember/utils';\nimport { A } from '@ember/array';\nimport EmberObject, { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\n\nexport default Component.extend({\n  routerService: service('router'),\n\n  routeInfos: computed(\"routerService.currentRouteName\", function() {\n    let currentRoute = this.routerService.currentRoute;\n    if (!currentRoute) return [];\n    let infos = [];\n    let info = currentRoute;\n    while (info) {\n      infos.unshift(info);\n      info = info.parent;\n    }\n    return infos;\n  }),\n\n  controllers: computed(\"routeInfos.[]\", function() {\n    let owner = getOwner(this);\n    return this.get(\"routeInfos\").map(function(routeInfo) {\n      return owner.lookup('controller:' + routeInfo.name);\n    }).filter(c => c != null);\n  }),\n\n  breadCrumbs: computed(\n    \"controllers.@each.{breadCrumbs,breadCrumb,breadCrumbPath,breadCrumbModel}\",\n    \"routeInfos.[]\",\n    function() {\n      let controllers = this.get(\"controllers\");\n      let defaultPaths = this.get(\"routeInfos\").map(ri => ri.name);\n      let breadCrumbs = A([]);\n\n      controllers.forEach(function(controller, index) {\n        let crumbs = controller.get(\"breadCrumbs\") || A([]);\n        let singleCrumb = controller.get(\"breadCrumb\");\n\n        if (!isBlank(singleCrumb)) {\n          crumbs.push({\n            label: singleCrumb,\n            path: controller.get(\"breadCrumbPath\"),\n            model: controller.get(\"breadCrumbModel\"),\n          });\n        }\n\n        crumbs.forEach(function(crumb) {\n          breadCrumbs.addObject(EmberObject.create({\n            label: crumb.label,\n            path: crumb.path || defaultPaths[index],\n            model: crumb.model,\n            linkable: isPresent(crumb.linkable) ? crumb.linkable : crumb.path !== false,\n            isCurrent: false\n          }));\n        });\n      });\n\n      let deepestCrumb = breadCrumbs.get(\"lastObject\");\n      if (deepestCrumb) {\n        deepestCrumb.isCurrent = true;\n      }\n\n      return breadCrumbs;\n    }\n  )\n});\n","export { default } from 'ember-bootstrap/components/bs-accordion';\n","export { default } from 'ember-bootstrap/components/bs-accordion/item';\n","export { default } from 'ember-bootstrap/components/bs-accordion/item/body';\n","export { default } from 'ember-bootstrap/components/bs-accordion/item/title';\n","export { default } from 'ember-bootstrap/components/bs-alert';\n","export { default } from 'ember-bootstrap/components/bs-button-group';\n","export { default } from 'ember-bootstrap/components/bs-button-group/button';\n","export { default } from 'ember-bootstrap/components/bs-button';\n","export { default } from 'ember-bootstrap/components/bs-carousel';\n","export { default } from 'ember-bootstrap/components/bs-carousel/slide';\n","export { default } from 'ember-bootstrap/components/bs-collapse';\n","export { default } from 'ember-bootstrap/components/bs-dropdown';\n","export { default } from 'ember-bootstrap/components/bs-dropdown/button';\n","export { default } from 'ember-bootstrap/components/bs-dropdown/menu';\n","export { default } from 'ember-bootstrap/components/bs-dropdown/menu/divider';\n","export { default } from 'ember-bootstrap/components/bs-dropdown/menu/item';\n","export { default } from 'ember-bootstrap/components/bs-dropdown/toggle';\n","export { default } from 'ember-bootstrap/components/bs-form';\n","export { default } from 'ember-bootstrap/components/bs-form/element';\n","export { default } from 'ember-bootstrap/components/bs-form/element/control';\n","export { default } from 'ember-bootstrap/components/bs-form/element/control/checkbox';\n","export { default } from 'ember-bootstrap/components/bs-form/element/control/input';\n","export { default } from 'ember-bootstrap/components/bs-form/element/control/radio';\n","export { default } from 'ember-bootstrap/components/bs-form/element/control/switch';\n","export { default } from 'ember-bootstrap/components/bs-form/element/control/textarea';\n","export { default } from 'ember-bootstrap/components/bs-form/element/errors';\n","export { default } from 'ember-bootstrap/components/bs-form/element/feedback-icon';\n","export { default } from 'ember-bootstrap/components/bs-form/element/help-text';\n","export { default } from 'ember-bootstrap/components/bs-form/element/label';\n","export { default } from 'ember-bootstrap/components/bs-form/element/layout/horizontal';\n","export { default } from 'ember-bootstrap/components/bs-form/element/layout/horizontal/checkbox';\n","export { default } from 'ember-bootstrap/components/bs-form/element/layout/inline';\n","export { default } from 'ember-bootstrap/components/bs-form/element/layout/inline/checkbox';\n","export { default } from 'ember-bootstrap/components/bs-form/element/layout/vertical';\n","export { default } from 'ember-bootstrap/components/bs-form/element/layout/vertical/checkbox';\n","export { default } from 'ember-bootstrap/components/bs-form/element/legend';\n","export { default } from 'ember-bootstrap/components/bs-link-to';\n","export { default } from 'ember-bootstrap/components/bs-modal-simple';\n","export { default } from 'ember-bootstrap/components/bs-modal';\n","export { default } from 'ember-bootstrap/components/bs-modal/body';\n","export { default } from 'ember-bootstrap/components/bs-modal/dialog';\n","export { default } from 'ember-bootstrap/components/bs-modal/footer';\n","export { default } from 'ember-bootstrap/components/bs-modal/header';\n","export { default } from 'ember-bootstrap/components/bs-modal/header/close';\n","export { default } from 'ember-bootstrap/components/bs-modal/header/title';\n","export { default } from 'ember-bootstrap/components/bs-nav';\n","export { default } from 'ember-bootstrap/components/bs-nav/item';\n","export { default } from 'ember-bootstrap/components/bs-navbar';\n","export { default } from 'ember-bootstrap/components/bs-navbar/content';\n","export { default } from 'ember-bootstrap/components/bs-navbar/link-to';\n","export { default } from 'ember-bootstrap/components/bs-navbar/nav';\n","export { default } from 'ember-bootstrap/components/bs-navbar/toggle';\n","export { default } from 'ember-bootstrap/components/bs-popover';\n","export { default } from 'ember-bootstrap/components/bs-popover/element';\n","export { default } from 'ember-bootstrap/components/bs-progress';\n","export { default } from 'ember-bootstrap/components/bs-progress/bar';\n","export { default } from 'ember-bootstrap/components/bs-tab';\n","export { default } from 'ember-bootstrap/components/bs-tab/pane';\n","export { default } from 'ember-bootstrap/components/bs-tooltip';\n","export { default } from 'ember-bootstrap/components/bs-tooltip/element';\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nexport default Component.extend({\n    store: service(),\n    _spatialChart: null,\n\n    // anchor distances — trimmed for strain-values AND load-values (cable-specific)\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        const firstObject = this.get('zoomChartData').get('firstObject');\n        if (!firstObject) { return []; }\n        const dataValuesCount = firstObject.get ? (firstObject.get('values')?.length ?? 0) : (firstObject.values?.length ?? 0);\n        const anchors = this.get('instrument').get('anchors');\n        let anchorDistances = (anchors.content ?? anchors).map(anchor => anchor.get('distance'));\n\n        const modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {\n            anchorDistances.splice(0, 1);\n        }\n        return anchorDistances;\n    }),\n\n    // midpoints — cable (dCable) specific: splice first mid, set [0]=0, push instrumentLength\n    anchorMidDistances: computed('anchorDistances', 'zoomChartData', function() {\n        const anchorDistances = [...this.get('anchorDistances')];\n        const firstObject = this.get('zoomChartData').get('firstObject');\n        const dataValuesCount = firstObject ? (firstObject.get ? (firstObject.get('values')?.length ?? 0) : (firstObject.values?.length ?? 0)) : 0;\n        const midDistances = [];\n\n        anchorDistances.unshift(0);\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            midDistances.push(+((anchorDistances[i] + anchorDistances[i + 1]) / 2).toFixed(2));\n        }\n\n        // dCable-specific: splice first mid, set [0] = 0, push instrumentLength for strain/load\n        midDistances.splice(0, 1);\n        midDistances[0] = 0;\n\n        const modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {\n            const length = this.get('instrument').get('instrumentLength');\n            if (length !== null && length !== 0) {\n                midDistances.push(length);\n            } else {\n                midDistances.push(anchorDistances[anchorDistances.length - 1]);\n            }\n        }\n\n        return midDistances;\n    }),\n\n    // x-axis depth values — strain/load use midpoints, others use anchor distances\n    spatialXValues: computed('anchorDistances', 'anchorMidDistances', 'chartDataModelName', function() {\n        const modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n            return this.get('anchorMidDistances');\n        }\n        return this.get('anchorDistances');\n    }),\n\n    // spatial lines: one line per timestamp reading (X = depth, Y = value)\n    spatialChartLinesData: computed('zoomChartData', 'spatialXValues', 'chartDataModelName', function() {\n        const zoomChartData = this.get('zoomChartData');\n        const xValues = this.get('spatialXValues');\n        const modelName = this.get('chartDataModelName');\n        const plated = this.get('instrument').get('plated');\n\n        return zoomChartData.map((item) => {\n            let values = [...(item.get('values') || [])];\n\n            // dCable strain/load: splice first, unshift 0, push plated value or 0\n            if (modelName === 'strain-values' || modelName === 'load-values') {\n                values.splice(0, 1);\n                values.unshift(0);\n                if (plated) {\n                    values.push(values[values.length - 1]);\n                } else {\n                    values.push(0);\n                }\n            }\n\n            return {\n                key: moment(item.get('id')).format('DD MMM YYYY HH:mm'),\n                timestamp: item.get('id'),\n                values: values.map((v, idx) => ({\n                    x: xValues[idx] !== undefined ? xValues[idx] : null,\n                    y: v !== undefined ? v : null\n                })).filter(pt => pt.x !== null)\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        const chartDataModelName = this.get('chartDataModelName');\n        const chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes')\n        }));\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        const title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName');\n                units = \"kN\";\n                break;\n            case 'axial_strain':\n                axisName = \"Axial Strain\";\n                units = \"%\";\n                break;\n            case 'bending_strain':\n                axisName = \"Bending Strain\";\n                units = \"%\";\n                break;\n            case 'axial_displacement':\n                axisName = \"Axial Displacement\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n\n        const spatialLinesData = this.get('spatialChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildSpatialChart(spatialLinesData, yAxisTitle);\n        });\n    },\n\n    _buildSpatialChart(linesData, yAxisTitle) {\n        const canvas = this.element.querySelector('canvas.chartjs-spatial');\n        if (!canvas) return;\n\n        const infoPanel = this.element.querySelector('.spatial-info-panel');\n\n        let instrumentLength = 0;\n        try {\n            instrumentLength = this.instrument.get('instrumentLength') || 0;\n        } catch (e) { /* ignore */ }\n\n        const anchorXValues = this.get('spatialXValues');\n\n        // Line datasets: time-gradient colors (oldest = light, newest = dark)\n        const lineCount = linesData.length;\n        const lineDatasets = linesData.map((line, i) => ({\n            label: line.key,\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            parsing: false,\n            _isLine: true\n        }));\n\n        // Anchor reference datasets (for legend only, drawn by plugin)\n        const anchorDatasets = anchorXValues.map((dist, i) => ({\n            label: String(dist),\n            data: [],\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            borderWidth: 0,\n            pointRadius: 0,\n            showLine: false,\n            _isRef: true\n        }));\n\n        const datasets = [...lineDatasets, ...anchorDatasets];\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds._isRef) return;\n                    if (!ds.hidden) ds.data.forEach(pt => { if (pt && pt.y != null) hasData = true; });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data available', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const anchorDotsPlugin = {\n            id: 'anchorDots',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                const yArea = chart.chartArea.bottom;\n                const ctx = chart.ctx;\n                anchorXValues.forEach((dist, i) => {\n                    const px = xScale.getPixelForValue(dist);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.arc(px, yArea, 6, 0, 2 * Math.PI);\n                    ctx.fillStyle = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                    ctx.fill();\n                    ctx.restore();\n                });\n            }\n        };\n\n        let crosshairX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                if (crosshairX === null) return;\n                const { ctx, chartArea: { top, bottom } } = chart;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        // --- Legend-tooltip helpers ---\n        let legendTooltipEl = null;\n        let highlightedIndex = null;\n\n        function buildSpatialLegendItems(chart) {\n            return chart.data.datasets.filter(ds => ds._isLine).map((ds) => {\n                const i = chart.data.datasets.indexOf(ds);\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:1;margin-right:3px;\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div></div>`;\n            }).join('');\n        }\n\n        function highlightLine(chart, idx, skipUpdate) {\n            highlightedIndex = idx;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine) return;\n                ds.borderColor = (i === idx)\n                    ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                    : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '22';\n            });\n            if (!skipUpdate) chart.update('none');\n        }\n\n        function restoreLines(chart, skipUpdate) {\n            highlightedIndex = null;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine) return;\n                ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n            });\n            if (!skipUpdate) chart.update('none');\n        }\n\n        function attachSpatialLegendHandlers(el, chart) {\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                highlightLine(chart, parseInt(item.dataset.ds));\n            };\n            el.onmouseout = function() {\n                restoreLines(chart);\n            };\n        }\n\n        function initSpatialLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildSpatialLegendItems(chart);\n            attachSpatialLegendHandlers(legendTooltipEl, chart);\n        }\n\n        function distToSegment(px, py, x1, y1, x2, y2) {\n            const dx = x2 - x1, dy = y2 - y1;\n            const lenSq = dx * dx + dy * dy;\n            let t = lenSq === 0 ? 0 : Math.max(0, Math.min(1, ((px - x1) * dx + (py - y1) * dy) / lenSq));\n            const projX = x1 + t * dx, projY = y1 + t * dy;\n            const ex = px - projX, ey = py - projY;\n            return Math.sqrt(ex * ex + ey * ey);\n        }\n\n        function findClosestLine(chart, mouseX, mouseY) {\n            let closestIdx = -1;\n            let closestDist = Infinity;\n\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine || chart.getDatasetMeta(i).hidden) return;\n                const pts = chart.getDatasetMeta(i).data;\n                if (!pts || pts.length < 2) return;\n\n                for (let j = 0; j < pts.length - 1; j++) {\n                    const p1 = pts[j], p2 = pts[j + 1];\n                    if (!p1 || !p2) continue;\n                    const dist = distToSegment(mouseX, mouseY, p1.x, p1.y, p2.x, p2.y);\n                    if (dist < closestDist) {\n                        closestDist = dist;\n                        closestIdx = i;\n                    }\n                }\n            });\n\n            return { datasetIndex: closestIdx, pixelDist: closestDist };\n        }\n\n        let lastTooltipIdx = null;\n\n        function updateSpatialTooltip(chart, mouseX, mouseY) {\n            if (!legendTooltipEl) return;\n            const { left, right, top, bottom } = chart.chartArea;\n            if (mouseX < left || mouseX > right || mouseY < top || mouseY > bottom) {\n                if (highlightedIndex !== null) restoreLines(chart, true);\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildSpatialLegendItems(chart);\n                attachSpatialLegendHandlers(legendTooltipEl, chart);\n                lastTooltipIdx = null;\n                return;\n            }\n\n            const closest = findClosestLine(chart, mouseX, mouseY);\n            if (closest.datasetIndex < 0) return;\n\n            if (closest.datasetIndex !== highlightedIndex) {\n                highlightLine(chart, closest.datasetIndex, true);\n            }\n\n            const activeIdx = highlightedIndex != null ? highlightedIndex : closest.datasetIndex;\n            if (activeIdx !== lastTooltipIdx) {\n                lastTooltipIdx = activeIdx;\n                const ds = chart.data.datasets[activeIdx];\n                const valuesHtml = ds.data.map((pt, idx) => {\n                    const anchorColor = CHART_LINE_COLORS[idx % CHART_LINE_COLORS.length];\n                    return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${anchorColor};\"></div>${pt && pt.y != null ? pt.y.toFixed(2) : '—'}</div>`;\n                }).join('');\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = `<div class=\"legend-tooltip-date\">${ds.label}</div>${valuesHtml}`;\n            }\n        }\n\n        const spatialChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                parsing: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'nearest', intersect: false, axis: 'y' },\n                onHover(e) {\n                    if (e.x != null) { crosshairX = e.x; }\n                },\n                scales: {\n                    x: {\n                        type: 'linear',\n                        min: 0,\n                        max: instrumentLength > 0 ? instrumentLength : undefined,\n                        title: { display: true, text: 'Depth (mm)', font: { size: 12 } },\n                        afterBuildTicks(axis) {\n                            const visibleAnchors = anchorXValues\n                                .filter(v => v >= axis.min && v <= axis.max)\n                                .map(v => ({ value: v }));\n                            if (visibleAnchors.length > 0) { axis.ticks = visibleAnchors; }\n                        },\n                        ticks: { callback(val) { return val.toLocaleString(); } }\n                    },\n                    y: {\n                        title: { display: true, text: yAxisTitle, font: { size: 12 } },\n                        ticks: { callback(val) { return val.toFixed ? val.toFixed(2) : val; } }\n                    }\n                },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                }\n            },\n            plugins: [noDataPlugin, anchorDotsPlugin, crosshairPlugin]\n        });\n\n        initSpatialLegendTooltip(canvas.parentElement, spatialChart);\n\n        // --- Scroll-to-zoom (both axes) ---\n        const origXMin = spatialChart.options.scales.x.min;\n        const origXMax = spatialChart.options.scales.x.max;\n        canvas.addEventListener('wheel', e => {\n            e.preventDefault();\n            const rect = canvas.getBoundingClientRect();\n            const xScale = spatialChart.scales['x'];\n            const yScale = spatialChart.scales['y'];\n            const factor = e.deltaY < 0 ? 1.15 : 0.87;\n            const cursorX = xScale.getValueForPixel(e.clientX - rect.left);\n            const cursorY = yScale.getValueForPixel(e.clientY - rect.top);\n            spatialChart.options.scales.x.min = cursorX - (cursorX - xScale.min) * factor;\n            spatialChart.options.scales.x.max = cursorX + (xScale.max - cursorX) * factor;\n            spatialChart.options.scales.y.min = cursorY - (cursorY - yScale.min) * factor;\n            spatialChart.options.scales.y.max = cursorY + (yScale.max - cursorY) * factor;\n            spatialChart.update('none');\n        }, { passive: false });\n\n        // --- Drag-to-pan (both axes) ---\n        let panStartX = null, panStartY = null;\n        let panXMin = null, panXMax = null, panYMin = null, panYMax = null;\n        canvas.addEventListener('mousedown', e => {\n            panStartX = e.clientX; panStartY = e.clientY;\n            panXMin = spatialChart.scales['x'].min; panXMax = spatialChart.scales['x'].max;\n            panYMin = spatialChart.scales['y'].min; panYMax = spatialChart.scales['y'].max;\n            canvas.style.cursor = 'grabbing';\n        });\n        canvas.addEventListener('mousemove', e => {\n            const rect = canvas.getBoundingClientRect();\n            const px = e.clientX - rect.left;\n            const py = e.clientY - rect.top;\n            const { left, right } = spatialChart.chartArea;\n            crosshairX = (px >= left && px <= right) ? px : null;\n            if (panStartX !== null) {\n                const xPxRange = spatialChart.chartArea.right - spatialChart.chartArea.left;\n                const yPxRange = spatialChart.chartArea.bottom - spatialChart.chartArea.top;\n                spatialChart.options.scales.x.min = panXMin - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.x.max = panXMax - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.y.min = panYMin + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n                spatialChart.options.scales.y.max = panYMax + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n            } else {\n                updateSpatialTooltip(spatialChart, px, py);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('mouseleave', () => {\n            crosshairX = null;\n            if (highlightedIndex !== null) restoreLines(spatialChart);\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildSpatialLegendItems(spatialChart);\n                attachSpatialLegendHandlers(legendTooltipEl, spatialChart);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('dblclick', () => {\n            spatialChart.options.scales.x.min = origXMin;\n            spatialChart.options.scales.x.max = origXMax;\n            spatialChart.options.scales.y.min = undefined;\n            spatialChart.options.scales.y.max = undefined;\n            spatialChart.update('none');\n        });\n        const onPanEnd = () => {\n            panStartX = panStartY = panXMin = panXMax = panYMin = panYMax = null;\n            canvas.style.cursor = 'default';\n        };\n        canvas.addEventListener('mouseup', onPanEnd);\n        document.addEventListener('mouseup', onPanEnd);\n\n        this.set('_spatialChart', spatialChart);\n    },\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const spatialChart = this.get('_spatialChart');\n        if (spatialChart) { spatialChart.destroy(); }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    init() {\n        this._super(...arguments);\n        const yAxisUnitParam = this.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let anchors = this.get('instrument').get('anchors');\n        const arr = anchors.content ?? anchors;\n        let anchorDistances = arr.map(anchor => anchor.get('distance'));\n\n        var modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            var midPoints = [];\n            for (var i = 0; i < anchorDistances.length - 1; i++) {\n                midPoints[i] = ((anchorDistances[i] + anchorDistances[i + 1]) / 2).toFixed(2);\n            }\n            anchorDistances = midPoints;\n        }\n        return anchorDistances;\n    }),\n\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'anchorDistances', 'chartDataModelName', function() {\n        const anchorDistances = this.get('anchorDistances');\n        const sourceData = this.get('zoomChartData');\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n\n        const lines = anchorDistances.map((chartLineName, chartLineIndex) => ({\n            key: chartLineName,\n            values: sourceData.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[chartLineIndex] !== undefined) ? arr[chartLineIndex] : null\n                };\n            })\n        }));\n\n        if (modelName !== 'temperature-values') {\n            const zoomTempData = this.get('zoomTempData');\n            if (zoomTempData && zoomTempData.length) {\n                lines.push({\n                    key: 'T (°C)',\n                    yAxis: 'y2',\n                    hidden: false,\n                    values: zoomTempData.map(item => {\n                        const rawValues = item.get('values');\n                        const arr = Array.isArray(rawValues) ? rawValues : [];\n                        return {\n                            x: moment(item.get('id')).valueOf(),\n                            y: arr[0] !== undefined ? arr[0] : null\n                        };\n                    })\n                });\n            }\n        }\n\n        return lines;\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        let title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                units = this.get(\"yAxisUnit\") || getAttr('units');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'temperature':\n                axisName = \"Temperature\";\n                units = \"°C\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const fullRangeChartLinesData = this.get('fullRangeChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildMainChart(fullRangeChartLinesData, yAxisTitle);\n            this._buildOverviewChart();\n        });\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        const datasets = anchorDistances.map((chartLineName, i) => ({\n            label: String(chartLineName),\n            data: fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        anchorDistances.forEach((chartLineName, i) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(chartLineName));\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed, get } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nfunction resetNewInstrumentObject(_this) {\n    //console.log('reset');\n    _this.set('newInstrumentObject', {instrumentStiffness:0, elasticLimitPct:0.8, ultimateLimitPct:3, elasticLimitFce:240, ultimateLimitFce:260});\n\n    //_this.set('name', null);\n    _this.set('zeroTimestamp', null);\n    _this.set('installDate', null);\n    _this.set('instrumentStiffness', );\n    // _this.set('elasticLimitFce', {elasticLimitFce:2});\n    // _this.set('elasticLimitPct', {elasticLimitPct:2});\n    //_this.set('east', null);\n    //_this.set('north', null);\n    //_this.set('depth', null);\n    //_this.set('azimuth', null);\n    //_this.set('dip', null);\n    //_this.set('instrumentType', 0);\n    //_this.set('headAt', 'HAC');\n    //_this.set('instrumentLength', 0);\n    //_this.set('strokeLength', 0);\n    //_this.set('referenceAnchor', null);\n    //_this.set('headExclusionLength', 0);\n    //_this.set('gaugeLength', 0);\n    //_this.set('bulbed', false);\n    //_this.set('plated', false);\n    //_this.set('stacked', false);\n    //_this.set('active', true);\n}\n\nexport default class CreatePackInstrument extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n    }\n\n    isAuthenticated = true;\n    newInstrumentObject = {};\n    headAt = 'HAC';\n    zeroTimestamp = null;\n    installDate = null;\n    authError = false;\n    project = null;\n    level = null;\n\n    actions= {\n\n        \n        setProject(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n\n        createInstrument(object){\n\n            //console.log(this.get('prevDup'));\n            //console.log((typeof this.get('prevDup') === \"undefined\"));\n\n            let _this = this,\n            store = this.get('store'),\n            newInstrumentObject = this.get('newInstrumentObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newInstrumentObject.id = this.get('id');\n            newInstrumentObject.zeroTimestamp = this.get('zeroTimestamp');\n            newInstrumentObject.installDate = this.get('installDate');\n            //newInstrumentObject.east = this.get('east');\n            //newInstrumentObject.north = this.get('north');\n            //newInstrumentObject.depth = this.get('depth');\n            newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n            newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n            newInstrumentObject.bulbed = this.get('bulbed');\n            newInstrumentObject.plated = this.get('plated');\n            //newInstrumentObject.stacked = this.get('stacked');\n            newInstrumentObject.active = true;\n            try {\n                newInstrumentObject.instrumentStiffness = newInstrumentObject.elasticLimitFce / newInstrumentObject.elasticLimitPct;\n            } catch (ex) {\n                newInstrumentObject.instrumentStiffness = 0;\n            }\n\n            if(typeof newInstrumentObject.id === 'undefined' || newInstrumentObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n\n            if(!error) {\n                if(typeof newInstrumentObject.strokeLength === 'undefined' || newInstrumentObject.strokeLength === 0) {\n                    error = true;\n                    this.setError('fieldError',true);\n                    this.setError('isVisibleError',true);\n                }\n            }\n\n            if (this.get('zeroTimestamp') != null) {\n                newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('installDate') != null) {\n                newInstrumentObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            // console.log(get(this, 'duplicateError'));\n\n            let newInstrument = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    //console.log(this.get('prevDup'));\n                    if(err.message.includes('has already been used')) {\n                        //console.log('duplicate');\n                        this.setError('duplicateError',true);\n                        \n                        error = true;\n                        dup = true;\n                    }\n                    // console.log(err.message);\n                }\n            }\n            \n            this.setError('authError', false);\n\n            if (!error) {\n                \n                    newInstrument.save().then(function(results){\n                        // console.log(dup);\n                        if(results.id != null) {\n                            _this.get('submit')(results.id);\n                        } else {\n                            this.setError('isVisibleError',true);\n                            error = true;\n                        }\n                    }).catch(function(reason) {\n                        \n                        _this.setError('isVisibleError',true);\n                        _this.setError('authError',true);\n                    }); \n            } \n        },\n        bulbChanged(object)\n        {\n            this.set(\"bulbed\",document.getElementById('newInstrumentObjectBulbed').checked);\n        },\n        plateChanged(object)\n        {\n            this.set(\"plated\",document.getElementById('newInstrumentObjectPlated').checked);\n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let displacementValueObjectValues = _this.get('displacementValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(displacementValueObjectValues).forEach(function(key,index) {\n        displacementValueObjectValues[key] = 0;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n    // newTimestampValue: computed('dateFormat', function() {\n    //     return moment().format(this.get('dateFormat'));\n    // }),\n\n    newDisplacementValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n    displacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    newDisplacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    actions: {\n        setNewDisplacementValue(key, event) {\n            const vals = this.get('newDisplacementValueObjectValues');\n            vals[key] = event.target.value;\n        },\n        setNewTimestampValue(event) {\n            this.set('newTimestampValue', event.target.value);\n        },\n        setTemperatureValue(event) {\n            this.set('temperatureObjectValue', event.target.value);\n        },\n        saveNew(){\n            // console.save('saveNew()');\n            let _this = this,\n                store = this.get('store'),\n                newDisplacementValuesObject = this.get('newDisplacementValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                displacementValues = this.get('displacementValues'),\n                temperatureValues = this.get('temperatureValues')\n            ;\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                \n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newDisplacementValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newDisplacementValuesObject.values = Object.values(this.get('newDisplacementValueObjectValues'));\n\n            const newDisplacementValues = store.createRecord('displacement-value', newDisplacementValuesObject);\n            // save new displacement-value to DB\n            const savedDisplacementValuesObject = newDisplacementValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if displacement-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //displacementValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n\n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import { computed, observer } from '@ember/object';\nimport { getApiBaseUrl } from '../../utils/api-config';\nimport { inject as service } from '@ember/service';\nimport EmberObject from '@ember/object';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    didReceiveAttrs() {\n        this._super(...arguments);\n      },\n    router:service(),\n    store:service(),\n    api:service(),\n    session: service(),\n    //Old Declarations\n    // isAuthenticated : true,\n    selectedVendor: null,\n    selectedModel: null,\n    editing: 0,\n    //New Declarations\n    activeActionTab:null,\n    ordering:null,\n    paginationSearchConfig:{    \n        searchObject:{ calibrationDateOrdering:\"DESC\"},\n        pagination:{page:1, pageSize:5, totalPages:1},\n        alertProfilePaginationList : [],\n    },\n    anchorDiagramInputInitalValue:[],\n    batchSelectedAlertsID:[],\n    isAlertsListVisible:false,\n    isEditAnchorDiagram:false,\n\n    async init() {\n        this._super(...arguments);\n        await this.getAlertsList();\n    },\n    getAlertsList:async function(){\n\n        let payload = {\n            instrumentId: this.get(\"instrument\").id,\n            page: this.paginationSearchConfig.pagination.page,\n            page_size:this.paginationSearchConfig.pagination.pageSize,\n            \n        };\n        if (this.get(\"ordering\") != null ){\n            payload[\"ordering\"] = this.get(\"ordering\");\n        }\n        let url = getApiBaseUrl() + \"/alerts/\";\n        const queryString = new URLSearchParams(payload).toString();\n        if (queryString) {\n            url += `?${queryString}`;\n        }\n        const response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json(); \n            const metaPaginationData = responseData['meta'];\n            this.set(\"paginationSearchConfig.pagination.totalPages\", metaPaginationData['pagination']['total_pages']);\n\n            this.processAlertsList(responseData.data);\n            this.updatePaginationList();\n        }\n        else {\n            this.set(\"alertsList\", [])\n        } \n    },\n    processAlertsList:function(rawList){\n        let list = [];\n        rawList.forEach(element => {\n            let rawElement = element;\n            element = element[\"attributes\"]\n            list.push({\n                id: rawElement[\"id\"],\n                counter: element[\"counter\"],\n                createdAt: element[\"created-at\"],\n                evaluationType: element[\"evaluation-type\"],\n                instrumentId: element[\"instrument-id\"],\n                isAcknowledged: element[\"is-acknowledged\"],\n                isActive: element[\"is-active\"],\n                isMuted: element[\"is-muted\"],\n                lastDataReceivedAt: element[\"last-data-received-at\"],\n                lastEvaluatedAt: element[\"last-evaluated-at\"],\n                lastTriggeredAt: element[\"last-triggered-at\"],\n                level: element[\"level\"],\n                name: element[\"name\"],\n                channels: element[\"channels\"],\n                note: element[\"note\"],\n                parameters: element[\"parameters\"],\n                softResetCounter: element[\"soft-reset-counter\"],\n            })\n        });\n        this.set(\"alertsList\", list)\n    },\n    updatePaginationList: function () {\n        let range = [];\n        const maxPageToShow = 3; // Adjust this based on how many pages you want to show in the middle\n        const paginationObj = this.get('paginationSearchConfig.pagination');\n    \n        // Always include the first page\n        range.push(1);\n    \n        if (paginationObj['totalPages'] <= maxPageToShow + 2) {\n            // If total pages are small enough, show all pages\n            for (let i = 2; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else if (paginationObj['page'] <= maxPageToShow) {\n            // Current page is within the first few pages\n            for (let i = 2; i <= maxPageToShow + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        } else if (paginationObj['page'] >= paginationObj['totalPages'] - maxPageToShow + 1) {\n            // Current page is within the last few pages\n            range.push('...');\n            for (let i = paginationObj['totalPages'] - maxPageToShow; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else {\n            // Current page is in the middle\n            range.push('...');\n            for (let i = paginationObj['page'] - 1; i <= paginationObj['page'] + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        }\n    \n        this.set('paginationSearchConfig.alertProfilePaginationList', range);\n    },\n    orderingObserver: observer('ordering',async function() {\n        await this.getAlertsList();\n    }), \n    anchorDiagramLabelInitalValue:computed(\"instrument\", function(){\n        let data = {};\n        ((_a) => _a.content ?? _a)(this.get(\"instrument\").anchors).forEach((anchorObj, i)=>{\n            if(i == 0){\n                \n            }\n            else{\n                data[`channel_${i}`] = anchorObj.distance;\n            }\n        })\n        return data;\n    }),\n    licenceIsValid: computed('',function() {\n        let valid = false;\n        try {\n            valid = this.session.data.authenticated.isValid;\n        } catch {}\n        return valid;\n    }), \n\n    actions:{\n        async saveAnchors(){\n            try{\n                let anchors = this.get(\"instrument.anchors\");\n                let anchorMap = {};\n\n                (anchors.content ?? anchors).forEach(anchor => {\n                anchorMap[anchor.get(\"number\")] = anchor;\n                });\n                let savePromises = [];\n\n                let channels = this.get(\"instrument\").channelsNum;\n                for (let i = 0; i < channels; i ++){\n                    let anchorNumber = i;\n                    let newDistance = (i === 0)\n                        ? 0\n                        : this.get(\"anchorDiagramInputInitalValue\")[`channel_${i}`] \n                            ? this.get(\"anchorDiagramInputInitalValue\")[`channel_${i}`]\n                            : 0;\n  \n                    let existingAnchor = anchorMap[anchorNumber];\n                    if (existingAnchor) {\n                        // Update if value changed\n                        if (existingAnchor.get(\"distance\") !== newDistance) {\n                            existingAnchor.set(\"distance\", newDistance);\n                            savePromises.push(existingAnchor.save());\n                        }\n\n                    } else {\n                        // Create new anchor\n                        let newAnchor = this.get(\"store\").createRecord(\"anchor\", {\n                            instrument: this.get(\"instrument\"),\n                            number: anchorNumber,\n                            distance: newDistance\n                        });\n\n                        savePromises.push(newAnchor.save());\n                    }\n                }\n                await Promise.all(savePromises);\n                window.location.reload();\n            }\n            catch(error){\n                console.log(\"Error in saveAnchors: \" + error)\n                console.log(error);\n            }\n        },\n        updateChannelInput(key, value){\n            try{\n                let anchors = this.get(\"anchorDiagramInputInitalValue\");\n                anchors[key] = value ? value : 0;\n                this.set(\"anchorDiagramInputInitalValue\", anchors)\n            }\n            catch(error){\n                console.log(\"Error in updateChannelInput: \" + error)\n            }\n        },\n        cycleEditAnchorDiagram(){\n            let data = {};\n            ((_a) => _a.content ?? _a)(this.get(\"instrument\").anchors).forEach((anchorObj, i)=>{\n                if(i == 0){\n                    \n                }\n                else{\n                    data[`channel_${i}`] = anchorObj.distance;\n                }\n            })\n            this.set(\"anchorDiagramInputInitalValue\", data)\n            this.set(\"isEditAnchorDiagram\", !this.get(\"isEditAnchorDiagram\"));\n        },\n        cycleActionBar(tabName){\n            if (tabName === this.activeActionTab){\n                this.set(\"activeActionTab\", null);\n            }\n            else{ \n                this.set(\"activeActionTab\", tabName);\n            }\n        },\n        async jumpToPage(page){\n            try{\n                if(page != \"...\"){\n                    this.set('paginationSearchConfig.pagination.page', Number.parseInt(page))\n                    await this.getAlertsList();\n                }\n            }\n            catch(err){\n\n            }\n        },\n        cycleAlertsListVisibility(){\n            this.set(\"isAlertsListVisible\", !this.get(\"isAlertsListVisible\"));\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        updatePage(){\n            let store = this.get('store');\n            let instrument = this.get('instrument');\n            //let instrument = this.get('tableRow');\n            try {\n                let stiffness = instrument.get('elasticLimitFce') / instrument.get('elasticLimitPct');\n                stiffness = Math.round(stiffness * 1000) / 1000;\n                instrument.set('instrumentStiffness', stiffness);\n            } catch (ex) {\n                instrument.set('instrumentStiffness', 0);\n            }\n            instrument.save();\n        },\n        viewData(id) {\n            let endDateObj = new moment();\n            let startDateObj = moment(endDateObj).subtract(7, 'days').format('YYYY-MM-DDTHH:mm');\n            let formattedEndDateObj = endDateObj.format('YYYY-MM-DDTHH:mm');\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\");\n            this.get('router').transitionTo('raw-data', id, { queryParams: {\"advancedStartDate\": startDateObj, \"advancedEndDate\": formattedEndDateObj, \"advancedYAxisUnit\": baseUnit}});\n\n            //this.viewData(id);\n        },\n        tGraph(id) {\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\") || \"RAW\";\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values', { queryParams: { \"advancedYAxisUnit\": baseUnit}});\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        sGraph(id) {\n            this.get('router').transitionTo('spatial-graphs.spatial-graph', id, 'displacement-values');\n            //this.sGraph(id, 'displacement-values');\n        },\n        saveInstrument(){\n            const _this = this;\n            // console.log(\"test\");\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/instruments\";    \n                }\n            } else {\n                window.location.href = \"/instruments\";\n            }            \n        }\n    }\n})\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { copy } from 'ember-copy';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'spatial-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    progressAnimationDuration: 100, //set 50, was 700\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 50, //set 25, was 500\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return this.get('blastEvents').map(function(event) {\n                return {\n                    type: 'Blast',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n            var chartData = { values: item.get(\"values\") };\n\n            var modelName = this.get('chartDataModelName');\n\n            if (modelName === 'strain-values' || modelName === 'load-values') { \n                var plated = this.get('instrument').get('plated');\n                //var type = this.get('instrument').get('instrumentType').get('title');\n                //console.log(type);\n                \n                chartData.values.splice(0,1);\n                chartData.values.unshift(0);\n                if(plated) {\n                    chartData.values.push(chartData.values[chartData.values.length - 1]);\n                } else {\n                    chartData.values.push(0);\n                }\n            }\n                        \n            return chartData;\n        } catch (error) {\n            return [];\n        }\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n        try {\n            return { values: item.get(\"values\") };            \n        } catch (error) {\n            return [];\n        }\n    }),\n\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n            if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {\n                anchorDistances.splice(0, 1);\n            }\n\n        return anchorDistances;\n    }),\n\n    anchorAXDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n\n        let midPoints = [];\n\n        if(this.get('instrument').get('stacked')) {\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            \n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n\n            let midLeft = [];\n            for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n            }\n            midPoints = midLeft;\n        } else { //staggered\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n    \n            midPoints = $.map(anchorDistances.slice(1, center + 1), function(v, i) {\n                return [v, anchorDistances.slice(center + 1)[i]];\n              });\n\n            midPoints.unshift(headExclusion);\n            let mid_temp = [];\n            for(let ctr = 1;ctr < midPoints.length; ctr++) {\n                mid_temp.push((midPoints[ctr - 1] + midPoints[ctr]) / 2);\n            }\n            midPoints = mid_temp;\n\n            if (modelName === 'bending-strain-values') {\n                midPoints.shift();\n                midPoints.pop();\n            }    \n            \n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n        \n        //console.log(midPoints);\n        \n        return midPoints;\n    }),\n\n    anchorBXDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n\n        let midPoints = [];\n\n        if(this.get('instrument').get('stacked')) {\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            \n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n\n            let midLeft = [];\n            for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n            }\n            midPoints = midLeft;\n        } else {\n\n        let center = anchorDistances.length - 1;\n        center = Math.ceil(center / 2);\n\n        midPoints = $.map(anchorDistances.slice(1, center + 1), function(v, i) {\n            return [v, anchorDistances.slice(center + 1)[i]];\n          });\n            midPoints.shift();\n            midPoints.pop();                  \n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n\n        return midPoints;\n    }),\n\n    // calculate mid distances between anchors for strain values\n    anchorMidDistances: computed('anchorDistances', function() {\n        let anchorDistances = copy(this.get('anchorDistances')),\n            dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            midDistances = []\n        ;\n\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n            if (this.get('instrument').get('stacked')) {\n                anchorDistances.shift(0);\n                let finalSize = anchorDistances.length / 2;\n                while (anchorDistances.length > finalSize) {\n                    anchorDistances.pop(finalSize);\n                }\n                anchorDistances.unshift(this.get('instrument').get('headExclusionLength'));\n            } else { //staggered\n\n            }\n        } else { //not rebar\n            anchorDistances.unshift(0);\n        }\n\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            let mid = (anchorDistances[i] + anchorDistances[i + 1]) / 2;\n            midDistances.push( +mid.toFixed(2) );\n        }\n\n        if(type === 'dCable') {\n            midDistances.splice(0,1);\n            //midDistances.unshift(0);\n            midDistances[0] = 0;\n            var len = this.get('instrument').get('length');\n            var length = this.get('instrument').get('instrumentLength');\n\n            var modelName = this.get('chartDataModelName');\n            if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {    \n                if(length !== null && length !== 0) {\n                    midDistances.push(length);\n                } else {\n                    midDistances.push(anchorDistances[anchorDistances.length - 1]);\n                }\n            }\n        }\n        // console.log(\"Anchors: \" + anchorDistances);\n         //console.log(\"Mids: \" + midDistances);\n\n        return midDistances;\n    }),\n\n    anchorColors: d3.scale.category10().range(),\n\n    anchorDistancesChartReferencePoints: computed('chartDataModelName', 'instrument', 'anchorDistances', 'anchorMidDistances', 'anchorAXDistances', 'anchorBXDistances', function() {\n        let anchorDistances = this.get('anchorDistances');\n        var modelName = this.get('chartDataModelName');\n        var anchorMidDistances = this.get('anchorMidDistances');\n\n        //console.log(this.get('instrument').get('instrumentTypeID'));\n\n        if(this.get('instrument').get('instrumentTypeID') === 3) {//rebar \n            if(this.get('instrument').get('stacked')) { //is stacked\n                if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                    anchorDistances = this.get('anchorAXDistances');\n                } else if (modelName === 'bending-strain-values') {\n                    anchorDistances = this.get('anchorBXDistances');\n                }\n            } else { //is NOT stacked\n                if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                    anchorDistances = this.get('anchorAXDistances');\n                } else if (modelName === 'bending-strain-values') {\n                    anchorDistances = this.get('anchorBXDistances');\n                }\n            }\n        }\n\n        if (this.get('instrument').get('instrumentType').get('title') !== 'dRebar') {\n            if(modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                return anchorMidDistances.map(function(anchorDistance){\n                    return {\n                        key: anchorDistance,\n                        type: 'referencePoints',\n                        values: [\n                            anchorDistance\n                        ]\n                    };\n                });\n                    \n            }\n        }\n\n        return anchorDistances.map(function(anchorDistance){\n            return {\n                key: anchorDistance,\n                type: 'referencePoints',\n                values: [\n                    anchorDistance\n                ]\n            };\n        });\n    }),\n\n    inlineHoverValuesSideOffset: computed('chartDataModelName', function() {\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'load-values') {\n            return 28;\n        } else if((modelName === 'axial-strain-values' || modelName === 'bending-strain-values') && this.get('instrument').get('stacked')) {\n            return 28;\n        }\n        return 0;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints'),\n            anchorDistances = this.get('anchorDistances'),\n            anchorAXDistances = this.get('anchorAXDistances'),\n            anchorBXDistances = this.get('anchorBXDistances'),\n            anchorDistancesChartReferencePoints = this.get('anchorDistancesChartReferencePoints'),\n            anchorMidDistances = this.get('anchorMidDistances')\n        ;\n        let zoomChartLinesData = [];\n\n        var modelName = this.get('chartDataModelName');\n\n        \n        if (modelName === 'strain-values' || modelName === 'load-values') { \n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorMidDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            }).sortBy('timestamp');\n        } else {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            }).sortBy('timestamp');\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (anchorDistancesChartReferencePoints) {\n            zoomChartLinesData = zoomChartLinesData.concat(anchorDistancesChartReferencePoints);\n        }\n\n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        var modelName = this.get('chartDataModelName');\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        if(type === 'dCable') {\n            if(modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                //console.log(fullRangeDataPoints);\n                fullRangeDataPoints.forEach(element => element.values[0]=0);\n            }\n        }\n        \n\n        let ad = anchorDistances.map(function(chartLineName, chartLineIndex){\n            \n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[chartLineIndex]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n        // console.log(\"AD::::::::::: \" + JSON.stringify(ad));\n        return ad;\n    }),\n\n    numLines: computed('zoomTimePoints', function() {\n        return this.get('zoomTimePoints').length;\n    }),\n\n    lineDrawDelay: computed('numLines', function() {\n        return (13000 / (this.get('numLines') + 1)) ^ (1 / 20);\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').queryRecord('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            inlineHoverValuesSideOffset = _this.get('inlineHoverValuesSideOffset'),\n            progressAnimationDuration = _this.get('progressAnimationDuration'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];//.get('firstObject');\n\n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let axisName = '';\n                let units = chartData.get('units');\n                switch(yAxisLegend.get('title')) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n                \n                if(yAxisLegend.get('title')==='load') {\n                    title = axisName + \" (kN)\";;\n                    \n                } else {\n                    title = axisName + \" (\" + units + \")\";;\n                }\n            }\n\n            let zoomChart = nv.models.lineChartProgressAnimationAPI()\n                .margin({top: 55, right: 10, bottom: 85, left: 60})\n                .useInteractiveGuideline(false)\n                .x(function(d) { \n                    // console.log(\"X in zoomChart:::: \" + d[0]);\n                    return d[0]; \n                })\n                .y(function(d) { return d[1]; })\n                .distXAxisScale(function(d) { \n                    // console.log(\"X in zoomChart:::: \" + d[1]);\n                    // console.log(\"distXAxis in zoomChart:::: d[0]:::::::::::::::: \" + d[1]);\n                    return d[1]; \n                })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .showLegend(true)\n                .progressAnimationDuration(progressAnimationDuration)\n                .showXAxis(true)\n                .noData('No usable data');\n\n\n            let length = 0;\n            try {\n                length = _this.instrument.get('instrumentLength');\n                let type = _this.instrument.get('instrumentType');\n            } catch (ex) {\n\n            }\n            \n            if(length !== null && length === 0) {\n                length = 0;\n            }\n\n            zoomChart.forceX([0, length]);\n/*             if (yAxisLegend.get('title') != 'bending_strain' && yAxisLegend.get('title') != 'axial_strain') {\n                \n            }\n */\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false);\n                zoomChart.yAxis\n                    .axisLabel(title)\n                    .tickFormat(d3.format(\".2f\"));\n                \n                zoomChart.distXAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .ticks(5)\n                    .tickFormat(function(d) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        // console.log(\"d::::: \" + d);\n                        // console.log(\"fullRangeChartLinesData::::: \" + fullRangeChartLinesData.length);\n                        // console.log(\"fullRangeChartLinesData[0].values[0][0]::::: \" + fullRangeChartLinesData[0].values[0][0]);\n                        // console.log(\"fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0]:::::: \" + fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0] )\n                        if (fullRangeChartLinesData.length > 0) {\n                            fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(45)\n                    .isDistXTooltip(isDistXTooltip)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2);\n\n                //zoomChart.legend.inlineHoverValuesSideOffset(inlineHoverValuesSideOffset);\n\n                zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log('test');\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n\n                    if (!seismicEventsArray.length || !blastEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (!activeTooltipContent) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                return zoomChart;\n            });\n\n            // declare fullRangeChart because later in zoom chart we need axis from fullRangeChart for events axis on zoomChart\n            let fullRangeChart = nv.models.focus(nv.models.line())\n               .margin({top: 10, right: 10, bottom: 30, left: 60})\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .syncBrushing(false)\n                .independentBrushing(true)\n                .showXAxis(true)\n                .showYAxis(false)\n                ;\n\n\n            nv.addGraph(function() {\n\n                fullRangeChart.xAxis\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n                fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n                fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(fullRangeChart.update);\n\n                // set zoom based on query params if set\n                let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n                let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n                if (startTimestamp && endTimestamp) {\n                    fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n                }\n\n                return fullRangeChart;\n            });\n\n        });\n\n    }\n\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n//import JSONAPISerializer from '@ember-data/serializers/json';\n\nexport default Component.extend({\n\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n    yAxisUnit:null,\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if(yAxisUnitParam){\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    // console.log(\"seismicEventsChartDistXData::::::::::::::::::::\" + event.get('timestamp') + \" \" + event.get('size'));\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    // vibeEventsChartDistXData: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log('vibeEvents');\n    //     //console.log(events);\n    //     if ( this.get('vibeEvents') ) {\n    //         return [{\n    //             key: 'BluVibe',\n    //             type: 'distX',\n    //             color: '#80bf5c',\n    //             values: this.get('vibeEvents').map(function(event) {\n    //                 return [\n    //                     moment( event.get('id') ).valueOf(),\n    //                     event.get('size') ? (event.get('size') * -20) + 20 : 20\n    //                 ];\n    //             })\n    //         }];\n    //     }\n    //     return false;\n    // }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    //console.log(\"blastEventsChartDistXData::::::::::::::::::::\" + event.get('timestamp') + \" \" + event.get('size'));\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        let tempSeismicEventsArray = this.get('seismicEvents');\n        if ( tempSeismicEventsArray ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sortBy('time');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        let display = null;\n        let blastEvents = this.get('blastEvents'); \n        if ( blastEvents ) {\n            let data_set = this.get('blastEvents').map(function(event) {                \n                let displayTime = event.get('timestamp');\n                let displayTimestamp = moment( displayTime ).format(\"DD MMM, YYYY HH:mm:ss\");\n                let displayEventSize = event.get('size') ? (event.get('size') * -15) + 15 : 15;\n                let displayTonnes = event.get('tonnes');\n                let displayLocation = event.get('location');\n                // console.log(\"blastEventsArray::: \" + displayTime + \" \" + displayTimestamp + \" \" + displayEventSize + \" \" + displayTonnes + \" \" + displayLocation);\n                display = {\n                    type: 'Blast',\n                    time: displayTime,\n                    timestamp: displayTimestamp,\n                    eventSize: displayEventSize,\n                    tonnes: displayTonnes,\n                    location: displayLocation\n                };\n                // console.log(\"blastEventsArray::: \" + display);\n                return display;\n            }).sortBy('time');\n            // console.log(data_set);\n            return data_set;\n        }\n        return false;\n    }),\n\n    // vibeEventsArray: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log(events);\n    //     if ( events ) {\n    //         return events.map(function(event) {\n    //             return {\n    //                 type: 'BluVibe',\n    //                 time: event.get('id'),\n    //                 timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n    //                 ppa: event.get('ppa'),\n    //                 ppv: event.get('ppv'),\n    //                 freq: event.get('frequency')\n    //             };\n    //         }).sortBy('time');\n    //     }\n    //     return false;\n    // }),\n\n    zoomTempPoints: map('zoomTempData', function(item){\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        return chartData;\n    }),\n\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n\n        //console.log(linesKyes);\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        var modelName = this.get('chartDataModelName');\n\n        // console.log(\"modelName: \" + modelName);\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') { \n            var plated = this.get('instrument').get('plated');\n            \n            if(plated) {\n                chartData.values[0] = chartData.values[1];\n            } else {\n                chartData.values[0] = 0;\n            }\n            chartData.values.push(0);\n        }\n        // console.log(chartData);\n        return chartData;\n        } catch(e) { return { values: [] }; }\n    }),\n\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n\n/*     fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        let chartData = this.get('fullRangeChartData');\n        let dataValuesCount;\n        try {\n            dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n        let anchors = this.get('instrument').get('anchors');\n        \n        const arr = anchors.content ?? anchors;\n        \n        let anchorDistances = arr.map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        //anchorDistances.push('T'); //TODO: add temperature\n\n        //IF chart is Strain-Values chart\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') { \n            var midPoints = [];\n            //Adjust anchors to mid points between anchors\n            for(var ctr = 1; ctr < anchorDistances.length ; ctr++) {\n                var mid = (anchorDistances[ctr - 1] + anchorDistances[ctr]) / 2;\n                midPoints[ctr] = + mid.toFixed(2);\n            }\n\n            //console.log(midPoints);\n\n            //add zero point and end point\n            midPoints.splice(0,1);\n            midPoints[0] = 0;\n            midPoints.push(anchorDistances[anchorDistances.length - 1]);  //TODO: change to length of exto once known\n            //console.log(midPoints);\n            if(modelName==='displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        }\n        //console.log(anchorDistances);\n        return anchorDistances;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTempPoints = this.get('zoomTempPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n\n        //console.log(blastEventsChartDistXData);\n        //console.log(vibeEventsChartDistXData);\n\n        let anchorDistances = this.get('anchorDistances'),\n            zoomChartLinesData = []\n        ;\n\n        var mName = _this.get('chartDataModelName');\n        if (mName === 'strain-values' || mName === 'strain-rate-values' || mName === 'load-values') {\n            zoomDataPoints.forEach(element => element.values[0] = 0);\n        }\n\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n        //console.log(zoomTempPoints.length);\n\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            if (_this.get('chartDataModelName') !== 'displacement-values'){\n                while(zoomTempPoints.length > zoomDataPoints.length) {\n                    zoomTempPoints.pop();\n                    zoomTempPoints.shift();\n                }\n            }\n            var temp = {key: 'T',\n                type: 'lines',\n                yAxis: 2,\n                values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null,\n                    ];\n                })\n            };\n            //console.log(temp);\n            zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (vibeEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        }\n        \n        // console.log(zoomChartLinesData);\n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_');\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        //let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n        \n        let seismicEventsArray = this.get('seismicEventsArray');\n        let  blastEventsArray = this.get('blastEventsArray');\n        // TODO::: fix me\n        //vibeEventsArray = this.get('vibeEventsArray'),\n        let zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg');\n        let fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg');\n        let yAxisLegend = this.get('yAxisLegend');\n        let apiCallsPromises = yAxisLegend;\n        \n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n                \n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let instType = \"dCable\";\n\n                let axisName = '';\n                let units = chartData.get('units');\n                title = yAxisLegend.get('title');\n                \n                switch(title) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    case 'temperature':\n                        axisName = \"Temperature\";\n                        units = \"°C\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                        //console.log(title);\n                }\n\n                if (yAxisLegend) {\n                    let raw = _this.raw;\n                    if(yAxisLegend.get('title')==='load') {\n                        title = axisName + \" (kN))\";\n                    } else {\n                        title = axisName + \" (\" + units + \")\";\n                    }\n                } else {\n                    title = axisName + \" (\" + units + \")\";\n                }\n                //title = yAxisLegend.get('unit');\n            }\n\n            function usesPoints(chartName) {\n                //console.log(chartName);\n                switch(chartName) {\n                    case 'event-ppv':\n                    case 'event-ppa':\n                        return true;\n                }\n                return false;\n            }\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(usesPoints(_this.get('chartDataModelName')))\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data')\n            ;\n\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n\n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    console.log(\"brushExtent[0]\");\n                    console.log(brushExtent[0])\n                    console.log(\"brushExtent[1]\");\n                    console.log(brushExtent[1])\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = `<span class=\"event-type\">PPV - ${this.yAxisUnit ? this.yAxisUnit == \"RAW\" ? \"mm\" : this.yAxisUnit : \"mm\"}: ` + tooltipContent.ppv + `<br />PPA - ${this.yAxisUnit ? this.yAxisUnit == \"RAW\" ? \"mm\" : this.yAxisUnit : \"mm\"}&#178;: ` + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(vibeEventsArray);\n                    //console.log(distXMouseMove);\n/* \n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    } */\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length){ // || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            //activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) { _this.setData(zoomChartLinesData); }\n                if (_this.setChart) { _this.setChart(zoomChart); }\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n\n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    isModalOpen: false,\n    modalMode: 'add', // 'add' | 'edit'\n    modalEditingRowId: null,\n\n    // Per-anchor labels:\n    //   tableLabel — what shows in the table column header (raw distance value, legacy behavior).\n    //                Empty string when distance is missing.\n    //   modalLabel — what shows as the modal field label (\"Anchor 1\", \"Anchor N/A\" per spec).\n    anchorLabels: computed('instrument', function(){\n        const anchors = this.get('instrument') ? this.get('instrument').get('anchors') : null;\n        const arr = (anchors && (anchors.content ?? anchors)) || [];\n        let validCounter = 0;\n        return arr.map((anchor, idx) => {\n            const distance = anchor.get ? anchor.get('distance') : (anchor && anchor.distance);\n            const isUnset = (distance == null || distance === '');\n            if(isUnset){\n                return { index: idx, tableLabel: '', modalLabel: 'Anchor N/A', isUnset: true };\n            }\n            validCounter += 1;\n            return { index: idx, tableLabel: String(distance), modalLabel: `Anchor ${validCounter}`, isUnset: false };\n        });\n    }),\n\n    // Header row labels for the table + modal field metadata.\n    columnSpecs: computed('anchorLabels', function(){\n        const anchors = this.get('anchorLabels') || [];\n        const out = anchors.map((a) => ({\n            key: `anchor_${a.index}`,\n            label: a.modalLabel,\n            tableLabel: a.tableLabel,\n            valuesIndex: a.index,\n        }));\n        out.push({ key: '__temp__', label: 'Temperature', tableLabel: 'Temperature', isTemp: true });\n        return out;\n    }),\n\n    // Each row: { id, date, formattedDate, cells: [{ key, label, value }] }\n    tableRows: computed('displacementData.[]', 'temperatureData.[]', 'columnSpecs', 'globalDatetimeFormat.value', function(){\n        const dispData = this.get('displacementData') || [];\n        const tempData = this.get('temperatureData') || [];\n        const specs = this.get('columnSpecs') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n\n        const tempById = {};\n        tempData.forEach(r => { tempById[r.id] = r; });\n\n        return dispData.map((dispRow) => {\n            const id = dispRow.id;\n            const dispValues = (dispRow.values || dispRow.get?.('values') || []);\n            const tempRow = tempById[id];\n            const tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n\n            const cells = specs.map((spec) => {\n                let value = '';\n                if(spec.isTemp){\n                    value = tempValues[0];\n                }else{\n                    value = dispValues[spec.valuesIndex];\n                }\n                return { key: spec.key, label: spec.label, value: value == null ? '' : value };\n            });\n            const formattedDate = moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt);\n            return { id, date: id, formattedDate, cells };\n        });\n    }),\n\n    modalFields: computed('columnSpecs', 'modalMode', 'modalEditingRowId', 'tableRows.[]', function(){\n        const specs = this.get('columnSpecs') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingRowId');\n\n        let existingRow = null;\n        if(mode === 'edit' && editingId){\n            existingRow = (this.get('tableRows') || []).find(r => r.id === editingId);\n        }\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && existingRow\n                ? moment(existingRow.date, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm')\n                : moment().format('YYYY-MM-DDTHH:mm'),\n        };\n\n        const cellByKey = {};\n        if(existingRow){\n            existingRow.cells.forEach(c => { cellByKey[c.key] = c.value; });\n        }\n\n        const channelFields = specs.map((spec) => ({\n            key: spec.key,\n            label: spec.label,\n            type: 'text',\n            value: cellByKey[spec.key] != null ? cellByKey[spec.key] : '',\n        }));\n\n        return [dateField, ...channelFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function(){\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingRowId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingRowId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const instrumentId = this.get('instrument.id');\n            const dispData = this.get('displacementData');\n            const tempData = this.get('temperatureData');\n            const dispRow = dispData ? dispData.find(r => r.id === rowId) : null;\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            const promises = [];\n            if(dispRow && dispRow.deleteRecord){ dispRow.deleteRecord(); promises.push(dispRow.save(adapterOptions)); }\n            if(tempRow && tempRow.deleteRecord){ tempRow.deleteRecord(); promises.push(tempRow.save(adapterOptions)); }\n            Promise.all(promises)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        /**\n         * Save handler — rebuilds displacement.values and temperature.values from the modal snapshot.\n         * - Add → store.createRecord\n         * - Edit, date unchanged → mutate existing record's `values`, save() (PATCH)\n         * - Edit, date changed   → delete old records, create new at the new timestamp\n         */\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const specs = this.get('columnSpecs') || [];\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            const dispValues = [];\n            specs.forEach((spec) => {\n                if(spec.isTemp){ return; }\n                dispValues.push(Number(snapshot[spec.key]) || 0);\n            });\n            const tempValues = [Number(snapshot['__temp__']) || 0];\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingRowId');\n\n            const tempData = this.get('temperatureData') || [];\n            const dispData = this.get('displacementData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            if(isEdit && originalId === newId){\n                const tempRow = findRow(tempData, originalId);\n                const dispRow = findRow(dispData, originalId);\n                const promises = [];\n                if(tempRow){ tempRow.set('values', tempValues); promises.push(tempRow.save(adapterOptions)); }\n                if(dispRow){ dispRow.set('values', dispValues); promises.push(dispRow.save(adapterOptions)); }\n                Promise.all(promises).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                const oldDisp = findRow(dispData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n                if(oldDisp){ oldDisp.deleteRecord(); oldDisp.save(adapterOptions); }\n            }\n\n            const tempRecord = store.createRecord('temperature-value', { id: newId, values: tempValues });\n            tempRecord.save(adapterOptions);\n\n            const dispRecord = store.createRecord('displacement-value', { id: newId, values: dispValues });\n            dispRecord.save(adapterOptions).then(refreshRoute).catch(handleErr);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import Chart from 'chart.js/auto';\nimport zoomPlugin from 'chartjs-plugin-zoom';\nexport function buildScatterChartDataSet(context, dataArray, axisProperties={xAxisDisplay: true, xAxisLabel: \"\", yAxisDisplay: true, yAxisLabel: \"\"}) {\n    /**\n     * data array will be object for each dataset.\n     * eg:\n     * [\n        * {\n            * label:\"\",\n            * data:[{x,y},...],\n        * },\n        * {\n            * label:\"\",\n            * data:[{x,y},...],\n        * },\n        * {\n            * label:\"\",\n            * data:[{x,y},...],\n        * },..\n     */\n    // console.log('In buildChartDataSet, dataArray:')\n    // console.log(dataArray)\n\n    const colorPalette = [\n        '#FF0000', // Bright Red\n        '#00BFFF', // Deep Sky Blue\n        '#32CD32', // Lime Green\n        '#FFA500', // Orange\n        '#FF69B4', // Hot Pink\n        '#8A2BE2', // Blue Violet\n        '#00CED1', // Dark Turquoise\n        '#FF4500', // Orange Red\n        '#7FFF00', // Chartreuse\n        '#1E90FF', // Dodger Blue\n        '#FF1493', // Deep Pink\n        '#FFD700', // Gold\n        '#00FF7F', // Spring Green\n        '#9932CC', // Dark Orchid\n        '#FF6347', // Tomato\n        '#20B2AA', // Light Sea Green\n        '#ADFF2F', // Green Yellow\n        '#DC143C', // Crimson\n        '#00FF00', // Lime\n        '#FF00FF', // Magenta\n    ];\n\n\n    let datasets = [];\n    try{\n        dataArray.forEach((dataObj, index)=>{\n            let dataSetObj = {};\n            dataSetObj[\"label\"] = dataObj[\"label\"];\n            dataSetObj[\"data\"] = dataObj[\"data\"];\n            dataSetObj[\"backgroundColor\"] = colorPalette[index];    \n            dataSetObj[\"pointRadius\"] = 2.5;          // Controls the size of dots\n            dataSetObj[\"pointHoverRadius\"] = 5.5;     // Optional: enlarge dot on hover\n            datasets.push(dataSetObj);\n        });\n        context.chart.options.scales.x.title ={ display: axisProperties['xAxisDisplay'], text: axisProperties['xAxisLabel'] }\n        context.chart.options.scales.y.title ={ display: axisProperties['yAxisDisplay'], text: axisProperties['yAxisLabel']};\n        updateScatterXYMinMax(context, datasets);\n    }\n\n    catch (error) {\n        console.error('Error buildScatterChartDataSet:', error);\n    }\n\n    // console.log('In buildChartDataSet, datasets:')\n    // console.log(datasets)\n    return datasets;\n}\n\nexport function updateChart(context, scatterConvertedDataset) {\n    try{\n        if (!context.chart) return;\n    \n        context.chart.data.datasets = scatterConvertedDataset  ; \n        // console.log(scatterConvertedDataset)\n        // console.log(`datasets length :${scatterConvertedDataset.length}`)\n    \n        context.chart.update(); // Refresh the chart with new data\n\n    }\n\n    catch (error) {\n        console.error('Error updateChart:', error);\n    }\n}\n\n\nexport function renderChart(context) {\n\n    const ctx = document.getElementById('chartjs-canvas').getContext('2d');\n\n    if (!ctx) {\n        console.error(\"mainChartCanvas not found in the DOM\");\n        return;\n    }\n\n    const xMin = context.get(\"advancedFilterObj.advancedXMin\");\n    const xMax = context.get(\"advancedFilterObj.advancedXMax\");\n    const yMin = context.get(\"advancedFilterObj.advancedYLeftMin\");\n    const yMax = context.get(\"advancedFilterObj.advancedYLeftMax\");\n    const noDataPlugin = {\n        id: 'noDataMessage',\n        beforeDraw(chart) {\n            const hasData = chart.data.datasets.some(ds => ds.data.length > 0);\n            if (hasData) return;\n\n            const { ctx, width, height } = chart;\n            ctx.save();\n            ctx.textAlign = 'center';\n            ctx.textBaseline = 'middle';\n            ctx.font = '16px sans-serif';\n            ctx.fillStyle = 'black';\n            ctx.fillText('No data available', width / 2, height / 2);\n            ctx.restore();\n        }\n    };\n    // Initialize the chart\n    Chart.register(zoomPlugin, noDataPlugin);\n    context.chart = new Chart(ctx, {\n        type: 'scatter',\n        data: {},\n        options: {\n            responsive: true,\n            scales: {\n                x: {\n                    min: xMin ?? undefined,\n                    max: xMax ?? undefined,\n                    title: { display: true, text: '' },\n                },\n                y: {\n                    min: yMin ?? undefined,\n                    max: yMax ?? undefined,\n                    title: { display: true, text: '' },\n                },\n            },\n            plugins: {\n                tooltip: {\n                    callbacks: {\n                        title: (tooltipItems) => {\n                            // Show dataset label as the color-coded title\n                            return tooltipItems[0].dataset.label;\n                        },\n                        label: (tooltipItem) => {\n                            const xLabel = tooltipItem.chart.options.scales.x.title.text || 'X';\n                            const yLabel = tooltipItem.chart.options.scales.y.title.text || 'Y';\n                            const date = tooltipItem.raw.date ? tooltipItem.raw.date : null ;\n                            const x = tooltipItem.raw.x;\n                            const y = tooltipItem.raw.y;\n                            return [`Date: ${date}`,`${xLabel}: ${x}`, `${yLabel}: ${y}`];\n                        }\n                    }\n                },\n                zoom: {\n                    pan: {\n                        enabled: true,\n                        mode: 'xy', // allows panning in both directions\n                    },\n                    zoom: {\n                        wheel: {\n                            enabled: true, // scroll to zoom\n                        },\n                        drag: {\n                            enabled: false,\n                        },\n                        mode: 'xy', // allows zooming both directions\n                    },\n                }, \n            },\n        },\n        plugins: [noDataPlugin]\n    });\n}\n\nexport function updateScatterZoomPan(context, datasets){\n    try{\n        if(context.chart){\n            context.chart.options.plugins.zoom.pan.enabled = context.get(\"scatterPlotOptions\")['pan'];\n            context.chart.options.plugins.zoom.zoom.wheel.enabled = context.get(\"scatterPlotOptions\")['zoom'] == \"Wheel\";\n            context.chart.options.plugins.zoom.zoom.drag.enabled = context.get(\"scatterPlotOptions\")['zoom'] == \"Drag\";\n        }\n        console.log(datasets)\n    }\n    catch (error) {\n        console.error('Error updateScatterZoomPan:', error);\n    } \n}\n\nexport function updateScatterXYMinMax(context){\n    const xMin = context.get(\"advancedFilterObj.advancedXMin\");\n    const xMax = context.get(\"advancedFilterObj.advancedXMax\");\n    const yMin = context.get(\"advancedFilterObj.advancedYLeftMin\");\n    const yMax = context.get(\"advancedFilterObj.advancedYLeftMax\");\n    try{\n        console.log(context.chart.data);\n        // if(context.chart){\n        //     if(xMin){\n        //         context.chart.options.scales.x.min = xMin;\n        //     }\n        //     if(xMax){\n        //         context.chart.options.scales.x.max = xMax;\n        //     }\n        //     if(yMin){\n        //         context.chart.options.scales.y.min = yMin;\n        //     }\n        //     if(yMax){\n        //         context.chart.options.scales.y.min = yMax;\n        //     }\n        // }\n        context.chart.update();\n    }\n    catch (error) {\n        console.error('Error updateScatterXYMinMax:', error);\n    } \n}\n\nexport function getXYValueObj(){\n    let xyValueObj = {};\n\n    const queryParams = new URLSearchParams(window.location.search);\n\n    const advancedEndDate = queryParams.get('advancedEndDate');\n    const advancedStartDate = queryParams.get('advancedStartDate');\n    const advancedXMax = queryParams.get('advancedXMax');\n    const advancedXMin = queryParams.get('advancedXMin');\n    const advancedYAxisUnit = queryParams.get('advancedYAxisUnit');\n    const advancedYLeftMax = queryParams.get('advancedYLeftMax');\n    const advancedYLeftMin = queryParams.get('advancedYLeftMin');\n\n    xyValueObj[\"advancedEndDate\"]   = advancedEndDate ? advancedEndDate : null;\n    xyValueObj[\"advancedStartDate\"] = advancedStartDate ? advancedStartDate : null;\n    xyValueObj[\"advancedXMax\"]      = advancedXMax ? Number.parseFloat(advancedXMax) : null;\n    xyValueObj[\"advancedXMin\"]      = advancedXMin ? Number.parseFloat(advancedXMin) : null; \n    xyValueObj[\"advancedYAxisUnit\"] = advancedYAxisUnit ? advancedYAxisUnit : null; \n    xyValueObj[\"advancedYLeftMax\"]  = advancedYLeftMax ? Number.parseFloat(advancedYLeftMax) : null;\n    xyValueObj[\"advancedYLeftMin\"]  = advancedYLeftMin ? Number.parseFloat(advancedYLeftMin) : null; \n    return xyValueObj;\n\n}","export { default } from 'ember-leaflet/components/circle-layer';\n","export { default } from 'ember-leaflet/components/circle-marker-layer';\n","import { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    store: service(),\n    session: service(),\n    userProfileService: service(),\n\n    selectedEvaluationObj:null,\n\n    EVALUATION_TYPE_OBJECTS:[\n      {\n        id:\"OOR_ARBITRARY\",\n        label:\"Arbitrary Value\",\n        description: \"Triggers an alert when one or more channel readings fall outside user-defined minimum or maximum thresholds. Each new reading is evaluated independently without historical comparison.\"\n      },\n      {\n        id:\"OOR_REFERENCE\",\n        label:\"Reference Reading\",\n        description: \"Triggers an alert when the difference between a channel's current reading and its configured reference reading exceeds a user-defined delta. Each new reading is evaluated independently.\"\n      },\n      {\n        id:\"DHQ_NO_DATA\",\n        label:\"No Data Trend\",\n        description: \"Triggers an alert when no readings are received from the instrument within a user-defined time duration. Evaluation is time-driven and continuously checks the elapsed time since the last received data.\"\n      },\n      {\n        id:\"DHQ_FLATLINE\",\n        label:\"Flatline Trend\",\n        description: \"Triggers an alert when one or more selected channels show no significant change in displacement over a user-defined time duration. Evaluation is performed on new readings by comparing displacement variation against a configured flatline threshold.\"\n      },\n      {\n        id:\"DHQ_SPIKE\",\n        label:\"Data Spike Trend\",\n        description: \"Triggers an alert when the change in displacement between consecutive readings exceeds a user-defined spike threshold for one or more selected channels. Evaluation is performed on each new reading.\"\n      },\n      {\n        id:\"ROC_ROLLING\",\n        label:\"Rolling Window\",\n        description: \"Triggers an alert when the calculated rate of change over a user-defined rolling time window exceeds a configured threshold for one or more selected channels. Evaluation is performed on each new reading.\"\n      },\n      {\n        id:\"DISP_TEMP_CORRELATION\",\n        label:\"Disp-Temp Correlation Analysis\",\n        description: \"Triggers an alert when the relationship between displacement and temperature deviates from an expected correlation model. Evaluation is performed on new readings by comparing measured displacement against temperature-compensated or correlation-adjusted values.\"\n      }\n    ],\n\n    init(){\n        this._super(...arguments);\n        this.set(\"selectedEvaluationObj\", this.EVALUATION_TYPE_OBJECTS[0]);\n        let curr = this.get(\"alertProfileFormFinalData\");\n        curr[\"evaluation_type\"] = this.EVALUATION_TYPE_OBJECTS[0].id;\n        this.set(\"alertProfileFormFinalData\", curr);\n    },\n    clearParamsData:function(){\n      this.set(\"alertProfileFormParametersData\", {})\n    },\n    actions: {\n      onSelectedEvaluationTypeObj(obj){\n        this.clearParamsData();\n        this.set(\"selectedEvaluationObj\", obj);\n        let curr = this.get(\"alertProfileFormFinalData\");\n        curr[\"evaluation_type\"] = obj.id;\n        this.set(\"alertProfileFormFinalData\", curr);\n\n      }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport Choices from 'choices.js';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport intlTelInput from 'intl-tel-input';\n\n\nexport default Component.extend({\n    api:service(),\n    store: service(),\n    session: service(),\n    userProfileService: service(),\n    intlPhonePrefix: null,\n    phoneCountryCode: \"+1\",\n    APPROVED_INSTRUMENTS:[\"d-micro\", \"dExto\", \"dCable\", \"dRebar\", \"dMPBX\", \"dConv\", \"Adict\", \"dRebarv2\"],\n    selectedMethodDelivery:[],\n    METHOD_DELIVERY:[\n      {\n        id: \"NATIVE\",\n        value: \"Native\"\n      },\n      {\n        id: \"EMAIL\",\n        value: \"Email\"},\n      {\n        id: \"PHONE\",\n        value: \"Phone\"},\n    ],\n    MANDATORY_BODY: [\n        \"name\",\n        \"delivery_method\",\n        \"email\",\n        \"phone\",\n        \"instrument_id\",\n        \"evaluation_type\",\n        \"channels\",\n    ],\n    isLoading:false,\n    isEmailTestLoading:false,\n    isPhoneTestLoading:false,\n    emailErrorMessage:null,\n    phoneErrorMessage:null,\n    emailErrorColor: \"black\",\n    phoneErrorColor: \"black\",\n    emailMsgTimer: null,\n    phoneMsgTimer: null,\n    emailTags: [],\n    phoneTags: [],\n\n    // Saved Contacts / Contact Groups recipients\n    contactList: [],\n    groupList: [],\n    selectedContacts: [],   // [{ id, label, email, phone_number, use_email, use_phone }]\n    selectedGroups: [],     // [{ id, label, use_email, use_phone }]\n\n    selectedInstrument: null,\n    isSupportedInstrument:false,\n    selectedChannels:[],\n    init(){\n        this._super(...arguments);\n        this.set('emailTags', []);\n        this.set('phoneTags', []);\n        this.set('contactList', []);\n        this.set('groupList', []);\n        this.set('selectedContacts', []);\n        this.set('selectedGroups', []);\n        this.getContacts();\n        this.getGroups();\n    },\n    getContacts: async function(){\n        let url = `${getApiBaseUrl()}/api/contacts/`;\n        let response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: { \"Content-Type\": \"application/json\", Authorization: `Bearer ${localStorage.token}` },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json();\n            const list = (responseData.data || []).map(c => Object.assign({}, c, {\n                label: `${c.last_name || \"\"}, ${c.first_name || \"\"}`.trim()\n                    + (c.email ? ` — ${c.email}` : \"\")\n                    + (c.phone_number ? ` — ${c.phone_number}` : \"\")\n            }));\n            this.set(\"contactList\", list);\n        } else {\n            this.set(\"contactList\", []);\n        }\n    },\n    getGroups: async function(){\n        let url = `${getApiBaseUrl()}/api/contacts/groups/`;\n        let response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: { \"Content-Type\": \"application/json\", Authorization: `Bearer ${localStorage.token}` },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json();\n            const list = (responseData.data || []).map(g => Object.assign({}, g, {\n                label: `${g.name}${typeof g.contact_count === \"number\" ? ` (${g.contact_count})` : \"\"}`\n            }));\n            this.set(\"groupList\", list);\n        } else {\n            this.set(\"groupList\", []);\n        }\n    },\n    // Channel gate (master) — drives is_delivery_method + section enable/disable\n    emailChecked: computed(\"selectedMethodDelivery.[]\", function(){\n        return this.get(\"selectedMethodDelivery\").includes(\"EMAIL\");\n    }),\n    phoneChecked: computed(\"selectedMethodDelivery.[]\", function(){\n        return this.get(\"selectedMethodDelivery\").includes(\"PHONE\");\n    }),\n    recipientsEnabled: computed(\"emailChecked\", \"phoneChecked\", function(){\n        return this.get(\"emailChecked\") || this.get(\"phoneChecked\");\n    }),\n    directEmailDisabledStyle: computed(\"emailChecked\", function(){\n        return this.get(\"emailChecked\") ? \"\" : \"opacity:0.5;pointer-events:none;\";\n    }),\n    directPhoneDisabledStyle: computed(\"phoneChecked\", function(){\n        return this.get(\"phoneChecked\") ? \"\" : \"opacity:0.5;pointer-events:none;\";\n    }),\n    recipientsDisabledStyle: computed(\"recipientsEnabled\", function(){\n        return this.get(\"recipientsEnabled\") ? \"\" : \"opacity:0.5;pointer-events:none;\";\n    }),\n    emailDisabledBool: computed(\"emailChecked\", function(){\n        return !this.get(\"emailChecked\");\n    }),\n    phoneDisabledBool: computed(\"phoneChecked\", function(){\n        return !this.get(\"phoneChecked\");\n    }),\n    // chips decorated with per-recipient disabled flags (channel off OR contact lacks that method)\n    displaySelectedContacts: computed(\"selectedContacts.[]\", \"emailChecked\", \"phoneChecked\", function(){\n        const e = this.get(\"emailChecked\");\n        const p = this.get(\"phoneChecked\");\n        return (this.get(\"selectedContacts\") || []).map(c => Object.assign({}, c, {\n            emailDisabled: !(e && c.email),\n            phoneDisabled: !(p && c.phone_number),\n        }));\n    }),\n    displaySelectedGroups: computed(\"selectedGroups.[]\", \"emailChecked\", \"phoneChecked\", function(){\n        const e = this.get(\"emailChecked\");\n        const p = this.get(\"phoneChecked\");\n        return (this.get(\"selectedGroups\") || []).map(g => Object.assign({}, g, {\n            emailDisabled: !e,\n            phoneDisabled: !p,\n        }));\n    }),\n    // Rebuild the new-shape delivery payload from local state and write it onto the shared object.\n    _syncDeliveryPayload(){\n        const methods = this.get(\"selectedMethodDelivery\") || [];\n        const emailOn = methods.includes(\"EMAIL\");\n        const phoneOn = methods.includes(\"PHONE\");\n        const is_delivery_method = {\n            native_alert_trigger_method: methods.includes(\"NATIVE\"),\n            email_alert_trigger_method: emailOn,\n            phone_alert_trigger_method: phoneOn,\n        };\n        // re-clamp recipient channels so an unchecked channel can never leak into the payload\n        const delivery_method_data = {\n            email: emailOn ? (this.get(\"emailTags\") || []).slice() : [],\n            phone: phoneOn ? (this.get(\"phoneTags\") || []).slice() : [],\n            contacts: (this.get(\"selectedContacts\") || []).map(c => ({\n                id: c.id,\n                use_email: !!c.use_email && emailOn,\n                use_phone: !!c.use_phone && phoneOn,\n            })),\n            contact_groups: (this.get(\"selectedGroups\") || []).map(g => ({\n                id: g.id,\n                use_email: !!g.use_email && emailOn,\n                use_phone: !!g.use_phone && phoneOn,\n            })),\n        };\n        let curr = this.get(\"alertProfileFormFinalData\");\n        curr[\"is_delivery_method\"] = is_delivery_method;\n        curr[\"delivery_method_data\"] = delivery_method_data;\n        // purge any stale old-shape keys\n        delete curr[\"delivery_method\"];\n        delete curr[\"email\"];\n        delete curr[\"phone\"];\n        this.set(\"alertProfileFormFinalData\", curr);\n    },\n    didInsertElement() {\n        this._super(...arguments);\n        this._instrumentMap = {};\n        const select = this.element.querySelector('#instrument-id-search');\n        this.choices = new Choices(select, {\n            searchEnabled: true,\n            searchChoices: false,\n            searchFloor: 5,\n            searchResultLimit: 5,\n            placeholder: true,\n            placeholderValue: 'Search Instrument ID...',\n            shouldSort: false,\n            removeItemButton: false,\n            noResultsText: 'No instruments found',\n            noChoicesText: 'Type at least 4 characters...',\n            loadingText: 'Searching...',\n        });\n        select.addEventListener('search', (e) => {\n            const query = e.detail.value;\n            if (!query || query.length < 4) return;\n            this.store.query('instrument', { search: query, page_size: 10 }).then((results) => {\n                this._instrumentMap = {};\n                results.forEach(r => { this._instrumentMap[r.id] = r; });\n                const choices = results.map(r => ({ value: r.id, label: r.id }));\n                this.choices.setChoices(choices, 'value', 'label', true);\n                this.choices.showDropdown();\n            });\n        });\n        select.addEventListener('choice', (e) => {\n            const id = e.detail.value;\n            this.set('selectedInstrument', this._instrumentMap[id] || null);\n        });\n    },\n    willDestroyElement() {\n        this._super(...arguments);\n        if (this.choices) {\n            this.choices.destroy();\n            this.choices = null;\n        }\n        this._instrumentMap = null;\n        if (this.intlPhonePrefix) {\n            this.intlPhonePrefix.destroy();\n            this.intlPhonePrefix = null;\n        }\n    },\n    getName: computed(\"alertProfileFormFinalData\", function(){\n      return this.get(\"alertProfileFormFinalData\")?.name || \"\";\n\n    }),\n    getNote: computed(\"alertProfileFormFinalData\", function(){\n      return this.get(\"alertProfileFormFinalData\")?.note || \"\";\n    }),\n    clearEmailMessage() {\n        if (this.emailMsgTimer) clearTimeout(this.emailMsgTimer);\n        this.emailMsgTimer = setTimeout(() => {\n            if (!this.isDestroying && !this.isDestroyed) {\n                this.set(\"emailErrorMessage\", null);\n            }\n        }, 5000);\n    },\n    clearPhoneMessage() {\n        if (this.phoneMsgTimer) clearTimeout(this.phoneMsgTimer);\n        this.phoneMsgTimer = setTimeout(() => {\n            if (!this.isDestroying && !this.isDestroyed) {\n                this.set(\"phoneErrorMessage\", null);\n            }\n        }, 5000);\n    },\n    getDeliveryErrorMessage: function(code) {\n      switch(code) {\n        case 1:\n          this.set(\"emailErrorMessage\", \"Invalid Email Structure\");\n          this.set(\"emailErrorColor\", \"red\");\n          this.clearEmailMessage();\n          return;\n        case 2:\n          this.set(\"phoneErrorMessage\", \"Invalid Phone Structure\");\n          this.set(\"phoneErrorColor\", \"red\");\n          this.clearPhoneMessage();\n          return;\n        case 3:\n          this.set(\"emailErrorMessage\", \"Failed Email Test\");\n          this.set(\"emailErrorColor\", \"red\");\n          this.clearEmailMessage();\n          return;\n        case 4:\n          this.set(\"phoneErrorMessage\", \"Failed Phone Test\");\n          this.set(\"phoneErrorColor\", \"red\");\n          this.clearPhoneMessage();\n          return;\n        case 5:\n          this.set(\"emailErrorMessage\", \"Successful Email Test\");\n          this.set(\"emailErrorColor\", \"green\");\n          this.clearEmailMessage();\n          return;\n        case 6:\n          this.set(\"phoneErrorMessage\", \"Successful Phone Test\");\n          this.set(\"phoneErrorColor\", \"green\");\n          this.clearPhoneMessage();\n          return;\n        default:\n          this.set(\"phoneErrorMessage\", null);\n          this.set(\"emailErrorMessage\", null);\n          this.set(\"emailErrorColor\", \"red\");\n          this.set(\"phoneErrorColor\", \"red\");\n      }\n    },\n    validateEmail(email) {\n        if (!email) return false;\n        if (email.length > 254) return false;\n        const emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}$/;\n        return emailRegex.test(email);\n    },\n    updatePhoneValue() {\n        if (this.intlPhonePrefix) {\n            const dialCode = this.intlPhonePrefix.getSelectedCountryData().dialCode;\n            const phoneInput = this.element.querySelector('#phone-input');\n            const number = (phoneInput?.value || \"\").replace(/\\D/g, '');\n            const fullPhone = number ? `+${dialCode}${number}` : \"\";\n            this.set(\"phone\", fullPhone);\n        }\n    },\n    initPhoneInput: observer(\"selectedMethodDelivery\", function() {\n        if (this.get(\"selectedMethodDelivery\").includes(\"PHONE\")) {\n            setTimeout(() => {\n                const phoneInput = this.element.querySelector('#phone-input');\n                if (phoneInput && !this.intlPhonePrefix) {\n                    this.intlPhonePrefix = intlTelInput(phoneInput, {\n                        initialCountry: \"ca\",\n                        preferredCountries: [\"ca\", \"us\"],\n                        separateDialCode: true,\n                    });\n                    phoneInput.addEventListener('input', () => this.updatePhoneValue());\n                    phoneInput.addEventListener('countrychange', () => this.updatePhoneValue());\n                    phoneInput.addEventListener('keydown', (e) => {\n                        if (e.key === 'Enter') {\n                            this.send('onPhoneTagKeydown', e);\n                        }\n                    });\n                }\n            }, 100);\n        } else {\n            if (this.intlPhonePrefix) {\n                this.intlPhonePrefix.destroy();\n                this.intlPhonePrefix = null;\n            }\n        }\n    }),\n    getAnchorDiagramInitalValue:computed(\"selectedInstrument\", function(){\n        return {};\n    }),\n    selectedInstrumentObserver: observer(\"selectedInstrument\", function(){\n        if(this.APPROVED_INSTRUMENTS.includes(this.selectedInstrument.instrumentType.title)){\n          this.set(\"isSupportedInstrument\", true);\n          let curr = this.get(\"alertProfileFormFinalData\");\n          curr[\"instrument_id\"] = this.selectedInstrument.id;\n          this.set(\"alertProfileFormFinalData\", curr);\n        }\n        else{\n          this.set(\"isSupportedInstrument\", false);\n        }\n\n    }),\n    basicInfoObserver: observer(\"name\", \"note\", function(){\n        let curr = this.get(\"alertProfileFormFinalData\");\n        curr[\"name\"] = this.get(\"name\");\n        curr[\"note\"] = this.get(\"note\") ? this.get(\"note\") : \"\";\n        this.set(\"alertProfileFormFinalData\", curr);\n    }),\n    sendTestEmailAlert: async function(){\n        try {\n          if(!this.emailTags || this.emailTags.length <= 0)\n              return;\n          this.set(\"isEmailTestLoading\", true);\n          const url = `${getApiBaseUrl()}/alerts/test-trigger/email/?email=${this.emailTags.join(',')}`;\n          let response = await this.api.fetch(url, {\n          method: \"POST\",\n          headers: {\n              \"Content-Type\": \"application/json\",\n              Authorization: `Bearer ${localStorage.token}`,\n          },\n          });\n\n          let result = await response.json();\n          if (response.ok && result.success) {\n              this.getDeliveryErrorMessage(5)\n          } else {\n              this.getDeliveryErrorMessage(3)\n              console.error(result);\n          }\n\n        } catch (e) {\n            console.error(e);\n        }\n        this.set(\"isEmailTestLoading\", false);\n    },\n    sendTestPhoneAlert: async function(){\n        try {\n          // if(this.get(\"phone\")!= null && this.get(\"phone\").length > 0)\n          //     return;\n          this.set(\"isPhoneTestLoading\", true);\n          const url = `${getApiBaseUrl()}/alerts/test-trigger/phone/?phone=${encodeURIComponent(this.phoneTags.join(','))}`;\n          let response = await this.api.fetch(url, {\n          method: \"POST\",\n          headers: {\n              \"Content-Type\": \"application/json\",\n              Authorization: `Bearer ${localStorage.token}`\n          },\n          });\n\n          let result = await response.json();\n          if (response.ok && result.success) {\n            this.getDeliveryErrorMessage(6)\n          } else {\n            this.getDeliveryErrorMessage(4)\n            console.error(result);\n          }\n\n        } catch (e) {\n            console.error(e);\n        }\n        this.set(\"isPhoneTestLoading\", false);\n    },\n    actions: {\n      async testEmailAlert(){\n        console.log(\"clicked testEmailAlert\")\n        await this.sendTestEmailAlert();\n      },\n      async testPhoneAlert(){\n        await this.sendTestPhoneAlert();\n      },\n      updatePhoneNumber(e) {\n        this.set(\"phoneNumber\", e.target.value);\n        this.updatePhoneValue();\n      },\n      updateCountryCode(e) {\n        this.set(\"phoneCountryCode\", e.target.value);\n        this.updatePhoneValue();\n      },\n      toggleDeliveryMethod(methodId) {\n          let current = this.get(\"selectedMethodDelivery\").slice();\n          const index = current.indexOf(methodId);\n          if (index > -1) {\n              current.splice(index, 1);\n          } else {\n              current.push(methodId);\n          }\n          this.set(\"selectedMethodDelivery\", current);\n          this._syncDeliveryPayload();\n      },\n      triggerDiagramReset(){\n        this.set(\"alertProfileFormChannelsData\", []);\n      },\n      updateNameInput(element){\n        this.set(\"name\", element.target.value);\n      },\n      updateEmailInput(element){\n        this.set(\"email\", element.target.value);\n      },\n      updatePhoneInput(element){\n        this.set(\"phone\", element.target.value);\n      },\n      onEmailTagKeydown(e) {\n        if (e.key === 'Enter') {\n          e.preventDefault();\n          const value = e.target.value.trim();\n          if (value && !this.emailTags.includes(value)) {\n            if (this.validateEmail(value)) {\n              const tags = this.emailTags.slice();\n              tags.push(value);\n              this.set('emailTags', tags);\n              e.target.value = '';\n              this.set('emailErrorMessage', null);\n              this._syncDeliveryPayload();\n            } else {\n              this.getDeliveryErrorMessage(1);\n            }\n          }\n        }\n      },\n      removeEmailTag(tag) {\n        const tags = this.emailTags.filter(t => t !== tag);\n        this.set('emailTags', tags);\n        this._syncDeliveryPayload();\n      },\n      onPhoneTagKeydown(e) {\n        if (e.key === 'Enter') {\n          e.preventDefault();\n          if (this.intlPhonePrefix) {\n            const dialCode = this.intlPhonePrefix.getSelectedCountryData().dialCode;\n            const phoneInput = this.element.querySelector('#phone-input');\n            const number = (phoneInput?.value || \"\").replace(/\\D/g, '');\n            const fullNumber = number ? `+${dialCode}${number}` : \"\";\n            if (fullNumber && !this.phoneTags.includes(fullNumber)) {\n              const tags = this.phoneTags.slice();\n              tags.push(fullNumber);\n              this.set('phoneTags', tags);\n              phoneInput.value = '';\n              this._syncDeliveryPayload();\n            }\n          }\n        }\n      },\n      removePhoneTag(tag) {\n        const tags = this.phoneTags.filter(t => t !== tag);\n        this.set('phoneTags', tags);\n        this._syncDeliveryPayload();\n      },\n      addContactRecipient(event) {\n        const id = Number(event.target.value);\n        event.target.value = \"\";\n        if (!id) return;\n        if ((this.selectedContacts || []).some(c => c.id === id)) return;\n        const contact = (this.contactList || []).find(c => c.id === id);\n        if (!contact) return;\n        const emailOn = this.get(\"emailChecked\");\n        const phoneOn = this.get(\"phoneChecked\");\n        const entry = {\n          id: contact.id,\n          label: contact.label,\n          email: contact.email,\n          phone_number: contact.phone_number,\n          use_email: emailOn && !!contact.email,\n          use_phone: phoneOn && !!contact.phone_number,\n        };\n        this.set(\"selectedContacts\", (this.selectedContacts || []).concat([entry]));\n        this._syncDeliveryPayload();\n      },\n      removeContactRecipient(contact) {\n        this.set(\"selectedContacts\", (this.selectedContacts || []).filter(c => c.id !== contact.id));\n        this._syncDeliveryPayload();\n      },\n      toggleContactChannel(contact, channel) {\n        const list = (this.selectedContacts || []).map(c => {\n          if (c.id !== contact.id) return c;\n          const next = Object.assign({}, c);\n          if (channel === \"email\") next.use_email = !c.use_email;\n          if (channel === \"phone\") next.use_phone = !c.use_phone;\n          return next;\n        });\n        this.set(\"selectedContacts\", list);\n        this._syncDeliveryPayload();\n      },\n      addGroupRecipient(event) {\n        const id = Number(event.target.value);\n        event.target.value = \"\";\n        if (!id) return;\n        if ((this.selectedGroups || []).some(g => g.id === id)) return;\n        const group = (this.groupList || []).find(g => g.id === id);\n        if (!group) return;\n        const entry = {\n          id: group.id,\n          label: group.name,\n          use_email: this.get(\"emailChecked\"),\n          use_phone: this.get(\"phoneChecked\"),\n        };\n        this.set(\"selectedGroups\", (this.selectedGroups || []).concat([entry]));\n        this._syncDeliveryPayload();\n      },\n      removeGroupRecipient(group) {\n        this.set(\"selectedGroups\", (this.selectedGroups || []).filter(g => g.id !== group.id));\n        this._syncDeliveryPayload();\n      },\n      toggleGroupChannel(group, channel) {\n        const list = (this.selectedGroups || []).map(g => {\n          if (g.id !== group.id) return g;\n          const next = Object.assign({}, g);\n          if (channel === \"email\") next.use_email = !g.use_email;\n          if (channel === \"phone\") next.use_phone = !g.use_phone;\n          return next;\n        });\n        this.set(\"selectedGroups\", list);\n        this._syncDeliveryPayload();\n      },\n      updateNoteInput(element){\n        this.set(\"note\", element.target.value);\n      },\n      updateChannelCheckboxInput(key, isChannelChecked){\n        let curr = this.get(\"alertProfileFormChannelsData\");\n        if(isChannelChecked){\n          curr.push(key);\n        }\n        else{\n          let index = curr.indexOf(key);\n\n          if (index !== -1) {\n            curr.splice(index, 1);\n          }\n        }\n        \n        this.set(\"alertProfileFormChannelsData\", curr);\n      }\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n  userProfileService: service(),\n  api: service(),\n  init(){\n      this._super(...arguments);\n  },\n  actions: {\n  }\n\n\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { getApiBaseUrl } from '../../utils/api-config';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    api: service(),\n    store: service(),\n    session: service(),\n    router:service(),\n    userProfileService: service(),\n\n    isSoftReset:false,\n    softResetOccurrences:0,\n    MANDATORY_PARAMETERS: [\n        \"flatline_threshold_value\",\n        \"flatline_threshold_unit\",\n        \"allowed_occurrences\"\n    ],\n    OPTIONAL_PARAMETERS: [\n        \"can_soft_reset\",\n        \"allowed_soft_reset_occurrences\"\n    ],\n    init(){\n        this._super(...arguments);\n    },\n    getTypeDescription:computed(\"selectedEvaluationObj\", function(){\n        if(this.get(\"selectedEvaluationObj\")){\n            return this.get(\"selectedEvaluationObj\").description;\n        }\n        return \"\"\n    }),\n    async createAlertRequest(){\n        //Build Request Obj\n        let payload = this.get(\"alertProfileFormFinalData\");\n        payload[\"channels\"] = this.get(\"alertProfileFormChannelsData\");\n        payload[\"parameters\"] = this.get(\"alertProfileFormParametersData\");\n        try{\n            this.set(\"isLoading\", true);\n            const alertsUrl = `${getApiBaseUrl()}/alerts/create/`;\n            let alertResponse = await this.api.fetch(alertsUrl, {\n            method: \"POST\",\n            headers: {\n                Authorization: `Bearer ${localStorage.token}`,\n                \"Content-Type\": \"application/json\"\n            },\n            body: JSON.stringify(payload)\n            });\n\n            let result = await alertResponse.json();\n            if (result.success) {\n                console.log(\"Alert created:\"  + result.alert_id);\n                this.set(\"alertProfileFormFinalData\", {});\n                this.set(\"alertProfileFormParametersData\", {});\n                this.set(\"alertProfileFormChannelsData\", []);\n                this.router.transitionTo('edit-alert-profile', result.alert_id);\n            } else {\n                console.error(result);\n            }\n        }\n        catch(error){\n            console.log(\"Error in createAlertRequest: \" + error);\n        }\n        this.set(\"isLoading\", false);\n    },\n    blinkMissedLabels:function(missedIDsArr){\n        missedIDsArr.forEach(id=>{\n            let componentID = \"\";\n            if(this.get(\"MANDATORY_BODY\").includes(id)){\n                componentID = `${id}_required_label`;\n            }\n            else{\n                componentID = `${id}_required_label_4`;\n            }\n            let el = document.getElementById(componentID);\n            if(el){\n                el.classList.remove('soft-blink-8x'); \n                void el.offsetWidth;                  \n                el.classList.add('soft-blink-8x');\n            }\n        })\n    },\n    validateFormFields:async function(){\n        let missedFields = [];\n        let finalData = this.get(\"alertProfileFormFinalData\");\n        let paramData = this.get(\"alertProfileFormParametersData\");\n        let channelsData = this.get(\"alertProfileFormChannelsData\");\n        // console.log(finalData)\n        // console.log(channelsData)\n        // console.log(paramData)\n\n        //Validate for basic form fields\n        this.get(\"MANDATORY_BODY\").forEach(key=>{\n            if(key === \"channels\"){\n                if(channelsData.length > 0){\n                }\n                else{\n                    missedFields.push(\"channels\");\n                }\n            }\n            else if(key === \"delivery_method\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                if(idm.native_alert_trigger_method || idm.email_alert_trigger_method || idm.phone_alert_trigger_method){\n                }\n                else{\n                    missedFields.push(\"delivery_method\");\n                }\n            }\n            else if(key === \"email\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                const dmd = finalData[\"delivery_method_data\"] || {};\n                if(idm.email_alert_trigger_method){\n                    const hasEmail = (dmd.email || []).length > 0 || (dmd.contacts || []).some(c=>c.use_email) || (dmd.contact_groups || []).some(g=>g.use_email);\n                    if(hasEmail){\n                    }\n                    else{\n                        missedFields.push(\"email\");\n                    }\n                }\n            }\n            else if(key === \"phone\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                const dmd = finalData[\"delivery_method_data\"] || {};\n                if(idm.phone_alert_trigger_method){\n                    const hasPhone = (dmd.phone || []).length > 0 || (dmd.contacts || []).some(c=>c.use_phone) || (dmd.contact_groups || []).some(g=>g.use_phone);\n                    if(hasPhone){\n                    }\n                    else{\n                        missedFields.push(\"phone\");\n                    }\n                }\n            }\n            else{\n                if(Object.hasOwn(finalData, key) && (finalData[key] != \"\")){\n                }\n                else{\n                    missedFields.push(key);\n                }\n            }\n        })\n        this.MANDATORY_PARAMETERS.forEach(key=>{\n            if(Object.hasOwn(paramData, key) && (paramData[key] != \"\")){\n            }\n            else{\n                missedFields.push(key);\n            }\n        })\n\n        console.log(missedFields)\n        if(missedFields.length > 0){\n            this.blinkMissedLabels(missedFields);\n            return;\n        }else{\n            await this.createAlertRequest();\n            return;\n        }\n    },\n    async initializeCreateAlert(){\n\n        let curr = this.get(\"alertProfileFormParametersData\");\n        curr[\"can_soft_reset\"] = this.isSoftReset;\n        curr[\"allowed_soft_reset_occurrences\"] = this.softResetOccurrences;\n        this.set(\"alertProfileFormParametersData\", curr);\n        await this.validateFormFields();\n\n    },\n    actions: {\n        toggleOperatorRadioGroup(operator){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"operator\"] = operator;\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateDispDropdownUnit(key, value) {\n            console.log(`key: ${key} value: ${value}`)\n\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"flatline_threshold_unit\"] = value;\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateFlatlineThresholdValueInput(e){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"flatline_threshold_value\"] = Number(e.target.value);\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateOccurrencesValueInput(e){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"allowed_occurrences\"] = Number(e.target.value);\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateSoftResetOccurrences(e){\n            this.set(\"softResetOccurrences\", Number(e.target.value));\n        },\n        updateSoftResetCheckbox(){\n            let curr = this.get(\"isSoftReset\");\n            this.set(\"softResetOccurrences\", 0);\n            this.set(\"isSoftReset\", !curr);\n        },\n        async createAlert(){\n            console.log(\"Toggle Create Alert! \");\n            // console.log(\"final data\");\n            // console.log(this.get(\"alertProfileFormFinalData\"));\n            // console.log(\"channels data\");\n            // console.log(this.get(\"alertProfileFormChannelsData\"));\n            // console.log(\"params data\");\n            // console.log(this.get(\"alertProfileFormParametersData\"));\n            await this.initializeCreateAlert();\n        },\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { getApiBaseUrl } from '../../utils/api-config';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    api: service(),\n    store: service(),\n    session: service(),\n    router:service(),\n    userProfileService: service(),\n\n    isSoftReset:false,\n    softResetOccurrences:0,\n    MANDATORY_PARAMETERS: [\n        \"max_duration_value\",\n        \"max_duration_unit\"\n    ],\n    OPTIONAL_PARAMETERS: [\n        \"can_soft_reset\",\n        \"allowed_soft_reset_occurrences\"\n    ],\n    init(){\n        this._super(...arguments);\n    },\n    getTypeDescription:computed(\"selectedEvaluationObj\", function(){\n        if(this.get(\"selectedEvaluationObj\")){\n            return this.get(\"selectedEvaluationObj\").description;\n        }\n        return \"\"\n    }),\n    async createAlertRequest(){\n        //Build Request Obj\n        let payload = this.get(\"alertProfileFormFinalData\");\n        payload[\"channels\"] = this.get(\"alertProfileFormChannelsData\");\n        payload[\"parameters\"] = this.get(\"alertProfileFormParametersData\");\n        try{\n            this.set(\"isLoading\", true);\n            const alertsUrl = `${getApiBaseUrl()}/alerts/create/`;\n            let alertResponse = await this.api.fetch(alertsUrl, {\n            method: \"POST\",\n            headers: {\n                Authorization: `Bearer ${localStorage.token}`,\n                \"Content-Type\": \"application/json\"\n            },\n            body: JSON.stringify(payload)\n            });\n\n            let result = await alertResponse.json();\n            if (result.success) {\n                console.log(\"Alert created:\"  + result.alert_id);\n                this.set(\"alertProfileFormFinalData\", {});\n                this.set(\"alertProfileFormParametersData\", {});\n                this.set(\"alertProfileFormChannelsData\", []);\n                this.router.transitionTo('edit-alert-profile', result.alert_id);\n            } else {\n                console.error(result);\n            }\n        }\n        catch(error){\n            console.log(\"Error in createAlertRequest: \" + error);\n        }\n        this.set(\"isLoading\", false);\n    },\n    blinkMissedLabels:function(missedIDsArr){\n        missedIDsArr.forEach(id=>{\n            let componentID = \"\";\n            if(this.get(\"MANDATORY_BODY\").includes(id)){\n                componentID = `${id}_required_label`;\n            }\n            else{\n                componentID = `${id}_required_label_3`;\n            }\n            let el = document.getElementById(componentID);\n            if(el){\n                el.classList.remove('soft-blink-8x'); \n                void el.offsetWidth;                  \n                el.classList.add('soft-blink-8x');\n            }\n        })\n    },\n    validateFormFields:async function(){\n        let missedFields = [];\n        let finalData = this.get(\"alertProfileFormFinalData\");\n        let paramData = this.get(\"alertProfileFormParametersData\");\n        let channelsData = this.get(\"alertProfileFormChannelsData\");\n        // console.log(finalData)\n        // console.log(channelsData)\n        // console.log(paramData)\n\n        //Validate for basic form fields\n        this.get(\"MANDATORY_BODY\").forEach(key=>{\n            if(key === \"channels\"){\n                if(channelsData.length > 0){\n                }\n                else{\n                    missedFields.push(\"channels\");\n                }\n            }\n            else if(key === \"delivery_method\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                if(idm.native_alert_trigger_method || idm.email_alert_trigger_method || idm.phone_alert_trigger_method){\n                }\n                else{\n                    missedFields.push(\"delivery_method\");\n                }\n            }\n            else if(key === \"email\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                const dmd = finalData[\"delivery_method_data\"] || {};\n                if(idm.email_alert_trigger_method){\n                    const hasEmail = (dmd.email || []).length > 0 || (dmd.contacts || []).some(c=>c.use_email) || (dmd.contact_groups || []).some(g=>g.use_email);\n                    if(hasEmail){\n                    }\n                    else{\n                        missedFields.push(\"email\");\n                    }\n                }\n            }\n            else if(key === \"phone\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                const dmd = finalData[\"delivery_method_data\"] || {};\n                if(idm.phone_alert_trigger_method){\n                    const hasPhone = (dmd.phone || []).length > 0 || (dmd.contacts || []).some(c=>c.use_phone) || (dmd.contact_groups || []).some(g=>g.use_phone);\n                    if(hasPhone){\n                    }\n                    else{\n                        missedFields.push(\"phone\");\n                    }\n                }\n            }\n            else{\n                if(Object.hasOwn(finalData, key) && (finalData[key] != \"\")){\n                }\n                else{\n                    missedFields.push(key);\n                }\n            }\n        })\n        this.MANDATORY_PARAMETERS.forEach(key=>{\n            if(Object.hasOwn(paramData, key) && (paramData[key] != \"\")){\n            }\n            else{\n                missedFields.push(key);\n            }\n        })\n\n        console.log(missedFields)\n        if(missedFields.length > 0){\n            this.blinkMissedLabels(missedFields);\n            return;\n        }else{\n            await this.createAlertRequest();\n            return;\n        }\n    },\n    async initializeCreateAlert(){\n\n        let curr = this.get(\"alertProfileFormParametersData\");\n        curr[\"can_soft_reset\"] = this.isSoftReset;\n        curr[\"allowed_soft_reset_occurrences\"] = this.softResetOccurrences;\n        this.set(\"alertProfileFormParametersData\", curr);\n        await this.validateFormFields();\n\n    },\n    actions: {\n        updateTimeDropdownUnit(key, value) {\n            console.log(`key: ${key} value: ${value}`)\n\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"max_duration_unit\"] = value;\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateMaxDurationValueInput(e){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"max_duration_value\"] = Number(e.target.value);\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateSoftResetOccurrences(e){\n            this.set(\"softResetOccurrences\", Number(e.target.value));\n        },\n        updateSoftResetCheckbox(){\n            let curr = this.get(\"isSoftReset\");\n            this.set(\"softResetOccurrences\", 0);\n            this.set(\"isSoftReset\", !curr);\n        },\n        async createAlert(){\n            console.log(\"Toggle Create Alert! \");\n            // console.log(\"final data\");\n            // console.log(this.get(\"alertProfileFormFinalData\"));\n            // console.log(\"channels data\");\n            // console.log(this.get(\"alertProfileFormChannelsData\"));\n            // console.log(\"params data\");\n            // console.log(this.get(\"alertProfileFormParametersData\"));\n            await this.initializeCreateAlert();\n        },\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { getApiBaseUrl } from '../../utils/api-config';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    api: service(),\n    store: service(),\n    session: service(),\n    router:service(),\n    userProfileService: service(),\n\n    isSoftReset:false,\n    softResetOccurrences:0,\n    /**\n     * {\n        * id: local dateime \n        * disp: disp readings []\n        * temp: temp reading\n     * }\n     */\n    readingData: [\n    ],\n    MANDATORY_PARAMETERS: [\n        \"spike_threshold_value\",\n        \"spike_threshold_unit\"\n    ],\n    OPTIONAL_PARAMETERS: [\n        \"can_soft_reset\",\n        \"allowed_soft_reset_occurrences\"\n    ],\n    init(){\n        this._super(...arguments);\n    },\n    getTypeDescription:computed(\"selectedEvaluationObj\", function(){\n        if(this.get(\"selectedEvaluationObj\")){\n            return this.get(\"selectedEvaluationObj\").description;\n        }\n        return \"\"\n    }),\n    async createAlertRequest(){\n        //Build Request Obj\n        let payload = this.get(\"alertProfileFormFinalData\");\n        payload[\"channels\"] = this.get(\"alertProfileFormChannelsData\");\n        payload[\"parameters\"] = this.get(\"alertProfileFormParametersData\");\n        try{\n            this.set(\"isLoading\", true);\n            const alertsUrl = `${getApiBaseUrl()}/alerts/create/`;\n            let alertResponse = await this.api.fetch(alertsUrl, {\n            method: \"POST\",\n            headers: {\n                Authorization: `Bearer ${localStorage.token}`,\n                \"Content-Type\": \"application/json\"\n            },\n            body: JSON.stringify(payload)\n            });\n\n            let result = await alertResponse.json();\n            if (result.success) {\n                console.log(\"Alert created:\"  + result.alert_id);\n                this.set(\"alertProfileFormFinalData\", {});\n                this.set(\"alertProfileFormParametersData\", {});\n                this.set(\"alertProfileFormChannelsData\", []);\n                this.router.transitionTo('edit-alert-profile', result.alert_id);\n            } else {\n                console.error(result);\n            }\n        }\n        catch(error){\n            console.log(\"Error in createAlertRequest: \" + error);\n        }\n        this.set(\"isLoading\", false);\n    },\n    blinkMissedLabels:function(missedIDsArr){\n        missedIDsArr.forEach(id=>{\n            let componentID = \"\";\n            if(this.get(\"MANDATORY_BODY\").includes(id)){\n                componentID = `${id}_required_label`;\n            }\n            else{\n                componentID = `${id}_required_label_5`;\n            }\n            let el = document.getElementById(componentID);\n            if(el){\n                el.classList.remove('soft-blink-8x'); \n                void el.offsetWidth;                  \n                el.classList.add('soft-blink-8x');\n            }\n        })\n    },\n    validateFormFields:async function(){\n        let missedFields = [];\n        let finalData = this.get(\"alertProfileFormFinalData\");\n        let paramData = this.get(\"alertProfileFormParametersData\");\n        let channelsData = this.get(\"alertProfileFormChannelsData\");\n        // console.log(finalData)\n        // console.log(channelsData)\n        // console.log(paramData)\n\n        //Validate for basic form fields\n        this.get(\"MANDATORY_BODY\").forEach(key=>{\n            if(key === \"channels\"){\n                if(channelsData.length > 0){\n                }\n                else{\n                    missedFields.push(\"channels\");\n                }\n            }\n            else if(key === \"delivery_method\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                if(idm.native_alert_trigger_method || idm.email_alert_trigger_method || idm.phone_alert_trigger_method){\n                }\n                else{\n                    missedFields.push(\"delivery_method\");\n                }\n            }\n            else if(key === \"email\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                const dmd = finalData[\"delivery_method_data\"] || {};\n                if(idm.email_alert_trigger_method){\n                    const hasEmail = (dmd.email || []).length > 0 || (dmd.contacts || []).some(c=>c.use_email) || (dmd.contact_groups || []).some(g=>g.use_email);\n                    if(hasEmail){\n                    }\n                    else{\n                        missedFields.push(\"email\");\n                    }\n                }\n            }\n            else if(key === \"phone\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                const dmd = finalData[\"delivery_method_data\"] || {};\n                if(idm.phone_alert_trigger_method){\n                    const hasPhone = (dmd.phone || []).length > 0 || (dmd.contacts || []).some(c=>c.use_phone) || (dmd.contact_groups || []).some(g=>g.use_phone);\n                    if(hasPhone){\n                    }\n                    else{\n                        missedFields.push(\"phone\");\n                    }\n                }\n            }\n            else{\n                if(Object.hasOwn(finalData, key) && (finalData[key] != \"\")){\n                }\n                else{\n                    missedFields.push(key);\n                }\n            }\n        })\n        this.MANDATORY_PARAMETERS.forEach(key=>{\n            if(Object.hasOwn(paramData, key) && (paramData[key] != \"\")){\n            }\n            else{\n                missedFields.push(key);\n            }\n        })\n        if(missedFields.length > 0){\n            this.blinkMissedLabels(missedFields);\n            return;\n        }else{\n            await this.createAlertRequest();\n            return;\n        }\n    },\n    async initializeCreateAlert(){\n\n        let curr = this.get(\"alertProfileFormParametersData\");\n        curr[\"can_soft_reset\"] = this.isSoftReset;\n        curr[\"allowed_soft_reset_occurrences\"] = this.softResetOccurrences;\n        this.set(\"alertProfileFormParametersData\", curr);\n        await this.validateFormFields();\n\n    },\n    actions: {\n        updateDispDropdownUnit(key, value) {\n            console.log(`key: ${key} value: ${value}`)\n\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"spike_threshold_unit\"] = value;\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateSpikeThresholdValueInput(e){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"spike_threshold_value\"] = Number(e.target.value);\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateSoftResetOccurrences(e){\n            this.set(\"softResetOccurrences\", Number(e.target.value));\n        },\n        updateSoftResetCheckbox(){\n            let curr = this.get(\"isSoftReset\");\n            this.set(\"softResetOccurrences\", 0);\n            this.set(\"isSoftReset\", !curr);\n        },\n        async createAlert(){\n            console.log(\"Toggle Create Alert! \");\n            // console.log(\"final data\");\n            // console.log(this.get(\"alertProfileFormFinalData\"));\n            // console.log(\"channels data\");\n            // console.log(this.get(\"alertProfileFormChannelsData\"));\n            // console.log(\"params data\");\n            // console.log(this.get(\"alertProfileFormParametersData\"));\n            await this.initializeCreateAlert();\n        },\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { getApiBaseUrl } from '../../utils/api-config';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    api: service(),\n    store: service(),\n    session: service(),\n    router:service(),\n    userProfileService: service(),\n\n    isSoftReset:false,\n    softResetOccurrences:0,\n    /**\n     * {\n        * id: local dateime \n        * disp: disp readings []\n        * temp: temp reading\n     * }\n     */\n    readingData: [\n    ],\n    MANDATORY_PARAMETERS: [\n        \"period_window_value\",\n        \"period_window_unit\",\n        \"disp_threshold_value\",\n        \"disp_threshold_unit\",\n        \"temp_threshold_value\",\n        \"temp_threshold_unit\",\n        \"allowed_occurrences\"\n    ],\n    OPTIONAL_PARAMETERS: [\n        \"can_soft_reset\",\n        \"allowed_soft_reset_occurrences\"\n    ],\n    init(){\n        this._super(...arguments);\n    },\n    getTypeDescription:computed(\"selectedEvaluationObj\", function(){\n        if(this.get(\"selectedEvaluationObj\")){\n            return this.get(\"selectedEvaluationObj\").description;\n        }\n        return \"\"\n    }),\n    async createAlertRequest(){\n        //Build Request Obj\n        let payload = this.get(\"alertProfileFormFinalData\");\n        payload[\"channels\"] = this.get(\"alertProfileFormChannelsData\");\n        payload[\"parameters\"] = this.get(\"alertProfileFormParametersData\");\n        try{\n            this.set(\"isLoading\", true);\n            const alertsUrl = `${getApiBaseUrl()}/alerts/create/`;\n            let alertResponse = await this.api.fetch(alertsUrl, {\n            method: \"POST\",\n            headers: {\n                Authorization: `Bearer ${localStorage.token}`,\n                \"Content-Type\": \"application/json\"\n            },\n            body: JSON.stringify(payload)\n            });\n\n            let result = await alertResponse.json();\n            if (result.success) {\n                console.log(\"Alert created:\"  + result.alert_id);\n                this.set(\"alertProfileFormFinalData\", {});\n                this.set(\"alertProfileFormParametersData\", {});\n                this.set(\"alertProfileFormChannelsData\", []);\n                this.router.transitionTo('edit-alert-profile', result.alert_id);\n            } else {\n                console.error(result);\n            }\n        }\n        catch(error){\n            console.log(\"Error in createAlertRequest: \" + error);\n        }\n        this.set(\"isLoading\", false);\n    },\n    blinkMissedLabels:function(missedIDsArr){\n        missedIDsArr.forEach(id=>{\n            let componentID = \"\";\n            if(this.get(\"MANDATORY_BODY\").includes(id)){\n                componentID = `${id}_required_label`;\n            }\n            else{\n                componentID = `${id}_required_label_7`;\n            }\n            let el = document.getElementById(componentID);\n            if(el){\n                el.classList.remove('soft-blink-8x'); \n                void el.offsetWidth;                  \n                el.classList.add('soft-blink-8x');\n            }\n        })\n    },\n    validateFormFields:async function(){\n        let missedFields = [];\n        let finalData = this.get(\"alertProfileFormFinalData\");\n        let paramData = this.get(\"alertProfileFormParametersData\");\n        let channelsData = this.get(\"alertProfileFormChannelsData\");\n        // console.log(finalData)\n        // console.log(channelsData)\n        // console.log(paramData)\n\n        //Validate for basic form fields\n        this.get(\"MANDATORY_BODY\").forEach(key=>{\n            if(key === \"channels\"){\n                if(channelsData.length > 0){\n                }\n                else{\n                    missedFields.push(\"channels\");\n                }\n            }\n            else if(key === \"delivery_method\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                if(idm.native_alert_trigger_method || idm.email_alert_trigger_method || idm.phone_alert_trigger_method){\n                }\n                else{\n                    missedFields.push(\"delivery_method\");\n                }\n            }\n            else if(key === \"email\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                const dmd = finalData[\"delivery_method_data\"] || {};\n                if(idm.email_alert_trigger_method){\n                    const hasEmail = (dmd.email || []).length > 0 || (dmd.contacts || []).some(c=>c.use_email) || (dmd.contact_groups || []).some(g=>g.use_email);\n                    if(hasEmail){\n                    }\n                    else{\n                        missedFields.push(\"email\");\n                    }\n                }\n            }\n            else if(key === \"phone\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                const dmd = finalData[\"delivery_method_data\"] || {};\n                if(idm.phone_alert_trigger_method){\n                    const hasPhone = (dmd.phone || []).length > 0 || (dmd.contacts || []).some(c=>c.use_phone) || (dmd.contact_groups || []).some(g=>g.use_phone);\n                    if(hasPhone){\n                    }\n                    else{\n                        missedFields.push(\"phone\");\n                    }\n                }\n            }\n            else{\n                if(Object.hasOwn(finalData, key) && (finalData[key] != \"\")){\n                }\n                else{\n                    missedFields.push(key);\n                }\n            }\n        })\n        this.MANDATORY_PARAMETERS.forEach(key=>{\n            if(Object.hasOwn(paramData, key) && (paramData[key] != \"\")){\n            }\n            else{\n                missedFields.push(key);\n            }\n        })\n        if(missedFields.length > 0){\n            this.blinkMissedLabels(missedFields);\n            return;\n        }else{\n            await this.createAlertRequest();\n            return;\n        }\n    },\n    async initializeCreateAlert(){\n\n        let curr = this.get(\"alertProfileFormParametersData\");\n        curr[\"can_soft_reset\"] = this.isSoftReset;\n        curr[\"allowed_soft_reset_occurrences\"] = this.softResetOccurrences;\n        this.set(\"alertProfileFormParametersData\", curr);\n        await this.validateFormFields();\n\n    },\n    actions: {\n        updateDispDropdownUnit(key, value) {\n            console.log(`key: ${key} value: ${value}`)\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"disp_threshold_unit\"] = value;\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateTimeDropdownUnit(key, value) {\n            console.log(\"Time:\" + \" key: \" + key + \" value: \" + value);\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"period_window_unit\"] = value;\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateTempDropdownUnit(key, value) {\n            console.log(\"Temp:\" + \" key: \" + key + \" value: \" + value);\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"temp_threshold_unit\"] = value;\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updatePeriodWindowValueInput(e){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"period_window_value\"] = Number(e.target.value);\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateDispThresholdValueInput(e){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"disp_threshold_value\"] = Number(e.target.value);\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateTempThresholdValueInput(e){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"temp_threshold_value\"] = Number(e.target.value);\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateOccurrencesValueInput(e){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"allowed_occurrences\"] = Number(e.target.value);\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateSoftResetOccurrences(e){\n            this.set(\"softResetOccurrences\", Number(e.target.value));\n        },\n        updateSoftResetCheckbox(){\n            let curr = this.get(\"isSoftReset\");\n            this.set(\"softResetOccurrences\", 0);\n            this.set(\"isSoftReset\", !curr);\n        },\n        async createAlert(){\n            console.log(\"Toggle Create Alert! \");\n            // console.log(\"final data\");\n            // console.log(this.get(\"alertProfileFormFinalData\"));\n            // console.log(\"channels data\");\n            // console.log(this.get(\"alertProfileFormChannelsData\"));\n            // console.log(\"params data\");\n            // console.log(this.get(\"alertProfileFormParametersData\"));\n            await this.initializeCreateAlert();\n        },\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { getApiBaseUrl } from '../../utils/api-config';\nimport Component from \"@ember/component\";\n\nexport default Component.extend({\n    api: service(),\n    store: service(),\n    session: service(),\n    router:service(),\n    userProfileService: service(),\n\n    isSoftReset:false,\n    softResetOccurrences:0,\n    MANDATORY_PARAMETERS: [\n        \"operator\",\n        \"threshold_value\",\n        \"threshold_unit\",\n        \"allowed_occurrences\"\n    ],\n    OPTIONAL_PARAMETERS: [\n        \"can_soft_reset\",\n        \"allowed_soft_reset_occurrences\"\n    ],\n    init(){\n        this._super(...arguments);\n    },\n    getTypeDescription:computed(\"selectedEvaluationObj\", function(){\n        if(this.get(\"selectedEvaluationObj\")){\n            return this.get(\"selectedEvaluationObj\").description;\n        }\n        return \"\"\n    }),\n    async createAlertRequest(){\n        //Build Request Obj\n        let payload = this.get(\"alertProfileFormFinalData\");\n        payload[\"channels\"] = this.get(\"alertProfileFormChannelsData\");\n        payload[\"parameters\"] = this.get(\"alertProfileFormParametersData\");\n        try{\n            this.set(\"isLoading\", true);\n            const alertsUrl = `${getApiBaseUrl()}/alerts/create/`;\n            let alertResponse = await this.api.fetch(alertsUrl, {\n            method: \"POST\",\n            headers: {\n                Authorization: `Bearer ${localStorage.token}`,\n                \"Content-Type\": \"application/json\"\n            },\n            body: JSON.stringify(payload)\n            });\n\n            let result = await alertResponse.json();\n            if (result.success) {\n                console.log(\"Alert created:\"  + result.alert_id);\n                this.set(\"alertProfileFormFinalData\", {});\n                this.set(\"alertProfileFormParametersData\", {});\n                this.set(\"alertProfileFormChannelsData\", []);\n                this.router.transitionTo('edit-alert-profile', result.alert_id);\n            } else {\n                console.error(result);\n            }\n        }\n        catch(error){\n            console.log(\"Error in createAlertRequest: \" + error);\n        }\n        this.set(\"isLoading\", false);\n    },\n    blinkMissedLabels:function(missedIDsArr){\n        // console.log(\"missedIDsArr\")\n        // console.log(missedIDsArr)\n        // console.log(\"MANDATORY_BODY\")\n        // console.log(this.get(\"MANDATORY_BODY\"))\n        missedIDsArr.forEach(id=>{\n            let componentID = \"\";\n            if(this.get(\"MANDATORY_BODY\").includes(id)){\n                componentID = `${id}_required_label`;\n            }\n            else{\n                componentID = `${id}_required_label_1`;\n            }\n            console.log(\"componentID\")\n            console.log(componentID)\n            let el = document.getElementById(componentID);\n            if(el){\n                el.classList.remove('soft-blink-8x'); \n                void el.offsetWidth;                  \n                el.classList.add('soft-blink-8x');\n            }\n        })\n    },\n    validateFormFields:async function(){\n        let missedFields = [];\n        let finalData = this.get(\"alertProfileFormFinalData\");\n        let paramData = this.get(\"alertProfileFormParametersData\");\n        let channelsData = this.get(\"alertProfileFormChannelsData\");\n        // console.log(\"finalData\")\n        // console.log(finalData)\n        // console.log(\"MANDATORY_BODY\")\n        // console.log(this.get(\"MANDATORY_BODY\"))\n        // console.log(channelsData)\n        // console.log(paramData)\n\n        //Validate for basic form fields\n        this.get(\"MANDATORY_BODY\").forEach(key=>{\n            if(key === \"channels\"){\n                if(channelsData.length > 0){\n                }\n                else{\n                    missedFields.push(\"channels\");\n                }\n            }\n            else if(key === \"delivery_method\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                if(idm.native_alert_trigger_method || idm.email_alert_trigger_method || idm.phone_alert_trigger_method){\n                }\n                else{\n                    missedFields.push(\"delivery_method\");\n                }\n            }\n            else if(key === \"email\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                const dmd = finalData[\"delivery_method_data\"] || {};\n                if(idm.email_alert_trigger_method){\n                    const hasEmail = (dmd.email || []).length > 0 || (dmd.contacts || []).some(c=>c.use_email) || (dmd.contact_groups || []).some(g=>g.use_email);\n                    if(hasEmail){\n                    }\n                    else{\n                        missedFields.push(\"email\");\n                    }\n                }\n            }\n            else if(key === \"phone\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                const dmd = finalData[\"delivery_method_data\"] || {};\n                if(idm.phone_alert_trigger_method){\n                    const hasPhone = (dmd.phone || []).length > 0 || (dmd.contacts || []).some(c=>c.use_phone) || (dmd.contact_groups || []).some(g=>g.use_phone);\n                    if(hasPhone){\n                    }\n                    else{\n                        missedFields.push(\"phone\");\n                    }\n                }\n            }\n            else{\n                if(Object.hasOwn(finalData, key) && (finalData[key] != \"\")){\n                }\n                else{\n                    missedFields.push(key);\n                }\n            }\n        })\n        this.MANDATORY_PARAMETERS.forEach(key=>{\n            if(Object.hasOwn(paramData, key) && (paramData[key] != \"\")){\n            }\n            else{\n                missedFields.push(key);\n            }\n        })\n\n        // console.log(missedFields)\n        if(missedFields.length > 0){\n            this.blinkMissedLabels(missedFields);\n            return;\n        }else{\n            await this.createAlertRequest();\n            return;\n        }\n    },\n    async initializeCreateAlert(){\n\n        let curr = this.get(\"alertProfileFormParametersData\");\n        curr[\"can_soft_reset\"] = this.isSoftReset;\n        curr[\"allowed_soft_reset_occurrences\"] = this.softResetOccurrences;\n        this.set(\"alertProfileFormParametersData\", curr);\n        await this.validateFormFields();\n\n    },\n    actions: {\n        toggleOperatorRadioGroup(operator){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"operator\"] = operator;\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateDispDropdownUnit(key, value) {\n            console.log(`key: ${key} value: ${value}`)\n\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"threshold_unit\"] = value;\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateThresholdValueInput(e){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"threshold_value\"] = Number(e.target.value);\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateOccurrencesValueInput(e){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"allowed_occurrences\"] = Number(e.target.value);\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateSoftResetOccurrences(e){\n            this.set(\"softResetOccurrences\", Number(e.target.value));\n        },\n        updateSoftResetCheckbox(){\n            let curr = this.get(\"isSoftReset\");\n            this.set(\"softResetOccurrences\", 0);\n            this.set(\"isSoftReset\", !curr);\n        },\n        async createAlert(){\n            console.log(\"Toggle Create Alert! \");\n            // console.log(\"final data\");\n            // console.log(this.get(\"alertProfileFormFinalData\"));\n            // console.log(\"channels data\");\n            // console.log(this.get(\"alertProfileFormChannelsData\"));\n            // console.log(\"params data\");\n            // console.log(this.get(\"alertProfileFormParametersData\"));\n            await this.initializeCreateAlert();\n        },\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed, observer } from '@ember/object';\nimport { getApiBaseUrl } from '../../utils/api-config';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    api: service(),\n    store: service(),\n    session: service(),\n    router:service(),\n    userProfileService: service(),\n\n    isSoftReset:false,\n    softResetOccurrences:0,\n    selectedReadingObject: null,\n    /**\n     * {\n        * id: local dateime \n        * disp: disp readings []\n        * temp: temp reading\n     * }\n     */\n    readingData: [\n    ],\n    MANDATORY_PARAMETERS: [\n        \"reference_reading_id\",\n        \"delta_value\",\n        \"delta_unit\",\n        \"allowed_occurrences\"\n    ],\n    OPTIONAL_PARAMETERS: [\n        \"can_soft_reset\",\n        \"allowed_soft_reset_occurrences\"\n    ],\n    init(){\n        this._super(...arguments);\n    },\n    getInstrument:observer(\"selectedInstrument\", function(){\n        console.log(\"getInstrumentObserver, updated!\")\n    }),\n    getSelectedDatetime: computed(\"selectedReadingObject\", {\n        get() {\n            const id = this.get(\"selectedReadingObject\")?.id || \"\";\n            return id.replace(\" \", \"T\");\n        },\n        set(key, value) {\n            return value;\n        }\n    }),\n    getTypeDescription:computed(\"selectedEvaluationObj\", function(){\n        if(this.get(\"selectedEvaluationObj\")){\n            return this.get(\"selectedEvaluationObj\").description;\n        }\n        return \"\"\n    }),\n    async createAlertRequest(){\n        //Build Request Obj\n        let payload = this.get(\"alertProfileFormFinalData\");\n        payload[\"channels\"] = this.get(\"alertProfileFormChannelsData\");\n        payload[\"parameters\"] = this.get(\"alertProfileFormParametersData\");\n        try{\n            this.set(\"isLoading\", true);\n            const alertsUrl = `${getApiBaseUrl()}/alerts/create/`;\n            let alertResponse = await this.api.fetch(alertsUrl, {\n            method: \"POST\",\n            headers: {\n                Authorization: `Bearer ${localStorage.token}`,\n                \"Content-Type\": \"application/json\"\n            },\n            body: JSON.stringify(payload)\n            });\n\n            let result = await alertResponse.json();\n            if (result.success) {\n                console.log(\"Alert created:\"  + result.alert_id);\n                this.set(\"alertProfileFormFinalData\", {});\n                this.set(\"alertProfileFormParametersData\", {});\n                this.set(\"alertProfileFormChannelsData\", []);\n                this.router.transitionTo('edit-alert-profile', result.alert_id);\n            } else {\n                console.error(result);\n            }\n        }\n        catch(error){\n            console.log(\"Error in createAlertRequest: \" + error);\n        }\n        this.set(\"isLoading\", false);\n    },\n    blinkMissedLabels:function(missedIDsArr){\n        missedIDsArr.forEach(id=>{\n            let componentID = \"\";\n            if(this.get(\"MANDATORY_BODY\").includes(id)){\n                componentID = `${id}_required_label`;\n            }\n            else{\n                componentID = `${id}_required_label_2`;\n            }\n            let el = document.getElementById(componentID);\n            if(el){\n                el.classList.remove('soft-blink-8x'); \n                void el.offsetWidth;                  \n                el.classList.add('soft-blink-8x');\n            }\n        })\n    },\n    validateFormFields:async function(){\n        let missedFields = [];\n        let finalData = this.get(\"alertProfileFormFinalData\");\n        let paramData = this.get(\"alertProfileFormParametersData\");\n        let channelsData = this.get(\"alertProfileFormChannelsData\");\n        // console.log(finalData)\n        // console.log(channelsData)\n        // console.log(paramData)\n\n        //Validate for basic form fields\n        this.get(\"MANDATORY_BODY\").forEach(key=>{\n            if(key === \"channels\"){\n                if(channelsData.length > 0){\n                }\n                else{\n                    missedFields.push(\"channels\");\n                }\n            }\n            else if(key === \"delivery_method\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                if(idm.native_alert_trigger_method || idm.email_alert_trigger_method || idm.phone_alert_trigger_method){\n                }\n                else{\n                    missedFields.push(\"delivery_method\");\n                }\n            }\n            else if(key === \"email\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                const dmd = finalData[\"delivery_method_data\"] || {};\n                if(idm.email_alert_trigger_method){\n                    const hasEmail = (dmd.email || []).length > 0 || (dmd.contacts || []).some(c=>c.use_email) || (dmd.contact_groups || []).some(g=>g.use_email);\n                    if(hasEmail){\n                    }\n                    else{\n                        missedFields.push(\"email\");\n                    }\n                }\n            }\n            else if(key === \"phone\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                const dmd = finalData[\"delivery_method_data\"] || {};\n                if(idm.phone_alert_trigger_method){\n                    const hasPhone = (dmd.phone || []).length > 0 || (dmd.contacts || []).some(c=>c.use_phone) || (dmd.contact_groups || []).some(g=>g.use_phone);\n                    if(hasPhone){\n                    }\n                    else{\n                        missedFields.push(\"phone\");\n                    }\n                }\n            }\n            else{\n                if(Object.hasOwn(finalData, key) && (finalData[key] != \"\")){\n                }\n                else{\n                    missedFields.push(key);\n                }\n            }\n        })\n        this.MANDATORY_PARAMETERS.forEach(key=>{\n            if(Object.hasOwn(paramData, key) && (paramData[key] != \"\")){\n            }\n            else{\n                missedFields.push(key);\n            }\n        })\n        if(missedFields.length > 0){\n            this.blinkMissedLabels(missedFields);\n            return;\n        }else{\n            await this.createAlertRequest();\n            return;\n        }\n    },\n    async initializeCreateAlert(){\n\n        let curr = this.get(\"alertProfileFormParametersData\");\n        curr[\"can_soft_reset\"] = this.isSoftReset;\n        curr[\"allowed_soft_reset_occurrences\"] = this.softResetOccurrences;\n        this.set(\"alertProfileFormParametersData\", curr);\n        await this.validateFormFields();\n\n    },\n    actions: {\n        onSelectedReadingObject(readingObj) {\n            console.log(`onSelectedReadingObject readingObj:`)\n            console.log(readingObj)\n\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"reference_reading_id\"] = readingObj.id;\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateDispDropdownUnit(key, value) {\n            console.log(`key: ${key} value: ${value}`)\n\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"delta_unit\"] = value;\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateDeltaValueInput(e){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"delta_value\"] = Number(e.target.value);\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateOccurrencesValueInput(e){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"allowed_occurrences\"] = Number(e.target.value);\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateSoftResetOccurrences(e){\n            this.set(\"softResetOccurrences\", Number(e.target.value));\n        },\n        updateSoftResetCheckbox(){\n            let curr = this.get(\"isSoftReset\");\n            this.set(\"softResetOccurrences\", 0);\n            this.set(\"isSoftReset\", !curr);\n        },\n        async createAlert(){\n            console.log(\"Toggle Create Alert! \");\n            // console.log(\"final data\");\n            // console.log(this.get(\"alertProfileFormFinalData\"));\n            // console.log(\"channels data\");\n            // console.log(this.get(\"alertProfileFormChannelsData\"));\n            // console.log(\"params data\");\n            // console.log(this.get(\"alertProfileFormParametersData\"));\n            await this.initializeCreateAlert();\n        },\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed, observer } from '@ember/object';\nimport { getApiBaseUrl } from '../../utils/api-config';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    api: service(),\n    store: service(),\n    session: service(),\n    router:service(),\n    userProfileService: service(),\n\n    isSoftReset:false,\n    softResetOccurrences:0,\n    initRateValue:\"\",\n    initDispPartRateValue:\"\",\n    initTimePartRateValue:\"\",\n    MANDATORY_PARAMETERS: [\n        \"roc_threshold_value\",\n        \"roc_threshold_unit\",\n        \"period_window_value\",\n        \"period_window_unit\",\n        \"allowed_occurrences\"\n    ],\n    OPTIONAL_PARAMETERS: [\n        \"can_soft_reset\",\n        \"allowed_soft_reset_occurrences\"\n    ],\n    init(){\n        this._super(...arguments);\n        this.set(\"initRateValue\", \"\");\n        this.set(\"initDispPartRateValue\", \"\");\n        this.set(\"initTimePartRateValue\", \"\");\n    },\n    rateBuildObserver:observer(\"initDispPartRateValue\",\"initTimePartRateValue\",function(){\n        let dispPart = this.get(\"initDispPartRateValue\");\n        let timePart = this.get(\"initTimePartRateValue\");\n        let rate = `${dispPart ? dispPart : \"\"}/${timePart ? timePart : \"\"}`;\n        this.set(\"initRateValue\", rate)\n    }),\n    breakdownRateStoreParts:function(rate){\n        let dispPart = \"\";\n        let timePart = \"\";\n        try{\n            dispPart = rate.split(\"/\")[0];\n        }\n        catch(e){\n        }\n        try{\n            timePart = rate.split(\"/\")[1];\n        }\n        catch(e){\n        }\n        this.set(\"initDispPartRateValue\", dispPart);\n        this.set(\"initTimePartRateValue\", timePart);\n    },\n    getTypeDescription:computed(\"selectedEvaluationObj\", function(){\n        if(this.get(\"selectedEvaluationObj\")){\n            return this.get(\"selectedEvaluationObj\").description;\n        }\n        return \"\"\n    }),\n    async createAlertRequest(){\n        //Build Request Obj\n        let payload = this.get(\"alertProfileFormFinalData\");\n        payload[\"channels\"] = this.get(\"alertProfileFormChannelsData\");\n        payload[\"parameters\"] = this.get(\"alertProfileFormParametersData\");\n        try{\n            this.set(\"isLoading\", true);\n            const alertsUrl = `${getApiBaseUrl()}/alerts/create/`;\n            let alertResponse = await this.api.fetch(alertsUrl, {\n            method: \"POST\",\n            headers: {\n                Authorization: `Bearer ${localStorage.token}`,\n                \"Content-Type\": \"application/json\"\n            },\n            body: JSON.stringify(payload)\n            });\n\n            let result = await alertResponse.json();\n            if (result.success) {\n                console.log(\"Alert created:\"  + result.alert_id);\n                this.set(\"alertProfileFormFinalData\", {});\n                this.set(\"alertProfileFormParametersData\", {});\n                this.set(\"alertProfileFormChannelsData\", []);\n                this.router.transitionTo('edit-alert-profile', result.alert_id);\n            } else {\n                console.error(result);\n            }\n        }\n        catch(error){\n            console.log(\"Error in createAlertRequest: \" + error);\n        }\n        this.set(\"isLoading\", false);\n    },\n    blinkMissedLabels:function(missedIDsArr){\n        missedIDsArr.forEach(id=>{\n            let componentID = \"\";\n            if(this.get(\"MANDATORY_BODY\").includes(id)){\n                componentID = `${id}_required_label`;\n            }\n            else{\n                componentID = `${id}_required_label_6`;\n            }\n            let el = document.getElementById(componentID);\n            if(el){\n                el.classList.remove('soft-blink-8x'); \n                void el.offsetWidth;                  \n                el.classList.add('soft-blink-8x');\n            }\n        })\n    },\n    validateFormFields:async function(){\n        let missedFields = [];\n        let finalData = this.get(\"alertProfileFormFinalData\");\n        let paramData = this.get(\"alertProfileFormParametersData\");\n        let channelsData = this.get(\"alertProfileFormChannelsData\");\n        // console.log(finalData)\n        // console.log(channelsData)\n        // console.log(paramData)\n\n        //Validate for basic form fields\n        this.get(\"MANDATORY_BODY\").forEach(key=>{\n            if(key === \"channels\"){\n                if(channelsData.length > 0){\n                }\n                else{\n                    missedFields.push(\"channels\");\n                }\n            }\n            else if(key === \"delivery_method\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                if(idm.native_alert_trigger_method || idm.email_alert_trigger_method || idm.phone_alert_trigger_method){\n                }\n                else{\n                    missedFields.push(\"delivery_method\");\n                }\n            }\n            else if(key === \"email\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                const dmd = finalData[\"delivery_method_data\"] || {};\n                if(idm.email_alert_trigger_method){\n                    const hasEmail = (dmd.email || []).length > 0 || (dmd.contacts || []).some(c=>c.use_email) || (dmd.contact_groups || []).some(g=>g.use_email);\n                    if(hasEmail){\n                    }\n                    else{\n                        missedFields.push(\"email\");\n                    }\n                }\n            }\n            else if(key === \"phone\"){\n                const idm = finalData[\"is_delivery_method\"] || {};\n                const dmd = finalData[\"delivery_method_data\"] || {};\n                if(idm.phone_alert_trigger_method){\n                    const hasPhone = (dmd.phone || []).length > 0 || (dmd.contacts || []).some(c=>c.use_phone) || (dmd.contact_groups || []).some(g=>g.use_phone);\n                    if(hasPhone){\n                    }\n                    else{\n                        missedFields.push(\"phone\");\n                    }\n                }\n            }\n            else{\n                if(Object.hasOwn(finalData, key) && (finalData[key] != \"\")){\n                }\n                else{\n                    missedFields.push(key);\n                }\n            }\n        })\n        this.MANDATORY_PARAMETERS.forEach(key=>{\n            if(key === \"roc_threshold_unit\"){\n                if(Object.hasOwn(paramData, key)){\n                }\n                else{\n                    missedFields.push(key);\n                }\n\n            }\n            else{\n                if(Object.hasOwn(paramData, key) && (paramData[key] != \"\")){\n                }\n                else{\n                    missedFields.push(key);\n                }\n            }\n        })\n        if(missedFields.length > 0){\n            this.blinkMissedLabels(missedFields);\n            return;\n        }else{\n            await this.createAlertRequest();\n            return;\n        }\n    },\n    async initializeCreateAlert(){\n\n        let curr = this.get(\"alertProfileFormParametersData\");\n        curr[\"can_soft_reset\"] = this.isSoftReset;\n        curr[\"allowed_soft_reset_occurrences\"] = this.softResetOccurrences;\n        this.set(\"alertProfileFormParametersData\", curr);\n\n        //Add Rate if both parts are provided\n        try{\n            let currRate = this.get(\"initRateValue\");\n            let dispPart = currRate.split(\"/\")[0];\n            let timePart = currRate.split(\"/\")[1];\n            if(dispPart != null && dispPart.length>0 && timePart != null && timePart.length>0){\n                curr[\"roc_threshold_unit\"] = currRate;\n            }\n        }\n        catch(e){\n        }\n        //Add time if it is not pull or \"\"\n        try{\n            let timePart2 = this.get(\"initTimePartRateValue\");\n            if(timePart2 != null && timePart2.length>0){\n                curr[\"period_window_unit\"] = timePart2;\n            }\n        }\n        catch(e){\n        }\n        await this.validateFormFields();\n\n    },\n    actions: {\n        updateTimeDropdownUnit(key, value) {\n            // console.log(`updateTimeDropdownUnit time: ${value}`)\n            this.set(\"initTimePartRateValue\", value)\n        },\n        updatePeriodWindowValueInput(e){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"period_window_value\"] = Number(e.target.value);\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateRateDropdownUnit(value) {\n            console.log(`updateRateDropdownUnit rate: ${value}`)\n            this.breakdownRateStoreParts(value);\n        },\n        updateROCThresholdValueInput(e){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"roc_threshold_value\"] = Number(e.target.value);\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateOccurrencesValueInput(e){\n            let curr = this.get(\"alertProfileFormParametersData\");\n            curr[\"allowed_occurrences\"] = Number(e.target.value);\n            this.set(\"alertProfileFormParametersData\", curr);\n        },\n        updateSoftResetOccurrences(e){\n            this.set(\"softResetOccurrences\", Number(e.target.value));\n        },\n        updateSoftResetCheckbox(){\n            let curr = this.get(\"isSoftReset\");\n            this.set(\"softResetOccurrences\", 0);\n            this.set(\"isSoftReset\", !curr);\n        },\n        async createAlert(){\n            // console.log(\"Toggle Create Alert! \");\n            // console.log(\"final data\");\n            // console.log(this.get(\"alertProfileFormFinalData\"));\n            // console.log(\"channels data\");\n            // console.log(this.get(\"alertProfileFormChannelsData\"));\n            // console.log(\"params data\");\n            // console.log(this.get(\"alertProfileFormParametersData\"));\n            await this.initializeCreateAlert();\n        },\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewBlastEventObject(_this) {\n    _this.set('newBlastEventObject', {\n        isVisible: true\n    });\n    _this.set('timestamp', null);\n    _this.set('delay', 0);\n    _this.set('east', null);\n    _this.set('north', null);\n    _this.set('depth', null);\n    _this.set('blastType', '1');\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    newBlastEventObject: {\n        isVisible: true\n    },\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    timeFormat: 'HH:mm:ss',\n    timestamp: null,\n    delay: 0,\n    blastType: '1',\n    dateTimePicker: null,\n    datePicker: null,\n    east: null,\n    north: null,\n    depth: null,\n    project: null,\n    level: null,\n\n    selectOptionsArray: map('blastTypesSelectOptions', function(item){\n        const blastTypesSelectOptionsKyes = this.get('blastTypesSelectOptionsKyes').split(\",\");\n        return {\n            key: item.get(blastTypesSelectOptionsKyes[0]),\n            value: item.get(blastTypesSelectOptionsKyes[1])\n        };\n    }),\n\n    // look for isVisibleCreateNewForm variable change and reset newBlastEventObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewBlastEventObject(this);\n        }\n    }),\n\n    actions: {\n\n        setProject(event) {\n            const selectedId = event.target.value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(event) {\n            const selectedId = event.target.value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n\n        addNew(object){\n            //let store = this.get('store');\n            // show create new item form\n            this.set('isVisibleCreateNewForm', true);\n        },\n        saveNew(object){\n            \n            let _this = this;\n            let store = this.get('store');\n            let newBlastEventObject = this.get('newBlastEventObject');\n            \n            if (this.get('timestamp') != null) {\n                newBlastEventObject.timestamp = moment(this.get('timestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            //console.log('here');\n            //newBlastEventObject.delay = this.get('delay');\n            newBlastEventObject.east = this.get('east');\n            newBlastEventObject.north = this.get('north');\n            newBlastEventObject.depth = this.get('depth');\n            newBlastEventObject.blastType = store.peekRecord('blast-type', this.get('blastType'));\n            newBlastEventObject.project = this.get('project');\n            newBlastEventObject.level = this.get('level');\n            \n            const newBlastEvent = store.createRecord('blast-event', newBlastEventObject);\n\n            // save new blast-event to DB\n            //const savedObject = newBlastEvent.save().then(function(results){\n            newBlastEvent.save().then(function(results){\n                // hide create new item form\n                _this.set('isVisibleCreateNewForm', false);\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n            \n                // if blast-event was successfully saved to DB, then display it\n                //object.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                //_this.sendAction('vewRowDetails', results.id);\n            })\n            .catch((error) => {\n                console.error(error);\n            });\n\n            // .catch(function(reason){\n            //     if (reason.errors[0].status == 403) {\n            //         _this.setProp('permissionError', true);\n            //     }\n            // });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewBlastEventObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n        // let datePicker = this.$(\".datepicker-input\").datetimepicker({\n        //     format: _this.get('timeFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('timeFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('datePicker', datePicker);\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n        if (this.get('datePicker')) {\n            this.get('datePicker').datetimepicker(\"destroy\");\n        }\n    },\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewSeismicEventObject(_this) {\n    _this.set('newSeismicEventObject', {\n        isVisible: true\n    });\n    _this.set('timestamp', null);\n    _this.set('east', null);\n    _this.set('north', null);\n    _this.set('depth', null);\n    _this.set('seismicType', '1');\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    newSeismicEventObject: {\n        isVisible: true\n    },\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    timestamp: null,\n    seismicType: '1',\n    dateTimePicker: null,\n    east: null,\n    north: null,\n    depth: null,\n\n    selectOptionsArray: map('seismicTypesSelectOptions', function(item){\n        const seismicTypesSelectOptionsKyes = this.get('seismicTypesSelectOptionsKyes').split(\",\");\n        return {\n            key: item.get(seismicTypesSelectOptionsKyes[0]),\n            value: item.get(seismicTypesSelectOptionsKyes[1])\n        };\n    }),\n\n    // look for isVisibleCreateNewForm variable change and reset newSeismicEventObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewSeismicEventObject(this);\n        }\n    }),\n\n    actions: {\n        addNew(object){\n            let store = this.get('store');\n            // show create new item form\n            this.set('isVisibleCreateNewForm', true);\n        },\n        saveNew(object){\n            let _this = this,\n                store = this.get('store'),\n                newSeismicEventObject = this.get('newSeismicEventObject')\n            ;\n\n            if (this.get('timestamp') != null) {\n                newSeismicEventObject.timestamp = moment(this.get('timestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n            newSeismicEventObject.east = this.get('east');\n            newSeismicEventObject.north = this.get('north');\n            newSeismicEventObject.depth = this.get('depth');\n            newSeismicEventObject.seismicType = store.peekRecord('seismic-type', this.get('seismicType'));\n\n            const newSeismicEvent = store.createRecord('seismic-event', newSeismicEventObject);\n\n            // save new seismic-event to DB\n            const savedObject = newSeismicEvent.save().then(function(results){\n                // hide create new item form\n                _this.set('isVisibleCreateNewForm', false);\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n\n                // if seismic-event was successfully saved to DB, then display it\n                //object.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                //_this.sendAction('vewRowDetails', results.id);\n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewSeismicEventObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        //this.set('dateTimePicker', dateTimePicker);\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n    },\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\n// export default class DashMapComponent extends Component {\n//     zoom = 12;\n//     mapBounds = computed(function() {\n//         return [[40.574706, -112.178131],[40.492465, -112.099509]];\n//     });\n// }\n\nexport default Component.extend({\n    didInsertElement() {\n        var map = L.map('dashMap', {\n            center: [this.lat, this.lng],\n            zoom: this.zoom\n        });\n        //L.tileLayer('http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png').addTo(map);\n        L.imageOverlay(\"/assets/images/mine.png\",this.mapBounds).addTo(map);\n        let marker = L.marker([40.561220,-112.142008]);\n\n        let popupContent = \"<h4>ID: \" + \"<a href=\\\"/instrument/190171001/\\\">190171001</a>\" + \"<br />\" +\n                            \"Type: \" + \"Exto\" + \"<br />\" +\n                            \"Level: \" + \"AC1\" + \"<br />\" +\n                            \"State: \" + \"Normal</h4>\";\n\n\n        marker.bindPopup(popupContent).openPopup();\n        marker.addTo(map);\n    },\n    lat: 40.530220,\n    lng: -112.142008,\n    zoom: 14,\n    mapBounds: computed(function() {\n        return [[40.574706, -112.178131],[40.492465, -112.099509]];\n    }),\n\n})","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\n\nexport default Component.extend({\n    ajax: service(),\n    session: service(),\n    isVisibleExportDataForm: true,\n    instrumentId: null,\n    fileFormat: 'csv',\n    loading: false,\n    fileFormats: [\n        {\n            key: 'csv',\n            value: '*.csv',\n        },\n        {\n            key: 'csv_YYYY-MM-DD',\n            value: \"YYYY-MM-DD.csv\"\n        },\n        {\n            key: 'csv_YYYY/MM/DD',\n            value: \"YYYY/MM/DD.csv\"\n        },\n        {\n            key: 'csv_MM/DD/YYYY',\n            value: \"MM/DD/YYYY.csv\"\n        },\n        {\n            key: 'txt',\n            value: '*.txt',\n        },\n        {\n            key: 'dlog',\n            value: '*.dlog',\n        },\n        {\n            key: 'dlog_YYYYMMDD',\n            value: '*.dlog_YYYYMMDD',\n        },\n        {\n            key: 'dlog_DDMMYYYY',\n            value: '*.dlog_DDMMYYYY',\n        },\n        {\n            key: 'dlog_MMDDYYYY',\n            value: '*.dlog_MMDDYYYY',\n        },\n        {\n            key: 'dlog_MMDDYY',\n            value: '*.dlog_MMDDYY',\n        },\n    ],\n    fileName: computed('fileFormat', 'fileFormats', function() {\n        return this.get('instrumentId') + '.' + this.get('fileFormat');\n    }),\n    fileLink: computed('fileFormat', 'fileFormats', function() {\n        \n        let base = getApiBaseUrl();\n        return base + '/instruments/' + this.get('instrumentId') + '/displacement-values?format=' + this.get('fileFormat');\n    }),\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('fileFormat', function(){\n        this.set('isExportLinkReady', false);\n    }),\n    isExportLinkReady: false,\n    // actions: {\n    //     downloadFile() {\n    //         this.set('loading', true);            \n    //         var $t = $(this);\n    //         let request = $.ajax({\n    //             method: \"GET\",\n    //             url: this.get('fileLink'),\n    //             headers: {\n    //                 'Authorization': 'Basic ' + this.get('session').data.authenticated['login'],\n    //             },\n    //             success: download.bind(true, \"text/csv\", this.get('fileName')),\n    //         })//This method is added to stop the loading \"spinner\" from spinning after the download\n    //         request.done(function( msg ) {\n    //             $t[0].set('loading', false);\n    //         });\n    //     },\n    actions: {\n        downloadFile() {\n            const _this = this;\n            this.set('loading', true);\n\n            // Get the current URL\n            let currentUrl = window.location.href;\n\n            // Extract the last segment of the URL\n            let urlSegments = currentUrl.split('/');\n            let originator = urlSegments[urlSegments.length - 1] || null;\n            if (originator.includes('raw-data')){\n                originator = 'raw-data&isDownload=true';\n            }\n            // console.log(\"originator: \" + originator);\n\n            //New Section for appending Advanced Search Params IF it exists\n            const params = new URLSearchParams(currentUrl.split('?')[1]);\n\n            // Define the key parameters to look for\n            const keys = ['advancedEndDate', 'advancedStartDate', 'advancedYAxisUnit'];\n\n            // Loop through the keys and log them if they exist\n            keys.forEach(key => {\n              if (params.has(key)) {\n                originator += `&${key}=${params.get(key)}`\n              }\n            });\n            // Append the originator parameter to the file link\n            let fileLink = this.get('fileLink');\n            let urlWithOriginator = originator ? fileLink + '&originator=' + originator : fileLink;\n\n            let filename = this.get('fileName');\n            if (this.get('fileName').split('.')[1].includes(\"_\")){\n                // console.log(\"csv filename: \" + this.get('fileName').split('.')[1].split(\"_\")[0]);\n                filename = this.get('instrumentId') + '.' + this.get('fileName').split('.')[1].split(\"_\")[0];\n            }\n\n            fetch(urlWithOriginator, {\n                method: 'GET',\n                headers: {\n                    Authorization: 'Bearer ' + localStorage.token\n                }\n            })\n            .then(response => response.text())\n            .then(data => {\n                download(data, filename, \"text/csv\");\n                _this.set('loading', false);\n            });\n        },\n\n    \n        updateProperties(propertyNames = [], propertyValues = []) {\n            const _this = this;\n            if (propertyNames.length > 0 && propertyValues.length > 0 && propertyNames.length === propertyValues.length) {\n                propertyNames.forEach( function(propertyName, i) {\n                    _this.set(propertyName, propertyValues[i]);\n                });\n            } else if (!Array.isArray(propertyNames) && propertyNames !== '' && propertyValues !== '') {\n                _this.set(propertyNames, propertyValues);\n            }\n        },\n        cancel() {\n            this.set('isVisibleExportDataForm', false);\n            this.set('loading', false);\n\n        }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\n\nexport default Component.extend({\n    ajax: service(),\n    session: service(),\n    isVisibleExportDataForm: true,\n    gatewayId: null,\n    fileFormat: 'csv',\n    loading: false,\n    fileFormats: [\n        {\n            key: 'csv',\n            value: '*.csv',\n        },\n        {\n            key: 'csv_YYYY-MM-DD',\n            value: \"YYYY-MM-DD.csv\"\n        },\n        {\n            key: 'csv_YYYY/MM/DD',\n            value: \"YYYY/MM/DD.csv\"\n        },\n        {\n            key: 'csv_MM/DD/YYYY',\n            value: \"MM/DD/YYYY.csv\"\n        },\n        {\n            key: 'txt',\n            value: '*.txt',\n        },\n        {\n            key: 'dlog',\n            value: '*.dlog',\n        },\n        {\n            key: 'dlog_YYYYMMDD',\n            value: '*.dlog_YYYYMMDD',\n        },\n        {\n            key: 'dlog_DDMMYYYY',\n            value: '*.dlog_DDMMYYYY',\n        },\n        {\n            key: 'dlog_MMDDYYYY',\n            value: '*.dlog_MMDDYYYY',\n        },\n        {\n            key: 'dlog_MMDDYY',\n            value: '*.dlog_MMDDYY',\n        },\n    ],\n    fileName: computed('fileFormat', 'fileFormats', function() {\n        return this.get('gatewayId') + '.' + this.get('fileFormat');\n    }),\n    fileLink: computed('fileFormat', 'fileFormats', function() {\n        let base = getApiBaseUrl();\n        \n        return base + '/gateways/' + this.get('gatewayId') + '/gateway-values?format=' + this.get('fileFormat');\n    }),\n    // look for isVisibleCreateNewForm variable change and reset newGatewayValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('fileFormat', function(){\n        this.set('isExportLinkReady', false);\n    }),\n    isExportLinkReady: false,\n    actions: {\n        downloadFile() {\n            this.set('loading', true);\n            let filename = this.get('fileName');\n            console.log('\"exprot file name: ' + filename);\n            if (this.get('fileName').split('.')[1].includes(\"_\")){\n                filename = this.get('gatewayId') + '.' + this.get('fileName').split('.')[1].split(\"_\")[0];\n            }\n            fetch(this.get('fileLink'), {\n                method: 'GET',\n                headers: {\n                    Authorization: 'Bearer ' + localStorage.token\n                }\n            })\n            .then(response => response.text())\n            .then(text => {\n                download(text, filename, \"text/csv\");\n                this.set('loading', false);\n            })\n            .catch(() => {\n                this.set('loading', false);\n            });\n        },\n        updateProperties(propertyNames = [], propertyValues = []) {\n            const _this = this;\n            if (propertyNames.length > 0 && propertyValues.length > 0 && propertyNames.length === propertyValues.length) {\n                propertyNames.forEach( function(propertyName, i) {\n                    _this.set(propertyName, propertyValues[i]);\n                });\n            } else if (!Array.isArray(propertyNames) && propertyNames !== '' && propertyValues !== '') {\n                _this.set(propertyNames, propertyValues);\n            }\n        },\n        cancel() {\n            this.set('isVisibleExportDataForm', false);\n            this.set('loading', false);\n\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    isVisibleImportDataForm: false,\n    isVisibleError: false,\n    instrumentId: null,\n    loading: false,\n    fileFormat: 'IMS',\n    fileFormats: [\n        {\n            key: 'IMS',\n            value: 'IMS (*.txt)',\n        },\n        {\n            key: 'EVP',\n            value: 'EVP (*.csv)',\n        },\n        {\n            key: 'ESG',\n            value: 'ESG (*.csv)',\n        },\n        {\n            key: 'ESGS',\n            value: 'ESG Source (*.src)',\n        },\n    ],\n    isSubmitting: false,\n    fileSettings: {\n        instrument_id: null,\n        file_format: null\n    },\n    actions: {\n        updateProperties(propertyNames = [], propertyValues = []) {\n            const _this = this;\n            if (propertyNames.length > 0 && propertyValues.length > 0 && propertyNames.length === propertyValues.length) {\n                propertyNames.forEach( function(propertyName, i) {\n                    _this.set(propertyName, propertyValues[i]);\n                });\n            } else if (!Array.isArray(propertyNames) && propertyNames !== '' && propertyValues !== '') {\n                _this.set(propertyNames, propertyValues);\n            }\n        },\n        importFile() {\n            this.set('loading', true);\n            this.set('isSubmitting', true);\n            this.set('fileSettings.file_format', this.get('fileFormat'));\n        },\n        cancelImport() {\n            this.set('isSubmitting', false);\n            this.set('isVisibleError',false);\n            this.set('isVisibleImportDataForm', false);\n            this.set('loading', false);\n        },\n        notSubmitting() {\n            this.set('isSubmitting',false);\n        },\n        errorHappened(message) {\n            console.log('error happened: ' + message);\n            this.set('isVisibleError',true);\n            scheduleOnce('afterRender', this, function() {\n                this.set('isSubmitting',false);\n                this.set('loading', false);\n            });\n        }\n    }\n});","import { computed, observer } from '@ember/object';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nexport default Component.extend({\n    isVisibleImportDataForm: false,\n    isVisibleError: false,\n    loading: false,\n    isVisibleErrorChangeObserver: observer('isVisibleError', function() {\n        if (this.get('isVisibleError')) {\n            //console.log('show error!');\n        } else {\n            //console.log('hide error!');\n        }\n    }),\n    error: \"\",\n    instrumentId: null,\n    fileFormat: 'dlog',\n    dateFormat: '',\n    dateFormats: [{\n        key: 'YYYYMMDD',\n        value: 'YYYY/MM/DD'\n    }, {\n        key: 'MMDDYYYY',\n        value: 'MM/DD/YYYY',\n    }, {\n        key: 'DDMMYYYY',\n        value: 'DD/MM/YYYY',\n    }, {\n        key: 'MMDDYY',\n        value: 'MM/DD/YY (.csv default)',\n    }, {\n        key: 'YYMMDD',\n        value: 'YY/MM/DD',\n    }],\n    fileFormats: [{\n        key: 'dlog',\n        value: '*.dlog',\n    }, {\n        key: 'csv',\n        value: '*.csv',\n    }, {\n        key: 'txt',\n        value: '*.txt',\n    }],\n        // }, {\n        //     key: 'csv_YYMMDD',\n        //     value: \"*.csv_YYMMDD\"\n        // }, {\n        //     key: 'dlog_YYYYMMDD',\n        //     value: '*.dlog_YYYYMMDD',\n        // }, {\n        //     key: 'dlog_DDMMYYYY',\n        //     value: '*.dlog_DDMMYYYY',\n        // }, {\n        //     key: 'dlog_MMDDYYYY',\n        //     value: '*.dlog_MMDDYYYY',\n        // }, {\n        //     key: 'dlog_MMDDYY',\n        //     value: '*.dlog_MMDDYY',\n        // }],\n    isRAW:true,\n    uniqueInstruments:{'Adict': 'If data is in mm, please uncheck. If data is in bits, please check.'},\n    showIsRAW:computed(function(){\n        if(this.get(\"instrument\")){\n            let uniqueInstrumentsKeys = Object.keys(this.get('uniqueInstruments'));\n            if(uniqueInstrumentsKeys.includes(this.get(\"instrument\").instrumentType.title)){\n                return true;\n            }\n        }\n        return false;\n    }),\n    getUnitInstrComment:computed(function(){{\n        if(this.get(\"instrument\")){\n            let uniqueInstrumentsKeys = Object.keys(this.get('uniqueInstruments'));\n            if(uniqueInstrumentsKeys.includes(this.get(\"instrument\").instrumentType.title)){\n                return this.get('uniqueInstruments')[this.get(\"instrument\").instrumentType.title];\n            }\n        }\n        return '';\n    }}),\n    isSubmitting: false,\n    fileSettings: {\n        instrument_id: null,\n        file_format: null,\n        date_format: null,\n        isRAW:true,\n    },\n    actions: {\n        updateProperties(\n            propertyNames = [], \n            propertyValues = []) {\n\n            const _this = this;\n            if (propertyNames.length > 0 && propertyValues.length > 0 && propertyNames.length === propertyValues.length) {\n                propertyNames.forEach( function(propertyName, i) {\n                    _this.set(propertyName, propertyValues[i]);\n                });\n            } else if (!Array.isArray(propertyNames) && propertyNames !== '' && propertyValues !== '') {\n                _this.set(propertyNames, propertyValues);\n            }\n        },\n        importFile() {\n            // this.set('isVisibleImportDataForm', false);\n            this.set('loading', true);\n            this.set('isSubmitting', true);\n            this.set('fileSettings.instrument_id', this.get('instrumentId'));\n            this.set('fileSettings.file_format', this.get('fileFormat'));\n            this.set('fileSettings.isRAW', this.get('isRAW'));\n            this.set('fileSettings.date_format', this.get('dateFormat'));\n        },\n        cancelImport() {\n            this.set('isSubmitting', false);\n            this.set('isVisibleError',false);\n            this.set('isVisibleImportDataForm', false);\n            this.set('loading', false);\n        },\n        notSubmitting() {\n            this.set('isSubmitting',false);\n        },\n        errorHappened(message) {\n            console.log('error happened: ' + message);\n            this.set('isVisibleError',true);\n            this.set('error', message.replace(/['\"]+/g, ''));\n            scheduleOnce('afterRender', this, function() {\n                this.set('isSubmitting',false);\n                this.set('loading', false);\n            });\n        }\n    }\n});","import { computed, observer } from '@ember/object';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nexport default Component.extend({\n    isVisibleImportDataForm: false,\n    isVisibleError: false,\n    loading: false,\n    isVisibleErrorChangeObserver: observer('isVisibleError', function() {\n        if (this.get('isVisibleError')) {\n            //console.log('show error!');\n        } else {\n            //console.log('hide error!');\n        }\n    }),\n    error: \"\",\n    gatewayId: null,\n    fileFormat: 'dlog',\n    dateFormat: '',\n    dateFormats: [{\n        key: 'YYYYMMDD',\n        value: 'YYYY/MM/DD'\n    }, {\n        key: 'MMDDYYYY',\n        value: 'MM/DD/YYYY',\n    }, {\n        key: 'DDMMYYYY',\n        value: 'DD/MM/YYYY',\n    }, {\n        key: 'MMDDYY',\n        value: 'MM/DD/YY (.csv default)',\n    }, {\n        key: 'YYMMDD',\n        value: 'YY/MM/DD',\n    }],\n    fileFormats: [{\n        key: 'dlog',\n        value: '*.dlog',\n    }, {\n        key: 'csv',\n        value: '*.csv',\n    }, {\n        key: 'txt',\n        value: '*.txt',\n    }],\n        // }, {\n        //     key: 'csv_YYMMDD',\n        //     value: \"*.csv_YYMMDD\"\n        // }, {\n        //     key: 'dlog_YYYYMMDD',\n        //     value: '*.dlog_YYYYMMDD',\n        // }, {\n        //     key: 'dlog_DDMMYYYY',\n        //     value: '*.dlog_DDMMYYYY',\n        // }, {\n        //     key: 'dlog_MMDDYYYY',\n        //     value: '*.dlog_MMDDYYYY',\n        // }, {\n        //     key: 'dlog_MMDDYY',\n        //     value: '*.dlog_MMDDYY',\n        // }],\n    isSubmitting: false,\n    fileSettings: {\n        gateway_id: null,\n        file_format: null,\n        date_format: null\n    },\n    actions: {\n        updateProperties(\n            propertyNames = [], \n            propertyValues = []) {\n\n            const _this = this;\n            if (propertyNames.length > 0 && propertyValues.length > 0 && propertyNames.length === propertyValues.length) {\n                propertyNames.forEach( function(propertyName, i) {\n                    _this.set(propertyName, propertyValues[i]);\n                });\n            } else if (!Array.isArray(propertyNames) && propertyNames !== '' && propertyValues !== '') {\n                _this.set(propertyNames, propertyValues);\n            }\n        },\n        importFile() {\n            // this.set('isVisibleImportDataForm', false);\n            this.set('loading', true);\n            this.set('isSubmitting', true);\n            this.set('fileSettings.gateway_id', this.get('gatewayId'));\n            this.set('fileSettings.file_format', this.get('fileFormat'));\n            this.set('fileSettings.date_format', this.get('dateFormat'));\n        },\n        cancelImport() {\n            this.set('isSubmitting', false);\n            this.set('isVisibleError',false);\n            this.set('isVisibleImportDataForm', false);\n            this.set('loading', false);\n        },\n        notSubmitting() {\n            this.set('isSubmitting',false);\n        },\n        errorHappened(message) {\n            console.log('error happened: ' + message);\n            this.set('isVisibleError',true);\n            this.set('error', message.replace(/['\"]+/g, ''));\n            scheduleOnce('afterRender', this, function() {\n                this.set('isSubmitting',false);\n                this.set('loading', false);\n            });\n        }\n    }\n});","import Component from '@ember/component';\nimport { computed } from '@ember/object';\n\n/**\n * Reusable add/edit data-row modal.\n *\n * Inputs:\n *   - isOpen           : boolean\n *   - title            : string, e.g. \"Edit Data Row for 260121B1001\"\n *   - fields           : array of plain objects: { key, label, type, value }\n *                          type is one of: 'date' | 'datetime-local' | 'number' | 'text'\n *   - onSave           : action({ key: value }) — called with the user's edited values\n *   - onCancel         : action() — close without saving\n *\n * The DOM is the source of truth while the modal is open. On Save we read each\n * input's current value via document.getElementById and emit a snapshot.\n * This avoids reactivity races where a `value=field.value` binding could repeatedly\n * reset inputs to the initial value mid-edit.\n *\n * Designed to be instrument-agnostic — used for grouped extoB raw-data today;\n * reusable for any future instrument-type / gateway-type row editing.\n */\nexport default Component.extend({\n    isOpen: false,\n    title: '',\n    fields: null,\n    tagName: '',\n\n    // Stable per-instance prefix for input IDs so multiple modals on the same page don't collide.\n    domIdPrefix: computed(function(){\n        return 'drm-' + Math.random().toString(36).slice(2, 8) + '-';\n    }),\n\n    // Augment each field with its DOM input id so the template can render id=field.domId.\n    fieldsWithDomIds: computed('fields', 'domIdPrefix', function(){\n        const prefix = this.get('domIdPrefix');\n        return (this.get('fields') || []).map(f => Object.assign({}, f, { domId: prefix + f.key }));\n    }),\n\n    actions: {\n        save(){\n            const onSave = this.get('onSave');\n            if(typeof onSave !== 'function'){ return; }\n            const snapshot = {};\n            (this.get('fieldsWithDomIds') || []).forEach((f) => {\n                const el = document.getElementById(f.domId);\n                snapshot[f.key] = el ? el.value : '';\n            });\n            onSave(snapshot);\n        },\n        cancel(){\n            const onCancel = this.get('onCancel');\n            if(typeof onCancel === 'function'){ onCancel(); }\n        },\n    },\n});\n","import { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    dataLegends: computed('rowDetails', function() {\n        let objectKyes = Array.from( this.get('rowDetails').constructor.attributes.keys() );\n        // console.log(objectKyes);\n        return objectKyes;\n    }),\n    recordValues: computed('rowDetails', function() {\n\n        let item = this.get('rowDetails');\n        return item.getProperties(this.get('dataLegends'));\n    })\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\n// Chart line colors — sourced from color-palette\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,    // #0077b6\n    colorPalette.orange2,   // #FF7444\n    colorPalette.green3,    // #2a9d8f\n    colorPalette.red1,      // #D25353\n    colorPalette.purple7,   // #8b5cf6\n    colorPalette.beige22,   // #b08968\n    colorPalette.pink6,     // #ec4899\n    colorPalette.gray5,     // #6b7280\n    colorPalette.teal6,     // #10b981\n    colorPalette.cyan4,     // #06b6d4\n];\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        const fullRangeChartData = this.get('fullRangeChartData');\n        let dataValuesCount;\n        try {\n            dataValuesCount = fullRangeChartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n\n        let anchors = this.get('instrument').get('anchors');\n        const arr = anchors.content ?? anchors;\n        let anchorDistances = arr.map(anchor => anchor.get('distance'));\n\n        // Fallback: if anchors haven't loaded yet, use value indices from the data\n        if (anchorDistances.length === 0 && dataValuesCount > 0) {\n            anchorDistances = Array.from({ length: dataValuesCount }, (_, i) => i);\n        }\n\n        var modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            var midPoints = [];\n            for (var ctr = 0; ctr < anchorDistances.length - 1; ctr++) {\n                midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n            }\n            if (modelName === 'displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        }\n        return anchorDistances;\n    }),\n\n    // Main chart sourced from zoomChartData to mirror NVD3 (Group By applies to visible chart).\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'anchorDistances', 'chartDataModelName', function() {\n        const anchorDistances = this.get('anchorDistances');\n        const fullRangeChartData = this.get('zoomChartData');\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n\n        const lines = anchorDistances.map((chartLineName, chartLineIndex) => ({\n            key: chartLineName,\n            values: fullRangeChartData.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[chartLineIndex] !== undefined) ? arr[chartLineIndex] : null\n                };\n            })\n        }));\n\n        // Add temperature overlay on y2 (unless viewing temperature data itself)\n        if (modelName !== 'temperature-values') {\n            const zoomTempData = this.get('zoomTempData');\n            if (zoomTempData && zoomTempData.length) {\n                lines.push({\n                    key: 'T (°C)',\n                    yAxis: 'y2',\n                    hidden: false,\n                    values: zoomTempData.map(item => {\n                        const rawValues = item.get('values');\n                        const arr = Array.isArray(rawValues) ? rawValues : [];\n                        return {\n                            x: moment(item.get('id')).valueOf(),\n                            y: arr[0] !== undefined ? arr[0] : null\n                        };\n                    })\n                });\n            }\n        }\n\n        return lines;\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        let title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                units = this.get(\"yAxisUnit\") || getAttr('units');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'temperature':\n                axisName = \"Temperature\";\n                units = \"°C\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const fullRangeChartLinesData = this.get('fullRangeChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildMainChart(fullRangeChartLinesData, yAxisTitle);\n            this._buildOverviewChart();\n        });\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        const datasets = anchorDistances.map((chartLineName, i) => ({\n            label: String(chartLineName),\n            data: fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        anchorDistances.forEach((chartLineName, i) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(chartLineName));\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed, get } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nfunction resetNewInstrumentObject(_this) {\n    //console.log('reset');\n    _this.set('newInstrumentObject', {});\n    _this.set('baseLength', 1);\n    _this.set('zeroTimestamp', null);\n    _this.set('installDate', null);\n    //_this.set('east', null);\n    //_this.set('north', null);\n    //_this.set('depth', null);\n    //_this.set('azimuth', null);\n    //_this.set('dip', null);\n    //_this.set('instrumentType', 0);\n    //_this.set('headAt', 'HAC');\n    //_this.set('instrumentLength', 0);\n    //_this.set('strokeLength', 0);\n    //_this.set('referenceAnchor', null);\n    //_this.set('headExclusionLength', 0);\n    //_this.set('gaugeLength', 0);\n    //_this.set('bulbed', false);\n    //_this.set('plated', false);\n    //_this.set('stacked', false);\n    //_this.set('active', true);\n}\n\nexport default class CreateDConvInstrument extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n    }\n\n    isAuthenticated = true;\n    newInstrumentObject = {};\n    headAt = 'HAC';\n    zeroTimestamp = null;\n    installDate = null;\n    authError = false;\n    project = null;\n    level = null;\n\n    actions= {\n\n        \n        setProject(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n\n        createInstrument(object){\n\n            //console.log(this.get('prevDup'));\n            //console.log((typeof this.get('prevDup') === \"undefined\"));\n\n            let _this = this,\n            store = this.get('store'),\n            newInstrumentObject = this.get('newInstrumentObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newInstrumentObject.id = this.get('id');\n            newInstrumentObject.baseLength = this.get('baseLength');\n            newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n            newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n            newInstrumentObject.active = true;\n\n            if(typeof newInstrumentObject.id === 'undefined' || newInstrumentObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n\n            if(!error) {\n                if(typeof newInstrumentObject.strokeLength === 'undefined' || newInstrumentObject.strokeLength === 0) {\n                    error = true;\n                    this.setError('fieldError',true);\n                    this.setError('isVisibleError',true);\n                }\n            }\n\n            if (this.get('zeroTimestamp') != null) {\n                newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('installDate') != null) {\n                newInstrumentObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('baseLength') == null) {\n                this.set('baseLength', 1);\n            }\n            // console.log(get(this, 'duplicateError'));\n\n            let newInstrument = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    //console.log(this.get('prevDup'));\n                    if(err.message.includes('has already been used')) {\n                        //console.log('duplicate');\n                        this.setError('duplicateError',true);\n                        \n                        error = true;\n                        dup = true;\n                    }\n                    // console.log(err.message);\n                }\n            }\n            \n            this.setError('authError', false);\n\n            if (!error) {\n                \n                    newInstrument.save().then(function(results){\n                        // console.log(dup);\n                        if(results.id != null) {\n                            store.createRecord('anchor', {number: 0, distance: 0, instrument: results}).save();\n                            let anchorCount = 1;//parseInt(newInstrumentObject.id.substring(4,newInstrumentObject.id.length > 9 ? 6 : 5)) - 1;\n                            //store.createRecord('anchor', {number: 1, distance: 0, instrument: results}).save();\n                            store.createRecord('anchor', {number: 1, distance: newInstrumentObject.baseLength, instrument: results}).save();\n                        }\n\n                        if(results.id != null) {\n                            _this.get('submit')(results.id);\n                        } else {\n                            this.setError('isVisibleError',true);\n                            error = true;\n                        }\n                    }).catch(function(reason) {\n                        \n                        _this.setError('isVisibleError',true);\n                        _this.setError('authError',true);\n                    }); \n            } \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let displacementValueObjectValues = _this.get('displacementValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(displacementValueObjectValues).forEach(function(key,index) {\n        displacementValueObjectValues[key] = 0;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n    // newTimestampValue: computed('dateFormat', function() {\n    //     return moment().format(this.get('dateFormat'));\n    // }),\n\n    newDisplacementValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n    displacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    newDisplacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    actions: {\n        setNewDisplacementValue(key, event) {\n            const vals = this.get('newDisplacementValueObjectValues');\n            vals[key] = event.target.value;\n        },\n        setNewTimestampValue(event) {\n            this.set('newTimestampValue', event.target.value);\n        },\n        setTemperatureValue(event) {\n            this.set('temperatureObjectValue', event.target.value);\n        },\n        saveNew(){\n            let _this = this,\n                store = this.get('store'),\n                newDisplacementValuesObject = this.get('newDisplacementValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                displacementValues = this.get('displacementValues'),\n                temperatureValues = this.get('temperatureValues')\n            ;\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newDisplacementValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newDisplacementValuesObject.values = Object.values(this.get('newDisplacementValueObjectValues'));\n\n            const newDisplacementValues = store.createRecord('displacement-value', newDisplacementValuesObject);\n            // save new displacement-value to DB\n            const savedDisplacementValuesObject = newDisplacementValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if displacement-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //displacementValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n                \n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import { getApiBaseUrl } from '../../utils/api-config';\nimport { computed, observer } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    didReceiveAttrs() {\n        this._super(...arguments);\n      },\n    router:service(),\n    store:service(),\n    api:service(),\n    session: service(),\n    //Old Declarations\n    // isAuthenticated : true,\n    selectedVendor: null,\n    selectedModel: null,\n    editing: 0,\n    //New Declarations\n    activeActionTab:null,\n    ordering:null,\n    paginationSearchConfig:{    \n        searchObject:{ calibrationDateOrdering:\"DESC\"},\n        pagination:{page:1, pageSize:5, totalPages:1},\n        alertProfilePaginationList : [],\n    },\n    anchorDiagramInputInitalValue:[],\n    batchSelectedAlertsID:[],\n    isAlertsListVisible:false,\n    isEditAnchorDiagram:false,\n\n    async init() {\n        this._super(...arguments);\n        await this.getAlertsList();\n    },\n    getAlertsList:async function(){\n\n        let payload = {\n            instrumentId: this.get(\"instrument\").id,\n            page: this.paginationSearchConfig.pagination.page,\n            page_size:this.paginationSearchConfig.pagination.pageSize,\n            \n        };\n        if (this.get(\"ordering\") != null ){\n            payload[\"ordering\"] = this.get(\"ordering\");\n        }\n        let url = getApiBaseUrl() + \"/alerts/\";\n        const queryString = new URLSearchParams(payload).toString();\n        if (queryString) {\n            url += `?${queryString}`;\n        }\n        const response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json(); \n            const metaPaginationData = responseData['meta'];\n            this.set(\"paginationSearchConfig.pagination.totalPages\", metaPaginationData['pagination']['total_pages']);\n\n            this.processAlertsList(responseData.data);\n            this.updatePaginationList();\n        }\n        else {\n            this.set(\"alertsList\", [])\n        } \n    },\n    processAlertsList:function(rawList){\n        let list = [];\n        rawList.forEach(element => {\n            let rawElement = element;\n            element = element[\"attributes\"]\n            list.push({\n                id: rawElement[\"id\"],\n                counter: element[\"counter\"],\n                createdAt: element[\"created-at\"],\n                evaluationType: element[\"evaluation-type\"],\n                instrumentId: element[\"instrument-id\"],\n                isAcknowledged: element[\"is-acknowledged\"],\n                isActive: element[\"is-active\"],\n                isMuted: element[\"is-muted\"],\n                lastDataReceivedAt: element[\"last-data-received-at\"],\n                lastEvaluatedAt: element[\"last-evaluated-at\"],\n                lastTriggeredAt: element[\"last-triggered-at\"],\n                level: element[\"level\"],\n                name: element[\"name\"],\n                channels: element[\"channels\"],\n                note: element[\"note\"],\n                parameters: element[\"parameters\"],\n                softResetCounter: element[\"soft-reset-counter\"],\n            })\n        });\n        this.set(\"alertsList\", list)\n    },\n    updatePaginationList: function () {\n        let range = [];\n        const maxPageToShow = 3; // Adjust this based on how many pages you want to show in the middle\n        const paginationObj = this.get('paginationSearchConfig.pagination');\n    \n        // Always include the first page\n        range.push(1);\n    \n        if (paginationObj['totalPages'] <= maxPageToShow + 2) {\n            // If total pages are small enough, show all pages\n            for (let i = 2; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else if (paginationObj['page'] <= maxPageToShow) {\n            // Current page is within the first few pages\n            for (let i = 2; i <= maxPageToShow + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        } else if (paginationObj['page'] >= paginationObj['totalPages'] - maxPageToShow + 1) {\n            // Current page is within the last few pages\n            range.push('...');\n            for (let i = paginationObj['totalPages'] - maxPageToShow; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else {\n            // Current page is in the middle\n            range.push('...');\n            for (let i = paginationObj['page'] - 1; i <= paginationObj['page'] + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        }\n    \n        this.set('paginationSearchConfig.alertProfilePaginationList', range);\n    },\n    orderingObserver: observer('ordering',async function() {\n        await this.getAlertsList();\n    }), \n    anchorDiagramLabelInitalValue:computed(\"instrument\", function(){\n        let data = {};\n        ((_a) => _a.content ?? _a)(this.get(\"instrument\").anchors).forEach((anchorObj, i)=>{\n            if(i == 0){\n                \n            }\n            else{\n                data[`channel_${i}`] = anchorObj.distance;\n            }\n        })\n        return data;\n    }),\n    licenceIsValid: computed('',function() {\n        let valid = false;\n        try {\n            valid = this.session.data.authenticated.isValid;\n        } catch {}\n        return valid;\n    }), \n    actions:{\n        async saveAnchors(){\n            try{\n                let anchors = this.get(\"instrument.anchors\");\n                let anchorMap = {};\n\n                (anchors.content ?? anchors).forEach(anchor => {\n                anchorMap[anchor.get(\"number\")] = anchor;\n                });\n                let savePromises = [];\n\n                let channels = this.get(\"instrument\").channelsNum;\n                for (let i = 0; i < channels; i ++){\n                    let anchorNumber = i;\n                    let newDistance = (i === 0)\n                        ? 0\n                        : this.get(\"anchorDiagramInputInitalValue\")[`channel_${i}`] \n                            ? this.get(\"anchorDiagramInputInitalValue\")[`channel_${i}`]\n                            : 0;\n  \n                    let existingAnchor = anchorMap[anchorNumber];\n                    if (existingAnchor) {\n                        // Update if value changed\n                        if (existingAnchor.get(\"distance\") !== newDistance) {\n                            existingAnchor.set(\"distance\", newDistance);\n                            savePromises.push(existingAnchor.save());\n                        }\n\n                    } else {\n                        // Create new anchor\n                        let newAnchor = this.get(\"store\").createRecord(\"anchor\", {\n                            instrument: this.get(\"instrument\"),\n                            number: anchorNumber,\n                            distance: newDistance\n                        });\n\n                        savePromises.push(newAnchor.save());\n                    }\n                }\n                await Promise.all(savePromises);\n                window.location.reload();\n            }\n            catch(error){\n                console.log(\"Error in saveAnchors: \" + error)\n                console.log(error);\n            }\n        },\n        updateChannelInput(key, value){\n            try{\n                let anchors = this.get(\"anchorDiagramInputInitalValue\");\n                anchors[key] = value ? value : 0;\n                this.set(\"anchorDiagramInputInitalValue\", anchors)\n            }\n            catch(error){\n                console.log(\"Error in updateChannelInput: \" + error)\n            }\n        },\n        cycleEditAnchorDiagram(){\n            let data = {};\n            ((_a) => _a.content ?? _a)(this.get(\"instrument\").anchors).forEach((anchorObj, i)=>{\n                if(i == 0){\n                    \n                }\n                else{\n                    data[`channel_${i}`] = anchorObj.distance;\n                }\n            })\n            this.set(\"anchorDiagramInputInitalValue\", data)\n            this.set(\"isEditAnchorDiagram\", !this.get(\"isEditAnchorDiagram\"));\n        },\n        cycleActionBar(tabName){\n            if (tabName === this.activeActionTab){\n                this.set(\"activeActionTab\", null);\n            }\n            else{ \n                this.set(\"activeActionTab\", tabName);\n            }\n        },\n        async jumpToPage(page){\n            try{\n                if(page != \"...\"){\n                    this.set('paginationSearchConfig.pagination.page', Number.parseInt(page))\n                    await this.getAlertsList();\n                }\n            }\n            catch(err){\n\n            }\n        },\n        cycleAlertsListVisibility(){\n            this.set(\"isAlertsListVisible\", !this.get(\"isAlertsListVisible\"));\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        viewData(id) {\n            let endDateObj = new moment();\n            let startDateObj = moment(endDateObj).subtract(7, 'days').format('YYYY-MM-DDTHH:mm');\n            let formattedEndDateObj = endDateObj.format('YYYY-MM-DDTHH:mm');\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\");\n            this.get('router').transitionTo('raw-data', id, { queryParams: {\"advancedStartDate\": startDateObj, \"advancedEndDate\": formattedEndDateObj, \"advancedYAxisUnit\": baseUnit}});\n            //this.viewData(id);\n        },\n        tGraph(id) {\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\") || \"RAW\";\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values', { queryParams: { \"advancedYAxisUnit\": baseUnit}});\n            //this.tGraph(id, 'displacement-values');\n        },\n        sGraph(id) {\n            this.get('router').transitionTo('spatial-graphs.spatial-graph', id, 'displacement-values');\n            //this.sGraph(id, 'displacement-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveInstrument(){\n            const _this = this;\n            // console.log(\"test\");\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/instruments\";    \n                }\n            } else {\n                window.location.href = \"/instruments\";\n            }            \n        }\n    }\n})","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { copy } from 'ember-copy';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'spatial-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    progressAnimationDuration: 100, //set 50, was 700\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 50, //set 25, was 500\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return this.get('blastEvents').map(function(event) {\n                return {\n                    type: 'Blast',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n            var chartData = { values: item.get(\"values\") };\n\n            var modelName = this.get('chartDataModelName');\n\n            if (modelName === 'strain-values') { \n                chartData.values.unshift(chartData.values[0]);\n            }\n                        \n            return chartData;\n        } catch (error) {\n            return [];\n        }\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n        try {\n            return { values: item.get(\"values\") };            \n        } catch (error) {\n            return [];\n        }\n    }),\n\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && modelName === 'strain-values') {\n            anchorDistances.splice(0, 1);\n        }\n        return anchorDistances;\n    }),\n\n    // calculate mid distances between anchors for strain values\n    anchorMidDistances: computed('anchorDistances', function() {\n        const anchorDistances = copy(this.get('anchorDistances')),\n            dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            midDistances = []\n        ;\n\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        anchorDistances.unshift(0);\n\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            let mid = (anchorDistances[i] + anchorDistances[i + 1]) / 2;\n            midDistances.push( +mid.toFixed(2) );\n        }\n\n        return midDistances;\n    }),\n\n    anchorColors: d3.scale.category10().range(),\n\n    anchorDistancesChartReferencePoints: computed('chartDataModelName', 'instrument', 'anchorDistances', 'anchorMidDistances', function() {\n        let anchorDistances = this.get('anchorDistances');\n        var modelName = this.get('chartDataModelName');\n        var anchorMidDistances = this.get('anchorMidDistances');\n\n        //console.log(this.get('instrument').get('instrumentTypeID'));\n\n        if(modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            return anchorMidDistances.map(function(anchorDistance){\n                return {\n                    key: anchorDistance,\n                    type: 'referencePoints',\n                    values: [\n                        anchorDistance\n                    ]\n                };\n            });\n                \n        }\n\n        return anchorDistances.map(function(anchorDistance){\n            return {\n                key: anchorDistance,\n                type: 'referencePoints',\n                values: [\n                    anchorDistance\n                ]\n            };\n        });\n    }),\n\n    inlineHoverValuesSideOffset: computed('chartDataModelName', function() {\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values') {\n            return 28;\n        }\n        return 0;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints'),\n            anchorDistances = this.get('anchorDistances'),\n            anchorDistancesChartReferencePoints = this.get('anchorDistancesChartReferencePoints')\n        ;\n        let zoomChartLinesData = [];\n\n        var modelName = this.get('chartDataModelName');\n        var anchorDist = anchorDistances;\n        \n        if(modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            anchorDist = this.get('anchorMidDistances'); \n        }\n\n        zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n            return {\n                key: chartLineIndex,\n                // mean: 3,\n                type: 'lines',\n                timestamp: zoomTimePoints[chartLineIndex],\n                values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        anchorDist[dataPointIndex],\n                        dataPoint\n                    ];\n                })\n            };\n        });\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (anchorDistancesChartReferencePoints) {\n            zoomChartLinesData = zoomChartLinesData.concat(anchorDistancesChartReferencePoints);\n        }\n\n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        var modelName = this.get('chartDataModelName');\n        var type = this.get('instrument').get('instrumentType').get('title');        \n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[chartLineIndex]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n    }),\n\n    numLines: computed('zoomTimePoints', function() {\n        return this.get('zoomTimePoints').length;\n    }),\n\n    lineDrawDelay: computed('numLines', function() {\n        return (13000 / (this.get('numLines') + 1)) ^ (1 / 20);\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').queryRecord('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            inlineHoverValuesSideOffset = _this.get('inlineHoverValuesSideOffset'),\n            progressAnimationDuration = _this.get('progressAnimationDuration'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];//.get('firstObject');\n\n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let axisName = '';\n                let units = chartData.get('units');\n                switch(yAxisLegend.get('title')) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n                \n                title = axisName  + \" (\" + units + \")\";\n            }\n\n            let zoomChart = nv.models.lineChartProgressAnimationAPI()\n                .margin({top: 55, right: 10, bottom: 85, left: 60})\n                .useInteractiveGuideline(false)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .distXAxisScale(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .showLegend(true)\n                .progressAnimationDuration(progressAnimationDuration)\n                .showXAxis(true)\n                .noData('No usable data')\n                ;\n\n\n            let length = 0;\n            try {\n                length = _this.instrument.get('instrumentLength');\n                let type = _this.instrument.get('instrumentType');\n                if (type === 'dRebar') {\n                    length = length * 1000;\n                }\n                \n            } catch (ex) {\n\n            }\n            \n            if(length !== null && length === 0) {\n                length = 0;\n            }\n\n            zoomChart.forceX([0, length]);\n/*             if (yAxisLegend.get('title') != 'bending_strain' && yAxisLegend.get('title') != 'axial_strain') {\n                \n            }\n */\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .tickFormat(d3.format(\".2f\"))\n                    // .tickFormat(function(d) {\n                    //     let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                    //     return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    // })\n                    ;\n                zoomChart.yAxis\n                    .axisLabel(title)\n                    .tickFormat(d3.format(\".2f\"));\n\n                zoomChart.distXAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .ticks(5)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            let value1 = fullRangeChartLinesData[0].values[0][0];\n                            let value2 = fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0];\n                            return nv.utils.getDateAutoscaleFormat (value1, value2)(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(45)\n                    .isDistXTooltip(isDistXTooltip)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2);\n\n                //zoomChart.legend.inlineHoverValuesSideOffset(inlineHoverValuesSideOffset);\n\n                zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log('test');\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n\n                    if (!seismicEventsArray.length || !blastEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (!activeTooltipContent) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                return zoomChart;\n            });\n\n            // declare fullRangeChart because later in zoom chart we need axis from fullRangeChart for events axis on zoomChart\n            let fullRangeChart = nv.models.focus(nv.models.line())\n               .margin({top: 10, right: 10, bottom: 30, left: 60})\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .syncBrushing(false)\n                .independentBrushing(true)\n                .showXAxis(true)\n                .showYAxis(false)\n                ;\n\n\n            nv.addGraph(function() {\n\n                fullRangeChart.xAxis\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n                fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n                fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(fullRangeChart.update);\n\n                // set zoom based on query params if set\n                let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n                let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n                if (startTimestamp && endTimestamp) {\n                    fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n                }\n\n                return fullRangeChart;\n            });\n\n        });\n\n    }\n\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n//import JSONAPISerializer from '@ember-data/serializers/json';\n\nexport default Component.extend({\n\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n    yAxisUnit: null,\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    // vibeEventsChartDistXData: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log('vibeEvents');\n    //     //console.log(events);\n    //     if ( this.get('vibeEvents') ) {\n    //         return [{\n    //             key: 'BluVibe',\n    //             type: 'distX',\n    //             color: '#80bf5c',\n    //             values: this.get('vibeEvents').map(function(event) {\n    //                 return [\n    //                     moment( event.get('id') ).valueOf(),\n    //                     event.get('size') ? (event.get('size') * -20) + 20 : 20\n    //                 ];\n    //             })\n    //         }];\n    //     }\n    //     return false;\n    // }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            let data_set = this.get('blastEvents').map(function(event) {\n                //console.log(event.get('timestamp'));\n                return {\n                    type: 'Blast',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n            //console.log(data_set);\n            return data_set;\n        }\n        return false;\n    }),\n\n    // vibeEventsArray: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log(events);\n    //     if ( events ) {\n    //         return events.map(function(event) {\n    //             return {\n    //                 type: 'BluVibe',\n    //                 time: event.get('id'),\n    //                 timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n    //                 ppa: event.get('ppa'),\n    //                 ppv: event.get('ppv'),\n    //                 freq: event.get('frequency')\n    //             };\n    //         }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n    //     }\n    //     return false;\n    // }),\n\n    zoomTempPoints: map('zoomTempData', function(item){\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        return chartData;\n    }),\n\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n        //console.log(linesKyes);\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        var modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') { \n            chartData.values.push(0);\n        }\n        //console.log(\"chartdata: \" + JSON.stringify(chartData));\n        return chartData;\n        } catch(e) { return { values: [] }; }\n    }),\n\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n\n/*     fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        let chartData = this.get('fullRangeChartData');\n        let dataValuesCount;\n        try {\n            dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n        let anchors = this.get('instrument').get('anchors');\n        \n        const arr = anchors.content ?? anchors;\n        \n        let anchorDistances = arr.map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        // Fallback: if anchors haven't loaded yet, use value indices from the data\n        if (anchorDistances.length === 0 && dataValuesCount > 0) {\n            anchorDistances = Array.from({length: dataValuesCount}, (_, i) => i);\n        }\n\n        //anchorDistances.push('T'); //TODO: add temperature\n\n        //IF chart is Strain-Values chart\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            var midPoints = [];\n            for(var ctr = 0; ctr < anchorDistances.length-1; ctr++) {\n                midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n            }\n            if(modelName==='displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        }\n        //console.log(anchorDistances);\n        return anchorDistances;\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n            const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTempPoints = this.get('zoomTempPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n\n        //console.log(blastEventsChartDistXData);\n        //console.log(vibeEventsChartDistXData);\n\n        let anchorDistances = this.get('anchorDistances'),\n            zoomChartLinesData = []\n        ;\n\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n        //console.log(zoomTempPoints.length);\n\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            if (_this.get('chartDataModelName') !== 'displacement-values'){\n                while(zoomTempPoints.length > zoomDataPoints.length) {\n                    zoomTempPoints.pop();\n                    zoomTempPoints.shift();\n                }\n            }\n            var temp = {key: 'T',\n                type: 'lines',\n                yAxis: 2,\n                values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null,\n                    ];\n                })\n            };\n            //console.log(temp);\n            zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                    ];\n                })\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_');\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        return promise; \n    }),\n    \n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            //vibeEventsArray = this.get('vibeEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = yAxisLegend\n        ;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");            \n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n                \n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let instType = _this.instrument.get('instrumentType').get('title');\n\n                let axisName = '';\n                let units = chartData.get('units');\n                title = yAxisLegend.get('title');\n                //console.log(title);\n                    \n                switch(title) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        units = _this.get(\"yAxisUnit\") ? _this.get(\"yAxisUnit\") : chartData.get('units');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'temperature':\n                        axisName = \"Temperature\";\n                        units = \"°C\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n\n                if (yAxisLegend) {\n                    let raw = _this.raw;\n                    title = axisName + \" (\" + units + \")\";\n                } else {\n                    title = axisName + \" (\" + units + \")\";\n                }\n                //title = yAxisLegend.get('unit');\n            }\n\n            function usesPoints(chartName) {\n                //console.log(chartName);\n                switch(chartName) {\n                    case 'event-ppv':\n                    case 'event-ppa':\n                        return true;\n                }\n                return false;\n            }\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(usesPoints(_this.get('chartDataModelName')))\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data')\n            ;\n\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                if (_this.instrument.get('instrumentType').get('title') === 'Tilt') {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".3f\"));\n                    zoomChart.legend.numDecimals(3);\n                } else {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                }\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n\n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(vibeEventsArray);\n                    //console.log(distXMouseMove);\n                    /* \n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    } \n                    */\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length){//} || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            //activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) { _this.setData(zoomChartLinesData); }\n                if (_this.setChart) { _this.setChart(zoomChart); }\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n\n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    isModalOpen: false,\n    modalMode: 'add', // 'add' | 'edit'\n    modalEditingRowId: null,\n\n    // Per-anchor labels:\n    //   tableLabel — what shows in the table column header (raw distance value, legacy behavior).\n    //                Empty string when distance is missing.\n    //   modalLabel — what shows as the modal field label (\"Anchor 1\", \"Anchor N/A\" per spec).\n    anchorLabels: computed('instrument', function(){\n        const anchors = this.get('instrument') ? this.get('instrument').get('anchors') : null;\n        const arr = (anchors && (anchors.content ?? anchors)) || [];\n        let validCounter = 0;\n        return arr.map((anchor, idx) => {\n            const distance = anchor.get ? anchor.get('distance') : (anchor && anchor.distance);\n            const isUnset = (distance == null || distance === '');\n            if(isUnset){\n                return { index: idx, tableLabel: '', modalLabel: 'Anchor N/A', isUnset: true };\n            }\n            validCounter += 1;\n            return { index: idx, tableLabel: String(distance), modalLabel: `Anchor ${validCounter}`, isUnset: false };\n        });\n    }),\n\n    columnSpecs: computed('anchorLabels', function(){\n        const anchors = this.get('anchorLabels') || [];\n        const out = anchors.map((a) => ({\n            key: `anchor_${a.index}`,\n            label: a.modalLabel,\n            tableLabel: a.tableLabel,\n            valuesIndex: a.index,\n        }));\n        out.push({ key: '__temp__', label: 'Temperature', tableLabel: 'Temperature', isTemp: true });\n        return out;\n    }),\n\n    tableRows: computed('displacementData.[]', 'temperatureData.[]', 'columnSpecs', 'globalDatetimeFormat.value', function(){\n        const dispData = this.get('displacementData') || [];\n        const tempData = this.get('temperatureData') || [];\n        const specs = this.get('columnSpecs') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n\n        const tempById = {};\n        tempData.forEach(r => { tempById[r.id] = r; });\n\n        return dispData.map((dispRow) => {\n            const id = dispRow.id;\n            const dispValues = (dispRow.values || dispRow.get?.('values') || []);\n            const tempRow = tempById[id];\n            const tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n\n            const cells = specs.map((spec) => {\n                let value = '';\n                if(spec.isTemp){\n                    value = tempValues[0];\n                }else{\n                    value = dispValues[spec.valuesIndex];\n                }\n                return { key: spec.key, label: spec.label, value: value == null ? '' : value };\n            });\n            const formattedDate = moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt);\n            return { id, date: id, formattedDate, cells };\n        });\n    }),\n\n    modalFields: computed('columnSpecs', 'modalMode', 'modalEditingRowId', 'tableRows.[]', function(){\n        const specs = this.get('columnSpecs') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingRowId');\n\n        let existingRow = null;\n        if(mode === 'edit' && editingId){\n            existingRow = (this.get('tableRows') || []).find(r => r.id === editingId);\n        }\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && existingRow\n                ? moment(existingRow.date, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm')\n                : moment().format('YYYY-MM-DDTHH:mm'),\n        };\n\n        const cellByKey = {};\n        if(existingRow){\n            existingRow.cells.forEach(c => { cellByKey[c.key] = c.value; });\n        }\n\n        const channelFields = specs.map((spec) => ({\n            key: spec.key,\n            label: spec.label,\n            type: 'text',\n            value: cellByKey[spec.key] != null ? cellByKey[spec.key] : '',\n        }));\n\n        return [dateField, ...channelFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function(){\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingRowId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingRowId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const instrumentId = this.get('instrument.id');\n            const dispData = this.get('displacementData');\n            const tempData = this.get('temperatureData');\n            const dispRow = dispData ? dispData.find(r => r.id === rowId) : null;\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            const promises = [];\n            if(dispRow && dispRow.deleteRecord){ dispRow.deleteRecord(); promises.push(dispRow.save(adapterOptions)); }\n            if(tempRow && tempRow.deleteRecord){ tempRow.deleteRecord(); promises.push(tempRow.save(adapterOptions)); }\n            Promise.all(promises)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const specs = this.get('columnSpecs') || [];\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            const dispValues = [];\n            specs.forEach((spec) => {\n                if(spec.isTemp){ return; }\n                dispValues.push(Number(snapshot[spec.key]) || 0);\n            });\n            const tempValues = [Number(snapshot['__temp__']) || 0];\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingRowId');\n\n            const tempData = this.get('temperatureData') || [];\n            const dispData = this.get('displacementData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            if(isEdit && originalId === newId){\n                const tempRow = findRow(tempData, originalId);\n                const dispRow = findRow(dispData, originalId);\n                const promises = [];\n                if(tempRow){ tempRow.set('values', tempValues); promises.push(tempRow.save(adapterOptions)); }\n                if(dispRow){ dispRow.set('values', dispValues); promises.push(dispRow.save(adapterOptions)); }\n                Promise.all(promises).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                const oldDisp = findRow(dispData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n                if(oldDisp){ oldDisp.deleteRecord(); oldDisp.save(adapterOptions); }\n            }\n\n            const tempRecord = store.createRecord('temperature-value', { id: newId, values: tempValues });\n            tempRecord.save(adapterOptions);\n\n            const dispRecord = store.createRecord('displacement-value', { id: newId, values: dispValues });\n            dispRecord.save(adapterOptions).then(refreshRoute).catch(handleErr);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\n\n\nexport default Component.extend({\n    session: service(),\n\n    //Assume passing in: \n    //dispUnits: from Project Setting, the actual array of supported disp units \n    //initValue: eg m or mm, in\n    //allowRAW: true or false\n    //allowBits: true or false\n\n    //IF YOU WANT TO USE THIS COMPONENT, YOUR PARENT COMPONENT NEEDS TO ADD ACTION: updateDispDropdownUnit\n    init() {\n        this._super(...arguments);\n    },\n    getDispUnitsArr: computed(\"dispUnits\",function(){\n        try{\n            return this.arrayCastString(this.get(\"dispUnits\").value);\n        }\n        catch(error){\n            console.log(\"Error in getDispUnitsArr: \" + error);\n        }\n    }),\n    arrayCastString:function(strArr){\n        try{\n            return strArr.split(',');\n        }\n        catch(error){\n            console.log(\"Error in arrayCastString: \" + error);\n            return [];\n        }\n    },\n    actions: {\n        selectedValue(value){\n            \n            \n            \n            if (this.onChange) this.onChange(value);\n        }\n    }\n});\n","export { default } from 'ember-leaflet/components/div-overlay-layer';\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst KPA_TO_MMH20 = 101.9716;\n\n// Chart line colors — sourced from color-palette\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,    // #0077b6\n    colorPalette.orange2,   // #FF7444\n    colorPalette.green3,    // #2a9d8f\n    colorPalette.red1,      // #D25353\n    colorPalette.purple7,   // #8b5cf6\n    colorPalette.beige22,   // #b08968\n    colorPalette.pink6,     // #ec4899\n    colorPalette.gray5,     // #6b7280\n    colorPalette.teal6,     // #10b981\n    colorPalette.cyan4,     // #06b6d4\n];\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    chartType: null,\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n        const chartTypeParam = queryParams.get('chart_type');\n        this.set('chartType', chartTypeParam || null);\n    },\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        if (instType === 'Tilt') {\n            return ['X', 'Y', 'Z'];\n        } else if (instType === 'Wire') {\n            let anchors = [];\n            let numPorts = this.instrument.get('portsNum');\n            for (let ctr = 0; ctr < numPorts; ctr++) {\n                anchors.push('T' + (ctr + 1));\n                anchors.push(ctr + 1);\n            }\n            return anchors;\n        } else if (instType === 'BluVibe') {\n            return ['Data'];\n        }\n\n        let anchors = this.get('instrument').get('anchors');\n        const arr = anchors.content ?? anchors;\n        let anchorDistances = arr.map(anchor => anchor.get('distance'));\n\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') {\n            var midPoints = [];\n            if (instType === 'dCable') {\n                for (var ctr = 1; ctr < anchorDistances.length; ctr++) {\n                    var mid = (anchorDistances[ctr - 1] + anchorDistances[ctr]) / 2;\n                    midPoints[ctr] = +mid.toFixed(2);\n                }\n                midPoints.splice(0, 1);\n                midPoints[0] = 0;\n                midPoints.push(anchorDistances[anchorDistances.length - 1]);\n            } else if (instType === 'dRebar') {\n                let headExclusion = this.get('instrument').get('headExclusionLength');\n                let leftAnchors = [headExclusion];\n                let rightAnchors = [headExclusion];\n\n                let center = anchorDistances.length - 1;\n                center = Math.ceil(center / 2);\n\n                leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n\n                let midLeft = [];\n                for (var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                    midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                }\n\n                let midRight = [];\n                for (var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                    midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                }\n\n                if (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values') {\n                    if (this.get('instrument').get('stacked')) {\n                        midPoints = midLeft;\n                        if (modelName === 'load-values') {\n                            midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n                        }\n                    } else {\n                        midPoints = midLeft.concat(midRight);\n                        if (modelName === 'bending-strain-values') {\n                            midPoints.shift();\n                            midPoints.pop();\n                        }\n                    }\n                } else {\n                    midPoints = midLeft.concat(midRight);\n                }\n\n                if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                    for (let ctr = 0; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr + 1) + '-' + midPoints[ctr];\n                    }\n                }\n            } else {\n                for (var ctr = 0; ctr < anchorDistances.length - 1; ctr++) {\n                    midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n                }\n            }\n            if (modelName === 'displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        } else if (modelName === 'axial-displacement-values' && this.get('instrument').get('stacked')) {\n            let mid = (anchorDistances.length - 1) / 2;\n            while (anchorDistances.length > (mid + 1)) {\n                anchorDistances.pop();\n            }\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else if (modelName === 'axial-displacement-values' && !this.get('instrument').get('stacked')) {\n            anchorDistances.sort(function(a, b) { return a - b; });\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else {\n            if (instType === 'dRebar') {\n                if (modelName === 'displacement-values') {\n                    var midPoints = [];\n                    let headExclusion = this.get('instrument').get('headExclusionLength');\n                    let leftAnchors = [headExclusion];\n                    let rightAnchors = [headExclusion];\n\n                    let center = anchorDistances.length - 1;\n                    center = Math.ceil(center / 2);\n\n                    leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                    rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                    if (!this.get('instrument').get('stacked')) {\n                        rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n                    }\n\n                    let midLeft = [];\n                    for (var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                        midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                    }\n\n                    let midRight = [];\n                    for (var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                        midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                    }\n\n                    midPoints = midLeft.concat(midRight);\n                    anchorDistances = midPoints;\n                    anchorDistances.unshift(0);\n                }\n                for (let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n                for (let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n            }\n        }\n        return anchorDistances;\n    }),\n\n    // Main chart sourced from zoomChartData to mirror NVD3 (Group By applies to visible chart).\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'anchorDistances', 'chartDataModelName', 'chartType', function() {\n        const anchorDistances = this.get('anchorDistances');\n        const fullRangeChartData = this.get('zoomChartData');\n        const modelName = this.get('chartDataModelName');\n        const chartType = this.get('chartType');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values';\n        const isMmH20 = chartType === 'mmH20';\n\n        const lines = anchorDistances.map((chartLineName, chartLineIndex) => ({\n            key: chartLineName,\n            values: fullRangeChartData.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                let y = (arr && arr[chartLineIndex] !== undefined) ? arr[chartLineIndex] : null;\n\n                if (isMmH20 && y != null) {\n                    y = y * KPA_TO_MMH20;\n                }\n\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y\n                };\n            })\n        }));\n\n        // Add temperature overlay on y2 (unless viewing temperature data itself)\n        if (modelName !== 'temperature-values') {\n            const zoomTempData = this.get('zoomTempData');\n            if (zoomTempData && zoomTempData.length) {\n                lines.push({\n                    key: 'T (°C)',\n                    yAxis: 'y2',\n                    hidden: false,\n                    values: zoomTempData.map(item => {\n                        const rawValues = item.get('values');\n                        const arr = Array.isArray(rawValues) ? rawValues : [];\n                        return {\n                            x: moment(item.get('id')).valueOf(),\n                            y: arr[0] !== undefined ? arr[0] : null\n                        };\n                    })\n                });\n            }\n        }\n\n        return lines;\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        const chartType = this.get('chartType');\n\n        // Piezo overrides based on chart_type query param\n        if (chartType == null || chartType === '') {\n            // default: displacement\n            axisName = getAttr('temporalDisplacementName');\n            units = this.get(\"yAxisUnit\") || getAttr('units');\n            return `${axisName} (${units})`;\n        } else if (chartType === 'mmH20') {\n            axisName = getAttr('temporalAccelerationName') || 'mmH₂O';\n            units = '';\n            return `${axisName}`;\n        }\n\n        // Fallback to standard title logic\n        let title = yAxisLegend ? yAxisLegend.get('title') : '';\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                units = this.get(\"yAxisUnit\") || getAttr('units');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName') || 'Load';\n                units = 'kN';\n                break;\n            case 'axial_strain':\n                axisName = \"Axial Strain\";\n                units = \"%\";\n                break;\n            case 'bending_strain':\n                axisName = \"Bending Strain\";\n                units = \"%\";\n                break;\n            case 'axial_displacement':\n                axisName = \"Axial Displacement\";\n                break;\n            case 'temperature':\n                axisName = \"Temperature\";\n                units = \"°C\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const fullRangeChartLinesData = this.get('fullRangeChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildMainChart(fullRangeChartLinesData, yAxisTitle);\n            this._buildOverviewChart();\n        });\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        const datasets = anchorDistances.map((chartLineName, i) => ({\n            label: String(chartLineName),\n            data: fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        anchorDistances.forEach((chartLineName, i) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(chartLineName));\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed, get } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\nimport { getAnchorCountFromId } from '../../utils/instrument-id';\n\nfunction resetNewInstrumentObject(_this) {\n    //console.log('reset');\n    _this.set('newInstrumentObject', {});\n    //_this.set('name', null);\n    _this.set('zeroTimestamp', null);\n    _this.set('installDate', null);\n    //_this.set('east', null);\n    //_this.set('north', null);\n    //_this.set('depth', null);\n    //_this.set('azimuth', null);\n    //_this.set('dip', null);\n    //_this.set('instrumentType', 0);\n    //_this.set('headAt', 'HAC');\n    //_this.set('instrumentLength', 0);\n    //_this.set('strokeLength', 0);\n    //_this.set('referenceAnchor', null);\n    //_this.set('headExclusionLength', 0);\n    //_this.set('gaugeLength', 0);\n    //_this.set('bulbed', false);\n    //_this.set('plated', false);\n    //_this.set('stacked', false);\n    //_this.set('active', true);\n}\n\nexport default class CreatePackInstrument extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n    }\n\n    isAuthenticated = true;\n    newInstrumentObject = {};\n    headAt = 'HAC';\n    zeroTimestamp = null;\n    installDate = null;\n    authError = false;\n    project = null;\n    level = null;\n\n    actions= {\n\n        \n        setProject(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n\n        createInstrument(object){\n\n            //console.log(this.get('prevDup'));\n            //console.log((typeof this.get('prevDup') === \"undefined\"));\n\n            let _this = this,\n            store = this.get('store'),\n            newInstrumentObject = this.get('newInstrumentObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newInstrumentObject.id = this.get('id');\n            newInstrumentObject.zeroTimestamp = this.get('zeroTimestamp');\n            newInstrumentObject.installDate = this.get('installDate');\n            //newInstrumentObject.east = this.get('east');\n            //newInstrumentObject.north = this.get('north');\n            //newInstrumentObject.depth = this.get('depth');\n            newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n            newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n            newInstrumentObject.active = true;\n            newInstrumentObject.instrumentStiffness = 0;\n\n            if(typeof newInstrumentObject.id === 'undefined' || newInstrumentObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n\n            if (this.get('zeroTimestamp') != null) {\n                newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('installDate') != null) {\n                newInstrumentObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            // console.log(get(this, 'duplicateError'));\n\n            let newInstrument = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    //console.log(this.get('prevDup'));\n                    if(err.message.includes('has already been used')) {\n                        //console.log('duplicate');\n                        this.setError('duplicateError',true);\n                        \n                        error = true;\n                        dup = true;\n                    }\n                    // console.log(err.message);\n                }\n            }\n            \n            this.setError('authError', false);\n\n            if (!error) {\n                \n                    newInstrument.save().then(function(results){\n                        \n                        if(results.id != null) {\n                            let anchorCount = getAnchorCountFromId(newInstrumentObject.id);\n                            for(var ctr = 0; ctr <= anchorCount; ctr++) {\n                                store.createRecord('anchor', {number: ctr, distance: ctr, instrument: results}).save();\n                            }\n                        }\n\n                        if(results.id != null) {\n                            _this.get('submit')(results.id);\n                        } else {\n                            this.setError('isVisibleError',true);\n                            error = true;\n                        }\n                    }).catch(function(reason) {\n                        \n                        _this.setError('isVisibleError',true);\n                        _this.setError('authError',true);\n                    }); \n            } \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let displacementValueObjectValues = _this.get('displacementValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(displacementValueObjectValues).forEach(function(key,index) {\n        displacementValueObjectValues[key] = 0;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n    // newTimestampValue: computed('dateFormat', function() {\n    //     return moment().format(this.get('dateFormat'));\n    // }),\n\n    newDisplacementValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n    displacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 1; i <= this.get('instrumentAnchors').length; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    newDisplacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    actions: {\n        setNewDisplacementValue(key, event) {\n            const vals = this.get('newDisplacementValueObjectValues');\n            vals[key] = event.target.value;\n        },\n        setNewTimestampValue(event) {\n            this.set('newTimestampValue', event.target.value);\n        },\n        setTemperatureValue(event) {\n            this.set('temperatureObjectValue', event.target.value);\n        },\n        saveNew(){\n            let _this = this,\n                store = this.get('store'),\n                newDisplacementValuesObject = this.get('newDisplacementValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                displacementValues = this.get('displacementValues'),\n                temperatureValues = this.get('temperatureValues')\n            ;\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newDisplacementValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newDisplacementValuesObject.values = Object.values(this.get('newDisplacementValueObjectValues'));\n\n            const newDisplacementValues = store.createRecord('displacement-value', newDisplacementValuesObject);\n            // save new displacement-value to DB\n            const savedDisplacementValuesObject = newDisplacementValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if displacement-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //displacementValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n                \n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class EditInstrument extends Component.extend({\n}) {\n    @service router;\n    @service store;\n    //@service session;\n    //@service currentUser;\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    actions = {\n        viewData(id) {\n            this.get('router').transitionTo('raw-data', id);\n        },\n        tGraph(id) {\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values');\n        },\n        sGraph(id) {\n            this.get('router').transitionTo('spatial-graphs.spatial-graph', id, 'displacement-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveInstrument(){\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/instruments\";\n                }\n            } else {\n                window.location.href = \"/instruments\";\n            }\n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { copy } from 'ember-copy';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'spatial-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    progressAnimationDuration: 100, //set 50, was 700\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 50, //set 25, was 500\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return this.get('blastEvents').map(function(event) {\n                return {\n                    type: 'Blast',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n            var chartData = { values: item.get(\"values\") };\n\n            var modelName = this.get('chartDataModelName');\n\n            if (modelName === 'strain-values' || modelName === 'load-values') { \n                var plated = this.get('instrument').get('plated');\n                var type = this.get('instrument').get('instrumentType').get('title');\n                //console.log(type);\n            }\n                        \n            return chartData;\n        } catch (error) {\n            return [];\n        }\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n        try {\n            return { values: item.get(\"values\") };            \n        } catch (error) {\n            return [];\n        }\n    }),\n\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {\n            anchorDistances.splice(0, 1);\n        }\n        return anchorDistances;\n    }),\n\n    anchorAXDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n\n        let midPoints = [];\n\n        if(this.get('instrument').get('stacked')) {\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            \n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n\n            let midLeft = [];\n            for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n            }\n            midPoints = midLeft;\n        } else { //staggered\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n    \n            midPoints = $.map(anchorDistances.slice(1, center + 1), function(v, i) {\n                return [v, anchorDistances.slice(center + 1)[i]];\n              });\n\n            midPoints.unshift(headExclusion);\n            let mid_temp = [];\n            for(let ctr = 1;ctr < midPoints.length; ctr++) {\n                mid_temp.push((midPoints[ctr - 1] + midPoints[ctr]) / 2);\n            }\n            midPoints = mid_temp;\n\n            if (modelName === 'bending-strain-values') {\n                midPoints.shift();\n                midPoints.pop();\n            }    \n            \n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n        \n        //console.log(midPoints);\n        \n        return midPoints;\n    }),\n\n    anchorBXDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n\n        let midPoints = [];\n\n        if(this.get('instrument').get('stacked')) {\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            \n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n\n            let midLeft = [];\n            for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n            }\n            midPoints = midLeft;\n        } else {\n\n        let center = anchorDistances.length - 1;\n        center = Math.ceil(center / 2);\n\n        midPoints = $.map(anchorDistances.slice(1, center + 1), function(v, i) {\n            return [v, anchorDistances.slice(center + 1)[i]];\n          });\n            midPoints.shift();\n            midPoints.pop();                  \n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n\n        return midPoints;\n    }),\n\n    // calculate mid distances between anchors for strain values\n    anchorMidDistances: computed('anchorDistances', function() {\n        let anchorDistances = copy(this.get('anchorDistances')),\n            dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            midDistances = []\n        ;\n\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        anchorDistances.unshift(0);\n\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            let mid = (anchorDistances[i] + anchorDistances[i + 1]) / 2;\n            midDistances.push( +mid.toFixed(2) );\n        }\n\n        if(type === 'dCable') {\n            midDistances.splice(0,1);\n            //midDistances.unshift(0);\n            midDistances[0] = 0;\n            var len = this.get('instrument').get('length');\n            var length = this.get('instrument').get('instrumentLength');\n\n            var modelName = this.get('chartDataModelName');\n            if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {    \n                if(length !== null && length !== 0) {\n                    midDistances.push(length);\n                } else {\n                    midDistances.push(anchorDistances[anchorDistances.length - 1]);\n                }\n            }\n        }\n        // console.log(\"Anchors: \" + anchorDistances);\n         //console.log(\"Mids: \" + midDistances);\n\n        return midDistances;\n    }),\n\n    anchorColors: d3.scale.category10().range(),\n\n    anchorDistancesChartReferencePoints: computed('chartDataModelName', 'instrument', 'anchorDistances', 'anchorMidDistances', 'anchorAXDistances', 'anchorBXDistances', function() {\n        let anchorDistances = this.get('anchorDistances');\n        var modelName = this.get('chartDataModelName');\n        var anchorMidDistances = this.get('anchorMidDistances');\n\n        //console.log(this.get('instrument').get('instrumentTypeID'));\n\n        if(this.get('instrument').get('instrumentTypeID') === 3) {//rebar \n            if(this.get('instrument').get('stacked')) { //is stacked\n                if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                    anchorDistances = this.get('anchorAXDistances');\n                } else if (modelName === 'bending-strain-values') {\n                    anchorDistances = this.get('anchorBXDistances');\n                }\n            } else { //is NOT stacked\n                if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                    anchorDistances = this.get('anchorAXDistances');\n                } else if (modelName === 'bending-strain-values') {\n                    anchorDistances = this.get('anchorBXDistances');\n                }\n            }\n        }\n\n        if (this.get('instrument').get('instrumentType').get('title') !== 'dRebar') {\n            if(modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                return anchorMidDistances.map(function(anchorDistance){\n                    return {\n                        key: anchorDistance,\n                        type: 'referencePoints',\n                        values: [\n                            anchorDistance\n                        ]\n                    };\n                });\n                    \n            }\n        }\n\n        return anchorDistances.map(function(anchorDistance){\n            return {\n                key: anchorDistance,\n                type: 'referencePoints',\n                values: [\n                    anchorDistance\n                ]\n            };\n        });\n    }),\n\n    inlineHoverValuesSideOffset: computed('chartDataModelName', function() {\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'load-values') {\n            return 28;\n        } else if((modelName === 'axial-strain-values' || modelName === 'bending-strain-values') && this.get('instrument').get('stacked')) {\n            return 28;\n        }\n        return 0;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints'),\n            anchorDistances = this.get('anchorDistances'),\n            anchorAXDistances = this.get('anchorAXDistances'),\n            anchorBXDistances = this.get('anchorBXDistances'),\n            anchorDistancesChartReferencePoints = this.get('anchorDistancesChartReferencePoints'),\n            anchorMidDistances = this.get('anchorMidDistances')\n        ;\n        let zoomChartLinesData = [];\n\n        var modelName = this.get('chartDataModelName');\n\n        \n        if ((modelName === 'strain-values' || modelName === 'load-values') && this.get('instrument').get('instrumentType').get('title') !== 'dRebar') { \n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorMidDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else if (modelName === 'axial-strain-values' || modelName === 'load-values' ) {//&& !this.get('instrument').get('stacked')) {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorAXDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else if (modelName === 'bending-strain-values' ) { //&& !this.get('instrument').get('stacked')) {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorBXDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (anchorDistancesChartReferencePoints) {\n            zoomChartLinesData = zoomChartLinesData.concat(anchorDistancesChartReferencePoints);\n        }\n\n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        var modelName = this.get('chartDataModelName');\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        if(type === 'dCable') {\n            if(modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                //console.log(fullRangeDataPoints);\n                fullRangeDataPoints.forEach(element => element.values[0]=0);\n            }\n        }\n        \n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[chartLineIndex]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n    }),\n\n    numLines: computed('zoomTimePoints', function() {\n        return this.get('zoomTimePoints').length;\n    }),\n\n    lineDrawDelay: computed('numLines', function() {\n        return (13000 / (this.get('numLines') + 1)) ^ (1 / 20);\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            inlineHoverValuesSideOffset = _this.get('inlineHoverValuesSideOffset'),\n            progressAnimationDuration = _this.get('progressAnimationDuration'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n\n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let axisName = '';\n                let units = chartData.get('units');\n                switch(yAxisLegend.get('title')) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    case 'axial_strain':\n                        axisName = \"Axial Strain\";\n                        units = \"%\";\n                        break;\n                    case 'bending_strain':\n                        axisName = \"Bending Strain\";\n                        units = \"%\";\n                        break;\n                    case 'axial_displacement':\n                        axisName = \"Axial Displacement\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n                \n                if(yAxisLegend.get('title')==='load') {\n                    title = axisName + \" (kN)\";\n                } else {\n                    title = axisName + \" (\" + units + \")\";\n                }\n            }\n\n            let zoomChart = nv.models.lineChartProgressAnimationAPI()\n                .margin({top: 55, right: 10, bottom: 85, left: 60})\n                .useInteractiveGuideline(false)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .distXAxisScale(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .showLegend(true)\n                .progressAnimationDuration(progressAnimationDuration)\n                .showXAxis(true)\n                .noData('No usable data')\n                ;\n\n\n            let length = 0;\n            try {\n                length = _this.instrument.get('instrumentLength');\n                let type = _this.instrument.get('instrumentType');\n                if (type === 'dRebar') {\n                    length = length * 1000;\n                }\n                \n            } catch (ex) {\n\n            }\n            \n            if(length !== null && length === 0) {\n                length = 0;\n            }\n\n            zoomChart.forceX([0, length]);\n/*             if (yAxisLegend.get('title') != 'bending_strain' && yAxisLegend.get('title') != 'axial_strain') {\n                \n            }\n */\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .tickFormat(d3.format(\".2f\"))\n                    // .tickFormat(function(d) {\n                    //     let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                    //     return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    // })\n                    ;\n                zoomChart.yAxis\n                    .axisLabel(title)\n                    .tickFormat(d3.format(\".2f\"));\n\n                zoomChart.distXAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .ticks(5)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(45)\n                    .isDistXTooltip(isDistXTooltip)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2);\n\n                //zoomChart.legend.inlineHoverValuesSideOffset(inlineHoverValuesSideOffset);\n\n                zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log('test');\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n\n                    if (!seismicEventsArray.length || !blastEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (!activeTooltipContent) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                return zoomChart;\n            });\n\n            // declare fullRangeChart because later in zoom chart we need axis from fullRangeChart for events axis on zoomChart\n            let fullRangeChart = nv.models.focus(nv.models.line())\n               .margin({top: 10, right: 10, bottom: 30, left: 60})\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .syncBrushing(false)\n                .independentBrushing(true)\n                .showXAxis(true)\n                .showYAxis(false)\n                ;\n\n\n            nv.addGraph(function() {\n\n                fullRangeChart.xAxis\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n                fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n                fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(fullRangeChart.update);\n\n                // set zoom based on query params if set\n                let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n                let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n                if (startTimestamp && endTimestamp) {\n                    fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n                }\n\n                return fullRangeChart;\n            });\n\n        });\n\n    }\n\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n//import JSONAPISerializer from '@ember-data/serializers/json';\n\nexport default Component.extend({\n\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n    \n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    vibeEventsChartDistXData: computed('vibeEvents', function() {\n        var events = this.get('vibeEvents');\n        //console.log('vibeEvents');\n        //console.log(events);\n        if ( this.get('vibeEvents') ) {\n            return [{\n                key: 'BluVibe',\n                type: 'distX',\n                color: '#80bf5c',\n                values: this.get('vibeEvents').map(function(event) {\n                    return [\n                        moment( event.get('id') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            let data_set = this.get('blastEvents').map(function(event) {\n                //console.log(event.get('timestamp'));\n                return {\n                    type: 'Blast',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n            //console.log(data_set);\n            return data_set;\n        }\n        return false;\n    }),\n\n    vibeEventsArray: computed('vibeEvents', function() {\n        var events = this.get('vibeEvents');\n        //console.log(events);\n        if ( events ) {\n            return events.map(function(event) {\n                return {\n                    type: 'BluVibe',\n                    time: event.get('id'),\n                    timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    ppa: event.get('ppa'),\n                    ppv: event.get('ppv'),\n                    freq: event.get('frequency')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n        }\n        return false;\n    }),\n\n    zoomTempPoints: computed('zoomTempData', function(item){\n        let discreteData = this.get('zoomTempData').map(item => {\n            var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n            // Convert the chartData to discrete variables\n            var discreteData = {};\n            for (let key in chartData) {\n                discreteData[key] = chartData[key];\n            }\n            return discreteData;\n        });\n\n        // console.log(\":::::::::::::::::::::::: Discrete TEMP Points SIZE: \" + discreteData.length);\n        if (this.get(\"zoomDataPoints\").length == 0) {\n            return [];\n        } else {\n            return discreteData;\n        }\n    }),\n\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n        let KPA_TO_MMH20 = 101.9716;\n        \n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        var modelName = this.get('chartDataModelName');\n        let chartType = this.attrs.getQueryParams('chart_type');\n\n        // console.log(\"Model Name::::|\" + chartType + \"|\");\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') { \n            var plated = this.get('instrument').get('plated');\n            \n            if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n                if(plated) {\n                    chartData.values[0] = chartData.values[1];\n                } else {\n                    chartData.values[0] = 0;\n                }\n            } else {\n                //chartData.values.unshift(0);\n            }\n            chartData.values.push(0);\n        }\n        // console.log(\"Chart Type::::|\" + chartType + \"|\");\n        if(chartType === 'mmH20') {\n            chartData.values = chartData.values.map(function(item) {\n                return item * KPA_TO_MMH20;\n            });\n        }\n        return chartData;\n        } catch(e) { return { values: [] }; }\n    }),\n\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n\n/*     fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        if(instType === 'Tilt') {\n            return ['X','Y','Z'];\n        } else if(instType === 'Wire') {\n            let anchors = [];\n            let numPorts = this.instrument.get('portsNum');\n            let startVal = 0;\n            let maxVal = numPorts;\n/*             if (this.port != '') {\n                //startVal = (1 * this.port) - 1;\n                startVal = (1 * numPorts) - 1;\n                maxVal = startVal + 1;\n            }\n */            for(let ctr = startVal; ctr < maxVal; ctr++) {\n                anchors.push('T' + (ctr + 1));\n                anchors.push(ctr + 1);\n            }\n            return anchors;\n        } else if(instType === 'BluVibe') {\n            return ['Data'];\n        }\n        let chartData = this.get('fullRangeChartData');\n        let dataValuesCount;\n        try {\n            dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n        let anchors = this.get('instrument').get('anchors');\n        \n        const arr = anchors.content ?? anchors;\n        \n        let anchorDistances = arr.map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        //anchorDistances.push('T'); //TODO: add temperature\n\n        //IF chart is Strain-Values chart\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') { \n            var midPoints = [];\n            if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n                //Adjust anchors to mid points between anchors\n                for(var ctr = 1; ctr < anchorDistances.length ; ctr++) {\n                    var mid = (anchorDistances[ctr - 1] + anchorDistances[ctr]) / 2;\n                    midPoints[ctr] = + mid.toFixed(2);\n                }\n\n                //console.log(midPoints);\n\n                //add zero point and end point\n                midPoints.splice(0,1);\n                midPoints[0] = 0;\n                midPoints.push(anchorDistances[anchorDistances.length - 1]);  //TODO: change to length of exto once known\n                //console.log(midPoints);\n            } else if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n                //Adjust anchors to mid points between anchors\n                //console.log(this.get('instrument'));\n                let headExclusion = this.get('instrument').get('headExclusionLength');\n                let leftAnchors = [headExclusion];\n                let rightAnchors = [headExclusion];\n                \n                let center = anchorDistances.length - 1;\n                center = Math.ceil(center / 2);\n\n                leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n\n                let midLeft = [];\n                for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                    midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                }\n\n                let midRight = [];\n                for(var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                    midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                }\n\n                if (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values') {\n                    if(this.get('instrument').get('stacked')) {\n                        midPoints = midLeft;\n                        if (modelName === 'load-values') {\n                            midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n                        }\n                    } else {\n                        midPoints = midLeft.concat(midRight);\n                        /* midPoints = $.map(midPoints.slice(1, center + 1), function(v, i) {\n                            return [v, midPoints.slice(center + 1)[i]];\n                          }); */\n                        if (modelName === 'bending-strain-values') {\n                            midPoints.shift();\n                            midPoints.pop();\n                        }\n\n                    }\n                } else {\n                    midPoints = midLeft.concat(midRight);\n                }\n                if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                    for(let ctr = 0; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n  \n/*                     for(let ctr = 0; ctr < midPoints.length / 2; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n        \n                    for(let ctr = 3; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n */                }\n            } else {\n                for(var ctr = 0; ctr < anchorDistances.length-1; ctr++) {\n                    midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n                }\n            }\n            if(modelName==='displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        } else if (modelName === 'axial-displacement-values' && this.get('instrument').get('stacked')) {\n            let mid = (anchorDistances.length - 1) / 2;\n            while (anchorDistances.length > (mid + 1)) {\n                anchorDistances.pop();\n            }\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else if (modelName === 'axial-displacement-values' && !this.get('instrument').get('stacked')) {\n            anchorDistances.sort(function(a,b){return a-b;});\n\n            //anchorDistances.push(this.get('instrument').get('instrumentLength') * 1000);\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else {\n            if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n                if (modelName === 'displacement-values') { //rebar stretch\n                    var midPoints = [];\n                    let headExclusion = this.get('instrument').get('headExclusionLength');\n                    let leftAnchors = [headExclusion];\n                    let rightAnchors = [headExclusion];\n                    \n                    let center = anchorDistances.length - 1;\n                    center = Math.ceil(center / 2);\n    \n                    leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                    rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n    \n                    if(!this.get('instrument').get('stacked')) {\n                        rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n                    }\n    \n                    let midLeft = [];\n                    for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                        midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                    }\n    \n                    let midRight = [];\n                    for(var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                        midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                    }\n\n                    midPoints = midLeft.concat(midRight);\n                    anchorDistances = midPoints;\n\n                    anchorDistances.unshift(0);\n                }\n                for(let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n    \n                for(let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n            }    \n        }\n        //console.log(anchorDistances);\n        return anchorDistances;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    // zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n            const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTempPoints = this.get('zoomTempPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n\n        //console.log(blastEventsChartDistXData);\n        //console.log(vibeEventsChartDistXData);\n\n        let anchorDistances = this.get('anchorDistances'),\n            zoomChartLinesData = []\n        ;\n        if(zoomDataPoints.length != 0) {\n            if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n                var mName = _this.get('chartDataModelName');\n                if (mName === 'strain-values' || mName === 'strain-rate-values' || mName === 'load-values') {\n                    zoomDataPoints.forEach(element => element.values[0] = 0);\n                }\n            }    \n\n            //  if (this.get('instrument').get('instrumentType').get('title') == 'Tilt') {\n            //         zoomDataPoints.forEach(element => element.values.shift());\n            // }    \n\n            // an exception for temperature sensor in dExto\n            if (_this.get('chartDataModelName') !== 'temperature-values') {\n                zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                    return {\n                        key: chartLineName,\n                        // mean: 3,\n                        type: 'lines',\n                        yAxis: 1,\n                        values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                            return [\n                                moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                                (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                            ];\n                        })\n                    };\n                });\n            } else {\n                zoomChartLinesData = [{\n                    key: 'T. ℃',\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[0] : null\n                        ];\n                    })\n                }];\n            }\n\n            //console.log(zoomDataPoints.length);\n            //console.log(zoomTempPoints.length);\n\n            if (_this.get('chartDataModelName') !== 'temperature-values') {\n                if (_this.get('chartDataModelName') !== 'displacement-values' && this.get('instrument').get('instrumentType').get('title') !== 'BluVibe'){\n                    while(zoomTempPoints.length > zoomDataPoints.length) {\n                        zoomTempPoints.pop();\n                        zoomTempPoints.shift();\n                    }\n                }\n                var temp = {key: 'T',\n                    type: 'lines',\n                    yAxis: 2,\n                    values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[0] : null,\n                        ];\n                    })\n                };\n                //console.log(temp);\n                zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n                //console.log(zoomChartLinesData);\n            }\n\n            // mix data with events\n            if (seismicEventsChartDistXData) {\n                zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n            }\n            if (blastEventsChartDistXData) {\n                zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n            }\n            if (vibeEventsChartDistXData) {\n                zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n            }\n            \n            return zoomChartLinesData;\n\n        }    \n        return [];\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                    ];\n                })\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').queryRecord('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            vibeEventsArray = this.get('vibeEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        //console.log(vibeEventsArray);\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];//.get('firstObject');\n                \n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let instType = _this.instrument.get('instrumentType').get('title');\n\n                let axisName = '';\n                let units = chartData.get('units');\n                title = '';\n                if (instType === 'BluVibe') {\n                    title = _this.get('chartDataModelName');\n                } else {\n                    title = yAxisLegend.get('title');\n                }\n                let chartType = _this.attrs.getQueryParams('chart_type');\n\n                // because we can only have one displacement chart and this one uses 2 (a regular displacement and a mmH20 displacement)\n                // I had to do this hack to accomodate the mmH20 chart.  I'm not proud of it, but it works.\n                if(chartType == null || chartType == undefined || chartType == '') {\n                    title = 'displacement';\n                } else if (chartType === 'mmH20'){\n                    title = chartType;\n                }\n                \n                switch(title) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'mmH20':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units = \"\"; //\"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    case 'axial_strain':\n                        axisName = \"Axial Strain\";\n                        units = \"%\";\n                        break;\n                    case 'bending_strain':\n                        axisName = \"Bending Strain\";\n                        units = \"%\";\n                        break;\n                    case 'axial_displacement':\n                        axisName = \"Axial Displacement\";\n                        break;\n                    case 'temperature':\n                        axisName = \"Temperature\";\n                        units = \"°C\";\n                        break;\n                    case 'event-frequency':\n                        axisName = \"Event Frequency\";\n                        break;\n                    case 'event-ppv':\n                        axisName = \"Event PPV\";\n                        break;\n                    case 'event-ppa':\n                        axisName = \"Event PPA\";\n                        break;\n                    case 'cumulative-event-frequency':\n                        axisName = \"Cumulative Frequency\";\n                        break;\n                    case 'cumulative-event-ppv':\n                        axisName = \"Cumulative PPV\";\n                        break;\n                    case 'cumulative-event-ppa':\n                        axisName = \"Cumulative PPA\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                        //console.log(title);\n                }\n\n                /* let chartName = yAxisLegend.get('title').capitalize();\n                let chartNameL = chartName.substr(0, chartName.indexOf('_'));\n                let chartNameR = chartName.substr(chartName.indexOf('_') + 1).capitalize();\n                if(chartNameL !== \"\") {\n                    chartName = chartNameL + \" \" + chartNameR;\n                } */\n\n                if (yAxisLegend) {\n                    let raw = _this.raw;\n                    if(yAxisLegend.get('title')==='load') {\n                        title = axisName + \" (kN)\";\n                    } else if (instType === 'Wire') {\n                        if (raw === true) {\n                            title = \"Frequency (Hz)\";\n                        } else {\n                            title = \"Calculated Values\";\n                        }\n                    } else {\n                        if(units === '') {\n                            title = axisName;\n                        } else {\n                            title = axisName + \" (\" + units + \")\";\n                        }\n                    }\n                } else {\n                    if (instType === 'BluVibe') {\n                        title = axisName;\n                    } else {\n                        if(units === '') {\n                            title = axisName;\n                        } else {\n                            title = axisName  + \" (\" + units + \")\";\n                        }\n                    }\n                }\n                //title = yAxisLegend.get('unit');\n            }\n\n            function usesPoints(chartName) {\n                //console.log(chartName);\n                switch(chartName) {\n                    case 'event-ppv':\n                    case 'event-ppa':\n                        return true;\n                }\n                return false;\n            }\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(usesPoints(_this.get('chartDataModelName')))\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data')\n            ;\n\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                if (_this.instrument.get('instrumentType').get('title') === 'Tilt') {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".3f\"));\n                    zoomChart.legend.numDecimals(3);\n                } else {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                }\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n\n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(vibeEventsArray);\n                    //console.log(distXMouseMove);\n \n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    } \n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) { _this.setData(zoomChartLinesData); }\n                if (_this.setChart) { _this.setChart(zoomChart); }\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n\n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\n// dppc raw-data — single-channel pressure (one \"kPa\" column + Temperature).\n// BE shape note: legacy `displacementData2` did `value.values.shift()` to drop a leading\n// placeholder before displaying values[0]; we read values[1] (with values[0] fallback) and\n// write [null, kPa] so the placeholder slot is preserved.\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    isModalOpen: false,\n    modalMode: 'add',\n    modalEditingRowId: null,\n\n    columnSpecs: computed(function(){\n        return [\n            { key: 'kpa',     label: 'kPa',         tableLabel: 'kPa',         isTemp: false, isKPa: true },\n            { key: '__temp__', label: 'Temperature', tableLabel: 'Temperature', isTemp: true,  isKPa: false },\n        ];\n    }),\n\n    tableRows: computed('displacementData.[]', 'temperatureData.[]', 'globalDatetimeFormat.value', function(){\n        const dispData = this.get('displacementData') || [];\n        const tempData = this.get('temperatureData') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n\n        const tempById = {};\n        tempData.forEach(r => { tempById[r.id] = r; });\n\n        return dispData.map((dispRow) => {\n            const id = dispRow.id;\n            const dispValues = (dispRow.values || dispRow.get?.('values') || []);\n            const tempRow = tempById[id];\n            const tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n\n            const kpaValue = dispValues.length >= 2 ? dispValues[1] : dispValues[0];\n            const tempValue = tempValues[0];\n\n            return {\n                id,\n                date: id,\n                formattedDate: moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt),\n                cells: [\n                    { key: 'kpa',     label: 'kPa',         value: kpaValue == null ? '' : kpaValue },\n                    { key: '__temp__', label: 'Temperature', value: tempValue == null ? '' : tempValue },\n                ],\n            };\n        });\n    }),\n\n    modalFields: computed('columnSpecs', 'modalMode', 'modalEditingRowId', 'tableRows.[]', function(){\n        const specs = this.get('columnSpecs') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingRowId');\n\n        let existingRow = null;\n        if(mode === 'edit' && editingId){\n            existingRow = (this.get('tableRows') || []).find(r => r.id === editingId);\n        }\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && existingRow\n                ? moment(existingRow.date, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm')\n                : moment().format('YYYY-MM-DDTHH:mm'),\n        };\n\n        const cellByKey = {};\n        if(existingRow){\n            existingRow.cells.forEach(c => { cellByKey[c.key] = c.value; });\n        }\n\n        const channelFields = specs.map((spec) => ({\n            key: spec.key,\n            label: spec.label,\n            type: 'text',\n            value: cellByKey[spec.key] != null ? cellByKey[spec.key] : '',\n        }));\n\n        return [dateField, ...channelFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function(){\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingRowId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingRowId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const instrumentId = this.get('instrument.id');\n            const dispData = this.get('displacementData');\n            const tempData = this.get('temperatureData');\n            const dispRow = dispData ? dispData.find(r => r.id === rowId) : null;\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            const promises = [];\n            if(dispRow && dispRow.deleteRecord){ dispRow.deleteRecord(); promises.push(dispRow.save(adapterOptions)); }\n            if(tempRow && tempRow.deleteRecord){ tempRow.deleteRecord(); promises.push(tempRow.save(adapterOptions)); }\n            Promise.all(promises)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            // Match legacy write shape: index 0 is the 0 placeholder, real reading at index 1.\n            const dispValues = [0, Number(snapshot['kpa']) || 0];\n            const tempValues = [Number(snapshot['__temp__']) || 0];\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingRowId');\n\n            const tempData = this.get('temperatureData') || [];\n            const dispData = this.get('displacementData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            if(isEdit && originalId === newId){\n                const tempRow = findRow(tempData, originalId);\n                const dispRow = findRow(dispData, originalId);\n                const promises = [];\n                if(tempRow){ tempRow.set('values', tempValues); promises.push(tempRow.save(adapterOptions)); }\n                if(dispRow){ dispRow.set('values', dispValues); promises.push(dispRow.save(adapterOptions)); }\n                Promise.all(promises).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                const oldDisp = findRow(dispData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n                if(oldDisp){ oldDisp.deleteRecord(); oldDisp.save(adapterOptions); }\n            }\n\n            const tempRecord = store.createRecord('temperature-value', { id: newId, values: tempValues });\n            tempRecord.save(adapterOptions);\n\n            const dispRecord = store.createRecord('displacement-value', { id: newId, values: dispValues });\n            dispRecord.save(adapterOptions).then(refreshRoute).catch(handleErr);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n    // isPiezo: computed('instrumentType', function() {\n    //     console.log(\"instrumentType :::::::::::::::::::::::::::::::: \" + this.instrumentType);\n    //     if (this.instrumentType === 'Piezometer') {\n    //         return true;\n    //     }\n    //     return false;\n    // }),\n\n});","// app/components/my-option.js\nimport Component from '@ember/component';\n\nexport default class DropdownOptionComponent extends Component {\n  get isSelected() {\n    this.args.value === this.args.selectValue;\n  }\n}\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport intlTelInput from 'intl-tel-input';\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    session: service(),\n    userProfileService: service(),\n    intlPhone: null,\n    init() {\n        this._super(...arguments);\n    },\n\n    // initialise the same intl-tel-input widget used in the alert form\n    didInsertElement() {\n        this._super(...arguments);\n        setTimeout(() => {\n            const phoneInput = document.getElementById(\"contactPhone\");\n            if (phoneInput && !this.intlPhone) {\n                this.intlPhone = intlTelInput(phoneInput, {\n                    initialCountry: \"ca\",\n                    preferredCountries: [\"ca\", \"us\"],\n                    separateDialCode: true,\n                });\n                // prefill the national part of an existing E.164 number\n                const existing = this.get(\"selectedContact\")?.phone_number;\n                if (existing) {\n                    const dialCode = this.intlPhone.getSelectedCountryData().dialCode;\n                    let national = existing.replace(/\\s/g, \"\");\n                    if (national.startsWith(`+${dialCode}`)) {\n                        national = national.slice(dialCode.length + 1);\n                    } else if (national.startsWith(\"+\")) {\n                        national = national.slice(1);\n                    }\n                    phoneInput.value = national;\n                }\n            }\n        }, 50);\n    },\n    willDestroyElement() {\n        this._super(...arguments);\n        if (this.intlPhone) {\n            this.intlPhone.destroy();\n            this.intlPhone = null;\n        }\n    },\n\n    getFirstName: computed(\"selectedContact\", function () {\n        return this.get(\"selectedContact\")?.first_name;\n    }),\n    getLastName: computed(\"selectedContact\", function () {\n        return this.get(\"selectedContact\")?.last_name;\n    }),\n    getBirthDate: computed(\"selectedContact\", function () {\n        return this.get(\"selectedContact\")?.birth_date;\n    }),\n    getPhone: computed(\"selectedContact\", function () {\n        return this.get(\"selectedContact\")?.phone_number;\n    }),\n    getEmail: computed(\"selectedContact\", function () {\n        return this.get(\"selectedContact\")?.email;\n    }),\n    getGroup: computed(\"selectedContact\", function () {\n        return this.get(\"selectedContact\")?.group;\n    }),\n    getNotes: computed(\"selectedContact\", function () {\n        return this.get(\"selectedContact\")?.notes;\n    }),\n\n    actions: {\n        close() {\n            this.get(\"closeModal\")();\n        },\n        save() {\n            let data = {};\n\n            let fn = document.getElementById(\"contactFirstName\");\n            if (fn != null) data[\"first_name\"] = fn.value.trim();\n\n            let ln = document.getElementById(\"contactLastName\");\n            if (ln != null) data[\"last_name\"] = ln.value.trim();\n\n            let bd = document.getElementById(\"contactBirthDate\");\n            if (bd != null) data[\"birth_date\"] = bd.value ? bd.value : null;\n\n            // rebuild E.164 from the selected country dial code + entered digits\n            let ph = document.getElementById(\"contactPhone\");\n            if (ph != null) {\n                const digits = (ph.value || \"\").replace(/\\D/g, \"\");\n                if (digits && this.intlPhone) {\n                    const dialCode = this.intlPhone.getSelectedCountryData().dialCode;\n                    data[\"phone_number\"] = `+${dialCode}${digits}`;\n                } else {\n                    data[\"phone_number\"] = null;\n                }\n            }\n\n            let em = document.getElementById(\"contactEmail\");\n            if (em != null) data[\"email\"] = em.value.trim() ? em.value.trim() : null;\n\n            let grp = document.getElementById(\"contactGroupSelect\");\n            if (grp != null) data[\"group\"] = grp.value === \"\" ? null : Number(grp.value);\n\n            let nt = document.getElementById(\"contactNotes\");\n            if (nt != null) data[\"notes\"] = nt.value.trim() ? nt.value.trim() : null;\n\n            this.get(\"saveModal\")(data);\n        }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    session: service(),\n    userProfileService: service(),\n    init() {\n        this._super(...arguments);\n        console.log(\"selected user\");\n        console.log(this.get(\"selectedUser\"))\n        console.log(\"contractor company\");\n        console.log(this.get(\"selectedContactorCompany\"))\n    },\n\n    getCode:computed(\"selectedContactorCompany\",function() {\n        return this.get(\"selectedContactorCompany\")?.code;\n    }),\n    getCompany:computed(\"selectedContactorCompany\",function() {\n        return this.get(\"selectedContactorCompany\")?.company_name;\n    }),\n    getIsInternal:computed(\"selectedContactorCompany\",function() {\n        return this.get(\"selectedContactorCompany\")?.is_internal;\n    }),\n    // editing an existing contractor locks the code; creating a new one lets you set it\n    isEditingExisting:computed(\"selectedContactorCompany\",function() {\n        return this.get(\"selectedContactorCompany\")?.id != null;\n    }),\n\n    actions: {\n\n        close(){\n            this.get(\"closeModal\")();\n        },\n        save(){\n            let data={};\n            let tb1 = document.getElementById(\"isInternalCheckbox\");\n            if(tb1 != null){\n                data[\"is_internal\"] = tb1.checked;\n            }\n            let tb2 = document.getElementById(\"companyTextbox\");\n            if(tb2 != null){\n                data[\"company_name\"] = tb2.value;\n            }\n            // code is required + editable only when creating a new contractor\n            if(!this.get(\"isEditingExisting\")){\n                let tb3 = document.getElementById(\"codeTextbox\");\n                if(tb3 != null){\n                    data[\"code\"] = tb3.value;\n                }\n            }\n\n            this.get(\"saveModal\")(data);\n        }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    session: service(),\n    userProfileService: service(),\n    init() {\n        this._super(...arguments);\n    },\n\n    getName: computed(\"selectedGroup\", function () {\n        return this.get(\"selectedGroup\")?.name;\n    }),\n    getDescription: computed(\"selectedGroup\", function () {\n        return this.get(\"selectedGroup\")?.description;\n    }),\n\n    actions: {\n        close() {\n            this.get(\"closeModal\")();\n        },\n        save() {\n            let data = {};\n\n            let nm = document.getElementById(\"groupName\");\n            if (nm != null) data[\"name\"] = nm.value.trim();\n\n            let ds = document.getElementById(\"groupDescription\");\n            if (ds != null) data[\"description\"] = ds.value.trim() ? ds.value.trim() : null;\n\n            this.get(\"saveModal\")(data);\n        }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    session: service(),\n    userProfileService: service(),\n    init() {\n        this._super(...arguments);\n        console.log(\"selected user\");\n        console.log(this.get(\"selectedUser\"))\n    },\n    disableBasedOnAdminLevel: computed(\"parentUser\", function (){\n        let parentUserProfile = this.get(\"parentUser\")?.userProfileService?.profile;\n        if(parentUserProfile)\n            return !parentUserProfile.is_staff\n        return true;\n    }),\n    canUploadToVP: computed(\"\", function (){\n        return this.get(\"selectedUser\").can_upload_vantagepoint;\n    }),\n    canLoginToVP: computed(\"\", function (){\n        return this.get(\"selectedUser\").can_login_vantagepoint;\n    }),\n    getCompany:computed(\"selectedUser\",function() {\n        return this.get(\"selectedUser\")?.company;\n    }),\n\n    getPosition:computed(\"selectedUser\",function() {\n        return this.get(\"selectedUser\")?.position;\n    }),\n    getIsActive:computed(\"selectedUser\",function() {\n        return this.get(\"selectedUser\")?.is_active;\n    }),\n    getIsStaff:computed(\"selectedUser\",function() {\n        return this.get(\"selectedUser\")?.is_staff;\n    }),\n    getIsMasterUser: computed(\"selectedUser\",function(){\n        return this.get(\"selectedUser\")?.is_master_key_account;\n    }),\n    actions: {\n        \n        close(){\n            this.get(\"closeModal\")();\n        },\n        save(){\n            let data={};\n            let companyTB = document.getElementById(\"companyTextbox\");\n            if(companyTB != null){\n                data[\"company\"] = companyTB.value;\n            }\n\n            let positionTB = document.getElementById(\"positionTextbox\");\n            if(positionTB != null){\n                data[\"position\"] = positionTB.value;\n            }\n            \n            let canLoginVPCheckbox = document.getElementById(\"canLoginVPCheckbox\");\n            if(canLoginVPCheckbox != null){\n                data[\"can_login_vp\"] = canLoginVPCheckbox.checked;\n            }\n            let canUploadVPCheckbox = document.getElementById(\"canUploadVPCheckbox\");\n            if(canUploadVPCheckbox != null){\n                data[\"can_upload_vp\"] = canUploadVPCheckbox.checked;\n            }\n\n            this.get(\"saveModal\")(data);\n        }\n    }\n});\n","export { default } from 'ember-modal-dialog/components/positioned-container';\n","export { default } from 'ember-modal-dialog/components/basic-dialog';\n","export { default } from 'ember-modal-dialog/components/in-place-dialog';\n","export { default } from 'ember-modal-dialog/components/liquid-dialog';\n","export { default } from 'ember-modal-dialog/components/liquid-tether-dialog';\n","export { default } from 'ember-modal-dialog/components/tether-dialog';\n","export { default } from 'ember-modal-dialog/components/overlay';\n","export { default } from 'ember-wormhole/components/ember-wormhole';\n","import Component from '@ember/component';\nimport { computed, observer } from '@ember/object';\nimport { scheduleOnce } from '@ember/runloop';\nimport moment from 'moment';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport zoomPlugin from 'chartjs-plugin-zoom';\nimport { getInstrumentSizesFromId } from '../../utils/instrument-id';\n\n// Register moment date adapter (idempotent — pack chart does the same).\n_adapters._date.override({\n    parse(value){\n        if(value === null || value === undefined){ return null; }\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt){ return moment(time).format(fmt); },\n    add(time, amount, unit){ return moment(time).add(amount, unit).valueOf(); },\n    diff(a, b, unit){ return moment(b).diff(moment(a), unit); },\n    startOf(time, unit){ return moment(time).startOf(unit).valueOf(); },\n    endOf(time, unit){ return moment(time).endOf(unit).valueOf(); },\n    formats(){\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY',\n        };\n    },\n});\nChart.register(...registerables, zoomPlugin);\n\n// Per-sub-instrument base hue. Cycled if more than 7 sub-instruments.\nconst INSTRUMENT_HUES = [\n    { name: 'Blue',   h: 215 },\n    { name: 'Green',  h: 130 },\n    { name: 'Red',    h:   0 },\n    { name: 'Purple', h: 280 },\n    { name: 'Orange', h:  30 },\n    { name: 'Teal',   h: 175 },\n    { name: 'Pink',   h: 330 },\n];\n\nfunction colorForChannel(instrumentNumber, positionInInstrument, instrumentSize){\n    const hue = INSTRUMENT_HUES[(instrumentNumber - 1) % INSTRUMENT_HUES.length].h;\n    const stops = Math.max(instrumentSize - 1, 1);\n    const lightness = 25 + (positionInInstrument / stops) * 40;\n    return `hsl(${hue}, 70%, ${lightness}%)`;\n}\n\nfunction dimColor(color){\n    if(typeof color !== 'string'){ return color; }\n    if(color.startsWith('hsl(')){\n        return color.replace('hsl(', 'hsla(').replace(')', ', 0.18)');\n    }\n    return color + '33';\n}\n\nfunction buildChannelMap(instrumentId){\n    const sizes = getInstrumentSizesFromId(instrumentId);\n    const tempLines = [];\n    const dispLines = [];\n    let dispCursor = 1; // index 0 is the BE placeholder\n    sizes.forEach((size, iIdx) => {\n        const instrumentNumber = iIdx + 1;\n        // Each sub-instrument is a separate exto merged under one parent ID;\n        // user-facing label is `I${n}.T` / `I${n}.D${p}`.\n        tempLines.push({\n            label: `I${instrumentNumber}.T`,\n            color: colorForChannel(instrumentNumber, 0, size),\n            valuesIndex: iIdx,\n            instrumentIndex: instrumentNumber,\n            positionInInstrument: 0,\n        });\n        for(let p = 1; p < size; p++){\n            dispLines.push({\n                label: `I${instrumentNumber}.D${p}`,\n                color: colorForChannel(instrumentNumber, p, size),\n                valuesIndex: dispCursor,\n                instrumentIndex: instrumentNumber,\n                positionInInstrument: p,\n            });\n            dispCursor++;\n        }\n    });\n    return { tempLines, dispLines };\n}\n\nexport default Component.extend({\n    chart: null,\n    yAxisUnit: null,\n    _brushLastRange: null, // guards against re-submitting the same range when restoring state\n\n    init(){\n        this._super(...arguments);\n        const u = this.get('advancedYAxisUnit');\n        if(u){ this.set('yAxisUnit', u); }\n    },\n\n    /**\n     * Submit a new x-range brush to the route. The route's `updateProperties` action mutates\n     * the `start_timestamp` / `end_timestamp` query params, which triggers refreshModel and a\n     * fresh data fetch. Mirrors pack/_submitBrush.\n     */\n    _submitBrush(startTs, endTs){\n        if(this.isDestroyed || this.isDestroying){ return; }\n        const prev = this.get('_brushLastRange');\n        if(prev && prev[0] === startTs && prev[1] === endTs){ return; }\n        this.set('_brushLastRange', [startTs, endTs]);\n        if(this.attrs && this.attrs.updateProperties){\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    yAxisTitle: computed('yAxisUnit', function(){\n        const unit = this.get('yAxisUnit') || 'mm';\n        return `Displacement (${unit})`;\n    }),\n\n    // React to \"Adjust Scales\" form changes (autoAxis / axis_min / axis_max). Updates the\n    // already-built chart's y-axis bounds without a full rebuild.\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function(){\n        if(!this.chart || !this.chart.scales || !this.chart.scales.y){ return; }\n        const auto = this.get('autoAxis');\n        const min  = this.get('axis_min');\n        const max  = this.get('axis_max');\n        if(auto || min == null || max == null){\n            this.chart.options.scales.y.min = undefined;\n            this.chart.options.scales.y.max = undefined;\n        }else{\n            this.chart.options.scales.y.min = parseFloat(min);\n            this.chart.options.scales.y.max = parseFloat(max);\n        }\n        this.chart.update();\n    }),\n\n    yAxisUnitObserver: observer('advancedYAxisUnit', function(){\n        const u = this.get('advancedYAxisUnit');\n        this.set('yAxisUnit', u || null);\n        if(this.chart && this.chart.scales && this.chart.scales.y){\n            this.chart.options.scales.y.title.text = this.get('yAxisTitle');\n            this.chart.update();\n        }\n    }),\n\n    channelMap: computed('instrument.id', function(){\n        return buildChannelMap(this.get('instrument.id'));\n    }),\n\n    datasets: computed('channelMap', 'zoomChartData.[]', 'zoomTempData.[]', function(){\n        const cm = this.get('channelMap');\n        const dispData = this.get('zoomChartData') || [];\n        const tempData = this.get('zoomTempData') || [];\n        const out = [];\n        const read = (item, key) => (item && item.get) ? item.get(key) : (item ? item[key] : undefined);\n\n        cm.dispLines.forEach((line) => {\n            out.push({\n                label: line.label,\n                data: dispData.map((item) => ({\n                    x: moment(read(item, 'id')).valueOf(),\n                    y: (() => { const v = read(item, 'values'); return (v && v[line.valuesIndex] != null) ? v[line.valuesIndex] : null; })(),\n                })),\n                borderColor: line.color,\n                backgroundColor: 'transparent',\n                borderWidth: 1.5,\n                pointRadius: 0,\n                pointHoverRadius: 5,\n                pointHoverBackgroundColor: line.color,\n                tension: 0,\n                yAxisID: 'y',\n                // Sub-instrument metadata — consumed by the legend's I-column + whole-instrument toggle.\n                _instrumentIndex: line.instrumentIndex,\n                _positionInInstrument: line.positionInInstrument,\n            });\n        });\n\n        cm.tempLines.forEach((line) => {\n            out.push({\n                label: line.label,\n                data: tempData.map((item) => ({\n                    x: moment(read(item, 'id')).valueOf(),\n                    y: (() => { const v = read(item, 'values'); return (v && v[line.valuesIndex] != null) ? v[line.valuesIndex] : null; })(),\n                })),\n                borderColor: line.color,\n                backgroundColor: 'transparent',\n                borderWidth: 1.5,\n                borderDash: [5, 4],\n                pointRadius: 0,\n                pointHoverRadius: 5,\n                pointHoverBackgroundColor: line.color,\n                tension: 0,\n                yAxisID: 'y2',\n                _instrumentIndex: line.instrumentIndex,\n                _positionInInstrument: line.positionInInstrument,\n            });\n        });\n\n        return out;\n    }),\n\n    didInsertElement(){\n        this._super(...arguments);\n        scheduleOnce('afterRender', this, this._buildChart);\n    },\n\n    didUpdateAttrs(){\n        this._super(...arguments);\n        scheduleOnce('afterRender', this, this._refreshChart);\n    },\n\n    willDestroyElement(){\n        if(this.chart){ this.chart.destroy(); this.chart = null; }\n        this._super(...arguments);\n    },\n\n    _refreshChart(){\n        if(!this.chart){ this._buildChart(); return; }\n        const sidebar = this.element ? this.element.querySelector('.chart-legend-side') : null;\n        if(sidebar){\n            const existing = sidebar.querySelector('.legend-tooltip');\n            if(existing){ existing.remove(); }\n        }\n        this.chart.destroy();\n        this.chart = null;\n        this._buildChart();\n    },\n\n    _buildChart(){\n        const _this = this;\n        const canvas = this.element ? this.element.querySelector('canvas') : null;\n        if(!canvas){ return; }\n        if(this.chart){ this.chart.destroy(); }\n\n        // Per-instance interaction state\n        let crosshairX = null;     // px, follows cursor when over chart area\n        let pinnedX = null;        // px, set by click; persists until unpinned\n        let dragStartPx = null;    // px, set on mousedown; cleared on mouseup\n        let originalColors = [];   // snapshot for hover-highlight restoration\n        let legendTooltipEl = null;\n\n        const colorOf = (chart, i) => {\n            const ds = chart.data.datasets[i];\n            return ds && ds.borderColor ? ds.borderColor : '#888';\n        };\n\n        // ---------- Custom plugins ----------\n\n        // Vertical dotted crosshair line at crosshairX (cursor-following) or pinnedX (sticky).\n        const crosshairPlugin = {\n            id: 'extoBCrosshair',\n            afterDraw(chart){\n                const x = (pinnedX != null) ? pinnedX : crosshairX;\n                if(x == null){ return; }\n                const { ctx, chartArea } = chart;\n                if(x < chartArea.left || x > chartArea.right){ return; }\n                ctx.save();\n                ctx.beginPath();\n                ctx.setLineDash([4, 4]);\n                ctx.lineWidth = 1;\n                ctx.strokeStyle = pinnedX != null ? '#4A6A9C' : '#888';\n                ctx.moveTo(x, chartArea.top);\n                ctx.lineTo(x, chartArea.bottom);\n                ctx.stroke();\n                ctx.restore();\n            },\n        };\n\n        // For each visible dataset, draws a filled dot at the closest data point to the cursor/pinned x.\n        const pointLabelsPlugin = {\n            id: 'extoBPointLabels',\n            afterDraw(chart){\n                const x = (pinnedX != null) ? pinnedX : crosshairX;\n                if(x == null){ return; }\n                const { ctx, chartArea } = chart;\n                if(x < chartArea.left || x > chartArea.right){ return; }\n                const xScale = chart.scales['x'];\n                if(!xScale){ return; }\n                const targetTs = xScale.getValueForPixel(x);\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    if(meta.hidden){ return; }\n                    let closest = null;\n                    let bestDist = Infinity;\n                    ds.data.forEach((pt) => {\n                        if(!pt || pt.x == null || pt.y == null){ return; }\n                        const d = Math.abs(pt.x - targetTs);\n                        if(d < bestDist){ bestDist = d; closest = pt; }\n                    });\n                    if(!closest){ return; }\n                    const yScale = chart.scales[ds.yAxisID || 'y'];\n                    if(!yScale){ return; }\n                    const px = xScale.getPixelForValue(closest.x);\n                    const py = yScale.getPixelForValue(closest.y);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.fillStyle = colorOf(chart, dsIndex);\n                    ctx.arc(px, py, 4, 0, Math.PI * 2);\n                    ctx.fill();\n                    ctx.restore();\n                });\n            },\n        };\n\n        const noDataPlugin = {\n            id: 'extoBNoData',\n            afterDraw(chart){\n                const xScale = chart.scales['x'];\n                if(!xScale){ return; }\n                let hasData = false;\n                chart.data.datasets.forEach((ds) => {\n                    const meta = chart.getDatasetMeta(chart.data.datasets.indexOf(ds));\n                    if(meta && meta.hidden){ return; }\n                    ds.data.forEach((pt) => {\n                        if(pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max){ hasData = true; }\n                    });\n                });\n                if(!hasData){\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            },\n        };\n\n        // ---------- Legend / Tooltip element ----------\n\n        // Build the legend as a series of sub-instrument sections.\n        // Each section has two columns: an instrument toggle button on the left, and the\n        // channel items (T then D1..Dn) for that sub-instrument on the right. Clicking the\n        // instrument button toggles visibility of every channel in that sub-instrument at\n        // once (matches the raw-data grouping UX). Individual channel items still toggle\n        // their own dataset.\n        const buildLegendItems = (chart) => {\n            // Bucket datasets by their _instrumentIndex.\n            const buckets = {};\n            chart.data.datasets.forEach((ds, i) => {\n                const k = ds._instrumentIndex;\n                if(k == null){ return; }\n                if(!buckets[k]){ buckets[k] = []; }\n                buckets[k].push({ ds, dsIndex: i });\n            });\n            const instrumentKeys = Object.keys(buckets).sort((a, b) => parseInt(a) - parseInt(b));\n\n            return instrumentKeys.map((iKey) => {\n                // Sort each sub-instrument: temperature (positionInInstrument=0) first, then D1..Dn ascending.\n                const items = buckets[iKey].sort((a, b) => (a.ds._positionInInstrument || 0) - (b.ds._positionInInstrument || 0));\n\n                const allHidden  = items.every(({dsIndex}) => chart.getDatasetMeta(dsIndex).hidden);\n                const allVisible = items.every(({dsIndex}) => !chart.getDatasetMeta(dsIndex).hidden);\n                const instrumentOpacity = allHidden ? 0.35 : (allVisible ? 1 : 0.7);\n\n                // Instrument-button dot color: medium shade of this sub-instrument's hue so it\n                // visually represents the family without being too dark or too light.\n                const hueDef = INSTRUMENT_HUES[(parseInt(iKey) - 1) % INSTRUMENT_HUES.length];\n                const instrumentColor = hueDef ? `hsl(${hueDef.h}, 70%, 40%)` : '#888';\n\n                const channelItems = items.map(({ds, dsIndex}) => {\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    const hidden = meta.hidden;\n                    const color = colorOf(chart, dsIndex);\n                    return `<div data-ds=\"${dsIndex}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n                }).join('');\n\n                return `<div class=\"legend-instrument-section\" style=\"display:flex;flex-direction:row;align-items:flex-start;border-top:1px solid #eee;padding:6px 0;\">\n                    <div data-instrument=\"${iKey}\" class=\"legend-instrument-button\" style=\"cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:3px;min-width:48px;padding-right:8px;opacity:${instrumentOpacity};user-select:none;\" title=\"Click to toggle the entire sub-instrument\">\n                        <div class=\"legend-instrument-dot\" style=\"width:14px;height:14px;background:${instrumentColor};border-radius:50%;flex-shrink:0;\"></div>\n                        <span style=\"font-weight:600;font-size:small;\">I${iKey}</span>\n                    </div>\n                    <div class=\"legend-instrument-channels\" style=\"flex:1 1 auto;display:flex;flex-direction:column;gap:2px;min-width:0;\">${channelItems}</div>\n                </div>`;\n            }).join('');\n        };\n\n        const buildTooltipItems = (tooltipItems, chart) => {\n            if(!tooltipItems.length){ return ''; }\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map((item) => {\n                const color = colorOf(chart, item.datasetIndex);\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        };\n\n        const snapshotColors = (chart) => {\n            originalColors = chart.data.datasets.map((d) => d.borderColor);\n        };\n        const restoreColors = (chart) => {\n            chart.data.datasets.forEach((d, i) => { d.borderColor = originalColors[i]; });\n        };\n\n        // Tracked hover state — survives innerHTML replacement (browsers don't synthesize\n        // mouseover/mouseout for swapped DOM, which was leaving lines stuck dimmed after clicking\n        // a legend item). Using mousemove + mouseleave + a tracked index is the robust pattern.\n        let hoveredIdx = null;\n        const applyHover = (chart, newIdx) => {\n            if(newIdx === hoveredIdx){ return; }\n            hoveredIdx = newIdx;\n            if(newIdx == null){\n                restoreColors(chart);\n            }else{\n                chart.data.datasets.forEach((d, i) => {\n                    d.borderColor = (i === newIdx) ? originalColors[i] : dimColor(originalColors[i]);\n                });\n            }\n            chart.update('none');\n        };\n\n        const attachLegendHandlers = (el, chart) => {\n            el.onclick = (e) => {\n                // Sub-instrument toggle: clicking the I-button flips visibility for every\n                // dataset in that sub-instrument. \"All visible\" → hide all; otherwise → show all.\n                const instrumentBtn = e.target.closest('[data-instrument]');\n                if(instrumentBtn){\n                    const iKey = instrumentBtn.dataset.instrument;\n                    const indices = [];\n                    chart.data.datasets.forEach((ds, i) => {\n                        if(String(ds._instrumentIndex) === String(iKey)){ indices.push(i); }\n                    });\n                    if(!indices.length){ return; }\n                    const allVisible = indices.every((i) => !chart.getDatasetMeta(i).hidden);\n                    indices.forEach((i) => { chart.getDatasetMeta(i).hidden = allVisible; });\n                    hoveredIdx = null;\n                    restoreColors(chart);\n                    chart.update();\n                    el.innerHTML = buildLegendItems(chart);\n                    return;\n                }\n\n                const item = e.target.closest('[data-ds]');\n                if(!item){ return; }\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                // Clear hover state — DOM is about to be rebuilt; next mousemove re-detects.\n                hoveredIdx = null;\n                restoreColors(chart);\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmousemove = (e) => {\n                const item = e.target.closest('[data-ds]');\n                applyHover(chart, item ? parseInt(item.dataset.ds) : null);\n            };\n            el.onmouseleave = () => {\n                applyHover(chart, null);\n            };\n            el.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        };\n\n        const initLegendTooltip = (host, chart) => {\n            legendTooltipEl = host.querySelector('.legend-tooltip');\n            if(!legendTooltipEl){\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                host.appendChild(legendTooltipEl);\n            }\n            // Override the shared horizontal-wrap CSS for our right-side vertical sidebar layout.\n            // width:100% + box-sizing:border-box keeps the legend inside the scrollable column\n            // so a 80+ channel instrument doesn't overflow the chart layout horizontally.\n            Object.assign(legendTooltipEl.style, {\n                position: 'static',\n                inset: 'auto',\n                margin: '0',\n                width: '100%',\n                boxSizing: 'border-box',\n                display: 'flex',\n                flexDirection: 'column',\n                flexWrap: 'nowrap',\n                alignItems: 'flex-start',\n                justifyContent: 'flex-start',\n                gap: '4px',\n            });\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n        };\n\n        // External tooltip handler — swap legend ↔ tooltip-values text on hover.\n        // When pinned, leave the pinned content alone.\n        const externalTooltipHandler = (context) => {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if(!legendTooltipEl){ return; }\n            if(pinnedX != null){ return; }\n            if(tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length){\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints, chart);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Used for pin-tooltip lookup (mirrors Chart.js's index-mode tooltip behavior).\n        const getDataPointsAtPx = (chart, px) => {\n            const xScale = chart.scales['x'];\n            if(!xScale){ return []; }\n            const targetTs = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if(meta.hidden){ return; }\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach((pt) => {\n                    if(!pt || pt.x == null || pt.y == null){ return; }\n                    const d = Math.abs(pt.x - targetTs);\n                    if(d < bestDist){ bestDist = d; closest = pt; }\n                });\n                if(closest){\n                    items.push({ datasetIndex, dataset: ds, parsed: { x: closest.x, y: closest.y } });\n                }\n            });\n            return items;\n        };\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(_this.chart, px);\n            if(!items.length){ pinnedX = null; return; }\n            if(legendTooltipEl){\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items, _this.chart);\n            }\n            _this.chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if(pinnedX == null){ return; }\n            pinnedX = null;\n            if(legendTooltipEl){\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(_this.chart);\n                attachLegendHandlers(legendTooltipEl, _this.chart);\n            }\n            _this.chart.update('none');\n        };\n\n        // ---------- Build the chart ----------\n\n        const ctx = canvas.getContext('2d');\n        this.chart = new Chart(ctx, {\n            type: 'line',\n            data: { datasets: this.get('datasets') },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false, external: externalTooltipHandler },\n                    zoom: {\n                        // Drag-to-zoom handled manually below so click vs drag distinction matches pack.\n                        zoom: { wheel: { enabled: false }, pinch: { enabled: false }, mode: 'x' },\n                        pan:  { enabled: false },\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY',\n                            },\n                        },\n                        ticks: { maxTicksLimit: 8, maxRotation: 0 },\n                        title: { display: true, text: 'Time' },\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: { display: true, text: this.get('yAxisTitle') },\n                        // Honor \"Adjust Scales\" form: when autoAxis is false and bounds are set, clamp.\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: (v) => v.toFixed(2) },\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: (v) => v.toFixed(1) },\n                    },\n                },\n            },\n            plugins: [crosshairPlugin, pointLabelsPlugin, noDataPlugin],\n        });\n\n        snapshotColors(this.chart);\n\n        const legendHost = this.element.querySelector('.chart-legend-side') || canvas.parentElement;\n        initLegendTooltip(legendHost, this.chart);\n\n        // ---------- Selection rectangle (drag-to-zoom) overlay ----------\n        const wrap = canvas.parentElement;\n        let selectionEl = wrap.querySelector('.chart-selection');\n        if(!selectionEl){\n            selectionEl = document.createElement('div');\n            selectionEl.className = 'chart-selection';\n            Object.assign(selectionEl.style, {\n                position: 'absolute',\n                top: '0',\n                bottom: '0',\n                background: 'rgba(74, 106, 156, 0.18)',\n                border: '1px solid rgba(74, 106, 156, 0.6)',\n                pointerEvents: 'none',\n                display: 'none',\n            });\n            wrap.appendChild(selectionEl);\n        }\n\n        // ---------- Mouse handlers ----------\n        const getCanvasX = (e) => {\n            const rect = canvas.getBoundingClientRect();\n            return e.clientX - rect.left;\n        };\n\n        canvas.onmousedown = (e) => {\n            e.preventDefault();\n            const px = getCanvasX(e);\n            const { left, right } = _this.chart.chartArea;\n            if(px < left || px > right){ return; }\n            dragStartPx = px;\n            selectionEl.style.left = px + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        };\n\n        canvas.onmousemove = (e) => {\n            if(!_this.chart){ return; }\n            const px = getCanvasX(e);\n            const { left, right } = _this.chart.chartArea;\n            if(dragStartPx != null){\n                const curX = Math.max(left, Math.min(right, px));\n                selectionEl.style.left  = Math.min(curX, dragStartPx) + 'px';\n                selectionEl.style.width = Math.abs(curX - dragStartPx) + 'px';\n                crosshairX = null;\n            }else{\n                crosshairX = (px >= left && px <= right) ? px : null;\n            }\n            _this.chart.update('none');\n        };\n\n        canvas.onmouseleave = () => {\n            crosshairX = null;\n            if(_this.chart){ _this.chart.update('none'); }\n        };\n\n        const onMouseUp = (e) => {\n            if(dragStartPx == null){ return; }\n            const startPx = dragStartPx;\n            dragStartPx = null;\n            selectionEl.style.display = 'none';\n\n            const endPx = getCanvasX(e);\n\n            // < 5px movement → treat as click → toggle pin\n            if(Math.abs(endPx - startPx) < 5){\n                const { left, right } = _this.chart.chartArea;\n                if(startPx < left || startPx > right){ return; }\n                if(pinnedX != null && Math.abs(startPx - pinnedX) < 5){\n                    clearPinnedTooltip();\n                }else{\n                    setPinnedTooltip(startPx);\n                }\n                return;\n            }\n\n            // Otherwise → submit a brushed range to the route. The route refetches with the\n            // narrowed start_timestamp/end_timestamp query params, which redraws the chart with\n            // denser data than a pure visual zoom would show.\n            const xScale = _this.chart.scales['x'];\n            if(!xScale){ return; }\n            const { left, right } = _this.chart.chartArea;\n            const leftPx  = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n            const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs   = xScale.getValueForPixel(rightPx);\n            if(startTs == null || endTs == null || endTs <= startTs){ return; }\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        canvas.addEventListener('mouseup', onMouseUp);\n        document.addEventListener('mouseup', onMouseUp);\n\n        canvas.oncontextmenu = (e) => {\n            e.preventDefault();\n            clearPinnedTooltip();\n        };\n\n        canvas.ondblclick = () => {\n            // Reset brush — clears start_timestamp/end_timestamp query params so route refetches full range.\n            clearPinnedTooltip();\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        };\n\n        const setChart = this.get('setChart');\n        if(typeof setChart === 'function'){ setChart(this.chart); }\n    },\n});\n","import Component from '@ember/component';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport moment from 'moment';\nimport {\n    getInstrumentCountFromId,\n    getInstrumentSizesFromId,\n} from '../../utils/instrument-id';\n\n// Each sub-instrument under a multi-instrument (subModel B) parent ID is treated as\n// its own logical instrument: 1 temperature + up to 6 displacement channels.\nconst LAYOUTS = {\n    T_PER_INSTRUMENT:        'T_PER_INSTRUMENT',        // Layout 1: I1.T I1.D... | I2.T I2.D... | ...\n    D_PER_INSTRUMENT:        'D_PER_INSTRUMENT',        // Layout 2: I1.D... I1.T | I2.D... I2.T | ...\n    ALL_T_THEN_ALL_D:        'ALL_T_THEN_ALL_D',        // Layout 3: T T T | D... D... D...\n    ALL_D_THEN_ALL_T:        'ALL_D_THEN_ALL_T',        // Layout 4: D... D... D... | T T T\n};\n\nconst BTN_BASE = 'font-size:small;padding:5px 12px;margin-right:4px;border-radius:4px;';\nfunction buttonStyle(selected){\n    if(selected){\n        return BTN_BASE + 'background-color:#4A6A9C;color:#fff;border:1px solid #4A6A9C;';\n    }\n    return BTN_BASE + 'background-color:#fff;color:#4A6A9C;border:1px solid #4A6A9C;';\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    selectedLayout: LAYOUTS.T_PER_INSTRUMENT,\n    selectedInstruments: null, // Set of 1-based sub-instrument indices, default = all\n    isModalOpen: false,\n    modalMode: 'add', // 'add' | 'edit'\n    modalEditingRowId: null, // timestamp string of the row being edited\n\n    init(){\n        this._super(...arguments);\n        const count = getInstrumentCountFromId(this.get('instrument.id'));\n        const all = new Set();\n        for(let i = 1; i <= count; i++){ all.add(i); }\n        this.set('selectedInstruments', all);\n    },\n\n    instrumentCount: computed('instrument.id', function(){\n        return getInstrumentCountFromId(this.get('instrument.id'));\n    }),\n    instrumentSizes: computed('instrument.id', function(){\n        return getInstrumentSizesFromId(this.get('instrument.id'));\n    }),\n\n    // Array of buttons for the Instruments row: [{ index, label, selected, style }]\n    instrumentButtons: computed('instrumentCount', 'selectedInstruments', function(){\n        const count = this.get('instrumentCount');\n        const selected = this.get('selectedInstruments') || new Set();\n        const arr = [];\n        for(let i = 1; i <= count; i++){\n            const isSel = selected.has(i);\n            arr.push({\n                index: i,\n                label: `I${i}`,\n                selected: isSel,\n                style: buttonStyle(isSel),\n            });\n        }\n        return arr;\n    }),\n\n    // Array of layout buttons for the Layout row.\n    layoutButtons: computed('selectedLayout', function(){\n        const cur = this.get('selectedLayout');\n        const make = (key, label) => ({\n            key,\n            label,\n            selected: cur === key,\n            style: buttonStyle(cur === key) + 'font-family:monospace;',\n        });\n        return [\n            make(LAYOUTS.T_PER_INSTRUMENT, 'T D D...  |  T D D...'),\n            make(LAYOUTS.D_PER_INSTRUMENT, 'D D D... T  |  D D D... T'),\n            make(LAYOUTS.ALL_T_THEN_ALL_D, 'T | T | T   D D D... | D D D...'),\n            make(LAYOUTS.ALL_D_THEN_ALL_T, 'D D D... | D D D...   T | T | T'),\n        ];\n    }),\n\n    /**\n     * Master column spec list. Each spec describes one table column:\n     *   { key, label, kind: 't'|'d', instrumentIndex (1-based),\n     *     tempIndex (0-based for temp), dispIndex (into displacement.values array INCLUDING placeholder) }\n     * Filtered to only the selected sub-instruments, ordered per the selected layout.\n     */\n    columnSpecs: computed('instrumentSizes', 'selectedInstruments', 'selectedLayout', function(){\n        const sizes = this.get('instrumentSizes') || [];\n        const selected = this.get('selectedInstruments') || new Set();\n        const layout = this.get('selectedLayout');\n\n        // Build per-instrument temp + disp specs first.\n        let dispCursor = 1; // displacement.values[0] is the placeholder\n        const instrumentRecords = sizes.map((size, iIdx) => {\n            const instrumentIndex = iIdx + 1; // 1-based for labels\n            const tempSpec = {\n                key: `i${instrumentIndex}_t`,\n                label: `I${instrumentIndex}.T`,\n                kind: 't',\n                headerStyle: 'background-color:#fff3cd;',\n                cellStyle:   'background-color:#fff8e1;', // lighter shade for body cells\n                instrumentIndex,\n                tempIndex: iIdx,\n                dispIndex: null,\n            };\n            const dispCount = Math.max(size - 1, 0);\n            const dispSpecs = [];\n            for(let d = 1; d <= dispCount; d++){\n                dispSpecs.push({\n                    key: `i${instrumentIndex}_d${d}`,\n                    label: `I${instrumentIndex}.D${d}`,\n                    kind: 'd',\n                    headerStyle: '',\n                    instrumentIndex,\n                    tempIndex: null,\n                    dispIndex: dispCursor,\n                });\n                dispCursor += 1;\n            }\n            return { instrumentIndex, tempSpec, dispSpecs };\n        });\n\n        // Filter by selected sub-instruments.\n        const active = instrumentRecords.filter(r => selected.has(r.instrumentIndex));\n\n        // Compose final order per the chosen layout.\n        const out = [];\n        switch(layout){\n            case LAYOUTS.T_PER_INSTRUMENT:\n                active.forEach(r => {\n                    out.push(r.tempSpec);\n                    r.dispSpecs.forEach(s => out.push(s));\n                });\n                break;\n            case LAYOUTS.D_PER_INSTRUMENT:\n                active.forEach(r => {\n                    r.dispSpecs.forEach(s => out.push(s));\n                    out.push(r.tempSpec);\n                });\n                break;\n            case LAYOUTS.ALL_T_THEN_ALL_D:\n                active.forEach(r => out.push(r.tempSpec));\n                active.forEach(r => r.dispSpecs.forEach(s => out.push(s)));\n                break;\n            case LAYOUTS.ALL_D_THEN_ALL_T:\n                active.forEach(r => r.dispSpecs.forEach(s => out.push(s)));\n                active.forEach(r => out.push(r.tempSpec));\n                break;\n            default:\n                active.forEach(r => {\n                    out.push(r.tempSpec);\n                    r.dispSpecs.forEach(s => out.push(s));\n                });\n        }\n        return out;\n    }),\n\n    /**\n     * Table rows. Each row maps one timestamp to:\n     *   { id, date (raw), formattedDate (per globalDatetimeFormat), cells: [{ key, label, value, style }] }\n     * cells parallel columnSpecs.\n     */\n    tableRows: computed('displacementData.[]', 'temperatureData.[]', 'columnSpecs', 'globalDatetimeFormat.value', function(){\n        const dispData = this.get('displacementData') || [];\n        const tempData = this.get('temperatureData') || [];\n        const specs = this.get('columnSpecs') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n\n        const tempById = {};\n        tempData.forEach(r => { tempById[r.id] = r; });\n\n        return dispData.map(dispRow => {\n            const id = dispRow.id;\n            const dispValues = (dispRow.values || dispRow.get?.('values') || []);\n            const tempRow = tempById[id];\n            const tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n\n            const cells = specs.map(spec => {\n                let value = '';\n                if(spec.kind === 't'){\n                    value = tempValues[spec.tempIndex];\n                }else if(spec.kind === 'd'){\n                    value = dispValues[spec.dispIndex];\n                }\n                return {\n                    key: spec.key,\n                    label: spec.label,\n                    value: value == null ? '' : value,\n                    style: spec.cellStyle || '',\n                };\n            });\n            const formattedDate = moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt);\n            return { id, date: id, formattedDate, cells };\n        });\n    }),\n\n    modalFields: computed('columnSpecs', 'modalMode', 'modalEditingRowId', 'tableRows.[]', function(){\n        const specs = this.get('columnSpecs') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingRowId');\n\n        let existingRow = null;\n        if(mode === 'edit' && editingId){\n            existingRow = (this.get('tableRows') || []).find(r => r.id === editingId);\n        }\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && existingRow\n                ? moment(existingRow.date, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm')\n                : moment().format('YYYY-MM-DDTHH:mm'),\n        };\n\n        const cellByKey = {};\n        if(existingRow){\n            existingRow.cells.forEach(c => { cellByKey[c.key] = c.value; });\n        }\n\n        const channelFields = specs.map(spec => ({\n            key: spec.key,\n            label: spec.label,\n            type: 'text',\n            value: cellByKey[spec.key] != null ? cellByKey[spec.key] : '',\n        }));\n\n        return [dateField, ...channelFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function(){\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        toggleInstrument(index){\n            const selected = new Set(this.get('selectedInstruments'));\n            if(selected.has(index)){\n                if(selected.size > 1){ selected.delete(index); } // keep at least one selected\n            }else{\n                selected.add(index);\n            }\n            this.set('selectedInstruments', selected);\n        },\n        setLayout(layoutKey){\n            this.set('selectedLayout', layoutKey);\n        },\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingRowId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingRowId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const dispData = this.get('displacementData');\n            const tempData = this.get('temperatureData');\n            const dispRow = dispData ? dispData.find(r => r.id === rowId) : null;\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            const promises = [];\n            if(dispRow && dispRow.deleteRecord){\n                dispRow.deleteRecord();\n                promises.push(dispRow.save(adapterOptions));\n            }\n            if(tempRow && tempRow.deleteRecord){\n                tempRow.deleteRecord();\n                promises.push(tempRow.save(adapterOptions));\n            }\n            Promise.all(promises)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        /**\n         * Save handler — rebuilds the full displacement.values and temperature.values\n         * arrays from the modal's field snapshot, then writes to the store.\n         *\n         * Add mode  → store.createRecord\n         * Edit mode (date unchanged) → mutate existing record's `values` and save (PATCH)\n         * Edit mode (date changed)   → delete old records, create new at the new date\n         */\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const sizes = this.get('instrumentSizes') || [];\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            // Build temperature.values: one entry per sub-instrument, in instrument order.\n            const tempValues = [];\n            sizes.forEach((size, iIdx) => {\n                const instrumentIndex = iIdx + 1;\n                const k = `i${instrumentIndex}_t`;\n                tempValues.push(Number(snapshot[k]) || 0);\n            });\n\n            // Build displacement.values: [placeholder, then per-instrument disps in instrument order].\n            const dispValues = [0.0];\n            sizes.forEach((size, iIdx) => {\n                const instrumentIndex = iIdx + 1;\n                const dispCount = Math.max(size - 1, 0);\n                for(let d = 1; d <= dispCount; d++){\n                    const k = `i${instrumentIndex}_d${d}`;\n                    dispValues.push(Number(snapshot[k]) || 0);\n                }\n            });\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingRowId');\n\n            const tempData = this.get('temperatureData') || [];\n            const dispData = this.get('displacementData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            if(isEdit && originalId === newId){\n                const tempRow = findRow(tempData, originalId);\n                const dispRow = findRow(dispData, originalId);\n                const promises = [];\n                if(tempRow){ tempRow.set('values', tempValues); promises.push(tempRow.save(adapterOptions)); }\n                if(dispRow){ dispRow.set('values', dispValues); promises.push(dispRow.save(adapterOptions)); }\n                Promise.all(promises).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                const oldDisp = findRow(dispData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n                if(oldDisp){ oldDisp.deleteRecord(); oldDisp.save(adapterOptions); }\n            }\n\n            const tempRecord = store.createRecord('temperature-value', { id: newId, values: tempValues });\n            tempRecord.save(adapterOptions);\n\n            const dispRecord = store.createRecord('displacement-value', { id: newId, values: dispValues });\n            dispRecord.save(adapterOptions).then(refreshRoute).catch(handleErr);\n        },\n    },\n});\n","export { default } from '@fortawesome/ember-fontawesome/components/fa-icon';\n","export { default } from 'ember-uploader/components/file-field';","import { computed, observer } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { inject as service } from '@ember/service';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport EmberObject from '@ember/object';\nimport FileField from 'ember-uploader/components/file-field';\nimport Uploader from 'ember-uploader/uploaders/uploader';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default FileField.extend({\n    session: service(),\n    isSubmitting: false,\n    isSubmittingChangeObserver: observer('isSubmitting', function() {\n        if (this.get('isSubmitting')) {\n            this.send('submitFile');\n        }\n    }),\n    uploader: null,\n    files: null,\n    ajaxSettings: computed({\n        get() {\n            return {\n                headers: {\n                    Accept: 'application/vnd.api+json',\n                    withCredentials: true,\n                    Authorization: 'Bearer ' + localStorage.token  \n                }\n            }\n        }\n    }),\n    fileSettings: {},\n    filesDidChange: function(files) {\n        const uploader = Uploader.create({\n            url: getApiBaseUrl() + '/import-gateway-file/',\n            // url: \"http://\" + document.location.host.split(':')[0] + \":8000\" + '/import-gateway-file/',\n            paramName: 'data_file',\n            ajaxSettings: this.get('ajaxSettings')\n        });\n\n        this.set('uploader', uploader);\n        this.set('files', files);\n    },\n    actions: {\n        submitFile(object){\n            const _this = this;\n            let files = _this.get('files');\n            \n            //files = null;\n            //this.sendAction('importError');\n            if (!isEmpty(files)) {\n                // this second argument is optional and can to be sent as extra data with the upload\n                //console.log(files);\n                //console.log(_this.get('fileSettings'));\n                let format = _this.get('fileSettings').file_format;\n                let dateFormat = _this.get('fileSettings').date_format;\n                let filename = files[0].name.substring(0,files[0].name.lastIndexOf('.'));\n                let ext = files[0].name.substring(files[0].name.lastIndexOf('.')+1);\n                \n                let ok = true;\n                let id = this.get('fileSettings').gateway_id;\n                // console.log(\"ID: \" + id + \" Filename: \" + filename)\n                let errMsg = \"\";\n                if(id !== filename) {\n                    if(confirm(\"IDs do not match\\nGateway ID: \" + id + \"\\nFile ID: \" + filename + \"\\nYou are about to import this data.\")) {\n                        ok = true;\n                    } else {\n                        ok = false;\n                    }\n                }\n\n                if(!format.includes(ext)) {\n                    if(confirm(\"File format does not match\\nSelected Format: \" + format + \"\\nFile format: \" + ext + \"\\nYou are about to import this data.\")) {\n                        ok = true;\n                    } else {\n                        ok = false;\n                    }                            \n                }\n\n                if(dateFormat === '') {\n                    ok = false;\n                    errMsg = \"Date format not selected.\";\n                }\n                \n                if(ok) {\n                    //$(\"body\").css(\"cursor\", \"progress\");\n                    _this.get('uploader').upload(files[0],_this.get('fileSettings')\n                    ).then(data => {\n                        // Handle success\n                        // Reload the page to show imported data\n                        //$(\"body\").css(\"cursor\", \"default\");\n                        window.location.reload(true);\n                    }, error => {\n                        //console.log(error.statusText);\n                        //$(\"body\").css(\"cursor\", \"default\");\n                        if (error.responseJSON) {\n                            this.sendAction('errorHappened',error.responseText);\n                        } else {\n                            this.sendAction('errorHappened',error.statusText);\n                        }\n                        //this.sendAction('errorHappened',error.statusText);\n                        // Handle failure\n                    });\n                } else {\n                    if (errMsg !== \"\") {\n                        this.sendAction('errorHappened',errMsg);\n                    } else {\n                        this.sendAction('errorHappened',\"User cancelled\");\n                    }\n                }\n            } else {\n                this.sendAction('errorHappened',\"No File selected.\");\n            }\n        },\n        cancel(){\n            // this.set('newValue', this.get(`object.${this.get('field')}`));\n            // this.set('isEditing', false);\n            // this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n        }\n    },\n});","import { computed, observer } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { inject as service } from '@ember/service';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport EmberObject from '@ember/object';\nimport FileField from 'ember-uploader/components/file-field';\nimport Uploader from 'ember-uploader/uploaders/uploader';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default FileField.extend({\n    session: service(),\n    isSubmitting: false,\n    isSubmittingChangeObserver: observer('isSubmitting', function() {\n        if (this.get('isSubmitting')) {\n            this.send('submitFile');\n        }\n    }),\n    uploader: null,\n    files: null,\n    ajaxSettings: computed({\n        get() {\n            return {\n                headers: {\n                    Accept: 'application/vnd.api+json',\n                    withCredentials: true,\n                    Authorization: 'Bearer ' + localStorage.token  \n                }\n            }\n        }\n    }),\n    fileSettings: {},\n    filesDidChange: function(files) {\n        const uploader = Uploader.create({\n            url: getApiBaseUrl() + '/import-seismic/',\n            paramName: 'data_file',\n            ajaxSettings: this.get('ajaxSettings')\n        });\n\n        this.set('uploader', uploader);\n        this.set('files', files);\n    },\n    actions: {\n        submitFile(object){\n            const _this = this;\n            let files = _this.get('files');\n            \n            //files = null;\n            //this.sendAction('importError');\n            if (!isEmpty(files)) {\n                // this second argument is optional and can to be sent as extra data with the upload\n                //console.log(files);\n                //console.log(_this.get('fileSettings'));\n                let format = _this.get('fileSettings').file_format;\n                let dateFormat = _this.get('fileSettings').date_format;\n                let filename = files[0].name.substring(0,files[0].name.lastIndexOf('.'));\n                let ext = files[0].name.substring(files[0].name.lastIndexOf('.')+1);\n                \n                let ok = true;\n                let id = this.get('fileSettings').instrument_id;\n\n                let errMsg = \"\";\n                \n                if(ok) {\n                    //$(\"body\").css(\"cursor\", \"progress\");\n                    _this.get('uploader').upload(files[0],_this.get('fileSettings')\n                    ).then(data => {\n                        // Handle success\n                        // Reload the page to show imported data\n                        //$(\"body\").css(\"cursor\", \"default\");\n                        window.location.reload(true);\n                    }, error => {\n                        //console.log(error.statusText);\n                        //$(\"body\").css(\"cursor\", \"default\");\n                        if (error.responseJSON) {\n                            let _eh = this.get(\"errorHappened\"); if (_eh) _eh(error.responseText);\n                        } else {\n                            let _eh = this.get(\"errorHappened\"); if (_eh) _eh(error.statusText);\n                        }\n                        //let _eh = this.get(\"errorHappened\"); if (_eh) _eh(error.statusText);\n                        // Handle failure\n                    });\n                } else {\n                    if (errMsg !== \"\") {\n                        let _eh = this.get(\"errorHappened\"); if (_eh) _eh(errMsg);\n                    } else {\n                        let _eh = this.get(\"errorHappened\"); if (_eh) _eh('User cancelled');\n                    }\n                }\n            } else {\n                let _eh = this.get(\"errorHappened\"); if (_eh) _eh('No File selected.');\n            }\n        },\n        cancel(){\n            // this.set('newValue', this.get(`object.${this.get('field')}`));\n            // this.set('isEditing', false);\n            // this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n        }\n    },\n});","import { computed, observer } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { inject as service } from '@ember/service';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport EmberObject from '@ember/object';\nimport FileField from 'ember-uploader/components/file-field';\nimport Uploader from 'ember-uploader/uploaders/uploader';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default FileField.extend({\n    session: service(),\n    isSubmitting: false,\n    isSubmittingChangeObserver: observer('isSubmitting', function() {\n        if (this.get('isSubmitting')) {\n            this.send('submitFile');\n        }\n    }),\n    uploader: null,\n    files: null,\n    ajaxSettings: computed({\n        get() {\n            return {\n                headers: {\n                    Accept: 'application/vnd.api+json',\n                    withCredentials: true,\n                    Authorization: 'Bearer ' + localStorage.token  \n                }\n            }\n        }\n    }),\n    fileSettings: {},\n    filesDidChange: function(files) {\n        const uploader = Uploader.create({\n            url: getApiBaseUrl() + '/import-file/',\n            paramName: 'data_file',\n            ajaxSettings: this.get('ajaxSettings')\n        });\n\n        this.set('uploader', uploader);\n        this.set('files', files);\n    },\n    actions: {\n        submitFile(object){\n            const _this = this;\n            let files = _this.get('files');\n            \n            //files = null;\n            //this.sendAction('importError');\n            if (!isEmpty(files)) {\n                // this second argument is optional and can to be sent as extra data with the upload\n                //console.log(files);\n                //console.log(_this.get('fileSettings'));\n                let format = _this.get('fileSettings').file_format;\n                let dateFormat = _this.get('fileSettings').date_format;\n                let filename = files[0].name.substring(0,files[0].name.lastIndexOf('.'));\n                let ext = files[0].name.substring(files[0].name.lastIndexOf('.')+1);\n                \n                let ok = true;\n                let id = this.get('fileSettings').instrument_id;\n\n                let errMsg = \"\";\n                if(id !== filename) {\n                    if(confirm(\"IDs do not match\\nInstrument ID: \" + id + \"\\nFile ID: \" + filename + \"\\nYou are about to import this data.\")) {\n                        ok = true;\n                    } else {\n                        ok = false;\n                    }\n                }\n\n                if(!format.includes(ext)) {\n                    if(confirm(\"File format does not match\\nSelected Format: \" + format + \"\\nFile format: \" + ext + \"\\nYou are about to import this data.\")) {\n                        ok = true;\n                    } else {\n                        ok = false;\n                    }                            \n                }\n\n                if(dateFormat === '') {\n                    ok = false;\n                    errMsg = \"Date format not selected.\";\n                }\n                \n                if(ok) {\n                    //$(\"body\").css(\"cursor\", \"progress\");\n                    _this.get('uploader').upload(files[0],_this.get('fileSettings')\n                    ).then(data => {\n                        // Handle success\n                        // Reload the page to show imported data\n                        //$(\"body\").css(\"cursor\", \"default\");\n                        window.location.reload(true);\n                    }, error => {\n                        //console.log(error.statusText);\n                        //$(\"body\").css(\"cursor\", \"default\");\n                        if (error.responseJSON) {\n                            this.sendAction('errorHappened',error.responseText);\n                        } else {\n                            this.sendAction('errorHappened',error.statusText);\n                        }\n                        //this.sendAction('errorHappened',error.statusText);\n                        // Handle failure\n                    });\n                } else {\n                    if (errMsg !== \"\") {\n                        this.sendAction('errorHappened',errMsg);\n                    } else {\n                        this.sendAction('errorHappened',\"User cancelled\");\n                    }\n                }\n            } else {\n                this.sendAction('errorHappened',\"No File selected.\");\n            }\n        },\n        cancel(){\n            // this.set('newValue', this.get(`object.${this.get('field')}`));\n            // this.set('isEditing', false);\n            // this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n        }\n    },\n});","import Component from \"@ember/component\";\n\nexport default Component.extend({\n    inputValue: '',\n\n    init() {\n        this._super(...arguments);\n        try {\n            if (this.attrs && this.attrs.searchValue && this.attrs.searchValue.value) {\n                this.set('inputValue', this.attrs.searchValue.value || '');\n            }\n        } catch(e) {}\n    },\n\n    actions: {\n        search() {\n            let updateSearch = this.get('updateSearch');\n            if (updateSearch) updateSearch(this.inputValue);\n        }\n    },\n\n    keyDown(e) {\n        if (e.keyCode === 13) {\n            this.send('search');\n        }\n    }\n})","import Component from \"@ember/component\";\n\nexport default Component.extend({\n    inputValue: '',\n    pageValue: 1,\n\n    init() {\n        this._super(...arguments);\n        try {\n            if (this.attrs && this.attrs.searchValue && this.attrs.searchValue.value) {\n                this.set('inputValue', this.attrs.searchValue.value || '');\n            }\n        } catch(e) {}\n    },\n\n    actions: {\n        updateProperty(propertyName, propertyValue) {\n            if (typeof propertyValue !== 'undefined') {\n                this.set('pageValue', 1);\n                window.location.href = `/gateway?search=${propertyValue}`;\n            }\n        },\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 13) {\n            this.send('updateProperty', 'searchValue', this.inputValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    pageValue: 1,\n    startDate: \"\",\n    endDate:\"\",\n    search:\"\",\n\n    init() {\n        this._super(...arguments);\n        this.setSearchFieldsFromURL();\n    },\n\n    setSearchFieldsFromURL() {\n        const queryParams = new URLSearchParams(window.location.search);\n        this.set('search', queryParams.get('search') || '');\n    \n        const startDateParam = queryParams.get('startDate');\n        const endDateParam = queryParams.get('endDate');\n    \n        if (startDateParam) {\n            const decodedStartDate = decodeURIComponent(startDateParam);\n            console.log(\"Init StartDate: \" + startDateParam)\n            this.set('startDate', startDateParam);//this.formatDateForDatetimeLocal(decodedStartDate));\n        } else {\n            this.set('startDate', '');\n        }\n    \n        if (endDateParam) {\n            const decodedEndDate = decodeURIComponent(endDateParam);\n            console.log(\"Init EndDate: \" + endDateParam)\n            this.set('endDate', endDateParam);//this.formatDateForDatetimeLocal(decodedEndDate));\n        } else {\n            this.set('endDate', '');\n        }\n        \n    },\n    \n    formatDateForDatetimeLocal(dateStr) {\n        // Assuming the format from the URL is 'YYYY-MM-DDTHH:mm' or similar\n        const date = new Date(dateStr);\n        return date.toISOString().slice(0, 16); // Converts to 'YYYY-MM-DDTHH:mm' format\n    },\n\n    actions: {\n        updateProperty(propertyName, changeEvent) {\n                this.set(propertyName, changeEvent.target.value);\n    \n                if (propertyName === 'startDate') {\n                    let newEndDate = this.calculateEndDate(changeEvent.target.value);\n                    this.set('endDate', newEndDate);\n                    console.log(\"endDate: \" + newEndDate);\n                }\n\n                console.log(\"PropertyValue: \" + this.get(propertyName))\n        },\n        search() {\n            this.set('pageValue', 1);\n            let searchValue = this.get(\"search\");\n            let startDate = this.get(\"startDate\");\n            let endDate = this.get(\"endDate\");\n            window.location.href = `/log-viewer?search=${encodeURIComponent(searchValue)}&startDate=${startDate}&endDate=${endDate}`;\n        },\n        reset(){\n            window.location.href = \"/log-viewer\";\n        }\n    },\n    calculateEndDate(startDate) {\n        let startDateObj = new moment(startDate);\n        startDateObj = startDateObj.add(1, \"days\").format(\"YYYY-MM-DDTHH:mm\"); // Add 1 day\n        console.log(\"calculateEndDate/startDateObj: \" + startDateObj);\n        return startDateObj; // Format for datetime-local input\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 13) {\n            let caller = e.target;\n            this.send('updateProperty', 'searchValue', caller.value);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from \"@ember/component\";\n\nexport default Component.extend({\n    inputValue: '',\n    pageValue: 1,\n\n    init() {\n        this._super(...arguments);\n        try {\n            if (this.attrs && this.attrs.searchValue && this.attrs.searchValue.value) {\n                this.set('inputValue', this.attrs.searchValue.value || '');\n            }\n        } catch(e) {}\n    },\n\n    actions: {\n        updateProperty(propertyName, propertyValue) {\n            if (typeof propertyValue !== 'undefined') {\n                this.set('pageValue', 1);\n                window.location.href = `/instruments?search=${propertyValue}`;\n            }\n        },\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 13) {\n            this.send('updateProperty', 'searchValue', this.inputValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n});","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    router: service(),\n    session: service(),\n    selectedFreqEventTabKey: null,\n    selectedFreqEventSubTabKey: null,\n    selectedFreqEventSubSubTabKey: null,\n    buildTabsInstrTypeDependent: computed('instrumentType', function() {\n        let tabs = [];\n        let instrumentType = this.get(\"instrumentType\");\n        switch (instrumentType){\n            case \"BluVibe\":\n                tabs = [\n                    {id: \"raw\", label: \"RAW\"},\n                    {id: \"acceleration\", label: \"Acceleration\"},\n                    {id: \"velocity\", label: \"Velocity\"},\n                    {id: \"displacement\", label: \"Displacement\"},\n                ];\n                break;\n        }\n        return tabs;\n    }),\n    buildSubTabsInstrTypeDependent: computed('selectedFreqEventTabKey', function() {\n        let tabs = [];\n        let selectedFreqEventTabKey = this.get('selectedFreqEventTabKey');\n        switch (selectedFreqEventTabKey){\n            case \"raw\":\n                tabs = [\n                    {id: \"raw_xyz_axis_focus\", label: \"XYZ-Focus\"},\n                    {id: \"x_axis_focus\", label: \"X-Focus\"},\n                    {id: \"y_axis_focus\", label: \"Y-Focus\"},\n                    {id: \"z_axis_focus\", label: \"Z-Focus\"},\n                ];\n                break;\n            case \"acceleration\":\n                tabs = [\n                    {id: \"sub_acceleration_linear_regression\", label: \"Linear Regression\"},\n                    {id: \"sub_acceleration_fft\", label: \"FFT\"}\n                ];\n                break;\n            case \"displacement\":\n                tabs = [\n                    {id: \"sub_displacement_linear_regression\", label: \"Linear Regression\"},\n                    {id: \"sub_displacement_fft\", label: \"FFT\"}\n                ];\n                break;\n            case \"velocity\":\n                tabs = [\n                    {id: \"sub_velocity_linear_regression\", label: \"Linear Regression\"},\n                    {id: \"sub_velocity_fft\", label: \"FFT\"}\n                ];\n                break;\n        }\n        return tabs;\n    }),\n    buildSubSubTabsInstrTypeDependent: computed('selectedFreqEventSubTabKey', function() {\n        let tabs = [];\n        let selectedFreqEventSubTabKey = this.get('selectedFreqEventSubTabKey');\n        switch (selectedFreqEventSubTabKey){\n            case \"sub_acceleration_linear_regression\":\n            case \"sub_velocity_linear_regression\":\n            case \"sub_displacement_linear_regression\":\n                tabs = [\n                    {id: \"sub_sub_xyz_axis_focus\", label: \"XYZ-Focus\"},\n                    {id: \"sub_sub_x_axis_focus\", label: \"X-Focus\"},\n                    {id: \"sub_sub_y_axis_focus\", label: \"Y-Focus\"},\n                    {id: \"sub_sub_z_axis_focus\", label: \"Z-Focus\"},\n                ];\n                break;\n            case \"sub_acceleration_fft\":\n            case \"sub_velocity_fft\":\n            case \"sub_displacement_fft\":\n                tabs = [\n                    {id: \"sub_sub_x_axis_focus\", label: \"X-Focus\"},\n                    {id: \"sub_sub_y_axis_focus\", label: \"Y-Focus\"},\n                    {id: \"sub_sub_z_axis_focus\", label: \"Z-Focus\"},\n                ];\n                break;\n        }\n        return tabs;\n    }),\n    willDestroyElement() {\n        this._super(...arguments);\n        // Reset any internal state here if needed\n        this.set(\"selectedFreqEventTabKey\", 'raw');\n        this.set(\"selectedFreqEventSubTabKey\", 'raw_xyz_axis_focus');\n        this.set(\"selectedFreqEventSubSubTabKey\", null);\n    },\n\n    actions: {\n        updateSelectedTab(newTabId) {\n            // console.log(`updateSelectedTab:${newTabId}`);\n            this.set('selectedFreqEventTabKey', newTabId);\n            switch(newTabId){\n                case \"raw\":\n                    // console.log(\"setting raw\")\n                    this.set('selectedFreqEventSubTabKey', \"raw_xyz_axis_focus\");\n                    this.set('selectedFreqEventSubSubTabKey', null);\n                    break;\n                case \"acceleration\":\n                    // console.log(\"setting acceleration\")\n                    this.set('selectedFreqEventSubTabKey', \"sub_acceleration_linear_regression\");\n                    this.set('selectedFreqEventSubSubTabKey', \"sub_sub_xyz_axis_focus\");\n                    break;\n                case \"velocity\":\n                    // console.log(\"setting velocity\")\n                    this.set('selectedFreqEventSubTabKey', \"sub_velocity_linear_regression\");\n                    this.set('selectedFreqEventSubSubTabKey', \"sub_sub_xyz_axis_focus\");\n                    break;\n                case \"displacement\":\n                    // console.log(\"setting displacement\")\n                    this.set('selectedFreqEventSubTabKey', \"sub_displacement_linear_regression\");\n                    this.set('selectedFreqEventSubSubTabKey', \"sub_sub_xyz_axis_focus\");\n                    break;\n            }\n        },\n        updateSelectedSubTab(newTabId) {\n            // console.log(`updateSelectedSubTab:${newTabId}`)\n\n            this.set('selectedFreqEventSubTabKey', newTabId);\n            let bluvibeV2ModelProfiles = this.get(\"bluvibeV2ModelProfiles\");\n            if(bluvibeV2ModelProfiles.length == 1){\n                switch(newTabId){\n                    case \"sub_acceleration_fft\":\n                    case \"sub_velocity_fft\":\n                    case \"sub_displacement_fft\":\n                        this.set('selectedFreqEventSubSubTabKey', \"sub_sub_x_axis_focus\");\n                        break;\n                    case \"sub_acceleration_linear_regression\":\n                    case \"sub_velocity_linear_regression\":\n                    case \"sub_displacement_linear_regression\":\n                        this.set('selectedFreqEventSubSubTabKey', \"sub_sub_xyz_axis_focus\");\n                        break;\n                }\n            }\n        },\n        updateSelectedSubSubTab(newTabId) {\n            // console.log(`updateSelectedSubSubTab:${newTabId}`);\n            this.set('selectedFreqEventSubSubTabKey', newTabId);\n\n            this.set('showLoading', true);\n            next(this, function () {\n                this.set('showLoading', false); // triggers observer again\n            });\n        }\n    }\n});\n","import { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport gateway from '../models/gateway';\n\nexport default Component.extend({\n    session: service(),\n    isRowDeleteConfirmationDialog: {},\n    rdcd: {},\n    store: service(),\n    childDict: {},\n    isLoading: true,\n    _loadId: 0,\n    init() {\n        this._super(...arguments);\n        this.loadChildren();\n    },\n\n    loadChildren() {\n        let gateway = this.get('gateway');\n        let gatewayId = gateway.get('id');\n        let loadId = ++this._loadId;\n        this.set('isLoading', true);\n\n        // Single request: fetch parent gateway which includes children-details attribute\n        this.store.findRecord('gateway', gatewayId, { reload: true }).then((gw) => {\n            if (this.isDestroying || this.isDestroyed || loadId !== this._loadId) return;\n            let childrenDetails = gw.get('childrenDetails') || [];\n            this.set(`childDict.${gatewayId}`, childrenDetails);\n            this.set('isLoading', false);\n        }).catch((error) => {\n            if (this.isDestroying || this.isDestroyed || loadId !== this._loadId) return;\n            console.error(\"Error fetching children: \", error);\n            this.set('isLoading', false);\n        });\n    },\n\n    inspectGateway () {\n        // console.log(\"Children:\");\n        let gw = this.get('gateway');\n        // let gwc = gw.get('children');\n        let gwc = gw.get('children');\n        // console.log(\"Children:\", gwc.toArray());\n\n        gwc.toArray();\n        return true;        \n    },\n\n    setRDCD(value) {\n        let rdcd = this.get('isRowDeleteConfirmationDialog');\n        rdcd[value[0]] = value[1];\n        this.set('isRowDeleteConfirmationDialog', rdcd);\n        this.notifyPropertyChange('isRowDeleteConfirmationDialog');\n    },\n         \n    actions: {\n        toggleRowDeleteConfirmationDialog(id){\n            //console.log(id);\n            let curVal = this.get('isRowDeleteConfirmationDialog')[id] ? false : true;\n            set(this.get('isRowDeleteConfirmationDialog'), id, curVal); //update isVisibleRowDetails variable for each single row\n        },\n        remove(model, object){\n            let _this = this;\n            let _store = this.get('store');\n\n            let errBox = document.getElementById(\"gatewayChildListError\");\n\n            errBox.hidd = true;\n\n            //object.get('isDeleted');\n            object.save().then(function(){\n                // deal with records that just were created\n                // relates to the way I add new records to model https://github.com/emberjs/data/issues/3313\n                //model.removeObject(object);\n                object.deleteRecord();\n\n                object.save().then(function(){\n                    object.unloadRecord();\n                }).catch(function(reason){\n                    let status = reason.errors[0].status;\n\n                    if (status == 403) {\n                        errBox.hidden = false;\n                    };\n                });\n\n            }).catch(function(reason){\n\n                let status = reason.errors[0].status;\n\n                if (status == 403) {\n                    errBox.hidden = false;\n                };\n            });\n        },\n    }\n\n})\n","import { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n// import isRowExpandable from './helpers/is-row-expandable';\n\nimport gateway from '../models/gateway';\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    session: service(),\n    expandedRowsArray: [],\n    isRowDeleteConfirmationDialog: {},\n    isRowExpanded: {},    \n    \n    licenceIsValid: computed('',function() {\n        let valid = false;\n        try {\n            valid = this.session.data.authenticated.isValid;\n        } catch {}\n        return valid;\n    }),\n    // isRowExpandable: computed('gateway', function() {\n    //     let model = gateway;\n    //     let isRowExpandable = false;\n    //     if (model.length > 0) {\n    //         isRowExpandable = true;\n    //     }\n    //     return isRowExpandable;\n    // }),\n    expandedRows(index) {\n        // console.log(\"expandedRows:::: \" + this.expandedRowsArray[index]);\n        return this.expandedRowsArray[index];\n    },\n    gatewayChildren: computed('gateway', function() {\n        // Logic to retrieve the children of tableRow\n        // Return an array of child gateways\n        let gateway = this.get('gateway');\n        \n        // console.log(\"tableRow:::: \" + gateway);\n        return gateway.children;\n    }),\n    get_id(gateway) {\n        // console.log(\"get_id:::: \" + gateway.id);\n        return gateway.id;\n    },\n    actions: {\n        toggleExpansion(index) {\n            // console.log(\"INDEX:::: \" + index);\n            if (this.expandedRowsArray[index] != null) {\n                this.expandedRowsArray[index] = !this.expandedRowsArray[index];\n                // console.log(\"In Array:::: \" + JSON.stringify(this.expandedRowsArray));\n            } else {\n              this.expandedRowsArray[index] = false;\n            // console.log(\"Adding INDEX:::: \" + index);\n            }\n            // console.log(this.expandedRowsArray);\n        },\n        createGateway: function() {\n            //console.log(\"create\");\n            this.get('router').transitionTo('create-gateway');\n        },\n        toggleRowDeleteConfirmationDialog(id){\n            //console.log(id);\n            let curVal = this.get('isRowDeleteConfirmationDialog')[id] ? false : true;\n            set(this.get('isRowDeleteConfirmationDialog'), id, curVal); //update isVisibleRowDetails variable for each single row\n        },\n        toggleExpandedRow(id){\n            let isCurrentlyExpanded = this.get('isRowExpanded')[id];\n            for(let row in this.get(\"isRowExpanded\")){\n                set(this.get('isRowExpanded'), row, false);\n            }\n            if (!isCurrentlyExpanded) {\n                set(this.get('isRowExpanded'), id, true);\n            }\n        },\n        remove(model, object){\n            //console.log(\"remove\");\n            if(object.get('hasChildren')){\n                object.active = false;\n                object.save().then(function(){\n                    // object.unloadRecord();\n                    this.sendAction('refreshRoute');\n                }).catch(function(reason){\n                    console.log(\"Exception from remove:::: reason:: \" + reason);\n                });\n                // console.log(\"after remove\");\n                this.sendAction('refreshRoute');\n                \n                // await this.removeGatewayWithNodes(model, object);\n            } else {\n                this.removeGatewayWithoutNodes(model, object);\n            }\n        },\n        \n    },\n    removeGatewayWithoutNodes(model, object){\n        // let _store = this.get('store');\n        let errBox = document.getElementById(\"gatewayListError\");\n        errBox.hidd = true;\n        //object.get('isDeleted');\n        object.save().then(function(){\n            // deal with records that just were created\n            // relates to the way I add new records to model https://github.com/emberjs/data/issues/3313\n            //model.removeObject(object);\n            object.deleteRecord();\n\n            object.save().then(function(){\n                object.unloadRecord();\n            }).catch(function(reason){\n                let status = reason.errors[0].status;\n\n                if (status == 403) {\n                    errBox.hidden = false;\n                };\n            });\n\n        }).catch(function(reason){\n            console.log(\"Exception from removeGatewayWithoutNodes:::: reason:: \" + reason);\n        });\n    },\n    async removeGatewayWithNodes(model, object){\n        let _this = this;\n        let _store = this.get('store');\n        let errBox = document.getElementById(\"gatewayListError\");\n        let badCodes = ['null', 'undefined', ''];\n        // Find or create Orphaned Nodes gateway\n        let gatewayType = object.get('gatewayType');\n        let orphanGateway= null;\n\n        errBox.hidden = true;\n        \n        orphanGateway = await _store.findRecord('Gateway',\"0000GW00\").then(function(gateway){\n            return gateway;\n        }).catch(function(reason){\n            // console.log(\"Exception from removeGatewayWithNodes:::: reason:: \" + reason);\n            // console.log(\"Creating orphanGateway:::: \");\n\n            orphanGateway = _store.createRecord('gateway', {\n                id: '0000GW00',\n                name: 'Orphaned Nodes',\n                gatewayType: gatewayType,\n                active: true\n                // set other properties as needed\n            });\n            orphanGateway.save().then(function(gateway){\n                return gateway;\n            }).catch(function(reason){\n                console.log(\"Exception from removeGatewayWithNodes:::: reason:: \" + reason);\n            }); \n            // return something to avoid error\n            return null;        \n        });\n\n        if( !badCodes.includes(orphanGateway) ) {\n            if( badCodes.includes(gatewayType) ) {                    \n                    return null\n            } else {\n                // console.log(\"Running saveNodes:::: \");\n                await this.saveNodes(orphanGateway, object);\n            }\n        } else {\n            console.log(\"Exception from removeGatewayWithNodes:::: reason:: \" + reason);\n            return null;\n        }\n        \n    },\n    \n    \n    async saveNodes(orphanGateway, object) {\n        try {\n            // Reassign children of the deleting gateway to Orphaned Nodes gateway\n            let nodes = object.get('children');\n    \n            // console.log(\"saveNodes:::: before\");\n            // Save all the nodes\n            await Promise.all(nodes.map(node => {\n                node.set('parentGateway', orphanGateway);\n                node.save().then(function(node){\n                    // console.log(\"saveNodes:::: node:: \" + node);\n                }).catch(function(reason){\n                    console.log(\"Exception from saveNodes:::: reason:: \" + reason);\n                })\n            }));\n            // console.log(\"saveNodes:::: after\");\n            // Delete the gateway after all nodes have been saved\n            await this.deleteGateway(object);\n    \n            // console.log(\"deleteGateway:::: \");\n            this.refresh();\n        } catch (reason) {\n            console.log(\"Exception from saveNodes:::: reason:: \", reason);\n        }\n    },\n    deleteGateway(object){\n\n        // Proceed with deletion\n        object.deleteRecord().then(function(){\n            object.save().then(function(){\n                object.unloadRecord();\n            }).catch(function(reason){\n                console.log(\"Exception from deleteGateway:::: reason:: \" + reason);\n            });\n        }).catch(function(reason){\n            console.log(\"Exception from deleteGateway:::: reason:: \" + reason);\n        });   \n    },\n\n})\n","import { action } from '@ember/object';\nimport Component from '@ember/component';\n\nexport default class GatewaySelectorComponent extends Component {\n  @action\n  selectGateway(gateway) {\n    const concatenatedValue = `${gateway.PhoneNumber}@${gateway.Carrier}`;\n    this.args.onSelect(concatenatedValue);\n  }\n}\n","export { default } from 'ember-leaflet/components/geojson-layer';\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\nimport { getApiBaseUrl } from '../utils/api-config';\n\n// Mime-friendly accept lists for the two upload sections.\nconst FILE_ACCEPT  = '.txt,.doc,.docx,.csv,.dlog,text/plain,text/csv,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document';\nconst PHOTO_ACCEPT = 'image/*';\n\nexport default Component.extend({\n    session: service(),\n\n    // Form state — bound to inputs via {action ...} handlers, not getElementById.\n    subject:     '',\n    firstName:   '',\n    lastName:    '',\n    company:     '',\n    phone:       '',\n    email:       '',\n    bodyText:    '',\n    files:       null,   // Array<File>\n    photos:      null,   // Array<File>\n\n    // Submit lifecycle\n    isSubmitting:   false,\n    errorMessage:   null,\n    successMessage: null,\n\n    fileAccept:  FILE_ACCEPT,\n    photoAccept: PHOTO_ACCEPT,\n\n    init(){\n        this._super(...arguments);\n        this.set('files',  []);\n        this.set('photos', []);\n    },\n\n    // FE-derived metadata BE will include in the email envelope.\n    pageUrl: computed(function(){\n        return (typeof window !== 'undefined') ? window.location.href : '';\n    }),\n    hostname: computed(function(){\n        return (typeof window !== 'undefined') ? window.location.hostname : '';\n    }),\n    // Subdomain X parsed from \"X.yieldpoint.com\". Falls back to the full hostname\n    // for non-prod hosts like localhost so the BE email subject is still meaningful.\n    subdomain: computed('hostname', function(){\n        const host = this.get('hostname') || '';\n        const m = host.match(/^([^.]+)\\.yieldpoint\\.com$/i);\n        return m ? m[1] : host;\n    }),\n\n    canSubmit: computed('subject', 'firstName', 'lastName', 'company', 'bodyText', 'phone', 'email', 'isSubmitting', function(){\n        if(this.get('isSubmitting')) return false;\n        const hasSubject   = !!String(this.get('subject')   || '').trim();\n        const hasFirstName = !!String(this.get('firstName') || '').trim();\n        const hasLastName  = !!String(this.get('lastName')  || '').trim();\n        const hasCompany   = !!String(this.get('company')   || '').trim();\n        const hasBody      = !!String(this.get('bodyText')  || '').trim();\n        const hasContact   = !!String(this.get('phone')     || '').trim() || !!String(this.get('email') || '').trim();\n        return hasSubject && hasFirstName && hasLastName && hasCompany && hasBody && hasContact;\n    }),\n\n    // Inverse of canSubmit. Used by the template — Emblem chokes on `(not this.canSubmit)`\n    // helper subexpressions in attribute position, so we expose the negation as a plain property.\n    cannotSubmit: computed('canSubmit', function(){\n        return !this.get('canSubmit');\n    }),\n\n    // Single label for the submit button. Same reason — Emblem if/else nested inside a\n    // `<button>` block confuses the parser; a single computed string is robust.\n    submitButtonLabel: computed('isSubmitting', function(){\n        return this.get('isSubmitting') ? 'Sending...' : 'Submit Issue Report';\n    }),\n\n    actions: {\n        subjectChanged(e)   { this.set('subject',   e.target.value); },\n        firstNameChanged(e) { this.set('firstName', e.target.value); },\n        lastNameChanged(e)  { this.set('lastName',  e.target.value); },\n        companyChanged(e)   { this.set('company',   e.target.value); },\n        phoneChanged(e)     { this.set('phone',     e.target.value); },\n        emailChanged(e)     { this.set('email',     e.target.value); },\n        bodyChanged(e)      { this.set('bodyText',  e.target.value); },\n\n        filesPicked(e){\n            const picked = Array.from(e.target.files || []);\n            this.set('files', [...this.get('files'), ...picked]);\n            e.target.value = '';   // allow re-picking the same file\n        },\n        removeFile(idx){\n            const next = this.get('files').slice();\n            next.splice(idx, 1);\n            this.set('files', next);\n        },\n        photosPicked(e){\n            const picked = Array.from(e.target.files || []);\n            this.set('photos', [...this.get('photos'), ...picked]);\n            e.target.value = '';\n        },\n        removePhoto(idx){\n            const next = this.get('photos').slice();\n            next.splice(idx, 1);\n            this.set('photos', next);\n        },\n\n        async submit(){\n            if(!this.get('canSubmit')) return;\n            this.setProperties({ isSubmitting: true, errorMessage: null, successMessage: null });\n\n            try{\n                const fd = new FormData();\n                fd.append('subject',    this.get('subject'));\n                fd.append('first_name', this.get('firstName'));\n                fd.append('last_name',  this.get('lastName'));\n                fd.append('company',    this.get('company'));\n                fd.append('phone',      this.get('phone') || '');\n                fd.append('email',      this.get('email') || '');\n                fd.append('body',       this.get('bodyText'));\n                fd.append('url',        this.get('pageUrl'));\n                fd.append('hostname',   this.get('hostname'));\n                fd.append('subdomain',  this.get('subdomain'));\n                this.get('files').forEach((f, i)  => fd.append(`file_${i}`,  f, f.name));\n                this.get('photos').forEach((f, i) => fd.append(`photo_${i}`, f, f.name));\n\n                const url = `${getApiBaseUrl()}/api/support/issue-report/`;\n                const res = await fetch(url, {\n                    method: 'POST',\n                    headers: { Authorization: 'Bearer ' + localStorage.token },\n                    body: fd,\n                });\n\n                if(res.ok){\n                    this.setProperties({\n                        successMessage: 'Your issue report has been submitted successfully. Please give 2-3 business days for response. Thank you for your patience.',\n                        subject: '', firstName: '', lastName: '', company: '', phone: '', email: '', bodyText: '',\n                        files: [], photos: [],\n                    });\n                } else {\n                    let detail = '';\n                    try { const j = await res.json(); detail = j && j.error ? `: ${j.error}` : ''; } catch(_){}\n                    this.set('errorMessage', `Failed to send (HTTP ${res.status})${detail}. Please try again, or email customersupport.yp@epiroc.com directly.`);\n                }\n            } catch(err){\n                console.error('Issue report submit failed:', err);\n                this.set('errorMessage', 'Network error sending issue report. Please try again, or email customersupport.yp@epiroc.com directly.');\n            } finally {\n                this.set('isSubmitting', false);\n            }\n        },\n\n        dismissMessage(){\n            this.set('errorMessage', null);\n            this.set('successMessage', null);\n        },\n    },\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nexport default Component.extend({\n    store: service(),\n    _spatialChart: null,\n\n    // anchor distances from instrument anchors, trimmed for strain-values\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        const firstObject = this.get('fullRangeChartData').get('firstObject');\n        if (!firstObject) { return []; }\n        const dataValuesCount = firstObject.get ? (firstObject.get('values')?.length ?? 0) : (firstObject.values?.length ?? 0);\n        const anchors = this.get('instrument').get('anchors');\n        let anchorDistances = (anchors.content ?? anchors).map(anchor => anchor.get('distance'));\n\n        const modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && modelName === 'strain-values') {\n            anchorDistances.splice(0, 1);\n        }\n        return anchorDistances;\n    }),\n\n    // midpoints between anchor distances for strain-values\n    anchorMidDistances: computed('anchorDistances', function() {\n        const anchorDistances = [...this.get('anchorDistances')];\n        const midDistances = [];\n        anchorDistances.unshift(0);\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            midDistances.push(+((anchorDistances[i] + anchorDistances[i + 1]) / 2).toFixed(2));\n        }\n        return midDistances;\n    }),\n\n    // x-axis depth values for the spatial chart\n    spatialXValues: computed('anchorDistances', 'anchorMidDistances', 'chartDataModelName', function() {\n        const modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            return this.get('anchorMidDistances');\n        }\n        return this.get('anchorDistances');\n    }),\n\n    // spatial lines: one line per timestamp reading (X = depth, Y = displacement)\n    spatialChartLinesData: computed('fullRangeChartData', 'spatialXValues', 'chartDataModelName', function() {\n        const fullRangeChartData = this.get('fullRangeChartData');\n        const xValues = this.get('spatialXValues');\n        const modelName = this.get('chartDataModelName');\n\n        return fullRangeChartData.map((item) => {\n            let values = item.get('values') || [];\n            // strain-values: prepend duplicate of first value (matching NVD3 behavior)\n            if (modelName === 'strain-values') {\n                values = [values[0], ...values];\n            }\n            return {\n                key: moment(item.get('id')).format('DD MMM YYYY HH:mm'),\n                timestamp: item.get('id'),\n                values: values.map((v, idx) => ({\n                    x: xValues[idx] !== undefined ? xValues[idx] : null,\n                    y: v !== undefined ? v : null\n                })).filter(pt => pt.x !== null)\n            };\n        });\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        const chartDataModelName = this.get('chartDataModelName');\n        const chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes')\n        }));\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        const title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName');\n                units = \"kN\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n\n        const spatialLinesData = this.get('spatialChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildSpatialChart(spatialLinesData, yAxisTitle);\n        });\n    },\n\n    _buildSpatialChart(linesData, yAxisTitle) {\n        const canvas = this.element.querySelector('canvas.chartjs-spatial');\n        if (!canvas) return;\n\n        const infoPanel = this.element.querySelector('.spatial-info-panel');\n\n        let instrumentLength = 0;\n        try {\n            instrumentLength = this.instrument.get('instrumentLength') || 0;\n        } catch (e) { /* ignore */ }\n\n        const anchorXValues = this.get('spatialXValues');\n\n        // Line datasets: one per timestamp reading, NOT in legend\n        // Color gradient: oldest readings are cool/light, newest are warm/dark\n        const lineCount = linesData.length;\n        const getLineColor = (i, total) => {\n            if (total <= 1) return 'rgba(90, 90, 90, 0.7)';\n            const t = i / (total - 1);\n            const r = Math.round(160 - t * 120);\n            const g = Math.round(175 - t * 135);\n            const b = Math.round(210 - t * 130);\n            return `rgba(${r}, ${g}, ${b}, ${0.25 + t * 0.65})`;\n        };\n        const lineDatasets = linesData.map((line, i) => ({\n            label: line.key,\n            data: line.values,\n            borderColor: getLineColor(i, lineCount),\n            backgroundColor: 'transparent',\n            borderWidth: 0.5 + (i / Math.max(lineCount - 1, 1)) * 0.8, // 0.5px → 1.3px\n            pointRadius: 0,\n            pointHoverRadius: 6,\n            tension: 0,\n            parsing: false,\n            _isLine: true\n        }));\n\n        // Anchor reference datasets: hidden from the chart (drawn by plugin instead)\n        // but still needed for legend generation\n        const anchorDatasets = anchorXValues.map((dist, i) => ({\n            label: String(dist),\n            data: [],\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            borderWidth: 0,\n            pointRadius: 0,\n            showLine: false,\n            _isRef: true\n        }));\n\n        const datasets = [...lineDatasets, ...anchorDatasets];\n\n        // \"No data\" overlay plugin\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds._isRef) return;\n                    if (!ds.hidden) ds.data.forEach(pt => { if (pt && pt.y != null) hasData = true; });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data available', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        // Plugin: draw anchor reference dots pinned to the bottom of the chart area\n        const anchorDotsPlugin = {\n            id: 'anchorDots',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                const yArea = chart.chartArea.bottom;\n                const ctx = chart.ctx;\n\n                anchorXValues.forEach((dist, i) => {\n                    const px = xScale.getPixelForValue(dist);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.arc(px, yArea, 6, 0, 2 * Math.PI);\n                    ctx.fillStyle = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                    ctx.fill();\n                    ctx.restore();\n                });\n            }\n        };\n\n        // Crosshair plugin — vertical dashed line following cursor\n        let crosshairX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                if (crosshairX === null) return;\n                const { ctx, chartArea: { top, bottom } } = chart;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        // External tooltip handler: writes to the fixed info panel below the chart\n        const externalTooltipHandler = (context) => {\n            if (!infoPanel) return;\n            const { tooltip } = context;\n\n            // When tooltip hides (mouse left chart), keep last values visible so user can scroll\n            if (tooltip.opacity === 0) {\n                return;\n            }\n\n            // Filter to line datasets only\n            const lineItems = (tooltip.dataPoints || []).filter(pt => pt.dataset._isLine);\n            if (!lineItems.length) {\n                infoPanel.innerHTML = '';\n                return;\n            }\n\n            const depth = lineItems[0].parsed.x;\n            let html = `<strong>Depth: ${depth != null ? depth.toLocaleString() : '—'} mm</strong> &nbsp; `;\n\n            // Build compact inline items with colored dots\n            html += lineItems.map(pt => {\n                const color = pt.dataset.borderColor;\n                const val = pt.parsed.y;\n                const label = pt.dataset.label;\n                return `<span style=\"display:inline-block;margin:0 6px;\">` +\n                       `<span style=\"display:inline-block;width:8px;height:8px;border-radius:50%;background:${color};margin-right:3px;vertical-align:middle;\"></span>` +\n                       `<span style=\"color:${color};font-size:12px;\">${label}: ${val != null ? val.toFixed(2) : '—'}</span>` +\n                       `</span>`;\n            }).join('');\n\n            infoPanel.innerHTML = html;\n        };\n\n        const spatialChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                parsing: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'nearest', intersect: false },\n                onHover(e) {\n                    if (e.x != null) {\n                        crosshairX = e.x;\n                    }\n                },\n                scales: {\n                    x: {\n                        type: 'linear',\n                        min: 0,\n                        max: instrumentLength > 0 ? instrumentLength : undefined,\n                        title: {\n                            display: true,\n                            text: 'Depth (mm)',\n                            font: { size: 12 }\n                        },\n                        afterBuildTicks(axis) {\n                            // Show ticks at anchor positions that are in visible range\n                            const visibleAnchors = anchorXValues\n                                .filter(v => v >= axis.min && v <= axis.max)\n                                .map(v => ({ value: v }));\n                            if (visibleAnchors.length > 0) {\n                                axis.ticks = visibleAnchors;\n                            }\n                            // else: let ChartJS auto-generate ticks when zoomed between anchors\n                        },\n                        ticks: {\n                            callback(val) { return val.toLocaleString(); }\n                        }\n                    },\n                    y: {\n                        title: {\n                            display: true,\n                            text: yAxisTitle,\n                            font: { size: 12 }\n                        },\n                        ticks: {\n                            callback(val) { return val.toFixed ? val.toFixed(2) : val; }\n                        }\n                    }\n                },\n                plugins: {\n                    legend: {\n                        display: true,\n                        position: 'top',\n                        align: 'end',\n                        labels: {\n                            generateLabels(chart) {\n                                return chart.data.datasets\n                                    .map((dataset, i) => ({ dataset, i }))\n                                    .filter(({ dataset }) => dataset._isRef)\n                                    .map(({ dataset, i }) => ({\n                                        text: dataset.label,\n                                        fillStyle: dataset.backgroundColor,\n                                        strokeStyle: dataset.borderColor,\n                                        lineWidth: 0,\n                                        pointStyle: 'circle',\n                                        hidden: false,\n                                        datasetIndex: i\n                                    }));\n                            }\n                        },\n                        onClick() { /* no-op */ }\n                    },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        mode: 'index',\n                        intersect: false,\n                        filter(item) {\n                            return item.dataset._isLine === true;\n                        }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, anchorDotsPlugin, crosshairPlugin]\n        });\n\n        // --- Scroll-to-zoom (both axes) ---\n        const origXMin = spatialChart.options.scales.x.min;\n        const origXMax = spatialChart.options.scales.x.max;\n        canvas.addEventListener('wheel', e => {\n            e.preventDefault();\n            const rect = canvas.getBoundingClientRect();\n            const xScale = spatialChart.scales['x'];\n            const yScale = spatialChart.scales['y'];\n            const factor = e.deltaY < 0 ? 1.15 : 0.87;\n            const cursorX = xScale.getValueForPixel(e.clientX - rect.left);\n            const cursorY = yScale.getValueForPixel(e.clientY - rect.top);\n            spatialChart.options.scales.x.min = cursorX - (cursorX - xScale.min) * factor;\n            spatialChart.options.scales.x.max = cursorX + (xScale.max - cursorX) * factor;\n            spatialChart.options.scales.y.min = cursorY - (cursorY - yScale.min) * factor;\n            spatialChart.options.scales.y.max = cursorY + (yScale.max - cursorY) * factor;\n            spatialChart.update('none');\n        }, { passive: false });\n\n        // --- Drag-to-pan (both axes) ---\n        let panStartX = null, panStartY = null;\n        let panXMin = null, panXMax = null, panYMin = null, panYMax = null;\n        canvas.addEventListener('mousedown', e => {\n            panStartX = e.clientX; panStartY = e.clientY;\n            panXMin = spatialChart.scales['x'].min; panXMax = spatialChart.scales['x'].max;\n            panYMin = spatialChart.scales['y'].min; panYMax = spatialChart.scales['y'].max;\n            canvas.style.cursor = 'grabbing';\n        });\n        canvas.addEventListener('mousemove', e => {\n            const rect = canvas.getBoundingClientRect();\n            const px = e.clientX - rect.left;\n            const { left, right } = spatialChart.chartArea;\n            crosshairX = (px >= left && px <= right) ? px : null;\n            if (panStartX !== null) {\n                const xPxRange = spatialChart.chartArea.right - spatialChart.chartArea.left;\n                const yPxRange = spatialChart.chartArea.bottom - spatialChart.chartArea.top;\n                spatialChart.options.scales.x.min = panXMin - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.x.max = panXMax - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.y.min = panYMin + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n                spatialChart.options.scales.y.max = panYMax + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('mouseleave', () => {\n            crosshairX = null;\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('dblclick', () => {\n            spatialChart.options.scales.x.min = origXMin;\n            spatialChart.options.scales.x.max = origXMax;\n            spatialChart.options.scales.y.min = undefined;\n            spatialChart.options.scales.y.max = undefined;\n            spatialChart.update('none');\n        });\n        const onPanEnd = () => {\n            panStartX = panStartY = panXMin = panXMax = panYMin = panYMax = null;\n            canvas.style.cursor = 'default';\n        };\n        canvas.addEventListener('mouseup', onPanEnd);\n        document.addEventListener('mouseup', onPanEnd);\n\n        this.set('_spatialChart', spatialChart);\n    },\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const spatialChart = this.get('_spatialChart');\n        if (spatialChart) { spatialChart.destroy(); }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\n// Chart line colors — sourced from color-palette\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,    // #0077b6\n    colorPalette.orange2,   // #FF7444\n    colorPalette.green3,    // #2a9d8f\n    colorPalette.red1,      // #D25353\n    colorPalette.purple7,   // #8b5cf6\n    colorPalette.beige22,   // #b08968\n    colorPalette.pink6,     // #ec4899\n    colorPalette.gray5,     // #6b7280\n    colorPalette.teal6,     // #10b981\n    colorPalette.cyan4,     // #06b6d4\n];\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        if (instType === 'Tilt') {\n            return ['X', 'Y', 'Z'];\n        } else if (instType === 'Wire') {\n            let anchors = [];\n            let numPorts = this.instrument.get('portsNum');\n            for (let ctr = 0; ctr < numPorts; ctr++) {\n                anchors.push('T' + (ctr + 1));\n                anchors.push(ctr + 1);\n            }\n            return anchors;\n        } else if (instType === 'BluVibe') {\n            return ['Data'];\n        }\n\n        let anchors = this.get('instrument').get('anchors');\n        const arr = anchors.content ?? anchors;\n        let anchorDistances = arr.map(anchor => anchor.get('distance'));\n\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') {\n            var midPoints = [];\n            if (instType === 'dCable') {\n                for (var ctr = 1; ctr < anchorDistances.length; ctr++) {\n                    var mid = (anchorDistances[ctr - 1] + anchorDistances[ctr]) / 2;\n                    midPoints[ctr] = +mid.toFixed(2);\n                }\n                midPoints.splice(0, 1);\n                midPoints[0] = 0;\n                midPoints.push(anchorDistances[anchorDistances.length - 1]);\n            } else if (instType === 'dRebar') {\n                let headExclusion = this.get('instrument').get('headExclusionLength');\n                let leftAnchors = [headExclusion];\n                let rightAnchors = [headExclusion];\n\n                let center = anchorDistances.length - 1;\n                center = Math.ceil(center / 2);\n\n                leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n\n                let midLeft = [];\n                for (var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                    midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                }\n\n                let midRight = [];\n                for (var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                    midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                }\n\n                if (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values') {\n                    if (this.get('instrument').get('stacked')) {\n                        midPoints = midLeft;\n                        if (modelName === 'load-values') {\n                            midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n                        }\n                    } else {\n                        midPoints = midLeft.concat(midRight);\n                        if (modelName === 'bending-strain-values') {\n                            midPoints.shift();\n                            midPoints.pop();\n                        }\n                    }\n                } else {\n                    midPoints = midLeft.concat(midRight);\n                }\n\n                if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                    for (let ctr = 0; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr + 1) + '-' + midPoints[ctr];\n                    }\n                }\n            } else {\n                for (var ctr = 0; ctr < anchorDistances.length - 1; ctr++) {\n                    midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n                }\n            }\n            if (modelName === 'displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        } else if (modelName === 'axial-displacement-values' && this.get('instrument').get('stacked')) {\n            let mid = (anchorDistances.length - 1) / 2;\n            while (anchorDistances.length > (mid + 1)) {\n                anchorDistances.pop();\n            }\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else if (modelName === 'axial-displacement-values' && !this.get('instrument').get('stacked')) {\n            anchorDistances.sort(function(a, b) { return a - b; });\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else {\n            if (instType === 'dRebar') {\n                if (modelName === 'displacement-values') {\n                    var midPoints = [];\n                    let headExclusion = this.get('instrument').get('headExclusionLength');\n                    let leftAnchors = [headExclusion];\n                    let rightAnchors = [headExclusion];\n\n                    let center = anchorDistances.length - 1;\n                    center = Math.ceil(center / 2);\n\n                    leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                    rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                    if (!this.get('instrument').get('stacked')) {\n                        rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n                    }\n\n                    let midLeft = [];\n                    for (var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                        midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                    }\n\n                    let midRight = [];\n                    for (var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                        midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                    }\n\n                    midPoints = midLeft.concat(midRight);\n                    anchorDistances = midPoints;\n                    anchorDistances.unshift(0);\n                }\n                for (let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n                for (let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n            }\n        }\n        return anchorDistances;\n    }),\n\n    // Main chart sourced from zoomChartData to mirror NVD3 (Group By applies to visible chart).\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'anchorDistances', 'chartDataModelName', function() {\n        const anchorDistances = this.get('anchorDistances');\n        const fullRangeChartData = this.get('zoomChartData');\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values';\n\n        const lines = anchorDistances.map((chartLineName, chartLineIndex) => ({\n            key: chartLineName,\n            values: fullRangeChartData.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[chartLineIndex] !== undefined) ? arr[chartLineIndex] : null\n                };\n            })\n        }));\n\n        // Add temperature overlay on y2 (unless viewing temperature data itself)\n        if (modelName !== 'temperature-values') {\n            const zoomTempData = this.get('zoomTempData');\n            if (zoomTempData && zoomTempData.length) {\n                lines.push({\n                    key: 'T (°C)',\n                    yAxis: 'y2',\n                    hidden: false,\n                    values: zoomTempData.map(item => {\n                        const rawValues = item.get('values');\n                        const arr = Array.isArray(rawValues) ? rawValues : [];\n                        return {\n                            x: moment(item.get('id')).valueOf(),\n                            y: arr[0] !== undefined ? arr[0] : null\n                        };\n                    })\n                });\n            }\n        }\n\n        return lines;\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        let title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                units = this.get(\"yAxisUnit\") || getAttr('units');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName') || 'Load';\n                units = 'kN';\n                break;\n            case 'axial_strain':\n                axisName = \"Axial Strain\";\n                units = \"%\";\n                break;\n            case 'bending_strain':\n                axisName = \"Bending Strain\";\n                units = \"%\";\n                break;\n            case 'axial_displacement':\n                axisName = \"Axial Displacement\";\n                break;\n            case 'temperature':\n                axisName = \"Temperature\";\n                units = \"°C\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const fullRangeChartLinesData = this.get('fullRangeChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildMainChart(fullRangeChartLinesData, yAxisTitle);\n            this._buildOverviewChart();\n        });\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        const datasets = anchorDistances.map((chartLineName, i) => ({\n            label: String(chartLineName),\n            data: fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        anchorDistances.forEach((chartLineName, i) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(chartLineName));\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed, get } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\nimport { getAnchorCountFromId } from '../../utils/instrument-id';\n\nfunction resetNewInstrumentObject(_this) {\n    //console.log('reset');\n    _this.set('newInstrumentObject', {});\n    //_this.set('name', null);\n    _this.set('zeroTimestamp', null);\n    _this.set('installDate', null);\n    //_this.set('east', null);\n    //_this.set('north', null);\n    //_this.set('depth', null);\n    //_this.set('azimuth', null);\n    //_this.set('dip', null);\n    //_this.set('instrumentType', 0);\n    //_this.set('headAt', 'HAC');\n    //_this.set('instrumentLength', 0);\n    //_this.set('strokeLength', 0);\n    //_this.set('referenceAnchor', null);\n    //_this.set('headExclusionLength', 0);\n    //_this.set('gaugeLength', 0);\n    //_this.set('bulbed', false);\n    //_this.set('plated', false);\n    //_this.set('stacked', false);\n    //_this.set('active', true);\n}\n\nexport default class CreatePackInstrument extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n    }\n\n    isAuthenticated = true;\n    newInstrumentObject = {};\n    headAt = 'HAC';\n    zeroTimestamp = null;\n    installDate = null;\n    authError = false;\n    project = null;\n    level = null;\n\n    actions= {\n\n        \n        setProject(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n\n\n\n\n        createInstrument(object){\n\n            //console.log(this.get('prevDup'));\n            //console.log((typeof this.get('prevDup') === \"undefined\"));\n\n            let _this = this,\n            store = this.get('store'),\n            newInstrumentObject = this.get('newInstrumentObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newInstrumentObject.id = this.get('id');\n            newInstrumentObject.zeroTimestamp = this.get('zeroTimestamp');\n            newInstrumentObject.installDate = this.get('installDate');\n            //newInstrumentObject.east = this.get('east');\n            //newInstrumentObject.north = this.get('north');\n            //newInstrumentObject.depth = this.get('depth');\n            newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n            newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n            newInstrumentObject.active = true;\n            newInstrumentObject.instrumentStiffness = 0;\n\n\n            if(typeof newInstrumentObject.id === 'undefined' || newInstrumentObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n\n            if (this.get('zeroTimestamp') != null) {\n                newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('installDate') != null) {\n                newInstrumentObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            // console.log(get(this, 'duplicateError'));\n\n            let newInstrument = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    //console.log(this.get('prevDup'));\n                    if(err.message.includes('has already been used')) {\n                        //console.log('duplicate');\n                        this.setError('duplicateError',true);\n                        \n                        error = true;\n                        dup = true;\n                    }\n                    // console.log(err.message);\n                }\n            }\n            \n            this.setError('authError', false);\n\n            if (!error) {\n                \n                    newInstrument.save().then(function(results){\n\n                        if(results.id != null) {\n                            let anchorCount = getAnchorCountFromId(newInstrumentObject.id);\n                            for(var ctr = 0; ctr <= anchorCount; ctr++) {\n                                store.createRecord('anchor', {number: ctr, distance: ctr, instrument: results}).save();\n                            }\n                        }\n                        \n                        if(results.id != null) {\n                            _this.get('submit')(results.id);\n                        } else {\n                            this.setError('isVisibleError',true);\n                            error = true;\n                        }\n                    }).catch(function(reason) {\n                        \n                        _this.setError('isVisibleError',true);\n                        _this.setError('authError',true);\n                    }); \n            } \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let displacementValueObjectValues = _this.get('displacementValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(displacementValueObjectValues).forEach(function(key,index) {\n        displacementValueObjectValues[key] = 0;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n    // newTimestampValue: computed('dateFormat', function() {\n    //     return moment().format(this.get('dateFormat'));\n    // }),\n\n    newDisplacementValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n    displacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    newDisplacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n    \n    actions: {\n        setNewDisplacementValue(key, event) {\n            const vals = this.get('newDisplacementValueObjectValues');\n            vals[key] = event.target.value;\n        },\n        setNewTimestampValue(event) {\n            this.set('newTimestampValue', event.target.value);\n        },\n        setTemperatureValue(event) {\n            this.set('temperatureObjectValue', event.target.value);\n        },\n        saveNew(){\n            let _this = this,\n                store = this.get('store'),\n                newDisplacementValuesObject = this.get('newDisplacementValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                displacementValues = this.get('displacementValues'),\n                temperatureValues = this.get('temperatureValues')\n            ;\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newDisplacementValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newDisplacementValuesObject.values = Object.values(this.get('newDisplacementValueObjectValues'));\n\n            const newDisplacementValues = store.createRecord('displacement-value', newDisplacementValuesObject);\n            // save new displacement-value to DB\n            const savedDisplacementValuesObject = newDisplacementValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if displacement-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //displacementValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n                \n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class EditInstrument extends Component.extend({\n}) {\n    @service router;\n    @service store;\n    //@service session;\n    //@service currentUser;\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    actions = {\n        viewData(id) {\n            this.get('router').transitionTo('raw-data', id);\n            //this.viewData(id);\n        },\n        tGraph(id) {\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values');\n            //this.tGraph(id, 'displacement-values');\n        },\n        sGraph(id) {\n            this.get('router').transitionTo('spatial-graphs.spatial-graph', id, 'displacement-values');\n            //this.sGraph(id, 'displacement-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveInstrument(){\n            const _this = this;\n            // console.log(\"test\");\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/instruments\";    \n                }\n            } else {\n                window.location.href = \"/instruments\";\n            }            \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { copy } from 'ember-copy';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'spatial-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    progressAnimationDuration: 100, //set 50, was 700\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 50, //set 25, was 500\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return this.get('blastEvents').map(function(event) {\n                return {\n                    type: 'Blast',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n            var chartData = { values: item.get(\"values\") };\n\n            var modelName = this.get('chartDataModelName');\n\n            if (modelName === 'strain-values' || modelName === 'load-values') { \n                var plated = this.get('instrument').get('plated');\n                var type = this.get('instrument').get('instrumentType').get('title');\n                //console.log(type);\n                \n                if (type === 'dCable') {\n                    chartData.values.splice(0,1);\n                    chartData.values.unshift(0);\n                    if(plated) {\n                        chartData.values.push(chartData.values[chartData.values.length - 1]);\n                    } else {\n                        chartData.values.push(0);\n                    }\n                } else if (type === 'dExto') {\n                    chartData.values.unshift(chartData.values[0]);\n                }\n            }\n                        \n            return chartData;\n        } catch (error) {\n            return [];\n        }\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n        try {\n            return { values: item.get(\"values\") };            \n        } catch (error) {\n            return [];\n        }\n    }),\n\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n\n/*         if (this.get('instrument').get('instrumentType').get('title') == 'dRebar') {\n            for(let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                anchorDistances[ctr] = (ctr) + '-' + anchorDistances[ctr];\n            }\n\n            for(let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                anchorDistances[ctr] = (ctr) + '-' + anchorDistances[ctr];\n            }\n        }\n */\n        var modelName = this.get('chartDataModelName');\n        //if (this.get('instrument').get('instrumentType').get('title') != 'dRebar') {\n            if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {\n                anchorDistances.splice(0, 1);\n            }\n        //}\n\n        if (modelName === 'axial-displacement-values') {\n            if (this.get('instrument').get('stacked')) {\n                let half_anchors = (anchorDistances.length / 2) + 1;\n                let gauge = this.get('instrument').get('gaugeLength');\n                while (anchorDistances.length > half_anchors) {\n                    anchorDistances.pop();\n                }\n                anchorDistances[0] = anchorDistances[1] - gauge;\n            } else {\n                let last = anchorDistances[anchorDistances.length-1];\n                anchorDistances.sort(function(a,b){return a-b;});\n                let gauge = this.get('instrument').get('gaugeLength');\n                //console.log('gauge: ' + gauge);\n                anchorDistances.forEach(function(item, index) {\n                    anchorDistances[index] = item - gauge;\n                    //console.log(item);\n                });\n                //anchorDistances.push(this.get('instrument').get('instrumentLength') * 1000);\n                anchorDistances.shift();\n                anchorDistances.push(last);\n            }\n        }\n\n\n\n\n        return anchorDistances;\n    }),\n\n    anchorAXDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n\n        let midPoints = [];\n\n        if(this.get('instrument').get('stacked')) {\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            \n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n\n            let midLeft = [];\n            for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n            }\n            midPoints = midLeft;\n        } else { //staggered\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n    \n            midPoints = $.map(anchorDistances.slice(1, center + 1), function(v, i) {\n                return [v, anchorDistances.slice(center + 1)[i]];\n              });\n\n            midPoints.unshift(headExclusion);\n            let mid_temp = [];\n            for(let ctr = 1;ctr < midPoints.length; ctr++) {\n                mid_temp.push((midPoints[ctr - 1] + midPoints[ctr]) / 2);\n            }\n            midPoints = mid_temp;\n\n            if (modelName === 'bending-strain-values') {\n                midPoints.shift();\n                midPoints.pop();\n            }    \n            \n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n        \n        //console.log(midPoints);\n        \n        return midPoints;\n    }),\n\n    anchorBXDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n\n        let midPoints = [];\n\n        if(this.get('instrument').get('stacked')) {\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            \n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n\n            let midLeft = [];\n            for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n            }\n            midPoints = midLeft;\n        } else {\n\n        let center = anchorDistances.length - 1;\n        center = Math.ceil(center / 2);\n\n        midPoints = $.map(anchorDistances.slice(1, center + 1), function(v, i) {\n            return [v, anchorDistances.slice(center + 1)[i]];\n          });\n            midPoints.shift();\n            midPoints.pop();                  \n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n\n        return midPoints;\n    }),\n\n    // calculate mid distances between anchors for strain values\n    anchorMidDistances: computed('anchorDistances', function() {\n        let anchorDistances = copy(this.get('anchorDistances')),\n            dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            midDistances = []\n        ;\n\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n            if (this.get('instrument').get('stacked')) {\n                anchorDistances.shift(0);\n                let finalSize = anchorDistances.length / 2;\n                while (anchorDistances.length > finalSize) {\n                    anchorDistances.pop(finalSize);\n                }\n                anchorDistances.unshift(this.get('instrument').get('headExclusionLength'));\n            } else { //staggered\n\n            }\n        } else { //not rebar\n            anchorDistances.unshift(0);\n        }\n\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            let mid = (anchorDistances[i] + anchorDistances[i + 1]) / 2;\n            midDistances.push( +mid.toFixed(2) );\n        }\n\n        if(type === 'dCable') {\n            midDistances.splice(0,1);\n            //midDistances.unshift(0);\n            midDistances[0] = 0;\n            var len = this.get('instrument').get('length');\n            var length = this.get('instrument').get('instrumentLength');\n\n            var modelName = this.get('chartDataModelName');\n            if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {    \n                if(length !== null && length !== 0) {\n                    midDistances.push(length);\n                } else {\n                    midDistances.push(anchorDistances[anchorDistances.length - 1]);\n                }\n            }\n        }\n        // console.log(\"Anchors: \" + anchorDistances);\n         //console.log(\"Mids: \" + midDistances);\n\n        return midDistances;\n    }),\n\n    anchorColors: d3.scale.category10().range(),\n\n    anchorDistancesChartReferencePoints: computed('chartDataModelName', 'instrument', 'anchorDistances', 'anchorMidDistances', 'anchorAXDistances', 'anchorBXDistances', function() {\n        let anchorDistances = this.get('anchorDistances');\n        var modelName = this.get('chartDataModelName');\n        var anchorMidDistances = this.get('anchorMidDistances');\n\n        //console.log(this.get('instrument').get('instrumentTypeID'));\n\n        if(this.get('instrument').get('instrumentTypeID') === 3) {//rebar \n            if(this.get('instrument').get('stacked')) { //is stacked\n                if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                    anchorDistances = this.get('anchorAXDistances');\n                } else if (modelName === 'bending-strain-values') {\n                    anchorDistances = this.get('anchorBXDistances');\n                }\n            } else { //is NOT stacked\n                if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                    anchorDistances = this.get('anchorAXDistances');\n                } else if (modelName === 'bending-strain-values') {\n                    anchorDistances = this.get('anchorBXDistances');\n                }\n            }\n        }\n\n        if (this.get('instrument').get('instrumentType').get('title') !== 'dRebar') {\n            if(modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                return anchorMidDistances.map(function(anchorDistance){\n                    return {\n                        key: anchorDistance,\n                        type: 'referencePoints',\n                        values: [\n                            anchorDistance\n                        ]\n                    };\n                });\n                    \n            }\n        }\n\n        return anchorDistances.map(function(anchorDistance){\n            return {\n                key: anchorDistance,\n                type: 'referencePoints',\n                values: [\n                    anchorDistance\n                ]\n            };\n        });\n    }),\n\n    inlineHoverValuesSideOffset: computed('chartDataModelName', function() {\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'load-values') {\n            return 28;\n        } else if((modelName === 'axial-strain-values' || modelName === 'bending-strain-values') && this.get('instrument').get('stacked')) {\n            return 28;\n        }\n        return 0;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints'),\n            anchorDistances = this.get('anchorDistances'),\n            anchorAXDistances = this.get('anchorAXDistances'),\n            anchorBXDistances = this.get('anchorBXDistances'),\n            anchorDistancesChartReferencePoints = this.get('anchorDistancesChartReferencePoints'),\n            anchorMidDistances = this.get('anchorMidDistances')\n        ;\n        let zoomChartLinesData = [];\n\n        var modelName = this.get('chartDataModelName');\n\n        \n        if ((modelName === 'strain-values' || modelName === 'load-values') && this.get('instrument').get('instrumentType').get('title') !== 'dRebar') { \n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorMidDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else if (modelName === 'axial-strain-values' || modelName === 'load-values' ) {//&& !this.get('instrument').get('stacked')) {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorAXDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else if (modelName === 'bending-strain-values' ) { //&& !this.get('instrument').get('stacked')) {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorBXDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (anchorDistancesChartReferencePoints) {\n            zoomChartLinesData = zoomChartLinesData.concat(anchorDistancesChartReferencePoints);\n        }\n\n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        var modelName = this.get('chartDataModelName');\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        if(type === 'dCable') {\n            if(modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                //console.log(fullRangeDataPoints);\n                fullRangeDataPoints.forEach(element => element.values[0]=0);\n            }\n        }\n        \n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[chartLineIndex]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n    }),\n\n    numLines: computed('zoomTimePoints', function() {\n        return this.get('zoomTimePoints').length;\n    }),\n\n    lineDrawDelay: computed('numLines', function() {\n        return (13000 / (this.get('numLines') + 1)) ^ (1 / 20);\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            inlineHoverValuesSideOffset = _this.get('inlineHoverValuesSideOffset'),\n            progressAnimationDuration = _this.get('progressAnimationDuration'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n\n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let axisName = '';\n                let units = chartData.get('units');\n                switch(yAxisLegend.get('title')) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    case 'axial_strain':\n                        axisName = \"Axial Strain\";\n                        units = \"%\";\n                        break;\n                    case 'bending_strain':\n                        axisName = \"Bending Strain\";\n                        units = \"%\";\n                        break;\n                    case 'axial_displacement':\n                        axisName = \"Axial Displacement\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n                \n                if(yAxisLegend.get('title')==='load') {\n                    title = axisName + \" (kN)\";\n                } else {\n                    title = axisName + \" (\" + units + \")\";\n                }\n            }\n\n            let zoomChart = nv.models.lineChartProgressAnimationAPI()\n                .margin({top: 55, right: 10, bottom: 85, left: 60})\n                .useInteractiveGuideline(false)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .distXAxisScale(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .showLegend(true)\n                .progressAnimationDuration(progressAnimationDuration)\n                .showXAxis(true)\n                .noData('No usable data')\n                ;\n\n\n            let length = 0;\n            try {\n                length = _this.instrument.get('instrumentLength');\n                let type = _this.instrument.get('instrumentType');\n                if (type === 'dRebar') {\n                    length = length * 1000;\n                }\n                \n            } catch (ex) {\n\n            }\n            \n            if(length !== null && length === 0) {\n                length = 0;\n            }\n\n            zoomChart.forceX([0, length]);\n/*             if (yAxisLegend.get('title') != 'bending_strain' && yAxisLegend.get('title') != 'axial_strain') {\n                \n            }\n */\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .tickFormat(d3.format(\".2f\"))\n                    // .tickFormat(function(d) {\n                    //     let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                    //     return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    // })\n                    ;\n                zoomChart.yAxis\n                    .axisLabel(title)\n                    .tickFormat(d3.format(\".2f\"));\n\n                zoomChart.distXAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .ticks(5)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(45)\n                    .isDistXTooltip(isDistXTooltip)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2);\n\n                //zoomChart.legend.inlineHoverValuesSideOffset(inlineHoverValuesSideOffset);\n\n                zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log('test');\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n\n                    if (!seismicEventsArray.length || !blastEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (!activeTooltipContent) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                return zoomChart;\n            });\n\n            // declare fullRangeChart because later in zoom chart we need axis from fullRangeChart for events axis on zoomChart\n            let fullRangeChart = nv.models.focus(nv.models.line())\n               .margin({top: 10, right: 10, bottom: 30, left: 60})\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .syncBrushing(false)\n                .independentBrushing(true)\n                .showXAxis(true)\n                .showYAxis(false)\n                ;\n\n\n            nv.addGraph(function() {\n\n                fullRangeChart.xAxis\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n                fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n                fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(fullRangeChart.update);\n\n                // set zoom based on query params if set\n                let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n                let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n                if (startTimestamp && endTimestamp) {\n                    fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n                }\n\n                return fullRangeChart;\n            });\n\n        });\n\n    }\n\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n//import JSONAPISerializer from '@ember-data/serializers/json';\n\nexport default Component.extend({\n\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    vibeEventsChartDistXData: computed('vibeEvents', function() {\n        var events = this.get('vibeEvents');\n        //console.log('vibeEvents');\n        //console.log(events);\n        if ( this.get('vibeEvents') ) {\n            return [{\n                key: 'BluVibe',\n                type: 'distX',\n                color: '#80bf5c',\n                values: this.get('vibeEvents').map(function(event) {\n                    return [\n                        moment( event.get('id') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            let data_set = this.get('blastEvents').map(function(event) {\n                //console.log(event.get('timestamp'));\n                return {\n                    type: 'Blast',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n            //console.log(data_set);\n            return data_set;\n        }\n        return false;\n    }),\n\n    // vibeEventsArray: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log(events);\n    //     if ( events ) {\n    //         return events.map(function(event) {\n    //             return {\n    //                 type: 'BluVibe',\n    //                 time: event.get('id'),\n    //                 timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n    //                 ppa: event.get('ppa'),\n    //                 ppv: event.get('ppv'),\n    //                 freq: event.get('frequency')\n    //             };\n    //         }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n    //     }\n    //     return false;\n    // }),\n\n    zoomTempPoints: map('zoomTempData', function(item){\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        return chartData;\n    }),\n\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n\n        //console.log(linesKyes);\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        var modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') { \n            var plated = this.get('instrument').get('plated');\n            \n            if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n                if(plated) {\n                    chartData.values[0] = chartData.values[1];\n                } else {\n                    chartData.values[0] = 0;\n                }\n            } else {\n                //chartData.values.unshift(0);\n            }\n            chartData.values.push(0);\n        }\n        //console.log(chartData);\n        return chartData;\n        } catch(e) { return { values: [] }; }\n    }),\n\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n\n/*     fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        if(instType === 'Tilt') {\n            return ['X','Y','Z'];\n        } else if(instType === 'Wire') {\n            let anchors = [];\n            let numPorts = this.instrument.get('portsNum');\n            let startVal = 0;\n            let maxVal = numPorts;\n/*             if (this.port != '') {\n                //startVal = (1 * this.port) - 1;\n                startVal = (1 * numPorts) - 1;\n                maxVal = startVal + 1;\n            }\n */            for(let ctr = startVal; ctr < maxVal; ctr++) {\n                anchors.push('T' + (ctr + 1));\n                anchors.push(ctr + 1);\n            }\n            return anchors;\n        } else if(instType === 'BluVibe') {\n            return ['Data'];\n        }\n        let chartData = this.get('fullRangeChartData');\n        let dataValuesCount;\n        try {\n            dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n        let anchors = this.get('instrument').get('anchors');\n        \n        const arr = anchors.content ?? anchors;\n        \n        let anchorDistances = arr.map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        //anchorDistances.push('T'); //TODO: add temperature\n\n        //IF chart is Strain-Values chart\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') { \n            var midPoints = [];\n            if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n                //Adjust anchors to mid points between anchors\n                for(var ctr = 1; ctr < anchorDistances.length ; ctr++) {\n                    var mid = (anchorDistances[ctr - 1] + anchorDistances[ctr]) / 2;\n                    midPoints[ctr] = + mid.toFixed(2);\n                }\n\n                //console.log(midPoints);\n\n                //add zero point and end point\n                midPoints.splice(0,1);\n                midPoints[0] = 0;\n                midPoints.push(anchorDistances[anchorDistances.length - 1]);  //TODO: change to length of exto once known\n                //console.log(midPoints);\n            } else if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n                //Adjust anchors to mid points between anchors\n                //console.log(this.get('instrument'));\n                let headExclusion = this.get('instrument').get('headExclusionLength');\n                let leftAnchors = [headExclusion];\n                let rightAnchors = [headExclusion];\n                \n                let center = anchorDistances.length - 1;\n                center = Math.ceil(center / 2);\n\n                leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n\n                let midLeft = [];\n                for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                    midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                }\n\n                let midRight = [];\n                for(var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                    midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                }\n\n                if (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values') {\n                    if(this.get('instrument').get('stacked')) {\n                        midPoints = midLeft;\n                        if (modelName === 'load-values') {\n                            midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n                        }\n                    } else {\n                        midPoints = midLeft.concat(midRight);\n                        /* midPoints = $.map(midPoints.slice(1, center + 1), function(v, i) {\n                            return [v, midPoints.slice(center + 1)[i]];\n                          }); */\n                        if (modelName === 'bending-strain-values') {\n                            midPoints.shift();\n                            midPoints.pop();\n                        }\n\n                    }\n                } else {\n                    midPoints = midLeft.concat(midRight);\n                }\n                if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                    for(let ctr = 0; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n  \n/*                     for(let ctr = 0; ctr < midPoints.length / 2; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n        \n                    for(let ctr = 3; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n */                }\n            } else {\n                for(var ctr = 0; ctr < anchorDistances.length-1; ctr++) {\n                    midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n                }\n            }\n            if(modelName==='displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        } else if (modelName === 'axial-displacement-values' && this.get('instrument').get('stacked')) {\n            let mid = (anchorDistances.length - 1) / 2;\n            while (anchorDistances.length > (mid + 1)) {\n                anchorDistances.pop();\n            }\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else if (modelName === 'axial-displacement-values' && !this.get('instrument').get('stacked')) {\n            anchorDistances.sort(function(a,b){return a-b;});\n\n            //anchorDistances.push(this.get('instrument').get('instrumentLength') * 1000);\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else {\n            if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n                if (modelName === 'displacement-values') { //rebar stretch\n                    var midPoints = [];\n                    let headExclusion = this.get('instrument').get('headExclusionLength');\n                    let leftAnchors = [headExclusion];\n                    let rightAnchors = [headExclusion];\n                    \n                    let center = anchorDistances.length - 1;\n                    center = Math.ceil(center / 2);\n    \n                    leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                    rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n    \n                    if(!this.get('instrument').get('stacked')) {\n                        rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n                    }\n    \n                    let midLeft = [];\n                    for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                        midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                    }\n    \n                    let midRight = [];\n                    for(var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                        midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                    }\n\n                    midPoints = midLeft.concat(midRight);\n                    anchorDistances = midPoints;\n\n                    anchorDistances.unshift(0);\n                }\n                for(let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n    \n                for(let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n            }    \n        }\n        //console.log(anchorDistances);\n        return anchorDistances;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTempPoints = this.get('zoomTempPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n\n        //console.log(blastEventsChartDistXData);\n        //console.log(vibeEventsChartDistXData);\n\n        let anchorDistances = this.get('anchorDistances'),\n            zoomChartLinesData = []\n        ;\n\n        if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n            var mName = _this.get('chartDataModelName');\n            if (mName === 'strain-values' || mName === 'strain-rate-values' || mName === 'load-values') {\n                zoomDataPoints.forEach(element => element.values[0] = 0);\n            }\n        }    \n\n/*         if (this.get('instrument').get('instrumentType').get('title') == 'Tilt') {\n                zoomDataPoints.forEach(element => element.values.shift());\n        }    \n */\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n        //console.log(zoomTempPoints.length);\n\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            if (_this.get('chartDataModelName') !== 'displacement-values' && this.get('instrument').get('instrumentType').get('title') !== 'BluVibe'){\n                while(zoomTempPoints.length > zoomDataPoints.length) {\n                    zoomTempPoints.pop();\n                    zoomTempPoints.shift();\n                }\n            }\n            var temp = {key: 'T',\n                type: 'lines',\n                yAxis: 2,\n                values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null,\n                    ];\n                })\n            };\n            //console.log(temp);\n            zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (vibeEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                    ];\n                })\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    // yAxisLegend: computed('chartDataModelName', function() {\n    //     let chartDataModelName = this.get('chartDataModelName');\n    //     let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n    //     return promise;\n    // }),\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_');\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        return promise; \n    }),\n\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            //vibeEventsArray = this.get('vibeEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        //console.log(vibeEventsArray);\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n                \n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let instType = _this.instrument.get('instrumentType').get('title');\n\n                let axisName = '';\n                let units = chartData.get('units');\n                title = '';\n                if (instType === 'BluVibe') {\n                    title = _this.get('chartDataModelName');\n                } else {\n                    title = yAxisLegend.get('title');\n                }\n                \n                switch(title) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    case 'axial_strain':\n                        axisName = \"Axial Strain\";\n                        units = \"%\";\n                        break;\n                    case 'bending_strain':\n                        axisName = \"Bending Strain\";\n                        units = \"%\";\n                        break;\n                    case 'axial_displacement':\n                        axisName = \"Axial Displacement\";\n                        break;\n                    case 'temperature':\n                        axisName = \"Temperature\";\n                        units = \"°C\";\n                        break;\n                    case 'event-frequency':\n                        axisName = \"Event Frequency\";\n                        break;\n                    case 'event-ppv':\n                        axisName = \"Event PPV\";\n                        break;\n                    case 'event-ppa':\n                        axisName = \"Event PPA\";\n                        break;\n                    case 'cumulative-event-frequency':\n                        axisName = \"Cumulative Frequency\";\n                        break;\n                    case 'cumulative-event-ppv':\n                        axisName = \"Cumulative PPV\";\n                        break;\n                    case 'cumulative-event-ppa':\n                        axisName = \"Cumulative PPA\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                        //console.log(title);\n                }\n\n                /* let chartName = yAxisLegend.get('title').capitalize();\n                let chartNameL = chartName.substr(0, chartName.indexOf('_'));\n                let chartNameR = chartName.substr(chartName.indexOf('_') + 1).capitalize();\n                if(chartNameL !== \"\") {\n                    chartName = chartNameL + \" \" + chartNameR;\n                } */\n\n                if (yAxisLegend) {\n                    let raw = _this.raw;\n                    if(yAxisLegend.get('title')==='load') {\n                        title = axisName + \" (kN)\";\n                    } else if (instType === 'Wire') {\n                        if (raw === true) {\n                            title = \"Frequency (Hz)\";\n                        } else {\n                            title = \"Calculated Values\";\n                        }\n                    } else {\n                        title = axisName  + \" (\" + units + \")\";\n                    }\n                } else {\n                    if (instType === 'BluVibe') {\n                        title = axisName;\n                    } else {\n                        title = axisName  + \" (\" + units + \")\";\n                    }\n                }\n                //title = yAxisLegend.get('unit');\n            }\n\n            function usesPoints(chartName) {\n                //console.log(chartName);\n                switch(chartName) {\n                    case 'event-ppv':\n                    case 'event-ppa':\n                        return true;\n                }\n                return false;\n            }\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(usesPoints(_this.get('chartDataModelName')))\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data')\n            ;\n\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                if (_this.instrument.get('instrumentType').get('title') === 'Tilt') {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".3f\"));\n                    zoomChart.legend.numDecimals(3);\n                } else {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                }\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n\n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(vibeEventsArray);\n                    //console.log(distXMouseMove);\n/* \n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    } */\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length){// || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            //activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) { _this.setData(zoomChartLinesData); }\n                if (_this.setChart) { _this.setChart(zoomChart); }\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n\n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    isModalOpen: false,\n    modalMode: 'add', // 'add' | 'edit'\n    modalEditingRowId: null,\n\n    anchorLabels: computed('instrument', function(){\n        const anchors = this.get('instrument') ? this.get('instrument').get('anchors') : null;\n        const arr = (anchors && (anchors.content ?? anchors)) || [];\n        let validCounter = 0;\n        return arr.map((anchor, idx) => {\n            const distance = anchor.get ? anchor.get('distance') : (anchor && anchor.distance);\n            const isUnset = (distance == null || distance === '');\n            if(isUnset){\n                return { index: idx, tableLabel: '', modalLabel: 'Anchor N/A', isUnset: true };\n            }\n            validCounter += 1;\n            return { index: idx, tableLabel: String(distance), modalLabel: `Anchor ${validCounter}`, isUnset: false };\n        });\n    }),\n\n    columnSpecs: computed('anchorLabels', function(){\n        const anchors = this.get('anchorLabels') || [];\n        const out = anchors.map((a) => ({\n            key: `anchor_${a.index}`,\n            label: a.modalLabel,\n            tableLabel: a.tableLabel,\n            valuesIndex: a.index,\n        }));\n        // hid's legacy table header used \"Temp.\" (short) but the modal label keeps \"Temperature\".\n        out.push({ key: '__temp__', label: 'Temperature', tableLabel: 'Temp.', isTemp: true });\n        return out;\n    }),\n\n    tableRows: computed('displacementData.[]', 'temperatureData.[]', 'columnSpecs', 'globalDatetimeFormat.value', function(){\n        const dispData = this.get('displacementData') || [];\n        const tempData = this.get('temperatureData') || [];\n        const specs = this.get('columnSpecs') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n\n        const tempById = {};\n        tempData.forEach(r => { tempById[r.id] = r; });\n\n        return dispData.map((dispRow) => {\n            const id = dispRow.id;\n            const dispValues = (dispRow.values || dispRow.get?.('values') || []);\n            const tempRow = tempById[id];\n            const tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n\n            const cells = specs.map((spec) => {\n                let value = '';\n                if(spec.isTemp){\n                    value = tempValues[0];\n                }else{\n                    value = dispValues[spec.valuesIndex];\n                }\n                return { key: spec.key, label: spec.label, value: value == null ? '' : value };\n            });\n            const formattedDate = moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt);\n            return { id, date: id, formattedDate, cells };\n        });\n    }),\n\n    modalFields: computed('columnSpecs', 'modalMode', 'modalEditingRowId', 'tableRows.[]', function(){\n        const specs = this.get('columnSpecs') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingRowId');\n\n        let existingRow = null;\n        if(mode === 'edit' && editingId){\n            existingRow = (this.get('tableRows') || []).find(r => r.id === editingId);\n        }\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && existingRow\n                ? moment(existingRow.date, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm')\n                : moment().format('YYYY-MM-DDTHH:mm'),\n        };\n\n        const cellByKey = {};\n        if(existingRow){\n            existingRow.cells.forEach(c => { cellByKey[c.key] = c.value; });\n        }\n\n        const channelFields = specs.map((spec) => ({\n            key: spec.key,\n            label: spec.label,\n            type: 'text',\n            value: cellByKey[spec.key] != null ? cellByKey[spec.key] : '',\n        }));\n\n        return [dateField, ...channelFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function(){\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingRowId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingRowId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const instrumentId = this.get('instrument.id');\n            const dispData = this.get('displacementData');\n            const tempData = this.get('temperatureData');\n            const dispRow = dispData ? dispData.find(r => r.id === rowId) : null;\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            const promises = [];\n            if(dispRow && dispRow.deleteRecord){ dispRow.deleteRecord(); promises.push(dispRow.save(adapterOptions)); }\n            if(tempRow && tempRow.deleteRecord){ tempRow.deleteRecord(); promises.push(tempRow.save(adapterOptions)); }\n            Promise.all(promises)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const specs = this.get('columnSpecs') || [];\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            const dispValues = [];\n            specs.forEach((spec) => {\n                if(spec.isTemp){ return; }\n                dispValues.push(Number(snapshot[spec.key]) || 0);\n            });\n            const tempValues = [Number(snapshot['__temp__']) || 0];\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingRowId');\n\n            const tempData = this.get('temperatureData') || [];\n            const dispData = this.get('displacementData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            if(isEdit && originalId === newId){\n                const tempRow = findRow(tempData, originalId);\n                const dispRow = findRow(dispData, originalId);\n                const promises = [];\n                if(tempRow){ tempRow.set('values', tempValues); promises.push(tempRow.save(adapterOptions)); }\n                if(dispRow){ dispRow.set('values', dispValues); promises.push(dispRow.save(adapterOptions)); }\n                Promise.all(promises).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                const oldDisp = findRow(dispData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n                if(oldDisp){ oldDisp.deleteRecord(); oldDisp.save(adapterOptions); }\n            }\n\n            const tempRecord = store.createRecord('temperature-value', { id: newId, values: tempValues });\n            tempRecord.save(adapterOptions);\n\n            const dispRecord = store.createRecord('displacement-value', { id: newId, values: dispValues });\n            dispRecord.save(adapterOptions).then(refreshRoute).catch(handleErr);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","export { default } from 'ember-leaflet/components/image-layer';\n","import { inject as service } from '@ember/service';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Component from \"@ember/component\";\n\n\nexport default Component.extend({\n    api: service(),\n    session: service(),\n    readingID:null,\n    isLoading:false,\n    /**\n     * in order to use this component, you must pass in or implement\n     * instrumentID: string,\n     * selectedDatetime:string \n     * selectedReadingObject: Object\n     *  Format example: \n    *   {\n            \"id\": \"2026-02-03 17:14:00\",\n            \"displacement\": [\n                250.0,\n                250.0,\n                250.0,\n                250.0,\n                250.0,\n                250.0,\n                null\n            ],\n            \"temperature\": 0.0\n        },\n        onSelectedReadingObject: action function\n     */\n    selectedDatetime: \"\",\n    readingsArray: [],\n    //IF YOU WANT TO USE THIS COMPONENT, YOUR PARENT COMPONENT NEEDS TO ADD ACTION: updateDispDropdownUnit\n    init() {\n        this._super(...arguments);\n    },\n    getReadingArray: async function(){\n        try{\n            console.log(\"selecte date time\")\n            console.log(this.get(\"selectedDatetime\"))\n            this.set(\"isLoading\", true);\n            this.set(\"readingsArray\", []);\n            const url = `${getApiBaseUrl()}/readings/instrument/${this.get(\"instrumentID\")}/?datetime=${this.get(\"selectedDatetime\")}`;\n            let response = await this.api.fetch(url, {\n                method: \"GET\",\n                headers: {\n                    Authorization: `Bearer ${localStorage.token}`,\n                    \"Content-Type\": \"application/json\"\n                }\n            });\n\n            let result = await response.status;\n            if (response.ok) {\n                const result = await response.json();\n                this.set(\"readingsArray\", result.data)\n            } else {\n                console.error(result);\n                this.set(\"readingsArray\", []);\n            }\n        }\n        catch(error){\n            console.log(\"Error in getReadingArray: \" + error);\n            this.set(\"readingsArray\", []);\n        }\n        \n        this.set(\"isLoading\", false);\n    },\n    actions: {\n        async searchReading(){\n            await this.getReadingArray();\n        },\n        onDatetimePickerChange(input) {\n            this.set(\"selectedDatetime\", input.target.value);\n        },\n        onSelectReadingObject(readingID) {\n            let readingObj = null;\n            this.readingsArray.forEach(element => {\n                if(element.id === readingID){\n                    readingObj = element;\n                }\n            });\n            if(readingObj != null){\n                const fn = this.get(\"onSelectedReadingObject\");\n                if (fn) fn(readingObj);\n            }\n        },\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport Component from \"@ember/component\";\nimport ENV from 'geotechnical-data-platform-new/config/environment';\nimport { getInstrumentCountFromId } from '../utils/instrument-id';\n\nexport default Component.extend({\n  store: service(),\n  session: service(),\n  /**\n   * In order to use this diagram:\n   * - instrumentID=selectedInstrument.id String\n   * - headAt=selectedInstrument.headAt.id HAC or HAT (Case sensitive)\n   * - instrumentTypeText=selectedInstrument.instrumentType.title \n   * - initialValues={} (Object with case sensitve keys)\n      *  Initial Values can function for checkbox, number input or just raw text.\n      *  The format is very strict and it is inputMode Dependent. \n      *  If inputMode is Checkbox, initialValues must in format:\n          * {\n            * channel_1:boolean(true/false),\n            * channel_2:boolean(true/false),...\n          * }\n      *  If inputMode is Input, initialValues must in format:\n          * {\n            * channel_1:Number(value),\n            * channel_2:Number(value),...\n          * }\n      *  If inputMode is label, initialValues must in format:\n          * {\n            * channel_1:String(value),\n            * channel_2:String(value),...\n          * }\n   * - channels=selectedInstrument.channelsNum Number\n   * - inputMode=\"checkbox\" or \"input\" or \"label\" (case sensitive)\n   * - triggerDiagramReset\n      * - Mandatory, whenever a user decided to change instrumentID\n   * - onTextboxInput\n      * - Optional, whenever a user decided to type into buildInputTextbox textbox\n   * - onCheckboxInput\n      * - Optional, whenever a user decided to check/uncheck  buildInputCheckbox checkbox\n   */\n  init() {\n    this._super(...arguments);\n  },\n  didInsertElement() {\n    this._super(...arguments);\n    this.buildDiagram();\n  },\n\n  didUpdateAttrs() {\n    this._super(...arguments);\n    scheduleOnce('afterRender', this, this.buildDiagram);\n  },\n  APPROVEDINSTRUMENTTYPES:{\n    dExto:\"dExto\",\n    dCable:\"dCable\",\n    dConv:\"dConv\",\n    dMPBX:\"dMPBX\",\n    dMicro: \"d-micro\",\n    dRebar:\"dRebar\",\n    dRebarV2: \"dRebarv2\",\n    dAdict: \"Adict\"\n  },\n  EXTO_HEAD_BODY_COLOR: '#3d3b3a',\n  EXTO_BODY_COLOR: '#ec4b5a', //app.scss exto-body-color\n  EXTO_ANCHOR_COLOR: '#C0C0C0', //app.scss exto-anchor-color\n  buildDiagram:function(){\n    if (this.triggerDiagramReset) this.triggerDiagramReset();\n    if(this.get(\"headAt\") === \"HAC\"){\n      this.buildHACAnchorDiagram(this.get(\"instrumentTypeText\"), Number(this.get(\"channels\")));\n    }\n    else if(this.get(\"headAt\") === \"HAT\"){\n      this.buildHATAnchorDiagram(this.get(\"instrumentTypeText\"), Number(this.get(\"channels\")));\n    }\n    this.buildHeadAtHeadToeLabel();\n    this.buildExcavationDrillDirectionDiagram(this.get(\"instrumentTypeText\"));\n  },\n  \n  buildInputTextbox: function(i, id, upperAnchorComponentHeight, anchorTextboxWidth){\n    const inputElement = document.createElement('input');\n    inputElement.id = id;\n    inputElement.style.width = `${anchorTextboxWidth}px`;\n    inputElement.style.height = `${upperAnchorComponentHeight}px`;\n    inputElement.setAttribute('type', 'number');\n    inputElement.style.fontSize = '13px';\n    inputElement.setAttribute('placeholder', `${i}`);\n    inputElement.setAttribute('min', 0);\n    inputElement.style.flexShrink = 0;\n    inputElement.value = this.get(\"initialValues\")[`channel_${i}`] ? Number(this.get(\"initialValues\")[`channel_${i}`]) : 0;\n    inputElement.addEventListener('input', (event) => {\n      if (this.onCustomNumberInput) this.onCustomNumberInput(`channel_${i}`, event.target.value);\n    });\n    return inputElement;\n\n  },\n  buildInputCheckbox: function(i, id,checkboxWidthHeight, anchorTextboxWidth){\n\n    const divElement = document.createElement('div');\n    divElement.style.width = `${anchorTextboxWidth}px`;\n    divElement.style.height = `${checkboxWidthHeight}px`;\n    divElement.style.display = \"flex\";\n    divElement.style.flexDirection = \"row\";\n    divElement.style.alignItems = \"center\";\n    divElement.style.justifyContent = \"center\";\n    divElement.textContent = `${i}:`;\n    \n    const checkboxElement = document.createElement('input');\n    checkboxElement.id = id;\n    checkboxElement.style.width = `15px`;\n    checkboxElement.style.height = `15px`;\n    checkboxElement.setAttribute('type', 'checkbox');\n    checkboxElement.style.flexShrink = 0;\n    checkboxElement.checked = this.get(\"initialValues\")[`channel_${i}`] != null ? this.get(\"initialValues\")[`channel_${i}`] : false;\n    checkboxElement.addEventListener('input', (event) => {\n      if (this.onCustomCheckBoxInput) this.onCustomCheckBoxInput(`channel_${i}`, event.target.checked);\n    });\n    divElement.appendChild(checkboxElement)\n    return divElement;\n\n  },\n  buildRawLabel: function(i, id, checkboxWidthHeight, anchorTextboxWidth){\n\n    const divElement = document.createElement('div');\n    divElement.style.width = `${anchorTextboxWidth}px`;\n    divElement.style.height = `${checkboxWidthHeight}px`;\n    divElement.style.display = \"flex\";\n    divElement.style.flexDirection = \"row\";\n    divElement.style.alignItems = \"center\";\n    divElement.style.justifyContent = \"center\";\n    \n    const textDiv = document.createElement('div');\n    textDiv.id = id;\n    textDiv.style.flexShrink = 0;\n    textDiv.textContent = this.get(\"initialValues\")[`channel_${i}`] ? this.get(\"initialValues\")[`channel_${i}`] : \"\";\n\n    divElement.appendChild(textDiv);\n    return divElement;\n\n  },\n  inputComponentBuilder: function(i, id, height, width){\n    let inputComponent = null;\n    if(this.get(\"inputMode\") === \"input\"){\n      inputComponent = this.buildInputTextbox(i,`${id}_input_${i}`, height, width);\n    }\n    else if (this.get(\"inputMode\") === \"checkbox\"){\n      inputComponent = this.buildInputCheckbox(i, `${id}_checkbox_${i}`, height, width);\n    }\n    else{\n      inputComponent = this.buildRawLabel(i, `${id}_label_${i}`, height, width);\n    }\n    return inputComponent;\n  },\n  buildAnchorHead:function(id, anchorHeadWidth, anchorComponentHeight, color){\n    const divHeadBodyComp = document.createElement('div');\n    divHeadBodyComp.id = id;\n    divHeadBodyComp.style.width = `${anchorHeadWidth}px`;\n    divHeadBodyComp.style.height = `${anchorComponentHeight}px`;\n    divHeadBodyComp.style.backgroundColor = color;\n    divHeadBodyComp.style.borderTopLeftRadius = \"10px\";\n    divHeadBodyComp.style.borderBottomLeftRadius = \"10px\";\n    divHeadBodyComp.style.rotate = this.get(\"headAt\") === \"HAC\" ? \"none\" : \"180deg\";\n    divHeadBodyComp.style.flexShrink = 0;\n    return divHeadBodyComp;\n\n  },\n  buildAnchorBody:function(id, anchorBodyWidth, anchorComponentHeight, color){\n    //Red-Orange Anchor Body\n    const divBodyComp = document.createElement('div');\n    divBodyComp.id = id;\n    divBodyComp.style.width = `${anchorBodyWidth}px`;\n    divBodyComp.style.height = `${anchorComponentHeight}px`;\n    divBodyComp.style.backgroundColor = color;\n    divBodyComp.style.flexShrink = 0;\n    return divBodyComp;\n\n  },\n  buildAnchorPoint:function(id, anchorWidth, anchorComponentHeight){\n    const divAnchor = document.createElement('div');\n    divAnchor.id = id;\n    divAnchor.style.width = `${anchorWidth}px`;\n    divAnchor.style.height = `${anchorComponentHeight}px`;\n    divAnchor.style.flexShrink = 0;\n    divAnchor.style.backgroundColor = this.EXTO_ANCHOR_COLOR;\n    return divAnchor;\n\n  },\n  buildHACAnchorDiagram: function (type, channels) {\n      //Initialize Sections\n      const masterDiagramSection = document.getElementById('masterAnchorDiagram');\n      const upperMasterSection = document.getElementById('upperMasterSection');\n      upperMasterSection.innerHTML = \"\";\n      const anchorCenterSection = document.getElementById('anchorMasterSection');\n      anchorCenterSection.innerHTML = \"\";\n      const lowerMasterSection = document.getElementById('lowerMasterSection');\n      lowerMasterSection.innerHTML = \"\";\n\n      const anchorHeadWidth = 50;\n      const anchorHeadOffsetWidth = 30;\n      const anchorBodyWidth = 100;\n      const anchorWidth = 10;\n      const anchorTextboxWidth = 70;\n\n      const anchorComponentHeight = 10;\n      const upperAnchorComponentHeight = 20;\n      try {\n        // Subtract one temperature channel per sub-instrument:\n        //   - Legacy single-instrument IDs: 1 temperature → channels - 1 (unchanged behavior)\n        //   - Multi-instrument (subModel B) IDs: one temperature per 7-channel sub-instrument →\n        //     channels - instrumentCount.\n        // Helper returns 1 for legacy/unknown IDs, ceil(channels/7) for multi-instrument.\n        const _instrumentCount = getInstrumentCountFromId(this.get('instrumentID')) || 1;\n        channels = channels - _instrumentCount;\n        for(let i=1; i <= channels; i ++){\n          //Build Center Anchor Body, instrumentType dependent\n          if(type === this.APPROVEDINSTRUMENTTYPES.dExto ||\n              type === this.APPROVEDINSTRUMENTTYPES.dCable ||\n              type === this.APPROVEDINSTRUMENTTYPES.dConv ||\n              type === this.APPROVEDINSTRUMENTTYPES.dMPBX ||\n              type === this.APPROVEDINSTRUMENTTYPES.dMicro||\n              type === this.APPROVEDINSTRUMENTTYPES.dAdict\n          ){\n            // Build Full Center Anchor Body. \n            if(i==1){\n              //The head anchor \n              let anchorHead = this.buildAnchorHead(`anchor_center_head_${i}`, anchorHeadWidth, anchorComponentHeight,this.EXTO_HEAD_BODY_COLOR);\n              anchorCenterSection.appendChild(anchorHead);\n            }\n            //Red-Orange Anchor Body\n            let anchorBody = this.buildAnchorBody(`anchor_center_body_${i}`, anchorBodyWidth, anchorComponentHeight,this.EXTO_BODY_COLOR);\n            anchorCenterSection.appendChild(anchorBody);\n            //Actual Anchor Point\n            let anchorPoint = this.buildAnchorPoint(`anchor_center_point_${i}`, anchorWidth, anchorComponentHeight);\n            anchorCenterSection.appendChild(anchorPoint);\n          }\n          else if (\n              type === this.APPROVEDINSTRUMENTTYPES.dRebar ||\n              type === this.APPROVEDINSTRUMENTTYPES.dRebarV2){\n            // Build Center (channels) / 2 Anchor Body. \n            if(i==1){\n              //The head anchor \n              let anchorHead = this.buildAnchorHead(`anchor_center_head_${i}`, anchorHeadWidth, anchorComponentHeight, this.EXTO_HEAD_BODY_COLOR);\n              anchorCenterSection.appendChild(anchorHead);\n              //Red-Orange Anchor Body\n              let anchorBody = this.buildAnchorBody(`anchor_center_body_${i}`, anchorBodyWidth, anchorComponentHeight,this.EXTO_BODY_COLOR);\n              anchorCenterSection.appendChild(anchorBody);\n              //Actual Anchor Point\n              let anchorPoint = this.buildAnchorPoint(`anchor_center_point_${i}`, anchorWidth, anchorComponentHeight);\n              anchorCenterSection.appendChild(anchorPoint);\n            }else if(i <= channels / 2){\n              //Red-Orange Anchor Body\n              let anchorBody = this.buildAnchorBody(`anchor_center_body_${i}`, anchorBodyWidth, anchorComponentHeight,this.EXTO_BODY_COLOR);\n              anchorCenterSection.appendChild(anchorBody);\n              //Actual Anchor Point\n              let anchorPoint = this.buildAnchorPoint(`anchor_center_point_${i}`, anchorWidth, anchorComponentHeight);\n              anchorCenterSection.appendChild(anchorPoint);\n            }\n          }\n\n          //Calculate buffer body width so that the textbox aligns with anchor point in Body Center Anchor Body\n          const totalAnchorWidth =  channels * anchorBodyWidth + channels * anchorWidth;\n          const bodyWidth = (totalAnchorWidth  - (channels * anchorTextboxWidth)) / channels;\n          //Build Upper Textboxes, instrumentType dependent\n          if(type === this.APPROVEDINSTRUMENTTYPES.dExto ||\n              type === this.APPROVEDINSTRUMENTTYPES.dCable ||\n              type === this.APPROVEDINSTRUMENTTYPES.dConv ||\n              type === this.APPROVEDINSTRUMENTTYPES.dMPBX ||\n              type === this.APPROVEDINSTRUMENTTYPES.dMicro||\n              type === this.APPROVEDINSTRUMENTTYPES.dAdict\n          ){\n          // Add channels number of textboxes\n            if(i==1){\n              //Dummy upper head anchor \n              let anchorHead = this.buildAnchorHead(`anchor_dummy_upper_head_${i}`, anchorHeadWidth + anchorHeadOffsetWidth, anchorComponentHeight, \"\");\n              upperMasterSection.appendChild(anchorHead);\n            }\n            //Dummy upper anchor body\n            let anchorBody = this.buildAnchorBody(`anchor_dummy_upper_body_${i}`, bodyWidth, anchorComponentHeight, \"\");\n            upperMasterSection.appendChild(anchorBody);\n            \n            //User Input\n            let inputComponent = this.inputComponentBuilder(i, `anchor_upper_input`, upperAnchorComponentHeight, anchorTextboxWidth);\n            upperMasterSection.appendChild(inputComponent);\n\n          }\n          else if (\n              type === this.APPROVEDINSTRUMENTTYPES.dRebar ||\n              type === this.APPROVEDINSTRUMENTTYPES.dRebarV2){\n            if(i <= channels / 2){\n              // Build Upper Anchor Body. \n              // Add channels/2 number of textboxes\n              if(i==1){\n                //Dummy upper head anchor \n                let anchorHead = this.buildAnchorHead(`anchor_dummy_upper_head_${i}`, anchorHeadWidth + anchorHeadOffsetWidth, anchorComponentHeight, \"\");\n                upperMasterSection.appendChild(anchorHead);\n              }\n              //Dummy upper anchor body\n              let anchorBody = this.buildAnchorBody(`anchor_dummy_upper_body_${i}`, bodyWidth, anchorComponentHeight, \"\");\n              upperMasterSection.appendChild(anchorBody);\n            \n              //User Input  textbox/checkbox/label\n              let inputComponent = this.inputComponentBuilder(i, `anchor_upper_input`, upperAnchorComponentHeight, anchorTextboxWidth);\n              upperMasterSection.appendChild(inputComponent);\n\n            }\n            else{\n              // Build Lower Anchor Body. \n              // Add channels/2 number of textboxes]\n              if(i == (channels / 2 + 1)){\n                //Dummy lower head anchor \n                let anchorHead = this.buildAnchorHead(`anchor_dummy_lower_head_${i}`, anchorHeadWidth + anchorHeadOffsetWidth, anchorComponentHeight, \"\");\n                lowerMasterSection.appendChild(anchorHead);\n              }\n              //Dummy lower anchor body\n              let anchorBody = this.buildAnchorBody(`anchor_dummy_lower_body_${i}`, bodyWidth, anchorComponentHeight, \"\");\n              lowerMasterSection.appendChild(anchorBody);\n            \n              //User Input  textbox/checkbox/label\n              let inputComponent = this.inputComponentBuilder(i, `anchor_lower_input`, upperAnchorComponentHeight, anchorTextboxWidth);\n              lowerMasterSection.appendChild(inputComponent);\n\n            }\n\n\n          }\n        }\n      } catch (e) {\n        console.log(\"Error in buildHACAnchorDiagram: \" + e);\n      }\n\n  },\n  buildHATAnchorDiagram: function (type, channels) {\n      //Initialize Sections\n      const masterDiagramSection = document.getElementById('masterAnchorDiagram');\n      const upperMasterSection = document.getElementById('upperMasterSection');\n      upperMasterSection.innerHTML = \"\";\n      const anchorCenterSection = document.getElementById('anchorMasterSection');\n      anchorCenterSection.innerHTML = \"\";\n      const lowerMasterSection = document.getElementById('lowerMasterSection');\n      lowerMasterSection.innerHTML = \"\";\n\n      const anchorHeadWidth = 50;\n      const anchorHeadOffsetWidth = 30;\n      const anchorBodyWidth = 100;\n      const anchorWidth = 10;\n      const anchorTextboxWidth = 70;\n\n      const anchorComponentHeight = 10;\n      const upperAnchorComponentHeight = 20;\n      try {\n        // Subtract one temperature channel per sub-instrument:\n        //   - Legacy single-instrument IDs: 1 temperature → channels - 1 (unchanged behavior)\n        //   - Multi-instrument (subModel B) IDs: one temperature per 7-channel sub-instrument →\n        //     channels - instrumentCount.\n        // Helper returns 1 for legacy/unknown IDs, ceil(channels/7) for multi-instrument.\n        const _instrumentCount = getInstrumentCountFromId(this.get('instrumentID')) || 1;\n        channels = channels - _instrumentCount;\n        for(let i=channels; i > 0; i--){\n          //Build Center Anchor Body, instrumentType dependent\n          if(type === this.APPROVEDINSTRUMENTTYPES.dExto ||\n              type === this.APPROVEDINSTRUMENTTYPES.dCable ||\n              type === this.APPROVEDINSTRUMENTTYPES.dConv ||\n              type === this.APPROVEDINSTRUMENTTYPES.dMPBX ||\n              type === this.APPROVEDINSTRUMENTTYPES.dMicro ||\n              type === this.APPROVEDINSTRUMENTTYPES.dAdict\n          ){\n            // Build Full Center Anchor Body. \n            //Dummy anchor body \n            if(i==channels){\n              let anchorBody = this.buildAnchorBody(`anchor_dummy_offset_upper_body_${i}`, anchorHeadOffsetWidth, anchorComponentHeight, \"\");\n              anchorCenterSection.appendChild(anchorBody);\n            }\n            //anchor point\n            let anchorPoint = this.buildAnchorPoint(`anchor_center_point_${i}`, anchorWidth, anchorComponentHeight);\n            anchorCenterSection.appendChild(anchorPoint);\n            //Red-Orange Anchor Body\n            let anchorBody = this.buildAnchorBody(`anchor_center_body_${i}`, anchorBodyWidth, anchorComponentHeight,this.EXTO_BODY_COLOR);\n            anchorCenterSection.appendChild(anchorBody);\n            //tail anchor head\n            if(i==1){\n              let anchorHead = this.buildAnchorHead(`anchor_center_head_${i}`, anchorHeadWidth, anchorComponentHeight,this.EXTO_HEAD_BODY_COLOR);\n              anchorCenterSection.appendChild(anchorHead);\n            }\n          }\n          else if (\n              type === this.APPROVEDINSTRUMENTTYPES.dRebar ||\n              type === this.APPROVEDINSTRUMENTTYPES.dRebarV2){\n            // Build Center (channels) / 2 Anchor Body. \n\n            //Dummy anchor body \n            if(i==channels){\n              let anchorBody = this.buildAnchorBody(`anchor_dummy_offset_center_body_${i}`, anchorHeadOffsetWidth, anchorComponentHeight, \"\");\n              anchorCenterSection.appendChild(anchorBody);\n            }\n            else if(i > channels / 2){\n              //Actual Anchor Point\n              let anchorPoint = this.buildAnchorPoint(`anchor_center_point_${i}`, anchorWidth, anchorComponentHeight);\n              anchorCenterSection.appendChild(anchorPoint);\n              //Red-Orange Anchor Body\n              let anchorBody = this.buildAnchorBody(`anchor_center_body_${i}`, anchorBodyWidth, anchorComponentHeight, this.EXTO_BODY_COLOR);\n              anchorCenterSection.appendChild(anchorBody);\n            }\n            else if(i==1){\n              //Actual Anchor Point\n              let anchorPoint = this.buildAnchorPoint(`anchor_center_point_${i}`, anchorWidth, anchorComponentHeight);\n              anchorCenterSection.appendChild(anchorPoint);\n              //Red-Orange Anchor Body\n              let anchorBody = this.buildAnchorBody(`anchor_center_body_${i}`, anchorBodyWidth, anchorComponentHeight, this.EXTO_BODY_COLOR);\n              anchorCenterSection.appendChild(anchorBody);\n              //The head anchor \n              let anchorHead = this.buildAnchorHead(`anchor_center_head_${i}`, anchorHeadWidth, anchorComponentHeight, this.EXTO_HEAD_BODY_COLOR);\n              anchorCenterSection.appendChild(anchorHead);\n            }\n          }\n\n          //Calculate buffer body width so that the textbox aligns with anchor point in Body Center Anchor Body\n          const totalAnchorWidth =  channels * anchorBodyWidth + channels * anchorWidth;\n          const bodyWidth = (totalAnchorWidth  - (channels * anchorTextboxWidth)) / channels;\n          //Build Upper Textboxes, instrumentType dependent\n          if(type === this.APPROVEDINSTRUMENTTYPES.dExto ||\n              type === this.APPROVEDINSTRUMENTTYPES.dCable ||\n              type === this.APPROVEDINSTRUMENTTYPES.dConv ||\n              type === this.APPROVEDINSTRUMENTTYPES.dMPBX ||\n              type === this.APPROVEDINSTRUMENTTYPES.dMicro||\n              type === this.APPROVEDINSTRUMENTTYPES.dAdict\n          ){\n\n            //User Input\n            let inputComponent = this.inputComponentBuilder(i, `anchor_upper_input`, upperAnchorComponentHeight, anchorTextboxWidth);\n            upperMasterSection.appendChild(inputComponent);\n            \n            //Dummy upper anchor body\n            let anchorBody = this.buildAnchorBody(`anchor_dummy_upper_body_${i}`, bodyWidth, anchorComponentHeight, \"\");\n            upperMasterSection.appendChild(anchorBody);\n\n            if(i==1){\n              //Dummy upper tail anchor \n              let anchorHead = this.buildAnchorHead(`anchor_dummy_upper_head_${i}`, anchorHeadWidth, anchorComponentHeight, \"\");\n              upperMasterSection.appendChild(anchorHead);\n            }\n\n          }\n          else if (\n              type === this.APPROVEDINSTRUMENTTYPES.dRebar ||\n              type === this.APPROVEDINSTRUMENTTYPES.dRebarV2){\n            if(i >= channels / 2){\n              // Build Upper Anchor Body. \n              // Add channels/2 number of textboxes\n            \n              //User Input  textbox/checkbox/label\n              let inputComponent = this.inputComponentBuilder(i, `anchor_upper_input`, upperAnchorComponentHeight, anchorTextboxWidth);\n              upperMasterSection.appendChild(inputComponent);\n              //Dummy upper anchor body\n              let anchorBody = this.buildAnchorBody(`anchor_dummy_upper_body_${i}`, bodyWidth, anchorComponentHeight, \"\");\n              upperMasterSection.appendChild(anchorBody);\n\n            }\n            else{\n              // Build Lower Anchor Body. \n              // Add channels/2 number of textboxes\n            \n              //User Input  textbox/checkbox/label\n              let inputComponent = this.inputComponentBuilder(i, `anchor_lower_input`, upperAnchorComponentHeight, anchorTextboxWidth);\n              lowerMasterSection.appendChild(inputComponent);\n\n              //Dummy lower anchor body\n              let anchorBody = this.buildAnchorBody(`anchor_dummy_lower_body_${i}`, bodyWidth, anchorComponentHeight, \"\");\n              lowerMasterSection.appendChild(anchorBody);\n            }\n          }\n        }\n      } catch (e) {\n        console.log(\"Error in buildHATAnchorDiagram: \" + e);\n      }\n\n  },\n  buildExcavationDrillDirectionDiagram:function(type){\n    const excavationLabelComponent = document.getElementById('diagramExcavationLabel');\n    const drillDirectionLabelComponent = document.getElementById('diagramDrillDirectionLabel');\n    if(type === this.APPROVEDINSTRUMENTTYPES.dConv ||type === this.APPROVEDINSTRUMENTTYPES.dMicro){\n      excavationLabelComponent.style.display = \"none\";\n      drillDirectionLabelComponent.style.display = \"none\";\n    }\n    else{\n      excavationLabelComponent.style.display = \"flex\";\n      drillDirectionLabelComponent.style.display = \"flex\";\n    }\n  },\n  buildHeadAtHeadToeLabel: function () {\n    const headToeLabelSection = document.getElementById('diagramHeadToeLabels');\n    if(headToeLabelSection){\n      if(this.get(\"headAt\") === \"HAC\"){\n        headToeLabelSection.style.flexDirection = \"row\";\n      } else if(this.get(\"headAt\") === \"HAT\"){\n        headToeLabelSection.style.flexDirection = \"row-reverse\";\n      }\n    }\n  },\n\n  actions: {\n      triggerDiagramReset(){\n        if (this.triggerDiagramReset) this.triggerDiagramReset();\n      },\n      onTextboxInput(key, value ){\n        if (this.onCustomNumberInput) this.onCustomNumberInput(key, value);\n      },\n      onCheckboxInput(key, value ){\n        if (this.onCustomCheckBoxInput) this.onCustomCheckBoxInput(key, value);\n      }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    inst_id: \"Select\",\n    actions: {\n        setID(inst){\n            this.set(\"inst_id\", inst.id);\n            this.setValue(\"instType\", inst.instrumentTypeID);\n            this.setValue(\"id\", inst.id);\n        },\n    }\n});","import { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    router: service(),\n    session: service(),\n    isRowDeleteConfirmationDialog: {},\n    licenceIsValid: computed('',function() {\n        let valid = false;\n        try {\n            valid = this.session.data.authenticated.isValid;\n        } catch {}\n        return valid;\n    }),\n    \n    // projectValue: computed('tableRow', function() {\n    //     let projectValue = this.get('tableRow');\n    //     console.log(\"projectValue:::::::::::::: \" + tableRow)\n    //     return projectValue\n    // }),\n    \n    // levelValue: computed('tableRow.level.value', function() {\n    //     return this.get('tableRow.level.value');\n    // }),\n\n    actions: {\n        createInstrument: function() {\n            //console.log(\"create\");\n            this.get('router').transitionTo('create-instrument');\n            //this.transitionTo('create-instrument');\n        },\n        toggleRowDeleteConfirmationDialog(id){\n            //console.log(id);\n            let curVal = this.get('isRowDeleteConfirmationDialog')[id] ? false : true;\n            set(this.get('isRowDeleteConfirmationDialog'), id, curVal); //update isVisibleRowDetails variable for each single row\n        },\n        remove(model, object){\n            let _this = this;\n            let _store = this.get('store');\n\n            let errBox = document.getElementById(\"instrumentListError\");\n\n            errBox.hidd = true;\n\n            //object.get('isDeleted');\n            object.save().then(function(){\n                // deal with records that just were created\n                // relates to the way I add new records to model https://github.com/emberjs/data/issues/3313\n                //model.removeObject(object);\n                // console.log(\"Object saved. Now deleting... \")\n                object.deleteRecord();\n                \n                object.save().then(function(){                    \n                    object.unloadRecord();\n                }).catch(function(reason){\n                    let status = reason.errors[0].status;\n\n                    if (status == 403) {\n                        errBox.hidden = false;\n                    };\n                });\n            \n            }).catch(function(reason){\n\n                let status = reason.errors[0].status;\n\n                if (status == 403) {\n                    errBox.hidden = false;\n                };\n            });\n        },\n    }\n\n})\n","export { default } from 'ember-leaflet/components/interactive-layer';\n","import { computed } from '@ember/object';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    isVisibleImportKeyForm: true,\n    isVisibleError: false,\n    isSubmitting: false,\n    loading: false,\n    actions: {\n        updateProperties(propertyNames = [], propertyValues = []) {\n            const _this = this;\n            if (propertyNames.length > 0 && propertyValues.length > 0 && propertyNames.length === propertyValues.length) {\n                propertyNames.forEach( function(propertyName, i) {\n                    _this.set(propertyName, propertyValues[i]);\n                });\n            } else if (!Array.isArray(propertyNames) && propertyNames !== '' && propertyValues !== '') {\n                _this.set(propertyNames, propertyValues);\n            }\n        },\n        importKey() {\n            // this.set('isVisibleImportDataForm', false);\n            this.set('isSubmitting', true);\n        },\n        cancelImport() {\n            this.set('isVisibleImportDataForm', false);\n        },\n        errorHappened(message) {\n            console.log('error happened: ' + message);\n            this.set('isVisibleError',true);\n            scheduleOnce('afterRender', this, function() {\n                this.set('isSubmitting',false);\n                this.set('loading', false);\n            });\n        }\n    }\n});","import { computed, observer, set } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { inject as service } from '@ember/service';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport EmberObject from '@ember/object';\n//import EmberUploader from 'ember-uploader';\nimport FileField from 'ember-uploader/components/file-field';\nimport Uploader from 'ember-uploader/uploaders/uploader';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default FileField.extend({\n    session: service(),\n    api: service(),\n    isSubmitting: false,\n    isSubmittingChangeObserver: observer('isSubmitting', function() {\n        if (this.get('isSubmitting')) {\n            this.send('submitFile');\n        }\n    }),\n    uploader: null,\n    files: null,\n    ajaxSettings: computed({\n        get() {\n            return {\n                headers: {\n                    Accept: 'application/vnd.api+json',\n                    withCredentials: true,\n                    Authorization: 'Bearer ' + localStorage.token  \n                }\n            }\n        }\n    }),    \n    fileSettings: {},\n    filesDidChange: function(files) {\n        const uploader = Uploader.create({\n            url: getApiBaseUrl() + '/import-key/',\n            paramName: 'key_data',\n            ajaxSettings: this.get('ajaxSettings')\n        });\n\n        this.set('uploader', uploader);\n        this.set('files', files);\n    },\n    async updateLicence(){\n        \n        //await new Promise(r => setTimeout(r, 1500));\n\n        let url = getApiBaseUrl();\n        url += url.endsWith(\"/\") ? \"\" : \"/\";\n        url += \"licences/\";\n\n        let response = await this.api.fetch(url, {\n            method: 'GET',\n            headers: {\n                'Origin': getApiBaseUrl(),\n                'Content-Type': 'application/json',\n                'Authorization': 'Bearer ' + localStorage.token  \n            },\n        });\n\n        if (response.ok) {\n            let licence = await response.json();\n            licence = licence.data[0];\n            window.location.reload(true);\n        }\n    },\n    actions: {\n        async submitFile(object){\n            console.log('submitting');\n            const _this = this;\n            let files = _this.get('files');\n\n            //files = null;\n            //this.sendAction('importError');\n\n            if (!isEmpty(files)) {\n                // this second argument is optional and can to be sent as extra data with the upload\n                let value = _this.get('uploader')\n                $(\"body\").css(\"cursor\", \"progress\");\n                _this.get('uploader').upload(\n                    files[0],\n                    _this.get('fileSettings')\n                ).then(data => {\n                    // Handle success\n                    // Reload the page to show imported data\n                    _this.updateLicence();\n                    $(\"body\").css(\"cursor\", \"default\");\n                    //window.location.reload(true);\n                }, error => {\n                    $(\"body\").css(\"cursor\", \"default\");\n                    //this.get('controllers.raw-data-values').sendAction('toggleProperty','isVisibleError');\n                    // Handle failure\n                    this.sendAction('errorHappened',error.statusText);\n                });\n            }\n        },\n        cancel(){\n            // this.set('newValue', this.get(`object.${this.get('field')}`));\n            // this.set('isEditing', false);\n            // this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n        }\n    },\n});","export { default } from 'ember-leaflet/components/leaflet-map';\n","import { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\n// app/components/log-viewer-table.js\nimport Component from '@ember/component';\n\nexport default class LogViewerTableComponent extends Component {\n  @service store;\n\n  // Assume these properties are bound to your template's form inputs\n  name = '';\n  errorType = '';\n  \n  get logViewers() {\n    return this.store.findAll('log-viewer');\n  }\n\n  @action\n  loadLogViewers() {\n    this.store.query('log-viewer', { /* your query params */ });\n  }\n\n}\n","export { default } from 'ember-mapbox-gl/components/mapbox-gl-call';\n","export { default } from 'ember-mapbox-gl/components/mapbox-gl-control';\n","export { default } from 'ember-mapbox-gl/components/mapbox-gl-image';\n","export { default } from 'ember-mapbox-gl/components/mapbox-gl-layer';\n","export { default } from 'ember-mapbox-gl/components/mapbox-gl-marker';\n","export { default } from 'ember-mapbox-gl/components/mapbox-gl-on';\n","export { default } from 'ember-mapbox-gl/components/mapbox-gl-popup';\n","export { default } from 'ember-mapbox-gl/components/mapbox-gl-source';\n","export { default } from 'ember-mapbox-gl/components/mapbox-gl';\n","export { default } from 'ember-leaflet/components/marker-layer';\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nexport default Component.extend({\n    store: service(),\n    _spatialChart: null,\n\n    // anchor distances from instrument anchors, trimmed for strain-values\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        const firstObject = this.get('fullRangeChartData').get('firstObject');\n        if (!firstObject) { return []; }\n        const dataValuesCount = firstObject.get ? (firstObject.get('values')?.length ?? 0) : (firstObject.values?.length ?? 0);\n        const anchors = this.get('instrument').get('anchors');\n        let anchorDistances = (anchors.content ?? anchors).map(anchor => anchor.get('distance'));\n\n        const modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && modelName === 'strain-values') {\n            anchorDistances.splice(0, 1);\n        }\n        return anchorDistances;\n    }),\n\n    // midpoints between anchor distances for strain-values\n    anchorMidDistances: computed('anchorDistances', function() {\n        const anchorDistances = [...this.get('anchorDistances')];\n        const midDistances = [];\n        anchorDistances.unshift(0);\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            midDistances.push(+((anchorDistances[i] + anchorDistances[i + 1]) / 2).toFixed(2));\n        }\n        return midDistances;\n    }),\n\n    // x-axis depth values for the spatial chart\n    spatialXValues: computed('anchorDistances', 'anchorMidDistances', 'chartDataModelName', function() {\n        const modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            return this.get('anchorMidDistances');\n        }\n        return this.get('anchorDistances');\n    }),\n\n    // spatial lines: one line per timestamp reading (X = depth, Y = displacement)\n    spatialChartLinesData: computed('fullRangeChartData', 'spatialXValues', 'chartDataModelName', function() {\n        const fullRangeChartData = this.get('fullRangeChartData');\n        const xValues = this.get('spatialXValues');\n        const modelName = this.get('chartDataModelName');\n\n        return fullRangeChartData.map((item) => {\n            let values = item.get('values') || [];\n            // strain-values: prepend duplicate of first value (matching NVD3 behavior)\n            if (modelName === 'strain-values') {\n                values = [values[0], ...values];\n            }\n            return {\n                key: moment(item.get('id')).format('DD MMM YYYY HH:mm'),\n                timestamp: item.get('id'),\n                values: values.map((v, idx) => ({\n                    x: xValues[idx] !== undefined ? xValues[idx] : null,\n                    y: v !== undefined ? v : null\n                })).filter(pt => pt.x !== null)\n            };\n        });\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        const chartDataModelName = this.get('chartDataModelName');\n        const chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes')\n        }));\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        const title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName');\n                units = \"kN\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n\n        const spatialLinesData = this.get('spatialChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildSpatialChart(spatialLinesData, yAxisTitle);\n        });\n    },\n\n    _buildSpatialChart(linesData, yAxisTitle) {\n        const canvas = this.element.querySelector('canvas.chartjs-spatial');\n        if (!canvas) return;\n\n        const infoPanel = this.element.querySelector('.spatial-info-panel');\n\n        let instrumentLength = 0;\n        try {\n            instrumentLength = this.instrument.get('instrumentLength') || 0;\n        } catch (e) { /* ignore */ }\n\n        const anchorXValues = this.get('spatialXValues');\n\n        // Line datasets: one per timestamp reading, NOT in legend\n        // Color gradient: oldest readings are cool/light, newest are warm/dark\n        const lineCount = linesData.length;\n        const getLineColor = (i, total) => {\n            if (total <= 1) return 'rgba(90, 90, 90, 0.7)';\n            const t = i / (total - 1);\n            const r = Math.round(160 - t * 120);\n            const g = Math.round(175 - t * 135);\n            const b = Math.round(210 - t * 130);\n            return `rgba(${r}, ${g}, ${b}, ${0.25 + t * 0.65})`;\n        };\n        const lineDatasets = linesData.map((line, i) => ({\n            label: line.key,\n            data: line.values,\n            borderColor: getLineColor(i, lineCount),\n            backgroundColor: 'transparent',\n            borderWidth: 0.5 + (i / Math.max(lineCount - 1, 1)) * 0.8, // 0.5px → 1.3px\n            pointRadius: 0,\n            pointHoverRadius: 6,\n            tension: 0,\n            parsing: false,\n            _isLine: true\n        }));\n\n        // Anchor reference datasets: hidden from the chart (drawn by plugin instead)\n        // but still needed for legend generation\n        const anchorDatasets = anchorXValues.map((dist, i) => ({\n            label: String(dist),\n            data: [],\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            borderWidth: 0,\n            pointRadius: 0,\n            showLine: false,\n            _isRef: true\n        }));\n\n        const datasets = [...lineDatasets, ...anchorDatasets];\n\n        // \"No data\" overlay plugin\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds._isRef) return;\n                    if (!ds.hidden) ds.data.forEach(pt => { if (pt && pt.y != null) hasData = true; });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data available', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        // Plugin: draw anchor reference dots pinned to the bottom of the chart area\n        const anchorDotsPlugin = {\n            id: 'anchorDots',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                const yArea = chart.chartArea.bottom;\n                const ctx = chart.ctx;\n\n                anchorXValues.forEach((dist, i) => {\n                    const px = xScale.getPixelForValue(dist);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.arc(px, yArea, 6, 0, 2 * Math.PI);\n                    ctx.fillStyle = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                    ctx.fill();\n                    ctx.restore();\n                });\n            }\n        };\n\n        // Crosshair plugin — vertical dashed line following cursor\n        let crosshairX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                if (crosshairX === null) return;\n                const { ctx, chartArea: { top, bottom } } = chart;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        // External tooltip handler: writes to the fixed info panel below the chart\n        const externalTooltipHandler = (context) => {\n            if (!infoPanel) return;\n            const { tooltip } = context;\n\n            // When tooltip hides (mouse left chart), keep last values visible so user can scroll\n            if (tooltip.opacity === 0) {\n                return;\n            }\n\n            // Filter to line datasets only\n            const lineItems = (tooltip.dataPoints || []).filter(pt => pt.dataset._isLine);\n            if (!lineItems.length) {\n                infoPanel.innerHTML = '';\n                return;\n            }\n\n            const depth = lineItems[0].parsed.x;\n            let html = `<strong>Depth: ${depth != null ? depth.toLocaleString() : '—'} mm</strong> &nbsp; `;\n\n            // Build compact inline items with colored dots\n            html += lineItems.map(pt => {\n                const color = pt.dataset.borderColor;\n                const val = pt.parsed.y;\n                const label = pt.dataset.label;\n                return `<span style=\"display:inline-block;margin:0 6px;\">` +\n                       `<span style=\"display:inline-block;width:8px;height:8px;border-radius:50%;background:${color};margin-right:3px;vertical-align:middle;\"></span>` +\n                       `<span style=\"color:${color};font-size:12px;\">${label}: ${val != null ? val.toFixed(2) : '—'}</span>` +\n                       `</span>`;\n            }).join('');\n\n            infoPanel.innerHTML = html;\n        };\n\n        const spatialChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                parsing: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'nearest', intersect: false },\n                onHover(e) {\n                    if (e.x != null) {\n                        crosshairX = e.x;\n                    }\n                },\n                scales: {\n                    x: {\n                        type: 'linear',\n                        min: 0,\n                        max: instrumentLength > 0 ? instrumentLength : undefined,\n                        title: {\n                            display: true,\n                            text: 'Depth (mm)',\n                            font: { size: 12 }\n                        },\n                        afterBuildTicks(axis) {\n                            // Show ticks at anchor positions that are in visible range\n                            const visibleAnchors = anchorXValues\n                                .filter(v => v >= axis.min && v <= axis.max)\n                                .map(v => ({ value: v }));\n                            if (visibleAnchors.length > 0) {\n                                axis.ticks = visibleAnchors;\n                            }\n                            // else: let ChartJS auto-generate ticks when zoomed between anchors\n                        },\n                        ticks: {\n                            callback(val) { return val.toLocaleString(); }\n                        }\n                    },\n                    y: {\n                        title: {\n                            display: true,\n                            text: yAxisTitle,\n                            font: { size: 12 }\n                        },\n                        ticks: {\n                            callback(val) { return val.toFixed ? val.toFixed(2) : val; }\n                        }\n                    }\n                },\n                plugins: {\n                    legend: {\n                        display: true,\n                        position: 'top',\n                        align: 'end',\n                        labels: {\n                            generateLabels(chart) {\n                                return chart.data.datasets\n                                    .map((dataset, i) => ({ dataset, i }))\n                                    .filter(({ dataset }) => dataset._isRef)\n                                    .map(({ dataset, i }) => ({\n                                        text: dataset.label,\n                                        fillStyle: dataset.backgroundColor,\n                                        strokeStyle: dataset.borderColor,\n                                        lineWidth: 0,\n                                        pointStyle: 'circle',\n                                        hidden: false,\n                                        datasetIndex: i\n                                    }));\n                            }\n                        },\n                        onClick() { /* no-op */ }\n                    },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        mode: 'index',\n                        intersect: false,\n                        filter(item) {\n                            return item.dataset._isLine === true;\n                        }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, anchorDotsPlugin, crosshairPlugin]\n        });\n\n        // --- Scroll-to-zoom (both axes) ---\n        const origXMin = spatialChart.options.scales.x.min;\n        const origXMax = spatialChart.options.scales.x.max;\n        canvas.addEventListener('wheel', e => {\n            e.preventDefault();\n            const rect = canvas.getBoundingClientRect();\n            const xScale = spatialChart.scales['x'];\n            const yScale = spatialChart.scales['y'];\n            const factor = e.deltaY < 0 ? 1.15 : 0.87;\n            const cursorX = xScale.getValueForPixel(e.clientX - rect.left);\n            const cursorY = yScale.getValueForPixel(e.clientY - rect.top);\n            spatialChart.options.scales.x.min = cursorX - (cursorX - xScale.min) * factor;\n            spatialChart.options.scales.x.max = cursorX + (xScale.max - cursorX) * factor;\n            spatialChart.options.scales.y.min = cursorY - (cursorY - yScale.min) * factor;\n            spatialChart.options.scales.y.max = cursorY + (yScale.max - cursorY) * factor;\n            spatialChart.update('none');\n        }, { passive: false });\n\n        // --- Drag-to-pan (both axes) ---\n        let panStartX = null, panStartY = null;\n        let panXMin = null, panXMax = null, panYMin = null, panYMax = null;\n        canvas.addEventListener('mousedown', e => {\n            panStartX = e.clientX; panStartY = e.clientY;\n            panXMin = spatialChart.scales['x'].min; panXMax = spatialChart.scales['x'].max;\n            panYMin = spatialChart.scales['y'].min; panYMax = spatialChart.scales['y'].max;\n            canvas.style.cursor = 'grabbing';\n        });\n        canvas.addEventListener('mousemove', e => {\n            const rect = canvas.getBoundingClientRect();\n            const px = e.clientX - rect.left;\n            const { left, right } = spatialChart.chartArea;\n            crosshairX = (px >= left && px <= right) ? px : null;\n            if (panStartX !== null) {\n                const xPxRange = spatialChart.chartArea.right - spatialChart.chartArea.left;\n                const yPxRange = spatialChart.chartArea.bottom - spatialChart.chartArea.top;\n                spatialChart.options.scales.x.min = panXMin - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.x.max = panXMax - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.y.min = panYMin + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n                spatialChart.options.scales.y.max = panYMax + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('mouseleave', () => {\n            crosshairX = null;\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('dblclick', () => {\n            spatialChart.options.scales.x.min = origXMin;\n            spatialChart.options.scales.x.max = origXMax;\n            spatialChart.options.scales.y.min = undefined;\n            spatialChart.options.scales.y.max = undefined;\n            spatialChart.update('none');\n        });\n        const onPanEnd = () => {\n            panStartX = panStartY = panXMin = panXMax = panYMin = panYMax = null;\n            canvas.style.cursor = 'default';\n        };\n        canvas.addEventListener('mouseup', onPanEnd);\n        document.addEventListener('mouseup', onPanEnd);\n\n        this.set('_spatialChart', spatialChart);\n    },\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const spatialChart = this.get('_spatialChart');\n        if (spatialChart) { spatialChart.destroy(); }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\n// Chart line colors — sourced from color-palette\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,    // #0077b6\n    colorPalette.orange2,   // #FF7444\n    colorPalette.green3,    // #2a9d8f\n    colorPalette.red1,      // #D25353\n    colorPalette.purple7,   // #8b5cf6\n    colorPalette.beige22,   // #b08968\n    colorPalette.pink6,     // #ec4899\n    colorPalette.gray5,     // #6b7280\n    colorPalette.teal6,     // #10b981\n    colorPalette.cyan4,     // #06b6d4\n];\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        if (instType === 'Tilt') {\n            return ['X', 'Y', 'Z'];\n        } else if (instType === 'Wire') {\n            let anchors = [];\n            let numPorts = this.instrument.get('portsNum');\n            for (let ctr = 0; ctr < numPorts; ctr++) {\n                anchors.push('T' + (ctr + 1));\n                anchors.push(ctr + 1);\n            }\n            return anchors;\n        } else if (instType === 'BluVibe') {\n            return ['Data'];\n        }\n\n        let anchors = this.get('instrument').get('anchors');\n        const arr = anchors.content ?? anchors;\n        let anchorDistances = arr.map(anchor => anchor.get('distance'));\n\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') {\n            var midPoints = [];\n            if (instType === 'dCable') {\n                for (var ctr = 1; ctr < anchorDistances.length; ctr++) {\n                    var mid = (anchorDistances[ctr - 1] + anchorDistances[ctr]) / 2;\n                    midPoints[ctr] = +mid.toFixed(2);\n                }\n                midPoints.splice(0, 1);\n                midPoints[0] = 0;\n                midPoints.push(anchorDistances[anchorDistances.length - 1]);\n            } else if (instType === 'dRebar') {\n                let headExclusion = this.get('instrument').get('headExclusionLength');\n                let leftAnchors = [headExclusion];\n                let rightAnchors = [headExclusion];\n\n                let center = anchorDistances.length - 1;\n                center = Math.ceil(center / 2);\n\n                leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n\n                let midLeft = [];\n                for (var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                    midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                }\n\n                let midRight = [];\n                for (var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                    midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                }\n\n                if (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values') {\n                    if (this.get('instrument').get('stacked')) {\n                        midPoints = midLeft;\n                        if (modelName === 'load-values') {\n                            midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n                        }\n                    } else {\n                        midPoints = midLeft.concat(midRight);\n                        if (modelName === 'bending-strain-values') {\n                            midPoints.shift();\n                            midPoints.pop();\n                        }\n                    }\n                } else {\n                    midPoints = midLeft.concat(midRight);\n                }\n\n                if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                    for (let ctr = 0; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr + 1) + '-' + midPoints[ctr];\n                    }\n                }\n            } else {\n                for (var ctr = 0; ctr < anchorDistances.length - 1; ctr++) {\n                    midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n                }\n            }\n            if (modelName === 'displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        } else if (modelName === 'axial-displacement-values' && this.get('instrument').get('stacked')) {\n            let mid = (anchorDistances.length - 1) / 2;\n            while (anchorDistances.length > (mid + 1)) {\n                anchorDistances.pop();\n            }\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else if (modelName === 'axial-displacement-values' && !this.get('instrument').get('stacked')) {\n            anchorDistances.sort(function(a, b) { return a - b; });\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else {\n            if (instType === 'dRebar') {\n                if (modelName === 'displacement-values') {\n                    var midPoints = [];\n                    let headExclusion = this.get('instrument').get('headExclusionLength');\n                    let leftAnchors = [headExclusion];\n                    let rightAnchors = [headExclusion];\n\n                    let center = anchorDistances.length - 1;\n                    center = Math.ceil(center / 2);\n\n                    leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                    rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                    if (!this.get('instrument').get('stacked')) {\n                        rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n                    }\n\n                    let midLeft = [];\n                    for (var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                        midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                    }\n\n                    let midRight = [];\n                    for (var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                        midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                    }\n\n                    midPoints = midLeft.concat(midRight);\n                    anchorDistances = midPoints;\n                    anchorDistances.unshift(0);\n                }\n                for (let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n                for (let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n            }\n        }\n        return anchorDistances;\n    }),\n\n    // Main chart sourced from zoomChartData to mirror NVD3 (Group By applies to visible chart).\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'anchorDistances', 'chartDataModelName', function() {\n        const anchorDistances = this.get('anchorDistances');\n        const fullRangeChartData = this.get('zoomChartData');\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values';\n\n        const lines = anchorDistances.map((chartLineName, chartLineIndex) => ({\n            key: chartLineName,\n            values: fullRangeChartData.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[chartLineIndex] !== undefined) ? arr[chartLineIndex] : null\n                };\n            })\n        }));\n\n        // Add temperature overlay on y2 (unless viewing temperature data itself)\n        if (modelName !== 'temperature-values') {\n            const zoomTempData = this.get('zoomTempData');\n            if (zoomTempData && zoomTempData.length) {\n                lines.push({\n                    key: 'T (°C)',\n                    yAxis: 'y2',\n                    hidden: false,\n                    values: zoomTempData.map(item => {\n                        const rawValues = item.get('values');\n                        const arr = Array.isArray(rawValues) ? rawValues : [];\n                        return {\n                            x: moment(item.get('id')).valueOf(),\n                            y: arr[0] !== undefined ? arr[0] : null\n                        };\n                    })\n                });\n            }\n        }\n\n        return lines;\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        let title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                units = this.get(\"yAxisUnit\") || getAttr('units');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName') || 'Load';\n                units = 'kN';\n                break;\n            case 'axial_strain':\n                axisName = \"Axial Strain\";\n                units = \"%\";\n                break;\n            case 'bending_strain':\n                axisName = \"Bending Strain\";\n                units = \"%\";\n                break;\n            case 'axial_displacement':\n                axisName = \"Axial Displacement\";\n                break;\n            case 'temperature':\n                axisName = \"Temperature\";\n                units = \"°C\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const fullRangeChartLinesData = this.get('fullRangeChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildMainChart(fullRangeChartLinesData, yAxisTitle);\n            this._buildOverviewChart();\n        });\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        const datasets = anchorDistances.map((chartLineName, i) => ({\n            label: String(chartLineName),\n            data: fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        anchorDistances.forEach((chartLineName, i) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(chartLineName));\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed, get } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nfunction resetNewInstrumentObject(_this) {\n    //console.log('reset');\n    _this.set('newInstrumentObject', {strokeLength:10000});\n    //_this.set('name', null);\n    _this.set('zeroTimestamp', null);\n    _this.set('installDate', null);\n    //_this.set('east', null);\n    //_this.set('north', null);\n    //_this.set('depth', null);\n    //_this.set('azimuth', null);\n    //_this.set('dip', null);\n    //_this.set('instrumentType', 0);\n    //_this.set('headAt', 'HAC');\n    //_this.set('instrumentLength', 0);\n    //_this.set('strokeLength', 0);\n    //_this.set('referenceAnchor', null);\n    //_this.set('headExclusionLength', 0);\n    //_this.set('gaugeLength', 0);\n    //_this.set('bulbed', false);\n    //_this.set('plated', false);\n    //_this.set('stacked', false);\n    //_this.set('active', true);\n}\n\nexport default class CreatePackInstrument extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n    }\n\n    isAuthenticated = true;\n    newInstrumentObject = {};\n    headAt = 'HAC';\n    zeroTimestamp = null;\n    installDate = null;\n    authError = false;\n    project = null;\n    level = null;\n\n    actions= {\n\n        \n        setProject(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n\n        createInstrument(object){\n            //console.log('test');\n            //console.log(this.get('prevDup'));\n            //console.log((typeof this.get('prevDup') === \"undefined\"));\n\n            let _this = this,\n            store = this.get('store'),\n            newInstrumentObject = this.get('newInstrumentObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newInstrumentObject.id = this.get('id');\n\n            newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n            newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n            newInstrumentObject.active = true;\n\n            if(typeof newInstrumentObject.id === 'undefined' || newInstrumentObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n\n            if(!error) {\n                if(typeof newInstrumentObject.strokeLength === 'undefined' || newInstrumentObject.strokeLength === 0) {\n                    error = true;\n                    this.setError('fieldError',true);\n                    this.setError('isVisibleError',true);\n                }\n            }\n\n            if (this.get('zeroTimestamp') != null) {\n                newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('installDate') != null) {\n                newInstrumentObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            // console.log(get(this, 'duplicateError'));\n\n            let newInstrument = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    //console.log(this.get('prevDup'));\n                    if(err.message.includes('has already been used')) {\n                        //console.log('duplicate');\n                        this.setError('duplicateError',true);\n                        \n                        error = true;\n                        dup = true;\n                    }\n                    // console.log(err.message);\n                }\n            }\n            \n            this.setError('authError', false);\n\n            if (!error) {\n                \n                    newInstrument.save().then(function(results){\n                        // console.log(dup);\n                        if(results.id != null) {\n                            store.createRecord('anchor', {number: 0, distance: 0, instrument: results}).save();\n                            store.createRecord('anchor', {number: 1, distance: 1, instrument: results}).save();\n                        }\n                        if(results.id != null) {\n                            _this.get('submit')(results.id);\n                        } else {\n                            this.setError('isVisibleError',true);\n                            error = true;\n                        }\n                    }).catch(function(reason) {\n                        \n                        _this.setError('isVisibleError',true);\n                        _this.setError('authError',true);\n                    }); \n            } \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let displacementValueObjectValues = _this.get('displacementValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(displacementValueObjectValues).forEach(function(key,index) {\n        displacementValueObjectValues[key] = 0;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n    // newTimestampValue: computed('dateFormat', function() {\n    //     return moment().format(this.get('dateFormat'));\n    // }),\n\n    newDisplacementValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n    displacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    newDisplacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    actions: {\n        setNewDisplacementValue(key, event) {\n            const vals = this.get('newDisplacementValueObjectValues');\n            vals[key] = event.target.value;\n        },\n        setNewTimestampValue(event) {\n            this.set('newTimestampValue', event.target.value);\n        },\n        setTemperatureValue(event) {\n            this.set('temperatureObjectValue', event.target.value);\n        },\n        saveNew(){\n            let _this = this,\n                store = this.get('store'),\n                newDisplacementValuesObject = this.get('newDisplacementValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                displacementValues = this.get('displacementValues'),\n                temperatureValues = this.get('temperatureValues')\n            ;\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newDisplacementValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newDisplacementValuesObject.values = Object.values(this.get('newDisplacementValueObjectValues'));\n\n            const newDisplacementValues = store.createRecord('displacement-value', newDisplacementValuesObject);\n            // save new displacement-value to DB\n            const savedDisplacementValuesObject = newDisplacementValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if displacement-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //displacementValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n                \n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import { getApiBaseUrl } from '../../utils/api-config';\nimport { computed, observer } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    didReceiveAttrs() {\n        this._super(...arguments);\n      },\n    router:service(),\n    store:service(),\n    api:service(),\n    session: service(),\n    //Old Declarations\n    // isAuthenticated : true,\n    selectedVendor: null,\n    selectedModel: null,\n    editing: 0,\n    //New Declarations\n    activeActionTab:null,\n    ordering:null,\n    paginationSearchConfig:{    \n        searchObject:{ calibrationDateOrdering:\"DESC\"},\n        pagination:{page:1, pageSize:5, totalPages:1},\n        alertProfilePaginationList : [],\n    },\n    anchorDiagramInputInitalValue:[],\n    batchSelectedAlertsID:[],\n    isAlertsListVisible:false,\n    isEditAnchorDiagram:false,\n\n    async init() {\n        this._super(...arguments);\n        await this.getAlertsList();\n    },\n    getAlertsList:async function(){\n\n        let payload = {\n            instrumentId: this.get(\"instrument\").id,\n            page: this.paginationSearchConfig.pagination.page,\n            page_size:this.paginationSearchConfig.pagination.pageSize,\n            \n        };\n        if (this.get(\"ordering\") != null ){\n            payload[\"ordering\"] = this.get(\"ordering\");\n        }\n        let url = getApiBaseUrl() + \"/alerts/\";\n        const queryString = new URLSearchParams(payload).toString();\n        if (queryString) {\n            url += `?${queryString}`;\n        }\n        const response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json(); \n            const metaPaginationData = responseData['meta'];\n            this.set(\"paginationSearchConfig.pagination.totalPages\", metaPaginationData['pagination']['total_pages']);\n\n            this.processAlertsList(responseData.data);\n            this.updatePaginationList();\n        }\n        else {\n            this.set(\"alertsList\", [])\n        } \n    },\n    processAlertsList:function(rawList){\n        let list = [];\n        rawList.forEach(element => {\n            let rawElement = element;\n            element = element[\"attributes\"]\n            list.push({\n                id: rawElement[\"id\"],\n                counter: element[\"counter\"],\n                createdAt: element[\"created-at\"],\n                evaluationType: element[\"evaluation-type\"],\n                instrumentId: element[\"instrument-id\"],\n                isAcknowledged: element[\"is-acknowledged\"],\n                isActive: element[\"is-active\"],\n                isMuted: element[\"is-muted\"],\n                lastDataReceivedAt: element[\"last-data-received-at\"],\n                lastEvaluatedAt: element[\"last-evaluated-at\"],\n                lastTriggeredAt: element[\"last-triggered-at\"],\n                level: element[\"level\"],\n                name: element[\"name\"],\n                channels: element[\"channels\"],\n                note: element[\"note\"],\n                parameters: element[\"parameters\"],\n                softResetCounter: element[\"soft-reset-counter\"],\n            })\n        });\n        this.set(\"alertsList\", list)\n    },\n    updatePaginationList: function () {\n        let range = [];\n        const maxPageToShow = 3; // Adjust this based on how many pages you want to show in the middle\n        const paginationObj = this.get('paginationSearchConfig.pagination');\n    \n        // Always include the first page\n        range.push(1);\n    \n        if (paginationObj['totalPages'] <= maxPageToShow + 2) {\n            // If total pages are small enough, show all pages\n            for (let i = 2; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else if (paginationObj['page'] <= maxPageToShow) {\n            // Current page is within the first few pages\n            for (let i = 2; i <= maxPageToShow + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        } else if (paginationObj['page'] >= paginationObj['totalPages'] - maxPageToShow + 1) {\n            // Current page is within the last few pages\n            range.push('...');\n            for (let i = paginationObj['totalPages'] - maxPageToShow; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else {\n            // Current page is in the middle\n            range.push('...');\n            for (let i = paginationObj['page'] - 1; i <= paginationObj['page'] + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        }\n    \n        this.set('paginationSearchConfig.alertProfilePaginationList', range);\n    },\n    orderingObserver: observer('ordering',async function() {\n        await this.getAlertsList();\n    }), \n    anchorDiagramLabelInitalValue:computed(\"instrument\", function(){\n        let data = {};\n        ((_a) => _a.content ?? _a)(this.get(\"instrument\").anchors).forEach((anchorObj, i)=>{\n            if(i == 0){\n                \n            }\n            else{\n                data[`channel_${i}`] = anchorObj.distance;\n            }\n        })\n        return data;\n    }),\n    licenceIsValid: computed('',function() {\n        let valid = false;\n        try {\n            valid = this.session.data.authenticated.isValid;\n        } catch {}\n        return valid;\n    }), \n\n    actions:{\n        async saveAnchors(){\n            try{\n                let anchors = this.get(\"instrument.anchors\");\n                let anchorMap = {};\n\n                (anchors.content ?? anchors).forEach(anchor => {\n                anchorMap[anchor.get(\"number\")] = anchor;\n                });\n                let savePromises = [];\n\n                let channels = this.get(\"instrument\").channelsNum;\n                for (let i = 0; i < channels; i ++){\n                    let anchorNumber = i;\n                    let newDistance = (i === 0)\n                        ? 0\n                        : this.get(\"anchorDiagramInputInitalValue\")[`channel_${i}`] \n                            ? this.get(\"anchorDiagramInputInitalValue\")[`channel_${i}`]\n                            : 0;\n  \n                    let existingAnchor = anchorMap[anchorNumber];\n                    if (existingAnchor) {\n                        // Update if value changed\n                        if (existingAnchor.get(\"distance\") !== newDistance) {\n                            existingAnchor.set(\"distance\", newDistance);\n                            savePromises.push(existingAnchor.save());\n                        }\n\n                    } else {\n                        // Create new anchor\n                        let newAnchor = this.get(\"store\").createRecord(\"anchor\", {\n                            instrument: this.get(\"instrument\"),\n                            number: anchorNumber,\n                            distance: newDistance\n                        });\n\n                        savePromises.push(newAnchor.save());\n                    }\n                }\n                await Promise.all(savePromises);\n                window.location.reload();\n            }\n            catch(error){\n                console.log(\"Error in saveAnchors: \" + error)\n                console.log(error);\n            }\n        },\n        updateChannelInput(key, value){\n            try{\n                let anchors = this.get(\"anchorDiagramInputInitalValue\");\n                anchors[key] = value ? value : 0;\n                this.set(\"anchorDiagramInputInitalValue\", anchors)\n            }\n            catch(error){\n                console.log(\"Error in updateChannelInput: \" + error)\n            }\n        },\n        cycleEditAnchorDiagram(){\n            let data = {};\n            ((_a) => _a.content ?? _a)(this.get(\"instrument\").anchors).forEach((anchorObj, i)=>{\n                if(i == 0){\n                    \n                }\n                else{\n                    data[`channel_${i}`] = anchorObj.distance;\n                }\n            })\n            this.set(\"anchorDiagramInputInitalValue\", data)\n            this.set(\"isEditAnchorDiagram\", !this.get(\"isEditAnchorDiagram\"));\n        },\n        cycleActionBar(tabName){\n            if (tabName === this.activeActionTab){\n                this.set(\"activeActionTab\", null);\n            }\n            else{ \n                this.set(\"activeActionTab\", tabName);\n            }\n        },\n        async jumpToPage(page){\n            try{\n                if(page != \"...\"){\n                    this.set('paginationSearchConfig.pagination.page', Number.parseInt(page))\n                    await this.getAlertsList();\n                }\n            }\n            catch(err){\n\n            }\n        },\n        cycleAlertsListVisibility(){\n            this.set(\"isAlertsListVisible\", !this.get(\"isAlertsListVisible\"));\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        viewData(id) {\n            let endDateObj = new moment();\n            let startDateObj = moment(endDateObj).subtract(7, 'days').format('YYYY-MM-DDTHH:mm');\n            let formattedEndDateObj = endDateObj.format('YYYY-MM-DDTHH:mm');\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\");\n            this.get('router').transitionTo('raw-data', id, { queryParams: { \"advancedStartDate\": startDateObj, \"advancedEndDate\": formattedEndDateObj, \"advancedYAxisUnit\": baseUnit}});\n            //this.viewData(id);\n        },\n        tGraph(id) {\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\") || \"RAW\";\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values', { queryParams: { \"advancedYAxisUnit\": baseUnit}});\n            //this.tGraph(id, 'displacement-values');\n        },\n        sGraph(id) {\n            this.get('router').transitionTo('spatial-graphs.spatial-graph', id, 'displacement-values');\n            //this.sGraph(id, 'displacement-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveInstrument(){\n            const _this = this;\n            // console.log(\"test\");\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/instruments\";    \n                }\n            } else {\n                window.location.href = \"/instruments\";\n            }            \n        }\n    }\n})","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { copy } from 'ember-copy';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'spatial-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    progressAnimationDuration: 100, //set 50, was 700\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 50, //set 25, was 500\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return this.get('blastEvents').map(function(event) {\n                return {\n                    type: 'Blast',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n            var chartData = { values: item.get(\"values\") };\n\n            var modelName = this.get('chartDataModelName');\n\n            if (modelName === 'strain-values') { \n                chartData.values.unshift(chartData.values[0]);\n            }\n                        \n            return chartData;\n        } catch (error) {\n            return [];\n        }\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n        try {\n            return { values: item.get(\"values\") };            \n        } catch (error) {\n            return [];\n        }\n    }),\n\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && modelName === 'strain-values') {\n            anchorDistances.splice(0, 1);\n        }\n        return anchorDistances;\n    }),\n\n    // calculate mid distances between anchors for strain values\n    anchorMidDistances: computed('anchorDistances', function() {\n        let anchorDistances = copy(this.get('anchorDistances')),\n            dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            midDistances = []\n        ;\n\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        anchorDistances.unshift(0);\n\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            let mid = (anchorDistances[i] + anchorDistances[i + 1]) / 2;\n            midDistances.push( +mid.toFixed(2) );\n        }\n\n        return midDistances;\n    }),\n\n    anchorColors: d3.scale.category10().range(),\n\n    anchorDistancesChartReferencePoints: computed('chartDataModelName', 'instrument', 'anchorDistances', 'anchorMidDistances', function() {\n        let anchorDistances = this.get('anchorDistances');\n        var modelName = this.get('chartDataModelName');\n        var anchorMidDistances = this.get('anchorMidDistances');\n\n        //console.log(this.get('instrument').get('instrumentTypeID'));\n\n        if(modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            return anchorMidDistances.map(function(anchorDistance){\n                return {\n                    key: anchorDistance,\n                    type: 'referencePoints',\n                    values: [\n                        anchorDistance\n                    ]\n                };\n            });\n                \n        }\n\n        return anchorDistances.map(function(anchorDistance){\n            return {\n                key: anchorDistance,\n                type: 'referencePoints',\n                values: [\n                    anchorDistance\n                ]\n            };\n        });\n    }),\n\n    inlineHoverValuesSideOffset: computed('chartDataModelName', function() {\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values') {\n            return 28;\n        }\n        return 0;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints'),\n            anchorDistances = this.get('anchorDistances'),\n            anchorDistancesChartReferencePoints = this.get('anchorDistancesChartReferencePoints')\n        ;\n        let zoomChartLinesData = [];\n\n        var modelName = this.get('chartDataModelName');\n\n        zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n            return {\n                key: chartLineIndex,\n                // mean: 3,\n                type: 'lines',\n                timestamp: zoomTimePoints[chartLineIndex],\n                values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        anchorDistances[dataPointIndex],\n                        dataPoint\n                    ];\n                })\n            };\n        });\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (anchorDistancesChartReferencePoints) {\n            zoomChartLinesData = zoomChartLinesData.concat(anchorDistancesChartReferencePoints);\n        }\n\n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        var modelName = this.get('chartDataModelName');\n        var type = this.get('instrument').get('instrumentType').get('title');        \n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[chartLineIndex]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n    }),\n\n    numLines: computed('zoomTimePoints', function() {\n        return this.get('zoomTimePoints').length;\n    }),\n\n    lineDrawDelay: computed('numLines', function() {\n        return (13000 / (this.get('numLines') + 1)) ^ (1 / 20);\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            inlineHoverValuesSideOffset = _this.get('inlineHoverValuesSideOffset'),\n            progressAnimationDuration = _this.get('progressAnimationDuration'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n\n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let axisName = '';\n                let units = chartData.get('units');\n                units = \"μm\"\n                switch(yAxisLegend.get('title')) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        // units = \"%\";\n                        units = \"μ ε\"\n\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"μ ε/day\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n                \n                title = axisName + \" (\" + units + \")\";\n            }\n\n            let zoomChart = nv.models.lineChartProgressAnimationAPI()\n                .margin({top: 55, right: 10, bottom: 85, left: 60})\n                .useInteractiveGuideline(false)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .distXAxisScale(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .showLegend(true)\n                .progressAnimationDuration(progressAnimationDuration)\n                .showXAxis(true)\n                .noData('No usable data')\n                ;\n\n\n            let length = 0;\n            try {\n                length = _this.instrument.get('instrumentLength');\n                let type = _this.instrument.get('instrumentType');\n                if (type === 'dRebar') {\n                    length = length * 1000;\n                }\n                \n            } catch (ex) {\n\n            }\n            \n            if(length !== null && length === 0) {\n                length = 0;\n            }\n\n            zoomChart.forceX([0, length]);\n/*             if (yAxisLegend.get('title') != 'bending_strain' && yAxisLegend.get('title') != 'axial_strain') {\n                \n            }\n */\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .tickFormat(d3.format(\".2f\"))\n                    // .tickFormat(function(d) {\n                    //     let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                    //     return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    // })\n                    ;\n                zoomChart.yAxis\n                    .axisLabel(title)\n                    .tickFormat(d3.format(\".2f\"));\n\n                zoomChart.distXAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .ticks(5)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(45)\n                    .isDistXTooltip(isDistXTooltip)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2);\n\n                //zoomChart.legend.inlineHoverValuesSideOffset(inlineHoverValuesSideOffset);\n\n                zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n\n                }\n\n/*                 zoomChart.xAxis.dispatch.on('xAxisMouseMove', function (mouseMove) {\n                    console.log('test');\n                });\n */\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log('test');\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n\n                    if (!seismicEventsArray.length || !blastEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (!activeTooltipContent) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                return zoomChart;\n            });\n\n            // declare fullRangeChart because later in zoom chart we need axis from fullRangeChart for events axis on zoomChart\n            let fullRangeChart = nv.models.focus(nv.models.line())\n               .margin({top: 10, right: 10, bottom: 30, left: 60})\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .syncBrushing(false)\n                .independentBrushing(true)\n                .showXAxis(true)\n                .showYAxis(false)\n                ;\n\n\n            nv.addGraph(function() {\n\n                fullRangeChart.xAxis\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n                fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n                fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(fullRangeChart.update);\n\n                // set zoom based on query params if set\n                let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n                let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n                if (startTimestamp && endTimestamp) {\n                    fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n                }\n\n                return fullRangeChart;\n            });\n\n        });\n\n    }\n\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n//import JSONAPISerializer from '@ember-data/serializers/json';\n\nexport default Component.extend({\n\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n    yAxisUnit:null,\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if(yAxisUnitParam){\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    // vibeEventsChartDistXData: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log('vibeEvents');\n    //     //console.log(events);\n    //     if ( this.get('vibeEvents') ) {\n    //         return [{\n    //             key: 'BluVibe',\n    //             type: 'distX',\n    //             color: '#80bf5c',\n    //             values: this.get('vibeEvents').map(function(event) {\n    //                 return [\n    //                     moment( event.get('id') ).valueOf(),\n    //                     event.get('size') ? (event.get('size') * -20) + 20 : 20\n    //                 ];\n    //             })\n    //         }];\n    //     }\n    //     return false;\n    // }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            let data_set = this.get('blastEvents').map(function(event) {\n                //console.log(event.get('timestamp'));\n                return {\n                    type: 'Blast',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n            //console.log(data_set);\n            return data_set;\n        }\n        return false;\n    }),\n\n    // vibeEventsArray: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log(events);\n    //     if ( events ) {\n    //         return events.map(function(event) {\n    //             return {\n    //                 type: 'BluVibe',\n    //                 time: event.get('id'),\n    //                 timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n    //                 ppa: event.get('ppa'),\n    //                 ppv: event.get('ppv'),\n    //                 freq: event.get('frequency')\n    //             };\n    //         }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n    //     }\n    //     return false;\n    // }),\n\n    zoomTempPoints: map('zoomTempData', function(item){\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        return chartData;\n    }),\n\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n\n        //console.log(linesKyes);\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n        chartData.values[1] = chartData.values[1]; //MANUAL convert to μm\n\n        var modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') { \n            chartData.values.push(0);\n        }\n        //console.log(chartData);\n        return chartData;\n        } catch(e) { return { values: [] }; }\n    }),\n\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n        var chartData = { values: item.get(\"values\") }\n        chartData.values[1] = chartData.values[1]; //MANUAL convert to μm\n\n        return chartData;\n    }),\n\n/*     fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        let chartData = this.get('fullRangeChartData');\n        let dataValuesCount;\n        try {\n            dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n        let anchors = this.get('instrument').get('anchors');\n        \n        const arr = anchors.content ?? anchors;\n        \n        let anchorDistances = arr.map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        //anchorDistances.push('T'); //TODO: add temperature\n\n        //IF chart is Strain-Values chart\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') { \n            var midPoints = [];\n            for(var ctr = 0; ctr < anchorDistances.length-1; ctr++) {\n                midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n            }\n            if(modelName==='displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        }\n        //console.log(anchorDistances);\n        return anchorDistances;\n    }),\n\n//    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n            const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTempPoints = this.get('zoomTempPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n\n        //console.log(blastEventsChartDistXData);\n        //console.log(vibeEventsChartDistXData);\n\n        let anchorDistances = this.get('anchorDistances'),\n            zoomChartLinesData = []\n        ;\n\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n        //console.log(zoomTempPoints.length);\n\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            if (_this.get('chartDataModelName') !== 'displacement-values'){\n                while(zoomTempPoints.length > zoomDataPoints.length) {\n                    zoomTempPoints.pop();\n                    zoomTempPoints.shift();\n                }\n            }\n            var temp = {key: 'T',\n                type: 'lines',\n                yAxis: 2,\n                values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null,\n                    ];\n                })\n            };\n            //console.log(temp);\n            zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                    ];\n                })\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').queryRecord('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            //vibeEventsArray = this.get('vibeEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0]; \n                \n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let instType = _this.instrument.get('instrumentType').get('title');\n\n                let axisName = '';\n                let units = chartData.get('units');\n                title = yAxisLegend.get('title');\n                \n                switch(title) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        units = _this.get('yAxisUnit') ? _this.get('yAxisUnit') :  \"μm\";\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        // units = \"%\";\n                        units = \"μ ε\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"μ ε/day\";\n                        break;\n                    case 'temperature':\n                        axisName = \"Temperature\";\n                        units = \"°C\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n\n                if (yAxisLegend) {\n                    let raw = _this.raw;\n                    title = axisName + \" (\" + units + \")\";\n                } else {\n                    title = axisName + \" (\" + units + \")\";\n                }\n                //title = yAxisLegend.get('unit');\n            }\n\n            function usesPoints(chartName) {\n                //console.log(chartName);\n                switch(chartName) {\n                    case 'event-ppv':\n                    case 'event-ppa':\n                        return true;\n                }\n                return false;\n            }\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(usesPoints(_this.get('chartDataModelName')))\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data')\n            ;\n\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n\n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(vibeEventsArray);\n                    //console.log(distXMouseMove);\n/* \n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    } */\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length){//} || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            //activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) { _this.setData(zoomChartLinesData); }\n                if (_this.setChart) { _this.setChart(zoomChart); }\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n        \n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    isModalOpen: false,\n    modalMode: 'add', // 'add' | 'edit'\n    modalEditingRowId: null,\n\n    anchorLabels: computed('instrument', function(){\n        const anchors = this.get('instrument') ? this.get('instrument').get('anchors') : null;\n        const arr = (anchors && (anchors.content ?? anchors)) || [];\n        let validCounter = 0;\n        return arr.map((anchor, idx) => {\n            const distance = anchor.get ? anchor.get('distance') : (anchor && anchor.distance);\n            const isUnset = (distance == null || distance === '');\n            if(isUnset){\n                return { index: idx, tableLabel: '', modalLabel: 'Anchor N/A', isUnset: true };\n            }\n            validCounter += 1;\n            return { index: idx, tableLabel: String(distance), modalLabel: `Anchor ${validCounter}`, isUnset: false };\n        });\n    }),\n\n    columnSpecs: computed('anchorLabels', function(){\n        const anchors = this.get('anchorLabels') || [];\n        const out = anchors.map((a) => ({\n            key: `anchor_${a.index}`,\n            label: a.modalLabel,\n            tableLabel: a.tableLabel,\n            valuesIndex: a.index,\n        }));\n        out.push({ key: '__temp__', label: 'Temperature', tableLabel: 'Temperature', isTemp: true });\n        return out;\n    }),\n\n    tableRows: computed('displacementData.[]', 'temperatureData.[]', 'columnSpecs', 'globalDatetimeFormat.value', function(){\n        const dispData = this.get('displacementData') || [];\n        const tempData = this.get('temperatureData') || [];\n        const specs = this.get('columnSpecs') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n\n        const tempById = {};\n        tempData.forEach(r => { tempById[r.id] = r; });\n\n        return dispData.map((dispRow) => {\n            const id = dispRow.id;\n            const dispValues = (dispRow.values || dispRow.get?.('values') || []);\n            const tempRow = tempById[id];\n            const tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n\n            const cells = specs.map((spec) => {\n                let value = '';\n                if(spec.isTemp){\n                    value = tempValues[0];\n                }else{\n                    value = dispValues[spec.valuesIndex];\n                }\n                return { key: spec.key, label: spec.label, value: value == null ? '' : value };\n            });\n            const formattedDate = moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt);\n            return { id, date: id, formattedDate, cells };\n        });\n    }),\n\n    modalFields: computed('columnSpecs', 'modalMode', 'modalEditingRowId', 'tableRows.[]', function(){\n        const specs = this.get('columnSpecs') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingRowId');\n\n        let existingRow = null;\n        if(mode === 'edit' && editingId){\n            existingRow = (this.get('tableRows') || []).find(r => r.id === editingId);\n        }\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && existingRow\n                ? moment(existingRow.date, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm')\n                : moment().format('YYYY-MM-DDTHH:mm'),\n        };\n\n        const cellByKey = {};\n        if(existingRow){\n            existingRow.cells.forEach(c => { cellByKey[c.key] = c.value; });\n        }\n\n        const channelFields = specs.map((spec) => ({\n            key: spec.key,\n            label: spec.label,\n            type: 'text',\n            value: cellByKey[spec.key] != null ? cellByKey[spec.key] : '',\n        }));\n\n        return [dateField, ...channelFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function(){\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingRowId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingRowId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const instrumentId = this.get('instrument.id');\n            const dispData = this.get('displacementData');\n            const tempData = this.get('temperatureData');\n            const dispRow = dispData ? dispData.find(r => r.id === rowId) : null;\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            const promises = [];\n            if(dispRow && dispRow.deleteRecord){ dispRow.deleteRecord(); promises.push(dispRow.save(adapterOptions)); }\n            if(tempRow && tempRow.deleteRecord){ tempRow.deleteRecord(); promises.push(tempRow.save(adapterOptions)); }\n            Promise.all(promises)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const specs = this.get('columnSpecs') || [];\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            const dispValues = [];\n            specs.forEach((spec) => {\n                if(spec.isTemp){ return; }\n                dispValues.push(Number(snapshot[spec.key]) || 0);\n            });\n            const tempValues = [Number(snapshot['__temp__']) || 0];\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingRowId');\n\n            const tempData = this.get('temperatureData') || [];\n            const dispData = this.get('displacementData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            if(isEdit && originalId === newId){\n                const tempRow = findRow(tempData, originalId);\n                const dispRow = findRow(dispData, originalId);\n                const promises = [];\n                if(tempRow){ tempRow.set('values', tempValues); promises.push(tempRow.save(adapterOptions)); }\n                if(dispRow){ dispRow.set('values', dispValues); promises.push(dispRow.save(adapterOptions)); }\n                Promise.all(promises).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                const oldDisp = findRow(dispData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n                if(oldDisp){ oldDisp.deleteRecord(); oldDisp.save(adapterOptions); }\n            }\n\n            const tempRecord = store.createRecord('temperature-value', { id: newId, values: tempValues });\n            tempRecord.save(adapterOptions);\n\n            const dispRecord = store.createRecord('displacement-value', { id: newId, values: dispValues });\n            dispRecord.save(adapterOptions).then(refreshRoute).catch(handleErr);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","export { default } from 'ember-modal-dialog/components/modal-dialog';\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\n// Chart line colors — sourced from color-palette, extended with repeating palette for many anchors\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    // Load and unify anchor distances from up to 5 slave instrument positions.\n    // Each slave exto's distances are offset by the cumulative last-anchor distance\n    // of all previous slave extos, so they read as one continuous multi-exto depth.\n    async _loadAnchorDistances() {\n        const positionLabels = [\n            'instrumentPosition1', 'instrumentPosition2', 'instrumentPosition3',\n            'instrumentPosition4', 'instrumentPosition5'\n        ];\n\n        const slaveData = (await Promise.all(\n            positionLabels.map(async (label) => {\n                const position = this.get('instrument').get(label);\n                if (position == null) return null;\n                try {\n                    const anchors = await position.get('anchors');\n                    const distances = (anchors.content ?? anchors).map(a => a.get('distance'));\n                    return { id: position['id'], anchorDistances: distances };\n                } catch (e) {\n                    return {};\n                }\n            })\n        )).filter(obj => obj !== null);\n\n        let finalDistances = [];\n        let offsetValue = 0;\n\n        slaveData.forEach((slave, i) => {\n            const distances = slave.anchorDistances || [];\n            if (i === 0) {\n                finalDistances = finalDistances.concat(distances);\n            } else {\n                distances.forEach((distance, index) => {\n                    if (index !== 0) {\n                        const newDist = parseFloat(\n                            (parseFloat(distance) + parseFloat(offsetValue)).toFixed(2)\n                        );\n                        finalDistances.push(newDist);\n                    }\n                });\n            }\n            offsetValue = finalDistances.slice(-1)[0] || 0;\n        });\n\n        const modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            const midPoints = [];\n            for (let ctr = 0; ctr < finalDistances.length - 1; ctr++) {\n                midPoints[ctr] = ((finalDistances[ctr] + finalDistances[ctr + 1]) / 2).toFixed(2);\n            }\n            return midPoints;\n        }\n\n        return finalDistances;\n    },\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        let title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                units = this.get('yAxisUnit') || getAttr('units');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += '/day';\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += '/day²';\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = '%';\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = '%/day';\n                break;\n            case 'temperature':\n                axisName = 'Temperature';\n                units = '°C';\n                break;\n            default:\n                axisName = 'Unknown';\n        }\n        return `${axisName} (${units})`;\n    },\n\n    async didInsertElement() {\n        this._super(...arguments);\n\n        // Load anchor distances asynchronously from slave instrument positions\n        const anchorDistances = await this._loadAnchorDistances();\n\n        // Main chart sourced from zoomChartData to mirror NVD3 (Group By applies to visible chart).\n        const fullRangeChartData = this.get('zoomChartData');\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n\n        // Build one line per anchor distance.\n        // values[0] in each reading is the instrumentID — skip it with slice(1).\n        const lines = anchorDistances.map((chartLineName, chartLineIndex) => ({\n            key: String(chartLineName),\n            values: fullRangeChartData.map(item => {\n                const rawVals = item.get('values') || [];\n                const vals = rawVals.slice(1); // strip instrumentID at index 0\n                const arr = isStrain ? [...vals, 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: arr[chartLineIndex] !== undefined ? arr[chartLineIndex] : null\n                };\n            })\n        }));\n\n        // Temperature overlay on y2 — uses values[1] (after the instrumentID at [0])\n        if (modelName !== 'temperature-values') {\n            const zoomTempData = this.get('zoomTempData');\n            if (zoomTempData && zoomTempData.length) {\n                lines.push({\n                    key: 'T (°C)',\n                    yAxis: 'y2',\n                    hidden: false,\n                    values: zoomTempData.map(item => {\n                        const rawValues = item.get('values');\n                        const arr = Array.isArray(rawValues) ? rawValues : [];\n                        return {\n                            x: moment(item.get('id')).valueOf(),\n                            y: arr[1] !== undefined ? arr[1] : null\n                        };\n                    })\n                });\n            }\n        }\n\n        // multiDExto uses chartData for type \"1\" (same as pack/exto) for y-axis units\n        const yAxisLegend = await Promise.resolve(this.get('yAxisLegend'));\n        let chartData = this.get('chartData');\n        chartData.forEach(item => {\n            if (item.id === '1') { chartData = item; }\n        });\n\n        const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n        this._buildMainChart(lines, yAxisTitle);\n        this._buildOverviewChart();\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        const datasets = anchorDistances.map((chartLineName, i) => ({\n            label: String(chartLineName),\n            data: fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        anchorDistances.forEach((chartLineName, i) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(chartLineName));\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\nimport { getChannelsFromId } from '../../utils/instrument-id';\n\nfunction resetNewInstrumentObject(_this) {\n    //console.log('reset');\n    _this.set('newInstrumentObject', {});\n\n}\n\nexport default class CreateMultiExtoInstrument extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n        // this.loadInstruments(this.instrumentList);\n    }\n    \n    headAt = 'HAC';\n\n    loadInstruments(instruments) {\n        const rawData = instruments; // Assuming instruments is an array of instruments objects\n        // console.log(\"raw instrument data::::\")\n        // console.log(rawData)\n        // Filter instruments to get a list of only multi-dExto instruments\n        \n        const filteredInstruments = rawData.filter(function (instrument) {\n            if(instrument.active == true && instrument.get('instrumentType').title.toLowerCase() === 'dexto'){\n                return instrument.get('instrumentType').title.toLowerCase() === 'dexto';\n            }\n        });\n\n        const mappedGateways = filteredInstruments.map( (instrument, index) => {\n            // Retrieve parent gateway record based on available information\n            \n            // console.log(\"instrument::::\")\n            // console.log(instrument);\n            // console.log(instrument.get('headAt').get('title'));\n    \n            let instr = {\n                title: instrument.get('id') + ' - ' + instrument.get('headAt').get('title'),\n                id: index + 1, \n                instrumentID: instrument.get('id'),\n                position:instrument.get('headAt').get('title'),\n                data: instrument\n            };\n            return instr;\n        });\n    \n        this.set('instruments', mappedGateways);\n        // console.log(\"instrumentlist::::\")\n        // console.log(this.get('instruments'));\n    }\n    buildInstrumentID(){\n        // console.log(\"Building new instrument ID\")\n        let newID = \"9999\" + this.buildInstrumentChannels();\n        return newID;\n    }\n    buildInstrumentChannels(){\n        const selectedInstrList = this.get('selectedInstruments');\n        let numberOfChannels = \"\";\n        selectedInstrList.forEach((instr) => {\n            const channels = getChannelsFromId(instr.instrumentID);\n            if(channels > 0){ numberOfChannels += channels; }\n        });\n        return numberOfChannels;\n    }\n    maxAllowedExtos = 2;\n    isAuthenticated = true;\n    installDate = null;\n    authError = false;\n    extoInputError = false;\n    loading = false;\n    searchedValue = \"\";\n    instrumentList = [];\n    selectedInstruments = [];\n    searchInstruments=[];\n\n    actions= {\n        onDropdownSearch(value){\n            this.set(\"searchedValue\", value);\n        },\n        async searchForExto(){\n            // console.log('Searching with:' + this.get('searchedValue'));\n\n            try {\n                this.set(\"loading\", true);\n                let store = this.get('store');\n                let respData = await store.query('instrument', {small: 'false', search: this.get('searchedValue')}).then((data)=>{\n                    return data;\n                })\n                // console.log(\"respData  is\")\n                this.loadInstruments(respData);\n                this.set(\"loading\", false);\n\n            } catch (error) {\n                this.set(\"extoInputError\", true);\n            }\n\n        },\n        \n        async setID(instr){\n            const instrumentList = this.get(\"instruments\");\n            // console.log(\"setID::::::instrumentlist::::\")\n            // console.log(instrumentList);\n            // console.log(\"selected instrument::::\")\n            // console.log(instr);\n            // console.log(\"selected list::::\")\n            // console.log(this.selectedInstruments);\n            if(this.selectedInstruments.length == this.get(\"maxAllowedExtos\")){\n            }else{\n                if(instr != null && !this.selectedInstruments.includes(instr)){\n                    // Only append to the list if < 5 items\n                    this.selectedInstruments.addObject(instr)\n                    this.set('selectedInstruments', this.selectedInstruments);\n                    // console.log(\"updated selectedInstruments::::\")\n                    // console.log(this.selectedInstruments);\n                }\n            }\n        },\n        resetInstrument(object){\n            // console.log(\"resetting selected instruments\")\n            this.set('selectedInstruments', []);\n        },\n        createInstrument(object){\n\n            // console.log(\"Clicked create::::\" + this.selectedInstruments.length);\n\n            if (this.selectedInstruments.length > 0){\n                let _this = this,\n                store = this.get('store'),\n                newInstrumentObject = this.get('newInstrumentObject');\n\n                this.setError('isVisibleError',false);\n                this.setError('duplicateError',false);\n                this.setError('fieldError',false);\n\n                let error = false;\n                // console.log(\"before for loop, newInstrumentObject:::::;\");\n                // console.log(newInstrumentObject)\n\n                newInstrumentObject.id = '999999999'; //this.get('id');\n                newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n                newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n                newInstrumentObject.active = true;\n\n\n                let newInstrumentID = '999999999'; //this.buildInstrumentID();\n                // console.log(\"new instr ID:::::\" + newInstrumentID );\n                // newInstrumentObject.instrumentID = newInstrumentID;\n\n                if (this.get('zeroTimestamp') != null) {\n                    newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n                }\n                \n                let dup = false;\n                if(!error && this.selectedInstruments.length > 0 && this.selectedInstruments.length <= 5 ) {\n                    this.selectedInstruments.forEach((instr, index) => {\n                        // console.log(\"creating a new instr obj\");\n                        let instrumentPosition = \"instrumentPosition\" + (index + 1); //instrumentPosition1, instrumentPosition2,...,\n                        newInstrumentObject[instrumentPosition] = instr.data;\n                    });\n                }\n                // console.log(\"after for loop, newInstrumentObject:::::;\");\n                // console.log(newInstrumentObject)\n                // look to see if dummy id exists already.\n                let existingInstrument = store.peekRecord('instrument', newInstrumentObject.id);\n\n                // remove from store if it does.\n                if (existingInstrument) {\n                    // Unload the existing record from the store\n                    store.unloadRecord(existingInstrument);\n                }\n                let newInstrument;\n                try {\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    \n                    console.log(err);\n                    if(err.message.includes('has already been used')) {\n                        //console.log('duplicate');\n                        this.setError('duplicateError',true);\n                        \n                        error = true;\n                        dup = true;\n                    }\n                    // console.log(err.message);\n                }\n\n                this.setError('authError', false);\n\n                if (!error) {\n                    \n                        newInstrument.save().then(function(results){\n                            // console.log(dup);\n                            if(results.id != null) {\n                                _this.get('submit')(results.id);\n                            } else {\n                                this.setError('isVisibleError',true);\n                                error = true;\n                            }\n                        }).catch(function(reason) {\n                            \n                            _this.setError('isVisibleError',true);\n                            _this.setError('authError',true);\n                        }); \n                } \n            }\n        }\n    }\n}","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport gateway from '../../models/gateway';\n\n\nexport default Component.extend({\n    session: service(),\n    isRowDeleteConfirmationDialog: {},\n    store: service(),\n    rowData:[],\n    masterModifiedRawData:[],\n    init() {\n        this._super(...arguments);\n        // Inspecting gateway when the component is initialized\n        // let displacementValueObject = this.get('displacementValueObject');\n        // console.log(\"displacementValueObject\");\n        // console.log(displacementValueObject);\n        let displaceRowvalues = this.get('displacementValueObject.values');\n        // let displaceRowvalues = [0,1,2,3,4,5,6, 7,8,9,10,11,12,13,14,15,16,17,18,19,20, 21,22,24,25];\n        let tempRowValues = this.get('temperatureValuesModel').objectAt(Number(this.key));\n        this.buildMainRowData(this.multiExtoInstr, displaceRowvalues, tempRowValues)\n\n    },\n    buildMainRowData: function(multiExtoInstr, values, tempRowValues){\n        //trim the fat array of displacement values to skip the first 0. \n        console.log(\"values::::\" + values)\n        // console.log(\"multiExtoInstr::::\")\n        // console.log(multiExtoInstr)\n        let mainData = [];\n        let i =0\n        for(const instr_position_index of ['1', '2', '3', '4', '5']){\n            // console.log(\"instr_position_index::::\", instr_position_index)\n            let instrumenPositionObj = multiExtoInstr['instrumentPosition'+instr_position_index]\n            if(instrumenPositionObj != null){\n                let subExtoID = instrumenPositionObj.id;\n                let channels = \"\";\n                let subRowData = [];\n                //extract the number of channels \n                if(subExtoID.length == 9){\n                    channels = subExtoID[4]\n        \n                }else{\n                    channels = subExtoID.slice(4,6)\n                }\n\n\n                //pushing displacement values into row data \n                // console.log(\"values.length is : \", values.length)\n                // console.log(\"before while loop, i is : \", i)\n                while(i < values.length){\n                    if(subRowData.length == channels){\n                        break;\n                    }else{\n                        subRowData.push(values[i]);\n                    }\n                    // console.log(\"end of loopsubRowData: \", subRowData)\n                    i++;\n                }\n\n                //pushing temperature values into row data \n                subRowData.push(tempRowValues.values[Number(instr_position_index)-1])\n                mainData.push(subRowData);\n                // console.log(\"instrumenPositionObj ID: \", instrumenPositionObj, \" has # of channels: \", channels)\n            }        \n            // console.log(\"mainData: \", mainData)\n            // console.log(\"masterDataArray::::\", masterDataArray);            \n        }\n\n        //part II after deeply massaging the data, need to adjust it so that it comforms to offset values\n        // mainData.forEach((arr, index)=>{\n        //     if(index == 0){\n        //         //do nothing\n        //     }else{\n        //         const prevArrayIndex = index - 1; \n        //         const prevArray = mainData[prevArrayIndex];\n        //         console.log(\"prevArrayIndex::::\", prevArrayIndex);   \n        //         console.log(\"prevArray::::\", prevArray);   \n        //         let offsetVal = prevArray.slice(-2);\n        //         arr.forEach((val, i)=>{\n        //             if( i == (arr.length - 1)){\n        //                 // arr[i] =val;\n        //             }else{\n        //                 arr[i] = Number.parseFloat(val) + Number.parseFloat(offsetVal);\n        //                 arr[i] = Number.parseFloat(arr[i]).toFixed(2); \n        //             }\n                    \n\n        //         })\n                \n        //     }\n        // })\n        console.log(\"mainData: \",mainData);\n        this.set(\"rowData\", mainData);\n    },\n    buildCustomAnchors: computed(async function(extoInstrumentObj) {\n        //This helper function will build the data to be displayed for each instrument_Position\n        // console.log(\"extoInstrumentObj:\", extoInstrumentObj);\n\n\n        if(extoInstrumentObj != \"\" && extoInstrumentObj != null){\n\n            let channels = \"\"\n            let anchors = [];\n            let subExtoID = extoInstrumentObj.instrumentID\n\n            //extract the number of channels \n            if(subExtoID.length == 9){\n                channels = subExtoID[4]\n\n            }else{\n                channels = subExtoID.slice(4,6)\n            }\n            // console.log(channels, \" number of channels\");\n\n    \n            let instrPositionAttributesObj = await this.store.findRecord('instrument', subExtoID).then(async function(instrument){\n                // console.log(\"instrument is\");\n                // console.log(instrument);\n                //U have to use this await and .then() to call attributes who are Classes. If it is regularly str or int fields, then just directly call it\n                let anchorPt = await instrument.get('anchors').then(obj=>{\n                    let anchorPt = '';\n                    obj.forEach(element => {       \n                        anchorPt == \"\" ? anchorPt += element.get('distance') : anchorPt += \"-\" + element.get('distance');\n                    });\n                    return anchorPt \n                });\n                anchorPt = anchorPt == \"\" ? \"N/A\" : anchorPt;\n                return {anchors:anchorPt};\n            }).catch(function(reason){\n                return {anchors:\"\"};        \n            });\n    \n\n            // for(let i = 0; i < channels; i++){\n            //     anchors.push(i == 0 ? \"CH0\" : \"CH\"+i);\n            // }\n\n            this.set(\"instrPositionAttributesObj\", instrPositionAttributesObj)\n        }\n        \n    }),\n    getSpecificRowData:computed(function(){\n        // console.log(\"called : getSpecificRowData\");\n        let currMultiDExto = this.get(\"multiExtoInstr\");\n        let currentExtoInstr = this.get(\"currentExtoInstr\");\n        for(const instr_position_index of ['1', '2', '3', '4', '5']){\n            // console.log(\"instr_position_index::::\", instr_position_index)\n            let instrumenPositionObj = currMultiDExto['instrumentPosition'+instr_position_index]\n            if(instrumenPositionObj != null && instrumenPositionObj.id == currentExtoInstr.instrumentID){\n                let index = Number(instr_position_index) - 1;\n                // console.log(\"getSpecificRowData: \", this.get(\"rowData\")[index])\n                return this.get(\"rowData\")[index];\n            }\n        }\n        return [];\n    }),\n    actions: {\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n\n})\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport gateway from '../../models/gateway';\n\n\nexport default Component.extend({\n    session: service(),\n    isRowDeleteConfirmationDialog: {},\n    store: service(),\n    init() {\n        this._super(...arguments);\n        this.getAnchors();\n\n    },\n    getAnchors:async function() {\n\n        const slaveInstrID = ['instrumentPosition1', 'instrumentPosition2', 'instrumentPosition3', 'instrumentPosition4', 'instrumentPosition5'];        \n        const slaveInstrObjDataPromises = slaveInstrID.map(async (positionLabel) => {\n            const instrumentPosition = this.get('instrument').get(positionLabel); \n            const instrumentPositionID = this.get('instrument').get(positionLabel);                        \n            // console.log('instrumentPosition is:' + instrumentPositionID);                \n            // const positionObjID = instrumentPosition['id'];\n\n            if (instrumentPosition != null){\n                try {                     \n                    // console.log('instrumentPosition is:');     \n                    // console.log(instrumentPosition);         \n                    const instrPositionAttributesObj = await instrumentPosition.get('anchors').then(anchors => {\n                        const anchorDistances = (anchors.content ?? anchors).map(anchor => anchor.get('distance'));\n                        return { id: instrumentPositionID, anchorDistances: anchorDistances };\n                    });\n                    return instrPositionAttributesObj;\n                } catch (reason) {\n                    return {}; // Return empty object in case of error\n                }\n            }else{\n                return null;\n            }\n        });\n        \n        const slaveInstrObjData = (await Promise.all(slaveInstrObjDataPromises)).filter(obj => obj !== null); // Filter out null values\n        // console.log('slaveInstrObjData');\n        // console.log(slaveInstrObjData);\n        this.set('anchorDistances', slaveInstrObjData);\n    },\n    anchorDistances:[],\n    actions: {\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n\n    }\n\n})\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nfunction resetNewInstrumentObject(_this) {\n    //console.log('reset');\n    _this.set('newInstrumentObject', {});\n\n}\n\nexport default class CreatePackInstrument extends Component {\n    //@service session;\n    //@service currentUser;\n    @service router;\n    @service store;\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n        this.loadSelectedInstruments(this.instrument);\n    }\n\n    async loadSelectedInstruments(instrument){\n        let selectedInstrs = []\n        if(instrument != null){\n            for (let i = 1; i <= 5; i++) {\n                let instrPositionLabel = \"instrumentPosition\" + i;\n                let instrPositionObj = instrument[instrPositionLabel]; \n                if(instrPositionObj != null){\n\n                    //If you need any other attributes for children instrument obj, add into the AttrubutesObj\n                    let instrPositionAttributesObj = await this.store.findRecord('instrument', instrPositionObj['id']).then(async function(instrument){\n                        // console.log(\"instrument is\");\n                        // console.log(instrument);\n                        //U have to use this await and .then() to call attributes who are Classes. If it is regularly str or int fields, then just directly call it\n                        let anchorPt = await instrument.get('anchors').then(obj=>{\n                            let anchorPt = '';\n                            obj.forEach(element => {       \n                                anchorPt == \"\" ? anchorPt += element.get('distance') : anchorPt += \"-\" + element.get('distance');\n                            });\n                            return anchorPt \n                        });\n                        anchorPt = anchorPt == \"\" ? \"N/A\" : anchorPt;\n                        let strokeLen = instrument['strokeLength'] == \"\" ? \"N/A\" : instrument['strokeLength'];\n                        return {anchors:anchorPt, strokeLength: strokeLen};\n                    }).catch(function(reason){\n                        return {anchors:\"\"};        \n                    });\n            \n                    let instr;\n                    if(instrPositionObj['headAt'] == null){\n                        instr = {\n                            title: instrPositionObj['id'],\n                            id: i, \n                            instrumentID: instrPositionObj['id'],\n                            position: '',\n                            data: instrPositionObj,\n                            anchorPoints: instrPositionAttributesObj.anchors,\n                            strokeLength: instrPositionAttributesObj.strokeLength\n                        };\n                    }else{\n                        instr = {\n                            title: instrPositionObj['id'] + ' - ' + instrPositionObj['headAt']['title'],\n                            id: i, \n                            instrumentID: instrPositionObj['id'],\n                            position:  instrPositionObj['headAt']['title'],\n                            data: instrPositionObj,\n                            anchorPoints: instrPositionAttributesObj.anchors,\n                            strokeLength: instrPositionAttributesObj.strokeLength\n                        };\n                    }\n                    selectedInstrs[i - 1] = instr;\n\n                }\n            }\n        }\n        this.set(\"selectedInstruments\", selectedInstrs);\n    }\n        \n    isAuthenticated = true;\n    installDate = null;\n    authError = false;\n    instrumentList = [];\n    selectedInstruments = [];\n    anchorPoints = [];\n    isEditing = false;\n    isAuthenticated = true;\n\n    actions= {\n        async setID(instr){\n            const instrumentList = this.get(\"instruments\");\n            // console.log(\"setID::::::instrumentlist::::\")\n            // console.log(instrumentList);\n            // console.log(\"selected instrument::::\")\n            // console.log(instr);\n            // console.log(\"selected list::::\")\n            // console.log(this.selectedInstruments);\n            if(this.selectedInstruments.length == 6){\n            }else{\n                if(instr != null && !this.selectedInstruments.includes(instr)){\n                    // Only append to the list if < 5 items\n                    this.selectedInstruments.addObject(instr)\n                    this.set('selectedInstruments', this.selectedInstruments);\n                    // console.log(\"updated selectedInstruments::::\")\n                    // console.log(this.selectedInstruments);\n                }\n            }\n        },\n        viewData(id) {\n            // console.log(\"user clicked view data, id is::::\" + id);\n            this.get('router').transitionTo('raw-data', id);\n            //this.viewData(id);\n        },\n        tGraph(id) {\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values');\n            //this.tGraph(id, 'displacement-values');\n        },\n        editField() {\n            this.set('editing', true);\n        },\n        stopEditField() {\n            this.set('editing', false);\n        },        \n        saveInstrument(){\n            const _this = this;\n            // console.log(\"test\");\n            if (this.get('editing')) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/instruments\";    \n                }\n            } else {\n                window.location.href = \"/instruments\";\n            }            \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n//import JSONAPISerializer from '@ember-data/serializers/json';\nimport html2canvas from 'html2canvas';\n\nexport default Component.extend({\n\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n    actions: {\n\n        saveImage() {\n            console.log(\"saveImage:::::::::::::::::\");\n            html2canvas(document.querySelector(\"#capture\"), { \n                // allowTaint: true, \n                // // foreignObjectRendering: true,\n                // useCORS: true,\n                // logging: true,\n                // scrollX: 0,\n                // scrollY: 0,\n                // width: 1000,\n                // height: 1000,\n                // x: 0,\n                // y: 0,\n                // scale: 1,\n                // backgroundColor: null,\n                // imageTimeout: 15000,\n                // removeContainer: true,\n                // foreignObjectRendering: true,\n                \n            }).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                // document.body.appendChild(downloadLink);\n\n                canvas.toBlob(function(blob) {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(lineIndex) {\n            let lineSettings = JSON.parse(localStorage.getItem('lineSettings')) || {};\n        \n            lineSettings[lineIndex] = lineSettings[lineIndex] === \"block\" ? \"none\" : \"block\";\n            localStorage.setItem('lineSettings', JSON.stringify(lineSettings));\n        \n            d3.select(`.myLines[data-line-index=\"${lineIndex}\"]`)\n                .style('display', lineSettings[lineIndex]);\n        },\n\n    },\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    // vibeEventsChartDistXData: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log('vibeEvents');\n    //     //console.log(events);\n    //     if ( this.get('vibeEvents') ) {\n    //         return [{\n    //             key: 'BluVibe',\n    //             type: 'distX',\n    //             color: '#80bf5c',\n    //             values: this.get('vibeEvents').map(function(event) {\n    //                 return [\n    //                     moment( event.get('id') ).valueOf(),\n    //                     event.get('size') ? (event.get('size') * -20) + 20 : 20\n    //                 ];\n    //             })\n    //         }];\n    //     }\n    //     return false;\n    // }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            let data_set = this.get('blastEvents').map(function(event) {\n                //console.log(event.get('timestamp'));\n                return {\n                    type: 'Blast',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n            //console.log(data_set);\n            return data_set;\n        }\n        return false;\n    }),\n\n    // vibeEventsArray: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log(events);\n    //     if ( events ) {\n    //         return events.map(function(event) {\n    //             return {\n    //                 type: 'BluVibe',\n    //                 time: event.get('id'),\n    //                 timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n    //                 ppa: event.get('ppa'),\n    //                 ppv: event.get('ppv'),\n    //                 freq: event.get('frequency')\n    //             };\n    //         }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n    //     }\n    //     return false;\n    // }),\n\n    zoomTempPoints: map('zoomTempData', function(item){\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n        // console.log(\"zoomTempPoints::::::: \" + JSON.stringify(chartData));\n        return chartData;\n    }),\n\n    zoomDataPoints: map('zoomChartData', function(item, indx){\n        // console.log(\" \");\n        // console.log(\" \");\n        // console.log(\" \");\n        // console.log(\" \");\n\n        // console.log(\" \");\n        // console.log(\"zoomChartData:::\" + linesKyes);\n        //I have to slice because the first item in the array will contain the instrument ID.\n        let dataArry = { values: item.get(\"values\") }.values;\n        let mainArr = [...dataArry];\n        let adjustedDataArry = [];\n        // console.log(\"RAW dataArry::::::: \");\n        // console.log(dataArry);\n        let lastPointDataIndicies = []\n        const slaveInstrID = ['instrumentPosition1', 'instrumentPosition2', 'instrumentPosition3', 'instrumentPosition4', 'instrumentPosition5'];\n        //Get all the indicies of values for last anchor for each instrument\n        slaveInstrID.map( (positionLabel, index) => {\n            const instrumentPosition = this.get('instrument').get(positionLabel);\n            let subArry=[]\n            if(instrumentPosition != null){\n                // console.log(\"instrumentPosition::::::: \");\n                // console.log(instrumentPosition);\n                // console.log(\"has \" + instrumentPosition['anchorCount'] + \" anchors\");\n                let anchorIndex = instrumentPosition['anchorCount']; \n                // console.log(\"anchorIndex is \" + anchorIndex);\n                // console.log(\"anchorIndex is \" + anchorIndex);\n                if (lastPointDataIndicies == 0){\n                    const index = anchorIndex - 1;\n                    const value = dataArry[index];\n                    // console.log(\"IF index is \" + index);\n                    // console.log(\"IF value is \" + value);\n                    lastPointDataIndicies.push(index);\n                }else{\n                    // console.log(\"ELSE previous is \");\n                    // console.log(lastPointDataIndicies.slice(-1));\n                    const index = Number.parseInt(lastPointDataIndicies.slice(-1)) + Number.parseInt(anchorIndex);\n                    const value = dataArry[index];\n\n                    // console.log(\"ELSE index is \" + index);\n                    // console.log(\"ELSE value is \" + value);\n                    lastPointDataIndicies.push(index);\n                }\n            }\n\n        });\n\n        // console.log(\"lastPointDataIndicies \");\n        // console.log(lastPointDataIndicies);\n        let offsetValue = 0.0;\n\n        // console.log(\"starting to rebuild data \");\n        dataArry.forEach((value, index)=>{\n            // console.log(\"original array   is  \" + dataArry);\n            // console.log(\"offsetValue      is  \" + offsetValue);\n            let val = Number.parseFloat(value) + Number.parseFloat(offsetValue);\n            // console.log( Number.parseFloat(value) + \" + \" + Number.parseFloat(offsetValue) + \" = \" + val);\n            adjustedDataArry.push(val);\n\n            if(lastPointDataIndicies.includes(index)){\n                // console.log(\"Need to increment offset to \" + mainArr[index]);\n                offsetValue = Number.parseFloat(offsetValue) +  Number.parseFloat(mainArr[index]);\n                // console.log(\"new offset value is  \" + offsetValue);\n\n            }else{\n                // let val = Number.parseFloat(value) + Number.parseFloat(offsetValue);\n                // console.log( Number.parseFloat(value) + \" + \" + Number.parseFloat(offsetValue) + \" = \" + val);\n                // adjustedDataArry.push(val);\n            }\n\n            // console.log(\"adjustedDataArry is  \" + adjustedDataArry);\n            // console.log(\"==================================================================================================\");\n            \n        });\n\n        // console.log(\"end  of rebuild data \");\n\n        var chartData = adjustedDataArry;\n        console.log(\"chartData: \");\n        console.log(chartData);\n        var modelName = this.get('chartDataModelName');\n        // if (modelName === 'strain-values' || modelName === 'strain-rate-values') { \n        //     chartData.values.push(0);\n        // }\n        // console.log(\"zoomDataPoints::::::: \");\n        // console.log(chartData);\n\n        return chartData;\n    }),\n\n    fullRangeDataPoints: map('fullRangeChartData', function(item, indx){\n        let instrumentID = { values: item.get(\"values\") }.values[0];\n        let dataArry = { values: item.get(\"values\") }.values.slice(1);\n        // console.log(\"fullRangeDataPoints raw data:::\");\n        // console.log({ values: item.get(\"values\") });\n        // console.log(\"instrumentID:::\" + instrumentID);\n        // console.log(\"fullRangeDataPoints dataArry:::\" + dataArry);\n\n        // return { values: item.get(\"values\") }; //original\n        return dataArry;\n    }),\n\n/*     fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', async function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        let chartData = this.get('fullRangeChartData');\n        let dataValuesCount;\n        try {\n            dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n\n        const slaveInstrID = ['instrumentPosition1', 'instrumentPosition2', 'instrumentPosition3', 'instrumentPosition4', 'instrumentPosition5'];\n        const slaveInstrObjDataPromises = slaveInstrID.map(async (positionLabel) => {\n            const instrumentPosition = this.get('instrument').get(positionLabel);\n            if (instrumentPosition == null) {\n                return null; // Skip positions that are null\n            }\n\n            const positionObjID = instrumentPosition['id'];\n\n            try {\n                const instrPositionAttributesObj = await instrumentPosition.get('anchors').then(anchors => {\n                    const anchorDistances = (anchors.content ?? anchors).map(anchor => anchor.get('distance'));\n                    return { id: positionObjID, anchorDistances: anchorDistances };\n                });\n                return instrPositionAttributesObj;\n            } catch (reason) {\n                return {}; // Return empty object in case of error\n            }\n        });\n\n        const slaveInstrObjData = (await Promise.all(slaveInstrObjDataPromises)).filter(obj => obj !== null); // Filter out null values\n\n\n        //This code will unify the group of anchor distances to one and the unified one will be displayed\n        //RMB, since we used push, then the order of object will be correct, dont need to assume it will be disordered\n        // console.log(\"slaveInstrObjData\");  \n        // console.log( slaveInstrObjData);\n        // console.log(\"starting to unify anchor distances\");\n        let finalAnchorDistances = [];\n        let offsetValue = 0;\n        slaveInstrObjData.forEach((slaveExto, i)=>{\n            let anchorDistances = slaveExto.anchorDistances;\n            // console.log(\"I\" + index + \": will now process:\" + anchorDistances); \n            if(i == 0){\n                finalAnchorDistances = finalAnchorDistances.concat(anchorDistances);\n                // console.log(\"Need to update offsetValue\"); \n            }else{\n                anchorDistances.forEach((distance, index)=>{\n                    // console.log(\"I\" + index + \": distance:\" + Number.parseInt(distance) + \" | current offsetValue:\" + Number.parseInt(offsetValue)); \n                    if(index != 0){\n                        let newDist = Number.parseFloat((Number.parseFloat(distance)  + Number.parseFloat(offsetValue)).toFixed(2));\n                        // newDist += \"(\" + distance + \")\";\n                        // console.log(\"I:\" + index + \" distance:\" + newDist);  \n                        // console.log(\"newDist:\" + newDist); \n                        finalAnchorDistances.push(newDist);\n                    }\n                })\n            }\n            offsetValue =  finalAnchorDistances.slice(-1);\n            // console.log(\"Need to update offsetValue. The offsetValue:\" + offsetValue + \". Update final anchor distance is:\" + finalAnchorDistances); \n            // console.log(\"I\" + index + \": partial finalAnchorDistances:\" + finalAnchorDistances); \n            // console.log(\"\" ); \n        });\n        let modifiedAnchorDistances = [];\n        //Clean up array of distances, remove the     \n        // for(var ctr = 0; ctr < anchorDistances.length-1; ctr++) {\n        //     if(anchorDistances[ctr] == anchorDistances[ctr + 1]){\n        //         modifiedAnchorDistances.pu\n        //     }\n        // }\n        if(modelName==='displacement-values') {\n            midPoints.unshift(0);\n        }\n         \n        let anchorDistances = finalAnchorDistances;    \n        // console.log(\"anchorDistances:\");     \n        // console.log(anchorDistances);     \n\n        //IF chart is Strain-Values chart\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') { \n            var midPoints = [];\n            for(var ctr = 0; ctr < anchorDistances.length-1; ctr++) {\n                midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n            }\n            if(modelName==='displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        }\n        // console.log(\"anchorDistances:\" + anchorDistances); \n        return anchorDistances; //ORIGINAL\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', async function() {\n            const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTempPoints = this.get('zoomTempPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n\n        //console.log(blastEventsChartDistXData);\n        //console.log(vibeEventsChartDistXData);\n\n        let anchorDistances = await this.get('anchorDistances');\n        let zoomChartLinesData = [];\n\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            // console.log(\"zoomDataPoints\");\n            // console.log(zoomDataPoints);\n            // console.log(\"anchorDistances\");\n            // console.log(anchorDistances);\n            //anchorDistance: {id: str, adjusted:[], original:[]}\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        // console.log(\"chartLineName\");\n                        // console.log(chartLineName);\n                        // console.log(\"chartLineIndex\");\n                        // console.log(chartLineIndex);\n                        // console.log(\"dataPoint\");\n                        // console.log(dataPoint);\n                        // console.log(\"zoomTimePoints\");\n                        // console.log(zoomTimePoints[dataPointIndex] );\n                        // console.log(\"value\");\n                        // console.log(dataPoint[chartLineIndex]);\n                        \n                        // console.log(\"dataPoint[0]\");\n                        // console.log(dataPoint[0]);\n                        // console.log(\"slaveExtoAnchorObj.id\");\n                        // console.log(slaveExtoAnchorObj.id);\n                        console.log(`x:${moment( zoomTimePoints[dataPointIndex] ).valueOf()}, y:${dataPoint[chartLineIndex]}`);\n                        const finalVal = [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            dataPoint[chartLineIndex]\n                        ];\n                        // console.log(\"finalVal\");\n                        // console.log(finalVal);\n                        return finalVal;\n                    })\n                };\n            });\n\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        // line.color = color(index), // Assign a color from your scale based on index or some other criteria\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[1] : null\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n        //console.log(zoomTempPoints.length);\n\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            if (_this.get('chartDataModelName') !== 'displacement-values'){\n                while(zoomTempPoints.length > zoomDataPoints.length) {\n                    zoomTempPoints.pop();\n                    zoomTempPoints.shift();\n                }\n            }\n            var temp = {key: 'T',\n                type: 'lines',\n                yAxis: 2,\n                values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[1] : null,\n                    ];\n                })\n            };\n            //console.log(temp);\n            zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            \n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n\n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', async function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = await this.get('anchorDistances');\n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        // line.color = color(index), // Assign a color from your scale based on index or some other criteria                            \n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint[chartLineIndex]\n                    ];\n                })\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_');\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        return promise; \n    }),\n\n\n    didInsertElement: async function()  {\n\n        const _this = this,\n            zoomChartLinesData = await _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = await _this.get('fullRangeChartLinesData'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            //vibeEventsArray = this.get('vibeEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = yAxisLegend\n        ;\n        let chartData = await _this.get('chartData');\n        const randomHexColorCode = () => {\n            let n = (Math.random() * 0xfffff * 1000000).toString(16);\n            return '#' + n.slice(0, 6);\n        };\n\n        \n        let colorArray = []\n        const numColor = 100;\n\n        while(colorArray.length != numColor){\n            let colorHEX = randomHexColorCode();\n            if (!colorArray.includes(colorHEX)){\n                colorArray.push(colorHEX);\n            }\n        }\n        // console.log(\"color array is\");\n        // console.log(colorArray);\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then( function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");            \n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n                \n                //get pretty chart name if chart has multiple parts to it\n                // let type = _this.instrument.get('instrumentTypeID').toString(); //Original Code\n\n                let type = \"1\"; //Why is this hard coded to 1? Becuase this is solely for multi exto, the units and title will be the same for normal exto. \n\n                chartData.forEach(function(item) {\n                    // console.log('item');\n                    // console.log(item);\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n\n                let instType = _this.instrument.get('instrumentType').get('title');\n\n                let axisName = '';\n                let units = chartData.get('units');\n                title = yAxisLegend.get('title');\n                    \n                switch(title) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'temperature':\n                        axisName = \"Temperature\";\n                        units = \"°C\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n                // console.log('axisName: ' + axisName);\n                // console.log('units: ' + units);\n\n                if (yAxisLegend) {\n                    let raw = _this.raw;\n                    title = axisName + \" (\" + units + \")\";\n                } else {\n                    title = axisName + \" (\" + units + \")\";\n                }\n                //title = yAxisLegend.get('unit');\n            }\n\n            function usesPoints(chartName) {\n                //console.log(chartName);\n                switch(chartName) {\n                    case 'event-ppv':\n                    case 'event-ppa':\n                        return true;\n                }\n                return false;\n            }\n\n\n\n\n\n            let zoomChart = nv.models.lineChartWithFocusAPI(usesPoints(_this.get('chartDataModelName')))\n                .margin({top: 100, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) {return d[0]; })\n                .y(function(d) { return d[1]; })\n                // .color(d3.scale.category20().range())\n                .color(colorArray)\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data')\n            ;\n            zoomChart.legend.margin({bottom: 500});\n            zoomChart.legend.rightAlign(true);\n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                if (_this.instrument.get('instrumentType').get('title') === 'Tilt') {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".3f\"));\n                    zoomChart.legend.numDecimals(3);\n                } else {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                }\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n\n\n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart); //ERROR Trigger\n\n                \n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(vibeEventsArray);\n                    //console.log(distXMouseMove);\n                    /* \n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    } \n                    */\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length){//} || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            //activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) { _this.setData(zoomChartLinesData); }\n                if (_this.setChart) { _this.setChart(zoomChart); }\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n\n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            // .color(d3.scale.category20().range())\n            .color(colorArray)\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n\n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});","import { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    init() {\n        this._super(...arguments);\n        this.getSelectedExtos(this.instrument);\n    },\n    isVisibleCreateNewForm: false,\n    store: service(),\n    router: service(),\n    session: service(),\n    getSelectedExtos:function(instrument) {\n        // Logic to retrieve the children of tableRow\n        // Return an array of child gateways\n        let selectedInstrs = []\n        if(instrument != null){\n            for (let i = 1; i <= 5; i++) {\n                let instrPositionLabel = \"instrumentPosition\" + i;\n                let instrPositionObj = instrument[instrPositionLabel]; \n                if(instrPositionObj != null){\n                    let instr;\n                    if(instrPositionObj['headAt'] == null){\n                        instr = {\n                            title: instrPositionObj['id'],\n                            id: i, \n                            instrumentID: instrPositionObj['id'],\n                            position: '',\n                            data: instrPositionObj\n                        };\n                    }else{\n                        instr = {\n                            title: instrPositionObj['id'] + ' - ' + instrPositionObj['headAt']['title'],\n                            id: i, \n                            instrumentID: instrPositionObj['id'],\n                            position:  instrPositionObj['headAt']['title'],\n                            data: instrPositionObj\n                        };\n                    }\n                    selectedInstrs[i - 1] = instr;\n\n                }\n            }\n        }\n        this.set(\"selectedInstruments\", selectedInstrs);\n        // console.log(\"selectedInstruments:::: \" + selectedInstrs);\n        // console.log( selectedInstrs);\n        return selectedInstrs;\n    },  \n\n    selectedInstruments:[],\n    actions: {\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    session: service(),\n    isRowDeleteConfirmationDialog: {},\n    rdcd: {},\n    store: service(),\n    childDict: {},\n    init() {\n        this._super(...arguments);\n    },\n\n    actions: {\n    }\n\n})\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Component from \"@ember/component\";\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    session: service(),\n    userProfileService: service(),\n    api: service(),\n    provider1 : \"azure-ad-oauth2\",\n    isLoading:false,\n    oauthProfile:null,\n\n    isShowMicrosoftADTestMessage:false,\n    microsoftADTestMessages:null,\n\n    isEditingClientID:false,\n    isEditingTenantID:false,\n    isEditingRedirectURI:false,\n    isEditingTokenURL:false,\n    isEditingClientSecret:false,\n    init() {\n        this._super(...arguments);\n        this.getOAuthProfile();\n    },\n    isMasterUser:  computed(\n    'userProfileService.is_master_key_account',\n        function () {\n            return (\n            this.userProfileService.userProfileService?.profile?.is_master_key_account || false\n            );\n        }\n    ),\n    getOAuthProfile: async function(){\n        this.set(\"isLoading\", true);\n\n        let url = `${getApiBaseUrl()}/api/admin/oauth-providers/${this.provider1}/`;\n        let response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json();\n            this.set(\"oauthProfile\", responseData);  \n        }\n        else {\n            this.set(\"oauthProfile\", {});  \n        } \n        this.set(\"isLoading\", false);\n    },\n    getClientID:computed(\"oauthProfile\", function(){\n        return this.oauthProfile?.client_id || \"\";\n    }),\n    getTenantID:computed(\"oauthProfile\", function(){\n        return this.oauthProfile?.tenant_id || \"\";\n    }),\n    getClientSecret:computed(\"oauthProfile\", function(){\n        return \"\";\n    }),\n    getRedirectURI:computed(\"oauthProfile\", function(){\n        return this.oauthProfile?.redirect_uri || \"\";\n    }),\n    getTokenURL:computed(\"oauthProfile\", function(){\n        return this.oauthProfile?.token_url || \"\";\n    }),\n    updateIsEditing:function(key){\n        switch(key){\n            case \"client_id\":\n                this.set(\"isEditingClientID\", !this.isEditingClientID);\n                break;\n            case \"tenant_id\":\n                this.set(\"isEditingTenantID\", !this.isEditingTenantID);\n                break;\n            case \"redirect_uri\":\n                this.set(\"isEditingRedirectURI\", !this.isEditingRedirectURI);\n                break;\n            case \"token_url\":\n                this.set(\"isEditingTokenURL\", !this.isEditingTokenURL);\n                break;\n        }\n\n    },\n    actions:{\n        updateIsEditingProperty(key){\n            this.updateIsEditing(key);\n        },\n        clearMicrosoftADTestMessages(){\n            this.set(\"isShowMicrosoftADTestMessage\", false);\n            this.set(\"microsoftADTestMessages\", null);\n        },\n        async updateProperty(docuKey,typeKey){\n            let dataobj = {};\n            let docu = document.getElementById(docuKey);\n            if(docu != undefined)\n                dataobj[typeKey] = docu.value.trim();\n            else\n                return;\n\n            const url = `${getApiBaseUrl()}/api/admin/oauth-providers/${this.provider1}/`;\n        \n            let response = await this.api.fetch(url, {\n                method: \"PATCH\",\n                headers: {\n                \"Content-Type\": \"application/json\",\n                Authorization: `Bearer ${localStorage.token}`\n                },\n                body: JSON.stringify(dataobj)\n            });\n\n            let result = await response.json();\n            if (!response.ok) {\n            }\n            else{\n                let newProfile = this.oauthProfile;\n                newProfile[typeKey] = docu.value.trim();\n                // this.set(\"oauthProfile\", newProfile);\n                await this.getOAuthProfile();\n                this.updateIsEditing(typeKey);\n            }\n\n        },\n        async testMicrosoftADConnection(){\n            const url = `${getApiBaseUrl()}/api/admin/oauth-providers/${this.provider1}/test/`;\n\n            try {\n                let response = await this.api.fetch(url, {\n                method: \"POST\",\n                headers: {\n                    \"Content-Type\": \"application/json\",\n                    Authorization: `Bearer ${localStorage.token}`,\n                },\n                });\n\n                let result = await response.json();\n\n                if (response.ok && result.success) {\n                    this.set(\"microsoftADTestMessages\", \"Microsoft AD connection successful!\");\n                } else {\n                    this.set(\"microsoftADTestMessages\", \"Microsoft AD test failed! \" + result.error);\n                    console.error(result);\n                }\n\n            } catch (e) {\n                this.set(\"microsoftADTestMessages\", \"Connection test failed (network error)\");\n                console.error(e);\n            }\n            this.set(\"isShowMicrosoftADTestMessage\", true);\n            \n        }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed, set } from '@ember/object';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nconst ALL = \"ALL\";\nconst UNGROUPED = \"UNGROUPED\";\nconst NEW_GROUP = \"__NEW__\";\nconst ROW_HILITE = \"background:#eef3ff;\";\n\nexport default Component.extend({\n    session: service(),\n    userProfileService: service(),\n    api: service(),\n\n    isLoading: false,\n    isEditModalOpen: false,\n    selectedContact: null,\n\n    isGroupModalOpen: false,\n    selectedGroup: null,\n    // when true, the selected contacts get assigned to the group created by the modal\n    groupModalAssignAfter: false,\n\n    // left-rail filter: ALL | UNGROUPED | <groupId>\n    selectedGroupFilter: ALL,\n    searchText: \"\",\n\n    // sorting (client-side over the full set)\n    sortKey: \"last_name\",\n    sortAsc: true,\n\n    contactList: null,\n    groupList: null,\n    selectedIds: null,\n\n    async init() {\n        this._super(...arguments);\n        this.set(\"contactList\", []);\n        this.set(\"groupList\", []);\n        this.set(\"selectedIds\", []);\n        await this.refreshAll();\n    },\n\n    // ---------- data loading ----------\n    refreshAll: async function () {\n        this.set(\"isLoading\", true);\n        await Promise.all([this.getContacts(), this.getGroups()]);\n        this.set(\"isLoading\", false);\n    },\n    getContacts: async function () {\n        let url = `${getApiBaseUrl()}/api/contacts/`;\n        let response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: {\n                \"Content-Type\": \"application/json\",\n                Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json();\n            this.set(\"contactList\", responseData.data || []);\n        } else {\n            this.set(\"contactList\", []);\n        }\n    },\n    getGroups: async function () {\n        let url = `${getApiBaseUrl()}/api/contacts/groups/`;\n        let response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: {\n                \"Content-Type\": \"application/json\",\n                Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json();\n            this.set(\"groupList\", responseData.data || []);\n        } else {\n            this.set(\"groupList\", []);\n        }\n    },\n\n    // ---------- derived view ----------\n    displayedContacts: computed(\n        \"contactList.[]\", \"selectedGroupFilter\", \"searchText\", \"sortKey\", \"sortAsc\", \"selectedIds.[]\",\n        function () {\n            let list = (this.contactList || []).slice();\n            const f = this.selectedGroupFilter;\n            if (f === UNGROUPED) {\n                list = list.filter(c => c.group == null);\n            } else if (f !== ALL) {\n                list = list.filter(c => c.group === f);\n            }\n            const q = (this.searchText || \"\").trim().toLowerCase();\n            if (q) {\n                list = list.filter(c =>\n                    `${c.first_name || \"\"} ${c.last_name || \"\"} ${c.email || \"\"} ${c.phone_number || \"\"}`\n                        .toLowerCase().includes(q));\n            }\n            const key = this.sortKey;\n            const dir = this.sortAsc ? 1 : -1;\n            list.sort((a, b) => {\n                let av, bv;\n                if (key === \"last_name\") {\n                    av = `${a.last_name || \"\"} ${a.first_name || \"\"}`.toLowerCase();\n                    bv = `${b.last_name || \"\"} ${b.first_name || \"\"}`.toLowerCase();\n                } else if (key === \"group\") {\n                    av = (a.group_name || \"\").toLowerCase();\n                    bv = (b.group_name || \"\").toLowerCase();\n                } else {\n                    av = (a[key] || \"\").toString().toLowerCase();\n                    bv = (b[key] || \"\").toString().toLowerCase();\n                }\n                if (av < bv) return -1 * dir;\n                if (av > bv) return 1 * dir;\n                return 0;\n            });\n            const sel = this.selectedIds || [];\n            list.forEach(c => set(c, \"_selected\", sel.includes(c.id)));\n            return list;\n        }\n    ),\n    ungroupedCount: computed(\"contactList.[]\", function () {\n        return (this.contactList || []).filter(c => c.group == null).length;\n    }),\n    // bound highlight styles (Emblem can't do {{if}} inside an attribute)\n    allRowStyle: computed(\"selectedGroupFilter\", function () {\n        return this.selectedGroupFilter === ALL ? ROW_HILITE : \"\";\n    }),\n    ungroupedRowStyle: computed(\"selectedGroupFilter\", function () {\n        return this.selectedGroupFilter === UNGROUPED ? ROW_HILITE : \"\";\n    }),\n    displayGroups: computed(\"groupList.[]\", \"selectedGroupFilter\", function () {\n        const list = (this.groupList || []).slice();\n        list.forEach(g => set(g, \"_rowStyle\", this.selectedGroupFilter === g.id ? ROW_HILITE : \"\"));\n        return list;\n    }),\n    selectionCount: computed(\"selectedIds.[]\", function () {\n        return (this.selectedIds || []).length;\n    }),\n    hasSelection: computed(\"selectedIds.[]\", function () {\n        return (this.selectedIds || []).length > 0;\n    }),\n    // the group shared by the whole selection, or undefined if they are\n    // ungrouped / split across different groups\n    selectionGroupId: computed(\"selectedIds.[]\", \"contactList.[]\", function () {\n        const ids = this.selectedIds || [];\n        if (ids.length === 0) return undefined;\n        const sel = (this.contactList || []).filter(c => ids.includes(c.id));\n        if (sel.length === 0) return undefined;\n        const first = sel[0].group;\n        const allSame = sel.every(c => c.group === first);\n        return (allSame && first != null) ? first : undefined;\n    }),\n    // true when every selected contact is already in the same group → the only\n    // sensible batch action is Ungroup\n    isSelectionGrouped: computed(\"selectionGroupId\", function () {\n        return this.selectionGroupId != null;\n    }),\n    selectionGroupName: computed(\"selectionGroupId\", \"groupList.[]\", function () {\n        const gid = this.selectionGroupId;\n        if (gid == null) return \"\";\n        const g = (this.groupList || []).find(x => x.id === gid);\n        return g ? g.name : \"\";\n    }),\n    allDisplayedSelected: computed(\"displayedContacts.@each._selected\", function () {\n        const d = this.displayedContacts || [];\n        return d.length > 0 && d.every(c => c._selected);\n    }),\n    editTitle: computed(\"selectedContact.id\", function () {\n        return this.selectedContact\n            ? `Edit Contact ${this.selectedContact.id}`\n            : \"Add Contact\";\n    }),\n    groupModalTitle: computed(\"selectedGroup.id\", function () {\n        return this.selectedGroup\n            ? `Edit Group ${this.selectedGroup.id}`\n            : \"New Group\";\n    }),\n\n    // ---------- contact CRUD ----------\n    closeContactModal: function () {\n        this.set(\"isEditModalOpen\", false);\n        this.set(\"selectedContact\", null);\n    },\n    saveContact: async function (data) {\n        const editing = this.selectedContact && this.selectedContact.id != null;\n        let url = `${getApiBaseUrl()}/api/contacts/`;\n        let method = \"POST\";\n        if (editing) {\n            url = `${getApiBaseUrl()}/api/contacts/${this.selectedContact.id}/`;\n            method = \"PATCH\";\n        }\n        let response = await this.api.fetch(url, {\n            method,\n            headers: {\n                \"Content-Type\": \"application/json\",\n                Authorization: `Bearer ${localStorage.token}`\n            },\n            body: JSON.stringify(data)\n        });\n        if (response.status == 200 || response.status == 201) {\n            this.closeContactModal();\n            await this.refreshAll();\n        } else {\n            // surface the BE field-keyed validation so the form failure isn't silent\n            let detail = \"\";\n            try { detail = JSON.stringify(await response.json()); } catch (e) { detail = \"\"; }\n            console.log(`Error saving contact.\\nCode: ${response.status}.\\n${detail}`);\n            window.alert(`Could not save contact (${response.status}).\\n\\n${detail}`);\n        }\n    },\n    deleteContact: async function (contact) {\n        let url = `${getApiBaseUrl()}/api/contacts/${contact.id}/`;\n        let response = await this.api.fetch(url, {\n            method: \"DELETE\",\n            headers: {\n                \"Content-Type\": \"application/json\",\n                Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 204 || response.status == 200) {\n            this.removeFromSelection(contact.id);\n            await this.refreshAll();\n        } else {\n            console.log(`Error in deleting contact: ${contact.id}.\\nCode: ${response.status}.`);\n        }\n    },\n    // PATCH a single contact's group; returns true on success, or a\n    // \"<id>: <detail>\" string on failure so the caller can surface it.\n    patchContactGroup: async function (contactId, groupId) {\n        let url = `${getApiBaseUrl()}/api/contacts/${contactId}/`;\n        let response = await this.api.fetch(url, {\n            method: \"PATCH\",\n            headers: {\n                \"Content-Type\": \"application/json\",\n                Authorization: `Bearer ${localStorage.token}`\n            },\n            body: JSON.stringify({ group: groupId })\n        });\n        if (response.status == 200 || response.status == 201) return true;\n        let detail = \"\";\n        try { detail = JSON.stringify(await response.json()); } catch (e) { detail = \"\"; }\n        return `${contactId} (${response.status}) ${detail}`;\n    },\n\n    // ---------- group CRUD ----------\n    closeGroupModal: function () {\n        this.set(\"isGroupModalOpen\", false);\n        this.set(\"selectedGroup\", null);\n        this.set(\"groupModalAssignAfter\", false);\n    },\n    saveGroup: async function (data) {\n        const editing = this.selectedGroup && this.selectedGroup.id != null;\n        if (editing) {\n            await this.patchGroup(this.selectedGroup.id, data);\n            this.closeGroupModal();\n            return;\n        }\n        // creating a new group\n        const g = await this.postGroup(data.name, data.description);\n        if (!g) return; // postGroup already alerted on failure; keep modal open\n        if (this.groupModalAssignAfter) {\n            const ids = (this.selectedIds || []).slice();\n            const results = await Promise.all(ids.map(id => this.patchContactGroup(id, g.id)));\n            const failures = results.filter(r => r !== true);\n            if (failures.length) {\n                window.alert(`Group created, but could not add ${failures.length} contact(s) to it:\\n\\n${failures.join(\"\\n\")}`);\n            }\n            this.clearSelection();\n        }\n        this.closeGroupModal();\n        await this.refreshAll();\n    },\n    postGroup: async function (name, description) {\n        let url = `${getApiBaseUrl()}/api/contacts/groups/`;\n        let response = await this.api.fetch(url, {\n            method: \"POST\",\n            headers: {\n                \"Content-Type\": \"application/json\",\n                Authorization: `Bearer ${localStorage.token}`\n            },\n            body: JSON.stringify({ name, description: description || null })\n        });\n        if (response.status == 201) {\n            const responseData = await response.json();\n            return responseData.data;\n        }\n        let detail = \"\";\n        try { detail = JSON.stringify(await response.json()); } catch (e) { detail = \"\"; }\n        window.alert(`Could not create group (${response.status}).\\n\\n${detail}`);\n        return null;\n    },\n    patchGroup: async function (groupId, data) {\n        let url = `${getApiBaseUrl()}/api/contacts/groups/${groupId}/`;\n        let response = await this.api.fetch(url, {\n            method: \"PATCH\",\n            headers: {\n                \"Content-Type\": \"application/json\",\n                Authorization: `Bearer ${localStorage.token}`\n            },\n            body: JSON.stringify(data)\n        });\n        if (response.status == 200) {\n            await this.refreshAll();\n        } else {\n            console.log(`Error in updating group: ${groupId}.\\nCode: ${response.status}.`);\n        }\n    },\n    deleteGroup: async function (group) {\n        let url = `${getApiBaseUrl()}/api/contacts/groups/${group.id}/`;\n        let response = await this.api.fetch(url, {\n            method: \"DELETE\",\n            headers: {\n                \"Content-Type\": \"application/json\",\n                Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 204 || response.status == 200) {\n            if (this.selectedGroupFilter === group.id) {\n                this.set(\"selectedGroupFilter\", ALL);\n            }\n            await this.refreshAll();\n        } else {\n            console.log(`Error in deleting group: ${group.id}.\\nCode: ${response.status}.`);\n        }\n    },\n\n    // ---------- selection helpers ----------\n    removeFromSelection: function (id) {\n        const next = (this.selectedIds || []).filter(x => x !== id);\n        this.set(\"selectedIds\", next);\n    },\n    clearSelection: function () {\n        this.set(\"selectedIds\", []);\n    },\n\n    actions: {\n        // ----- left rail -----\n        selectGroupFilter(val) {\n            this.set(\"selectedGroupFilter\", val);\n        },\n        newGroup() {\n            this.set(\"selectedGroup\", null);\n            this.set(\"groupModalAssignAfter\", false);\n            this.set(\"isGroupModalOpen\", true);\n        },\n        renameGroup(group) {\n            this.set(\"selectedGroup\", group);\n            this.set(\"groupModalAssignAfter\", false);\n            this.set(\"isGroupModalOpen\", true);\n        },\n        closeGroupModal() {\n            this.closeGroupModal();\n        },\n        saveGroup(data) {\n            this.saveGroup(data);\n        },\n        deleteGroup(group) {\n            const label = `${group.name}(${group.id})`;\n            const confirmed = window.confirm(`Delete group ${label}?\\n\\nMembers are kept but become ungrouped.\\nThis cannot be undone.`);\n            if (!confirmed) return;\n            this.deleteGroup(group);\n        },\n\n        // ----- toolbar -----\n        updateSearch(event) {\n            this.set(\"searchText\", event.target.value);\n        },\n        sortBy(key) {\n            if (this.sortKey === key) {\n                this.set(\"sortAsc\", !this.sortAsc);\n            } else {\n                this.set(\"sortKey\", key);\n                this.set(\"sortAsc\", true);\n            }\n        },\n        openAddContactModal() {\n            this.set(\"selectedContact\", null);\n            this.set(\"isEditModalOpen\", true);\n        },\n\n        // ----- per-row -----\n        openEditContactModal(contact) {\n            this.set(\"selectedContact\", contact);\n            this.set(\"isEditModalOpen\", true);\n        },\n        deleteContact(contact) {\n            const name = contact ? `${contact.first_name} ${contact.last_name}` : \"N/A\";\n            const id = contact ? contact.id : \"-\";\n            const label = `${name}(${id})`;\n            const confirmed = window.confirm(`Delete contact ${label}?\\n\\nThis cannot be undone.`);\n            if (!confirmed) return;\n            this.deleteContact(contact);\n        },\n        closeContactModal() {\n            this.closeContactModal();\n        },\n        saveContact(data) {\n            this.saveContact(data);\n        },\n\n        // ----- selection -----\n        toggleContact(contact) {\n            const ids = (this.selectedIds || []).slice();\n            const idx = ids.indexOf(contact.id);\n            if (idx === -1) ids.push(contact.id); else ids.splice(idx, 1);\n            this.set(\"selectedIds\", ids);\n        },\n        toggleSelectAll() {\n            const displayed = this.displayedContacts || [];\n            const displayedIds = displayed.map(c => c.id);\n            if (this.allDisplayedSelected) {\n                const next = (this.selectedIds || []).filter(id => !displayedIds.includes(id));\n                this.set(\"selectedIds\", next);\n            } else {\n                const set2 = new Set([...(this.selectedIds || []), ...displayedIds]);\n                this.set(\"selectedIds\", Array.from(set2));\n            }\n        },\n        clearSelection() {\n            this.clearSelection();\n        },\n\n        // ----- batch -----\n        async groupSelected() {\n            // read the dropdown straight from the DOM on click — a native <select>\n            // does not re-fire `change` when the already-shown option is chosen, so\n            // we can't rely on a change handler having recorded the value\n            const el = document.getElementById(\"batchGroupSelect\");\n            const value = el ? el.value : \"\";\n            if (!value) {\n                window.alert(\"Please choose a group from the dropdown first.\");\n                return;\n            }\n            const ids = (this.selectedIds || []).slice();\n            if (ids.length === 0) return;\n\n            if (value === NEW_GROUP) {\n                // open the New Group modal; the current selection is assigned after it saves\n                this.set(\"selectedGroup\", null);\n                this.set(\"groupModalAssignAfter\", true);\n                this.set(\"isGroupModalOpen\", true);\n                return;\n            }\n            const groupId = Number(value);\n            const results = await Promise.all(ids.map(id => this.patchContactGroup(id, groupId)));\n            const failures = results.filter(r => r !== true);\n            if (failures.length) {\n                window.alert(`Could not add ${failures.length} contact(s) to the group:\\n\\n${failures.join(\"\\n\")}`);\n            }\n            this.clearSelection();\n            await this.refreshAll();\n        },\n        async ungroupSelected() {\n            const ids = (this.selectedIds || []).slice();\n            if (ids.length === 0) return;\n            const results = await Promise.all(ids.map(id => this.patchContactGroup(id, null)));\n            const failures = results.filter(r => r !== true);\n            if (failures.length) {\n                window.alert(`Could not ungroup ${failures.length} contact(s):\\n\\n${failures.join(\"\\n\")}`);\n            }\n            this.clearSelection();\n            await this.refreshAll();\n        }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    session: service(),\n    userProfileService: service(),\n    api: service(),\n\n    isEditModalOpen: false,\n    selectedContactorCompany: null,\n    \n    isLoading:false,\n    paginationSearchConfig:{\n        searchObject:{}\n    },\n    settingsConfig:{\n        MAX_TIMEOUT_AWAITING_SAMPLING: 750,ASCENDING_CONST: \"ASC\",DESCENDING_CONST: \"DESC\",\n    },\n    async init() {\n        this._super(...arguments);\n        await this.getCompanyList();\n    },\n    getCompanyList: async function(){\n        this.set(\"isLoading\", true);\n        let payload = {\n        };\n        \n        if ('id' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.id') != null){\n            payload['id'] = this.get('paginationSearchConfig.searchObject')['id'];\n        }\n\n        if ('company_name' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.company_name') != null){\n            payload['company_name'] = this.get('paginationSearchConfig.searchObject')['company_name'];\n        }\n\n        if ('code' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.code') != null){\n            payload['code'] = this.get('paginationSearchConfig.searchObject')['code'];\n        }\n\n        if ('is_internal' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.is_internal') != null){\n            payload['is_internal'] = this.get('paginationSearchConfig.searchObject')['is_internal'];\n        }\n\n        if ('created_at' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.created_at') != null){\n            payload['created_at'] = this.get('paginationSearchConfig.searchObject')['created_at'];\n        }\n        let url = `${getApiBaseUrl()}/api/auth/company-codes/`;\n        let queryString = new URLSearchParams(payload).toString();\n        if (queryString) {\n          url += `?${queryString}`;\n        }\n        let response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json();\n            this.set(\"companyList\", responseData.data);  \n        }\n        else {\n            this.set(\"companyList\", []);  \n        } \n        this.set(\"isLoading\", false);\n    },\n    editTitle: computed(\"selectedContactorCompany.id\", function () {\n        return this.selectedContactorCompany\n            ? `Edit Contractor Company ${this.selectedContactorCompany.id}`\n            : \"Add Contractor Company\";\n    }),\n    // only a YieldPoint supervisor may add / edit / delete contractors (BE enforces too)\n    isYieldPointSupervisor: computed(\n        'session.data.authenticated.userProfile.profile.{company,override_power_supervisor_level}',\n        function () {\n            const p = this.get('session.data.authenticated.userProfile.profile');\n            if (!p) return false;\n            const isYP = typeof p.company === 'string' && p.company.includes('YieldPoint');\n            const isSup = !!p.override_power_supervisor_level;\n            return isYP && isSup;\n        }\n    ),\n    closeEditUserModal:function() {\n        this.set(\"isEditModalOpen\", false);\n        this.set(\"selectedContactorCompany\", null);\n    },\n    _deleteContractors:async function(company) {\n\n        let url = `${getApiBaseUrl()}/api/auth/company-codes/${company.id}/`;\n        let response = await this.api.fetch(url, {\n            method: \"DELETE\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 204 || response.status == 200) {\n            this.closeEditUserModal();\n            await this.getCompanyList();\n        }\n        else{\n            console.log(`Error in deleting contractor: ${company.id}.\\nCode: ${response.status}.`);\n        }\n    },\n    _createContractor:async function(data) {\n\n        let url = `${getApiBaseUrl()}/api/auth/company-codes/`;\n        let response = await this.api.fetch(url, {\n            method: \"POST\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n            body: JSON.stringify(data)\n\n        });\n        if (response.status == 201 || response.status == 200) {\n            this.closeEditUserModal();\n            await this.getCompanyList();\n        }\n        else{\n            let detail = \"\";\n            try { detail = JSON.stringify(await response.json()); } catch (e) { detail = \"\"; }\n            console.log(`Error creating contractor.\\nCode: ${response.status}.\\n${detail}`);\n            window.alert(`Could not save contractor (${response.status}).\\n\\n${detail}`);\n        }\n    },\n    _saveContractorsEdits:async function(updatedData) {\n\n        let url = `${getApiBaseUrl()}/api/auth/company-codes/${this.get(\"selectedContactorCompany\").id}/`;\n        let response = await this.api.fetch(url, {\n            method: \"PATCH\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n            body: JSON.stringify(updatedData)\n\n        });\n        if (response.status == 200) {\n            this.closeEditUserModal();\n            await this.getCompanyList();\n        }\n        else{\n            let detail = \"\";\n            try { detail = JSON.stringify(await response.json()); } catch (e) { detail = \"\"; }\n            console.log(`Error in updating contractor: ${this.get(\"selectedContactorCompany\").id}.\\nCode: ${response.status}.\\n${detail}`);\n            window.alert(`Could not save contractor (${response.status}).\\n\\n${detail}`);\n        }\n    },\n    actions: {\n        closeEditUserModal() {\n            this.closeEditUserModal();\n        },\n        saveUserEdits(updatedData) {\n            if (this.get(\"selectedContactorCompany\") && this.get(\"selectedContactorCompany\").id != null) {\n                this._saveContractorsEdits(updatedData);\n            } else {\n                this._createContractor(updatedData);\n            }\n        },\n        openAddContractorModal() {\n            this.set(\"selectedContactorCompany\", null);\n            this.set(\"isEditModalOpen\", true);\n        },\n        openEditContractorModal(company) {\n            this.set(\"selectedContactorCompany\", company);\n            this.set(\"isEditModalOpen\", true);\n        },\n        deleteContractor(company) {\n            const name = company ? company.company_name : \"N/A\";\n            const id = company ? company.id : \"-\";\n            const label = `${name}(${id})`;\n            const confirmed = window.confirm(`Delete contractor ${label}?\\n\\nThis cannot be undone.`);\n            if(!confirmed) return;\n            this._deleteContractors(company);\n        },\n        columnCycleOrdering(id){\n            const searchObject = this.get(\"paginationSearchConfig.searchObject\");\n            switch(id){\n                case \"id\":\n                    const idColumnComp = document.getElementById(\"id\");\n                    if(searchObject['id'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.id\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        idColumnComp.textContent = \"ID v\";\n                    }else if(searchObject['id'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.id\", null);\n                        idColumnComp.textContent = \"ID \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.id\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        idColumnComp.textContent = \"ID ^\";\n                    };\n                    break;\n                case \"company_name\":\n                    const comp1 = document.getElementById(\"company_name\");\n                    if(searchObject['company_name'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.company_name\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        comp1.textContent = \"Company v\";\n                    }else if(searchObject['company_name'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.company_name\", null);\n                        comp1.textContent = \"Company \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.company_name\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        comp1.textContent = \"Company ^\";\n                    };\n                    break;\n                case \"code\":\n                    const comp2 = document.getElementById(\"code\");\n                    if(searchObject['code'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.code\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        comp2.textContent = \"Code v\";\n                    }else if(searchObject['code'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.code\", null);\n                        comp2.textContent = \"Code \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.code\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        comp2.textContent = \"Code ^\";\n                    };\n                    break;\n                case \"is_internal\":\n                    const comp3 = document.getElementById(\"is_internal\");\n                    if(searchObject['is_internal'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.is_internal\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        comp3.textContent = \"Is Internal v\";\n                    }else if(searchObject['is_internal'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.is_internal\", null);\n                        comp3.textContent = \"Is Internal \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.is_internal\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        comp3.textContent = \"Is Internal ^\";\n                    };\n                    break;\n                case \"created_at\":\n                    const comp4 = document.getElementById(\"created_at\");\n                    if(searchObject['created_at'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.created_at\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        comp4.textContent = \"Created At v\";\n                    }else if(searchObject['created_at'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.created_at\", null);\n                        comp4.textContent = \"Created At \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.created_at\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        comp4.textContent = \"Created At ^\";\n                    };\n                    break;\n            }\n            this.getCompanyList();\n        }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    session: service(),\n    userProfileService: service(),\n    api: service(),\n    userProfile:null,\n    isEditingFirstName:false,\n    isEditingLastName:false,\n    isEditingEmail:false,\n    isEditingUsername:false,\n    isEditingCompany:false,\n    isEditingDepartment:false,\n    isEditingPosition:false,\n\n    isValidUsername: false,\n    usernameTips: \"150 characters or fewer. Letters, digits and @/./+/-/_ only\",\n    isValidEmail: false,\n    emailTips: \"Invalid email structure\",\n\n    showEmailError:false,\n    emailErrorMessage:null,\n    showUsernameError:false,\n    emailUsernameMessage:null,\n\n    isMasterUser:  computed(\n    'userProfileService.is_master_key_account',\n        function () {\n            return (\n                this.userProfileService.userProfileService?.profile?.is_master_key_account || false\n            );\n        }\n    ),\n    getFirstName:computed(\"userProfileService.userProfileService\", function(){\n        return this.userProfileService.userProfileService?.profile?.first_name || \"\";\n    }),\n    getLastName:computed(\"userProfileService.userProfileService\", function(){\n        return this.userProfileService.userProfileService?.profile?.last_name || \"\";\n    }),\n    getEmail:computed(\"userProfileService.userProfileService\", function(){\n        return this.userProfileService.userProfileService?.profile?.email || \"\";\n    }),\n    getUsername:computed(\"userProfileService.userProfileService\", function(){\n        return this.userProfileService.userProfileService?.profile?.username || \"\";\n    }),\n    getCompany:computed(\"userProfileService.userProfileService\", function(){\n        return this.userProfileService.userProfileService?.profile?.company || \"\";\n    }),\n    getDepartment:computed(\"userProfileService.userProfileService\", function(){\n        return this.userProfileService.userProfileService?.profile?.department || \"\";\n    }),\n    getPosition:computed(\"userProfileService.userProfileService\", function(){\n        return this.userProfileService.userProfileService?.profile?.position || \"\";\n    }),\n    updateIsEditing:function(key){\n        switch(key){\n            case \"firstName\":\n                this.set(\"isEditingFirstName\", !this.isEditingFirstName);\n                break;\n            case \"lastName\":\n                this.set(\"isEditingLastName\", !this.isEditingLastName);\n                break;\n            case \"email\":\n                this.resetError(\"email\");\n                this.set(\"isEditingEmail\", !this.isEditingEmail);\n                break;\n            case \"username\":\n                this.resetError(\"username\");\n                this.set(\"isEditingUsername\", !this.isEditingUsername);\n                break;\n            case \"company\":\n                this.set(\"isEditingCompany\", !this.isEditingCompany);\n                break;\n            case \"department\":\n                this.set(\"isEditingPosition\", !this.isEditingDepartment);\n                break;\n            case \"position\":\n                this.set(\"isEditingPosition\", !this.isEditingPosition);\n                break;\n        }\n\n    },\n    updateError:function(typeKey, errorMessage){\n        switch(typeKey){\n            case \"email\":\n                this.set(\"showEmailError\", true);\n                this.set(\"emailErrorMessage\", errorMessage);\n                break;\n            case \"username\":\n                this.set(\"showUsernameError\", true);\n                this.set(\"emailUsernameMessage\", errorMessage);\n                break;\n        }\n    },\n    resetError:function(typeKey){\n        switch(typeKey){\n            case \"email\":\n                this.set(\"showEmailError\", false);\n                this.set(\"emailErrorMessage\", null);\n                break;\n            case \"username\":\n                this.set(\"showUsernameError\", false);\n                this.set(\"emailUsernameMessage\", null);\n                break;\n        }\n    },\n    validateEmail:function(email){\n        if (!email) {\n        return false;\n        }\n\n        if (email.length > 254) {\n        return false;\n        }\n\n        const emailRegex =\n        /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}$/;\n\n        return emailRegex.test(email);\n\n    },\n    validateUsername:function(inputUsername){\n        //Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.\n        if (!inputUsername) {\n            return false;\n        }\n\n        // Length check\n        if (inputUsername.length > 150) {\n            return false;\n        }\n\n        // Character check (Django-compatible)\n        const usernameRegex = /^[\\w.@+-]+$/;\n\n        return usernameRegex.test(inputUsername);\n\n    },\n    actions: {\n        updateEmail(event) {\n            if (this.validateEmail(event.target.value)){\n                this.set(\"isValidEmail\", false);\n            }\n            else{\n                this.set(\"isValidEmail\", true);\n            }\n        },\n        updateUsername(event) {\n            if (this.validateUsername(event.target.value)){\n                this.set(\"isValidUsername\", false);\n            }\n            else{\n                this.set(\"isValidUsername\", true);\n            }\n        },\n        updateIsEditingProperty(key){\n            this.updateIsEditing(key);\n        },\n        async updateProperty(docuKey,typeKey){\n            this.resetError(typeKey);\n            let dataobj = {};\n            let docu = document.getElementById(docuKey);\n            if(docu != undefined)\n                dataobj[typeKey] = docu.value.trim();\n            else\n                return;\n\n            const url = `${getApiBaseUrl()}/api/auth/user/profile/update/`;\n        \n            let response = await this.api.fetch(url, {\n                method: \"PATCH\",\n                headers: {\n                \"Content-Type\": \"application/json\",\n                Authorization: `Bearer ${localStorage.token}`\n                },\n                body: JSON.stringify(dataobj)\n            });\n\n            let result = await response.json();\n            let updatedObj = result.updated;\n            if (!response.ok) {\n                this.updateError(typeKey, result[typeKey].join(\" \"))\n            }\n            else{\n                if (updatedObj && updatedObj[typeKey] !== undefined) {\n                    this.userProfileService.updateField(typeKey, updatedObj[typeKey]);\n                }\n                if(typeKey == \"first_name\"){\n                    this.updateIsEditing(\"firstName\");\n                }\n                else if (typeKey == \"last_name\"){\n                    this.updateIsEditing(\"lastName\");\n                }\n                else{\n                    this.updateIsEditing(typeKey);\n                }\n            }\n\n        }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { getApiBasePort, getApiBaseUrl } from '../utils/api-config';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    session: service(),\n    userProfileService: service(),\n    api: service(),\n\n    isLoading:false,\n    paginationSearchConfig:{\n        searchObject:{}\n    },\n    settingsConfig:{\n        MAX_TIMEOUT_AWAITING_SAMPLING: 750,ASCENDING_CONST: \"ASC\",DESCENDING_CONST: \"DESC\",\n    },\n    paginationSearchConfig:{    \n        searchObject:{ calibrationDateOrdering:\"DESC\"},\n        pagination:{page:1, pageSize:10, totalPages:1},\n        paginationPageSizes : [5,15,25,50,100,150,200],\n        calibrationInstrumentProfilePaginationList : [],\n    },\n\n    resetPasswordMessage:null,\n    isShowResetPasswordMessage:false,\n\n    async init() {\n        this._super(...arguments);\n        await this.getActivityLogList();\n    },\n    getActivityLogList: async function(){\n        this.set(\"isLoading\", true);\n        let payload = {\n            page: this.paginationSearchConfig.pagination.page,\n            page_size:this.paginationSearchConfig.pagination.pageSize,\n        };\n        \n        if ('gateway_id_sort' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.gateway_id_sort') != null){\n            payload['gateway_id_sort'] = this.get('paginationSearchConfig.searchObject')['gateway_id_sort'];\n        }\n        \n        if ('instrument_id_sort' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.instrument_id_sort') != null){\n            payload['instrument_id_sort'] = this.get('paginationSearchConfig.searchObject')['instrument_id_sort'];\n        }\n\n        if ('action_date_sort' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.action_date_sort') != null){\n            payload['action_date_sort'] = this.get('paginationSearchConfig.searchObject')['action_date_sort'];\n        }\n\n        let url = `${getApiBaseUrl()}/instrument-activity-logs/`;\n        let queryString = new URLSearchParams(payload).toString();\n        if (queryString) {\n            url += `?${queryString}`;\n        }\n        let response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json();\n\n            const rawList = responseData.data || [];\n            const included = responseData.included || [];\n\n            const data = rawList.map(record =>\n                this.flattenActivityLog(record, included)\n            );\n\n            console.log(data)\n            this.set(\"activityLogList\", data);\n            const metaPaginationData = responseData['meta'];\n            this.set(\"paginationSearchConfig.pagination.totalPages\", metaPaginationData['pagination']['total_pages']);\n            // const totalRowsComp = document.getElementById(\"totalReadings\");\n            // totalRowsComp.textContent = `Total: ${responseData['data'].length}`\n            this.updatePaginationList();\n        }\n        else {\n            this.set(\"activityLogList\", []);  \n        } \n        this.set(\"isLoading\", false);\n    },\n    flattenActivityLog: function (record, included) {\n        const attrs = record.attributes || {};\n        const relationships = record.relationships || {};\n\n        return {\n            activity_message: attrs[\"activity-message\"] ?? null,\n            action_date: attrs[\"action-date\"] ?? null,\n            instrument_snapshot_id: attrs[\"instrument-snapshot-id\"] ?? null,\n            gateway_snapshot_id: attrs[\"gateway-snapshot-id\"] ?? null,\n            instrument_id: relationships.instrument?.data?.id ?? null,\n            gateway_id: relationships.gateway?.data?.id ?? null,\n        };\n    },\n    updatePaginationList: function () {\n        let range = [];\n        const maxPageToShow = 3; // Adjust this based on how many pages you want to show in the middle\n        const paginationObj = this.get('paginationSearchConfig.pagination');\n\n        // Always include the first page\n        range.push(1);\n\n        if (paginationObj['totalPages'] <= maxPageToShow + 2) {\n            // If total pages are small enough, show all pages\n            for (let i = 2; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else if (paginationObj['page'] <= maxPageToShow) {\n            // Current page is within the first few pages\n            for (let i = 2; i <= maxPageToShow + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        } else if (paginationObj['page'] >= paginationObj['totalPages'] - maxPageToShow + 1) {\n            // Current page is within the last few pages\n            range.push('...');\n            for (let i = paginationObj['totalPages'] - maxPageToShow; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else {\n            // Current page is in the middle\n            range.push('...');\n            for (let i = paginationObj['page'] - 1; i <= paginationObj['page'] + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        }\n\n        this.set('paginationSearchConfig.calibrationInstrumentProfilePaginationList', range);\n    },\n    isStaffUser:  computed(\n    'userProfileService.is_master_key_account',\n        function () {\n            return (\n            this.userProfileService.userProfileService?.profile?.is_staff || false\n            );\n        }\n    ),\n    actions: {\n        async sendResetPasswordLink(){\n\n            try {\n                let email = this.userProfileService.userProfileService?.profile?.email;\n\n                if (!email) {\n                alert(\"No email found for this user.\");\n                return;\n                }\n                this.set(\"isLoading\", true);\n                const url = `${getApiBaseUrl()}/api/auth/password-reset/`;\n\n                let response = await this.api.fetch(url, {\n                method: \"POST\",\n                headers: {\n                    \"Content-Type\": \"application/json\"\n                },\n                body: JSON.stringify({ email })\n                });\n\n                this.set(\"isShowResetPasswordMessage\", true);\n                this.set(\"resetPasswordMessage\", \"Email has been sent if it exists!\");\n\n            } catch (err) {\n                console.error(err);\n                this.set(\"isShowResetPasswordMessage\", true);\n                this.set(\"resetPasswordMessage\", \"Failed to send reset password email!\");\n            }\n            this.set(\"isLoading\", false);\n            setTimeout(() => {\n                if (!this.isDestroyed && !this.isDestroying) {\n                    this.set(\"isShowResetPasswordMessage\", false);\n                    this.set(\"resetPasswordMessage\", null);\n                }\n            }, 10000);\n        },\n        accessAdmin(){\n            event.preventDefault();  \n            let url = new URL('/admin', window.location.href);\n            url.port = getApiBasePort();\n            window.open(url.href, '_blank');  \n        },\n        columnCycleOrdering(id){\n            const searchObject = this.get(\"paginationSearchConfig.searchObject\");\n            switch(id){\n                case \"instrument_id_sort\":\n                    const instrument_id_sortComp = document.getElementById(\"instrument_id_sort\");\n                    if(searchObject['instrument_id_sort'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.instrument_id_sort\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        instrument_id_sortComp.textContent = \"Sensor ID v\";\n                    }else if(searchObject['instrument_id_sort'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.instrument_id_sort\", null);\n                        instrument_id_sortComp.textContent = \"Sensor ID \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.instrument_id_sort\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        instrument_id_sortComp.textContent = \"Sensor ID ^\";\n                    };\n                    break;\n                case \"action_date_sort\":\n                    const action_date_sortComp = document.getElementById(\"action_date_sort\");\n                    if(searchObject['action_date_sort'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.action_date_sort\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        action_date_sortComp.textContent = \"Date v\";\n                    }else if(searchObject['action_date_sort'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.action_date_sort\", null);\n                        action_date_sortComp.textContent = \"Date \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.action_date_sort\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        action_date_sortComp.textContent = \"Date ^\";\n                    };\n                    break;\n                case \"gateway_id_sort\":\n                    const gateway_id_sortComp = document.getElementById(\"gateway_id_sort\");\n                    if(searchObject['gateway_id_sort'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.gateway_id_sort\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        gateway_id_sortComp.textContent = \"Gateway ID v\";\n                    }else if(searchObject['gateway_id_sort'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.gateway_id_sort\", null);\n                        gateway_id_sortComp.textContent = \"Gateway ID \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.gateway_id_sort\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        gateway_id_sortComp.textContent = \"Gateway ID ^\";\n                    };\n                    break;\n            }\n            this.getActivityLogList();\n        },\n        jumpToPage(page){\n            // this.getSensorProfileList();\n            try{\n                if(page != \"...\"){\n                    this.set('paginationSearchConfig.pagination.page', Number.parseInt(page))\n                    this.getActivityLogList();\n                }\n            }\n            catch(err){\n\n            }\n        },\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    session: service(),\n    userProfileService: service(),\n    api: service(),\n\n    isEditModalOpen: false,\n    selectedUser: null,\n    \n    isLoading:false,\n    paginationSearchConfig:{\n        searchObject:{}\n    },\n    settingsConfig:{\n        MAX_TIMEOUT_AWAITING_SAMPLING: 750,ASCENDING_CONST: \"ASC\",DESCENDING_CONST: \"DESC\",\n    },\n    async init() {\n        this._super(...arguments);\n        await this.getUsers();\n    },\n    getUsers: async function(){\n        this.set(\"isLoading\", true);\n        let payload = {\n        };\n        \n        if ('id' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.id') != null){\n            payload['id'] = this.get('paginationSearchConfig.searchObject')['id'];\n        }\n\n        if ('first_name' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.first_name') != null){\n            payload['first_name'] = this.get('paginationSearchConfig.searchObject')['first_name'];\n        }\n\n        if ('last_name' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.last_name') != null){\n            payload['last_name'] = this.get('paginationSearchConfig.searchObject')['last_name'];\n        }\n\n        if ('username' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.username') != null){\n            payload['username'] = this.get('paginationSearchConfig.searchObject')['username'];\n        }\n\n        if ('last_login' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.last_login') != null){\n            payload['last_login'] = this.get('paginationSearchConfig.searchObject')['last_login'];\n        }\n\n        if ('date_joined' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.date_joined') != null){\n            payload['date_joined'] = this.get('paginationSearchConfig.searchObject')['date_joined'];\n        }\n        let url = `${getApiBaseUrl()}/api/auth/users/`;\n        let queryString = new URLSearchParams(payload).toString();\n        if (queryString) {\n          url += `?${queryString}`;\n        }\n        let response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json();\n            this.set(\"userList\", responseData.users);  \n        }\n        else {\n            this.set(\"userList\", []);  \n        } \n        this.set(\"isLoading\", false);\n    },\n    editTitle: computed(\"selectedUser.id\", function () {\n    return this.selectedUser\n        ? `Edit User ${this.selectedUser.id}`\n        : \"Edit User\";\n    }),\n    \n    closeEditUserModal:function() {\n        this.set(\"isEditModalOpen\", false);\n        this.set(\"selectedUser\", null);\n    },\n    _saveUserEdits:async function(updatedData) {\n        /**\n            updatedData = {\n                \"can_login_vp\": true,\n                \"can_upload_vp\": true,\n                \"company\": lorem_lpsum,\n                \"position\": lorem_lpsum\n            }\n         */\n        let url = `${getApiBaseUrl()}/api/admin/users/${this.get(\"selectedUser\").id}/`;\n        let response = await this.api.fetch(url, {\n            method: \"PATCH\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n            body: JSON.stringify(updatedData)\n\n        });\n        if (response.status == 200) {\n            this.closeEditUserModal();\n            await this.getUsers();\n        }\n        else{\n            console.log(`Error in updating User: ${this.get(\"selectedUser\").id}.\\nCode: ${response.status}.`);\n        }\n    },\n    actions: {\n        closeEditUserModal() {\n            this.closeEditUserModal();\n        },\n        saveUserEdits(updatedData) {\n            this._saveUserEdits(updatedData);\n        },\n        openEditUserModal(user) {\n            this.set(\"selectedUser\", user);\n            this.set(\"isEditModalOpen\", true);\n        },\n        columnCycleOrdering(id){\n            const searchObject = this.get(\"paginationSearchConfig.searchObject\");\n            switch(id){\n                case \"id\":\n                    const idColumnComp = document.getElementById(\"id\");\n                    if(searchObject['id'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.id\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        idColumnComp.textContent = \"ID v\";\n                    }else if(searchObject['id'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.id\", null);\n                        idColumnComp.textContent = \"ID \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.id\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        idColumnComp.textContent = \"ID ^\";\n                    };\n                    break;\n                case \"first_name\":\n                    const firstNameColumnComp = document.getElementById(\"first_name\");\n                    if(searchObject['first_name'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.first_name\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        firstNameColumnComp.textContent = \"First Name v\";\n                    }else if(searchObject['first_name'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.first_name\", null);\n                        firstNameColumnComp.textContent = \"First Name \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.first_name\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        firstNameColumnComp.textContent = \"First Name ^\";\n                    };\n                    break;\n                case \"last_name\":\n                    const lastNameColumnComp = document.getElementById(\"last_name\");\n                    if(searchObject['last_name'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.last_name\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        lastNameColumnComp.textContent = \"Last Name v\";\n                    }else if(searchObject['last_name'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.last_name\", null);\n                        lastNameColumnComp.textContent = \"Last Name \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.last_name\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        lastNameColumnComp.textContent = \"Last Name ^\";\n                    };\n                    break;\n                case \"username\":\n                    const usernameColumnComp = document.getElementById(\"username\");\n                    if(searchObject['username'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.username\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        usernameColumnComp.textContent = \"Last Name v\";\n                    }else if(searchObject['username'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.username\", null);\n                        usernameColumnComp.textContent = \"Last Name \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.username\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        usernameColumnComp.textContent = \"Last Name ^\";\n                    };\n                    break;\n                case \"last_login\":\n                    const lastLoginColumnComp = document.getElementById(\"last_login\");\n                    if(searchObject['last_login'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.last_login\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        lastLoginColumnComp.textContent = \"Last Login v\";\n                    }else if(searchObject['last_login'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.last_login\", null);\n                        lastLoginColumnComp.textContent = \"Last Login \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.last_login\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        lastLoginColumnComp.textContent = \"Last Login ^\";\n                    };\n                    break;\n                case \"date_joined\":\n                    const dateJoinedColumnComp = document.getElementById(\"date_joined\");\n                    if(searchObject['date_joined'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.date_joined\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        dateJoinedColumnComp.textContent = \"Date Joined v\";\n                    }else if(searchObject['date_joined'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.date_joined\", null);\n                        dateJoinedColumnComp.textContent = \"Date Joined \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.date_joined\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        dateJoinedColumnComp.textContent = \"Date Joined ^\";\n                    };\n                    break;\n            }\n            this.getUsers();\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n  userProfileService: service(),\n  api: service(),\n  session: service(),\n  init(){\n      this._super(...arguments);\n  },\n  profileImage:  computed(\n    'userProfileService.userProfileService',\n    function () {\n      return (\n        this.userProfileService.userProfileService?.profile?.profile_picture || null\n      );\n    }\n  ),\n  isMasterUser:  computed(\n    'userProfileService.is_master_key_account',\n    function () {\n      return (\n        this.userProfileService.userProfileService?.profile?.is_master_key_account || false\n      );\n    }\n  ),\n  // Contractors tab is supervisor-only — the BE only returns the contractor list\n  // for supervisors, so hide the tab for everyone else.\n  isSupervisor: computed(\n    'userProfileService.is_master_key_account',\n    function () {\n      return (this.userProfileService.userProfileService?.profile?.override_power_supervisor_level || false);\n    }\n  ),\n  firstName: computed(\n    'userProfileService.userProfileService',\n    function () {\n      return (\n        this.userProfileService.userProfileService?.profile?.first_name || \"\"\n      );\n    }\n  ),\n\n  lastName: computed(\n    'userProfileService.userProfileService',\n    function () {\n      return (\n        this.userProfileService.userProfileService?.profile?.last_name || \"\"\n      );\n    }\n  ),\n\n  actions: {\n    triggerImageUpload() {\n      document.getElementById(\"profileImageInput\").click();\n    },\n    updateTab(value){\n        this.set(\"currentTab\", value)\n    },\n    async uploadProfileImage(event) {\n      const file = event.target.files[0];\n      if (!file) return;\n\n      const allowedTypes = [\"image/jpeg\", \"image/png\"];\n\n      if (!allowedTypes.includes(file.type)) {\n        alert(\"Only JPG and PNG images are allowed\");\n        event.target.value = \"\"; // reset input\n        return;\n      }\n\n      // Optional size limit (recommended)\n      const MAX_SIZE_MB = 5;\n      if (file.size > MAX_SIZE_MB * 1024 * 1024) {\n        alert(\"Image must be smaller than 5MB\");\n        event.target.value = \"\";\n        return;\n      }\n\n      let formData = new FormData();\n      formData.append(\"profile_image\", file);\n\n      try {\n        const url = `${getApiBaseUrl()}/api/auth/user/profile/image/`;\n    \n        let response = await this.api.fetch(url, {\n          method: \"PATCH\",\n          headers: {\n            Authorization: `Bearer ${localStorage.token}`,\n          },\n          body: formData,\n        });\n\n        const result = await response.json();\n        if (!response.ok){\n          alert(\"Image upload failed\");\n        }\n        else{\n          this.userProfileService.updateField(\"profile_picture\", result['updated']);\n        }\n      } catch (e) {\n        console.error(e);\n        alert(\"General Error in Failed to upload image\");\n      }\n    }\n  }\n\n\n});\n","import { action, computed, observer } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default class navbar extends Component {\n    @service session;\n    @service userProfileService;\n    //@service currentUser;\n    //isAuthenticated = true;\n    @service('torii') torii;\n    @service router;\n\n    get apiPort() {\n        return ENV.API_PORT;\n    }\n\n    @action\n    navigateToSettings() {\n        this.router.transitionTo('settings'); \n    }\n\n    @action\n    navigateToMyProfile() {\n        this.router.transitionTo('my-profile'); \n    }\n\n    @computed('userProfileService.userProfileService')\n    get username() {\n        let wrapper = this.userProfileService.userProfileService;\n        let firstName = \"-\";\n        let lastName = \"-\";\n        if (!wrapper?.profile) return \"- -\";\n        if(wrapper.profile.first_name != null && wrapper.profile.first_name.length > 0){\n            firstName = wrapper.profile.first_name;\n        }\n        if(wrapper.profile.last_name != null && wrapper.profile.last_name.length > 0){\n            lastName = wrapper.profile.last_name;\n        }\n\n        return `${firstName} ${lastName}`;\n    }\n\n    @computed('session.isAuthenticated')\n    get isValid() {\n        let isValid = this.session.data.authenticated['isValid'];\n        //console.log(isValid);\n        return isValid === undefined ? true : isValid;\n    }\n    @computed('userProfileService.userProfileService')\n    get hasPermissionAnalyticsTab() {\n        let wrapper = this.userProfileService.userProfileService;\n        if (!wrapper?.profile) return false;\n\n        return (wrapper.profile.is_superuser || wrapper.profile.can_view_packs_validation_analytics || wrapper.profile.can_view_sensor_calibration_analytics);\n\n    }\n    @computed('userProfileService.userProfileService')\n    get hasPermissionPacksValidationAnalytics() {\n        let wrapper = this.userProfileService.userProfileService;\n        if (!wrapper?.profile) return false;\n        return wrapper.profile.is_superuser || wrapper.profile.can_view_packs_validation_analytics;\n    }\n    @computed('userProfileService.userProfileService')\n    get hasPermissionSensorCalibrationAnalytics() {\n        let wrapper = this.userProfileService.userProfileService;\n        if (!wrapper?.profile) return false;\n        return wrapper.profile.is_superuser || wrapper.profile.can_view_sensor_calibration_analytics;\n    }\n    @computed('userProfileService.userProfileService')\n    get hasPermissionProductionTab() {\n        let wrapper = this.userProfileService.userProfileService;\n        if (!wrapper?.profile) return false;\n        return wrapper.profile.is_superuser || wrapper.profile.can_view_sensor_calibration || wrapper.profile.can_view_packs_validation;\n    }\n    @computed('userProfileService.userProfileService')\n    get hasPermissionSensorCalibration() {\n        let wrapper = this.userProfileService.userProfileService;\n        if (!wrapper?.profile) return false;\n        return wrapper.profile.is_superuser || wrapper.profile.can_view_sensor_calibration;\n    }\n    @computed('userProfileService.userProfileService')\n    get hasPermissionPacksValidation() {\n        let wrapper = this.userProfileService.userProfileService;\n        if (!wrapper?.profile) return false;\n        return wrapper.profile.is_superuser || wrapper.profile.can_view_packs_validation;\n    }\n    @computed('session.isAuthenticated')\n    get isWithinLimit() {\n        // console.log(\"Nav bar limit\");\n\n        let limit = this.session.data.authenticated['limit']\n        // console.log(this.get(\"session\").data.authenticated)\n        return limit === undefined ? true : limit;\n    }\n\n    @computed('session.isAuthenticated')\n    get modules() {\n        return this.session.data.authenticated['modules'];\n    }\n\n    @action\n    navigateToSensorCalibrationAnalytics(event) {\n        event.preventDefault(); // Prevent the default anchor behavior\n        let url = new URL('/sensor-calibration-analytics', window.location.href);\n        // url.port =this.apiPort; // Set the port from your environment variable\n        window.location.href = url.href; // Open the new URL in a new tab\n    }\n    @action\n    navigateToPacksValidationAnalytics(event) {\n        event.preventDefault(); // Prevent the default anchor behavior\n        let url = new URL('/packs-validation-analytics', window.location.href);\n        // url.port =this.apiPort; // Set the port from your environment variable\n        window.location.href = url.href; // Open the new URL in a new tab\n    }\n    @action\n    navigateToSensorCalibration(event) {\n        event.preventDefault(); // Prevent the default anchor behavior\n        let url = new URL('/sensor-calibration', window.location.href);\n        // url.port =this.apiPort; // Set the port from your environment variable\n        window.location.href = url.href; // Open the new URL in a new tab\n    }\n    @action\n    navigateToPacksValidation(event) {\n        event.preventDefault(); // Prevent the default anchor behavior\n        let url = new URL('/packs-validation', window.location.href);\n        // url.port =this.apiPort; // Set the port from your environment variable\n        window.location.href = url.href; // Open the new URL in a new tab\n    }\n\n    @action\n    async logout() {\n        try {\n            console.log(\"Logging out…\");\n            await this.session.invalidate();\n            console.log(\"Logout successful\");\n        } catch (error) {\n            console.error(\"Logout failed:\", error);\n        }\n    }\n\n\n//Version 2\n    // @action\n    // async logout() {\n        \n    //     let authenticator = this.session.data.authenticated.authenticator;\n    //     let provider = this.session.data.authenticated.provider;\n        \n    //     console.log(\"Attempting to logout with authenticator:\", authenticator);\n    //     console.log(\"Attempting to logout with provider:\", provider);\n        \n    //     if (!authenticator) {\n    //         console.error('No authenticator found in session data.');\n    //         return;\n    //     }\n\n    //     try {\n    //         if(!provider){\n    //             await this.session.invalidate(); // Use the specific authenticator for logout\n    //         }\n    //         else{\n    //             // For OAuth providers handled by Torii\n    //             try {\n    //                 // await this.torii.close(provider); // Attempt to close the provider-specific session\n    //                 // await this.session.invalidate(provider); // Then invalidate the session\n    //                 await this.session.invalidate(); // Use the specific authenticator for logout\n    //                 console.log(\"OAuth logout successful\");\n    //             } catch (error) {\n    //                 console.error('OAuth logout failed:', error);\n    //             }\n    //         }\n    //         console.log(\"Logout successful\");\n    //     } catch (error) {\n    //         console.log(error);\n    //         console.error('Logout failed:', error);\n    //     }\n    // }\n\n//Version 1\n    // @action\n    // async logout() {\n    //     const provider = this.session.data.authenticated.provider;\n    //     console.log(\"Attempting to logout with provider:\", provider);\n\n    //     if (!provider) {\n    //         console.error('Logout failed: No provider found in session data.');\n    //         await this.session.invalidate(); // Invalidate the session anyway to clear session data\n    //         return;\n    //     }\n\n    //     if (provider === 'basic-auth') {\n    //         // For basic-auth, directly invalidate the session as no provider-specific cleanup is needed\n    //         try {\n    //             await this.session.invalidate();\n    //             console.log(\"Basic-auth logout successful\");\n    //         } catch (error) {\n    //             console.error('Basic-auth logout failed:', error);\n    //         }\n    //     } else {\n    //         // For OAuth providers handled by Torii\n    //         try {\n    //             await this.torii.close(provider); // Attempt to close the provider-specific session\n    //             await this.session.invalidate(); // Then invalidate the session\n    //             console.log(\"OAuth logout successful\");\n    //         } catch (error) {\n    //             console.error('OAuth logout failed:', error);\n    //         }\n    //     }\n    // }\n  \n}","export { default } from 'ember-composability-tools/components/node';\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nconst GATEWAY_ENUM = Object.freeze({\n    Firmware: 0,\n    Coordinator: 1,\n    Voltage: 2,\n    RSSI: 3,\n    carrier: 4,\n    Readings: 5,\n    Uptime: 6,\n    Reconnection: 7,\n    Uploads: 8,\n    Temperature: 9,\n    var_1: 10,\n    var_2: 11,\n    var_3: 12,\n});\n\nconst AXIS_LABELS = {\n    Voltage: \"Voltage (V)\",\n    RSSI: \"RSSI (dBm)\",\n    Firmware: \"Firmware Ver.\",\n    Coordinator: \"Coordinator\",\n    Readings: \"Readings\",\n    Uptime: \"Uptime (s)\",\n    Reconnection: \"Reconnects\",\n    Uploads: \"Uploads\",\n    Temperature: \"Temperature (\\u00B0C)\",\n    carrier: \"Carrier\",\n    var_1: \"Var 1\",\n    var_2: \"Var 2\",\n    var_3: \"Var 3\",\n};\n\n// Shared line-building helper for both main chart and overview chart.\nfunction buildGatewayLines(sourceData, tempData, leftAxis, rightAxis) {\n    if (!sourceData) return [];\n\n    const leftIndex = GATEWAY_ENUM[leftAxis];\n    const rightIndex = GATEWAY_ENUM[rightAxis];\n\n    const tempValues = [];\n    if (tempData) {\n        tempData.forEach(item => {\n            const vals = item.get('values');\n            tempValues.push(vals ? vals[0] : null);\n        });\n    }\n\n    const leftLine = {\n        key: leftAxis,\n        yAxis: 'y',\n        values: sourceData.map((item, i) => {\n            let val;\n            if (leftAxis === 'Temperature' && tempData) {\n                val = (i < tempValues.length) ? tempValues[i] : null;\n            } else {\n                val = item.values ? item.values[leftIndex] : null;\n            }\n            return { x: moment(item.get('id')).valueOf(), y: val };\n        })\n    };\n\n    const rightLine = {\n        key: rightAxis,\n        yAxis: 'y2',\n        values: sourceData.map((item, i) => {\n            let val;\n            if (rightAxis === 'Temperature' && tempData) {\n                val = (i < tempValues.length) ? tempValues[i] : null;\n            } else {\n                val = item.values ? item.values[rightIndex] : null;\n            }\n            return { x: moment(item.get('id')).valueOf(), y: val };\n        })\n    };\n\n    return [leftLine, rightLine];\n}\n\nexport default Component.extend({\n    store: service(),\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    leftAxis: computed(function() {\n        let leftAxis = this.attrs.getQueryParams('left_axis_field');\n        return leftAxis || 'Voltage';\n    }),\n\n    rightAxis: computed(function() {\n        let rightAxis = this.attrs.getQueryParams('right_axis_field');\n        return rightAxis || 'RSSI';\n    }),\n\n    // Main chart: sourced from zoomChartData so brushing refetches and adds detail.\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'leftAxis', 'rightAxis', function() {\n        return buildGatewayLines(this.get('zoomChartData'), this.get('zoomTempData'), this.get('leftAxis'), this.get('rightAxis'));\n    }),\n\n    // Overview chart: always the full history (doesn't refetch on brush).\n    overviewChartLinesData: computed('fullRangeChartData', 'leftAxis', 'rightAxis', function() {\n        return buildGatewayLines(this.get('fullRangeChartData'), null, this.get('leftAxis'), this.get('rightAxis'));\n    }),\n\n    didInsertElement() {\n        this._super(...arguments);\n        const linesData = this.get('fullRangeChartLinesData');\n        const leftAxis = this.get('leftAxis');\n        const rightAxis = this.get('rightAxis');\n\n        const y1Title = AXIS_LABELS[leftAxis] || leftAxis;\n        const y2Title = AXIS_LABELS[rightAxis] || rightAxis;\n\n        this._buildMainChart(linesData, y1Title, y2Title);\n        this._buildOverviewChart();\n    },\n\n    _buildMainChart(linesData, y1Title, y2Title) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        let xMin, xMax;\n        linesData.forEach(l => {\n            l.values.forEach(v => {\n                if (v.x != null && v.y != null) {\n                    if (xMin === undefined || v.x < xMin) xMin = v.x;\n                    if (xMax === undefined || v.x > xMax) xMax = v.x;\n                }\n            });\n        });\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        const label = typeof pt.y === 'number' ? pt.y.toFixed(2) : String(pt.y);\n                        ctx.fillText(label, element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: { display: true, text: y1Title },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => typeof v === 'number' ? v.toFixed(2) : v }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: y2Title },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => typeof v === 'number' ? v.toFixed(2) : v }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const linesData = this.get('overviewChartLinesData') || [];\n        if (!linesData.length) return;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        let xMin, xMax;\n        newLines.forEach(l => {\n            (l.values || []).forEach(v => {\n                if (v.x != null && v.y != null) {\n                    if (xMin === undefined || v.x < xMin) xMin = v.x;\n                    if (xMax === undefined || v.x > xMax) xMax = v.x;\n                }\n            });\n        });\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('overviewChartLinesData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const newLines = this.get('overviewChartLinesData') || [];\n\n        newLines.forEach((line) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                overviewChart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin = this.get('axis_min');\n        const axisMax = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    axisScaleObserver2: observer('autoAxis2', 'axis_min_2', 'axis_max_2', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis2 = this.get('autoAxis2');\n        const axisMin2 = this.get('axis_min_2');\n        const axisMax2 = this.get('axis_max_2');\n\n        if (autoAxis2) {\n            chart.options.scales.y2.min = undefined;\n            chart.options.scales.y2.max = undefined;\n        } else {\n            chart.options.scales.y2.min = (axisMin2 != null && axisMin2 !== '') ? parseFloat(axisMin2) : undefined;\n            chart.options.scales.y2.max = (axisMax2 != null && axisMax2 !== '') ? parseFloat(axisMax2) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'GatewayChart.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nfunction resetNewGatewayObject(_this) {\n    _this.set('newGatewayObject', {});\n    _this.set('name', null);\n    _this.set('installDate', null);\n\n}\n\nexport default class CreateBluCellGateway extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewGatewayObject(this);\n        this.loadGateways(this.gatewayList);\n    }\n\n    loadGateways(gatewayList) {\n        const rawData = gatewayList; // Assuming gateways is an array of gateway objects\n        \n        // Filter gateways to get a list of only Blu900GW gateways\n        const filteredGateways = rawData.filter(function (gateway) {\n            if(gateway.active == true && gateway.get('gatewayType').title.toLowerCase() === 'blu900gw'){\n                return gateway.get('gatewayType').title.toLowerCase() === 'blu900gw';\n            }\n        });\n        \n        const mappedGateways = filteredGateways.map(function (gateway) {\n            // Retrieve parent gateway record based on available information\n            const parentId = gateway.get('parentId'); // Assuming there is a field 'parentId' in the gateway object\n            \n    \n            let gw = {\n                title: gateway.get('id') + ' - ' + gateway.get('gatewayType').title,\n                value: gateway.get('id'),\n                type: gateway.get('gatewayTypeID'),\n                parent: gateway, // Assign parent gateway to 'parent' property \n            };\n            \n            return gw;\n        });\n    \n        this.set('gateways', mappedGateways);\n    }\n        \n    isAuthenticated = true;\n    newGatewayObject = {};\n    installDate = null;\n    authError = false;\n    gateways = [];\n\n    actions = {\n        async createGateway(object){\n\n            let _this = this,\n            store = this.get('store'),\n            newGatewayObject = this.get('newGatewayObject');\n\n            this.set('isVisibleError',false);\n            this.set('duplicateError',false);\n            this.set('fieldError',false);\n\n            let error = false;\n\n            newGatewayObject.id = this.get('id');\n            newGatewayObject.installDate = this.get('installDate');\n            newGatewayObject.depth = this.get('depth');\n            newGatewayObject.active = true;\n\n            let interval_upload = await this.store.query('gateway-interval', {\n                filter: { interval_value: 5, interval_group_name: 'upload_interval' }\n            }).then(r => r.at(0)).catch(() => null);\n\n            let interval_read = await this.store.query('gateway-interval', {\n                filter: { interval_value: 5, interval_group_name: 'instrument_reading_interval' }\n            }).then(r => r.at(0)).catch(() => null);\n\n            if(typeof newGatewayObject.id === 'undefined' || newGatewayObject.id === \"\") {\n                error = true;\n                this.set('fieldError',true);\n                this.set('isVisibleError',true);\n            }\n\n            if (this.get('installDate') != null) {\n                newGatewayObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            let newGateway = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newGateway = store.createRecord('gateway', newGatewayObject);\n                    newGateway.set('gatewayType', store.peekRecord('gateway-type', this.typeID));\n                    newGateway.set('gatewayUploadInterval', interval_upload);\n                    newGateway.set('gatewayReadInterval', interval_read);\n                } catch (err) {\n                    this.set('isVisibleError',true);\n                    error = true;\n                    if(err.message.includes('has already been used')) {\n                        this.set('duplicateError',true);\n                        dup = true;\n                    }\n                }\n            }\n            \n            this.set('authError', false);\n\n            if(!error) {\n                newGateway.save().then(function(results){\n                    // console.log(dup);\n                    if(results.id != null) {\n                        _this.get('submit')(results.id);\n                    } else {\n                        this.set('isVisibleError',true);\n                        error = true;\n                    }\n                }).catch(function(reason) {\n                    _this.set('isVisibleError',true);\n                    _this.set('authError',true);\n                }); \n            } \n        },\n        async setID(gwId){\n            if(gwId != null && gwId !== '') {\n\n                let newGatewayObject = this.get('newGatewayObject');\n                console.log(newGatewayObject);\n                console.log(\"Parent Selected::: \" + gwId);\n\n                let parent = await this.store.findRecord('gateway', gwId).then((parentGateway) => {\n                    // Parent gateway retrieved successfully\n                    console.log(parentGateway.id);\n                    return parentGateway;\n                }).catch((error) => {\n                    // Handle error if the parent gateway does not exist or any other issue occurs\n                    console.error(error);\n                });\n                this.set('newGatewayObject.parentGateway', parent);\n                console.log(\"parentGateway::::::::::: \" + this.get('newGatewayObject').parentGateway.id);\n                \n            } else {\n                this.set('newGatewayObject.parentGateway', null);\n            }\n        },\n\n    }\n}\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let gatewayValueObjectValues = _this.get('gatewayValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(gatewayValueObjectValues).forEach(function(key,index) {\n        gatewayValueObjectValues[key] = null;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n\n    newGatewayValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newGatewayValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n\n    gatewayValueObjectValues: computed('anchorDistances', function() {\n        let gatewayValueObjectValues = [];\n        for (let i = 0; i <= this.get('anchorDistances').length - 1; i++) {\n            gatewayValueObjectValues[i] = 0;\n        }\n        return gatewayValueObjectValues;\n    }),\n\n    newGatewayValueObjectValues: computed('gatewayValueObjectValues', function() {\n        let gatewayValueObjectValues = [];\n        for (let i = 0; i <= this.get('gatewayValueObjectValues').length - 1; i++) {\n            gatewayValueObjectValues[i] = 0;\n        }\n        return gatewayValueObjectValues;\n    }),\n\n    actions: {\n        saveNew(){\n             console.log(\"saveNew\");\n            let _this = this,\n                store = this.get('store'),\n                newGatewayValuesObject = this.get('newGatewayValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                gatewayValues = this.get('gatewayValues'),\n                temperatureValues = this.get('temperatureValues');\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-gateway-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('gatewayId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newGatewayValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newGatewayValuesObject.values = Object.values(this.get('newGatewayValueObjectValues'));\n\n            const newGatewayValues = store.createRecord('gateway-value', newGatewayValuesObject);\n            // save new gateway-value to DB\n            const savedGatewayValuesObject = newGatewayValues.save({adapterOptions: this.get('gatewayId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if gateway-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //gatewayValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n\n            })\n            .catch(function(reason){\n                console.log(reason);\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import { camelize } from '@ember/string';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default class EditGateway extends Component.extend({\n\n    store: service(),\n    gatewayReadingsIntervals: null,\n    initialSelection: null,\n    isAuthenticated : true,\n    // selectedReadingIntervalID : null,\n    selectedModel : null,\n    editing : 0,\n\n    parentLoading: true,\n    init(){\n        this._super(...arguments);\n        this.loadGatewaysAsync();\n    },\n    loadGatewaysAsync() {\n        this.set('parentLoading', true);\n        this.store.query('gateway', { small: 'false', gateway_type: 3 }).then((rawData) => {\n            if (this.isDestroying || this.isDestroyed) return;\n            const filteredGateways = Array.from(rawData).filter(function (gateway) {\n                return gateway.active == true && gateway.get('gatewayType').title.toLowerCase() === 'blu900gw';\n            });\n            let parent = this.get('parent') || this.get('parentGateway');\n            let selectedItem = null;\n            const mappedGateways = filteredGateways.map(function (gateway) {\n                let gw = {\n                    title: gateway.get('id'),\n                    value: gateway.get('id'),\n                    type: gateway.get('gatewayTypeID'),\n                };\n                if (gateway.id == parent) {\n                    selectedItem = gw;\n                }\n                return gw;\n            });\n            this.set('gateways', mappedGateways);\n            this.set('initialSelection', selectedItem);\n            this.set('parentLoading', false);\n        }).catch((error) => {\n            if (this.isDestroying || this.isDestroyed) return;\n            console.error(\"Error loading gateway list: \", error);\n            this.set('parentLoading', false);\n        });\n    },\n    parent: computed('gateway', function() {\n        let gateway = this.get('gateway');\n        let parent = gateway.get('parentGateway');\n        if(parent == null){\n            // console.log(\"parent is null\");\n            return null;\n        }\n        // console.log(\"parent::: \" + parent.get('id'));\n        return parent.get('id');\n    }),\n    gateways: [],\n    \n    getGatewayUploadIntervalID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayUploadInterval = gw.gatewayUploadInterval;\n        // console.log(\"gatewayUploadInterval::: \" + gatewayUploadInterval)\n        if(gatewayUploadInterval == null){\n            return 0;\n        }\n            return (gatewayUploadInterval.id).toString();\n    }),\n\n    getGatewayReadIntervalID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayReadInterval = gw.gatewayReadInterval;\n        // console.log(\"gatewayReadInterval::: \" + gatewayReadInterval)\n        if(gatewayReadInterval == null){\n            return 0;\n        }\n        return (gatewayReadInterval.id).toString();\n    }),\n    \n}){\n    @service router;\n    @service store;\n    isAuthenticated = true;\n    _this = this;\n\n    actions = {\n        //in order for this to work the id of the select element must be the same as the attribute name\n        setGatewayInterval(event) {\n            let gateway = this.get('gateway');\n            const selectedOptions = Array.from(event.target.selectedOptions);\n            //id of the newly selected interval\n            const selectedValue = parseInt(selectedOptions.map(option => option.value));    \n            //interval attribute name\n            const intervalType = event.target.id;\n            // when the record has no interval records associated with it, when you try to save an error is thrown.\n            // I avoid this by defaulting the interval to 5 minutes when the one is saved and the other is null.\n            let notSelected = intervalType == 'gatewayReadInterval' ? 'gatewayUploadInterval' : 'gatewayReadInterval';\n\n            this.store.findRecord('gateway-interval', selectedValue).then((interval) => { \n                let notSelectedIntervalValue = gateway[notSelected];\n                let group_name = intervalType == 'gatewayReadInterval' ? 'instrument_reading_interval' : 'upload_interval';\n                if(notSelectedIntervalValue == null){\n                    //if the non-selected interval is null I default it here.\n                    this.store.query('gateway-interval', {\n                        filter: {\n                          interval_value: 5,\n                          interval_group_name: group_name\n                        }\n                        }).then(function(results) {\n                            gateway.set(notSelected, results.get('firstObject'));\n                            gateway.set(intervalType, interval); // Set the related object as the new value of the attribute\n                \n                            gateway.save().then(() => {\n                                console.log('Gateway saved successfully!');\n                            }).catch((error) => {\n                                console.log('Error saving gateway:', error);\n                            });\n            \n                        }).catch(function(error) {\n                        console.log(\"Error Getting interval_upload object::: \" + error);\n                      });\n                } else {\n                    \n                    gateway.set(intervalType, interval); // Set the related object as the new value of the attribute\n                    gateway.save().then(() => {\n                        console.log('Gateway saved successfully!');\n                    }).catch((error) => {\n                        console.log('Error saving gateway:', error);\n                    });\n                }                    \n            });\n            \n        },\n         \n        updatePage(){\n            let store = this.get('store');\n            let gateway = this.get('gateway');\n            gateway.save();\n        },\n        viewData(id) {\n            this.get('router').transitionTo('raw-gateway-data', id);\n        },\n        tGraph(id) {\n            //console.log(\"Edit-gateway::: \" + id)\n            this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, 'voltage-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveGateway(){\n            const _this = this;\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/gateway\";\n                }\n            } else {\n                window.location.href = \"/gateway\";\n            }\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        // updateProperty(propertyName, propertyValue) {\n        //     this.set(propertyName, propertyValue);\n        // },\n        async setID(event){\n            let gwId = event && event.target ? event.target.value : event;\n            if(gwId != null && gwId !== '') {\n                let gateway = this.get('gateway');\n                let parentGateway = await this.store.findRecord('gateway', gwId).catch((error) => {\n                    console.error(\"Error getting parent gateway: \" + error);\n                });\n                if (!parentGateway) return;\n\n                // POST new relation with is_current = true (backend handles deactivating old)\n                let newRelation = this.store.createRecord('gateway-child-relation', {\n                    parentGateway: parentGateway,\n                    childGateway: gateway,\n                    isCurrent: true\n                });\n                newRelation.save().then(() => {\n                    parentGateway.get('children').addObject(gateway);\n                    console.log(\"Parent gateway updated to: \" + gwId);\n                }).catch((error) => {\n                    console.log('Error saving gateway-child-relation:', error);\n                });\n            }\n        },\n    \n\n\n    }\n}\n\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    temperaturePoints: [],\n    distXRiseUpAnimationDuration: 500,\n    // chartMetric: computed(function(){\n    // let chartMetric = this.attrs.getQueryParams('chart_type');\n    //     if(chartMetric == null){\n    //       return 'voltage';\n    //     }\n    //    //console.log(\"chartMetric::: \" + chartMetric);\n    //     return chartMetric;\n    // }),\n    leftAxis: computed(function(){\n        let leftAxis = this.attrs.getQueryParams('left_axis_field');\n        if(leftAxis == null){\n          leftAxis = 'Voltage';\n        }\n        console.log(\"Left Axis:::: \" + leftAxis)\n        return leftAxis;\n    }),      \n    rightAxis: computed(function(){\n        let rightAxis = this.attrs.getQueryParams('right_axis_field');\n        if(rightAxis == null){\n            rightAxis = 'RSSI';\n          }\n          console.log(\"Right Axis: \" + rightAxis)\n          return rightAxis;\n    }),\n\n    GATEWAY_ENUM: Object.freeze({\n        Firmware: 0,\n        Coordinator: 1,\n        Voltage: 2,\n        RSSI: 3,\n        carrier: 4, \n        Readings: 5, \n        Uptime: 6, \n        Reconnection: 7, \n        Uploads: 8, \n        Temperature: 9,\n        var_1: 10, \n        var_2: 11, \n        var_3: 12,\n    }),\n\n    zoomTempPoints: computed(function(){\n        // let right = this.get('zoomDataPointsRightAxis');\n        let temperaturePoints = [];\n        let zoomTempData = this.get(\"zoomTempData\");\n        zoomTempData.forEach(function(item, i){\n            var chartData = { values: item.get(\"values\") };\n            temperaturePoints.push(chartData.values[0]);\n            // let temperaturePoints = this.get('temperaturePoints').push(chartData.values);\n        });\n        // console.log(\"zoomTempPoints::::::::::::::: 7\");    \n        // var chartData = { values: item.get(\"values\") };\n        //  = this.get('temperaturePoints').push(chartData.values);\n        \n        console.log(\"Temperature Points:\");\n        console.log(temperaturePoints);\n\n        return temperaturePoints; //chartData;\n    }),\n    zoomDataPointsLeftAxis: computed(function(){\n        \n        let zoomChartData = this.get(\"zoomChartData\");\n        let leftAxisIndex = this.GATEWAY_ENUM[this.leftAxis]\n        //TODO: fix this TA.  Hack because we added temperature at the last minute.\n        if(this.leftAxis == 'Temperature'){\n            // console.log(\"zoomDataPointsLeftAxis::::::::::::::: \" + this.get(\"temperaturePoints\"));\n            return this.get(\"zoomTempPoints\");\n        }\n        \n        let zoomLeftAxis = zoomChartData.map(function (item, i){\n            return item.values[leftAxisIndex];            \n        });\n        console.log(\"zoomLeftAxis ::::::::::::::: \" + JSON.stringify(zoomLeftAxis));    \n        return zoomLeftAxis;\n    }),\n    zoomDataPointsRightAxis: computed(function(){\n       //console.log(\"zoomDataPointsRightAxis::::::::::::::: 8\");\n        let zoomRightAxis = null;\n        if(this.rightAxis != null && this.rightAxis != 'Temperature'){\n            let zoomChartData = this.get(\"zoomChartData\");\n            let rightAxisIndex = this.GATEWAY_ENUM[this.rightAxis]        \n            zoomRightAxis = zoomChartData.map(function (item, i){\n                return item.values[rightAxisIndex];            \n            });\n        }\n        if (this.rightAxis == 'Temperature'){\n            zoomRightAxis = this.get(\"zoomTempPoints\");\n        }\n        console.log(\"zoomRightAxis::::::: \" + JSON.stringify(zoomRightAxis));\n        return zoomRightAxis;\n\n    }),\n    zoomDataPoints: computed('zoomChartData', function () {\n        \n       //console.log(\"zoomDataPoints::::::::::::::: 4 and 6 \" + this.get(\"chartDataValueName\") );\n        let left = this.get('zoomDataPointsLeftAxis');\n        \n        return left;\n    }),\n\n    fullRangeDataPoints: computed('fullRangeChartData', function () {\n        let fullRangePoints = null;\n        let itemHolder = {};\n\n        if(this.leftAxis != 'Temperature'){\n            fullRangePoints = this.get('fullRangeChartData');\n            fullRangePoints.map(function (item, i){\n                let itemHolder = { values: item.get(\"values\") };\n                return itemHolder;\n            });\n        } else {\n            itemHolder.values = [];\n            fullRangePoints = this.get(\"temperaturePoints\");\n            if(this.leftAxis == 'Temperature'){\n                fullRangePoints.forEach(function(item){\n                    itemHolder.values.push(item[0]);\n                });\n            }\n            fullRangePoints = itemHolder;\n        }\n        return fullRangePoints;\n        \n    }),\n\n/*     \n    fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n       //console.log(\"zoomTimePoints::::::::::::::: 9\");    \n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n       //console.log(\"fullRangeTimePoints::::::::::::::: 13\");\n        return item.get('id');\n    }),\n    \n    anchorDistances: computed('gateway', 'fullRangeChartData', function() {\n        let leftAxis = this.get('leftAxis'); \n       //console.log(\"anchorDistances::::::::::::::: 10   ::\" + leftAxis);\n        return [leftAxis];\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n       //console.log(\"zoomChartLinesData::::::::::::::: 2\");    \n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n        let tempPoints = this.get('zoomTempPoints');\n            \n        // console.log(\"zoomTempPoints::: \" + JSON.stringify(tempPoints));\n        // console.log(\"zoomTempPoints::: \" + this.get('temperaturePoints'));\n        \n        let anchorDistances = this.get('anchorDistances');\n        let zoomChartLinesData = [];\n\n        var mName = _this.get('chartDataModelName');\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[0]\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n       //console.log(\"TEMP::: \" + _this.get('chartDataModelName'));\n        let zoomTempPoints = this.get('zoomDataPointsRightAxis');\n        var temp = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                //console.log(\"temp Points::: \" + zoomTempPoints);\n                return [\n                    moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        //console.log(temp);\n        zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        \n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n       //console.log(\"fullRangeChartLinesData::::::::::::::: 11\");    \n        const _this = this;\n        const fullRangeDataPoints = this.get('fullRangeDataPoints');\n        const fullRangeTimePoints = this.get('fullRangeTimePoints');\n        \n        let fullRangeTempPoints = this.get('zoomDataPointsRightAxis');\n        let anchorDistances = this.get('anchorDistances');\n\n        let fullRangeChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                   //console.log(\"fullReang:::::::::::::::::::\" + _this.GATEWAY_ENUM[_this.leftAxis])\n                    ////console.log(\"DataPoint::: \" + dataPoint.values[chartLineIndex]);\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[_this.GATEWAY_ENUM[_this.leftAxis]]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n\n        var temperature = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: fullRangeTempPoints.map(function(dataPoint, dataPointIndex) {\n                //console.log(\"temp Points::: \" + zoomTempPoints);\n                return [\n                    moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        // fullRangeChartLinesData.push(temperature); //#TODO: Add Temp Points\n        return fullRangeChartLinesData;           \n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n       //console.log(\"chartDataModelName::::::::::::::: 5   \" + this.get('zoomChartData').query.model_name);    \n        //console.log(\"zoomChartData:\" + this.get('zoomChartData').query.model_name);\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n       //console.log(\"yAxisLegend::::::::::::::: 14\");    \n        let chartTitle = 'voltage'\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        //let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n    getTitleAndUnits: function(axis){\n        let axisValues = {\"Voltage\": \"Voltage, V\", \"RSSI\": \"RSSI, dBm\", \"Firmware\": \"Firmware Ver.\", \"Readings\": \"Readings\", \n                            \"Uptime\": 'Uptime - in Seconds.', \"Reconnection\": \"Reconnects\", \"Uploads\": \"Uploads\",\n                            \"Temperature\": \"Temperature,C\", \"var_1\": 9, \"var_2\": 9,  \"var_3\": 10}\n        // console.log(\"getTitleAndUnits::::::::::::::: \" + axisValues[axis]);\n        return axisValues[axis];\n    },\n    didInsertElement: function() {\n        \n       //console.log(\"didInsertElement::::::::::::::: 1\");    \n        const _this = this,\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n        const zoomChartLinesData = _this.get('zoomChartLinesData');\n        const fullRangeChartLinesData = _this.get('fullRangeChartLinesData');\n        \n        let zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg');\n        \n        let fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg');\n        let yAxisLegend = this.get('yAxisLegend');\n        let apiCallsPromises = yAxisLegend;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(false)\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showLegend(true)\n                .showDistX(true)\n                .noData('No usable data');\n\n            zoomChart.showYAxis = true;\n            zoomChart.y2Axis.showYAxis = true;\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        //console.log(\"D:::::::::: \" + d);\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        //console.log(nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d)));\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n               \n                let axis1Title = _this.getTitleAndUnits(_this.get('leftAxis'));\n                let axis2Title = _this.getTitleAndUnits(_this.get('rightAxis'));\n                \n                zoomChart.y1Axis\n                    .axisLabel(axis1Title)\n                    .axisLabelDistance(10);\n                \n                zoomChart.y2Axis\n                    .axisLabel(axis2Title)\n                    .axisLabelDistance(10)\n                ;\n                    \n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                zoomChart.y2Axis.tickFormat(d3.format(\".2f\"));\n                \n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                let legend = zoomChart.legend;\n                if(legend.controls){\n                    legend.controls.forEach(function(d, i) {\n                        d.disabled = false;\n                    });\n                }\n\n                //console.log(\"zoomChart::::\" + zoomChart.legend);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    //console.log(\"BRUSH END::::::::::::::::::::\");\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(false);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n                \n                function selectControls() {\n                    // console.log(\":::::::::::::::::::::: selectControls\");\n                    //zoomChart.chartData.forEach(function(series) { series.disabled = false; });                  \n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n                    tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    tooltipClass = 'other';\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                        \n                }\n\n                //     if (typeof(tooltipContent) === 'object') {\n                //         if (tooltipContent.type === 'Blast') {\n                //             tooltipClass = 'blast';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                //         } else if (tooltipContent.type === 'Seismic') {\n                //             tooltipClass = 'seismic';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                //         } else if (tooltipContent.type === 'BluVibe') {\n                //             tooltipClass = 'bluvibe';\n                //             eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                //         } else if (tooltipContent.type === 'Other') {\n                //             tooltipClass = 'other';\n                //         }\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                //                       '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                //                       eventSize\n                //         ;\n                //     } else {\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                //     }\n\n                //     return {\n                //         tooltipClass: tooltipClass,\n                //         tooltipText: tooltipText\n                //     };\n                // }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(\"VibeEventsArray:::\" + vibeEventsArray);\n                    //console.log(distXMouseMove);\n \n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                // d3.select('.nv-y2.nv-axis')\n                // .classed('nv-disabled', false)\n                // .attr('transform', 'translate(0,0)');\n        \n                nv.utils.windowResize(zoomChart.update);\n\n                // zoomChart.dispatch.on('stateChange', function(e) { \n                //     nv.log('New State:', JSON.stringify(e)); \n                // });\n                // zoomChart.state.dispatch.on('change', function(state){\n                //     nv.log('state', JSON.stringify(state));\n                // });\n\n               //console.log(\":::::::::::::::::::::::::::setData called\")\n                // _this.sendAction('setData',zoomChartLinesData);\n                // _this.sendAction('setChart',zoomChart);\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            //.showYAxis(true)\n        ;\n        \n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) {\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n        \n    }\n});\n","import { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    isVisibleCreateNewForm: false,\n\n    anchorDistances: computed('gateway', function() {\n        return [\"Firmware Version\",\"Coordinator\", \"Voltage\", \"RSSi\", \"Mesh ID\"];\n    }),\n    \n    getGatewayData: computed('gateway', 'gatewayData', function() {\n        let fields = [0, 2, 14];\n        let items = [];\n        // Perform filtering logic on initial data\n        const filteredData = this.get('gatewayData');\n        if (filteredData) {\n        filteredData.forEach(item => {\n            let values = [];\n            let firmware = item.values[0];\n            let coordinator = item.values[1];\n            let voltage = item.values[2];\n            let rssi = item.values[3];\n            let mesh_id = item.values[item.values.length - 1];\n            items.push({ id: item.id, values: {'firm_version':firmware, 'coordinator': coordinator, 'voltage':voltage, 'rssi': rssi, 'mesh_id':mesh_id}, originalValue: item, save_values:{'firm_version':firmware,'voltage':voltage,'mesh_id':mesh_id} });\n        });\n        }        \n        \n        return items;\n    }),\n    actions: {\n        updateProperty(propertyName, propertyValue) {\n          console.log(\"Update property: \" + propertyValue);\n          this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n  selected: '', // Set the initial value to 'RSSI'\n\n  defaultSelected: computed('selected', function () {\n    const selected = this.selected;\n    console.log('selected:::::::::::: ' + selected);\n    return selected === '' ? 'Voltage' : selected;\n  }),\n\n\n  actions: {\n    handleSelectedFieldChange(newValue) {\n      this.set('selected', newValue);\n    },\n  },\n});\n","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class LeftAxisDropdown extends Component.extend({}) {\n    @service router;\n    @service store;\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    actions = {\n        tGraph(id, modelName, params) {\n            console.log(\"in LeftAxisDropdown:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\")\n            this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, modelName, params);\n        },\n    }\n}","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n  rightAxisField: '', // Set the initial value to 'RSSI'\n  routeValue: 'voltage-values',\n\n  defaultRightAxisField: computed('rightAxisField', function() {\n    const rightAxisField = this.rightAxisField;\n    console.log('rightAxisField:::::::::::: ' + rightAxisField);\n    return rightAxisField === '' ? 'Temperature' : rightAxisField;\n  }),\n\n  getRouteValue: computed('selected', function () {\n    const selected = this.selected.toLowerCase();\n    console.log('selected:::::::::::: ' + selected);\n    this.set('routeValue', selected + '-values');\n  }),\n\n  actions: {\n    handleRightAxisFieldChange(newValue) {\n      console.log('handleRightAxisFieldChange:::::::::::: ' + newValue);    \n      this.set('rightAxisField', newValue);\n    }\n  }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nexport default Component.extend({\n    store: service(),\n    _spatialChart: null,\n\n    // anchor distances from instrument anchors, trimmed for strain-values\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        const firstObject = this.get('zoomChartData').get('firstObject');\n        if (!firstObject) { return []; }\n        const dataValuesCount = firstObject.get ? (firstObject.get('values')?.length ?? 0) : (firstObject.values?.length ?? 0);\n        const anchors = this.get('instrument').get('anchors');\n        let anchorDistances = (anchors.content ?? anchors).map(anchor => anchor.get('distance'));\n\n        const modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && modelName === 'strain-values') {\n            anchorDistances.splice(0, 1);\n        }\n        return anchorDistances;\n    }),\n\n    // midpoints between anchor distances for strain-values\n    anchorMidDistances: computed('anchorDistances', function() {\n        const anchorDistances = [...this.get('anchorDistances')];\n        const midDistances = [];\n        anchorDistances.unshift(0);\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            midDistances.push(+((anchorDistances[i] + anchorDistances[i + 1]) / 2).toFixed(2));\n        }\n        return midDistances;\n    }),\n\n    // x-axis depth values for the spatial chart\n    spatialXValues: computed('anchorDistances', 'anchorMidDistances', 'chartDataModelName', function() {\n        const modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            return this.get('anchorMidDistances');\n        }\n        return this.get('anchorDistances');\n    }),\n\n    // spatial lines: one line per timestamp reading (X = depth, Y = displacement)\n    spatialChartLinesData: computed('zoomChartData', 'spatialXValues', 'chartDataModelName', function() {\n        const zoomChartData = this.get('zoomChartData');\n        const xValues = this.get('spatialXValues');\n        const modelName = this.get('chartDataModelName');\n\n        return zoomChartData.map((item) => {\n            let values = item.get('values') || [];\n            // strain-values: prepend duplicate of first value (matching NVD3 behavior)\n            if (modelName === 'strain-values') {\n                values = [values[0], ...values];\n            }\n            return {\n                key: moment(item.get('id')).format('DD MMM YYYY HH:mm'),\n                timestamp: item.get('id'),\n                values: values.map((v, idx) => ({\n                    x: xValues[idx] !== undefined ? xValues[idx] : null,\n                    y: v !== undefined ? v : null\n                })).filter(pt => pt.x !== null)\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        const chartDataModelName = this.get('chartDataModelName');\n        const chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes')\n        }));\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        const title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName');\n                units = \"kN\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n\n        const spatialLinesData = this.get('spatialChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildSpatialChart(spatialLinesData, yAxisTitle);\n        });\n    },\n\n    _buildSpatialChart(linesData, yAxisTitle) {\n        const canvas = this.element.querySelector('canvas.chartjs-spatial');\n        if (!canvas) return;\n\n        let instrumentLength = 0;\n        try {\n            instrumentLength = this.instrument.get('instrumentLength') || 0;\n        } catch (e) { /* ignore */ }\n\n        const anchorXValues = this.get('spatialXValues');\n\n        const lineDatasets = linesData.map((line, i) => ({\n            label: line.key,\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            parsing: false,\n            _isLine: true\n        }));\n\n        // Anchor reference datasets: hidden from the chart (drawn by plugin instead)\n        // but still needed for legend generation\n        const anchorDatasets = anchorXValues.map((dist, i) => ({\n            label: String(dist),\n            data: [],\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            borderWidth: 0,\n            pointRadius: 0,\n            showLine: false,\n            _isRef: true\n        }));\n\n        const datasets = [...lineDatasets, ...anchorDatasets];\n\n        // \"No data\" overlay plugin\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds._isRef) return;\n                    if (!ds.hidden) ds.data.forEach(pt => { if (pt && pt.y != null) hasData = true; });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data available', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        // Plugin: draw anchor reference dots pinned to the bottom of the chart area\n        const anchorDotsPlugin = {\n            id: 'anchorDots',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                const yArea = chart.chartArea.bottom;\n                const ctx = chart.ctx;\n\n                anchorXValues.forEach((dist, i) => {\n                    const px = xScale.getPixelForValue(dist);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.arc(px, yArea, 6, 0, 2 * Math.PI);\n                    ctx.fillStyle = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                    ctx.fill();\n                    ctx.restore();\n                });\n            }\n        };\n\n        // Crosshair plugin — vertical dashed line following cursor\n        let crosshairX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                if (crosshairX === null) return;\n                const { ctx, chartArea: { top, bottom } } = chart;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        // --- Legend-tooltip helpers ---\n        let legendTooltipEl = null;\n        let highlightedIndex = null;\n\n        function buildSpatialLegendItems(chart) {\n            return chart.data.datasets.filter(ds => ds._isLine).map((ds) => {\n                const i = chart.data.datasets.indexOf(ds);\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:1;margin-right:3px;\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div></div>`;\n            }).join('');\n        }\n\n        function highlightLine(chart, idx, skipUpdate) {\n            highlightedIndex = idx;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine) return;\n                ds.borderColor = (i === idx)\n                    ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                    : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '22';\n            });\n            if (!skipUpdate) chart.update('none');\n        }\n\n        function restoreLines(chart, skipUpdate) {\n            highlightedIndex = null;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine) return;\n                ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n            });\n            if (!skipUpdate) chart.update('none');\n        }\n\n        function attachSpatialLegendHandlers(el, chart) {\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                highlightLine(chart, parseInt(item.dataset.ds));\n            };\n            el.onmouseout = function() {\n                restoreLines(chart);\n            };\n        }\n\n        function initSpatialLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildSpatialLegendItems(chart);\n            attachSpatialLegendHandlers(legendTooltipEl, chart);\n        }\n\n        function distToSegment(px, py, x1, y1, x2, y2) {\n            const dx = x2 - x1, dy = y2 - y1;\n            const lenSq = dx * dx + dy * dy;\n            let t = lenSq === 0 ? 0 : Math.max(0, Math.min(1, ((px - x1) * dx + (py - y1) * dy) / lenSq));\n            const projX = x1 + t * dx, projY = y1 + t * dy;\n            const ex = px - projX, ey = py - projY;\n            return Math.sqrt(ex * ex + ey * ey);\n        }\n\n        function findClosestLine(chart, mouseX, mouseY) {\n            let closestIdx = -1;\n            let closestDist = Infinity;\n\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine || chart.getDatasetMeta(i).hidden) return;\n                const pts = chart.getDatasetMeta(i).data;\n                if (!pts || pts.length < 2) return;\n\n                for (let j = 0; j < pts.length - 1; j++) {\n                    const p1 = pts[j], p2 = pts[j + 1];\n                    if (!p1 || !p2) continue;\n                    const dist = distToSegment(mouseX, mouseY, p1.x, p1.y, p2.x, p2.y);\n                    if (dist < closestDist) {\n                        closestDist = dist;\n                        closestIdx = i;\n                    }\n                }\n            });\n\n            return { datasetIndex: closestIdx, pixelDist: closestDist };\n        }\n\n        let lastTooltipIdx = null;\n\n        function updateSpatialTooltip(chart, mouseX, mouseY) {\n            if (!legendTooltipEl) return;\n            const { left, right, top, bottom } = chart.chartArea;\n            if (mouseX < left || mouseX > right || mouseY < top || mouseY > bottom) {\n                if (highlightedIndex !== null) restoreLines(chart, true);\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildSpatialLegendItems(chart);\n                attachSpatialLegendHandlers(legendTooltipEl, chart);\n                lastTooltipIdx = null;\n                return;\n            }\n\n            const closest = findClosestLine(chart, mouseX, mouseY);\n            if (closest.datasetIndex < 0) return;\n\n            if (closest.datasetIndex !== highlightedIndex) {\n                highlightLine(chart, closest.datasetIndex, true);\n            }\n\n            const activeIdx = highlightedIndex != null ? highlightedIndex : closest.datasetIndex;\n            if (activeIdx !== lastTooltipIdx) {\n                lastTooltipIdx = activeIdx;\n                const ds = chart.data.datasets[activeIdx];\n                const valuesHtml = ds.data.map((pt, idx) => {\n                    const anchorColor = CHART_LINE_COLORS[idx % CHART_LINE_COLORS.length];\n                    return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${anchorColor};\"></div>${pt && pt.y != null ? pt.y.toFixed(2) : '—'}</div>`;\n                }).join('');\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = `<div class=\"legend-tooltip-date\">${ds.label}</div>${valuesHtml}`;\n            }\n        }\n\n        const spatialChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                parsing: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'nearest', intersect: false, axis: 'y' },\n                onHover(e) {\n                    if (e.x != null) {\n                        crosshairX = e.x;\n                    }\n                },\n                scales: {\n                    x: {\n                        type: 'linear',\n                        min: 0,\n                        max: instrumentLength > 0 ? instrumentLength : undefined,\n                        title: {\n                            display: true,\n                            text: 'Depth (mm)',\n                            font: { size: 12 }\n                        },\n                        afterBuildTicks(axis) {\n                            // Show ticks at anchor positions that are in visible range\n                            const visibleAnchors = anchorXValues\n                                .filter(v => v >= axis.min && v <= axis.max)\n                                .map(v => ({ value: v }));\n                            if (visibleAnchors.length > 0) {\n                                axis.ticks = visibleAnchors;\n                            }\n                            // else: let ChartJS auto-generate ticks when zoomed between anchors\n                        },\n                        ticks: {\n                            callback(val) { return val.toLocaleString(); }\n                        }\n                    },\n                    y: {\n                        title: {\n                            display: true,\n                            text: yAxisTitle,\n                            font: { size: 12 }\n                        },\n                        ticks: {\n                            callback(val) { return val.toFixed ? val.toFixed(2) : val; }\n                        }\n                    }\n                },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                }\n            },\n            plugins: [noDataPlugin, anchorDotsPlugin, crosshairPlugin]\n        });\n\n        initSpatialLegendTooltip(canvas.parentElement, spatialChart);\n\n        // --- Scroll-to-zoom (both axes) ---\n        const origXMin = spatialChart.options.scales.x.min;\n        const origXMax = spatialChart.options.scales.x.max;\n        canvas.addEventListener('wheel', e => {\n            e.preventDefault();\n            const rect = canvas.getBoundingClientRect();\n            const xScale = spatialChart.scales['x'];\n            const yScale = spatialChart.scales['y'];\n            const factor = e.deltaY < 0 ? 1.15 : 0.87;\n            const cursorX = xScale.getValueForPixel(e.clientX - rect.left);\n            const cursorY = yScale.getValueForPixel(e.clientY - rect.top);\n            spatialChart.options.scales.x.min = cursorX - (cursorX - xScale.min) * factor;\n            spatialChart.options.scales.x.max = cursorX + (xScale.max - cursorX) * factor;\n            spatialChart.options.scales.y.min = cursorY - (cursorY - yScale.min) * factor;\n            spatialChart.options.scales.y.max = cursorY + (yScale.max - cursorY) * factor;\n            spatialChart.update('none');\n        }, { passive: false });\n\n        // --- Drag-to-pan (both axes) ---\n        let panStartX = null, panStartY = null;\n        let panXMin = null, panXMax = null, panYMin = null, panYMax = null;\n        canvas.addEventListener('mousedown', e => {\n            panStartX = e.clientX; panStartY = e.clientY;\n            panXMin = spatialChart.scales['x'].min; panXMax = spatialChart.scales['x'].max;\n            panYMin = spatialChart.scales['y'].min; panYMax = spatialChart.scales['y'].max;\n            canvas.style.cursor = 'grabbing';\n        });\n        canvas.addEventListener('mousemove', e => {\n            const rect = canvas.getBoundingClientRect();\n            const px = e.clientX - rect.left;\n            const py = e.clientY - rect.top;\n            const { left, right } = spatialChart.chartArea;\n            crosshairX = (px >= left && px <= right) ? px : null;\n            if (panStartX !== null) {\n                const xPxRange = spatialChart.chartArea.right - spatialChart.chartArea.left;\n                const yPxRange = spatialChart.chartArea.bottom - spatialChart.chartArea.top;\n                spatialChart.options.scales.x.min = panXMin - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.x.max = panXMax - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.y.min = panYMin + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n                spatialChart.options.scales.y.max = panYMax + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n            } else {\n                updateSpatialTooltip(spatialChart, px, py);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('mouseleave', () => {\n            crosshairX = null;\n            if (highlightedIndex !== null) restoreLines(spatialChart);\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildSpatialLegendItems(spatialChart);\n                attachSpatialLegendHandlers(legendTooltipEl, spatialChart);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('mouseleave', () => {\n            crosshairX = null;\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('dblclick', () => {\n            spatialChart.options.scales.x.min = origXMin;\n            spatialChart.options.scales.x.max = origXMax;\n            spatialChart.options.scales.y.min = undefined;\n            spatialChart.options.scales.y.max = undefined;\n            spatialChart.update('none');\n        });\n        const onPanEnd = () => {\n            panStartX = panStartY = panXMin = panXMax = panYMin = panYMax = null;\n            canvas.style.cursor = 'default';\n        };\n        canvas.addEventListener('mouseup', onPanEnd);\n        document.addEventListener('mouseup', onPanEnd);\n\n        this.set('_spatialChart', spatialChart);\n    },\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const spatialChart = this.get('_spatialChart');\n        if (spatialChart) { spatialChart.destroy(); }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport zoomPlugin from 'chartjs-plugin-zoom';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables, zoomPlugin);\n\n// Chart line colors — sourced from color-palette\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,    // #0077b6\n    colorPalette.orange2,   // #FF7444\n    colorPalette.green3,    // #2a9d8f\n    colorPalette.red1,      // #D25353\n    colorPalette.purple7,   // #8b5cf6\n    colorPalette.beige22,   // #b08968\n    colorPalette.pink6,     // #ec4899\n    colorPalette.gray5,     // #6b7280\n    colorPalette.teal6,     // #10b981\n    colorPalette.cyan4,     // #06b6d4\n];\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,  // set on overlay mousedown, cleared on mouseup\n    _brushLastRange: null,    // last [startTs, endTs] submitted via updateProperties (guards against re-submits on restore)\n\n    init() {\n        this._super(...arguments);\n        const yAxisUnitParam = this.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n\n    },\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let anchors = this.get('instrument').get('anchors');\n        const arr = anchors.content ?? anchors;\n        let anchorDistances = arr.map(anchor => anchor.get('distance'));\n\n        var modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            var midPoints = [];\n            for (var i = 0; i < anchorDistances.length - 1; i++) {\n                midPoints[i] = ((anchorDistances[i] + anchorDistances[i + 1]) / 2).toFixed(2);\n            }\n            anchorDistances = midPoints;\n        }\n        return anchorDistances;\n    }),\n\n    // Plots the main line data from zoomChartData so Group By (window=1440, etc.) actually\n    // affects the chart — matches NVD3 pack temporal which feeds zoomChartData to its main chart.\n    // (fullRangeChartData is still fetched by the route and remains available for a future brush/context strip.)\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'anchorDistances', 'chartDataModelName', function() {\n        const anchorDistances = this.get('anchorDistances');\n        const sourceData = this.get('zoomChartData');\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n\n        const lines = anchorDistances.map((chartLineName, chartLineIndex) => ({\n            key: chartLineName,\n            values: sourceData.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[chartLineIndex] !== undefined) ? arr[chartLineIndex] : null\n                };\n            })\n        }));\n\n        // Add temperature overlay on y2 (unless viewing temperature data itself)\n        if (modelName !== 'temperature-values') {\n            const zoomTempData = this.get('zoomTempData');\n            if (zoomTempData && zoomTempData.length) {\n                lines.push({\n                    key: 'T (°C)',\n                    yAxis: 'y2',\n                    hidden: false,\n                    values: zoomTempData.map(item => {\n                        const rawValues = item.get('values');\n                        const arr = Array.isArray(rawValues) ? rawValues : [];\n                        return {\n                            x: moment(item.get('id')).valueOf(),\n                            y: arr[0] !== undefined ? arr[0] : null\n                        };\n                    })\n                });\n            }\n        }\n\n        return lines;\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        let title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                units = this.get(\"yAxisUnit\") || getAttr('units');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'temperature':\n                axisName = \"Temperature\";\n                units = \"°C\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const fullRangeChartLinesData = this.get('fullRangeChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildMainChart(fullRangeChartLinesData, yAxisTitle);\n            this._buildOverviewChart();\n        });\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        // Collect x timestamps only from points with actual readings (y != null)\n        // so the axis doesn't extend into the empty \"null-y\" tail of the queried range\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        // Custom plugin: show \"No data in selected range\" when nothing is visible\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        // Custom plugin: draw seismic (blue) and blast (red) vertical lines\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        // Crosshair plugin — vertical line following the cursor, or solid line if pinned\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        // Point labels plugin — draws value labels when ≤20 points are visible in the x range\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        // --- Legend-tooltip HTML helpers ---\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems, chart) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints, chart);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items, chart);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    // Builds a slim overview / brush chart under the main chart using fullRangeChartData.\n    // Drag-to-select on the overlay narrows start_timestamp/end_timestamp query params,\n    // which triggers a refreshModel → refetch → the dataObserver refreshes the main chart.\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        // Build one faint line per anchor channel.\n        const datasets = anchorDistances.map((chartLineName, i) => ({\n            label: String(chartLineName),\n            data: fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        // If the user arrived with existing start/end query params, draw the saved brush.\n        this._restoreBrushFromQueryParams();\n\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            // Tiny drag = treat as a click → reset (clear query params, show full history).\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        // Double-click anywhere on the overlay → reset to full history\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        // Avoid re-submitting the exact same range (e.g. on dataObserver-triggered restore).\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    /* eslint-disable */\n    _buildOverviewChartLEGACY(fullRangeChartLinesData) {\n        const _this = this; // kept for reference only\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        if (!canvas || !selectionEl || !overlayEl) return;\n\n        // Build datasets from full-range data (only non-temperature lines for clarity)\n        const datasets = fullRangeChartLinesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            tension: 0\n        }));\n\n        // Collect full x range from points with actual readings only\n        const allTs = fullRangeChartLinesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const fullXMin = allTs.length ? Math.min(...allTs) : undefined;\n        const fullXMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'HH:mm',\n                                second:      'HH:mm',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: fullXMin,\n                        max: fullXMax,\n                        ticks: { maxTicksLimit: 6, maxRotation: 0 }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n\n        this.set('_overviewChart', overviewChart);\n\n        // --- Brush / range-selection logic ---\n        // Supports three interaction modes:\n        //   'create' — drag on empty area to draw a new selection\n        //   'slide'  — drag inside existing selection to scrub/slide it\n        //   'resize-left' / 'resize-right' — drag edges to resize\n\n        const EDGE_HIT_PX = 8; // px within edge that triggers resize mode\n\n        let dragMode = null;   // 'create' | 'slide' | 'resize-left' | 'resize-right'\n        let selLeft = 0;       // current selection left px\n        let selWidth = 0;      // current selection width px\n\n        function pixelToTimestamp(px) {\n            const scale = overviewChart.scales['x'];\n            const { left, right } = overviewChart.chartArea;\n            const clamped = Math.max(left, Math.min(right, px));\n            const ratio = (clamped - left) / (right - left);\n            return scale.min + ratio * (scale.max - scale.min);\n        }\n\n        function timestampToPixel(ts) {\n            const scale = overviewChart.scales['x'];\n            const { left, right } = overviewChart.chartArea;\n            const ratio = (ts - scale.min) / (scale.max - scale.min);\n            return left + ratio * (right - left);\n        }\n\n        function clampToChartArea(px) {\n            const { left, right } = overviewChart.chartArea;\n            return Math.max(left, Math.min(right, px));\n        }\n\n        function applySelection(l, w) {\n            selLeft = l;\n            selWidth = w;\n            selectionEl.style.left = l + 'px';\n            selectionEl.style.width = w + 'px';\n            selectionEl.style.display = w > 2 ? 'block' : 'none';\n        }\n\n        function clientXToOverlayPx(clientX) {\n            return clientX - overlayEl.getBoundingClientRect().left;\n        }\n\n        function getDragMode(px) {\n            if (selectionEl.style.display === 'none' || selWidth < 3) return 'create';\n            const withinLeft  = Math.abs(px - selLeft) <= EDGE_HIT_PX;\n            const withinRight = Math.abs(px - (selLeft + selWidth)) <= EDGE_HIT_PX;\n            const inside = px > selLeft && px < selLeft + selWidth;\n            if (withinLeft)  return 'resize-left';\n            if (withinRight) return 'resize-right';\n            if (inside)      return 'slide';\n            return 'create';\n        }\n\n        function updateCursor(px) {\n            const mode = getDragMode(px);\n            if (mode === 'slide')         overlayEl.style.cursor = 'grab';\n            else if (mode === 'resize-left' || mode === 'resize-right') overlayEl.style.cursor = 'ew-resize';\n            else                          overlayEl.style.cursor = 'crosshair';\n        }\n\n        // Apply x zoom to main chart and auto-scale y to the visible data\n        function applyMainChartZoom(tsStart, tsEnd) {\n            const mainChart = _this.get('_mainChart');\n            if (!mainChart) return;\n\n            mainChart.options.scales.x.min = tsStart;\n            mainChart.options.scales.x.max = tsEnd;\n\n            // Recompute y range from data points visible in [tsStart, tsEnd]\n            let yMin = Infinity, yMax = -Infinity;\n            mainChart.data.datasets.forEach(ds => {\n                if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                ds.data.forEach(pt => {\n                    if (pt == null || pt.y == null) return;\n                    if (pt.x >= tsStart && pt.x <= tsEnd) {\n                        if (pt.y < yMin) yMin = pt.y;\n                        if (pt.y > yMax) yMax = pt.y;\n                    }\n                });\n            });\n\n            if (yMin !== Infinity && yMax !== -Infinity) {\n                const pad = (yMax - yMin) * 0.1 || Math.abs(yMin) * 0.1 || 1;\n                mainChart.options.scales.y.min = yMin - pad;\n                mainChart.options.scales.y.max = yMax + pad;\n            } else {\n                mainChart.options.scales.y.min = undefined;\n                mainChart.options.scales.y.max = undefined;\n            }\n\n            mainChart.update('none');\n        }\n\n        function commitSelection(tsStart, tsEnd) {\n            // Immediately zoom the main chart, but only within the data that is\n            // currently loaded — prevents the \"sliced cut\" when the selected range\n            // extends beyond the current query window.  The route will refetch and\n            // rebuild the chart for the full selected range via updateProperties.\n            const mainChart = _this.get('_mainChart');\n            if (mainChart) {\n                const allPts = mainChart.data.datasets.flatMap(ds => ds.data).filter(p => p && p.x != null);\n                const dataMin = allPts.length ? Math.min(...allPts.map(p => p.x)) : tsStart;\n                const dataMax = allPts.length ? Math.max(...allPts.map(p => p.x)) : tsEnd;\n\n                const clampedStart = Math.max(tsStart, dataMin);\n                const clampedEnd   = Math.min(tsEnd,   dataMax);\n\n                if (clampedStart < clampedEnd) {\n                    applyMainChartZoom(clampedStart, clampedEnd);\n                }\n            }\n\n            const startTs = moment(tsStart).format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n            const endTs   = moment(tsEnd).format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n            _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n\n        // dragAnchorX — fixed at mousedown, used only for 'create' mode to track origin\n        // prevDragX   — updated each move, used for slide/resize delta calculation\n        let dragAnchorX = null;\n        let prevDragX   = null;\n\n        overlayEl.addEventListener('mousedown', e => {\n            const px   = clientXToOverlayPx(e.clientX);\n            dragMode    = getDragMode(px);\n            dragAnchorX = px;\n            prevDragX   = px;\n            overlayEl.style.cursor = dragMode === 'slide' ? 'grabbing' : overlayEl.style.cursor;\n\n            if (dragMode === 'create') {\n                applySelection(px, 0);\n            }\n        });\n\n        overlayEl.addEventListener('mousemove', e => {\n            const px = clientXToOverlayPx(e.clientX);\n\n            if (!dragMode) {\n                updateCursor(px);\n                return;\n            }\n\n            if (dragMode === 'create') {\n                const l = Math.min(dragAnchorX, px);\n                const w = Math.abs(px - dragAnchorX);\n                applySelection(l, w);\n            } else if (dragMode === 'slide') {\n                const delta    = px - prevDragX;\n                const chartL   = overviewChart.chartArea.left;\n                const chartR   = overviewChart.chartArea.right;\n                const newLeft  = Math.max(chartL, Math.min(chartR - selWidth, selLeft + delta));\n                applySelection(newLeft, selWidth);\n            } else if (dragMode === 'resize-left') {\n                const delta    = px - prevDragX;\n                const newLeft  = clampToChartArea(selLeft + delta);\n                const newWidth = selLeft + selWidth - newLeft;\n                if (newWidth > 4) applySelection(newLeft, newWidth);\n            } else if (dragMode === 'resize-right') {\n                const delta    = px - prevDragX;\n                const newWidth = clampToChartArea(selLeft + selWidth + delta) - selLeft;\n                if (newWidth > 4) applySelection(selLeft, newWidth);\n            }\n\n            prevDragX = px;\n        });\n\n        const onMouseUp = _e => {\n            if (!dragMode) return;\n            const mode = dragMode;\n            dragMode    = null;\n            dragAnchorX = null;\n            prevDragX   = null;\n            overlayEl.style.cursor = 'crosshair';\n\n            if (mode === 'create' && selWidth < 5) {\n                // Click with no meaningful drag → reset to full range\n                applySelection(0, 0);\n                const mainChart = _this.get('_mainChart');\n                if (mainChart) {\n                    mainChart.options.scales.x.min = fullXMin;\n                    mainChart.options.scales.x.max = fullXMax;\n                    mainChart.options.scales.y.min = undefined;\n                    mainChart.options.scales.y.max = undefined;\n                    mainChart.update('none');\n                }\n                return;\n            }\n\n            const tsStart = pixelToTimestamp(selLeft);\n            const tsEnd   = pixelToTimestamp(selLeft + selWidth);\n            commitSelection(tsStart, tsEnd);\n        };\n\n        overlayEl.addEventListener('mouseup', onMouseUp);\n        document.addEventListener('mouseup', onMouseUp);\n\n        // Restore the overview selection box from existing query params.\n        // Do NOT call applyMainChartZoom here — _buildMainChart already set the\n        // correct x range (clamped to where data actually exists via null-y filter).\n        const startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n        const endTimestamp   = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n        if (startTimestamp && endTimestamp) {\n            // Wait one tick for chart to finish rendering before reading chartArea\n            setTimeout(() => {\n                const x0 = timestampToPixel(startTimestamp);\n                const x1 = timestampToPixel(endTimestamp);\n                applySelection(x0, x1 - x0);\n            }, 100);\n        }\n    },\n\n    // Main chart data observer — fires after a refreshModel refetch (user brushed a new range).\n    // Swaps datasets + x bounds in place so we don't rebuild the chart instance.\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    // Overview chart data observer — fires when fullRangeChartData itself changes\n    // (e.g. switching chart type or hitting a different instrument). Keeps the brush chart in sync.\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        anchorDistances.forEach((chartLineName, i) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(chartLineName));\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        // Re-draw saved brush position after the overview scale updates.\n        this._restoreBrushFromQueryParams();\n    }),\n\n    // React to Adjust Scales controls (autoAxis / axis_min / axis_max)\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed, get } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nfunction resetNewInstrumentObject(_this) {\n    //console.log('reset');\n    _this.set('newInstrumentObject', {});\n    //_this.set('name', null);\n    _this.set('zeroTimestamp', null);\n    _this.set('installDate', null);\n    //_this.set('east', null);\n    //_this.set('north', null);\n    //_this.set('depth', null);\n    //_this.set('azimuth', null);\n    //_this.set('dip', null);\n    //_this.set('instrumentType', 0);\n    //_this.set('headAt', 'HAC');\n    //_this.set('instrumentLength', 0);\n    //_this.set('strokeLength', 0);\n    //_this.set('referenceAnchor', null);\n    //_this.set('headExclusionLength', 0);\n    //_this.set('gaugeLength', 0);\n    //_this.set('bulbed', false);\n    //_this.set('plated', false);\n    //_this.set('stacked', false);\n    //_this.set('active', true);\n}\n\nexport default class CreatePackInstrument extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n    }\n\n    isAuthenticated = true;\n    newInstrumentObject = {};\n    headAt = 'HAC';\n    zeroTimestamp = null;\n    installDate = null;\n    authError = false;\n    project = null;\n    level = null;\n\n    actions= {\n\n        \n        setProject(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n\n        createInstrument(object){\n\n            //console.log(this.get('prevDup'));\n            //console.log((typeof this.get('prevDup') === \"undefined\"));\n\n            let _this = this,\n            store = this.get('store'),\n            newInstrumentObject = this.get('newInstrumentObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newInstrumentObject.id = this.get('id');\n\n            newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n            newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n            newInstrumentObject.active = true;\n\n            if(typeof newInstrumentObject.id === 'undefined' || newInstrumentObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n\n            if(!error) {\n                if(typeof newInstrumentObject.strokeLength === 'undefined' || newInstrumentObject.strokeLength === 0) {\n                    error = true;\n                    this.setError('fieldError',true);\n                    this.setError('isVisibleError',true);\n                }\n            }\n\n            if (this.get('zeroTimestamp') != null) {\n                newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('installDate') != null) {\n                newInstrumentObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            // console.log(get(this, 'duplicateError'));\n\n            let newInstrument = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    error = true;\n                    if(err.message && err.message.includes('has already been used')) {\n                        //console.log('duplicate');\n                        this.setError('duplicateError',true);\n                        dup = true;\n                    }\n                    // console.log(err.message);\n                }\n            }\n            \n            this.setError('authError', false);\n\n            if (!error) {\n                \n                    newInstrument.save().then(function(results){\n                        // console.log(dup);\n                        if(results.id != null) {\n                            _this.get('submit')(results.id);\n                        } else {\n                            this.setError('isVisibleError',true);\n                            error = true;\n                        }\n                    }).catch(function(reason) {\n                        \n                        _this.setError('isVisibleError',true);\n                        _this.setError('authError',true);\n                    }); \n            } \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let displacementValueObjectValues = _this.get('displacementValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(displacementValueObjectValues).forEach(function(key,index) {\n        displacementValueObjectValues[key] = 0;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n    // newTimestampValue: computed('dateFormat', function() {\n    //     return moment().format(this.get('dateFormat'));\n    // }),\n\n    newDisplacementValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n    displacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    newDisplacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    actions: {\n        setNewDisplacementValue(key, event) {\n            const vals = this.get('newDisplacementValueObjectValues');\n            vals[key] = event.target.value;\n        },\n        setNewTimestampValue(event) {\n            this.set('newTimestampValue', event.target.value);\n        },\n        setTemperatureValue(event) {\n            this.set('temperatureObjectValue', event.target.value);\n        },\n        saveNew(){\n            let _this = this,\n                store = this.get('store'),\n                newDisplacementValuesObject = this.get('newDisplacementValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                displacementValues = this.get('displacementValues'),\n                temperatureValues = this.get('temperatureValues')\n            ;\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newDisplacementValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newDisplacementValuesObject.values = Object.values(this.get('newDisplacementValueObjectValues'));\n\n            const newDisplacementValues = store.createRecord('displacement-value', newDisplacementValuesObject);\n            // save new displacement-value to DB\n            const savedDisplacementValuesObject = newDisplacementValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if displacement-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //displacementValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n                \n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import { getApiBaseUrl } from '../../utils/api-config';\nimport { computed, observer } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    didReceiveAttrs() {\n        this._super(...arguments);\n      },\n    router:service(),\n    store:service(),\n    api:service(),\n    session: service(),\n    editing: 0,\n    selectedVendor: null,\n    selectedModel: null,\n    project: null,\n    level: null,\n\n    \n    //New Params\n    activeActionTab:null,\n    ordering:null,\n    paginationSearchConfig:{    \n        searchObject:{ calibrationDateOrdering:\"DESC\"},\n        pagination:{page:1, pageSize:5, totalPages:1},\n        alertProfilePaginationList : [],\n    },\n    anchorDiagramInputInitalValue:[],\n    batchSelectedAlertsID:[],\n    isAlertsListVisible:false,\n    isEditAnchorDiagram:false,\n\n    async init() {\n        this._super(...arguments);\n        await this.getAlertsList();\n    },\n    getAlertsList:async function(){\n\n        let payload = {\n            instrumentId: this.get(\"instrument\").id,\n            page: this.paginationSearchConfig.pagination.page,\n            page_size:this.paginationSearchConfig.pagination.pageSize,\n            \n        };\n        if (this.get(\"ordering\") != null ){\n            payload[\"ordering\"] = this.get(\"ordering\");\n        }\n        let url = getApiBaseUrl() + \"/alerts/\";\n        const queryString = new URLSearchParams(payload).toString();\n        if (queryString) {\n          url += `?${queryString}`;\n        }\n        const response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json(); \n            const metaPaginationData = responseData['meta'];\n            this.set(\"paginationSearchConfig.pagination.totalPages\", metaPaginationData['pagination']['total_pages']);\n\n            this.processAlertsList(responseData.data);\n            this.updatePaginationList();\n        }\n        else {\n            this.set(\"alertsList\", [])\n        } \n    },\n    processAlertsList:function(rawList){\n        let list = [];\n        rawList.forEach(element => {\n            let rawElement = element;\n            element = element[\"attributes\"]\n            list.push({\n                id: rawElement[\"id\"],\n                counter: element[\"counter\"],\n                createdAt: element[\"created-at\"],\n                evaluationType: element[\"evaluation-type\"],\n                instrumentId: element[\"instrument-id\"],\n                isAcknowledged: element[\"is-acknowledged\"],\n                isActive: element[\"is-active\"],\n                isMuted: element[\"is-muted\"],\n                lastDataReceivedAt: element[\"last-data-received-at\"],\n                lastEvaluatedAt: element[\"last-evaluated-at\"],\n                lastTriggeredAt: element[\"last-triggered-at\"],\n                level: element[\"level\"],\n                name: element[\"name\"],\n                channels: element[\"channels\"],\n                note: element[\"note\"],\n                parameters: element[\"parameters\"],\n                softResetCounter: element[\"soft-reset-counter\"],\n            })\n        });\n        this.set(\"alertsList\", list)\n    },\n    updatePaginationList: function () {\n        let range = [];\n        const maxPageToShow = 3; // Adjust this based on how many pages you want to show in the middle\n        const paginationObj = this.get('paginationSearchConfig.pagination');\n    \n        // Always include the first page\n        range.push(1);\n    \n        if (paginationObj['totalPages'] <= maxPageToShow + 2) {\n            // If total pages are small enough, show all pages\n            for (let i = 2; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else if (paginationObj['page'] <= maxPageToShow) {\n            // Current page is within the first few pages\n            for (let i = 2; i <= maxPageToShow + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        } else if (paginationObj['page'] >= paginationObj['totalPages'] - maxPageToShow + 1) {\n            // Current page is within the last few pages\n            range.push('...');\n            for (let i = paginationObj['totalPages'] - maxPageToShow; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else {\n            // Current page is in the middle\n            range.push('...');\n            for (let i = paginationObj['page'] - 1; i <= paginationObj['page'] + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        }\n    \n        this.set('paginationSearchConfig.alertProfilePaginationList', range);\n    },\n    orderingObserver: observer('ordering',async function() {\n        await this.getAlertsList();\n    }), \n    anchorDiagramLabelInitalValue:computed(\"instrument\", function(){\n        let data = {};\n        ((_a) => _a.content ?? _a)(this.get(\"instrument\").anchors).forEach((anchorObj, i)=>{\n            if(i == 0){\n                \n            }\n            else{\n                data[`channel_${i}`] = anchorObj.distance;\n            }\n        })\n        return data;\n    }),\n\n    licenceIsValid: computed('',function() {\n        let valid = false;\n        try {\n            valid = this.session.data.authenticated.isValid;\n        } catch {}\n        return valid;\n    }), \n\n    actions :{\n        async saveAnchors(){\n            try{\n                let anchors = this.get(\"instrument.anchors\");\n                let anchorMap = {};\n\n                (anchors.content ?? anchors).forEach(anchor => {\n                anchorMap[anchor.get(\"number\")] = anchor;\n                });\n                let savePromises = [];\n\n                let channels = this.get(\"instrument\").channelsNum;\n                for (let i = 0; i < channels; i ++){\n                    let anchorNumber = i;\n                    let newDistance = (i === 0)\n                        ? 0\n                        : this.get(\"anchorDiagramInputInitalValue\")[`channel_${i}`] \n                            ? this.get(\"anchorDiagramInputInitalValue\")[`channel_${i}`]\n                            : 0;\n  \n                    let existingAnchor = anchorMap[anchorNumber];\n                    if (existingAnchor) {\n                        // Update if value changed\n                        if (existingAnchor.get(\"distance\") !== newDistance) {\n                            existingAnchor.set(\"distance\", newDistance);\n                            savePromises.push(existingAnchor.save());\n                        }\n\n                    } else {\n                        // Create new anchor\n                        let newAnchor = this.get(\"store\").createRecord(\"anchor\", {\n                            instrument: this.get(\"instrument\"),\n                            number: anchorNumber,\n                            distance: newDistance\n                        });\n\n                        savePromises.push(newAnchor.save());\n                    }\n                }\n                await Promise.all(savePromises);\n                window.location.reload();\n            }\n            catch(error){\n                console.log(\"Error in saveAnchors: \" + error)\n                console.log(error);\n            }\n        },\n        updateChannelInput(key, value){\n            try{\n                let anchors = this.get(\"anchorDiagramInputInitalValue\");\n                anchors[key] = value ? value : 0;\n                this.set(\"anchorDiagramInputInitalValue\", anchors)\n            }\n            catch(error){\n                console.log(\"Error in updateChannelInput: \" + error)\n            }\n        },\n        cycleEditAnchorDiagram(){\n            let data = {};\n            ((_a) => _a.content ?? _a)(this.get(\"instrument\").anchors).forEach((anchorObj, i)=>{\n                if(i == 0){\n                    \n                }\n                else{\n                    data[`channel_${i}`] = anchorObj.distance;\n                }\n            })\n            this.set(\"anchorDiagramInputInitalValue\", data)\n            this.set(\"isEditAnchorDiagram\", !this.get(\"isEditAnchorDiagram\"));\n        },\n        cycleActionBar(tabName){\n            if (tabName === this.activeActionTab){\n                this.set(\"activeActionTab\", null);\n            }\n            else{ \n                this.set(\"activeActionTab\", tabName);\n            }\n        },\n        async jumpToPage(page){\n            try{\n                if(page != \"...\"){\n                    this.set('paginationSearchConfig.pagination.page', Number.parseInt(page))\n                    await this.getAlertsList();\n                }\n            }\n            catch(err){\n\n            }\n        },\n        cycleAlertsListVisibility(){\n            this.set(\"isAlertsListVisible\", !this.get(\"isAlertsListVisible\"));\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        setProject(event) {\n            const selectedId = event.target.value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(event) {\n            \n            const selectedId = event.target.value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n        viewData(id) {\n            let endDateObj = new moment();\n            let startDateObj = moment(endDateObj).subtract(7, 'days').format('YYYY-MM-DDTHH:mm');\n            let formattedEndDateObj = endDateObj.format('YYYY-MM-DDTHH:mm');\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\");\n            this.get('router').transitionTo('raw-data', id, { queryParams: {\"advancedStartDate\": startDateObj, \"advancedEndDate\": formattedEndDateObj, \"advancedYAxisUnit\": baseUnit}});\n            //this.viewData(id);\n        },\n        tGraph(id) {\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\") || \"RAW\";\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values', { queryParams: { \"advancedYAxisUnit\": baseUnit}});\n            //this.tGraph(id, 'displacement-values');\n        },\n        sGraph(id) {\n            this.get('router').transitionTo('spatial-graphs.spatial-graph', id, 'displacement-values');\n            //this.sGraph(id, 'displacement-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        }\n    }\n})","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { copy } from 'ember-copy';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'spatial-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    progressAnimationDuration: 100, //set 50, was 700\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 50, //set 25, was 500\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return this.get('blastEvents').map(function(event) {\n                return {\n                    type: 'Blast',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n            var chartData = { values: item.get(\"values\") };\n            // console.log(\"chartData:::::::::::: \" + JSON.stringify(chartData));\n            var modelName = this.get('chartDataModelName');\n\n            if (modelName === 'strain-values') { \n                chartData.values.unshift(chartData.values[0]);\n            }\n                        \n            return chartData;\n        } catch (error) {\n            return [];\n        }\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n        try {\n            return { values: item.get(\"values\") };            \n        } catch (error) {\n            return [];\n        }\n    }),\n\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        const firstObject = this.get('zoomChartData').get('firstObject');\n        if (!firstObject) { return []; }\n        let dataValuesCount = firstObject.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && modelName === 'strain-values') {\n            anchorDistances.splice(0, 1);\n        }\n        return anchorDistances;\n    }),\n\n    // calculate mid distances between anchors for strain values\n    anchorMidDistances: computed('anchorDistances', function() {\n        const firstObject = this.get('zoomChartData').get('firstObject');\n        if (!firstObject) { return []; }\n        const anchorDistances = copy(this.get('anchorDistances')),\n            dataValuesCount = firstObject.values?.length ?? 0,\n            midDistances = []\n        ;\n\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        anchorDistances.unshift(0);\n\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            let mid = (anchorDistances[i] + anchorDistances[i + 1]) / 2;\n            midDistances.push( +mid.toFixed(2) );\n        }\n\n        return midDistances;\n    }),\n\n    anchorColors: d3.scale.category10().range(),\n\n    anchorDistancesChartReferencePoints: computed('chartDataModelName', 'instrument', 'anchorDistances', 'anchorMidDistances', function() {\n        let anchorDistances = this.get('anchorDistances');\n        var modelName = this.get('chartDataModelName');\n        var anchorMidDistances = this.get('anchorMidDistances');\n\n        // console.log(this.get('instrument').get('instrumentTypeID'));\n\n        if(modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            return anchorMidDistances.map(function(anchorDistance){\n                return {\n                    key: anchorDistance,\n                    type: 'referencePoints',\n                    values: [\n                        anchorDistance\n                    ]\n                };\n            });\n                \n        }\n\n        return anchorDistances.map(function(anchorDistance){\n            return {\n                key: anchorDistance,\n                type: 'referencePoints',\n                values: [\n                    anchorDistance\n                ]\n            };\n        });\n    }),\n\n    inlineHoverValuesSideOffset: computed('chartDataModelName', function() {\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values') {\n            return 28;\n        }\n        return 0;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints'),\n            anchorDistances = this.get('anchorDistances'),\n            anchorDistancesChartReferencePoints = this.get('anchorDistancesChartReferencePoints')\n        ;\n        let zoomChartLinesData = [];\n\n        var modelName = this.get('chartDataModelName');\n        var anchorDist = anchorDistances;\n        \n        if(modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            anchorDist = this.get('anchorMidDistances'); \n        }\n\n        zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n            return {\n                key: chartLineIndex,\n                // mean: 3,\n                type: 'lines',\n                timestamp: zoomTimePoints[chartLineIndex],\n                values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        anchorDist[dataPointIndex],\n                        dataPoint\n                    ];\n                })\n            };\n        });\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (anchorDistancesChartReferencePoints) {\n            zoomChartLinesData = zoomChartLinesData.concat(anchorDistancesChartReferencePoints);\n        }\n\n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        var modelName = this.get('chartDataModelName');\n        var type = this.get('instrument').get('instrumentType').get('title');        \n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[chartLineIndex]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n    }),\n\n    numLines: computed('zoomTimePoints', function() {\n        return this.get('zoomTimePoints').length;\n    }),\n\n    lineDrawDelay: computed('numLines', function() {\n        return (13000 / (this.get('numLines') + 1)) ^ (1 / 20);\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').queryRecord('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            inlineHoverValuesSideOffset = _this.get('inlineHoverValuesSideOffset'),\n            progressAnimationDuration = _this.get('progressAnimationDuration'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];//.get('firstObject');\n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let axisName = '';\n                let units = chartData.get('units');\n                switch(yAxisLegend.get('title')) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n                \n                title = axisName + \" (\" + units + \")\";\n            }\n\n            let zoomChart = nv.models.lineChartProgressAnimationAPI()\n                .margin({top: 55, right: 10, bottom: 85, left: 60})\n                .useInteractiveGuideline(false)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .distXAxisScale(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .showLegend(true)\n                .progressAnimationDuration(progressAnimationDuration)\n                .showXAxis(true)\n                .noData('No usable data')\n                ;\n\n\n            let length = 0;\n            try {\n                length = _this.instrument.get('instrumentLength');\n                let type = _this.instrument.get('instrumentType');\n                if (type === 'dRebar') {\n                    length = length * 1000;\n                }\n                \n            } catch (ex) {\n\n            }\n            \n            if(length !== null && length === 0) {\n                length = 0;\n            }\n\n            zoomChart.forceX([0, length]);\n/*             if (yAxisLegend.get('title') != 'bending_strain' && yAxisLegend.get('title') != 'axial_strain') {\n                \n            }\n */\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .tickFormat(d3.format(\".2f\"))\n                    // .tickFormat(function(d) {\n                    //     let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                    //     return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    // })\n                    ;\n                zoomChart.yAxis\n                    .axisLabel(title)\n                    .tickFormat(d3.format(\".2f\"));\n\n                zoomChart.distXAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .ticks(5)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(45)\n                    .isDistXTooltip(isDistXTooltip)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2);\n\n                //zoomChart.legend.inlineHoverValuesSideOffset(inlineHoverValuesSideOffset);\n                // console.log(\"zoomChartLinesData:::::::::::: \" + JSON.stringify(zoomChartLinesData));\n                zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n\n                }\n\n/*                 zoomChart.xAxis.dispatch.on('xAxisMouseMove', function (mouseMove) {\n                    console.log('test');\n                });\n */\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log('test');\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n\n                    if (!seismicEventsArray.length || !blastEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (!activeTooltipContent) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                return zoomChart;\n            });\n\n            // declare fullRangeChart because later in zoom chart we need axis from fullRangeChart for events axis on zoomChart\n            let fullRangeChart = nv.models.focus(nv.models.line())\n               .margin({top: 10, right: 10, bottom: 30, left: 60})\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .syncBrushing(false)\n                .independentBrushing(true)\n                .showXAxis(true)\n                .showYAxis(false)\n                ;\n\n\n            nv.addGraph(function() {\n\n                fullRangeChart.xAxis\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0], true)(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n                fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n                fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(fullRangeChart.update);\n\n                // set zoom based on query params if set\n                let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n                let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n                if (startTimestamp && endTimestamp) {\n                    fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n                }\n\n                return fullRangeChart;\n            });\n\n        });\n\n    }\n\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n//import JSONAPISerializer from '@ember-data/serializers/json';\nimport html2canvas from 'html2canvas';\n\nexport default Component.extend({\n\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n    yAxisUnit:null,\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if(yAxisUnitParam){\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n    actions: {\n\n        saveImage() {\n            console.log(\"saveImage:::::::::::::::::\");\n            html2canvas(document.querySelector(\"#capture\"), { \n                // allowTaint: true, \n                // // foreignObjectRendering: true,\n                // useCORS: true,\n                // logging: true,\n                // scrollX: 0,\n                // scrollY: 0,\n                // width: 1000,\n                // height: 1000,\n                // x: 0,\n                // y: 0,\n                // scale: 1,\n                // backgroundColor: null,\n                // imageTimeout: 15000,\n                // removeContainer: true,\n                // foreignObjectRendering: true,\n                \n            }).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                // document.body.appendChild(downloadLink);\n\n                canvas.toBlob(function(blob) {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(lineIndex) {\n            let lineSettings = JSON.parse(localStorage.getItem('lineSettings')) || {};\n        \n            lineSettings[lineIndex] = lineSettings[lineIndex] === \"block\" ? \"none\" : \"block\";\n            localStorage.setItem('lineSettings', JSON.stringify(lineSettings));\n        \n            d3.select(`.myLines[data-line-index=\"${lineIndex}\"]`)\n                .style('display', lineSettings[lineIndex]);\n        },\n\n    },\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    // vibeEventsChartDistXData: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log('vibeEvents');\n    //     //console.log(events);\n    //     if ( this.get('vibeEvents') ) {\n    //         return [{\n    //             key: 'BluVibe',\n    //             type: 'distX',\n    //             color: '#80bf5c',\n    //             values: this.get('vibeEvents').map(function(event) {\n    //                 return [\n    //                     moment( event.get('id') ).valueOf(),\n    //                     event.get('size') ? (event.get('size') * -20) + 20 : 20\n    //                 ];\n    //             })\n    //         }];\n    //     }\n    //     return false;\n    // }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sortBy('time');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            let data_set = this.get('blastEvents').map(function(event) {\n                //console.log(event.get('timestamp'));\n                return {\n                    type: 'Blast',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes'),\n                    location: event.get('location')\n                };\n            }).sortBy('time');\n            //console.log(data_set);\n            return data_set;\n        }\n        return false;\n    }),\n\n    // vibeEventsArray: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log(events);\n    //     if ( events ) {\n    //         return events.map(function(event) {\n    //             return {\n    //                 type: 'BluVibe',\n    //                 time: event.get('id'),\n    //                 timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n    //                 ppa: event.get('ppa'),\n    //                 ppv: event.get('ppv'),\n    //                 freq: event.get('frequency')\n    //             };\n    //         }).sortBy('time');\n    //     }\n    //     return false;\n    // }),\n\n    zoomTempPoints: map('zoomTempData', function(item){\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n        // console.log(\"zoomTempPoints::::::: \" + JSON.stringify(chartData));\n        return chartData;\n    }),\n\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n\n        // console.log(\"zoomChartData:::\" + linesKyes);\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n        // console.log(\"before chartData:::\");\n        // console.log(chartData.values);\n\n        var modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') { \n            chartData.values.push(0);\n        }\n        // console.log(\"after chartData:::\");\n        // console.log(chartData.values);\n        // console.log(\"\\n\");\n        // console.log(\"zoomDataPoints::::::: \" + JSON.stringify(chartData));\n                return chartData;\n        } catch(e) { return { values: [] }; }\n    }),\n\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n\n/*     fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        let chartData = this.get('fullRangeChartData');\n        let dataValuesCount;\n        try {\n            dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n        let anchors = this.get('instrument').get('anchors');\n        \n        const arr = anchors.content ?? anchors;\n        \n        let anchorDistances = arr.map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        //anchorDistances.push('T'); //TODO: add temperature\n\n        //IF chart is Strain-Values chart\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') { \n            var midPoints = [];\n            for(var ctr = 0; ctr < anchorDistances.length-1; ctr++) {\n                midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n            }\n            if(modelName==='displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        }\n        //console.log(anchorDistances);\n        return anchorDistances;\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData',  function() {\n            const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTempPoints = this.get('zoomTempPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n\n        //console.log(blastEventsChartDistXData);\n        //console.log(vibeEventsChartDistXData);\n\n        let anchorDistances = this.get('anchorDistances'),\n            zoomChartLinesData = []\n        ;\n\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n        //console.log(zoomTempPoints.length);\n\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            if (_this.get('chartDataModelName') !== 'displacement-values'){\n                while(zoomTempPoints.length > zoomDataPoints.length) {\n                    zoomTempPoints.pop();\n                    zoomTempPoints.shift();\n                }\n            }\n            var temp = {key: 'T',\n                type: 'lines',\n                yAxis: 2,\n                values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null,\n                    ];\n                })\n            };\n            //console.log(temp);\n            zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_');\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        return promise; \n    }),\n    \n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            //vibeEventsArray = this.get('vibeEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = yAxisLegend\n        ;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");            \n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n                \n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let instType = _this.instrument.get('instrumentType').get('title');\n\n                let axisName = '';\n                let units = chartData.get('units');\n                title = yAxisLegend.get('title');\n                //console.log(title);\n                    \n                switch(title) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        units=_this.get(\"yAxisUnit\") ? _this.get(\"yAxisUnit\") :  chartData.get('units');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'temperature':\n                        axisName = \"Temperature\";\n                        units = \"°C\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n\n                if (yAxisLegend) {\n                    let raw = _this.raw;\n                    title = axisName + \" (\" + units + \")\";\n                } else {\n                    title = axisName + \" (\" + units + \")\";\n                }\n                //title = yAxisLegend.get('unit');\n            }\n\n            function usesPoints(chartName) {\n                //console.log(chartName);\n                switch(chartName) {\n                    case 'event-ppv':\n                    case 'event-ppa':\n                        return true;\n                }\n                return false;\n            }\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(usesPoints(_this.get('chartDataModelName')))\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data')\n            ;\n\n            zoomChart.legend.margin({bottom: 500});\n            zoomChart.legend.rightAlign(true);\n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                if (_this.instrument.get('instrumentType').get('title') === 'Tilt') {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".3f\"));\n                    zoomChart.legend.numDecimals(3);\n                } else {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                }\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n\n                console.log(\"zoomChartLinesData\");\n                console.log(zoomChartLinesData);\n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(vibeEventsArray);\n                    //console.log(distXMouseMove);\n                    /* \n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    } \n                    */\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length){//} || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            //activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) { _this.setData(zoomChartLinesData); }\n                if (_this.setChart) { _this.setChart(zoomChart); }\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n\n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    isModalOpen: false,\n    modalMode: 'add', // 'add' | 'edit'\n    modalEditingRowId: null,\n\n    // Per-anchor labels:\n    //   tableLabel — what shows in the table column header (raw distance value, legacy behavior).\n    //                Empty string when distance is missing.\n    //   modalLabel — what shows as the modal field label (\"Anchor 1\", \"Anchor N/A\" per spec).\n    anchorLabels: computed('instrument', function(){\n        const anchors = this.get('instrument') ? this.get('instrument').get('anchors') : null;\n        const arr = (anchors && (anchors.content ?? anchors)) || [];\n        let validCounter = 0;\n        return arr.map((anchor, idx) => {\n            const distance = anchor.get ? anchor.get('distance') : (anchor && anchor.distance);\n            const isUnset = (distance == null || distance === '');\n            if(isUnset){\n                return { index: idx, tableLabel: '', modalLabel: 'Anchor N/A', isUnset: true };\n            }\n            validCounter += 1;\n            return { index: idx, tableLabel: String(distance), modalLabel: `Anchor ${validCounter}`, isUnset: false };\n        });\n    }),\n\n    // Header row labels for the table + modal field metadata.\n    // `label` (used by the modal) keeps the \"Anchor N\" / \"Anchor N/A\" form.\n    // `tableLabel` (used by the table th) keeps the raw distance for legacy parity.\n    columnSpecs: computed('anchorLabels', function(){\n        const anchors = this.get('anchorLabels') || [];\n        const out = anchors.map((a) => ({\n            key: `anchor_${a.index}`,\n            label: a.modalLabel,\n            tableLabel: a.tableLabel,\n            valuesIndex: a.index,\n        }));\n        out.push({ key: '__temp__', label: 'Temperature', tableLabel: 'Temperature', isTemp: true });\n        return out;\n    }),\n\n    // Each row: { id, date, formattedDate, cells: [{ key, label, value }] }\n    tableRows: computed('displacementData.[]', 'temperatureData.[]', 'columnSpecs', 'globalDatetimeFormat.value', function(){\n        const dispData = this.get('displacementData') || [];\n        const tempData = this.get('temperatureData') || [];\n        const specs = this.get('columnSpecs') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n\n        const tempById = {};\n        tempData.forEach(r => { tempById[r.id] = r; });\n\n        return dispData.map((dispRow) => {\n            const id = dispRow.id;\n            const dispValues = (dispRow.values || dispRow.get?.('values') || []);\n            const tempRow = tempById[id];\n            const tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n\n            const cells = specs.map((spec) => {\n                let value = '';\n                if(spec.isTemp){\n                    value = tempValues[0];\n                }else{\n                    value = dispValues[spec.valuesIndex];\n                }\n                return { key: spec.key, label: spec.label, value: value == null ? '' : value };\n            });\n            const formattedDate = moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt);\n            return { id, date: id, formattedDate, cells };\n        });\n    }),\n\n    // Modal field list — Date + one input per column spec.\n    modalFields: computed('columnSpecs', 'modalMode', 'modalEditingRowId', 'tableRows.[]', function(){\n        const specs = this.get('columnSpecs') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingRowId');\n\n        let existingRow = null;\n        if(mode === 'edit' && editingId){\n            existingRow = (this.get('tableRows') || []).find(r => r.id === editingId);\n        }\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && existingRow\n                ? moment(existingRow.date, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm')\n                : moment().format('YYYY-MM-DDTHH:mm'),\n        };\n\n        const cellByKey = {};\n        if(existingRow){\n            existingRow.cells.forEach(c => { cellByKey[c.key] = c.value; });\n        }\n\n        const channelFields = specs.map((spec) => ({\n            key: spec.key,\n            label: spec.label,\n            type: 'text',\n            value: cellByKey[spec.key] != null ? cellByKey[spec.key] : '',\n        }));\n\n        return [dateField, ...channelFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function(){\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingRowId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingRowId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const instrumentId = this.get('instrument.id');\n            const dispData = this.get('displacementData');\n            const tempData = this.get('temperatureData');\n            const dispRow = dispData ? dispData.find(r => r.id === rowId) : null;\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            const promises = [];\n            if(dispRow && dispRow.deleteRecord){ dispRow.deleteRecord(); promises.push(dispRow.save(adapterOptions)); }\n            if(tempRow && tempRow.deleteRecord){ tempRow.deleteRecord(); promises.push(tempRow.save(adapterOptions)); }\n            Promise.all(promises)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        /**\n         * Save handler — rebuilds displacement.values and temperature.values from the modal snapshot.\n         * - Add → store.createRecord\n         * - Edit, date unchanged → mutate existing record's `values`, save() (PATCH)\n         * - Edit, date changed   → delete old records, create new at the new timestamp\n         */\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const specs = this.get('columnSpecs') || [];\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            // Build displacement.values (one entry per anchor, in anchor order, no placeholder).\n            const dispValues = [];\n            specs.forEach((spec) => {\n                if(spec.isTemp){ return; }\n                dispValues.push(Number(snapshot[spec.key]) || 0);\n            });\n            // Build temperature.values (single-entry array, legacy convention).\n            const tempValues = [Number(snapshot['__temp__']) || 0];\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingRowId');\n\n            const tempData = this.get('temperatureData') || [];\n            const dispData = this.get('displacementData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            if(isEdit && originalId === newId){\n                const tempRow = findRow(tempData, originalId);\n                const dispRow = findRow(dispData, originalId);\n                const promises = [];\n                if(tempRow){ tempRow.set('values', tempValues); promises.push(tempRow.save(adapterOptions)); }\n                if(dispRow){ dispRow.set('values', dispValues); promises.push(dispRow.save(adapterOptions)); }\n                Promise.all(promises).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                const oldDisp = findRow(dispData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n                if(oldDisp){ oldDisp.deleteRecord(); oldDisp.save(adapterOptions); }\n            }\n\n            const tempRecord = store.createRecord('temperature-value', { id: newId, values: tempValues });\n            tempRecord.save(adapterOptions);\n\n            const dispRecord = store.createRecord('displacement-value', { id: newId, values: dispValues });\n            dispRecord.save(adapterOptions).then(refreshRoute).catch(handleErr);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    router: service(),\n    paginatorSize: 5,\n    newPage: null,\n\n    currentPage: computed('meta', function() {\n        if ( !this.get('meta') || typeof this.get('meta').pagination.page === 'undefined' ) {\n            return 1;\n        }\n        return this.get('meta').pagination.page;\n    }),\n\n    totalPages: computed('meta', function() {\n        if ( !this.get('meta') ) {\n            return null;\n        }\n        return this.get('meta').pagination['total_pages'];\n    }),\n\n    totalVisibleLinksCount: computed('totalPages', 'paginatorSize', function() {\n        return ( this.get('totalPages') <= this.get('paginatorSize') ) ? this.get('totalPages') : this.get('paginatorSize');\n    }),\n\n    halfOfTotalVisibleLinksCount: computed('totalVisibleLinksCount', function() {\n        return Math.ceil(this.get('totalVisibleLinksCount') / 2);\n    }),\n\n    firstPageLink: computed('currentPage', 'totalPages', 'paginatorSize', 'halfOfTotalVisibleLinksCount',  function() {\n        if ( !this.get('meta') || this.get('currentPage') <= this.get('halfOfTotalVisibleLinksCount') + 1 || this.get('currentPage') === this.get('totalPages') && this.get('currentPage') === this.get('paginatorSize') ) {\n            return null;\n        }\n\n        let queryParams = {\n            page: 1\n        };\n\n        if ( typeof this.get('extraQueryParams') !== 'undefined' ) {\n            Object.assign( queryParams, this.get('extraQueryParams') );\n        }\n\n        return [\n            this.get('routeLink'),\n            {\n                isQueryParams: true,\n                values: queryParams\n            }\n        ];\n    }),\n\n    lastPageLink: computed('meta', 'currentPage', 'totalPages', 'paginatorSize', 'halfOfTotalVisibleLinksCount', function() {\n        if ( !this.get('meta') || this.get('totalPages') <= 1 || this.get('totalPages') <= this.get('paginatorSize') || this.get('totalPages') <= this.get('currentPage') + this.get('halfOfTotalVisibleLinksCount') ) {\n            return null;\n        }\n\n        let queryParams = {\n            page: this.get('totalPages')\n        };\n\n        if ( typeof this.get('extraQueryParams') !== 'undefined' ) {\n            Object.assign( queryParams, this.get('extraQueryParams') );\n        }\n\n        return [\n            this.get('routeLink'),\n            {\n                isQueryParams: true,\n                values: queryParams\n            }\n        ];\n    }),\n\n    paginationLinks: computed('meta', 'currentPage', function(){\n        let paginationLinks = [],\n            routeLink = this.get('routeLink'),\n            paginatorSize = this.get('paginatorSize'),\n            currentPage = this.get('currentPage'),\n            totalPages = this.get('totalPages'),\n            totalVisibleLinksCount = this.get('totalVisibleLinksCount'),\n            halfOfTotalVisibleLinksCount = this.get('halfOfTotalVisibleLinksCount'),\n            startPageOffset = 1,\n            endPageOffset = totalPages\n        ;\n\n        if ( currentPage - halfOfTotalVisibleLinksCount >= 1 && totalPages > paginatorSize ) {\n            startPageOffset = currentPage - halfOfTotalVisibleLinksCount;\n        }\n\n        if ( currentPage + halfOfTotalVisibleLinksCount <= totalPages && totalPages > paginatorSize ) {\n            endPageOffset = currentPage + halfOfTotalVisibleLinksCount;\n        }\n\n        if ( endPageOffset > 1 ) {\n            for (let i = startPageOffset; i <= endPageOffset; i++) {\n\n                let queryParams = {\n                        page: i\n                    };\n\n                if ( typeof this.get('extraQueryParams') !== 'undefined' ) {\n                    Object.assign( queryParams, this.get('extraQueryParams') );\n                }\n\n                paginationLinks.push({\n                    linkName: i,\n                    params: [\n                        routeLink,\n                        {\n                            isQueryParams: true,\n                            values: queryParams\n                        }\n                    ]\n                });\n            }\n        }\n        return paginationLinks;\n\n    }),\n    actions: {\n        updateNewPage(value) {\n            this.set('newPage', value);\n        },\n        goToPage(){\n            let new_page = this.get('newPage');\n            let pages = this.get('paginationLinks')\n            if (typeof new_page !== 'undefined' && new_page != \"\") {\n                let page = pages[0]\n                //console.log(\"Page::::::::::::::: \" + page.params[0])\n                if (page.params[0] == 'raw-data') {\n                    let id = this.get('meta')['instrument-id'];\n                    page.params[1].values.page = new_page;\n                    this.get('router').transitionTo(page.params[0], id, { queryParams: page.params[1].values});\n                } else if (page.params[0] == 'raw-gateway-data') {\n                  //  console.log(\"page.params[0]:::\" + page.params[0]) ;\n                  let id = this.get('meta')['gateway-id'];\n                  page.params[1].values.page = new_page;\n                  this.get('router').transitionTo(page.params[0], id, { queryParams: page.params[1].values});\n              } else {\n                    page.params[1].values.page = new_page;\n                    this.get('router').transitionTo(page.params[0], { queryParams: page.params[1].values});\n                }\n            }\n        }\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 13) {\n            this.send('goToPage');\n        }\n    }\n});\n","export { default } from 'ember-leaflet/components/path-layer';\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nexport default Component.extend({\n    store: service(),\n    _spatialChart: null,\n\n    // anchor distances from instrument anchors, trimmed for strain-values\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        const firstObject = this.get('fullRangeChartData').get('firstObject');\n        if (!firstObject) { return []; }\n        const dataValuesCount = firstObject.get ? (firstObject.get('values')?.length ?? 0) : (firstObject.values?.length ?? 0);\n        const anchors = this.get('instrument').get('anchors');\n        let anchorDistances = (anchors.content ?? anchors).map(anchor => anchor.get('distance'));\n\n        const modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && modelName === 'strain-values') {\n            anchorDistances.splice(0, 1);\n        }\n        return anchorDistances;\n    }),\n\n    // midpoints between anchor distances for strain-values\n    anchorMidDistances: computed('anchorDistances', function() {\n        const anchorDistances = [...this.get('anchorDistances')];\n        const midDistances = [];\n        anchorDistances.unshift(0);\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            midDistances.push(+((anchorDistances[i] + anchorDistances[i + 1]) / 2).toFixed(2));\n        }\n        return midDistances;\n    }),\n\n    // x-axis depth values for the spatial chart\n    spatialXValues: computed('anchorDistances', 'anchorMidDistances', 'chartDataModelName', function() {\n        const modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            return this.get('anchorMidDistances');\n        }\n        return this.get('anchorDistances');\n    }),\n\n    // spatial lines: one line per timestamp reading (X = depth, Y = displacement)\n    spatialChartLinesData: computed('fullRangeChartData', 'spatialXValues', 'chartDataModelName', function() {\n        const fullRangeChartData = this.get('fullRangeChartData');\n        const xValues = this.get('spatialXValues');\n        const modelName = this.get('chartDataModelName');\n\n        return fullRangeChartData.map((item) => {\n            let values = item.get('values') || [];\n            // strain-values: prepend duplicate of first value (matching NVD3 behavior)\n            if (modelName === 'strain-values') {\n                values = [values[0], ...values];\n            }\n            return {\n                key: moment(item.get('id')).format('DD MMM YYYY HH:mm'),\n                timestamp: item.get('id'),\n                values: values.map((v, idx) => ({\n                    x: xValues[idx] !== undefined ? xValues[idx] : null,\n                    y: v !== undefined ? v : null\n                })).filter(pt => pt.x !== null)\n            };\n        });\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        const chartDataModelName = this.get('chartDataModelName');\n        const chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes')\n        }));\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        const title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName');\n                units = \"kN\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n\n        const spatialLinesData = this.get('spatialChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildSpatialChart(spatialLinesData, yAxisTitle);\n        });\n    },\n\n    _buildSpatialChart(linesData, yAxisTitle) {\n        const canvas = this.element.querySelector('canvas.chartjs-spatial');\n        if (!canvas) return;\n\n        const infoPanel = this.element.querySelector('.spatial-info-panel');\n\n        let instrumentLength = 0;\n        try {\n            instrumentLength = this.instrument.get('instrumentLength') || 0;\n        } catch (e) { /* ignore */ }\n\n        const anchorXValues = this.get('spatialXValues');\n\n        // Line datasets: one per timestamp reading, NOT in legend\n        // Color gradient: oldest readings are cool/light, newest are warm/dark\n        const lineCount = linesData.length;\n        const getLineColor = (i, total) => {\n            if (total <= 1) return 'rgba(90, 90, 90, 0.7)';\n            const t = i / (total - 1);\n            const r = Math.round(160 - t * 120);\n            const g = Math.round(175 - t * 135);\n            const b = Math.round(210 - t * 130);\n            return `rgba(${r}, ${g}, ${b}, ${0.25 + t * 0.65})`;\n        };\n        const lineDatasets = linesData.map((line, i) => ({\n            label: line.key,\n            data: line.values,\n            borderColor: getLineColor(i, lineCount),\n            backgroundColor: 'transparent',\n            borderWidth: 0.5 + (i / Math.max(lineCount - 1, 1)) * 0.8, // 0.5px → 1.3px\n            pointRadius: 0,\n            pointHoverRadius: 6,\n            tension: 0,\n            parsing: false,\n            _isLine: true\n        }));\n\n        // Anchor reference datasets: hidden from the chart (drawn by plugin instead)\n        // but still needed for legend generation\n        const anchorDatasets = anchorXValues.map((dist, i) => ({\n            label: String(dist),\n            data: [],\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            borderWidth: 0,\n            pointRadius: 0,\n            showLine: false,\n            _isRef: true\n        }));\n\n        const datasets = [...lineDatasets, ...anchorDatasets];\n\n        // \"No data\" overlay plugin\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds._isRef) return;\n                    if (!ds.hidden) ds.data.forEach(pt => { if (pt && pt.y != null) hasData = true; });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data available', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        // Plugin: draw anchor reference dots pinned to the bottom of the chart area\n        const anchorDotsPlugin = {\n            id: 'anchorDots',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                const yArea = chart.chartArea.bottom;\n                const ctx = chart.ctx;\n\n                anchorXValues.forEach((dist, i) => {\n                    const px = xScale.getPixelForValue(dist);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.arc(px, yArea, 6, 0, 2 * Math.PI);\n                    ctx.fillStyle = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                    ctx.fill();\n                    ctx.restore();\n                });\n            }\n        };\n\n        // Crosshair plugin — vertical dashed line following cursor\n        let crosshairX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                if (crosshairX === null) return;\n                const { ctx, chartArea: { top, bottom } } = chart;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        // External tooltip handler: writes to the fixed info panel below the chart\n        const externalTooltipHandler = (context) => {\n            if (!infoPanel) return;\n            const { tooltip } = context;\n\n            // When tooltip hides (mouse left chart), keep last values visible so user can scroll\n            if (tooltip.opacity === 0) {\n                return;\n            }\n\n            // Filter to line datasets only\n            const lineItems = (tooltip.dataPoints || []).filter(pt => pt.dataset._isLine);\n            if (!lineItems.length) {\n                infoPanel.innerHTML = '';\n                return;\n            }\n\n            const depth = lineItems[0].parsed.x;\n            let html = `<strong>Depth: ${depth != null ? depth.toLocaleString() : '—'} mm</strong> &nbsp; `;\n\n            // Build compact inline items with colored dots\n            html += lineItems.map(pt => {\n                const color = pt.dataset.borderColor;\n                const val = pt.parsed.y;\n                const label = pt.dataset.label;\n                return `<span style=\"display:inline-block;margin:0 6px;\">` +\n                       `<span style=\"display:inline-block;width:8px;height:8px;border-radius:50%;background:${color};margin-right:3px;vertical-align:middle;\"></span>` +\n                       `<span style=\"color:${color};font-size:12px;\">${label}: ${val != null ? val.toFixed(2) : '—'}</span>` +\n                       `</span>`;\n            }).join('');\n\n            infoPanel.innerHTML = html;\n        };\n\n        const spatialChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                parsing: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'nearest', intersect: false },\n                onHover(e) {\n                    if (e.x != null) {\n                        crosshairX = e.x;\n                    }\n                },\n                scales: {\n                    x: {\n                        type: 'linear',\n                        min: 0,\n                        max: instrumentLength > 0 ? instrumentLength : undefined,\n                        title: {\n                            display: true,\n                            text: 'Depth (mm)',\n                            font: { size: 12 }\n                        },\n                        afterBuildTicks(axis) {\n                            // Show ticks at anchor positions that are in visible range\n                            const visibleAnchors = anchorXValues\n                                .filter(v => v >= axis.min && v <= axis.max)\n                                .map(v => ({ value: v }));\n                            if (visibleAnchors.length > 0) {\n                                axis.ticks = visibleAnchors;\n                            }\n                            // else: let ChartJS auto-generate ticks when zoomed between anchors\n                        },\n                        ticks: {\n                            callback(val) { return val.toLocaleString(); }\n                        }\n                    },\n                    y: {\n                        title: {\n                            display: true,\n                            text: yAxisTitle,\n                            font: { size: 12 }\n                        },\n                        ticks: {\n                            callback(val) { return val.toFixed ? val.toFixed(2) : val; }\n                        }\n                    }\n                },\n                plugins: {\n                    legend: {\n                        display: true,\n                        position: 'top',\n                        align: 'end',\n                        labels: {\n                            generateLabels(chart) {\n                                return chart.data.datasets\n                                    .map((dataset, i) => ({ dataset, i }))\n                                    .filter(({ dataset }) => dataset._isRef)\n                                    .map(({ dataset, i }) => ({\n                                        text: dataset.label,\n                                        fillStyle: dataset.backgroundColor,\n                                        strokeStyle: dataset.borderColor,\n                                        lineWidth: 0,\n                                        pointStyle: 'circle',\n                                        hidden: false,\n                                        datasetIndex: i\n                                    }));\n                            }\n                        },\n                        onClick() { /* no-op */ }\n                    },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        mode: 'index',\n                        intersect: false,\n                        filter(item) {\n                            return item.dataset._isLine === true;\n                        }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, anchorDotsPlugin, crosshairPlugin]\n        });\n\n        // --- Scroll-to-zoom (both axes) ---\n        const origXMin = spatialChart.options.scales.x.min;\n        const origXMax = spatialChart.options.scales.x.max;\n        canvas.addEventListener('wheel', e => {\n            e.preventDefault();\n            const rect = canvas.getBoundingClientRect();\n            const xScale = spatialChart.scales['x'];\n            const yScale = spatialChart.scales['y'];\n            const factor = e.deltaY < 0 ? 1.15 : 0.87;\n            const cursorX = xScale.getValueForPixel(e.clientX - rect.left);\n            const cursorY = yScale.getValueForPixel(e.clientY - rect.top);\n            spatialChart.options.scales.x.min = cursorX - (cursorX - xScale.min) * factor;\n            spatialChart.options.scales.x.max = cursorX + (xScale.max - cursorX) * factor;\n            spatialChart.options.scales.y.min = cursorY - (cursorY - yScale.min) * factor;\n            spatialChart.options.scales.y.max = cursorY + (yScale.max - cursorY) * factor;\n            spatialChart.update('none');\n        }, { passive: false });\n\n        // --- Drag-to-pan (both axes) ---\n        let panStartX = null, panStartY = null;\n        let panXMin = null, panXMax = null, panYMin = null, panYMax = null;\n        canvas.addEventListener('mousedown', e => {\n            panStartX = e.clientX; panStartY = e.clientY;\n            panXMin = spatialChart.scales['x'].min; panXMax = spatialChart.scales['x'].max;\n            panYMin = spatialChart.scales['y'].min; panYMax = spatialChart.scales['y'].max;\n            canvas.style.cursor = 'grabbing';\n        });\n        canvas.addEventListener('mousemove', e => {\n            const rect = canvas.getBoundingClientRect();\n            const px = e.clientX - rect.left;\n            const { left, right } = spatialChart.chartArea;\n            crosshairX = (px >= left && px <= right) ? px : null;\n            if (panStartX !== null) {\n                const xPxRange = spatialChart.chartArea.right - spatialChart.chartArea.left;\n                const yPxRange = spatialChart.chartArea.bottom - spatialChart.chartArea.top;\n                spatialChart.options.scales.x.min = panXMin - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.x.max = panXMax - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.y.min = panYMin + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n                spatialChart.options.scales.y.max = panYMax + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('mouseleave', () => {\n            crosshairX = null;\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('dblclick', () => {\n            spatialChart.options.scales.x.min = origXMin;\n            spatialChart.options.scales.x.max = origXMax;\n            spatialChart.options.scales.y.min = undefined;\n            spatialChart.options.scales.y.max = undefined;\n            spatialChart.update('none');\n        });\n        const onPanEnd = () => {\n            panStartX = panStartY = panXMin = panXMax = panYMin = panYMax = null;\n            canvas.style.cursor = 'default';\n        };\n        canvas.addEventListener('mouseup', onPanEnd);\n        document.addEventListener('mouseup', onPanEnd);\n\n        this.set('_spatialChart', spatialChart);\n    },\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const spatialChart = this.get('_spatialChart');\n        if (spatialChart) { spatialChart.destroy(); }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst KPA_TO_MMH20 = 101.9716;\n\n// Chart line colors — sourced from color-palette\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,    // #0077b6\n    colorPalette.orange2,   // #FF7444\n    colorPalette.green3,    // #2a9d8f\n    colorPalette.red1,      // #D25353\n    colorPalette.purple7,   // #8b5cf6\n    colorPalette.beige22,   // #b08968\n    colorPalette.pink6,     // #ec4899\n    colorPalette.gray5,     // #6b7280\n    colorPalette.teal6,     // #10b981\n    colorPalette.cyan4,     // #06b6d4\n];\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    chartType: null,\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n        const chartTypeParam = queryParams.get('chart_type');\n        this.set('chartType', chartTypeParam || null);\n    },\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        if (instType === 'Tilt') {\n            return ['X', 'Y', 'Z'];\n        } else if (instType === 'Wire') {\n            let anchors = [];\n            let numPorts = this.instrument.get('portsNum');\n            for (let ctr = 0; ctr < numPorts; ctr++) {\n                anchors.push('T' + (ctr + 1));\n                anchors.push(ctr + 1);\n            }\n            return anchors;\n        } else if (instType === 'BluVibe') {\n            return ['Data'];\n        }\n\n        let anchors = this.get('instrument').get('anchors');\n        const arr = anchors.content ?? anchors;\n        let anchorDistances = arr.map(anchor => anchor.get('distance'));\n\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') {\n            var midPoints = [];\n            if (instType === 'dCable') {\n                for (var ctr = 1; ctr < anchorDistances.length; ctr++) {\n                    var mid = (anchorDistances[ctr - 1] + anchorDistances[ctr]) / 2;\n                    midPoints[ctr] = +mid.toFixed(2);\n                }\n                midPoints.splice(0, 1);\n                midPoints[0] = 0;\n                midPoints.push(anchorDistances[anchorDistances.length - 1]);\n            } else if (instType === 'dRebar') {\n                let headExclusion = this.get('instrument').get('headExclusionLength');\n                let leftAnchors = [headExclusion];\n                let rightAnchors = [headExclusion];\n\n                let center = anchorDistances.length - 1;\n                center = Math.ceil(center / 2);\n\n                leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n\n                let midLeft = [];\n                for (var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                    midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                }\n\n                let midRight = [];\n                for (var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                    midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                }\n\n                if (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values') {\n                    if (this.get('instrument').get('stacked')) {\n                        midPoints = midLeft;\n                        if (modelName === 'load-values') {\n                            midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n                        }\n                    } else {\n                        midPoints = midLeft.concat(midRight);\n                        if (modelName === 'bending-strain-values') {\n                            midPoints.shift();\n                            midPoints.pop();\n                        }\n                    }\n                } else {\n                    midPoints = midLeft.concat(midRight);\n                }\n\n                if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                    for (let ctr = 0; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr + 1) + '-' + midPoints[ctr];\n                    }\n                }\n            } else {\n                for (var ctr = 0; ctr < anchorDistances.length - 1; ctr++) {\n                    midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n                }\n            }\n            if (modelName === 'displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        } else if (modelName === 'axial-displacement-values' && this.get('instrument').get('stacked')) {\n            let mid = (anchorDistances.length - 1) / 2;\n            while (anchorDistances.length > (mid + 1)) {\n                anchorDistances.pop();\n            }\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else if (modelName === 'axial-displacement-values' && !this.get('instrument').get('stacked')) {\n            anchorDistances.sort(function(a, b) { return a - b; });\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else {\n            if (instType === 'dRebar') {\n                if (modelName === 'displacement-values') {\n                    var midPoints = [];\n                    let headExclusion = this.get('instrument').get('headExclusionLength');\n                    let leftAnchors = [headExclusion];\n                    let rightAnchors = [headExclusion];\n\n                    let center = anchorDistances.length - 1;\n                    center = Math.ceil(center / 2);\n\n                    leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                    rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                    if (!this.get('instrument').get('stacked')) {\n                        rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n                    }\n\n                    let midLeft = [];\n                    for (var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                        midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                    }\n\n                    let midRight = [];\n                    for (var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                        midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                    }\n\n                    midPoints = midLeft.concat(midRight);\n                    anchorDistances = midPoints;\n                    anchorDistances.unshift(0);\n                }\n                for (let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n                for (let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n            }\n        }\n        return anchorDistances;\n    }),\n\n    // Main chart sourced from zoomChartData to mirror NVD3 (Group By applies to visible chart).\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'anchorDistances', 'chartDataModelName', 'chartType', function() {\n        const anchorDistances = this.get('anchorDistances');\n        const fullRangeChartData = this.get('zoomChartData');\n        const modelName = this.get('chartDataModelName');\n        const chartType = this.get('chartType');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values';\n        const isPressureRate = chartType === 'Pressure Rate';\n        const isMmH20 = chartType === 'mmH20';\n\n        // Build ordered array of { id, values } for rate-of-change calculation\n        const dataItems = fullRangeChartData.map(item => ({\n            id: item.get('id'),\n            values: item.get('values')\n        }));\n\n        const lines = anchorDistances.map((chartLineName, chartLineIndex) => ({\n            key: chartLineName,\n            values: dataItems.map((item, i) => {\n                const vals = item.values;\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                let y = (arr && arr[chartLineIndex] !== undefined) ? arr[chartLineIndex] : null;\n\n                if (isPressureRate) {\n                    if (i === 0) {\n                        y = null;\n                    } else {\n                        const prevVals = dataItems[i - 1].values;\n                        const prevArr = isStrain ? [...(Array.isArray(prevVals) ? prevVals : []), 0] : prevVals;\n                        const prevY = (prevArr && prevArr[chartLineIndex] !== undefined) ? prevArr[chartLineIndex] : null;\n                        const timeDiffDays = (moment(item.id).valueOf() - moment(dataItems[i - 1].id).valueOf()) / 86400000;\n                        if (prevY == null || y == null || timeDiffDays === 0) {\n                            y = null;\n                        } else {\n                            y = (y - prevY) / timeDiffDays;\n                        }\n                    }\n                } else if (isMmH20 && y != null) {\n                    y = y * KPA_TO_MMH20;\n                }\n\n                return {\n                    x: moment(item.id).valueOf(),\n                    y\n                };\n            })\n        }));\n\n        // Add temperature overlay on y2 (unless viewing temperature data itself)\n        if (modelName !== 'temperature-values') {\n            const zoomTempData = this.get('zoomTempData');\n            if (zoomTempData && zoomTempData.length) {\n                lines.push({\n                    key: 'T (°C)',\n                    yAxis: 'y2',\n                    hidden: false,\n                    values: zoomTempData.map(item => {\n                        const rawValues = item.get('values');\n                        const arr = Array.isArray(rawValues) ? rawValues : [];\n                        return {\n                            x: moment(item.get('id')).valueOf(),\n                            y: arr[0] !== undefined ? arr[0] : null\n                        };\n                    })\n                });\n            }\n        }\n\n        return lines;\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        const chartType = this.get('chartType');\n\n        // Piezo overrides based on chart_type query param\n        if (chartType == null || chartType === '') {\n            // default: displacement\n            axisName = getAttr('temporalDisplacementName');\n            units = this.get(\"yAxisUnit\") || getAttr('units');\n            return `${axisName} (${units})`;\n        } else if (chartType === 'mmH20') {\n            axisName = getAttr('temporalAccelerationName') || 'mmH₂O';\n            units = '';\n            return `${axisName}`;\n        } else if (chartType === 'Pressure Rate') {\n            axisName = 'Pressure Rate';\n            units = 'kPa/day';\n            return `${axisName} (${units})`;\n        }\n\n        // Fallback to standard title logic\n        let title = yAxisLegend ? yAxisLegend.get('title') : '';\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                units = this.get(\"yAxisUnit\") || getAttr('units');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName') || 'Load';\n                units = 'kN';\n                break;\n            case 'axial_strain':\n                axisName = \"Axial Strain\";\n                units = \"%\";\n                break;\n            case 'bending_strain':\n                axisName = \"Bending Strain\";\n                units = \"%\";\n                break;\n            case 'axial_displacement':\n                axisName = \"Axial Displacement\";\n                break;\n            case 'temperature':\n                axisName = \"Temperature\";\n                units = \"°C\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const fullRangeChartLinesData = this.get('fullRangeChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildMainChart(fullRangeChartLinesData, yAxisTitle);\n            this._buildOverviewChart();\n        });\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        const datasets = anchorDistances.map((chartLineName, i) => ({\n            label: String(chartLineName),\n            data: fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        anchorDistances.forEach((chartLineName, i) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(chartLineName));\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed, get } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\nimport { getAnchorCountFromId } from '../../utils/instrument-id';\n\nfunction resetNewInstrumentObject(_this) {\n    //console.log('reset');\n    _this.set('newInstrumentObject', {});\n    //_this.set('name', null);\n    _this.set('zeroTimestamp', null);\n    _this.set('installDate', null);\n    //_this.set('east', null);\n    //_this.set('north', null);\n    //_this.set('depth', null);\n    //_this.set('azimuth', null);\n    //_this.set('dip', null);\n    //_this.set('instrumentType', 0);\n    //_this.set('headAt', 'HAC');\n    //_this.set('instrumentLength', 0);\n    //_this.set('strokeLength', 0);\n    //_this.set('referenceAnchor', null);\n    //_this.set('headExclusionLength', 0);\n    //_this.set('gaugeLength', 0);\n    //_this.set('bulbed', false);\n    //_this.set('plated', false);\n    //_this.set('stacked', false);\n    //_this.set('active', true);\n}\n\nexport default class CreatePackInstrument extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n    }\n\n    isAuthenticated = true;\n    newInstrumentObject = {};\n    headAt = 'HAC';\n    zeroTimestamp = null;\n    installDate = null;\n    authError = false;\n    project = null;\n    level = null;\n\n    actions= {\n\n        \n        setProject(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n\n        createInstrument(object){\n\n            //console.log(this.get('prevDup'));\n            //console.log((typeof this.get('prevDup') === \"undefined\"));\n\n            let _this = this,\n            store = this.get('store'),\n            newInstrumentObject = this.get('newInstrumentObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newInstrumentObject.id = this.get('id');\n            newInstrumentObject.zeroTimestamp = this.get('zeroTimestamp');\n            newInstrumentObject.installDate = this.get('installDate');\n            //newInstrumentObject.east = this.get('east');\n            //newInstrumentObject.north = this.get('north');\n            //newInstrumentObject.depth = this.get('depth');\n            newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n            newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n            newInstrumentObject.active = true;\n            newInstrumentObject.instrumentStiffness = 0;\n\n            if(typeof newInstrumentObject.id === 'undefined' || newInstrumentObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n\n            if (this.get('zeroTimestamp') != null) {\n                newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('installDate') != null) {\n                newInstrumentObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            // console.log(get(this, 'duplicateError'));\n\n            let newInstrument = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    //console.log(this.get('prevDup'));\n                    if(err.message.includes('has already been used')) {\n                        //console.log('duplicate');\n                        this.setError('duplicateError',true);\n                        \n                        error = true;\n                        dup = true;\n                    }\n                    // console.log(err.message);\n                }\n            }\n            \n            this.setError('authError', false);\n\n            if (!error) {\n                \n                    newInstrument.save().then(function(results){\n                        \n                        if(results.id != null) {\n                            let anchorCount = getAnchorCountFromId(newInstrumentObject.id);\n                            for(var ctr = 0; ctr <= anchorCount; ctr++) {\n                                store.createRecord('anchor', {number: ctr, distance: ctr, instrument: results}).save();\n                            }\n                        }\n\n                        if(results.id != null) {\n                            _this.get('submit')(results.id);\n                        } else {\n                            this.setError('isVisibleError',true);\n                            error = true;\n                        }\n                    }).catch(function(reason) {\n                        \n                        _this.setError('isVisibleError',true);\n                        _this.setError('authError',true);\n                    }); \n            } \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let displacementValueObjectValues = _this.get('displacementValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(displacementValueObjectValues).forEach(function(key,index) {\n        displacementValueObjectValues[key] = 0;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n    // newTimestampValue: computed('dateFormat', function() {\n    //     return moment().format(this.get('dateFormat'));\n    // }),\n\n    newDisplacementValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n    displacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 1; i <= this.get('instrumentAnchors').length; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    newDisplacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    actions: {\n        setNewDisplacementValue(key, event) {\n            const vals = this.get('newDisplacementValueObjectValues');\n            vals[key] = event.target.value;\n        },\n        setNewTimestampValue(event) {\n            this.set('newTimestampValue', event.target.value);\n        },\n        setTemperatureValue(event) {\n            this.set('temperatureObjectValue', event.target.value);\n        },\n        saveNew(){\n            let _this = this,\n                store = this.get('store'),\n                newDisplacementValuesObject = this.get('newDisplacementValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                displacementValues = this.get('displacementValues'),\n                temperatureValues = this.get('temperatureValues')\n            ;\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newDisplacementValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newDisplacementValuesObject.values = Object.values(this.get('newDisplacementValueObjectValues'));\n\n            const newDisplacementValues = store.createRecord('displacement-value', newDisplacementValuesObject);\n            // save new displacement-value to DB\n            const savedDisplacementValuesObject = newDisplacementValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if displacement-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //displacementValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n                \n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class EditInstrument extends Component.extend({\n}) {\n    @service router;\n    @service store;\n    //@service session;\n    //@service currentUser;\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    actions = {\n        viewData(id) {\n            this.get('router').transitionTo('raw-data', id);\n            //this.viewData(id);\n        },\n        tGraph(id) {\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values');\n            //this.tGraph(id, 'displacement-values');\n        },\n        sGraph(id) {\n            this.get('router').transitionTo('spatial-graphs.spatial-graph', id, 'displacement-values');\n            //this.sGraph(id, 'displacement-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveInstrument(){\n            const _this = this;\n            // console.log(\"test\");\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/instruments\";    \n                }\n            } else {\n                window.location.href = \"/instruments\";\n            }            \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { copy } from 'ember-copy';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'spatial-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    progressAnimationDuration: 100, //set 50, was 700\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 50, //set 25, was 500\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return this.get('blastEvents').map(function(event) {\n                return {\n                    type: 'Blast',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n            var chartData = { values: item.get(\"values\") };\n\n            var modelName = this.get('chartDataModelName');\n\n            if (modelName === 'strain-values' || modelName === 'load-values') { \n                var plated = this.get('instrument').get('plated');\n                var type = this.get('instrument').get('instrumentType').get('title');\n                //console.log(type);\n            }\n                        \n            return chartData;\n        } catch (error) {\n            return [];\n        }\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n        try {\n            return { values: item.get(\"values\") };            \n        } catch (error) {\n            return [];\n        }\n    }),\n\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {\n            anchorDistances.splice(0, 1);\n        }\n        return anchorDistances;\n    }),\n\n    anchorAXDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n\n        let midPoints = [];\n\n        if(this.get('instrument').get('stacked')) {\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            \n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n\n            let midLeft = [];\n            for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n            }\n            midPoints = midLeft;\n        } else { //staggered\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n    \n            midPoints = $.map(anchorDistances.slice(1, center + 1), function(v, i) {\n                return [v, anchorDistances.slice(center + 1)[i]];\n              });\n\n            midPoints.unshift(headExclusion);\n            let mid_temp = [];\n            for(let ctr = 1;ctr < midPoints.length; ctr++) {\n                mid_temp.push((midPoints[ctr - 1] + midPoints[ctr]) / 2);\n            }\n            midPoints = mid_temp;\n\n            if (modelName === 'bending-strain-values') {\n                midPoints.shift();\n                midPoints.pop();\n            }    \n            \n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n        \n        //console.log(midPoints);\n        \n        return midPoints;\n    }),\n\n    anchorBXDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n\n        let midPoints = [];\n\n        if(this.get('instrument').get('stacked')) {\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            \n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n\n            let midLeft = [];\n            for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n            }\n            midPoints = midLeft;\n        } else {\n\n        let center = anchorDistances.length - 1;\n        center = Math.ceil(center / 2);\n\n        midPoints = $.map(anchorDistances.slice(1, center + 1), function(v, i) {\n            return [v, anchorDistances.slice(center + 1)[i]];\n          });\n            midPoints.shift();\n            midPoints.pop();                  \n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n\n        return midPoints;\n    }),\n\n    // calculate mid distances between anchors for strain values\n    anchorMidDistances: computed('anchorDistances', function() {\n        let anchorDistances = copy(this.get('anchorDistances')),\n            dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            midDistances = []\n        ;\n\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        anchorDistances.unshift(0);\n\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            let mid = (anchorDistances[i] + anchorDistances[i + 1]) / 2;\n            midDistances.push( +mid.toFixed(2) );\n        }\n\n        if(type === 'dCable') {\n            midDistances.splice(0,1);\n            //midDistances.unshift(0);\n            midDistances[0] = 0;\n            var len = this.get('instrument').get('length');\n            var length = this.get('instrument').get('instrumentLength');\n\n            var modelName = this.get('chartDataModelName');\n            if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {    \n                if(length !== null && length !== 0) {\n                    midDistances.push(length);\n                } else {\n                    midDistances.push(anchorDistances[anchorDistances.length - 1]);\n                }\n            }\n        }\n        // console.log(\"Anchors: \" + anchorDistances);\n         //console.log(\"Mids: \" + midDistances);\n\n        return midDistances;\n    }),\n\n    anchorColors: d3.scale.category10().range(),\n\n    anchorDistancesChartReferencePoints: computed('chartDataModelName', 'instrument', 'anchorDistances', 'anchorMidDistances', 'anchorAXDistances', 'anchorBXDistances', function() {\n        let anchorDistances = this.get('anchorDistances');\n        var modelName = this.get('chartDataModelName');\n        var anchorMidDistances = this.get('anchorMidDistances');\n\n        //console.log(this.get('instrument').get('instrumentTypeID'));\n\n        if(this.get('instrument').get('instrumentTypeID') === 3) {//rebar \n            if(this.get('instrument').get('stacked')) { //is stacked\n                if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                    anchorDistances = this.get('anchorAXDistances');\n                } else if (modelName === 'bending-strain-values') {\n                    anchorDistances = this.get('anchorBXDistances');\n                }\n            } else { //is NOT stacked\n                if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                    anchorDistances = this.get('anchorAXDistances');\n                } else if (modelName === 'bending-strain-values') {\n                    anchorDistances = this.get('anchorBXDistances');\n                }\n            }\n        }\n\n        if (this.get('instrument').get('instrumentType').get('title') !== 'dRebar') {\n            if(modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                return anchorMidDistances.map(function(anchorDistance){\n                    return {\n                        key: anchorDistance,\n                        type: 'referencePoints',\n                        values: [\n                            anchorDistance\n                        ]\n                    };\n                });\n                    \n            }\n        }\n\n        return anchorDistances.map(function(anchorDistance){\n            return {\n                key: anchorDistance,\n                type: 'referencePoints',\n                values: [\n                    anchorDistance\n                ]\n            };\n        });\n    }),\n\n    inlineHoverValuesSideOffset: computed('chartDataModelName', function() {\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'load-values') {\n            return 28;\n        } else if((modelName === 'axial-strain-values' || modelName === 'bending-strain-values') && this.get('instrument').get('stacked')) {\n            return 28;\n        }\n        return 0;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints'),\n            anchorDistances = this.get('anchorDistances'),\n            anchorAXDistances = this.get('anchorAXDistances'),\n            anchorBXDistances = this.get('anchorBXDistances'),\n            anchorDistancesChartReferencePoints = this.get('anchorDistancesChartReferencePoints'),\n            anchorMidDistances = this.get('anchorMidDistances')\n        ;\n        let zoomChartLinesData = [];\n\n        var modelName = this.get('chartDataModelName');\n\n        \n        if ((modelName === 'strain-values' || modelName === 'load-values') && this.get('instrument').get('instrumentType').get('title') !== 'dRebar') { \n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorMidDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else if (modelName === 'axial-strain-values' || modelName === 'load-values' ) {//&& !this.get('instrument').get('stacked')) {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorAXDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else if (modelName === 'bending-strain-values' ) { //&& !this.get('instrument').get('stacked')) {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorBXDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (anchorDistancesChartReferencePoints) {\n            zoomChartLinesData = zoomChartLinesData.concat(anchorDistancesChartReferencePoints);\n        }\n\n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        var modelName = this.get('chartDataModelName');\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        if(type === 'dCable') {\n            if(modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                //console.log(fullRangeDataPoints);\n                fullRangeDataPoints.forEach(element => element.values[0]=0);\n            }\n        }\n        \n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[chartLineIndex]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n    }),\n\n    numLines: computed('zoomTimePoints', function() {\n        return this.get('zoomTimePoints').length;\n    }),\n\n    lineDrawDelay: computed('numLines', function() {\n        return (13000 / (this.get('numLines') + 1)) ^ (1 / 20);\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            inlineHoverValuesSideOffset = _this.get('inlineHoverValuesSideOffset'),\n            progressAnimationDuration = _this.get('progressAnimationDuration'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n\n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let axisName = '';\n                let units = chartData.get('units');\n                switch(yAxisLegend.get('title')) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    case 'axial_strain':\n                        axisName = \"Axial Strain\";\n                        units = \"%\";\n                        break;\n                    case 'bending_strain':\n                        axisName = \"Bending Strain\";\n                        units = \"%\";\n                        break;\n                    case 'axial_displacement':\n                        axisName = \"Axial Displacement\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n                \n                if(yAxisLegend.get('title')==='load') {\n                    title = axisName + \" (kN)\";\n                } else {\n                    title = axisName + \" (\" + units + \")\";\n                }\n            }\n\n            let zoomChart = nv.models.lineChartProgressAnimationAPI()\n                .margin({top: 55, right: 10, bottom: 85, left: 60})\n                .useInteractiveGuideline(false)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .distXAxisScale(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .showLegend(true)\n                .progressAnimationDuration(progressAnimationDuration)\n                .showXAxis(true)\n                .noData('No usable data')\n                ;\n\n\n            let length = 0;\n            try {\n                length = _this.instrument.get('instrumentLength');\n                let type = _this.instrument.get('instrumentType');\n                if (type === 'dRebar') {\n                    length = length * 1000;\n                }\n                \n            } catch (ex) {\n\n            }\n            \n            if(length !== null && length === 0) {\n                length = 0;\n            }\n\n            zoomChart.forceX([0, length]);\n/*             if (yAxisLegend.get('title') != 'bending_strain' && yAxisLegend.get('title') != 'axial_strain') {\n                \n            }\n */\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .tickFormat(d3.format(\".2f\"))\n                    // .tickFormat(function(d) {\n                    //     let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                    //     return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    // })\n                    ;\n                zoomChart.yAxis\n                    .axisLabel(title)\n                    .tickFormat(d3.format(\".2f\"));\n\n                zoomChart.distXAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .ticks(5)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(45)\n                    .isDistXTooltip(isDistXTooltip)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2);\n\n                //zoomChart.legend.inlineHoverValuesSideOffset(inlineHoverValuesSideOffset);\n\n                zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n\n                }\n\n/*                 zoomChart.xAxis.dispatch.on('xAxisMouseMove', function (mouseMove) {\n                    console.log('test');\n                });\n */\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log('test');\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n\n                    if (!seismicEventsArray.length || !blastEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (!activeTooltipContent) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                return zoomChart;\n            });\n\n            // declare fullRangeChart because later in zoom chart we need axis from fullRangeChart for events axis on zoomChart\n            let fullRangeChart = nv.models.focus(nv.models.line())\n               .margin({top: 10, right: 10, bottom: 30, left: 60})\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .syncBrushing(false)\n                .independentBrushing(true)\n                .showXAxis(true)\n                .showYAxis(false)\n                ;\n\n\n            nv.addGraph(function() {\n\n                fullRangeChart.xAxis\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n                fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n                fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(fullRangeChart.update);\n\n                // set zoom based on query params if set\n                let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n                let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n                if (startTimestamp && endTimestamp) {\n                    fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n                }\n\n                return fullRangeChart;\n            });\n\n        });\n\n    }\n\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n//import JSONAPISerializer from '@ember-data/serializers/json';\n\nexport default Component.extend({\n\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n    \n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    vibeEventsChartDistXData: computed('vibeEvents', function() {\n        var events = this.get('vibeEvents');\n        //console.log('vibeEvents');\n        //console.log(events);\n        if ( this.get('vibeEvents') ) {\n            return [{\n                key: 'BluVibe',\n                type: 'distX',\n                color: '#80bf5c',\n                values: this.get('vibeEvents').map(function(event) {\n                    return [\n                        moment( event.get('id') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            let data_set = this.get('blastEvents').map(function(event) {\n                //console.log(event.get('timestamp'));\n                return {\n                    type: 'Blast',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n            //console.log(data_set);\n            return data_set;\n        }\n        return false;\n    }),\n\n    vibeEventsArray: computed('vibeEvents', function() {\n        var events = this.get('vibeEvents');\n        //console.log(events);\n        if ( events ) {\n            return events.map(function(event) {\n                return {\n                    type: 'BluVibe',\n                    time: event.get('id'),\n                    timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    ppa: event.get('ppa'),\n                    ppv: event.get('ppv'),\n                    freq: event.get('frequency')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n        }\n        return false;\n    }),\n\n    zoomTempPoints: map('zoomTempData', function(item){\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        return chartData;\n    }),\n\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n        let KPA_TO_MMH20 = 101.9716;\n        \n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        var modelName = this.get('chartDataModelName');\n        let chartType = this.attrs.getQueryParams('chart_type');\n\n        console.log(\"Model Name::::|\" + chartType + \"|\");\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') { \n            var plated = this.get('instrument').get('plated');\n            \n            if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n                if(plated) {\n                    chartData.values[0] = chartData.values[1];\n                } else {\n                    chartData.values[0] = 0;\n                }\n            } else {\n                //chartData.values.unshift(0);\n            }\n            chartData.values.push(0);\n        }\n        if(chartType === 'mmH20') {\n            chartData.values = chartData.values.map(function(item) {\n                return item * KPA_TO_MMH20;\n            });\n        }\n        return chartData;\n        } catch(e) { return { values: [] }; }\n    }),\n\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n\n/*     fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        if(instType === 'Tilt') {\n            return ['X','Y','Z'];\n        } else if(instType === 'Wire') {\n            let anchors = [];\n            let numPorts = this.instrument.get('portsNum');\n            let startVal = 0;\n            let maxVal = numPorts;\n/*             if (this.port != '') {\n                //startVal = (1 * this.port) - 1;\n                startVal = (1 * numPorts) - 1;\n                maxVal = startVal + 1;\n            }\n */            for(let ctr = startVal; ctr < maxVal; ctr++) {\n                anchors.push('T' + (ctr + 1));\n                anchors.push(ctr + 1);\n            }\n            return anchors;\n        } else if(instType === 'BluVibe') {\n            return ['Data'];\n        }\n        let chartData = this.get('fullRangeChartData');\n        let dataValuesCount;\n        try {\n            dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n        let anchors = this.get('instrument').get('anchors');\n        \n        const arr = anchors.content ?? anchors;\n        \n        let anchorDistances = arr.map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        //anchorDistances.push('T'); //TODO: add temperature\n\n        //IF chart is Strain-Values chart\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') { \n            var midPoints = [];\n            if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n                //Adjust anchors to mid points between anchors\n                for(var ctr = 1; ctr < anchorDistances.length ; ctr++) {\n                    var mid = (anchorDistances[ctr - 1] + anchorDistances[ctr]) / 2;\n                    midPoints[ctr] = + mid.toFixed(2);\n                }\n\n                //console.log(midPoints);\n\n                //add zero point and end point\n                midPoints.splice(0,1);\n                midPoints[0] = 0;\n                midPoints.push(anchorDistances[anchorDistances.length - 1]);  //TODO: change to length of exto once known\n                //console.log(midPoints);\n            } else if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n                //Adjust anchors to mid points between anchors\n                //console.log(this.get('instrument'));\n                let headExclusion = this.get('instrument').get('headExclusionLength');\n                let leftAnchors = [headExclusion];\n                let rightAnchors = [headExclusion];\n                \n                let center = anchorDistances.length - 1;\n                center = Math.ceil(center / 2);\n\n                leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n\n                let midLeft = [];\n                for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                    midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                }\n\n                let midRight = [];\n                for(var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                    midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                }\n\n                if (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values') {\n                    if(this.get('instrument').get('stacked')) {\n                        midPoints = midLeft;\n                        if (modelName === 'load-values') {\n                            midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n                        }\n                    } else {\n                        midPoints = midLeft.concat(midRight);\n                        /* midPoints = $.map(midPoints.slice(1, center + 1), function(v, i) {\n                            return [v, midPoints.slice(center + 1)[i]];\n                          }); */\n                        if (modelName === 'bending-strain-values') {\n                            midPoints.shift();\n                            midPoints.pop();\n                        }\n\n                    }\n                } else {\n                    midPoints = midLeft.concat(midRight);\n                }\n                if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                    for(let ctr = 0; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n  \n/*                     for(let ctr = 0; ctr < midPoints.length / 2; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n        \n                    for(let ctr = 3; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n */                }\n            } else {\n                for(var ctr = 0; ctr < anchorDistances.length-1; ctr++) {\n                    midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n                }\n            }\n            if(modelName==='displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        } else if (modelName === 'axial-displacement-values' && this.get('instrument').get('stacked')) {\n            let mid = (anchorDistances.length - 1) / 2;\n            while (anchorDistances.length > (mid + 1)) {\n                anchorDistances.pop();\n            }\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else if (modelName === 'axial-displacement-values' && !this.get('instrument').get('stacked')) {\n            anchorDistances.sort(function(a,b){return a-b;});\n\n            //anchorDistances.push(this.get('instrument').get('instrumentLength') * 1000);\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else {\n            if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n                if (modelName === 'displacement-values') { //rebar stretch\n                    var midPoints = [];\n                    let headExclusion = this.get('instrument').get('headExclusionLength');\n                    let leftAnchors = [headExclusion];\n                    let rightAnchors = [headExclusion];\n                    \n                    let center = anchorDistances.length - 1;\n                    center = Math.ceil(center / 2);\n    \n                    leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                    rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n    \n                    if(!this.get('instrument').get('stacked')) {\n                        rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n                    }\n    \n                    let midLeft = [];\n                    for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                        midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                    }\n    \n                    let midRight = [];\n                    for(var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                        midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                    }\n\n                    midPoints = midLeft.concat(midRight);\n                    anchorDistances = midPoints;\n\n                    anchorDistances.unshift(0);\n                }\n                for(let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n    \n                for(let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n            }    \n        }\n        //console.log(anchorDistances);\n        return anchorDistances;\n    }),\n\n    pressureRateDataPoints: computed('zoomDataPoints', 'zoomTimePoints', function() {\n        const zoomDataPoints = this.get('zoomDataPoints');\n        const zoomTimePoints = this.get('zoomTimePoints');\n        if (!zoomDataPoints || zoomDataPoints.length < 2) return zoomDataPoints || [];\n        return zoomDataPoints.map(function(curr, i) {\n            if (i === 0) return { values: (curr && curr.values) ? curr.values.map(function() { return null; }) : [] };\n            const prev = zoomDataPoints[i - 1];\n            const timeDiffDays = (moment(zoomTimePoints[i]).valueOf() - moment(zoomTimePoints[i - 1]).valueOf()) / 86400000;\n            if (!prev || !prev.values || !curr || !curr.values || timeDiffDays === 0) return { values: [] };\n            return {\n                values: curr.values.map(function(val, idx) {\n                    return (val - (prev.values[idx] || 0)) / timeDiffDays;\n                })\n            };\n        });\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'pressureRateDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    // zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n            const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomTempPoints = this.get('zoomTempPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n\n        const isPressureRate = this.attrs.getQueryParams('chart_type') === 'Pressure Rate';\n        const zoomDataPoints = isPressureRate ? this.get('pressureRateDataPoints') : this.get('zoomDataPoints');\n\n        let anchorDistances = this.get('anchorDistances'),\n            zoomChartLinesData = []\n        ;\n\n        if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n            var mName = _this.get('chartDataModelName');\n            if (mName === 'strain-values' || mName === 'strain-rate-values' || mName === 'load-values') {\n                zoomDataPoints.forEach(element => element.values[0] = 0);\n            }\n        }    \n\n        //  if (this.get('instrument').get('instrumentType').get('title') == 'Tilt') {\n        //         zoomDataPoints.forEach(element => element.values.shift());\n        // }    \n\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n        //console.log(zoomTempPoints.length);\n\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            if (_this.get('chartDataModelName') !== 'displacement-values' && this.get('instrument').get('instrumentType').get('title') !== 'BluVibe'){\n                while(zoomTempPoints.length > zoomDataPoints.length) {\n                    zoomTempPoints.pop();\n                    zoomTempPoints.shift();\n                }\n            }\n            var temp = {key: 'T',\n                type: 'lines',\n                yAxis: 2,\n                values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null,\n                    ];\n                })\n            };\n            //console.log(temp);\n            zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (vibeEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                    ];\n                })\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').queryRecord('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            vibeEventsArray = this.get('vibeEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        //console.log(vibeEventsArray);\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];//.get('firstObject');\n                \n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let instType = _this.instrument.get('instrumentType').get('title');\n\n                let axisName = '';\n                let units = chartData.get('units');\n                title = '';\n                if (instType === 'BluVibe') {\n                    title = _this.get('chartDataModelName');\n                } else {\n                    title = yAxisLegend.get('title');\n                }\n                let chartType = _this.attrs.getQueryParams('chart_type');\n\n                // because we can only have one displacement chart and this one uses 2 (a regular displacement and a mmH20 displacement)\n                // I had to do this hack to accomodate the mmH20 chart.  I'm not proud of it, but it works.\n                if(chartType == null || chartType == undefined || chartType == '') {\n                    title = 'displacement';\n                } else if (chartType === 'mmH20'){\n                    title = chartType;\n                } else if (chartType === 'Pressure Rate') {\n                    title = 'pressureRate';\n                }\n                \n                switch(title) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'pressureRate':\n                        axisName = 'Pressure Rate';\n                        units = 'kPa/day';\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'mmH20':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units = \"\"; //\"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    case 'axial_strain':\n                        axisName = \"Axial Strain\";\n                        units = \"%\";\n                        break;\n                    case 'bending_strain':\n                        axisName = \"Bending Strain\";\n                        units = \"%\";\n                        break;\n                    case 'axial_displacement':\n                        axisName = \"Axial Displacement\";\n                        break;\n                    case 'temperature':\n                        axisName = \"Temperature\";\n                        units = \"°C\";\n                        break;\n                    case 'event-frequency':\n                        axisName = \"Event Frequency\";\n                        break;\n                    case 'event-ppv':\n                        axisName = \"Event PPV\";\n                        break;\n                    case 'event-ppa':\n                        axisName = \"Event PPA\";\n                        break;\n                    case 'cumulative-event-frequency':\n                        axisName = \"Cumulative Frequency\";\n                        break;\n                    case 'cumulative-event-ppv':\n                        axisName = \"Cumulative PPV\";\n                        break;\n                    case 'cumulative-event-ppa':\n                        axisName = \"Cumulative PPA\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                        //console.log(title);\n                }\n\n                /* let chartName = yAxisLegend.get('title').capitalize();\n                let chartNameL = chartName.substr(0, chartName.indexOf('_'));\n                let chartNameR = chartName.substr(chartName.indexOf('_') + 1).capitalize();\n                if(chartNameL !== \"\") {\n                    chartName = chartNameL + \" \" + chartNameR;\n                } */\n\n                if (yAxisLegend) {\n                    let raw = _this.raw;\n                    if(yAxisLegend.get('title')==='load') {\n                        title = axisName +\" (kN)\";\n                    } else if (instType === 'Wire') {\n                        if (raw === true) {\n                            title = \"Frequency (Hz)\";\n                        } else {\n                            title = \"Calculated Values\";\n                        }\n                    } else {\n                        if(units === '') {\n                            title = axisName;\n                        } else {\n                            title = axisName + \" (\" + units + \")\";\n                        }\n                    }\n                } else {\n                    if (instType === 'BluVibe') {\n                        title = axisName;\n                    } else {\n                        if(units === '') {\n                            title = axisName;\n                        } else {\n                            title = axisName + \" (\" + units + \")\";\n                        }\n                    }\n                }\n                //title = yAxisLegend.get('unit');\n            }\n\n            function usesPoints(chartName) {\n                //console.log(chartName);\n                switch(chartName) {\n                    case 'event-ppv':\n                    case 'event-ppa':\n                        return true;\n                }\n                return false;\n            }\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(usesPoints(_this.get('chartDataModelName')))\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data')\n            ;\n\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                if (_this.instrument.get('instrumentType').get('title') === 'Tilt') {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".3f\"));\n                    zoomChart.legend.numDecimals(3);\n                } else {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                }\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n\n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(vibeEventsArray);\n                    //console.log(distXMouseMove);\n \n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    } \n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) { _this.setData(zoomChartLinesData); }\n                if (_this.setChart) { _this.setChart(zoomChart); }\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n\n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\n// Piezo raw-data — single-channel pressure (one \"kPa\" column + Temperature).\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    isModalOpen: false,\n    modalMode: 'add', // 'add' | 'edit'\n    modalEditingRowId: null,\n\n    // Two columns only: kPa and Temperature. Single-channel pressure → no anchor list.\n    columnSpecs: computed(function(){\n        return [\n            { key: 'kpa',     label: 'kPa',         tableLabel: 'kPa',         isTemp: false, isKPa: true },\n            { key: '__temp__', label: 'Temperature', tableLabel: 'Temperature', isTemp: true,  isKPa: false },\n        ];\n    }),\n\n    tableRows: computed('displacementData.[]', 'temperatureData.[]', 'columnSpecs', 'globalDatetimeFormat.value', function(){\n        const dispData = this.get('displacementData') || [];\n        const tempData = this.get('temperatureData') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n\n        const tempById = {};\n        tempData.forEach(r => { tempById[r.id] = r; });\n\n        return dispData.map((dispRow) => {\n            const id = dispRow.id;\n            const dispValues = (dispRow.values || dispRow.get?.('values') || []);\n            const tempRow = tempById[id];\n            const tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n\n            const kpaValue = dispValues[0];\n            const tempValue = tempValues[0];\n\n            return {\n                id,\n                date: id,\n                formattedDate: moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt),\n                cells: [\n                    { key: 'kpa',     label: 'kPa',         value: kpaValue == null ? '' : kpaValue },\n                    { key: '__temp__', label: 'Temperature', value: tempValue == null ? '' : tempValue },\n                ],\n            };\n        });\n    }),\n\n    modalFields: computed('columnSpecs', 'modalMode', 'modalEditingRowId', 'tableRows.[]', function(){\n        const specs = this.get('columnSpecs') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingRowId');\n\n        let existingRow = null;\n        if(mode === 'edit' && editingId){\n            existingRow = (this.get('tableRows') || []).find(r => r.id === editingId);\n        }\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && existingRow\n                ? moment(existingRow.date, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm')\n                : moment().format('YYYY-MM-DDTHH:mm'),\n        };\n\n        const cellByKey = {};\n        if(existingRow){\n            existingRow.cells.forEach(c => { cellByKey[c.key] = c.value; });\n        }\n\n        const channelFields = specs.map((spec) => ({\n            key: spec.key,\n            label: spec.label,\n            type: 'text',\n            value: cellByKey[spec.key] != null ? cellByKey[spec.key] : '',\n        }));\n\n        return [dateField, ...channelFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function(){\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingRowId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingRowId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const instrumentId = this.get('instrument.id');\n            const dispData = this.get('displacementData');\n            const tempData = this.get('temperatureData');\n            const dispRow = dispData ? dispData.find(r => r.id === rowId) : null;\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            const promises = [];\n            if(dispRow && dispRow.deleteRecord){ dispRow.deleteRecord(); promises.push(dispRow.save(adapterOptions)); }\n            if(tempRow && tempRow.deleteRecord){ tempRow.deleteRecord(); promises.push(tempRow.save(adapterOptions)); }\n            Promise.all(promises)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            const dispValues = [Number(snapshot['kpa']) || 0];\n            const tempValues = [Number(snapshot['__temp__']) || 0];\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingRowId');\n\n            const tempData = this.get('temperatureData') || [];\n            const dispData = this.get('displacementData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            if(isEdit && originalId === newId){\n                const tempRow = findRow(tempData, originalId);\n                const dispRow = findRow(dispData, originalId);\n                const promises = [];\n                if(tempRow){ tempRow.set('values', tempValues); promises.push(tempRow.save(adapterOptions)); }\n                if(dispRow){ dispRow.set('values', dispValues); promises.push(dispRow.save(adapterOptions)); }\n                Promise.all(promises).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                const oldDisp = findRow(dispData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n                if(oldDisp){ oldDisp.deleteRecord(); oldDisp.save(adapterOptions); }\n            }\n\n            const tempRecord = store.createRecord('temperature-value', { id: newId, values: tempValues });\n            tempRecord.save(adapterOptions);\n\n            const dispRecord = store.createRecord('displacement-value', { id: newId, values: dispValues });\n            dispRecord.save(adapterOptions).then(refreshRoute).catch(handleErr);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n    // isPiezo: computed('instrumentType', function() {\n    //     console.log(\"instrumentType :::::::::::::::::::::::::::::::: \" + this.instrumentType);\n    //     if (this.instrumentType === 'Piezometer') {\n    //         return true;\n    //     }\n    //     return false;\n    // }),\n\n});","export { default } from 'ember-leaflet/components/point-path-layer';\n","export { default } from 'ember-leaflet/components/polygon-layer';\n","export { default } from 'ember-leaflet/components/polyline-layer';\n","export { default } from 'ember-leaflet/components/popup-layer';\n","import { action, computed } from '@ember/object';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n\n    isShowingModal: false,\n    host: computed(function() {\n      return \"http://\" + document.location.host.split(':')[0] + \":4500/assets/images/gateway_carrier.json\";\n    }),\n\n    carrierList: computed(function() {\n      let data = this.get('gateways');\n      // const sortedData = {\n      //   \"carrier_list\": Object.values(data.carrier_list)\n      //     .sort((a, b) => a.Country.localeCompare(b.Country))\n      //     .reduce((acc, curr) => {\n      //       acc[curr.Carrier] = curr;\n      //       return acc;\n      //     }, {})\n      // };\n      // return sortedData.carrier_list;\n      return data;\n    }),\n\n    carrierValue: function(item){\n      \n      const atIndex = item.indexOf('@');\n      if (atIndex === -1) {\n          return item;\n      }\n      return item.substring(atIndex, item.length);          \n    },\n\n    actions: {\n      close() {\n          this.set('show', false);\n      },\n\n      \n      selectGateway( phoneNumber, item) {\n          this.set('show', false);\n          this.set('isShowingModal', false);\n          const concatenatedValue = `${phoneNumber}${this.carrierValue(item)}`;\n          console.log(\"selectdGateway::::::::::::::\" + concatenatedValue);\n          // this.args.onSelect(concatenatedValue);\n          this.sendAction('onSelect', concatenatedValue);\n          \n        },\n\n      toggleModal() {\n        this.toggleProperty('isShowingModal');\n        this.toggleProperty('showModal');\n        this.toggleProperty('isShowingModal');\n        \n        this.set('isShowingModal', false);\n        // console.log(\"toggleModal:\" + this.get('showModal'));\n      },\n\n      closeTargetSelector() { \n        this.set('isShowingModal', false);\n      }\n    },\n    gateways: computed(function() {\n      let data = {\n        \"carrier_list\": {\n          \"AirCel\": {\n            \"Carrier\": \"AirCel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@aircel.co.in\"\n          },\n          \"Airtel\": {\n            \"Carrier\": \"Airtel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@airtelkk.com\"\n          },\n          \"AirFire Mobile\": {\n            \"Carrier\": \"AirFire Mobile\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@sms.airfiremobile.com\"\n          },\n          \"Aio Wireless\": {\n            \"Carrier\": \"Aio Wireless\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@mms.aiowireless.net\"\n          },\n          \"Alaska Communications\": {\n            \"Carrier\": \"Alaska Communications\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@msg.acsalaska.com\"\n          },\n          \"Aliant Canada\": {\n            \"Carrier\": \"Aliant Canada\",\n            \"Country\": \"Canada\",\n            \"Gateway\": \"number@sms.wirefree.informe.ca\"\n          },\n          \"Alltel (Allied Wireless)\": {\n            \"Carrier\": \"Alltel (Allied Wireless)\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@mms.alltelwireless.com\"\n          },\n          \"Verizon Wireless\": {\n            \"Carrier\": \"Verizon Wireless\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@vzwpix.com\"\n          },\n          \"Ameritech\": {\n            \"Carrier\": \"Ameritech\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@paging.acswireless.com\"\n          },\n          \"Andhra Pradesh AirTel\": {\n            \"Carrier\": \"Andhra Pradesh AirTel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@airtelap.com\"\n          },\n          \"Andhra Pradesh Idea\": {\n            \"Carrier\": \"Andhra Pradesh Idea\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@ideacellular.net\"\n          },\n          \"Assurance Wireless\": {\n            \"Carrier\": \"Assurance Wireless\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@vmobl.com\"\n          },\n          \"AT&T Mobility\": {\n            \"Carrier\": \"AT&T Mobility\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@mms.att.net\"\n          },\n          \"Rogers Canada\": {\n            \"Carrier\": \"Rogers Mobile Canada\",\n            \"Country\": \"Canada\",\n            \"Gateway\": \"number@pcs.rogers.com\"\n          },\n          \"Koodo Mobile Canada\": {\n            \"Carrier\": \"Koodo Mobile Canada\",\n            \"Country\": \"Canada\",\n            \"Gateway\": \"number@msg.koodomobile.com\"\n          },\n          \"Virgin Mobile Canada\": {\n            \"Carrier\": \"Virgin Mobile Canada\",\n            \"Country\": \"Canada\",\n            \"Gateway\": \"number@vmobile.ca\"\n          },\n          \"AT&T Enterprise Paging\": {\n            \"Carrier\": \"AT&T Enterprise Paging\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@page.att.net\"\n          },\n          \"Beeline\": {\n            \"Carrier\": \"Beeline\",\n            \"Country\": \"Russia\",\n            \"Gateway\": \"number@sms.beemail.ru\"\n          },\n          \"Bell Mobility\": {\n            \"Carrier\": \"Bell Mobility\",\n            \"Country\": \"Canada\",\n            \"Gateway\": \"number@txt.bell.ca\"\n          },\n          \"BellSouth\": {\n            \"Carrier\": \"BellSouth\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@bellsouth.cl\"\n          },\n          \"Bluegrass Cellular\": {\n            \"Carrier\": \"Bluegrass Cellular\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@mms.myblueworks.com\"\n          },\n          \"Bluesky Communications\": {\n            \"Carrier\": \"Bluesky Communications\",\n            \"Country\": \"USA Samoa\",\n            \"Gateway\": \"number@psms.bluesky.as\"\n          },\n          \"Boost mobile\": {\n            \"Carrier\": \"Boost mobile\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@myboostmobile.com\"\n          },\n          \"Bouygues Telecom\": {\n            \"Carrier\": \"Bouygues Telecom\",\n            \"Country\": \"France\",\n            \"Gateway\": \"number@mms.bouyguestelecom.fr\"\n          },\n          \"Box Internet Services\": {\n            \"Carrier\": \"Box Internet Services\",\n            \"Country\": \"Switzerland\",\n            \"Gateway\": \"number@mms.boxis.net\"\n          },\n          \"SFR\": {\n            \"Carrier\": \"SFR\",\n            \"Country\": \"France\",\n            \"Gateway\": \"number@sfr.fr\"\n          },\n          \"CellCom\": {\n            \"Carrier\": \"CellCom\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@cellcom.quiktxt.com\"\n          },\n          \"Cellular South\": {\n            \"Carrier\": \"Cellular South\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@csouth1.com\"\n          },\n          \"Centennial Wireless\": {\n            \"Carrier\": \"Centennial Wireless\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@cwemail.com\"\n          },\n          \"Chariton Valley Wireless\": {\n            \"Carrier\": \"Chariton Valley Wireless\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@sms.cvalley.net\"\n          },\n          \"Chat Mobility\": {\n            \"Carrier\": \"Chat Mobility\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@mail.msgsender.com\"\n          },\n          \"Chennai Skycell / Airtel\": {\n            \"Carrier\": \"Chennai Skycell / Airtel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@airtelchennai.com\"\n          },\n          \"Chennai RPG Cellular\": {\n            \"Carrier\": \"Chennai RPG Cellular\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@rpgmail.net\"\n          },\n          \"China Mobile\": {\n            \"Carrier\": \"China Mobile\",\n            \"Country\": \"China\",\n            \"Gateway\": \"number@139.com\"\n          },\n          \"Cincinnati Bell\": {\n            \"Carrier\": \"Cincinnati Bell\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@mms.gocbw.com\"\n          },\n          \"Claro\": {\n            \"Carrier\": \"Claro\",\n            \"Country\": \"Colombia\",\n            \"Gateway\": \"number@iclaro.com.co\"\n          },\n          \"Cleartalk\": {\n            \"Carrier\": \"Cleartalk\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@sms.cleartalk.us\"\n          },\n          \"Cricket\": {\n            \"Carrier\": \"Cricket\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@mms.mycricket.com\"\n          },\n          \"C Spire Wireless\": {\n            \"Carrier\": \"C Spire Wireless\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@cspire1.com\"\n          },\n          \"Accessyou\": {\n            \"Carrier\": \"Accessyou\",\n            \"Country\": \"Hong Kong\",\n            \"Gateway\": \"number@messaging.accessyou.com\"\n          },\n          \"CSL\": {\n            \"Carrier\": \"CSL\",\n            \"Country\": \"Hong Kong\",\n            \"Gateway\": \"number@mgw.mmsc1.hkcsl.com\"\n          },\n          \"CTI Móvil (Now Claro)\": {\n            \"Carrier\": \"CTI Móvil (Now Claro)\",\n            \"Country\": \"Argentina\",\n            \"Gateway\": \"number@sms.ctimovil.com.ar\"\n          },\n          \"Delhi Airtel\": {\n            \"Carrier\": \"Delhi Airtel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@airtelmail.com\"\n          },\n          \"Digicel\": {\n            \"Carrier\": \"Digicel\",\n            \"Country\": \"Dominica\",\n            \"Gateway\": \"number@digitextdm.com\"\n          },\n          \"DTC\": {\n            \"Carrier\": \"DTC\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@sms.advantagecell.net\"\n          },\n          \"E-Plus\": {\n            \"Carrier\": \"E-Plus\",\n            \"Country\": \"Germany\",\n            \"Gateway\": \"number@smsmail.eplus.de\"\n          },\n          \"Edge Wireless\": {\n            \"Carrier\": \"Edge Wireless\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@sms.edgewireless.com\"\n          },\n          \"Element Mobile\": {\n            \"Carrier\": \"Element Mobile\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@SMS.elementmobile.net\"\n          },\n          \"Emtel\": {\n            \"Carrier\": \"Emtel\",\n            \"Country\": \"Mauritius\",\n            \"Gateway\": \"number@emtelworld.net\"\n          },\n          \"Esendex\": {\n            \"Carrier\": \"Esendex\",\n            \"Country\": \"Spain\",\n            \"Gateway\": \"number@esendex.net\"\n          },\n          \"Fido\": {\n            \"Carrier\": \"Fido\",\n            \"Country\": \"Canada\",\n            \"Gateway\": \"number@sms.fido.ca\"\n          },\n          \"Firmensms\": {\n            \"Carrier\": \"Firmensms\",\n            \"Country\": \"Austria\",\n            \"Gateway\": \"number@subdomain.firmensms.at\"\n          },\n          \"Freebie SMS\": {\n            \"Carrier\": \"Freebie SMS\",\n            \"Country\": \"Europe\",\n            \"Gateway\": \"number@smssturen.com\"\n          },\n          \"General Communications Inc.\": {\n            \"Carrier\": \"General Communications Inc.\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@mobile.gci.net\"\n          },\n          \"Globalstar\": {\n            \"Carrier\": \"Globalstar\",\n            \"Country\": \"International\",\n            \"Gateway\": \"number@msg.globalstarusa.com\"\n          },\n          \"Globul\": {\n            \"Carrier\": \"Globul\",\n            \"Country\": \"Bulgaria\",\n            \"Gateway\": \"number@sms.globul.bg\"\n          },\n          \"Goa Airtel\": {\n            \"Carrier\": \"Goa Airtel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@airtelmail.com\"\n          },\n          \"Goa Idea Cellular\": {\n            \"Carrier\": \"Goa Idea Cellular\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@ideacellular.net\"\n          },\n          \"Golden State Cellular\": {\n            \"Carrier\": \"Golden State Cellular\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@gscsms.com\"\n          },\n          \"Greatcall\": {\n            \"Carrier\": \"Greatcall\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@vtxt.com\"\n          },\n          \"Gujarat Idea Cellular\": {\n            \"Carrier\": \"Gujarat Idea Cellular\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@ideacellular.net\"\n          },\n          \"Gujarat Airtel\": {\n            \"Carrier\": \"Gujarat Airtel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@airtelmail.com\"\n          },\n          \"Gujarat Celforce / Fascel\": {\n            \"Carrier\": \"Gujarat Celforce / Fascel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@celforce.com\"\n          },\n          \"Guyana T&T\": {\n            \"Carrier\": \"Guyana T&T\",\n            \"Country\": \"Guyana\",\n            \"Gateway\": \"number@sms.cellinkgy.com\"\n          },\n          \"Haryana Airtel\": {\n            \"Carrier\": \"Haryana Airtel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@airtelmail.com\"\n          },\n          \"Haryana Escotel\": {\n            \"Carrier\": \"Haryana Escotel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@escotelmobile.com\"\n          },\n          \"Hawaiian Telcom\": {\n            \"Carrier\": \"Hawaiian Telcom\",\n            \"Country\": \"Hawaii USA\",\n            \"Gateway\": \"number@hawaii.sprintpcs.com\"\n          },\n          \"HSL Mobile\": {\n            \"Carrier\": \"HSL Mobile\",\n            \"Country\": \"UK\",\n            \"Gateway\": \"number@sms.haysystems.com\"\n          },\n          \"Helio\": {\n            \"Carrier\": \"Helio\",\n            \"Country\": \"South Korea\",\n            \"Gateway\": \"number@myhelio.com\"\n          },\n          \"Himachai Pradesh Airtel\": {\n            \"Carrier\": \"Himachai Pradesh Airtel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@airtelmail.com\"\n          },\n          \"ICE\": {\n            \"Carrier\": \"ICE\",\n            \"Country\": \"Costa Rica\",\n            \"Gateway\": \"number@sms.ice.cr\"\n          },\n          \"I-wireless(T-Mobile)\": {\n            \"Carrier\": \"I-wireless(T-Mobile)\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number.iws@iwspcs.net\"\n          },\n          \"I-wireless(Sprint PCS)\": {\n            \"Carrier\": \"I-wireless(Sprint PCS)\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@iwirelesshometext.com\"\n          },\n          \"Kajeet\": {\n            \"Carrier\": \"Kajeet\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@mobile.kajeet.net\"\n          },\n          \"Karnataka Airtel\": {\n            \"Carrier\": \"Karnataka Airtel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@airtelkk.com\"\n          },\n          \"Kerala Airtel\": {\n            \"Carrier\": \"Kerala Airtel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@airtelkerala.com\"\n          },\n          \"Kerala Escotel\": {\n            \"Carrier\": \"Kerala Escotel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@escotelmobile.com\"\n          },\n          \"Kolkata Airtel\": {\n            \"Carrier\": \"Kolkata Airtel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@airtelkol.com\"\n          },\n          \"Koodo Mobile\": {\n            \"Carrier\": \"Koodo Mobile\",\n            \"Country\": \"Canada\",\n            \"Gateway\": \"number@msg.telus.com\"\n          },\n          \"LongLines\": {\n            \"Carrier\": \"LongLines\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@text.longlines.com\"\n          },\n          \"Lynx Mobility\": {\n            \"Carrier\": \"Lynx Mobility\",\n            \"Country\": \"Canada\",\n            \"Gateway\": \"number@sms.lynxmobility.com\"\n          },\n          \"M1\": {\n            \"Carrier\": \"M1\",\n            \"Country\": \"Singapore\",\n            \"Gateway\": \"number@m1.com.sg\"\n          },\n          \"Madhya Pradesh Airtel\": {\n            \"Carrier\": \"Madhya Pradesh Airtel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@airtelmail.com\"\n          },\n          \"Maharashtra Airtel\": {\n            \"Carrier\": \"Maharashtra Airtel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@airtelmail.com\"\n          },\n          \"Maharashtra Idea\": {\n            \"Carrier\": \"Maharashtra Idea\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@ideacellular.net\"\n          },\n          \"Más Móvil\": {\n            \"Carrier\": \"Más Móvil\",\n            \"Country\": \"Panama\",\n            \"Gateway\": \"number@cwmovil.com\"\n          },\n          \"Mediaburst\": {\n            \"Carrier\": \"Mediaburst\",\n            \"Country\": \"UK\",\n            \"Gateway\": \"number@sms.mediaburst.co.uk\"\n          },\n          \"MetroPCS\": {\n            \"Carrier\": \"MetroPCS\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@mymetropcs.com\"\n          },\n          \"Mobiltel\": {\n            \"Carrier\": \"Mobiltel\",\n            \"Country\": \"Bulgaria\",\n            \"Gateway\": \"number@sms.mtel.net\"\n          },\n          \"Mobitel\": {\n            \"Carrier\": \"Mobitel\",\n            \"Country\": \"Sri Lanka\",\n            \"Gateway\": \"number@sms.mobitel.lk\"\n          },\n          \"Movistar\": {\n            \"Carrier\": \"Movistar\",\n            \"Country\": \"Uruguay\",\n            \"Gateway\": \"number@sms.movistar.com.uy\"\n          },\n          \"MTN\": {\n            \"Carrier\": \"MTN\",\n            \"Country\": \"South Africa\",\n            \"Gateway\": \"number@sms.co.za\"\n          },\n          \"MTS Mobility\": {\n            \"Carrier\": \"MTS Mobility\",\n            \"Country\": \"Canada\",\n            \"Gateway\": \"number@text.mtsmobility.com\"\n          },\n          \"Mumbai Airtel\": {\n            \"Carrier\": \"Mumbai Airtel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@airtelmail.com\"\n          },\n          \"My-Cool-SMS\": {\n            \"Carrier\": \"My-Cool-SMS\",\n            \"Country\": \"UK\",\n            \"Gateway\": \"number@my-cool-sms.com\"\n          },\n          \"Nextech\": {\n            \"Carrier\": \"Nextech\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@sms.ntwls.net\"\n          },\n          \"Nextel\": {\n            \"Carrier\": \"Nextel\",\n            \"Country\": \"Argentina\",\n            \"Gateway\": \"TwoWay.11number@nextel.net.ar\"\n          },\n          \"O2\": {\n            \"Carrier\": \"O2\",\n            \"Country\": \"Germany\",\n            \"Gateway\": \"number@o2online.de\"\n          },\n          \"OgVodafone\": {\n            \"Carrier\": \"OgVodafone\",\n            \"Country\": \"Iceland\",\n            \"Gateway\": \"number@sms.is\"\n          },\n          \"Orange\": {\n            \"Carrier\": \"Orange\",\n            \"Country\": \"UK\",\n            \"Gateway\": \"number@orange.net\"\n          },\n          \"Page Plus Cellular (Verizon)\": {\n            \"Carrier\": \"Page Plus Cellular (Verizon)\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@vzwpix.com\"\n          },\n          \"Pioneer Cellular\": {\n            \"Carrier\": \"Pioneer Cellular\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"nine-digit-number@zsend.com\"\n          },\n          \"Personal\": {\n            \"Carrier\": \"Personal\",\n            \"Country\": \"Argentina\",\n            \"Gateway\": \"number@alertas.personal.com.ar\"\n          },\n          \"Plus\": {\n            \"Carrier\": \"Plus\",\n            \"Country\": \"Polan\",\n            \"Gateway\": \"number@text.plusgsm.pl\"\n          },\n          \"Pocket Wireless\": {\n            \"Carrier\": \"Pocket Wireless\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@sms.pocket.com\"\n          },\n          \"PC Telecom\": {\n            \"Carrier\": \"PC Telecom\",\n            \"Country\": \"Canada\",\n            \"Gateway\": \"number@mobiletxt.ca\"\n          },\n          \"Polkomtel\": {\n            \"Carrier\": \"Polkomtel\",\n            \"Country\": \"Poland\",\n            \"Gateway\": \"number@text.plusgsm.pl\"\n          },\n          \"Qwest Wireless\": {\n            \"Carrier\": \"Qwest Wireless\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@qwestmp.com\"\n          },\n          \"Red Pocket Mobile\": {\n            \"Carrier\": \"Red Pocket Mobile\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@vtext.com\"\n          },\n          \"Rogers Wireless\": {\n            \"Carrier\": \"Rogers Wireless\",\n            \"Country\": \"Canada & USA\",\n            \"Gateway\": \"number@mms.rogers.com\"\n          },\n          \"SaskTel\": {\n            \"Carrier\": \"SaskTel\",\n            \"Country\": \"Canada\",\n            \"Gateway\": \"number@pcs.sasktelmobility.com\"\n          },\n          \"Sendega\": {\n            \"Carrier\": \"Sendega\",\n            \"Country\": \"Norway\",\n            \"Gateway\": \"number@sendega.com\"\n          },\n          \"Setar Mobile email (Aruba)\": {\n            \"Carrier\": \"Setar Mobile email (Aruba)\",\n            \"Country\": \"Aruba\",\n            \"Gateway\": \"number@mas.aw\"\n          },\n          \"Síminn\": {\n            \"Carrier\": \"Síminn\",\n            \"Country\": \"Iceland\",\n            \"Gateway\": \"number@box.is\"\n          },\n          \"Simple Mobile\": {\n            \"Carrier\": \"Simple Mobile\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@smtext.com\"\n          },\n          \"SMS Broadcast\": {\n            \"Carrier\": \"SMS Broadcast\",\n            \"Country\": \"Australia\",\n            \"Gateway\": \"number@send.smsbroadcast.com.au\"\n          },\n          \"SMS Central\": {\n            \"Carrier\": \"SMS Central\",\n            \"Country\": \"Australia\",\n            \"Gateway\": \"number@sms.smscentral.com.au\"\n          },\n          \"SMSPUP\": {\n            \"Carrier\": \"SMSPUP\",\n            \"Country\": \"Australia\",\n            \"Gateway\": \"number@smspup.com\"\n          },\n          \"Southernlinc\": {\n            \"Carrier\": \"Southernlinc\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@page.southernlinc.com\"\n          },\n          \"South Central Communications\": {\n            \"Carrier\": \"South Central Communications\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@rinasms.com\"\n          },\n          \"Spikko\": {\n            \"Carrier\": \"Spikko\",\n            \"Country\": \"Israel\",\n            \"Gateway\": \"number@SpikkoSMS.com\"\n          },\n          \"Sprint\": {\n            \"Carrier\": \"Sprint\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@pm.sprint.com\"\n          },\n          \"Straight Talk\": {\n            \"Carrier\": \"Straight Talk\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"Other: number@mmst5.tracfone.com\"\n          },\n          \"Sunrise Communications\": {\n            \"Carrier\": \"Sunrise Communications\",\n            \"Country\": \"Switzerland\",\n            \"Gateway\": \"number@gsm.sunrise.ch\"\n          },\n          \"Syringa Wireless\": {\n            \"Carrier\": \"Syringa Wireless\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@rinasms.com\"\n          },\n          \"TeletopiaSMS\": {\n            \"Carrier\": \"TeletopiaSMS\",\n            \"Country\": \"Norway\",\n            \"Gateway\": \"number@sms.teletopiasms.no\"\n          },\n          \"T-Mobile\": {\n            \"Carrier\": \"T-Mobile\",\n            \"Country\": \"Netherlands\",\n            \"Gateway\": \"number@gin.nl\"\n          },\n          \"T-Mobile (Optus Zoo)\": {\n            \"Carrier\": \"T-Mobile (Optus Zoo)\",\n            \"Country\": \"Australia\",\n            \"Gateway\": \"number@optusmobile.com.au\"\n          },\n          \"Tamil Nadu Airtel\": {\n            \"Carrier\": \"Tamil Nadu Airtel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"919894number@airtelmobile.com\"\n          },\n          \"Tamil Nadu Aircel\": {\n            \"Carrier\": \"Tamil Nadu Aircel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"9842number@airsms.com\"\n          },\n          \"Tele2\": {\n            \"Carrier\": \"Tele2\",\n            \"Country\": \"Sweden\",\n            \"Gateway\": \"number@sms.tele2.se\"\n          },\n          \"Telecom\": {\n            \"Carrier\": \"Telecom\",\n            \"Country\": \"New Zealand\",\n            \"Gateway\": \"number@etxt.co.nz\"\n          },\n          \"Teleflip\": {\n            \"Carrier\": \"Teleflip\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@teleflip.com\"\n          },\n          \"Telstra\": {\n            \"Carrier\": \"Telstra\",\n            \"Country\": \"Australia\",\n            \"Gateway\": \"mobile@sms.tim.telstra.com\"\n          },\n          \"Telus Mobility\": {\n            \"Carrier\": \"Telus Mobility\",\n            \"Country\": \"Canada & USA\",\n            \"Gateway\": \"number@mms.telusmobility.com\"\n          },\n          \"TellusTalk\": {\n            \"Carrier\": \"TellusTalk\",\n            \"Country\": \"Europe\",\n            \"Gateway\": \"number@esms.nu\"\n          },\n          \"Tigo (Formerly Ola)\": {\n            \"Carrier\": \"Tigo (Formerly Ola)\",\n            \"Country\": \"Colombia\",\n            \"Gateway\": \"number@sms.tigo.com.co\"\n          },\n          \"TIM\": {\n            \"Carrier\": \"TIM\",\n            \"Country\": \"Italy\",\n            \"Gateway\": \"number@timnet.com\"\n          },\n          \"Ting\": {\n            \"Carrier\": \"Ting\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@message.ting.com\"\n          },\n          \"TracFone (prepaid)\": {\n            \"Carrier\": \"TracFone (prepaid)\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@mmst5.tracfone.com\"\n          },\n          \"Txtlocal\": {\n            \"Carrier\": \"Txtlocal\",\n            \"Country\": \"UK\",\n            \"Gateway\": \"number@txtlocal.co.uk\"\n          },\n          \"Telcel\": {\n            \"Carrier\": \"Telcel\",\n            \"Country\": \"Mexico\",\n            \"Gateway\": \"number@itelcel.com\"\n          },\n          \"Unicel\": {\n            \"Carrier\": \"Unicel\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@utext.com\"\n          },\n          \"UniMóvil Corporation\": {\n            \"Carrier\": \"UniMóvil Corporation\",\n            \"Country\": \"UK\",\n            \"Gateway\": \"number@viawebsms.com\"\n          },\n          \"Union Wireless\": {\n            \"Carrier\": \"Union Wireless\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@union-tel.com\"\n          },\n          \"US Cellular\": {\n            \"Carrier\": \"US Cellular\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@mms.uscc.net\"\n          },\n          \"USA Mobility\": {\n            \"Carrier\": \"USA Mobility\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@usamobility.net\"\n          },\n          \"UTBox\": {\n            \"Carrier\": \"UTBox\",\n            \"Country\": \"Australia\",\n            \"Gateway\": \"number@sms.utbox.net\"\n          },\n          \"Uttar Pradesh West Escotel\": {\n            \"Carrier\": \"Uttar Pradesh West Escotel\",\n            \"Country\": \"India\",\n            \"Gateway\": \"number@escotelmobile.com\"\n          },\n          \"Viaero\": {\n            \"Carrier\": \"Viaero\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@mmsviaero.com\"\n          },\n          \"Vivo\": {\n            \"Carrier\": \"Vivo\",\n            \"Country\": \"Brazil\",\n            \"Gateway\": \"number@torpedoemail.com.br\"\n          },\n          \"Virgin Mobile\": {\n            \"Carrier\": \"Virgin Mobile\",\n            \"Country\": \"UK\",\n            \"Gateway\": \"number@vxtras.com\"\n          },\n          \"Vodacom\": {\n            \"Carrier\": \"Vodacom\",\n            \"Country\": \"South Africa\",\n            \"Gateway\": \"number@voda.co.za\"\n          },\n          \"Vodafone\": {\n            \"Carrier\": \"Vodafone\",\n            \"Country\": \"New Zealand\",\n            \"Gateway\": \"number@mtxt.co.nz\"\n          },\n          \"Voyager Mobile\": {\n            \"Carrier\": \"Voyager Mobile\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@text.voyagermobile.com\"\n          },\n          \"West Central Wireless\": {\n            \"Carrier\": \"West Central Wireless\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@sms.wcc.net\"\n          },\n          \"Wind Mobile\": {\n            \"Carrier\": \"Wind Mobile\",\n            \"Country\": \"Canada\",\n            \"Gateway\": \"number@txt.windmobile.ca\"\n          },\n          \"XIT Communications\": {\n            \"Carrier\": \"XIT Communications\",\n            \"Country\": \"USA\",\n            \"Gateway\": \"number@sms.xit.net\"\n          }\n        \n        }\n      };\n      const sortedData = {\n          \"carrier_list\": Object.values(data.carrier_list)\n          .sort((a, b) => a.Country.localeCompare(b.Country))\n          .reduce((acc, curr) => {\n          acc[curr.Carrier] = curr;\n          return acc;\n          }, {})\n      };\n      return sortedData.carrier_list;\n  })\n\n  });\n\n","import { computed, observer } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport { htmlSafe } from '@ember/template';\nimport Chart from 'chart.js/auto';\nimport {buildCheckoutBoard, buildInventoryUpdateBoard, buildBatchCalibrationSheet, buildPhaseIIConclusionNotificationBoardV2, buildCalibrationV2IntermissionNotificationBoard, getV2CalibrationSchematics,showHelpNotificationBoard, clearBatchSensorCalibrationData, initializeBatchSensorCalibrationData, buildBatchSensorBoard,updateRigActivity, buildRigActivityNotificationBoard, buildAndGetDataFormat1, buildSensorProfileNotificationBoard, roundToDecimalPlaces, formatAnchor3dp, buildCalibrationSheet, sendGETRequest, convertDBDateToTableDate, getSlopeAndOffset, buildPhaseIIConclusionNotificationBoard, updateCalibrationStatusModule, buildRigNotificationNotificationBoard, getSensorPhaseIISchematics, formatDateTimeFromInputField, hardResetModule,resetLog, sendPATCHRequest, getSensorPhaseISchematics, validateAllForms, outgoingMessageLibrary, updateStepperPressureControlPanel, appendPhaseILog, appendPhaseIILog, appendLiveLog, websocketReconnect, webSocketDisconnect, initializeConnection, resetDataCalibProfile, resetDataRigProfile,showPopup, resetProfile, sendPOSTRequest, calibrationStatusLibrary, connectionStatusLibrary, generalStatusLibrary, getDataSetColor, getCurrentDateTime, sendDELETERequest, getSensorCalibrationProgressColor } from '../../helpers/calibration-library';\nimport {assistiveToolTipLibrary } from '../../helpers/calibration-language-library';\n\n// Certificate-manager progress bar.\n//\n// Source of truth: BE's new `Progress` object on each calibration profile, e.g.\n//   \"Progress\": { \"phaseI\": true, \"phaseII\": true, \"isCertificateReady\": true, \"Conclusion\": \"3/3\" }\n// JSON:API may dasherize/camelize keys (`Progress` → `progress`, `Conclusion` → `conclusion`,\n// `phaseII` → `phaseIi`), so every read uses an alias list and falls back to the old flat\n// `phaseICompleted` / `phaseIICompleted` fields if `Progress` isn't on the payload.\n// Returns the value of the FIRST key in `keys` that exists on `obj` (defined and non-null),\n// or undefined if none match. The name says \"truthy\" but it's really \"first defined\" — `false`,\n// `0`, and `\"\"` are all returned as-is, so it's safe for booleans like `isInventory`.\n// Why it exists: BE / JSON:API key casing has drifted across versions (`isInventory` vs\n// `is-inventory`, `Progress` vs `progress`, `phaseIICompleted` vs `phase-ii-completed`), so every\n// read passes an alias list and takes whichever spelling is actually on the payload.\nfunction _firstTruthy(obj, keys){\n    if(!obj){ return undefined; }\n    for(const k of keys){\n        if(obj[k] !== undefined && obj[k] !== null){ return obj[k]; }\n    }\n    return undefined;\n}\nfunction getCalibrationProgressObject(profile){\n    return _firstTruthy(profile, ['Progress', 'progress']) || null;\n}\n// Progress colours come from the shared sensor-calibration palette (`getSensorCalibrationProgressColor`)\n// rather than being hard-coded here, so the bar in this column matches every other status pill /\n// progression bar across the calibration UI.\nfunction computeCalibrationProgress(profile){\n    const progressObj = getCalibrationProgressObject(profile);\n    let done;\n    let total;\n    let isCertificateReady;\n    if(progressObj){\n        // Conclusion is \"X/Y\" — parse both halves so total stays in sync if BE bumps it.\n        const conclusion = _firstTruthy(progressObj, ['Conclusion', 'conclusion']);\n        if(typeof conclusion === 'string' && /^\\d+\\/\\d+$/.test(conclusion)){\n            const [doneStr, totalStr] = conclusion.split('/');\n            done = parseInt(doneStr, 10);\n            total = parseInt(totalStr, 10);\n        }\n        isCertificateReady = !!_firstTruthy(progressObj, ['isCertificateReady', 'is-certificate-ready']);\n    }\n    if(done === undefined || total === undefined){\n        // Legacy fallback — derive from flat phase flags. BE camelizes consecutive capitals:\n        // `phaseIICompleted` ↔ `phaseIiCompleted`. We try every shape we've seen on the wire.\n        const phaseI = !!_firstTruthy(profile, ['phaseICompleted', 'phase-i-completed']);\n        const phaseII = !!_firstTruthy(profile, ['phaseIiCompleted', 'phaseIICompleted', 'phase-ii-completed']);\n        done = (phaseI ? 1 : 0) + (phaseII ? 1 : 0);\n        total = 2;\n        if(isCertificateReady === undefined){ isCertificateReady = phaseI && phaseII; }\n    }\n    const percent = total > 0 ? Math.round((done / total) * 100) : 0;\n    const color = getSensorCalibrationProgressColor(done, total);\n    const label = `${done}/${total}`;\n    return {\n        percent,\n        color,\n        label,\n        done,\n        total,\n        isCertificateReady: !!isCertificateReady,\n        // SafeString-wrapped so Ember doesn't strip the inline `style` attributes for XSS safety.\n        trackStyle: htmlSafe('background:#eee;border-radius:4px;height:14px;width:80px;overflow:hidden;position:relative;'),\n        fillStyle: htmlSafe(`background-color:${color};width:${percent}%;height:100%;border-radius:4px;`),\n    };\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    session: service(),\n    settingsConfig:{\n        softwareVersion:\"Sensor Calibration v2.3.41\",\n        internalVersion:\"v1.0\",\n        BATCH_SENSORS_COUNT:1,\n        UNFILLEDCONSTANT:-999,\n        CALIBRATIONSPECIFICPERMISSIONS:{},\n        APPROVEDINSTRUMENTTYPES:{},\n        APPROVEDRIGCATEGORIES:{stepper:\"Stepper\",pump: \"Pump\"},\n        chatLocked:{streamingTextBox:true, phaseITextbox:true, phaseIITextbox:true},\n        MAX_TIMEOUT_AWAITING_SAMPLING: 750,ASCENDING_CONST: \"ASC\",DESCENDING_CONST: \"DESC\",\n    },\n    isShowConfig:{\n        tabs:{home:true, calibSensorList: false},\n        isShowSettings:false,isShowCalibForm:false,\n        isShowRigForm:false,isShowPopupNotification:false,\n        isShowCommandConsole:false,isShowLiveGraphs:false,\n        isFormEditing:true\n    }, \n    paginationSearchConfig:{\n        searchObject:{ calibrationDateOrdering:\"DESC\"},\n        pagination:{page:1, pageSize:20, totalPages:1},\n        paginationPageSizes : [5,15,25,50,100,150,200,250,500,750,1000,1500,2000],\n        calibrationInstrumentProfilePaginationList : [],\n    },\n    // Selected progression filter for the certificate manager. Maps to the BE's `progression`\n    // query string param: 'full' | 'phase_i_only' | 'all'. Default `full` so the user only\n    // sees fully-calibrated, certificate-ready rows.\n    searchProgression: 'full',\n    // Is-Redone filter for the certificate manager. Sent as the BE's `is_redone` query param:\n    // 'true' | 'false' (string). Default 'false' — hide redone calibrations by default.\n    searchIsRedone: 'false',\n    userInputtedData:{\n        selectedRigProfile:null, \n        selectedCalibrationProfile:null,\n        selectedSensorData:{},\n        batchSensorData:{},\n        batchCheckboxData:{},\n        selectedAnchorData:null,\n        //For Inventory toggle: defaults to false (No). true = for inventory, false = not for inventory.\n        //When true, Job # / Sensor Name / Anchor textboxes are cleared + disabled on screen, and the\n        //FOR_INVENTORY sentinel (-175) is injected at POST build time so the BE reads those fields as\n        //\"deliberately emptied because this is for inventory\".\n        isForInventory:false,\n    },\n    frontendData:{\n        packValidationCompletedProfileList : [],\n        calibrationInstrumentProfileList : [],\n        rigNotificationData:{},\n    },\n    calibrationData:{phaseISampleLookupData:[],phaseILookupData:[\n        // ['53953','53176','52397','51607','49269','46928','44609','42317','40058','37845','35681','33576','31542'],\n        // ['53862','53084','52294','51532','49207','46872','44563','42282','40045','37859','35683','33600','31565'],\n        // ['53910','53140','52372','51600','49246','46916','44596','42339','40047','37858','35703','33604','31591'],\n        // ['54358','53553','52764','51962','49530','47166','44804','42477','40181','37936','35756','33637','31603'],\n        // ['54139','53354','52560','51765','49407','47023','44671','42362','40105','37819','35639','33539','31497'],\n        // ['54350','53547','52749','51947','49552','47183','44836','42513','40234','37960','35751','33610','31570']\n    ],phaseIISampleCalibrationDataValueData:[],phaseIICalibrationDataValueData:[\n        // ['0.00','8.29','16.63','24.96','49.96','74.97','99.97','124.98','149.98','174.98','199.97','224.98','249.97'],\n        // ['0.00','8.29','16.62','24.95','49.97','74.97','99.97','124.96','149.97','174.97','199.96','224.99','249.97'],\n        // ['0.00','8.29','16.62','24.95','49.97','74.97','99.98','124.99','149.98','174.98','199.97','225.01','249.98'],\n        // ['0.00','8.23','16.60','24.95','50.00','75.00','99.99','125.00','149.98','174.98','199.98','224.99','249.98'],\n        // ['0.00','8.29','16.64','24.97','49.99','74.98','100.00','124.98','149.98','174.97','199.98','225.00','249.97'],\n        // ['0.00','8.29','16.68','25.03','50.01','75.01','99.99','125.00','149.99','174.99','199.99','224.98','249.97']\n    ],phaseIISampleCurrentData:[],phaseIICurrentData:[\n        // '0.00','8.33','16.66','25.00','50.00','75.00','100.00','125.00','150.00','175.00','200.00','225.00','250.00'\n    ],phaseIISlopeData:[\n        // '-90.8662','-90.1461','-91.019','-90.1518','-90.0585','-91.3125'\n    ], phaseIIOffsetData:[\n        // '-3.2042','-3.5446','-3.7018','-3.6037','-3.2249','-2.9856'\n    ]},\n    calibrationIsSamplingData:{isPhaseISampling:false, isPhaseIICalibrationDataValueSampling:false, isPhaseIISampling:false},\n    dashboardStatusBarData: {\n        status:connectionStatusLibrary(602), \n        connection:connectionStatusLibrary(500), \n        calibration:calibrationStatusLibrary(551),\n        current:generalStatusLibrary(600),\n        target:generalStatusLibrary(600)\n    },\n    formRigData: {},\n    formCalibData: {},\n    emergencyController: new AbortController(),\n    showIrretrivableWarning:true,\n    //For Reset \n    progressInterval: null,\n    isTriggered: false,\n    async init() {\n        this._super(...arguments);\n        await this.getCalibrationSpecificPermission();\n        await this.getSensorProfileList();\n        await this.getCompletedPackProfileList();\n        //Auto hide  \"When you initiate execution....\" after 20 seconds\n        setTimeout(() => {\n            this.set(\"showIrretrivableWarning\", false)\n          }, 20000);\n        scheduleOnce('afterRender', this, () => {\n            //Preload Pagination\n            const pageSizeComp = document.getElementById(\"page_size\");\n            pageSizeComp.value = this.get('paginationSearchConfig.pagination.pageSize');\n            //First render status bar\n            this.set('dashboardStatusBarData',{\n                status:generalStatusLibrary(602), \n                connection:connectionStatusLibrary(500), \n                calibration:calibrationStatusLibrary(551),\n                current:generalStatusLibrary(600),\n                target:generalStatusLibrary(600)\n            })\n            //First render rigNotificationData object.\n            if(this.get(\"getRigList\")){\n                this.get(\"getRigList\").forEach((rigObj, index)=>{             \n                    this.set(\"frontendData.rigNotificationData\",{...this.get(\"frontendData.rigNotificationData\"), [rigObj['data']['rigID']]: {data:rigObj['data'], messages:[]} });\n                });\n            } \n            //First Render Store the Calibration Type List into APPROVEDINSTRUMENTTYPES\n            let approvedObject = {};\n            if(this.get(\"typeProfileList\")){\n                this.get(\"typeProfileList\").forEach((typeObject, index)=>{\n                    approvedObject[typeObject['typeValue']] = typeObject;\n                })\n                // console.log(\"approvedObject\")\n                // console.log(approvedObject);\n                this.set(\"settingsConfig.APPROVEDINSTRUMENTTYPES\", approvedObject);    \n            }                   \n        });\n    },\n    sendCommandFromConsoleTxtbox: async function (){\n        const cmdConsole = document.getElementById(\"cmdConsole\");\n        // console.log(`cmd:${cmdConsole.value.trim()}`)\n        switch(cmdConsole.value.trim()){\n            case \"help\":\n                showHelpNotificationBoard(this);\n                break;\n            case \"getRigActivity\":\n                buildRigActivityNotificationBoard(this);\n                break;\n            case \"getCoreVersion\":\n                const internalVersion = this.get(\"settingsConfig.internalVersion\");\n                showPopup([`Currently using data translator: ${internalVersion}`], \"notification\", 5);\n                break;\n            default:\n                const [cmd, value] = cmdConsole.value.trim().split(' ');\n                await outgoingMessageLibrary(this,cmd ? cmd : \"\", value ? value : \"\");\n                cmdConsole.value = null;\n                break;\n\n        }                    \n        cmdConsole.value = null;\n        \n    },\n    buildAnchorDiagram:function(type, channels){\n        //REMEMBER, \"channels\" passed in contains temeprature channel, thus when you do length and indexing, -1 it. \n        scheduleOnce('afterRender', this, () => {\n            //Build Sections\n            const masterDiagramSection = document.getElementById('masterAnchorDiagram');\n            const upperMasterSection = document.getElementById('upperMasterSection');\n            const anchorMasterSection = document.getElementById('anchorMasterSection');\n            const lowerMasterSection = document.getElementById('lowerMasterSection');\n            if(type === this.settingsConfig.APPROVEDINSTRUMENTTYPES.dCable.typeValue || type === this.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || type === this.settingsConfig.APPROVEDINSTRUMENTTYPES.dMPBX.typeValue){                            \n                //Show Upper Section\n                upperMasterSection.style.display=\"flex\";\n                //Show Anchor Section\n                anchorMasterSection.style.display=\"flex\";\n                //Hide Lower Section\n                lowerMasterSection.style.display=\"none\";\n                //Show Master Section\n                masterDiagramSection.style.display=\"block\"\n            }\n            else if (type === this.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n                //Show Upper Section\n                upperMasterSection.style.display=\"flex\";\n                //Show Anchor Section\n                anchorMasterSection.style.display=\"flex\";\n                //Show Lower Section\n                lowerMasterSection.style.display=\"flex\";\n                //Show Master Section\n                masterDiagramSection.style.display=\"block\"\n            }else{\n                //Hide Everything\n                upperMasterSection.style.display=\"none\";\n                anchorMasterSection.style.display=\"none\";\n                lowerMasterSection.style.display=\"none\";\n                masterDiagramSection.style.display=\"none\"\n            }\n            //Build Channels so that it will be using building textboxes\n            let visualAnchorPoints = [];\n            try{\n                if(type === this.settingsConfig.APPROVEDINSTRUMENTTYPES.dCable.typeValue || type === this.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || type === this.settingsConfig.APPROVEDINSTRUMENTTYPES.dMPBX.typeValue){                                                                                               \n                    for(let i=1; i <= channels - 1; i ++){\n                        visualAnchorPoints.push(i);\n                    }\n                }\n                else if (type === this.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n                    for(let i=1; i <= (channels - 1)/2; i ++){\n                        visualAnchorPoints.push(i);\n                    }\n                }else{\n                }\n            }catch(e){\n                console.log(\"Error in 'Build Channels so that it will be using building textboxes' in buildAnchorDiagram: \" + e)\n            }\n\n            //Build Textboxes for Sections\n            const upperTBSection = document.getElementById('anchorUpperTextBoxSection');\n            const anchorPointsSection = document.getElementById('anchorPointsSection');\n            const lowerTBSection = document.getElementById('anchorLowerTextBoxSection');\n\n            if(upperTBSection){\n\n                upperTBSection.innerHTML = '';\n\n                const firstBufferSection = document.createElement('div');\n                firstBufferSection.style.width = \"65px\";\n                firstBufferSection.style.height = \"15px\";\n\n                upperTBSection.appendChild(firstBufferSection);\n\n                visualAnchorPoints.forEach((channel)=>{\n                    const tdElement = document.createElement('td');\n                    tdElement.classList.add('input');\n                    tdElement.style.width = \"50px\";\n                    tdElement.style.height = '15px';\n                    const inputElement = document.createElement('input');\n                    inputElement.classList.add('form-control'); \n                    inputElement.setAttribute('type', 'number'); \n                    inputElement.id=`upperAnchorTB${channel}`;\n                    inputElement.style.width = \"50px\";\n                    inputElement.style.height = '15px';\n                    inputElement.style.fontSize = \"13px\";\n                    inputElement.style.padding = \"0px\";\n                    inputElement.value=\"\";\n                    inputElement.addEventListener('change', (event) => {\n                        const id = event.target.id;\n                        const value = event.target.value;\n                        // Enforce fixed 3 decimals (\"X.XXX\") at input and reflect it back into the box.\n                        const formatted = formatAnchor3dp(value);\n                        event.target.value = formatted;\n                        this.set(\"userInputtedData.selectedAnchorData\",{...this.get(\"userInputtedData.selectedAnchorData\"), [id]: formatted});\n                    });\n                    // this.set(\"userInputtedData.selectedAnchorData\",{...this.get(\"userInputtedData.selectedAnchorData\"), [`upperAnchorTB${channel}`]: \"\"});\n                    // inputElement.value = `${channel}`;\n                    tdElement.appendChild(inputElement);\n                    upperTBSection.appendChild(tdElement);\n    \n                });\n            }\n            if (anchorPointsSection) {\n              // Clear any existing children\n                anchorPointsSection.innerHTML = '';\n\n                const headDiv = document.createElement('div');\n                headDiv.style.background = \"#4A6A9C\";\n                headDiv.style.width = \"65px\";\n                headDiv.style.background = \"#4A6A9C\";\n                headDiv.style.height = \"15px\";\n                headDiv.style.borderRadius = \"10px 0 0 10px\";\n                anchorPointsSection.appendChild(headDiv);\n\n                visualAnchorPoints.forEach((channel) => {\n                    // Create anchor space\n                    const anchorSpace = document.createElement('div');\n                    anchorSpace.id=`anchorPoint${channel}`;\n                    anchorSpace.style.width = '50px';\n                    anchorSpace.style.height = '15px';\n                    anchorSpace.style.display = 'flex';\n                    anchorSpace.style.justifyContent = 'center';\n                    anchorSpace.style.alignItems = 'center';\n                    anchorSpace.style.flexDirection = 'row';\n                    // Create anchor point\n                    const anchorPoint = document.createElement('div');\n                    anchorPoint.style.width = '8px';\n                    anchorPoint.style.height = '8px';\n                    anchorPoint.style.background = '#4A6A9C';\n                    anchorPoint.style.borderStyle = 'solid';\n                    anchorPoint.style.borderRadius = '999px';\n                    anchorPoint.style.borderWidth = '1px';\n\n\n                    anchorSpace.appendChild(anchorPoint);\n                    anchorPointsSection.appendChild(anchorSpace);\n                });\n            }\n            if(lowerTBSection){\n\n                lowerTBSection.innerHTML = '';\n                const firstBufferSection = document.createElement('div');\n\n                firstBufferSection.style.width = \"65px\";\n                firstBufferSection.style.height = \"15px\";\n                lowerTBSection.appendChild(firstBufferSection);\n\n                visualAnchorPoints.forEach((channel)=>{\n                    const tdElement = document.createElement('td');\n                    tdElement.classList.add('input');\n                    tdElement.style.width = \"50px\";\n                    tdElement.style.height = '15px';\n                    const inputElement = document.createElement('input');\n                    inputElement.classList.add('form-control'); \n                    inputElement.setAttribute('type', 'number');\n                    inputElement.id=`lowerAnchorTB${channel}`;\n                    inputElement.style.width = \"50px\";\n                    inputElement.style.height = '15px';\n                    inputElement.style.fontSize = \"13px\";\n                    inputElement.style.padding = \"0px\";\n                    inputElement.addEventListener('change', (event) => {\n                        const id = event.target.id;\n                        const value = event.target.value;\n                        // Enforce fixed 3 decimals (\"X.XXX\") at input and reflect it back into the box.\n                        const formatted = formatAnchor3dp(value);\n                        event.target.value = formatted;\n                        this.set(\"userInputtedData.selectedAnchorData\",{...this.get(\"userInputtedData.selectedAnchorData\"), [id]: formatted});\n                    });\n                    // this.set(\"userInputtedData.selectedAnchorData\",{...this.get(\"userInputtedData.selectedAnchorData\"), [`lowerAnchorTB${channel}`]: \"\"});\n\n                    // inputElement.value = `${channel}`;\n                    tdElement.appendChild(inputElement);\n                    lowerTBSection.appendChild(tdElement);\n    \n                });\n            }\n\n            //Load Initial values for textboxes, sensor type dependent\n            //Uncomment section below if you want to have ID index as pre-loaded upperAnchorTBs\n            try{\n                if(type === this.settingsConfig.APPROVEDINSTRUMENTTYPES.dCable.typeValue || type === this.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || type === this.settingsConfig.APPROVEDINSTRUMENTTYPES.dMPBX.typeValue){\n                    visualAnchorPoints.forEach(anchorPoint=>{\n                        const anchorUpperTBComponent = document.getElementById(`upperAnchorTB${anchorPoint}`);\n                        if(anchorUpperTBComponent){\n                            // anchorUpperTBComponent.value=`${anchorPoint}`;\n                            anchorUpperTBComponent.setAttribute('placeholder', `${anchorPoint}`);\n                            this.set(\"userInputtedData.selectedAnchorData\",{...this.get(\"userInputtedData.selectedAnchorData\"), [`upperAnchorTB${anchorPoint}`]: \"\"});\n\n                        }\n                    });\n                }\n                else if (type === this.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n                    let channelArray = []\n                    for(let i = 1; i <= (channels - 1); i ++){\n                        channelArray.push(i);\n                    }\n\n                    const visualAnchorMidPointPosition = (channels - 1) / 2;  \n                    const upperHalfValues = channelArray.slice(0, visualAnchorMidPointPosition); // Extract the first half\n                    const lowerHalfvalues = channelArray.slice(visualAnchorMidPointPosition); // Extract the second half\n                    visualAnchorPoints.forEach(anchorPointPosition=>{\n                        const anchorUpperTBComponent = document.getElementById(`upperAnchorTB${anchorPointPosition}`);\n                        const anchorLowerTBComponent = document.getElementById(`lowerAnchorTB${anchorPointPosition}`);\n                        if(anchorUpperTBComponent != null && anchorLowerTBComponent != null){\n                            // anchorUpperTBComponent.value=`${upperHalfValues[anchorPointPosition -1]}`;\n                            // anchorLowerTBComponent.value=`${lowerHalfvalues[anchorPointPosition -1]}`;\n                            anchorUpperTBComponent.setAttribute('placeholder', `${upperHalfValues[anchorPointPosition -1]}`);\n                            anchorLowerTBComponent.setAttribute('placeholder', `${lowerHalfvalues[anchorPointPosition -1]}`);\n                            this.set(\"userInputtedData.selectedAnchorData\",{...this.get(\"userInputtedData.selectedAnchorData\"), [`upperAnchorTB${anchorPointPosition}`]: \"\"});\n                            this.set(\"userInputtedData.selectedAnchorData\",{...this.get(\"userInputtedData.selectedAnchorData\"), [`lowerAnchorTB${anchorPointPosition}`]: \"\"});\n\n                        }\n                    });\n                }else{\n                }\n\n            }catch(e){\n                console.log(\"Error in 'Load Initial values for textboxes, sensor type dependent' in buildAnchorDiagram: \" + e)\n            }\n\n            //If \"For Inventory\" is already selected, the freshly-rebuilt anchor textboxes must\n            //immediately reflect that state (cleared + disabled). Profile changes rebuild these from\n            //scratch, so re-apply here rather than relying on the toggle action alone.\n            if(this.get(\"userInputtedData.isForInventory\") === true){\n                this.applyInventoryStateToAnchorTextboxes();\n            }\n\n        });\n        console.log(this.get(\"userInputtedData.selectedAnchorData\"));\n    },\n    //For Inventory only changes what the operator SEES: Job # / Sensor Name / Anchor textboxes are\n    //cleared and disabled. The operator never sees the -175 sentinel — that is injected purely at POST\n    //build time (buildAndGetDataFormat1). Toggling back to \"No\" just re-enables the empty inputs.\n    applyInventoryState:function(){\n        const isInv = this.get(\"userInputtedData.isForInventory\") === true;\n        //Job #\n        const jobIDComp = document.getElementById(\"jobID\");\n        if(jobIDComp){\n            jobIDComp.value = \"\";\n            jobIDComp.disabled = isInv;\n        }\n        delete this.get(\"userInputtedData.selectedSensorData\")[\"jobID\"];\n        //Sensor Name\n        const sensorNameComp = document.getElementById(\"sensorName\");\n        if(sensorNameComp){\n            sensorNameComp.value = \"\";\n            sensorNameComp.disabled = isInv;\n        }\n        delete this.get(\"userInputtedData.selectedSensorData\")[\"sensorName\"];\n        this.applyInventoryStateToAnchorTextboxes();\n    },\n    //Clear every anchor diagram textbox currently in the DOM and enable/disable per the For Inventory\n    //state, keeping userInputtedData.selectedAnchorData in sync as empty strings either way. The -175\n    //sentinel is NOT written here; buildAndGetDataFormat1 substitutes it at POST time.\n    applyInventoryStateToAnchorTextboxes:function(){\n        const isInv = this.get(\"userInputtedData.isForInventory\") === true;\n        const anchorData = this.get(\"userInputtedData.selectedAnchorData\");\n        if(anchorData == null){\n            return;\n        }\n        let newAnchorData = {...anchorData};\n        Object.keys(newAnchorData).forEach((key)=>{\n            const anchorTBComp = document.getElementById(key);\n            if(anchorTBComp){\n                anchorTBComp.value = \"\";\n                anchorTBComp.disabled = isInv;\n            }\n            newAnchorData[key] = \"\";\n        });\n        this.set(\"userInputtedData.selectedAnchorData\", newAnchorData);\n    },\n    buildValidationPopupContent:function(failedObjects){\n        this.set(\"isShowConfig.isShowPopupNotification\", true);\n        //Prepare for Parent Component\n        scheduleOnce('afterRender', this, () => {\n            const popupContentSectionComponent = document.getElementById('notificationPopupContentBody');\n            if(popupContentSectionComponent){\n                popupContentSectionComponent.innerHTML = '';\n        \n                //Subtitle Section\n                const subtitleSection = document.createElement('div');\n                subtitleSection.style.fontSize = \"medium\";\n                subtitleSection.textContent = \"Execution Checklist:\"\n                popupContentSectionComponent.appendChild(subtitleSection);\n\n                //Fort loop add each fail section\n                for (const key in failedObjects) {\n                    if (Object.hasOwnProperty.call(failedObjects, key)) {\n                        const value = failedObjects[key];\n                        if(value.split(\"-\").length >= 3){\n                            //Actual Visual section, row by row\n                            const rigCheckerSection = document.createElement('div');\n                            rigCheckerSection.style.width = \"100%\";\n                            rigCheckerSection.style.display = \"flex\";\n                            rigCheckerSection.style.flexDirection = \"row\";\n                            rigCheckerSection.style.alignItems = \"center\";\n                            rigCheckerSection.style.paddingLeft = \"15px\";\n                            const rigLabelCheckerSection = document.createElement('div');\n                            rigLabelCheckerSection.textContent = `- ${value.split(\"-\")[0]}${value.split(\"-\")[1] == \"Label\" ? \"\" : \":\"}`;\n                            rigLabelCheckerSection.style.paddingLeft = value.split(\"-\")[3];\n                            rigLabelCheckerSection.style.paddingRight = \"10px\";\n                            rigLabelCheckerSection.style.fontSize = \"small\";\n                            // Label-only rows carry no separate value element, so apply the row color to the\n                            // label itself (e.g. required-permission lines render the perm name in red).\n                            if(value.split(\"-\")[1] == \"Label\"){\n                                rigLabelCheckerSection.style.color = `${value.split(\"-\")[2]}`;\n                            }\n                            rigCheckerSection.appendChild(rigLabelCheckerSection);\n                            const rigValueCheckerSection = document.createElement('div');\n                            rigValueCheckerSection.textContent = ` ${value.split(\"-\")[1] == \"Label\" ? \"\" : value.split(\"-\")[1]}`;\n                            rigValueCheckerSection.style.fontSize = \"small\";\n                            rigValueCheckerSection.style.color = `${value.split(\"-\")[2]}`;\n                            rigCheckerSection.appendChild(rigValueCheckerSection);\n                            popupContentSectionComponent.appendChild(rigCheckerSection);\n                        }\n                    }\n                }\n            }\n        });\n        \n    },\n    buildAnchorLiveViews:function(channels){\n        //Build Sections\n        const anchorSections = document.getElementById('anchorLiveViewSections');\n        if(anchorSections){\n            anchorSections.innerHTML = '';\n            for(let i=0;i<channels; i ++) {\n                const textDiv = document.createElement('div');\n                textDiv.style.fontSize = \"small\";\n                const borderSection = document.createElement('div');\n                borderSection.style.border = \"solid\";\n                borderSection.style.borderWidth = \"1px\";\n                borderSection.style.borderRadius = \"50px\";\n                borderSection.style.borderColor = \"lightgray\";\n                if(i == 0){\n                    textDiv.id = `T${i}`;\n                    textDiv.textContent = \"T:\";\n                }else{\n                    textDiv.id = `CH${i}`;\n                    textDiv.textContent = `CH${i+1}:`;\n                }\n                anchorSections.appendChild(textDiv);\n                anchorSections.appendChild(borderSection);\n            };\n        }\n    },\n    getTabKeys: computed(function(){\n        let data = ['home', 'calibSensorList'];\n        return data;\n    }),\n    getApprovedInstrumentTypeList: computed(function(){\n        let data = [];\n        for (const key in this.settingsConfig.APPROVEDINSTRUMENTTYPES) {\n          if (this.settingsConfig.APPROVEDINSTRUMENTTYPES.hasOwnProperty(key)) {\n            // console.log(key);\n            data.push({\n                id:key,\n                title:this.settingsConfig.APPROVEDINSTRUMENTTYPES[key].typeValue\n            });\n          }\n        }\n        return data;\n    }),\n    getApprovedRigCategoryList: computed(function(){\n        let data = [];\n        for (const key in this.settingsConfig.APPROVEDRIGCATEGORIES) {\n          if (this.settingsConfig.APPROVEDRIGCATEGORIES.hasOwnProperty(key)) {\n            // console.log(key);\n            data.push({\n                id:key,\n                title:this.settingsConfig.APPROVEDRIGCATEGORIES[key]\n            });\n          }\n        }\n        return data;\n    }),\n    getPaginationPageSizesList: computed(function() {\n        let pageSizeList = this.get(\"paginationSearchConfig.paginationPageSizes\");\n        let data = []\n        pageSizeList.forEach((pageSize, i) => {\n            data.push({\n                id:pageSize,\n                title:`${pageSize}`\n            })\n        });\n        return data\n    }),\n    getCalibrationSpecificPermission: async function() {\n        let responseData = await sendGETRequest('calib_permissions/');\n\n        if (responseData) {\n            const permissionObj = responseData['data'];\n            this.set(\"settingsConfig.CALIBRATIONSPECIFICPERMISSIONS\", permissionObj);\n        } else {\n            console.error('No data returned for GET calib_permissions');\n        }\n        \n        // console.log(this.get(\"settingsConfig.CALIBRATIONSPECIFICPERMISSIONS\"));\n    },\n    getSensorProfileList: async function() {\n        let data = []\n        let payload = {\n            page: this.paginationSearchConfig.pagination.page,\n            page_size:this.paginationSearchConfig.pagination.pageSize,\n            progression: this.get('searchProgression') || 'full',\n            is_redone: this.get('searchIsRedone') || 'false',\n        };\n        if ('calibrationIDOrdering' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.calibrationIDOrdering') != null){\n            payload['calibrationID'] = this.get('paginationSearchConfig.searchObject')['calibrationIDOrdering'];\n        }\n        if ('jobIDOrdering' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.jobIDOrdering') != null){\n            payload['jobID'] = this.get('paginationSearchConfig.searchObject')['jobIDOrdering'];\n        }\n        if ('calibrationDateOrdering' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.calibrationDateOrdering') != null){\n            payload['calibrationDate'] = this.get('paginationSearchConfig.searchObject')['calibrationDateOrdering'];\n        }\n        if ('sensorIDOrdering' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.sensorIDOrdering') != null){\n            payload['sensorID'] = this.get('paginationSearchConfig.searchObject')['sensorIDOrdering'];\n        }\n        if ('searchCalibrationID' in this.get('paginationSearchConfig.searchObject')){\n            payload['searchCalibrationID'] = this.get('paginationSearchConfig.searchObject')['searchCalibrationID'];\n        }\n        if ('searchSensorID' in this.get('paginationSearchConfig.searchObject')){\n            payload['searchSensorID'] = this.get('paginationSearchConfig.searchObject')['searchSensorID'];\n        }\n        if ('searchJobID' in this.get('paginationSearchConfig.searchObject')){\n            payload['searchJobID'] = this.get('paginationSearchConfig.searchObject')['searchJobID'];\n        }\n        let responseData = await sendGETRequest('calibration-instrument-profiles/', payload);\n\n        if (responseData) {\n            // Update the results and cache them\n            let data = [];\n            const rawSensorProfileList = responseData['data'];\n            rawSensorProfileList.forEach((element, index)=>{\n            element=element['attributes']\n            element['calibration-date'] = convertDBDateToTableDate(element['calibrationDate']);\n            element['progress'] = computeCalibrationProgress(element);\n            //Normalize the new inventory fields onto camelCase the template binds to. _firstTruthy\n            //returns the first DEFINED alias (so `false` survives) — covers JSON:API key casing drift.\n            element['isInventory'] = _firstTruthy(element, ['isInventory', 'is-inventory']) === true;\n            element['sensorName'] = _firstTruthy(element, ['sensorName', 'sensor-name']) || '';\n            data.push(element);\n            })\n            this.set(\"frontendData.calibrationInstrumentProfileList\", data);\n            const metaPaginationData = responseData['meta'];\n            this.set(\"paginationSearchConfig.pagination.totalPages\", metaPaginationData['pagination']['total_pages']);\n            const totalRowsComp = document.getElementById(\"totalReadings\");\n            if (totalRowsComp) {\n                totalRowsComp.textContent = `Total: ${responseData['data'].length}`;\n            }\n\n            this.updatePaginationList();\n        } else {\n            console.error('No data returned from search');\n        }\n        \n        return data\n    },\n    getCompletedPackProfileList: async function() {\n        let data = [];\n        let responseData = await sendGETRequest('validation-packs-profiles/?phase=both&isUsed=false');\n        if (responseData) {\n            // Update the results and cache them\n            const rawCompletedPackProfileList = responseData['data'];\n            rawCompletedPackProfileList.forEach((packProfileObject, index)=>{\n                data.push({\n                    id: index + 1,\n                    title:packProfileObject['attributes']['packId'],\n                    data:packProfileObject['attributes']\n                });\n            })\n        } else {\n            console.error('No data returned from search');\n        }\n        \n        // console.log('rawCompletedPackProfileList data')\n        // console.log(data)\n\n        this.set(\"frontendData.packValidationCompletedProfileList\", data);\n        return data\n    },\n    updatePaginationList: function () {\n        let range = [];\n        const maxPageToShow = 3; // Adjust this based on how many pages you want to show in the middle\n        const paginationObj = this.get('paginationSearchConfig.pagination');\n    \n        // Always include the first page\n        range.push(1);\n    \n        if (paginationObj['totalPages'] <= maxPageToShow + 2) {\n            // If total pages are small enough, show all pages\n            for (let i = 2; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else if (paginationObj['page'] <= maxPageToShow) {\n            // Current page is within the first few pages\n            for (let i = 2; i <= maxPageToShow + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        } else if (paginationObj['page'] >= paginationObj['totalPages'] - maxPageToShow + 1) {\n            // Current page is within the last few pages\n            range.push('...');\n            for (let i = paginationObj['totalPages'] - maxPageToShow; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else {\n            // Current page is in the middle\n            range.push('...');\n            for (let i = paginationObj['page'] - 1; i <= paginationObj['page'] + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        }\n    \n        this.set('paginationSearchConfig.calibrationInstrumentProfilePaginationList', range);\n    },\n    clearBatchCBData:function(){\n        const batchMasterElement = document.getElementById(`HEADER_CB`);\n        batchMasterElement.checked=false;\n        const currBatchCheckboxData = this.get(\"userInputtedData.batchCheckboxData\");\n        if (Object.keys(currBatchCheckboxData).length === 0 && currBatchCheckboxData.constructor === Object) {\n        } \n        else {\n            schedule('afterRender', this, () => {\n                this.get(\"frontendData.calibrationInstrumentProfileList\").forEach((data, index)=>{\n                    const calibrationID = data['calibrationId']\n                    const batchCBElement = document.getElementById(`BATCH_CB_${calibrationID}`);\n                    batchCBElement.checked=false;\n                    delete currBatchCheckboxData[calibrationID];\n                    \n                });\n\n            });\n        }\n\n    },\n    getRigList: computed('rigProfileList',function() {\n        let rigList = this.get(\"rigProfileList\");\n        // console.log(rigList);\n        let data = []\n        if(rigList){\n            rigList.forEach((element, i) => {\n                data.push({\n                    id:i + 1,\n                    dbID:element.id,\n                    title:`${element.rigName}-${element.rigIP}`,\n                    data:element\n                })\n            });\n        }\n        return data\n    }),\n    getTypeList: computed('calibrationTypesList',function() {\n        let sensorTypeList = this.get(\"calibrationTypesList\");\n        let data = []\n        if(sensorTypeList){\n            sensorTypeList.forEach((element, i) => {\n                data.push({\n                    id:i,\n                    title:element.type,\n                    data: element\n                })\n            });\n        }\n        return data\n    }),\n    getCalibrationProfileList: computed('calibrationprofileList',function() {\n        let calibProfList = this.get(\"calibrationprofileList\");\n        // console.log(calibProfList);\n        let data = []\n        if(calibProfList){\n            calibProfList.forEach((element, index) => {\n                let title = \"\"\n                title += `${element.type} `;\n                title += ` / ${element.channels} `;\n                title += ` / ${element.minLimit} to ${element.maxLimit} `;\n    \n                data.push({\n                    id: index + 1,\n                    dbID:element.id,\n                    data:element,\n                    type:element.type,\n                    channels:element.channels,\n                    title:title\n                })\n            });\n\n        }\n        return data\n    }),\n    calibrationConfigButton:observer(\"isShowConfig.isShowCalibForm\",function(){\n        console.log(\"user clicked clib button \");\n        if(this.get(\"isShowConfig.isShowCalibForm\")){\n            this.set(\"formCalibData\", {});\n        }\n    }),\n    rigConfigButton:observer(\"isShowConfig.isShowRigForm\",function(){\n        console.log(\"user clicked rig button \");\n        if(this.get(\"isShowConfig.isShowRigForm\")){\n            this.set(\"formRigData\", {});\n        }\n    }),\n    calibProfileCalibFormLoad:observer(\"selectedCalibDPCalibForm\",function(){\n        let selectedCalibFormCalibData = null;\n        console.log(this.get(\"selectedCalibDPCalibForm\"));\n        //Components for Calibration Form\n        const calibTypeComp = document.getElementById('calibType');\n        const channelsComp = document.getElementById('channels');\n        const minLimitComp = document.getElementById('minLimit');\n        const maxLimitComp = document.getElementById('maxLimit');\n        const checkpointSampleSizeComp = document.getElementById('checkpointSampleSize');\n        const checkpointSpeedComp = document.getElementById('checkpointSpeed');\n        const typeIDComp = document.getElementById('typeID');\n        const checkpointUnit = document.getElementById('unit');\n        const checkpointCurrentTargetBufferComp = document.getElementById('checkpointCurrentTargetBuffer');\n        const checkpointDelayComp = document.getElementById('checkpointDelay');\n        const checkpointPositionsComp = document.getElementById('checkpointPositions');\n        if(this.get(\"selectedCalibDPCalibForm\") === '0'){\n            console.log(this.get(\"selectedCalibDPCalibForm\"));\n\n            //Handle pre-loading selected calib profile data into calib form TBs\n            calibTypeComp.value                     ='';\n            channelsComp.value                      ='';\n            minLimitComp.value                      ='';\n            maxLimitComp.value                      ='';\n            checkpointSampleSizeComp.value          ='';\n            checkpointSpeedComp.value               ='';\n            typeIDComp.value                        ='';\n            checkpointUnit.value                    ='';\n            checkpointCurrentTargetBufferComp.value ='';\n            checkpointDelayComp.value               ='';\n            checkpointPositionsComp.value           ='';\n            calibCreationEmployeeComp.value         ='';\n            this.set(\"formCalibData\",{})\n        }else{\n\n            const calibData = this.get(\"getCalibrationProfileList\");\n            if(calibData){\n                calibData.forEach((calibProf, i)=>{\n                    if((i+1).toString() === this.get(\"selectedCalibDPCalibForm\")){\n                        selectedCalibFormCalibData = calibProf['data'];\n                        console.log(\"calib form, selected:\");\n                        // console.log(calibProf);\n                        console.log(calibProf['data']);\n\n                        //Handle pre-loading selected calib profile data into calib form TBs\n                        calibTypeComp.value=calibProf['type'];\n                        checkpointUnit.value=calibProf['data']['unit'];\n                        channelsComp.value=calibProf['data']['channels'];\n                        minLimitComp.value=calibProf['data']['minLimit'];\n                        maxLimitComp.value=calibProf['data']['maxLimit'];\n                        typeIDComp.value=calibProf['data']['typeID'];\n                        checkpointSampleSizeComp.value=calibProf['data']['checkpointSampleSize'];\n                        checkpointSpeedComp.value=calibProf['data']['checkpointSpeed'];\n                        checkpointCurrentTargetBufferComp.value=calibProf['data']['checkpointCurrentTargetBuffer'];\n                        checkpointDelayComp.value=calibProf['data']['checkpointDelay'];\n                        checkpointPositionsComp.value=calibProf['data']['checkpointPositions'];\n                        this.set(\"formCalibData\",{ \n                            id:calibProf.dbID,\n                            calibType:calibProf['type'],\n                            unit:calibProf['data']['unit'],\n                            channels:calibProf['data']['channels'],\n                            minLimit:calibProf['data']['minLimit'],\n                            maxLimit:calibProf['data']['maxLimit'],\n                            typeID:calibProf['data']['typeID'],\n                            checkpointSampleSize:calibProf['data']['checkpointSampleSize'],\n                            checkpointSpeed:calibProf['data']['checkpointSpeed'],\n                            checkpointCurrentTargetBuffer:calibProf['data']['checkpointCurrentTargetBuffer'],\n                            checkpointDelay:calibProf['data']['checkpointDelay'],\n                            checkpointPositions:calibProf['data']['checkpointPositions'],\n                            calibCreationEmployee:calibProf['data']['creationEmployee'],\n                        })\n                    }\n                });\n            }\n            if(selectedCalibFormCalibData == null){\n                showPopup([\"Selected calibration profile cannot be found\"], 'error');\n            }\n        }\n    }),\n    rigProfileRigFormLoad:observer(\"selectedRigDPRigForm\",function(){\n        let selectedRigFormRigData = null;\n        console.log(this.get(\"selectedRigDPRigForm\"));\n        //Components for Calibration Form\n        const rigIPComp = document.getElementById('rigIP');\n        const rigNameComp = document.getElementById('rigName');\n        const rigCategoryComp = document.getElementById('rigCategory');\n        const rigReferenceIDComp = document.getElementById('rigReferenceID');\n        const rigReferenceCalibrationValueComp = document.getElementById('rigReferenceCalibrationValue');\n        const rigReferenceCalibrationDateComp = document.getElementById('rigReferenceCalibrationDate');\n        if(this.get(\"selectedRigDPRigForm\") === '0'){\n            console.log(this.get(\"selectedRigDPRigForm\"));\n            //Handle pre-loading selected calib profile data into calib form TBs\n            rigIPComp.value       ='';\n            rigNameComp.value     ='';\n            rigCategoryComp.value ='';\n            rigReferenceIDComp.value ='';\n            rigReferenceCalibrationValueComp.value ='';\n            rigReferenceCalibrationDateComp.value ='';\n            this.set(\"formRigData\",{})\n        }else{\n\n            const rigData = this.get(\"getRigList\");\n            if(rigData){\n                rigData.forEach((rigProf, i)=>{\n                    if((i+1).toString() === this.get(\"selectedRigDPRigForm\")){\n                        selectedRigFormRigData = rigProf['data'];\n                        console.log(\"rig form, selected:\");\n                        console.log(rigProf);\n                        console.log(rigProf['data']);\n                        const [date, time] = rigProf['data']['rigReferenceCalibrationDate'].split(\" \");\n                        //Handle pre-loading selected calib profile data into calib form TBs\n                        rigIPComp.value=rigProf['data']['rigIP'];\n                        rigNameComp.value=rigProf['data']['rigName'];\n                        rigCategoryComp.value=rigProf['data']['rigCategory'].toLowerCase();\n                        rigReferenceIDComp.value=rigProf['data']['rigReferenceID'];\n                        rigReferenceCalibrationValueComp.value=rigProf['data']['rigReferenceCalibrationValue'];\n                        rigReferenceCalibrationDateComp.value=`${date}T${time}`;\n                        this.set(\"formRigData\",{ \n                            id:rigProf.dbID,\n                            rigIP:rigProf['data']['rigIP'],\n                            rigName:rigProf['data']['rigName'],\n                            rigCategory:rigProf['data']['rigCategory'],\n                            creationEmployee:rigProf['data']['creationEmployee'],\n                            rigReferenceID:rigProf['data']['rigReferenceID'],\n                            rigReferenceCalibrationValue:rigProf['data']['rigReferenceCalibrationValue'],\n                            rigReferenceCalibrationDate:rigProf['data']['rigReferenceCalibrationDate'],\n                        })\n                    }\n                });\n            }\n            if(selectedRigFormRigData == null){\n                showPopup([\"Selected rig profile cannot be found\"], 'error');\n            }\n        }\n    }),\n    calibProfileLoad:observer(\"selectedCalibDP\",function(){\n        // console.log(this.get(\"settingsConfig.APPROVEDINSTRUMENTTYPES\"))\n        this.set(\"userInputtedData.batchSensorData\", []);\n        if(this.get(\"selectedCalibDP\") === \"0\"){\n            resetDataCalibProfile(this);\n        }else{\n            const calibData = this.get(\"getCalibrationProfileList\");\n            if(calibData){\n                calibData.forEach((calibProf, i)=>{\n                    if((i+1).toString() === this.get(\"selectedCalibDP\")){\n                        if(calibProf['channels'] == null){\n                            calibProf['channels'] = calibProf['data']['channels'];\n                        }\n                        this.set(\"userInputtedData.selectedCalibrationProfile\", calibProf);\n                        this.set(\"userInputtedData.selectedAnchorData\", null);\n                    }\n                });\n            }\n            const selectedProfile = this.get(\"userInputtedData.selectedCalibrationProfile\");\n            console.log(selectedProfile)\n            //Build Anchor Diagram\n            this.buildAnchorDiagram(selectedProfile.type, selectedProfile.channels);\n            //Pre-Fill Sensor ID TB\n            const currentDate = new Date();\n            const month = (currentDate.getMonth() + 1).toString().padStart(2, '0');\n            const year = currentDate.getFullYear().toString().slice(-2); \n            const message = `${year}${month}${selectedProfile.channels}${selectedProfile.data.typeID}`;\n            if(this.get(\"settingsConfig.internalVersion\") === \"v2.0\"){\n                let currArr = {};\n                for(let i = 1; i <= this.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                    currArr[i] = {\n                        id:i,\n                        sensorData:{\n                            sensorID:message,\n                            sensorName:null,\n                        },\n                        calibrationData:{\n                            sampleDataDump:[],\n                            sampleCurrentDataDump:[],\n                            lookupData:[\n                                // ['53953','53176','52397','51607','49269','46928','44609','42317','40058','37845','35681','33576','31542'],\n                                // ['53862','53084','52294','51532','49207','46872','44563','42282','40045','37859','35683','33600','31565'],\n                                // ['53910','53140','52372','51600','49246','46916','44596','42339','40047','37858','35703','33604','31591'],\n                                // ['54358','53553','52764','51962','49530','47166','44804','42477','40181','37936','35756','33637','31603'],\n                                // ['54139','53354','52560','51765','49407','47023','44671','42362','40105','37819','35639','33539','31497'],\n                                // ['54350','53547','52749','51947','49552','47183','44836','42513','40234','37960','35751','33610','31570']\n                            ],\n                            calibrationDataData:[\n                                // ['0.00','8.29','16.63','24.96','49.96','74.97','99.97','124.98','149.98','174.98','199.97','224.98','249.97'],\n                                // ['0.00','8.29','16.62','24.95','49.97','74.97','99.97','124.96','149.97','174.97','199.96','224.99','249.97'],\n                                // ['0.00','8.29','16.62','24.95','49.97','74.97','99.98','124.99','149.98','174.98','199.97','225.01','249.98'],\n                                // ['0.00','8.23','16.60','24.95','50.00','75.00','99.99','125.00','149.98','174.98','199.98','224.99','249.98'],\n                                // ['0.00','8.29','16.64','24.97','49.99','74.98','100.00','124.98','149.98','174.97','199.98','225.00','249.97'],\n                                // ['0.00','8.29','16.68','25.03','50.01','75.01','99.99','125.00','149.99','174.99','199.99','224.98','249.97']\n                            ],\n                            currentData:[\n                                // '0.00','8.33','16.66','25.00','50.00','75.00','100.00','125.00','150.00','175.00','200.00','225.00','250.00'\n                            ],\n                            slopeData:[\n                                // '-90.8662','-90.1461','-91.019','-90.1518','-90.0585','-91.3125'\n                            ], \n                            offsetData:[\n                                // '-3.2042','-3.5446','-3.7018','-3.6037','-3.2249','-2.9856'\n                            ]\n                        },\n                        isSamplingData:{\n                            isPhaseISampling:false,\n                            isSamplingCurrentData:false, \n                            isSamplingCalibrationData:false\n                        }\n                    };\n                };\n                this.set(\"userInputtedData.batchSensorData\", currArr);\n            }else{\n                const sensorIDTBComponent = document.getElementById(\"sensorID\");\n                sensorIDTBComponent.value = message;\n\n            }\n            // console.log(`Auto Fill Sensor ID: ${year}${month}${selectedProfile.channels}${selectedProfile.data.typeID}`)\n            //Build TBs for Anchor Live View \n            this.buildAnchorLiveViews(selectedProfile.channels);\n\n            //Live Log Charts \n                //First clear the inital dataset\n            if (this.chart) {\n                this.chart.data.labels = [];\n                this.chart.data.datasets = [];\n                this.chart.update();\n            }\n\n            let datasetArr = [];\n            for(let i=0; i<selectedProfile.channels;i++){\n                datasetArr.push({\n                    label:`CH${i}`,\n                    borderColor : getDataSetColor(i),\n                    borderWidth: 0.5,\n                    fill: false,\n                    tension: 0.1,\n                })\n            }        \n            \n            if (this.chart) {\n                this.chart.data.datasets = datasetArr;\n                this.chart.update();\n            }\n        }\n    }),\n    rigProfileLoad:observer(\"selectedRigDP\",function(){\n        // console.log('triggered rigProfileLoad');\n        this.set(\"userInputtedData.selectedRigProfile\", null);\n        webSocketDisconnect(this);\n        if(this.get(\"selectedRigDP\") === \"0\"){\n            // this.set(\"selectedRigProfile\", null);\n            // webSocketDisconnect(this);\n        }else{\n            const rigData = this.get(\"getRigList\");\n            if(rigData){\n                rigData.forEach((rig,i)=>{\n                    if((i + 1).toString() === this.get(\"selectedRigDP\")){\n                        this.set(\"userInputtedData.selectedRigProfile\", rig);\n                        // console.log('userInputtedData.selectedRigProfile updated');\n                    }\n                });\n            }\n            if(this.get(\"userInputtedData.selectedRigProfile\") != null){\n                initializeConnection(this,this.get(\"userInputtedData.selectedRigProfile\")['data']['rigIP']);\n\n            }\n        } \n    }),\n    dashboardStatusBarObserver: observer(\n        \"dashboardStatusBarData.status\",\n        \"dashboardStatusBarData.connection\",\n        \"dashboardStatusBarData.calibration\",\n        function () {\n            updateRigActivity(this);\n            // console.log(\"refresh dashboard status bar!\");\n            const statusObj = this.get(\"dashboardStatusBarData\");\n            const statusComponent = document.getElementById(\"statusStatus\");\n            const connectionComponent = document.getElementById(\"connectionStatus\");\n            const calibrationComponent = document.getElementById(\"calibrationStatus\");\n            if(statusComponent && connectionComponent && calibrationComponent ){\n                statusComponent.style.color = statusObj['status']['color'];\n                statusComponent.textContent = statusObj['status']['value'];\n                connectionComponent.style.color = statusObj['connection']['color'];\n                connectionComponent.textContent = statusObj['connection']['value'];\n                calibrationComponent.style.color = statusObj['calibration']['color'];\n                calibrationComponent.textContent = statusObj['calibration']['value'];\n            }\n        }\n    ),\n    dashboardStatusBarObserver2: observer(\n        \"dashboardStatusBarData.current\",\n        \"dashboardStatusBarData.target\",\n        function () {\n            const statusObj = this.get(\"dashboardStatusBarData\");\n            const currentComponent = document.getElementById(\"currentPoint\");\n            const targetComponent = document.getElementById(\"targetPoint\");\n            if(currentComponent && targetComponent){\n                currentComponent.style.color = statusObj['current']['color'];\n                currentComponent.textContent = statusObj['current']['value'];\n                targetComponent.style.color = statusObj['target']['color'];\n                targetComponent.textContent = statusObj['target']['value'];\n            }\n        }\n    ),\n    actions: {\n        cycleInternalHotButton(){\n            if(this.get(\"settingsConfig.internalVersion\") === \"v1.0\"){\n                this.set(\"settingsConfig.internalVersion\", \"v2.0\");\n                showPopup([`Currently using internal version: v2.0`], \"notification\", 5);\n            }else{\n                this.set(\"settingsConfig.internalVersion\", \"v1.0\");\n                showPopup([`Currently using internal version: v1.0`], \"notification\", 5);\n            }\n            this.set('isShowConfig.isShowSettings', false);\n        },\n        startVerificationPress(elementID, holdDuration, mode) {\n            try{\n\n                this.set('isTriggered', false);\n                \n                const button = document.getElementById(elementID);\n                button.textContent=`0%`;\n                const startTime = Date.now();\n                this.set(\n                    'progressInterval',\n                    setInterval(() => {\n                    const elapsedTime = Date.now() - startTime; \n                    const progress = Math.min((elapsedTime / holdDuration) * 100, 100); // Calculate progress\n                    button.textContent=`${progress.toFixed(1)}%`;\n                \n                    if (progress === 100) { \n                        this.set('isTriggered', true);\n                        this.send('triggerAction',elementID, mode); \n                        clearInterval(this.progressInterval); \n                    }\n                    }, 50) \n                );\n            }catch(err){\n                console.log(`Error in startVerificationPress: ${err.message}`);\n                \n            }\n        },\n        cancelVerificationPress(elementID, mode) {\n            if (!this.isTriggered) {\n                const button = document.getElementById(elementID);\n                button.textContent=mode;\n\n                clearInterval(this.progressInterval); // Stop progress\n            }\n        },\n        async triggerAction(elementID, mode) {\n            // Perform the action after hold duration\n            const button = document.getElementById(elementID);\n            button.textContent=mode;\n            console.log(`triggerAction, elementID:${elementID}`);\n            switch(elementID){\n                case \"startV2CalibrationButton\":\n                    // buildCalibrationV2IntermissionNotificationBoard(this);\n                    if(JSON.stringify(this.get(\"dashboardStatusBarData\")['status']) === JSON.stringify(generalStatusLibrary(602))){\n                        showPopup(['Cannot start because status is not Validated'], 'error');\n                    }\n                    else if(JSON.stringify(this.get(\"dashboardStatusBarData\")['calibration']) === JSON.stringify(calibrationStatusLibrary(593)) || JSON.stringify(this.get(\"dashboardStatusBarData\")['calibration']) === JSON.stringify(calibrationStatusLibrary(594)) ){\n                        showPopup(['Cannot start because it was emergency Stopped.','please Reset.'], 'notification', 5);\n                    }else if (JSON.stringify(this.get(\"dashboardStatusBarData\")['calibration']) === JSON.stringify(calibrationStatusLibrary(551)) || JSON.stringify(this.get(\"dashboardStatusBarData\")['calibration']) === JSON.stringify(calibrationStatusLibrary(590))){\n                        showPopup(['Starting calibration'], 'success', 2);\n                        await getV2CalibrationSchematics(this);\n                    }else{                        \n                        showPopup(['Must be ready to start calibration'], 'notification');\n\n                    }\n                    break;\n                case \"resetCalibrationButton\":\n                    this.get(\"emergencyController\").abort();\n                    resetLog(this,'live');\n                    resetLog(this,'phaseI');\n                    resetLog(this,'phaseII');\n                    if (this.chart) {\n                        this.chart.data.labels = [];\n                        this.chart.data.datasets = [];\n                        this.chart.update();\n                    }\n                    this.set('emergencyController', new AbortController());\n                    updateCalibrationStatusModule(this, 551);\n                    webSocketDisconnect(this);\n                    hardResetModule(this)\n                    break;\n                case \"stopCalibrationButton\":\n                    await outgoingMessageLibrary(this, 'emergencyStop', '');\n                    this.get(\"emergencyController\").abort();\n                    // updateCalibrationStatusModule(this, 551);\n                    break;\n                case \"phaseIICalibrationButton\":\n                    if(JSON.stringify(this.get(\"dashboardStatusBarData\")['status']) === JSON.stringify(generalStatusLibrary(602))){\n                        showPopup(['Cannot start phase II because status is not Validated'], 'error');\n                    }\n                    else if(JSON.stringify(this.get(\"dashboardStatusBarData\")['calibration']) === JSON.stringify(calibrationStatusLibrary(593)) || JSON.stringify(this.get(\"dashboardStatusBarData\")['calibration']) === JSON.stringify(calibrationStatusLibrary(595)) ){\n                        showPopup(['Cannot start phase II because it was emergency Stopped.','To start phase I, please Reset.'], 'notification', 5);\n                    }else if (JSON.stringify(this.get(\"dashboardStatusBarData\")['calibration']) != JSON.stringify(calibrationStatusLibrary(551))){\n                        showPopup(['Cannot start phase II because calibration status is not Idle'], 'notification', 3);\n                    \n                    }else{\n                        showPopup(['Starting Phase II'], 'success', 5); \n                        getSensorPhaseIISchematics(this);\n                    }\n                    break;\n                case \"phaseICalibrationButton\":\n                    if(JSON.stringify(this.get(\"dashboardStatusBarData\")['status']) === JSON.stringify(generalStatusLibrary(602))){\n                        showPopup(['Cannot start phase I because status is not Validated'], 'error');\n                    }\n                    else if(JSON.stringify(this.get(\"dashboardStatusBarData\")['calibration']) === JSON.stringify(calibrationStatusLibrary(593)) || JSON.stringify(this.get(\"dashboardStatusBarData\")['calibration']) === JSON.stringify(calibrationStatusLibrary(594)) ){\n                        showPopup(['Cannot start phase I because it was emergency Stopped.','To start phase I, please Reset.'], 'notification', 5);\n                    }else if (JSON.stringify(this.get(\"dashboardStatusBarData\")['calibration']) != JSON.stringify(calibrationStatusLibrary(551))){\n                        showPopup(['Cannot start phase I because calibration status is not Idle'], 'notification');\n                    }else{\n                        showPopup(['Starting Phase I'], 'success', 2);\n                        getSensorPhaseISchematics(this);\n                    }\n                    break;\n            }\n        },\n        assistiveTooltip(type){\n            return showPopup(assistiveToolTipLibrary(type).split(\"\\n\"), \"notification\",5);\n        },\n        reconnectWebSocket(){\n            websocketReconnect(this);\n        },\n        viewCalibratedData(){\n            if(JSON.stringify(this.get(\"dashboardStatusBarData\")['calibration']) === JSON.stringify(calibrationStatusLibrary(551))){\n                const selectedRigProfile = this.get('userInputtedData.selectedRigProfile');\n                const selectedCalibrationProfile = this.get('userInputtedData.selectedCalibrationProfile');\n                const selectedSensorData = this.get(\"userInputtedData.selectedSensorData\");\n                if(selectedRigProfile != null && selectedCalibrationProfile != null && JSON.stringify(selectedSensorData) != \"{}\"){\n                    const data = buildAndGetDataFormat1(this);\n                    let sensorData = {...data['sensorProfileData'],\n                        anchorDataValue:data['anchorProfileData'],\n                        type:selectedCalibrationProfile['type'],\n                        rigReferenceID: selectedRigProfile['data']['rigReferenceID'],\n                        rigReferenceCalibrationValue: selectedRigProfile['data']['rigReferenceCalibrationValue'],\n                        rigReferenceCalibrationDate: selectedRigProfile['data']['rigReferenceCalibrationDate'],\n                        minLimit: selectedCalibrationProfile['data']['minLimit'],\n                        maxLimit: selectedCalibrationProfile['data']['maxLimit'],\n                    }\n                    let packProfileData = {...selectedSensorData['selectedPackProfile'],\n                        packID:selectedSensorData['selectedPackProfile']['packId'] ? selectedSensorData['selectedPackProfile']['packId'] : \"\",\n                        validationID:selectedSensorData['selectedPackProfile']['validationId'] ? selectedSensorData['selectedPackProfile']['validationId'] : \"\",\n                    }\n                    buildSensorProfileNotificationBoard(this, false, \n                        packProfileData,\n                        sensorData, data['calibrationData']['phaseILookUpArray'], \n                                    data['calibrationData']['phaseIICalibratedDataArray'], \n                                    data['calibrationData']['phaseIICalibratedCurrentArray'], \n                                    data['calibrationData']['phaseIICalibratedSlopeArray'], \n                                    data['calibrationData']['phaseIICalibratedOffsetArray']);\n                }\n\n            }else{\n                showPopup([\"Cannot open because calibration status is not Idle\"], 'warning', 3);\n            }\n            this.set('isShowConfig.isShowSettings', false);\n        },\n        viewPhaseIICalibratedData(){\n            if(JSON.stringify(this.get(\"dashboardStatusBarData\")['calibration']) === JSON.stringify(calibrationStatusLibrary(551))){\n                buildPhaseIIConclusionNotificationBoard(this);\n            }else{\n                showPopup([\"Cannot open because calibration status is not Idle\"], 'warning', 3);\n            }\n            this.set('isShowConfig.isShowSettings', false);\n        },\n        showBatchSensors(){\n            buildBatchSensorBoard(this);\n        },\n        cycleView(){\n            // Toggle states: switch between home and calibSensorList\n            if (this.isShowConfig.tabs.home) {\n              this.set('isShowConfig.tabs', { home: false, calibSensorList: true });\n            } else {\n              this.set('isShowConfig.tabs', { home: true, calibSensorList: false });\n            }\n\n        },\n        viewRigNotifications(){\n            buildRigNotificationNotificationBoard(this);\n            this.set('isShowConfig.isShowSettings', false);\n        },\n        viewPhaseIIConclusionCalibrationSheet(){\n            // getSlopeAndOffset(this);\n            // console.log(\"slope array\")\n            // console.log(this.get('calibrationData.phaseIISlopeData'))\n            // console.log(\"offset array\")\n            // console.log(this.get('calibrationData.phaseIIOffsetData'))\n            if(this.get(\"settingsConfig.internalVersion\") === \"v1.0\"){\n                buildPhaseIIConclusionNotificationBoard(this)\n            }else if(this.get(\"settingsConfig.internalVersion\") === \"v2.0\"){\n                buildPhaseIIConclusionNotificationBoardV2(this);\n                \n            }\n        },\n        async viewFromInventoryEditSheet(profile){\n            // Same incomplete-row guard as the Certificate button — editing inventory off a row\n            // with missing Phase I/II data has no meaningful behavior. Fetch phaseStatus first.\n            const calibrationID = profile['calibrationId'];\n            const responseData = await sendGETRequest(`sensor_profile/${calibrationID}/`);\n            if(responseData == false){ return; }\n            const phaseStatus = responseData['data'] && responseData['data']['phaseStatus'] || {};\n            if(!phaseStatus['phaseICompleted'] || !phaseStatus['phaseIICompleted']){\n                showPopup([\n                    `Calibration ID ${calibrationID}: insufficient data to edit from inventory.`,\n                    `Phase I complete: ${phaseStatus['phaseICompleted'] ? 'yes' : 'no'}. Phase II complete: ${phaseStatus['phaseIICompleted'] ? 'yes' : 'no'}.`\n                ], 'warning', 5);\n                return;\n            }\n            buildInventoryUpdateBoard(this, profile);\n        },\n        viewCalibrationSheet(calibrationID){\n            buildCalibrationSheet(this,calibrationID)\n        },\n        async getCalibProfile(calibrationID){\n\n            let responseData = await sendGETRequest(`sensor_profile/${calibrationID}/`);\n            if(responseData != false){\n                const data = responseData['data'];\n                // The BE attaches `Progress` (or `progress`) at `data` level, not on\n                // sensorProfile. Hoist it into sensorProfile so downstream renderers (e.g. the\n                // progression bar in buildSensorProfileNotificationBoard) can read it.\n                const progressObj = data['Progress'] || data['progress'] || null;\n                const sensorProfile = Object.assign({}, data['sensorProfile'], progressObj ? { Progress: progressObj } : {});\n                const packProfile = data['packProfile'];\n                const phaseILookupData = data['calibrationData']['phaseILookupData'];\n                const phaseIICalibrationDataValueData = data['calibrationData']['phaseIICalibrationDataValueData'];\n                const phaseIICurrentData = data['calibrationData']['phaseIICurrentData'];\n                const phaseIISlopeData = data['calibrationData']['phaseIISlopeData'];\n                const phaseIIOffsetData = data['calibrationData']['phaseIIOffsetData'];\n                const phaseIICompleted = !!(data['phaseStatus'] && data['phaseStatus']['phaseIICompleted']);\n\n                buildSensorProfileNotificationBoard(this, true, packProfile, sensorProfile, phaseILookupData, phaseIICalibrationDataValueData, phaseIICurrentData, phaseIISlopeData, phaseIIOffsetData, phaseIICompleted);\n                console.log(\"you selected\")\n                console.log(data);\n            }\n        },\n        scrollTop() {\n            window.scrollTo({\n                top: 0,\n                behavior: 'smooth', // Adds smooth scrolling\n            });\n            this.set('isShowConfig.isShowSettings', false);\n        },\n        scrollDashboard(){\n            const element = document.getElementById(\"calibrationDashboardTitle\");\n            if (element) {\n                element.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n                this.set('isShowConfig.isShowSettings', false);\n            }\n        },\n        copyChatToClipboard(elementID) {\n            console.log(\"copyChatToClipboard\");\n            const chatBox = document.getElementById(elementID);\n            if (chatBox) {\n                const range = document.createRange();\n                range.selectNodeContents(chatBox);\n                const selection = window.getSelection();\n                selection.removeAllRanges();\n                selection.addRange(range);\n                document.execCommand('copy');\n                // alert('Chat copied to clipboard!');\n            }\n        },\n        unlockChatScroll(elementID) {\n            // console.log(\"unlockChatScroll\");\n            this.set(`settingsConfig.chatLocked.${elementID}`, false);\n            // alert('Chat scrolling unlocked!');\n        },\n        lockChatScroll(elementID) {\n            // console.log(\"lockChatScroll\");\n            this.set(`settingsConfig.chatLocked.${elementID}`, true);\n            const chatBox = document.getElementById(elementID);\n            if (chatBox) {\n                chatBox.scrollTop = chatBox.scrollHeight;\n            }\n            // alert('Chat scrolling locked!');\n        },\n        showLiveGraphs(){\n            const curr = this.get(\"isShowConfig.isShowLiveGraphs\");\n            this.set('isShowConfig.isShowLiveGraphs',!curr);\n        },\n        showCommandConsole(){\n            const curr = this.get(\"isShowConfig.isShowCommandConsole\");\n            this.set('isShowConfig.isShowCommandConsole',!curr);\n\n        },\n        async sendCommand(){\n            await this.sendCommandFromConsoleTxtbox();\n        },\n        async onKeyDown(event){\n            if (event.key === 'Enter'){\n                await this.sendCommandFromConsoleTxtbox();\n            }\n        },\n        exportChatToFile(elementID) {\n            console.log(\"copyChatToClipboard\");\n            const chatBox = document.getElementById(elementID);\n            if (chatBox) {\n                const chatContent = chatBox.innerText;\n                const blob = new Blob([chatContent], { type: 'text/plain;charset=utf-8' });\n                const downloadLink = document.createElement('a');\n                downloadLink.href = window.URL.createObjectURL(blob);\n                downloadLink.download = 'chat-log.txt';\n                downloadLink.click();\n            }\n        },\n        async controlPanel(type, value){\n            // console.log(`WS+JOG=${value},1`);\n            \n            if(this.get(\"settingsConfig.internalVersion\") === \"v1.0\"){\n\n            }else{\n                await outgoingMessageLibrary(this, \"setRigUnit\", 0);\n            }\n            await outgoingMessageLibrary(this, type, value);\n        },\n        closeNotificationPopup(){\n            const notificationPopupContentBody = document.getElementById('notificationPopupContentBody');\n            notificationPopupContentBody.innerHTML=\"\";\n            this.set('isShowConfig.isShowPopupNotification', false);\n\n        },\n        cycleVisualSettings(){\n            this.set('isShowConfig.isShowSettings', !this.get(\"isShowConfig.isShowSettings\"));\n        },\n        validatePriorCalibration(){\n            validateAllForms(this);\n        },\n        //Open the Check-out modal for an inventory sensor (button is only enabled when isInventory).\n        //For now this just shows the \"Checking out Sensor: <name>(<id>)\" board; the check-in form\n        //(Sensor Name / Job ID / anchor values) will be added here next.\n        checkoutSensor(profile){\n            buildCheckoutBoard(this, profile);\n        },\n        //Operator picked \"For Inventory? Yes/No\". Yes prefills Job # / Sensor Name / Anchor textboxes\n        //with the -175 sentinel and disables them; No clears and re-enables them.\n        toggleForInventory(isForInventory){\n            this.set(\"userInputtedData.isForInventory\", isForInventory);\n            this.applyInventoryState();\n            //Mirror updateSensorFormData: changing inputs after a successful Validate drops back to Not Validated.\n            if(JSON.stringify(this.get(\"dashboardStatusBarData\")['status']) === JSON.stringify(generalStatusLibrary(603))){\n                this.set(\"dashboardStatusBarData.status\",generalStatusLibrary(602));\n            }\n        },\n        updateRigFormData(event) {\n            const key = event.target.id;\n            const value = event.target.value;\n            // console.log(`key:${key}, value:${value}`);\n            if (key === 'rigCategory'){\n                this.set(`formRigData.${key}`, value.toUpperCase()); \n            }else if (key === 'rigReferenceCalibrationDate'){\n                this.set(`formRigData.${key}`, formatDateTimeFromInputField(value)); \n            }\n            else{\n                this.set(`formRigData.${key}`, value); \n\n            }\n          console.log(this.get(\"formRigData\"));\n        },\n        updateCalibFormData(event) {\n            const key = event.target.id;\n            const value = event.target.value;\n            console.log(`type:${key}, value:${value}`);\n            if(key===\"checkpointPositions\"){   \n                try{\n                    \n                    this.set(`formCalibData.${key}`, value.split(','));\n                }catch(err){\n                    showPopup(['Checkpoint Positions is in incorrect syntax.\\nPlease follow this sample:0.00,8.33,25.00,50.00,75.00,100.00,125.00'],'error');\n                }\n            }else{\n                this.set(`formCalibData.${key}`, value);\n                \n            }\n        },\n        updateSensorFormData(event) {\n            const key = event.target.id;\n            const value = event.target.value;\n            // console.log(`key:${key}, value:${value}`)\n            if ((value == '' || value == null) && (key in this.get(\"userInputtedData.selectedSensorData\"))){\n                delete this.get('userInputtedData.selectedSensorData')[key];\n            }else if (key == 'selectedPackProfile' && this.get('frontendData.packValidationCompletedProfileList').length > 0){\n                if(value == 0){\n                    this.set(`userInputtedData.selectedSensorData.selectedPackProfile`, null); \n                }else{\n                    const selectedPackProfile = this.get('frontendData.packValidationCompletedProfileList')[Number.parseInt(value) - 1]['data'];\n                    console.log('you ahve selected pack profile')\n                    console.log(selectedPackProfile);\n                    this.set(`userInputtedData.selectedSensorData.selectedPackProfile`, selectedPackProfile); \n\n                }\n            }else{\n                // console.logn(value);\n                this.set(`userInputtedData.selectedSensorData.${key}`, value); \n            }\n\n            //Immediately reset status to Not Validated if the user changes any textboxes when it is already Validated\n            if(JSON.stringify(this.get(\"dashboardStatusBarData\")['status']) === JSON.stringify(generalStatusLibrary(603))){\n                this.set(\"dashboardStatusBarData.status\",generalStatusLibrary(602));\n            }\n        },\n        resetSort(){\n            this.set(\"paginationSearchConfig.searchObject.calibrationIDOrdering\", null);\n            const calibrationIDColumnComp = document.getElementById(\"calibrationIDColumn\");\n            calibrationIDColumnComp.textContent = \"Calibration ID  \";\n\n            this.set(\"paginationSearchConfig.searchObject.jobIDOrdering\", null);\n            const jobIDColumnComp = document.getElementById(\"jobIDColumn\");\n            jobIDColumnComp.textContent = \"Job ID  \";\n\n            this.set(\"paginationSearchConfig.searchObject.calibrationDateOrdering\", null);\n            const calibrationDateColumnComp = document.getElementById(\"calibrationDateColumn\");\n            calibrationDateColumnComp.textContent = \"Calibration Date  \";\n\n            this.set(\"paginationSearchConfig.searchObject.sensorIDOrdering\", null);\n            const sensorIDColumnComp = document.getElementById(\"sensorIDColumn\");\n            sensorIDColumnComp.textContent = \"Sensor ID  \";\n\n            this.send('resetPage');\n            this.getSensorProfileList();\n            this.clearBatchCBData();\n        },\n        updateSearchObjData(event) {\n            const key = event.target.id;\n            const value = event.target.value;\n            console.log(`key:${key}, value:${value}`)\n            if ((value == '' || value == null) && (key in this.get(\"paginationSearchConfig.searchObject\"))){\n                delete this.get('paginationSearchConfig.searchObject')[key];\n            }else if (key == 'page_size'){\n                this.set(`paginationSearchConfig.pagination.pageSize`, value);\n            }else{\n                this.set(`paginationSearchConfig.searchObject.${key}`, value); \n            } \n            // this.getSensorProfileList();\n        },\n        choseRig(value) {\n            // console.log(\"User selected:\" + value);\n            let oldRigObject = this.get(\"rigObject\");\n            if(oldRigObject != null && oldRigObject[\"ip\"] != null ){\n                oldRigObject[\"ip\"] = value;\n                this.set(\"oldRigObject\", oldRigObject);\n            }\n        },\n        choseSensorType(value) {\n            // console.log(\"User selected:\" + value);\n            let oldRigObject = this.get(\"rigObject\");\n            if(oldRigObject != null && oldRigObject['sensorType'] != null ){\n                oldRigObject['sensorType'] = value;\n                this.set(\"oldRigObject\", oldRigObject);\n            }\n        },\n        cycleEditMode(){\n            // console.log(`click edit mode:${type}`)\n            this.set(\"isShowConfig.isFormEditing\", !this.isShowConfig.isFormEditing);\n        },\n        cycleAddNewRigMode(){\n            this.set(\"isShowConfig.isShowRigForm\", !this.isShowConfig.isShowRigForm);\n            this.set(\"isShowConfig.isShowCalibForm\", false);\n            this.set('isShowConfig.isShowSettings', false);\n        },\n        cycleAddNewCalibProfileMode(){\n            this.set(\"isShowConfig.isShowCalibForm\", !this.isShowConfig.isShowCalibForm);\n            this.set(\"isShowConfig.isShowRigForm\", false);\n            this.set('isShowConfig.isShowSettings', false);\n        },\n        cycleShowAnchorDiagramMode(){\n            this.set(\"isShowAnchorDiagram\", !this.isShowAnchorDiagram);\n        },\n        async formDeleteButton(type){\n            switch(type){\n                case \"calib\":\n                    const calibSubmittedObject = this.get(\"formCalibData\");\n                    if(calibSubmittedObject == null || calibSubmittedObject == {}){\n                        showPopup(['Please select a calibration profile you wish to delete'],\"warning\");\n                    }else{\n                        if (await sendDELETERequest(`calib_calib_profile/${calibSubmittedObject['id']}`, calibSubmittedObject)){\n                            showPopup([\"Calibration Profile Deleted Successfully!\"],'success');\n                            resetProfile(\"calib\"); \n                            window.location.reload();\n    \n                        }else{\n                            showPopup([\"Calibration Profile Delete Failed!\",'error']);\n                        };\n                    }\n                    break;\n                case \"rig\":\n                    const rigSubmittedObject = this.get(\"formRigData\");\n                    if(rigSubmittedObject == null || rigSubmittedObject == {}){\n                        showPopup(['Please select a calibration profile you wish to delete'],\"warning\");\n                    }else{\n                        if (await sendDELETERequest(`rig_profile_view/${rigSubmittedObject['id']}`, rigSubmittedObject)){\n                            showPopup([\"Rig Profile Deleted Successfully!\"],'success');\n                            resetProfile(\"rig\"); \n                            window.location.reload();\n    \n                        }else{\n                            showPopup([\"Rig Profile Delete Failed!\",'error']);\n                        };\n                    }\n\n                    break;\n            }\n        },\n        async formSaveButton(type){\n            console.log(`formSaveButton:${type}`)\n            switch(type){\n                case \"calib\":\n                    const validationKeys = ['calibType','unit','channels','minLimit','maxLimit','checkpointCurrentTargetBuffer','checkpointSampleSize','checkpointSpeed','checkpointDelay','checkpointPositions'];\n                    const calibSubmittedObject = this.get(\"formCalibData\");\n                    console.log(`calibSubmittedObject`)\n                    console.log(calibSubmittedObject);\n                    calibSubmittedObject[\"creationDate\"] = getCurrentDateTime();\n                    //Tier 1 Validation\n                    let missingKeysMsgArr = [];\n                    validationKeys.forEach((value, index)=>{\n                        if ((!calibSubmittedObject.hasOwnProperty(value)) ||(calibSubmittedObject[value] === '') || (calibSubmittedObject[value] === null)) {\n                            missingKeysMsgArr.push(\"Missing \" + value + \"; \");\n                        }\n                    })\n                    const userProfile = this.get('session').data.authenticated['userProfile'];\n                    calibSubmittedObject[\"calibCreationEmployee\"] = `${userProfile['profile']['first_name']} ${userProfile['profile']['last_name']}`;\n                    const id = calibSubmittedObject['id'];\n\n\n                    if(missingKeysMsgArr.length !=0){\n                        showPopup(missingKeysMsgArr,'error', 5);\n                    }else{\n                        if(this.isShowConfig.isFormEditing){\n                            console.log(\"Calib Editing\");\n                            //Handle For Edit Mode\n                            if (await sendPATCHRequest(`calib_calib_profile/${id}`, calibSubmittedObject)){\n                                showPopup([\"Calibration Profile Edited Successfully!\"],'success');\n                                resetProfile(\"calib\"); \n                                window.location.reload();\n        \n                            }else{\n                                showPopup([\"Calibration Profile Edit Failed!\",'error']);\n                            };\n                            \n    \n                        }else{\n                            console.log(\"Calib Adding\");\n                            //Handle For Add Mode\n                            delete calibSubmittedObject.id;\n                            if (await sendPOSTRequest(\"calib_calib_profile\", calibSubmittedObject)){\n                                showPopup([\"Calibration Profile Created Successfully!\"],'success');\n                                resetProfile(\"calib\"); \n                                window.location.reload();\n        \n                            }else{\n                                showPopup([\"Calibration Profile Creation Failed!\",'error']);\n                            };\n                            \n                        }\n                    }\n                    break;\n                case \"rig\":\n                    const validationKeys2 = ['rigName','rigIP','rigCategory','creationDate'];\n                    const rigSubmittedObject = this.get(\"formRigData\");\n                    rigSubmittedObject[\"creationDate\"] = getCurrentDateTime();\n                    //Tier 1 Validation\n                    let missingKeysMsgArr2 = [];\n                    validationKeys2.forEach((value, index)=>{\n                        if ((rigSubmittedObject[value] == '') || (rigSubmittedObject[value] == null)) {\n                            missingKeysMsgArr.push(\"Missing \" + value + \"; \")\n                            }\n                    }) \n                    const userProfile2 = this.get('session').data.authenticated['userProfile'];\n                    rigSubmittedObject[\"company\"] = userProfile2['profile']['company'];\n                    rigSubmittedObject[\"creationEmployee\"] = `${userProfile2['profile']['first_name']} ${userProfile2['profile']['last_name']}`;\n                    if(missingKeysMsgArr2.length !=0){\n                        showPopup(missingKeysMsgArr,'error');\n                    }else{\n                        let activityLog = {};\n                        activityLog['status'] = 602;\n                        activityLog['connection'] = 500;\n                        activityLog['activity'] = 551;\n                        activityLog['activeUser'] = null;\n                        activityLog['connectedTo'] = null;\n                        activityLog['company'] = null;\n                        activityLog['latestDate'] = getCurrentDateTime();\n                        console.log(`rigSubmittedObject`)\n                        console.log(rigSubmittedObject);\n                        rigSubmittedObject[\"activityJSON\"] = activityLog;\n                        const id = rigSubmittedObject['id'];\n\n                        if(this.isShowConfig.isFormEditing){\n                            console.log(\"Rig Editing\");\n                            //Handle For Edit Mode\n                            if (await sendPATCHRequest(`rig_profile_view/${id}`, rigSubmittedObject)){\n                                showPopup([\"Rig Profile Edited Successfully!\"],'success');\n                                resetProfile(\"rig\"); \n                                window.location.reload();\n        \n                            }else{\n                                showPopup([\"Rig Profile Edit Failed!\",'error']);\n                            };\n                            \n                        }else{\n                            console.log(\"Rig Adding\");\n                            //Handle For Add Mode\n                            delete rigSubmittedObject.id;\n                            if (await sendPOSTRequest(\"rig_profile_view\", rigSubmittedObject)){\n                                showPopup([\"Rig Created Successfully!\"],'success');\n                                resetProfile(\"rig\");\n                                window.location.reload();\n        \n                            }else{\n                                showPopup([\"Rig Creation Failed!\"],'error');\n                            };\n                            \n                        }\n                    }\n                    break;\n\n            }\n\n        },\n        jumpToPage(page){\n            // this.getSensorProfileList();\n            try{\n                if(page != \"...\"){\n                    this.set('userInputtedData.batchCheckboxData', {});\n                    this.set('paginationSearchConfig.pagination.page', Number.parseInt(page))\n                    this.getSensorProfileList();\n                    this.clearBatchCBData();\n                }\n            }\n            catch(err){\n\n            }\n        },\n        search(){\n            this.getSensorProfileList();\n            this.clearBatchCBData();\n        },\n        changeCertificateManagerPageSize(event){\n            const newSize = parseInt(event && event.target && event.target.value, 10) || 20;\n            this.set('paginationSearchConfig.pagination.pageSize', newSize);\n            // Reset to page 1 so we don't request a page that no longer exists at the larger size.\n            this.set('paginationSearchConfig.pagination.page', 1);\n            this.getSensorProfileList();\n            this.clearBatchCBData();\n        },\n        // Progression radio: 'full' | 'phase_i_only' | 'all'. Reset page to 1 since changing the\n        // filter shifts the result set, then refetch immediately.\n        changeProgressionFilter(value){\n            const allowed = ['full', 'phase_i_only', 'all'];\n            const next = allowed.indexOf(value) >= 0 ? value : 'full';\n            this.set('searchProgression', next);\n            this.set('paginationSearchConfig.pagination.page', 1);\n            this.getSensorProfileList();\n            this.clearBatchCBData();\n        },\n        // Is-Redone radio: 'true' | 'false' (no 'all' — \"all\" would include redone anyway).\n        // Reset page to 1 and refetch immediately.\n        changeIsRedoneFilter(value){\n            const allowed = ['true', 'false'];\n            const next = allowed.indexOf(value) >= 0 ? value : 'false';\n            this.set('searchIsRedone', next);\n            this.set('paginationSearchConfig.pagination.page', 1);\n            this.getSensorProfileList();\n            this.clearBatchCBData();\n        },\n        resetPage(){\n            this.set(\"paginationSearchConfig.pagination.page\", 1);\n        },\n        resetSearch(){\n            this.set(\"paginationSearchConfig.searchObject\", {calibrationIDFilter:\"DESC\"});\n            const searchCalibrationIDComponent = document.getElementById('searchCalibrationID');\n            searchCalibrationIDComponent.value=null;\n            const searchJobIDComponent = document.getElementById('searchJobID');\n            searchJobIDComponent.value=null;\n            const searchSensorIDComponent = document.getElementById('searchSensorID');\n            searchSensorIDComponent.value=null;\n            // Also restore the progression radio to its default ('full') so the user gets\n            // certificate-ready rows back after a reset.\n            this.set('searchProgression', 'full');\n            // Restore the Is-Redone radio to its default ('false').\n            this.set('searchIsRedone', 'false');\n\n            this.getSensorProfileList();\n            this.clearBatchCBData();\n        },\n        async batchCertificate(isVisiblePopup){\n            await buildBatchCalibrationSheet(this, isVisiblePopup);\n        },\n        rowCheckbox(checkboxElementID) {\n            const cbElement = document.getElementById(checkboxElementID);\n            if(cbElement){\n                const currBatchCheckboxData = this.get(\"userInputtedData.batchCheckboxData\");\n                if(checkboxElementID === \"HEADER_CB\"){\n                    this.get(\"frontendData.calibrationInstrumentProfileList\").forEach((data, index)=>{\n                        const calibrationID = data['calibrationId']\n                        const batchCBElement = document.getElementById(`BATCH_CB_${calibrationID}`);\n                        if(cbElement.checked){\n                            batchCBElement.checked=true;\n                            currBatchCheckboxData[calibrationID] = {\"calibrationID\":calibrationID};\n                        }else{\n                            batchCBElement.checked=false;\n                            delete currBatchCheckboxData[calibrationID];\n                        }   \n                    });\n                }else{\n                    const calibrationID = checkboxElementID.split(\"_\")[2];\n                    if(cbElement.checked){\n                        currBatchCheckboxData[calibrationID] = {\"calibrationID\":calibrationID};\n                    }else{\n                        delete currBatchCheckboxData[calibrationID];\n                    }   \n                }\n                this.set('userInputtedData.batchCheckboxData', currBatchCheckboxData);\n            }\n        },\n        columnCycleOrdering(id){\n            const searchObject = this.get(\"paginationSearchConfig.searchObject\");\n            switch(id){\n                case \"calibrationIDOrdering\":\n                    const calibrationIDColumnComp = document.getElementById(\"calibrationIDColumn\");\n                    if(searchObject['calibrationIDOrdering'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.calibrationIDOrdering\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        calibrationIDColumnComp.textContent = \"Calibration ID v\";\n                    }else if(searchObject['calibrationIDOrdering'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.calibrationIDOrdering\", null);\n                        calibrationIDColumnComp.textContent = \"Calibration ID  \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.calibrationIDOrdering\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        calibrationIDColumnComp.textContent = \"Calibration ID ^\";\n                    };\n                    break;\n                case \"jobIDOrdering\":\n                    const jobIDColumnComp = document.getElementById(\"jobIDColumn\");\n                    if(searchObject['jobIDOrdering'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.jobIDOrdering\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        jobIDColumnComp.textContent = \"Job ID v\";\n                    }else if(searchObject['jobIDOrdering'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.jobIDOrdering\", null);\n                        jobIDColumnComp.textContent = \"Job ID  \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.jobIDOrdering\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        jobIDColumnComp.textContent = \"Job ID ^\";\n                    };\n                    break;\n                case \"calibrationDateOrdering\":\n                    const calibrationDateColumnComp = document.getElementById(\"calibrationDateColumn\");\n                    if(searchObject['calibrationDateOrdering'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.calibrationDateOrdering\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        calibrationDateColumnComp.textContent = \"Calibration Date v\";\n                    }else if(searchObject['calibrationDateOrdering'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.calibrationDateOrdering\", null);\n                        calibrationDateColumnComp.textContent = \"Calibration Date  \";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.calibrationDateOrdering\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        calibrationDateColumnComp.textContent = \"Calibration Date ^\";\n                    };\n                    break;\n                case \"sensorIDOrdering\":\n                    const sensorIDColumnComp = document.getElementById(\"sensorIDColumn\");\n                    if(searchObject['sensorIDOrdering'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.sensorIDOrdering\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        sensorIDColumnComp.textContent = \"Sensor ID v\";\n                    }else if(searchObject['sensorIDOrdering'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.sensorIDOrdering\", null);\n                        sensorIDColumnComp.textContent = \"Sensor ID  \";\n                    } else{\n                        this.set(\"paginationSearchConfig.searchObject.sensorIDOrdering\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        sensorIDColumnComp.textContent = \"Sensor ID ^\";\n                    };\n                    break;\n            }\n            this.getSensorProfileList();\n            this.clearBatchCBData();\n        }\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n    \n        const ctx = document.getElementById('myChart').getContext('2d');\n        this.chart = new Chart(ctx, {\n            type: 'line',\n            data: {\n                labels: [],\n                datasets: []\n            },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                scales: {\n                    x: {\n                        display: false, // Hide x-axis\n                    },\n                    y: {\n                        display: false, // Hide y-axis\n                    },\n                },\n                plugins: {\n                    legend: {\n                        display: true, // Ensure the legend is displayed\n                        position: 'top', // Position it at the top\n                        labels: {\n                            usePointStyle: true, // Enable custom icons in the legend\n                            generateLabels: (chart) => {\n                                // Customize the legend label icons to appear as lines\n                                return chart.data.datasets.map((dataset, index) => ({\n                                    text: dataset.label,\n                                    fillStyle: dataset.borderColor,\n                                    strokeStyle: dataset.borderColor,\n                                    lineWidth: dataset.borderWidth,\n                                    hidden: !chart.isDatasetVisible(index),\n                                    datasetIndex: index,\n                                }));\n                            },\n                            font: {\n                                size: 8, // Change the font size of the legend\n                                family: 'Arial', // Optional: Change the font family\n                                weight: 'bold', // Optional: Make the text bold\n                            },\n                            color: 'black', // Optional: Change the font color\n                            boxWidth: 8, // Match the size of the font (adjust as needed)\n                            boxHeight: 8, // Match the size of the font (adjust as needed)\n                            padding: 5, // Optional: Add padding around the legend labels\n                        },\n                    },\n                    tooltip: {\n                        enabled: false,\n                    },\n                },\n                elements: {\n                    point: {\n                        radius: 0, // Remove the circle markers\n                    },\n                },\n            },\n        });\n    }\n    \n    \n})\n","import { computed, observer } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport Chart from 'chart.js/auto';\nimport {buildBatchProfileSheet,showHelpNotificationBoard,checkFinalValidity,resetDataCompletedPackTypeProfile, destroyAndClearAnchorLiveView, initializeAndCreateAnchorLiveView, packValidationConclusion, buildRigActivityNotificationBoard, unloadLoadPopup , resetPackProgressionBar, updatePackProgressionBar, phase1TestMessage, updateRigActivity, buildAndGetDataFormat1, packProfileDetailBoard, roundToDecimalPlaces, sendGETRequest, convertDBDateToTableDate, updatePacksValidationStatusModule, buildRigNotificationNotificationBoard, getPacksValidationPhaseIISchematics, formatDateTimeFromInputField, hardResetModule,resetLog, sendPATCHRequest, getPacksValidationPhaseISchematics, validateAllForms, outgoingMessageLibrary, updateStepperPressureControlPanel, appendLiveLog, websocketReconnect, webSocketDisconnect, initializeConnection, resetDataSelectedPackTypeProfile, resetDataRigProfile,showPopup, resetProfile, sendPOSTRequest, packStatusLibrary, connectionStatusLibrary, generalStatusLibrary, getDataSetColor, getCurrentDateTime, sendDELETERequest, createPhaseIPackProfile } from '../../helpers/packs-validation-library';\nimport {assistiveToolTipLibrary } from '../../helpers/packs-validation-language-library';\n\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    session: service(),    \n    userInputtedData:{\n        selectedRigProfile:null,\n        selectedPackType:null,\n        selectedPackData:{},\n        //Profile Manager batch selection — { [validationID]: {validationID} } for ticked rows.\n        batchCheckboxData:{},\n    },\n    frontendData:{\n        packsValidationProfileList : [],\n        rigNotificationData:{}, //{rigId:{data:{rig data}, messages:[]}}, The data object has been created on first render\n        manufacturedPacksData:[],\n        completedFullPacksData:[],\n    },\n    // Table phase-filter radio: 'phaseI' | 'phaseII' | 'both' | 'all'. Sent as ?phase= on /validation-packs-profiles/.\n    // NOTE: the BE filter is now VERDICT-based — phaseI = passed P1 & not yet P2, phaseII = passed P2,\n    // both = passed both, all = everything. Default to 'all' so the landing table shows every pack\n    // (incl. in-progress / Phase-I-only / failed); the looser/grouped views are opt-in via the radio.\n    // Contractors only have access to 'phaseI' and 'all' — `init()` overrides the default to 'phaseI' for them.\n    searchPhase: 'all',\n    // Is-Used filter radio. Sent as ?isUsed= on /validation-packs-profiles/. Contractors never see\n    // this control and are locked to isUsed=false (enforced in getPackProfileList); everyone else\n    // toggles it. Default false.\n    searchIsUsed: false,\n    // True when the logged-in user belongs to the Contractor department. Drives hiding of\n    // Phase II / Both radios, the Company filter input, and the Is-Used radio.\n    isContractor: computed('session.data.authenticated.userProfile.profile.department', function(){\n        const profile = this.get('session.data.authenticated.userProfile.profile');\n        return profile && profile.department === 'Contractor';\n    }),\n    settingsConfig:{\n        tabs:{home:true, calibSensorList: false},\n        phaseENV:{phase:2,canCycle:false,isRepairing:false},\n        softwareVersion:\"Packs Validation v1.2.8\",\n        internalVersion:\"v1.0\",\n        APPROVEDRIGCATEGORIES:{stepper:\"Stepper\",pump: \"Pump\"},\n        chatLocked:{streamingTextBox:true, phaseITextbox:true, phaseIITextbox:true},\n        MAX_TIMEOUT_AWAITING_SAMPLING: 750,ASCENDING_CONST: \"ASC\",DESCENDING_CONST: \"DESC\",\n    },\n    paginationSearchConfig:{    \n        searchObject:{ validationIdOrdering:\"DESC\",packIdOrdering:null, phase1ValidationDateOrdering:null, phase2ValidationDateOrdering:null, rigIDOrdering:null},\n        pagination:{page:1, pageSize:15, totalPages:1},\n        paginationPageSizes : [5,15,25,50,100,150,200,250,500,750,1000,1500,2000],\n        packsValidationInstrumentProfilePaginationList : [],\n    },\n    packsValidationData:{\n        phase1UnloadData:[\n        // [45562,45549,44924,45050,45021,44975,45779,60349]\n    ],phase1LoadData:[\n        // [46001,49904,50152,50008,50069,49996,49854,27391]\n    ],phase2UnloadData1:[\n        // [30106,27379,27393,27373,27438,27394,27338,27412]\n    ],phase2LoadData1:[\n        // [46822,49938,50183,50045,50103,50032,49897,27410]\n    ],phase2LoadData2:[\n        // [53342,54880,55152,55065,54984,54835]\n    ],phase2UnloadData2:[\n        // [30652,29962,29978,30028,29980,29917]\n    ],phase1ValidityData:{unload:false,load:false,final:null, },\n    //Per-step stopwatch durations (seconds). Built up DURING the phase (one value per progression\n    //step) and sent to the BE only at end-of-phase — NOT in the per-step progression PATCHes.\n    //Phase I (2 steps): { p1s1Stopwatch, p1s2Stopwatch }. Phase II (4 steps): { p2s1..p2s4Stopwatch }.\n    p1StopwatchValues:{},\n    p2StopwatchValues:{},\n    phase2ValidityData:{load1:false, unload1:false, unload2:false, load2:false,final:null}\n    },\n    packValidationIsSamplingData:{currentStage:null,isPhaseISampling:false, isPhaseIISampling:false},\n    isShowConfig:{\n        isShowRigForm:false,\n        isShowPackTypeForm:false,\n        isShowCommandConsole:false,\n        isShowLiveGraphs:false,\n        isFormEditing:false,\n        isShowPopupNotification:false,\n        isShowSettings:false,\n        //When false, clicking the backdrop will NOT close the popup. Set false during the\n        //load/unload + reflash validation steps so an accidental outside-click can't kill the process.\n        isPopupDismissable:true,\n    },\n    dashboardStatusBarData: {\n        status:connectionStatusLibrary(602), \n        connection:connectionStatusLibrary(500), \n        calibration:packStatusLibrary(551),\n        current:generalStatusLibrary(600),\n        target:generalStatusLibrary(600)\n    },\n    formRigData: {},\n    formPackTypeData: {},\n    emergencyController: new AbortController(),\n    showIrretrivableWarning:true,\n    //For Reset\n    progressInterval: null,\n    isTriggered: false,\n    isForAnotherUser: false,\n    // Pack Type dropdown filters — empty = no filter; BE accepts ?packNumber=&maxLength=\n    packTypeFilterPackNumber: \"\",\n    packTypeFilterMaxLength: \"\",\n    // Rig form: list of users populated when \"Is this for another user?\" is checked.\n    userListForRig: [],\n    init() {\n        this._super(...arguments);\n        // Contractors can't see Phase II / Both radios — make sure the default phase\n        // filter is one they're actually allowed to use, otherwise the first GET fires\n        // with an option they have no UI control to change back from.\n        if(this.get('isContractor')){\n            this.set('searchPhase', 'phaseI');\n        }\n        this.getPackProfileList();\n        //Auto hide  \"When you initiate execution....\" after 20 seconds\n        setTimeout(() => {\n            this.set(\"showIrretrivableWarning\", false)\n          }, 20000);\n        scheduleOnce('afterRender', this, async () => {\n            //Preload Pagination\n            const pageSizeComp = document.getElementById(\"page_size\");\n            pageSizeComp.value = this.get('paginationSearchConfig.pagination.pageSize');\n            //First render status bar\n            this.set('dashboardStatusBarData',{\n                status:generalStatusLibrary(602), \n                connection:connectionStatusLibrary(500), \n                calibration:packStatusLibrary(551),\n                current:generalStatusLibrary(600),\n                target:generalStatusLibrary(600)\n            })\n            //First render rigNotificationData object.\n            if(this.get(\"getRigList\")){\n                this.get(\"getRigList\").forEach((rigObj, index)=>{             \n                    this.set(\"frontendData.rigNotificationData\",{...this.get(\"frontendData.rigNotificationData\"), [rigObj['data']['rigID']]: {data:rigObj['data'], messages:[]} });\n    \n                });\n            } \n            //Pre-Fill Emplyoee & Phase # & Save company name & \n            const userProfile = this.get('session').data.authenticated['userProfile'];\n            const phaseIDLabelComponent = document.getElementById(\"phaseValidationLabel\");\n            phaseIDLabelComponent.style.fontSize = 'large';\n            phaseIDLabelComponent.style.fontStyle = 'italic'\n            phaseIDLabelComponent.style.marginLeft = '10px';\n            console.log(userProfile[\"profile\"]);\n            if(userProfile){\n                \n                if(userProfile['profile']['associated_to_pack_validation_phase'] == null){\n                    this.set('settingsConfig.tabs', { home: false, calibSensorList: true });\n                    const cycleViewComp = document.getElementById(\"cycleViewSection\");\n                    cycleViewComp.style.display = \"none\";\n                    const controlPanelComp = document.getElementById(\"controlPanel1\");\n                    controlPanelComp.style.display=\"none\";\n\n                    this.set(\"settingsConfig.phaseENV.canCycle\", false);\n                } else if(userProfile['profile']['associated_to_pack_validation_phase'] === 'both'){\n                    const cycleViewComp = document.getElementById(\"cycleViewSection\");\n                    cycleViewComp.style.display = \"block\";\n                    const controlPanelComp = document.getElementById(\"controlPanel1\");\n                    controlPanelComp.style.display=\"flex\";\n\n                    this.set(\"settingsConfig.phaseENV.canCycle\", true);\n                } else{\n                    const cycleViewComp = document.getElementById(\"cycleViewSection\");\n                    cycleViewComp.style.display = \"block\";\n                    const controlPanelComp = document.getElementById(\"controlPanel1\");\n                    controlPanelComp.style.display=\"flex\";\n\n                    this.set(\"settingsConfig.phaseENV.canCycle\", false);\n                }\n\n                //Extract & Save First & Last Name\n                if(userProfile['profile']['associated_to_pack_validation_phase'] == \"phaseII\"){\n                    console.log(`in check1:${userProfile['profile']['associated_to_pack_validation_phase']}`)\n                    phaseIDLabelComponent.textContent = \"(Phase 2)\";\n                    this.set(\"settingsConfig.phaseENV.phase\", 2);\n                    await this.getCompletedP1PackProfiles();\n                }else{\n                    // console.log(`in check2:${userProfile['profile']['associated_to_pack_validation_phase']}`)\n                    phaseIDLabelComponent.textContent = \"(Phase 1)\";\n                    this.set(\"settingsConfig.phaseENV.phase\", 1);\n                }\n            }\n            \n        });\n    },\n    buildValidationPopupContent:function(failedObjects){\n        this.set(\"isShowConfig.isShowPopupNotification\", true);\n        //Prepare for Parent Component\n        scheduleOnce('afterRender', this, () => {\n            const popupContentSectionComponent = document.getElementById('notificationPopupContentBody');\n            if(popupContentSectionComponent){\n                popupContentSectionComponent.innerHTML = '';\n        \n                //Subtitle Section\n                const subtitleSection = document.createElement('div');\n                subtitleSection.style.fontSize = \"medium\";\n                subtitleSection.textContent = \"Execution Checklist:\"\n                popupContentSectionComponent.appendChild(subtitleSection);\n\n                //Fort loop add each fail section\n                for (const key in failedObjects) {\n                    if (Object.hasOwnProperty.call(failedObjects, key)) {\n                        const value = failedObjects[key];\n                        if(value.split(\"-\").length >= 3){\n                            //Actual Visual section, row by row\n                            const rigCheckerSection = document.createElement('div');\n                            rigCheckerSection.style.width = \"100%\";\n                            rigCheckerSection.style.display = \"flex\";\n                            rigCheckerSection.style.flexDirection = \"row\";\n                            rigCheckerSection.style.alignItems = \"center\";\n                            rigCheckerSection.style.paddingLeft = \"15px\";\n                            const rigLabelCheckerSection = document.createElement('div');\n                            rigLabelCheckerSection.textContent = `- ${value.split(\"-\")[0]}${value.split(\"-\")[1] == \"Label\" ? \"\" : \":\"}`;\n                            rigLabelCheckerSection.style.paddingLeft = value.split(\"-\")[3];\n                            rigLabelCheckerSection.style.paddingRight = \"10px\";\n                            rigLabelCheckerSection.style.fontSize = \"small\";\n                            // Label-only rows carry no separate value element, so apply the row color to the\n                            // label itself (e.g. required-permission lines render the perm name in red).\n                            if(value.split(\"-\")[1] == \"Label\"){\n                                rigLabelCheckerSection.style.color = `${value.split(\"-\")[2]}`;\n                            }\n                            rigCheckerSection.appendChild(rigLabelCheckerSection);\n                            const rigValueCheckerSection = document.createElement('div');\n                            rigValueCheckerSection.textContent = ` ${value.split(\"-\")[1] == \"Label\" ? \"\" : value.split(\"-\")[1]}`;\n                            rigValueCheckerSection.style.fontSize = \"small\";\n                            rigValueCheckerSection.style.color = `${value.split(\"-\")[2]}`;\n                            rigCheckerSection.appendChild(rigValueCheckerSection);\n                            popupContentSectionComponent.appendChild(rigCheckerSection);\n                        }\n                    }\n                }\n            }\n        });\n        \n    },\n    buildAnchorLiveViews:function(channels){\n        //Build Sections\n        const anchorSections = document.getElementById('anchorLiveViewSections');\n        if(anchorSections){\n            anchorSections.innerHTML = '';\n            for(let i=0;i<channels; i ++) {\n                const textDiv = document.createElement('div');\n                textDiv.style.fontSize = \"small\";\n                const borderSection = document.createElement('div');\n                borderSection.style.border = \"solid\";\n                borderSection.style.borderWidth = \"1px\";\n                borderSection.style.borderRadius = \"50px\";\n                borderSection.style.borderColor = \"lightgray\";\n                if(i == 0){\n                    textDiv.id = `T${i}`;\n                    textDiv.textContent = \"T:\";\n                }else{\n                    textDiv.id = `CH${i}`;\n                    textDiv.textContent = `CH${i+1}:`;\n                }\n                anchorSections.appendChild(textDiv);\n                anchorSections.appendChild(borderSection);\n            };\n        }\n    },\n    getCompletedP1PackProfiles:async function() {\n        console.log(\"called getCompletedP1PackProfiles\");\n        let data = []\n        //phaseIOnly = passed Phase I and has NOT attempted Phase II (excludes failed-P2 packs), so the\n        //Phase II \"Completed Packs\" dropdown doesn't offer packs that already failed Phase II.\n        let responseData = await sendGETRequest(`validation-packs-profiles/?phase=phaseIOnly`);\n        if(responseData != false){\n            const responseArr = responseData['data'];\n            responseArr.forEach((element, i) => {\n                const attributes  = element['attributes'];\n                let title = `${attributes['packId']}`;\n                data.push({\n                    id: i + 1,\n                    dbID:attributes['packId'],\n                    data: {\n                        ...attributes,\n                        packID: attributes.packId,  //  packId → packID\n                        validationID: attributes.validationId, //  validationId → validationID\n                        rigID: attributes.rigId //  rigId → rigID\n                    },\n                    title:title\n                })\n            });\n        }\n        this.set('frontendData.manufacturedPacksData', data);\n    \n    },\n    getCompletedFullPackProfiles:async function() {\n        console.log(\"called getCompletedFullPackProfiles\");\n        let data = []\n        let responseData = await sendGETRequest(`validation-packs-profiles/?phase=both`);\n        if(responseData != false){\n            const responseArr = responseData['data'];\n            responseArr.forEach((element, i) => {\n                const attributes  = element['attributes'];\n                let title = `${attributes['packId']}`;\n                data.push({\n                    id: i + 1,\n                    dbID:attributes['packId'],\n                    data: {\n                        ...attributes,\n                        packID: attributes.packId,  //  packId → packID\n                        validationID: attributes.validationId, //  validationId → validationID\n                        rigID: attributes.rigId //  rigId → rigID\n                    },\n                    title:title\n                })\n            });\n        }\n        this.set('frontendData.completedFullPacksData', data);\n    \n    },\n    getTabKeys: computed(function(){\n        let data = ['home', 'calibSensorList'];\n        return data;\n    }),\n    getApprovedRigCategoryList: computed(function(){\n        let data = [];\n        for (const key in this.settingsConfig.APPROVEDRIGCATEGORIES) {\n          if (this.settingsConfig.APPROVEDRIGCATEGORIES.hasOwnProperty(key)) {\n            // console.log(key);\n            data.push({\n                id:key,\n                title:this.settingsConfig.APPROVEDRIGCATEGORIES[key]\n            });\n          }\n        }\n        return data;\n    }),\n    getPackProfileList: async function() {\n        let data = []\n        let payload = {\n            page: this.paginationSearchConfig.pagination.page,\n            page_size:this.paginationSearchConfig.pagination.pageSize,\n        };\n        if ('validationIdOrdering' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.validationIdOrdering') != null){\n            payload['validationID'] = this.get('paginationSearchConfig.searchObject')['validationIdOrdering'];\n        }\n        if ('packIdOrdering' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.packIdOrdering') != null){\n            payload['packID'] = this.get('paginationSearchConfig.searchObject')['packIdOrdering'];\n        }\n        if ('phase1ValidationDateOrdering' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.phase1ValidationDateOrdering') != null){\n            payload['phase1ValidationDate'] = this.get('paginationSearchConfig.searchObject')['phase1ValidationDateOrdering'];\n        }\n        if ('phase2ValidationDateOrdering' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.phase2ValidationDateOrdering') != null){\n            payload['phase2ValidationDate'] = this.get('paginationSearchConfig.searchObject')['phase2ValidationDateOrdering'];\n        }\n        if ('overruledOrdering' in this.get('paginationSearchConfig.searchObject') && this.get('paginationSearchConfig.searchObject.overruledOrdering') != null){\n            payload['overruled'] = this.get('paginationSearchConfig.searchObject')['overruledOrdering'];\n        }\n        if ('searchValidationID' in this.get('paginationSearchConfig.searchObject') ){\n            payload['searchValidationID'] = this.get('paginationSearchConfig.searchObject')['searchValidationID'];\n        }\n        if ('searchPackID' in this.get('paginationSearchConfig.searchObject')){\n            payload['searchPackID'] = this.get('paginationSearchConfig.searchObject')['searchPackID'];\n        }\n        if ('searchPackName' in this.get('paginationSearchConfig.searchObject')){\n            payload['searchPackName'] = this.get('paginationSearchConfig.searchObject')['searchPackName'];\n        }\n        if ('searchCompany' in this.get('paginationSearchConfig.searchObject')){\n            payload['searchCompany'] = this.get('paginationSearchConfig.searchObject')['searchCompany'];\n        }\n        payload['phase'] = this.get('searchPhase') || 'both';\n        // Contractors are locked to unused packs; everyone else follows the Is-Used radio.\n        payload['isUsed'] = this.get('isContractor') ? false : this.get('searchIsUsed');\n        let responseData = await sendGETRequest('validation-packs-profiles/', payload);\n\n        if (responseData) {\n            // Update the results and cache them\n            let data = [];\n            const rawSensorProfileList = responseData['data'];\n            rawSensorProfileList.forEach((element, index)=>{\n                element=element['attributes']\n                data.push(element);\n            })\n            // console.log(\"rawSensorProfileList\")\n            // console.log(rawSensorProfileList)\n            this.set(\"frontendData.packsValidationProfileList\", data);\n            //Clear any Profile Manager batch selection — the visible rows just changed (search/sort/page).\n            this.clearBatchCBData();\n            const metaPaginationData = responseData['meta'];\n            this.set(\"paginationSearchConfig.pagination.totalPages\", metaPaginationData['pagination']['total_pages']);\n            const totalRowsComp = document.getElementById(\"totalReadings\");\n            if (totalRowsComp) {\n                totalRowsComp.textContent = `Total: ${responseData['data'].length}`;\n            }\n            this.updatePaginationList();\n        } else {\n            console.error('No data returned from search');\n        }\n        \n        return data\n    },\n    //Uncheck the header + every row checkbox and clear the batch selection. Called by the library\n    //after a batch export and by the list-refresh actions (search/sort/page) so stale selections\n    //don't survive a table reload. Mirrors the Sensor Calibration page's clearBatchCBData.\n    clearBatchCBData:function(){\n        const batchMasterElement = document.getElementById(`HEADER_CB`);\n        if(batchMasterElement){ batchMasterElement.checked = false; }\n        const currBatchCheckboxData = this.get(\"userInputtedData.batchCheckboxData\");\n        if(currBatchCheckboxData && Object.keys(currBatchCheckboxData).length > 0){\n            schedule('afterRender', this, () => {\n                (this.get(\"frontendData.packsValidationProfileList\") || []).forEach((data)=>{\n                    const validationID = data['validationId'];\n                    const batchCBElement = document.getElementById(`BATCH_CB_${validationID}`);\n                    if(batchCBElement){ batchCBElement.checked = false; }\n                    delete currBatchCheckboxData[validationID];\n                });\n            });\n        }\n        this.set('userInputtedData.batchCheckboxData', {});\n    },\n    updatePaginationList: function () {\n        let range = [];\n        const maxPageToShow = 3; // Adjust this based on how many pages you want to show in the middle\n        const paginationObj = this.get('paginationSearchConfig.pagination');\n    \n        // Always include the first page\n        range.push(1);\n    \n        if (paginationObj['totalPages'] <= maxPageToShow + 2) {\n            // If total pages are small enough, show all pages\n            for (let i = 2; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else if (paginationObj['page'] <= maxPageToShow) {\n            // Current page is within the first few pages\n            for (let i = 2; i <= maxPageToShow + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        } else if (paginationObj['page'] >= paginationObj['totalPages'] - maxPageToShow + 1) {\n            // Current page is within the last few pages\n            range.push('...');\n            for (let i = paginationObj['totalPages'] - maxPageToShow; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else {\n            // Current page is in the middle\n            range.push('...');\n            for (let i = paginationObj['page'] - 1; i <= paginationObj['page'] + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        }\n        this.set('paginationSearchConfig.packsValidationInstrumentProfilePaginationList', range);\n    },\n    sendCommandFromConsoleTxtbox: async function (){\n        const cmdConsole = document.getElementById(\"cmdConsole\");\n        console.log(`cmd:${cmdConsole.value.trim()}`)\n        switch(cmdConsole.value.trim()){\n            case \"help\":\n                showHelpNotificationBoard(this);\n                break;\n            case \"getRigActivity\":\n                buildRigActivityNotificationBoard(this);\n                cmdConsole.value = null;\n                break;\n            case \"getDataTranslatorVersion\":\n                const dataTranslatorVersion = this.get(\"settingsConfig.dataTranslatorVersion\");\n                showPopup([`Currently using data translator:${dataTranslatorVersion}`], \"warning\", 5);\n                cmdConsole.value = null;\n                break;\n            default:\n                const [cmd, value] = cmdConsole.value.trim().split(' ');\n                await outgoingMessageLibrary(this,cmd ? cmd : \"\", value ? value : \"\");\n                cmdConsole.value = null;\n                break;\n        }\n        \n    },\n    getPaginationPageSizesList: computed(function() {\n        let pageSizeList = this.get(\"paginationSearchConfig.paginationPageSizes\");\n        let data = []\n        pageSizeList.forEach((pageSize, i) => {\n            data.push({\n                id:pageSize,\n                title:`${pageSize}`\n            })\n        });\n        return data\n    }),\n    getRigList: computed('rigProfileList',function() {\n        let rigList = this.get(\"rigProfileList\");\n        let data = []\n        if(rigList){\n            rigList.forEach((element, i) => {\n                data.push({\n                    id:i + 1,\n                    dbID:element.id,\n                    title:`${element.rigName}-${element.rigIP}`,\n                    data:element\n                })\n            });\n        }\n        return data\n    }),\n    getTypeList: computed('packTypeList',function() {\n        let packTypeList = this.get(\"packTypeList\");\n        let data = []\n        if(packTypeList){\n            packTypeList.forEach((element, i) => {\n                let title = `${element.name}:${element.max}`;\n                data.push({\n                    id: i + 1,\n                    dbID:element.id,\n                    data:element,\n                    title:title\n                })\n            });\n        }\n        // console.log(data)\n        return data\n    }),\n    packTypeConfigButton:observer(\"isShowConfig.isShowPackTypeForm\",function(){\n        console.log(\"user clicked clib button \");\n        if(this.get(\"isShowConfig.isShowPackTypeForm\")){\n            this.set(\"formPackTypeData\", {});\n        }\n    }),\n    isForAnotherUserObserver:observer(\"isForAnotherUser\",async function(){\n        // Fetch / clear the user list when the \"Is this for another user?\" checkbox toggles.\n        // rigName is the operator-given label and stays put; only `username` (the assignee)\n        // is mode-specific and needs clearing so a stale selection can't leak into the POST.\n        this.set(\"formRigData.username\", undefined);\n\n        if(this.isForAnotherUser){\n            try{\n                const response = await sendGETRequest('api/auth/users/');\n                const users = (response && response.users) ? response.users : [];\n                this.set(\"userListForRig\", users);\n            }catch(err){\n                console.log(`Error fetching users: ${err.message}`);\n                showPopup(['Failed to load users list'], 'error', 4);\n                this.set(\"userListForRig\", []);\n            }\n        }else{\n            this.set(\"userListForRig\", []);\n        }\n    }),\n    rigConfigButton:observer(\"isShowConfig.isShowRigForm\",function(){\n        console.log(\"user clicked rig button \");\n        if(this.get(\"isShowConfig.isShowRigForm\")){\n            this.set(\"formRigData\", {});\n        }\n\n        //If the user profile is provided, show isForAnotherUser rig profile form creation section\n        if(this.get(\"isShowConfig.isShowRigForm\") && this.get('session').data.authenticated['userProfile'][\"profile\"]['override_power_supervisor_level']){\n            const isForAnotherUserSection = document.getElementById(\"isForAnotherUserSection\");\n            isForAnotherUserSection.style.display = \"flex\";\n        }\n    }),\n    selectedPackTypeDPCalibFormObserver:observer(\"selectedPackTypeDPCalibForm\",function(){\n        let selectedPackTypeFormTypeData = null;\n        //Components for Calibration Form\n        const minComp = document.getElementById('min');\n        const maxComp = document.getElementById('max');\n        const phase1LoadMinRangeComp = document.getElementById('phase1LoadMinRange');\n        const phase1LoadMaxRangeComp = document.getElementById('phase1LoadMaxRange');\n        const phase1UnloadMinRangeComp = document.getElementById('phase1UnloadMinRange');\n        const phase1UnloadMaxRangeComp = document.getElementById('phase1UnloadMaxRange');\n        const phase2LoadMinRange2Comp = document.getElementById('phase2LoadMinRange2');\n        const phase2LoadMaxRange2Comp = document.getElementById('phase2LoadMaxRange2');\n        const phase2UnloadMinRange2Comp = document.getElementById('phase2UnloadMinRange2');\n        const phase2UnloadMaxRange2Comp = document.getElementById('phase2UnloadMaxRange2');\n        const acceptedUnloadVarianceComp = document.getElementById('acceptedUnloadVariance');\n        const acceptedLoadVarianceComp = document.getElementById('acceptedLoadVariance');\n        const checkpointDelayComp = document.getElementById('checkpointDelay');\n        const activeCoilsCountComp = document.getElementById('activeCoilsCount');\n        const totalCoilsCountComp = document.getElementById('totalCoilsCount');\n        const referenceUnfilledCoilsPositionsComp = document.getElementById('referenceUnfilledCoilsPositions');\n        const generalCoilsPositionsComp = document.getElementById('generalCoilsPositions');\n        const packTypeComp = document.getElementById('packType');\n        if(this.get(\"selectedPackTypeDPCalibForm\") === '0'){\n            //Handle pre-loading selected calib profile data into calib form TBs\n            minComp.value ='';\n            maxComp.value ='';\n            phase1LoadMinRangeComp.value = 0;\n            phase1LoadMaxRangeComp.value = 0;\n            phase1UnloadMinRangeComp.value = 0;\n            phase1UnloadMaxRangeComp.value = 0;\n            phase2LoadMinRange2Comp.value = 0;\n            phase2LoadMaxRange2Comp.value = 0;\n            phase2UnloadMinRange2Comp.value = 0;\n            phase2UnloadMaxRange2Comp.value = 0;\n            acceptedUnloadVarianceComp.value = 0;\n            acceptedLoadVarianceComp.value = 0; \n            checkpointDelayComp.value = 0; \n            activeCoilsCountComp.value = 0; \n            totalCoilsCountComp.value = 0; \n            referenceUnfilledCoilsPositionsComp.value = ''; \n            generalCoilsPositionsComp.value = ''; \n            packTypeComp.value = 0;\n            this.set(\"formPackTypeData\",{})\n        }else{\n            const packTypeList = this.get(\"getTypeList\");\n            if(packTypeList){\n                packTypeList.forEach((packTypeProf, i)=>{\n                    if((i+1).toString() === this.get(\"selectedPackTypeDPCalibForm\")){\n                        selectedPackTypeFormTypeData = packTypeProf['data'];\n                        // console.log(\"packtype form, selected:\");\n                        // console.log(packTypeProf);\n                        // console.log(packTypeProf['data']);\n                        //Handle pre-loading selected calib profile data into calib form TBs\n                        minComp.value=packTypeProf['data']['min'];\n                        maxComp.value=packTypeProf['data']['max'];\n                        phase1LoadMinRangeComp.value = packTypeProf['data']['phase1LoadMinRange'];\n                        phase1LoadMaxRangeComp.value = packTypeProf['data']['phase1LoadMaxRange'];\n                        phase1UnloadMinRangeComp.value = packTypeProf['data']['phase1UnloadMinRange'];\n                        phase1UnloadMaxRangeComp.value = packTypeProf['data']['phase1UnloadMaxRange'];\n                        phase2LoadMinRange2Comp.value = packTypeProf['data']['phase2LoadMinRange2'];\n                        phase2LoadMaxRange2Comp.value = packTypeProf['data']['phase2LoadMaxRange2'];\n                        phase2UnloadMinRange2Comp.value = packTypeProf['data']['phase2UnloadMinRange2'];\n                        phase2UnloadMaxRange2Comp.value = packTypeProf['data']['phase2UnloadMaxRange2'];\n                        acceptedUnloadVarianceComp.value = packTypeProf['data']['acceptedUnloadVariance'];\n                        acceptedLoadVarianceComp.value = packTypeProf['data']['acceptedLoadVariance'];\n                        \n                        checkpointDelayComp.value = packTypeProf['data']['checkpointDelay'];\n                        activeCoilsCountComp.value                  =    packTypeProf['data']['coilsProfile']['activeCoilsCount']; \n                        totalCoilsCountComp.value                   =    packTypeProf['data']['coilsProfile']['totalCoilsCount'] ; \n                        referenceUnfilledCoilsPositionsComp.value   =    packTypeProf['data']['coilsProfile']['referenceUnfilledCoilsPositions'].join(','); \n                        generalCoilsPositionsComp.value             =    packTypeProf['data']['coilsProfile']['generalCoilsPositions'].join(',')          ; \n\n                        let typeValue = packTypeProf['data']['name'] != null && packTypeProf['data']['name'] != undefined && packTypeProf['data']['name'].includes(\"-\") ? packTypeProf['data']['name'].split(\"-\")[0] : \"3\";\n                        packTypeComp.value = typeValue \n                        let packTypeName = typeValue;\n\n                        this.set(\"formPackTypeData\",{\n                            id:packTypeProf['data']['id'],\n                            coilsNumber:packTypeProf['data']['coilsNumber'],\n                            channels:packTypeProf['data']['channels'],\n                            min:packTypeProf['data']['min'],\n                            max:packTypeProf['data']['max'],\n                            phase1LoadMinRange:packTypeProf['data']['phase1LoadMinRange'],\n                            phase1LoadMaxRange:packTypeProf['data']['phase1LoadMaxRange'],\n                            phase1UnloadMinRange:packTypeProf['data']['phase1UnloadMinRange'],\n                            phase1UnloadMaxRange:packTypeProf['data']['phase1UnloadMaxRange'],\n                            phase2LoadMinRange2:packTypeProf['data']['phase2LoadMinRange2'],\n                            phase2LoadMaxRange2:packTypeProf['data']['phase2LoadMaxRange2'],\n                            phase2UnloadMinRange2:packTypeProf['data']['phase2UnloadMinRange2'],\n                            phase2UnloadMaxRange2:packTypeProf['data']['phase2UnloadMaxRange2'],\n                            acceptedUnloadVariance:packTypeProf['data']['acceptedUnloadVariance'],\n                            acceptedLoadVariance:packTypeProf['data']['acceptedLoadVariance'],\n                            packType: packTypeName,\n                            checkpointDelay:            packTypeProf['data']['checkpointDelay'] ? packTypeProf['data']['checkpointDelay'] : 0,\n                            activeCoilsCount:           packTypeProf['data']['coilsProfile'] != null && packTypeProf['data']['coilsProfile']['activeCoilsCount'] != null ?          packTypeProf['data']['coilsProfile']['activeCoilsCount'] : 0,\n                            totalCoilsCount:            packTypeProf['data']['coilsProfile'] != null && packTypeProf['data']['coilsProfile']['totalCoilsCount'] != null ?           packTypeProf['data']['coilsProfile']['totalCoilsCount'] : 0,\n                            referenceUnfilledCoilsPositions:    packTypeProf['data']['coilsProfile'] != null && packTypeProf['data']['coilsProfile']['referenceUnfilledCoilsPositions'] != null ?   packTypeProf['data']['coilsProfile']['referenceUnfilledCoilsPositions'].join(',') : '',\n                            generalCoilsPositions:      packTypeProf['data']['coilsProfile'] != null && packTypeProf['data']['coilsProfile']['generalCoilsPositions'] != null ?     packTypeProf['data']['coilsProfile']['generalCoilsPositions'].join(',') : ''\n                        })\n                    }\n                });\n            }\n            if(selectedPackTypeFormTypeData == null){\n                showPopup([\"Selected pack type profile cannot be found\"], 'error');\n            }\n        }\n    }),\n    rigProfileRigFormLoad:observer(\"selectedRigDPRigForm\",function(){\n        let selectedRigFormRigData = null;\n        console.log(this.get(\"selectedRigDPRigForm\"));\n        //Components for Calibration Form\n        const rigIPComp = document.getElementById('rigIP');\n        const rigNameComp = document.getElementById('rigName');\n        const rigCategoryComp = document.getElementById('rigCategory');\n        const rigReferenceIDComp = document.getElementById('rigReferenceID');\n        const rigReferenceCalibrationValueComp = document.getElementById('rigReferenceCalibrationValue');\n        const rigReferenceCalibrationDateComp = document.getElementById('rigReferenceCalibrationDate');\n        if(this.get(\"selectedRigDPRigForm\") === '0'){\n            console.log(this.get(\"selectedRigDPRigForm\"));\n            //Handle pre-loading selected calib profile data into calib form TBs\n            rigIPComp.value       ='';\n            rigNameComp.value     ='';\n            rigCategoryComp.value ='';\n            rigReferenceIDComp.value ='';\n            rigReferenceCalibrationValueComp.value ='';\n            rigReferenceCalibrationDateComp.value ='';\n            this.set(\"formRigData\",{})\n        }else{\n\n            const rigData = this.get(\"getRigList\");\n            if(rigData){\n                rigData.forEach((rigProf, i)=>{\n                    if((i+1).toString() === this.get(\"selectedRigDPRigForm\")){\n                        selectedRigFormRigData = rigProf['data'];\n                        console.log(\"rig form, selected:\");\n                        console.log(rigProf);\n                        console.log(rigProf['data']);\n                        const [date, time] = rigProf['data']['rigReferenceCalibrationDate'].split(\" \");\n                        //Handle pre-loading selected calib profile data into calib form TBs\n                        rigIPComp.value=rigProf['data']['rigIP'];\n                        rigNameComp.value=rigProf['data']['rigName'];\n                        rigCategoryComp.value=rigProf['data']['rigCategory'].toLowerCase();\n                        rigReferenceIDComp.value=rigProf['data']['rigReferenceID'];\n                        rigReferenceCalibrationValueComp.value=rigProf['data']['rigReferenceCalibrationValue'];\n                        rigReferenceCalibrationDateComp.value=`${date}T${time}`;\n                        this.set(\"formRigData\",{ \n                            id:rigProf.dbID,\n                            rigIP:rigProf['data']['rigIP'],\n                            rigName:rigProf['data']['rigName'],\n                            rigCategory:rigProf['data']['rigCategory'],\n                            creationEmployee:rigProf['data']['creationEmployee'],\n                            rigReferenceID:rigProf['data']['rigReferenceID'],\n                            rigReferenceCalibrationValue:rigProf['data']['rigReferenceCalibrationValue'],\n                            rigReferenceCalibrationDate:rigProf['data']['rigReferenceCalibrationDate'],\n                        })\n                    }\n                });\n            }\n            if(selectedRigFormRigData == null){\n                showPopup([\"Selected rig profile cannot be found\"], 'error');\n            }\n        }\n    }),\n    packProfileLoadPhaseI:observer(\"selectedPackTypeDP\",function(){\n        if(this.get(\"selectedPackTypeDP\") === \"0\"){\n            resetDataSelectedPackTypeProfile(this);\n            resetPackProgressionBar(this);\n        }else{\n            const packTypeData = this.get(\"getTypeList\");\n            if(packTypeData){\n                packTypeData.forEach((typeProf, i)=>{\n                    if((i+1).toString() === this.get(\"selectedPackTypeDP\")){\n                        this.set(\"userInputtedData.selectedPackType\", typeProf);\n                        console.log(this.get('userInputtedData.selectedPackType'))\n                    }\n                });\n            }\n            const selectedProfile = this.get(\"userInputtedData.selectedPackType\")['data'];\n            //Show pack progress bar \n            const progressBarSection = document.getElementById('packsProgressionViewSection');   \n            const progressValueText = document.getElementById('packsProgressionValue');\n            if(progressBarSection != null && progressValueText != null){ \n                progressBarSection.style.display=\"flex\";\n                progressValueText.textContent = ``;\n            }\n            //Initialize Anchor Live View Section\n            initializeAndCreateAnchorLiveView(this, Number.parseInt(selectedProfile.coilsProfile.totalCoilsCount)+1);\n\n        }\n        this.set(\"dashboardStatusBarData.status\",generalStatusLibrary(602));\n        \n    }),\n    packProfileLoadPhaseII:observer(\"manufacturedPackProfileDP\",async function(){\n        if(this.get(\"manufacturedPackProfileDP\") === \"0\"){\n            resetDataCompletedPackTypeProfile(this);\n            resetPackProgressionBar(this);\n        }else{\n            const manufacturedPacksData = this.get(\"frontendData.manufacturedPacksData\");\n            if(manufacturedPacksData){\n                manufacturedPacksData.forEach((typeProf, i)=>{\n                    if((i+1).toString() === this.get(\"manufacturedPackProfileDP\")){\n                        this.set(\"manufacturedPackType\", typeProf);\n                        console.log(this.get('manufacturedPackType'))\n                    }\n                });\n            }\n            const selectedProfile = this.get(\"manufacturedPackType\")['data'];\n            let responseData = await sendGETRequest(`validation_pack_type/${selectedProfile['packType']}/`);\n            if(responseData != false){\n                const responseArr = responseData['data'];\n                console.log(\"packProfileLoadPhaseII observer packtyp obj\")\n                const manufacturedPackType = this.get('manufacturedPackType');\n                manufacturedPackType['data']['packTypeObj'] = responseArr['attributes']\n                console.log(manufacturedPackType)\n                this.set(\"manufacturedPackType\", manufacturedPackType);\n            }\n            //Show pack progress bar \n            const progressBarSection = document.getElementById('packsProgressionViewSection');   \n            const progressValueText = document.getElementById('packsProgressionValue');\n            if(progressBarSection != null && progressValueText != null){ \n                progressBarSection.style.display=\"flex\";\n                progressValueText.textContent = ``;\n            }\n\n            //Initialize Anchor Live View Section\n            initializeAndCreateAnchorLiveView(this, Number.parseInt( selectedProfile.packTypeObj.coilsProfile.totalCoilsCount) + 1);\n        }\n        this.set(\"dashboardStatusBarData.status\",generalStatusLibrary(602));\n    }),\n    packProfileLoadCompleted:observer(\"completedPackProfileDP\",function(){\n        if(this.get(\"completedPackProfileDP\") === \"0\"){\n            resetDataSelectedPackTypeProfile(this);\n            resetPackProgressionBar(this);\n        }else{\n            const completedPacksData = this.get(\"frontendData.completedFullPacksData\");\n            if(completedPacksData){\n                completedPacksData.forEach((typeProf, i)=>{\n                    if((i+1).toString() === this.get(\"completedPackProfileDP\")){\n                        this.set(\"completedPackProfile\", typeProf);\n                    }\n                });\n            }\n            console.log(this.get(\"completedPackProfile\"));\n            const packTypeData = this.get(\"getTypeList\");\n            if(packTypeData){\n                packTypeData.forEach((typeProf, i)=>{\n                    console.log(typeProf['data']['id'])\n                    if(typeProf['data']['id'] == this.get(\"completedPackProfile\")['data']['packType']){\n                        console.log(typeProf);\n                        this.set(\"userInputtedData.selectedPackType\", typeProf);\n                    }\n                });\n            }\n            const selectedProfile = this.get(\"userInputtedData.selectedPackType\")['data'];\n            //Show pack progress bar \n            const progressBarSection = document.getElementById('packsProgressionViewSection');   \n            const progressValueText = document.getElementById('packsProgressionValue');\n            if(progressBarSection != null && progressValueText != null){ \n                progressBarSection.style.display=\"flex\";\n                progressValueText.textContent = ``;\n            }\n\n            //Initialize Anchor Live View Section\n            initializeAndCreateAnchorLiveView(this, Number.parseInt(selectedProfile.coilsProfile.activeCoilsCount)+1);\n        }\n        this.set(\"dashboardStatusBarData.status\",generalStatusLibrary(602));\n    }),\n    rigProfileLoad:observer(\"selectedRigDP\",function(){\n        // console.log('triggered rigProfileLoad');\n        webSocketDisconnect(this);\n        this.set(\"userInputtedData.selectedRigProfile\", null);\n        if(this.get(\"selectedRigDP\") === \"0\"){\n            webSocketDisconnect(this);\n        }else{\n            const rigData = this.get(\"getRigList\");\n            if(rigData){\n                rigData.forEach((rig,i)=>{\n                    if((i + 1).toString() === this.get(\"selectedRigDP\")){\n                        this.set(\"userInputtedData.selectedRigProfile\", rig);\n                    }\n                });\n            }\n            if(this.get(\"userInputtedData.selectedRigProfile\") != null){\n                // phase1TestMessage(this);\n                initializeConnection(this,this.get(\"userInputtedData.selectedRigProfile\")['data']['rigIP']);\n                // updateStepperPressureControlPanel(this, this.get(\"userInputtedData.selectedRigProfile\")['data']['rigCategory']);\n            }\n        } \n    }),\n    dashboardStatusBarObserver: observer(\n        \"dashboardStatusBarData.status\",\n        \"dashboardStatusBarData.connection\",\n        \"dashboardStatusBarData.calibration\",\n        function () {\n            updateRigActivity(this);\n            // console.log(\"refresh dashboard status bar!\");\n            const statusObj = this.get(\"dashboardStatusBarData\");\n            const statusComponent = document.getElementById(\"statusStatus\");\n            const connectionComponent = document.getElementById(\"connectionStatus\");\n            const calibrationComponent = document.getElementById(\"calibrationStatus\");\n            if(statusComponent && connectionComponent && calibrationComponent ){\n                statusComponent.style.color = statusObj['status']['color'];\n                statusComponent.textContent = statusObj['status']['value'];\n                connectionComponent.style.color = statusObj['connection']['color'];\n                connectionComponent.textContent = statusObj['connection']['value'];\n                calibrationComponent.style.color = statusObj['calibration']['color'];\n                calibrationComponent.textContent = statusObj['calibration']['value'];\n            }\n        }\n    ),\n    phaseENVObeserver1: observer(\n        \"settingsConfig.phaseENV.phase\",\n        function () {\n            const phaseIDLabelComponent = document.getElementById(\"phaseValidationLabel\");\n            phaseIDLabelComponent.style.fontSize = 'large';\n            phaseIDLabelComponent.style.fontStyle = 'italic'\n            phaseIDLabelComponent.style.marginLeft = '10px';\n            const currPhase = this.get('settingsConfig.phaseENV.phase');\n            // console.log(`currPhase:${currPhase}`)\n            if(currPhase === 1){\n                phaseIDLabelComponent.textContent = \"(Phase 1)\";\n            }else{\n                phaseIDLabelComponent.textContent = \"(Phase 2)\";\n                this.getCompletedP1PackProfiles();\n            }\n        }\n    ),\n    actions: {\n        // Clear both pack-type filters and re-fetch the unfiltered list.\n        resetPackTypeFilter(){\n            this.set(\"packTypeFilterPackNumber\", \"\");\n            this.set(\"packTypeFilterMaxLength\", \"\");\n            this.send('applyPackTypeFilter');\n        },\n        // Refetch pack types with the Pack-number / Max-Length filters applied.\n        // Empty inputs are dropped; packNumber must be >= 3 if provided.\n        async applyPackTypeFilter(){\n            try{\n                const rawPackNumber = (this.get(\"packTypeFilterPackNumber\") ?? \"\").toString().trim();\n                const rawMaxLength  = (this.get(\"packTypeFilterMaxLength\")  ?? \"\").toString().trim();\n                const query = {};\n                if(rawPackNumber !== \"\"){\n                    const pn = Number(rawPackNumber);\n                    if(!Number.isFinite(pn) || pn < 3){\n                        showPopup(['Pack must be a number >= 3'], 'warning', 3);\n                        return;\n                    }\n                    query.packNumber = pn;\n                }\n                if(rawMaxLength !== \"\"){\n                    const ml = Number(rawMaxLength);\n                    if(!Number.isFinite(ml)){\n                        showPopup(['Max Length must be a number'], 'warning', 3);\n                        return;\n                    }\n                    query.maxLength = ml;\n                }\n                const result = await this.get(\"store\").query('packs-validation-type', query);\n                this.set(\"packTypeList\", result);\n                const selectComp = document.getElementById(\"selectedPackType\");\n                if(selectComp){ selectComp.value = \"0\"; }\n                this.set(\"selectedPackTypeDP\", \"0\");\n            }catch(err){\n                console.log(`Error in applyPackTypeFilter: ${err.message}`);\n                showPopup([`Error applying filter: ${err.message}`], 'error', 5);\n            }\n        },\n        startVerificationPress(elementID, holdDuration, mode) {\n            try{\n\n                this.set('isTriggered', false);\n                \n                const button = document.getElementById(elementID);\n                button.textContent=`0%`;\n                const startTime = Date.now();\n                this.set(\n                    'progressInterval',\n                    setInterval(() => {\n                    const elapsedTime = Date.now() - startTime; \n                    const progress = Math.min((elapsedTime / holdDuration) * 100, 100); // Calculate progress\n                    button.textContent=`${progress.toFixed(1)}%`;\n                \n                    if (progress === 100) { \n                        this.set('isTriggered', true);\n                        this.send('triggerAction',elementID, mode); \n                        clearInterval(this.progressInterval); \n                    }\n                    }, 50) \n                );\n            }catch(err){\n                console.log(`Error in startVerificationPress: ${err.message}`);\n                \n            }\n        },\n        cancelVerificationPress(elementID, mode) {\n            if (!this.isTriggered) {\n                const button = document.getElementById(elementID);\n                button.textContent=mode;\n\n                clearInterval(this.progressInterval); // Stop progress\n            }\n        },\n        async triggerAction(elementID, mode) {\n            // Perform the action after hold duration\n            const button = document.getElementById(elementID);\n            button.textContent=mode;\n            console.log(`triggerAction, elementID:${elementID}`);\n            switch(elementID){\n                case \"resetCalibrationButton\":\n                    this.get(\"emergencyController\").abort();\n                    resetLog(this,'live');\n                    resetLog(this,'phaseI');\n                    resetLog(this,'phaseII');\n                    if (this.chart) {\n                        this.chart.data.labels = [];\n                        this.chart.data.datasets = [];\n                        this.chart.update();\n                    }\n                    this.set('emergencyController', new AbortController());\n                    updatePacksValidationStatusModule(this, 551);\n                    webSocketDisconnect(this);\n                    hardResetModule(this)\n                    break;\n                case \"stopCalibrationButton\":\n                    this.get(\"emergencyController\").abort();\n                    // updatePacksValidationStatusModule(this, 551);\n                    break;\n                case \"phaseIButton\":\n                    if(JSON.stringify(this.get(\"dashboardStatusBarData\")['status']) === JSON.stringify(generalStatusLibrary(603))){\n                        // Create the pack profile up front so per-stage breadcrumbs have an ID to PATCH against.\n                        const created = await createPhaseIPackProfile(this);\n                        if(created != null){\n                            getPacksValidationPhaseISchematics(this, null);\n                        }\n                    }\n                    else{\n                        showPopup([\"Please validate!\"], 'warning', 3);\n                    }\n                    break;\n                case \"phaseIIButton\":\n                    if(JSON.stringify(this.get(\"dashboardStatusBarData\")['status']) === JSON.stringify(generalStatusLibrary(603))){\n\n                        getPacksValidationPhaseIISchematics(this, null)\n                    }\n                    else{\n                        showPopup([\"Please validate!\"], 'warning', 3);\n                    }\n                    break;\n            }\n        },\n        assistiveTooltip(type){\n            return showPopup(assistiveToolTipLibrary(type).split(\"\\n\"), \"notification\",5);\n        },\n        //Pack ID header: a short click sorts (packIdHeaderClick); a press-and-hold (1000ms) shows the\n        //Pack ID structure tooltip instead. The long-press sets a flag that suppresses the click that\n        //fires on release, so a held header never also sorts.\n        packIdHeaderPressStart(){\n            this._packIdLongPressed = false;\n            this._packIdPressTimer = setTimeout(() => {\n                this._packIdLongPressed = true;\n                //Show the breakdown for 10s (double the shared 5s tooltip) so there's time to read it.\n                showPopup(assistiveToolTipLibrary('packIdStructureTooltip').split(\"\\n\"), \"notification\", 10);\n            }, 1000);\n        },\n        packIdHeaderPressEnd(){\n            if(this._packIdPressTimer){\n                clearTimeout(this._packIdPressTimer);\n                this._packIdPressTimer = null;\n            }\n        },\n        packIdHeaderClick(){\n            if(this._packIdLongPressed){\n                this._packIdLongPressed = false; //consume the long-press; don't sort\n                return;\n            }\n            this.send('columnCycleOrdering', 'packIdOrdering');\n        },\n        reconnectWebSocket(){\n            websocketReconnect(this);\n        },\n        viewPacksData(){\n            if(JSON.stringify(this.get(\"dashboardStatusBarData\")['calibration']) === JSON.stringify(packStatusLibrary(551))){\n                const selectedRigProfile = this.get('userInputtedData.selectedRigProfile');\n                const selectedPackType = this.get('userInputtedData.selectedPackType');\n                const selectedPackData = this.get(\"userInputtedData.selectedPackData\");\n                if(selectedRigProfile != null && selectedPackType != null && JSON.stringify(selectedPackData) != \"{}\"){\n                    const data = buildAndGetDataFormat1(this);\n                    let sensorData = {...data['sensorProfileData'],\n                        type:selectedPackType['type'],\n                        rigReferenceID: selectedRigProfile['data']['rigReferenceID'],\n                        rigReferenceCalibrationValue: selectedRigProfile['data']['rigReferenceCalibrationValue'],\n                        rigReferenceCalibrationDate: selectedRigProfile['data']['rigReferenceCalibrationDate'],\n                        minLimit: selectedPackType['data']['minLimit'],\n                        maxLimit: selectedPackType['data']['maxLimit'],\n                    }\n                    packProfileDetailBoard(this, false, \n                        sensorData, data['packsValidationData']['phaseILookUpArray'], \n                                    data['packsValidationData']['phaseIICalibratedDataArray'], \n                                    data['packsValidationData']['phaseIICalibratedCurrentArray'], \n                                    data['packsValidationData']['phaseIICalibratedSlopeArray'], \n                                    data['packsValidationData']['phaseIICalibratedOffsetArray']);\n                }\n\n            }else{\n                showPopup([\"Cannot open because calibration status is not Idle\"], 'warning', 3);\n            }\n            this.set('isShowConfig.isShowSettings', false);\n        },\n        viewPhaseIICalibratedData(){\n            if(JSON.stringify(this.get(\"dashboardStatusBarData\")['calibration']) === JSON.stringify(packStatusLibrary(551))){\n                // buildPhaseIIConclusionNotificationBoard(this);\n            }else{\n                showPopup([\"Cannot open because calibration status is not Idle\"], 'warning', 3);\n            }\n            this.set('isShowConfig.isShowSettings', false);\n        },\n        cycleView(){\n            // Toggle states: switch between home and calibSensorList\n            if (this.settingsConfig.tabs.home) {\n              this.set('settingsConfig.tabs', { home: false, calibSensorList: true });\n            } else {\n              this.set('settingsConfig.tabs', { home: true, calibSensorList: false });\n            }\n\n        },\n        viewRigNotifications(){\n            buildRigNotificationNotificationBoard(this);\n            this.set('isShowConfig.isShowSettings', false);\n        },\n        viewPhaseIIConclusionCalibrationSheet(){\n            // buildPhaseIIConclusionNotificationBoard(this)\n        },\n        //Profile Manager: View & Export / Direct Export the ticked profiles (one PDF each).\n        async batchProfile(isVisiblePopup){\n            await buildBatchProfileSheet(this, isVisiblePopup);\n        },\n        //Header/row checkbox handling for the Profile Manager batch selection.\n        rowCheckbox(checkboxElementID){\n            const cbElement = document.getElementById(checkboxElementID);\n            if(!cbElement){ return; }\n            const currBatchCheckboxData = this.get(\"userInputtedData.batchCheckboxData\");\n            if(checkboxElementID === \"HEADER_CB\"){\n                (this.get(\"frontendData.packsValidationProfileList\") || []).forEach((data)=>{\n                    const validationID = data['validationId'];\n                    const batchCBElement = document.getElementById(`BATCH_CB_${validationID}`);\n                    if(cbElement.checked){\n                        if(batchCBElement){ batchCBElement.checked = true; }\n                        currBatchCheckboxData[validationID] = {\"validationID\":validationID};\n                    }else{\n                        if(batchCBElement){ batchCBElement.checked = false; }\n                        delete currBatchCheckboxData[validationID];\n                    }\n                });\n            }else{\n                const validationID = checkboxElementID.split(\"_\")[2];\n                if(cbElement.checked){\n                    currBatchCheckboxData[validationID] = {\"validationID\":validationID};\n                }else{\n                    delete currBatchCheckboxData[validationID];\n                }\n            }\n            this.set('userInputtedData.batchCheckboxData', currBatchCheckboxData);\n        },\n        async getPackProfile(validationID){\n\n            let responseData = await sendGETRequest(`validation_pack_profile/${validationID}/`);\n            if(responseData != false){\n                const data = responseData['data'];\n                const packProfile = data['pack_profile'];\n                const rigProfile = data['rig_profile'];\n                const packType = data['pack_type'];\n                const packData = data['pack_data'];\n\n                packProfileDetailBoard(this, true, packProfile, rigProfile, packType, packData);\n                // console.log(\"you selected\") \n                // console.log(data);\n            }\n        },\n        scrollTop() {\n            window.scrollTo({\n                top: 0,\n                behavior: 'smooth', // Adds smooth scrolling\n            });\n            this.set('isShowConfig.isShowSettings', false);\n        },\n        scrollDashboard(){\n            const element = document.getElementById(\"dashboardTitle\");\n            if (element) {\n                element.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n                this.set('isShowConfig.isShowSettings', false);\n            }\n        },\n        copyChatToClipboard(elementID) {\n            console.log(\"copyChatToClipboard\");\n            const chatBox = document.getElementById(elementID);\n            if (chatBox) {\n                const range = document.createRange();\n                range.selectNodeContents(chatBox);\n                const selection = window.getSelection();\n                selection.removeAllRanges();\n                selection.addRange(range);\n                document.execCommand('copy');\n                // alert('Chat copied to clipboard!');\n            }\n        },\n        unlockChatScroll(elementID) {\n            console.log(\"unlockChatScroll\");\n            this.set(`settingsConfig.chatLocked.${elementID}`, false);\n            // alert('Chat scrolling unlocked!');\n        },\n        lockChatScroll(elementID) {\n            console.log(\"lockChatScroll\");\n            this.set(`settingsConfig.chatLocked.${elementID}`, true);\n            const chatBox = document.getElementById(elementID);\n            if (chatBox) {\n                chatBox.scrollTop = chatBox.scrollHeight;\n            }\n            // alert('Chat scrolling locked!');\n        },\n        showLiveGraphs(){\n            const curr = this.get(\"isShowConfig.isShowLiveGraphs\");\n            this.set('isShowConfig.isShowLiveGraphs',!curr);\n        },\n        showCommandConsole(){\n            const curr = this.get(\"isShowConfig.isShowCommandConsole\");\n            this.set('isShowConfig.isShowCommandConsole',!curr);\n\n        },\n        async sendCommand(){\n            await this.sendCommandFromConsoleTxtbox();\n        },\n        async onKeyDown(event){\n            if (event.key === 'Enter'){\n                await this.sendCommandFromConsoleTxtbox();\n            }\n        },\n        exportChatToFile(elementID) {\n            console.log(\"copyChatToClipboard\");\n            const chatBox = document.getElementById(elementID);\n            if (chatBox) {\n                const chatContent = chatBox.innerText;\n                const blob = new Blob([chatContent], { type: 'text/plain;charset=utf-8' });\n                const downloadLink = document.createElement('a');\n                downloadLink.href = window.URL.createObjectURL(blob);\n                downloadLink.download = 'chat-log.txt';\n                downloadLink.click();\n            }\n        },\n        async controlPanel(type, value){\n            // console.log(`WS+JOG=${value},1`);\n            await outgoingMessageLibrary(this, type, value);\n        },\n        //Backdrop (click-outside) close. Honors the dismissable lock: during the validation\n        //load/unload + reflash steps the popup is locked so an accidental outside-click can't\n        //close it. Programmatic closeNotificationPopup (Ready/Abort/timer) always works.\n        dismissPopupViaBackdrop(){\n            if(this.get('isShowConfig.isPopupDismissable') === false){\n                return;\n            }\n            this.send('closeNotificationPopup');\n        },\n        closeNotificationPopup(){\n            //If a timed load/unload popup is open, stop its interval + resolve its promise before tearing\n            //down the DOM. Otherwise the orphaned timer keeps ticking against a now-null progress bar\n            //(console error) and double-runs against the next timer (progress bar spams on restart).\n            if(this._activeTimerCleanup){\n                const cleanup = this._activeTimerCleanup;\n                this._activeTimerCleanup = null;\n                cleanup();\n            }\n            const notificationPopupContentBody = document.getElementById('notificationPopupContentBody');\n            notificationPopupContentBody.innerHTML=\"\";\n            this.set('isShowConfig.isShowPopupNotification', false);\n            //Re-enable backdrop dismissal for the next (non-locked) popup.\n            this.set('isShowConfig.isPopupDismissable', true);\n\n        },\n        cycleVisualSettings(){\n            this.set('isShowConfig.isShowSettings', !this.get(\"isShowConfig.isShowSettings\"));\n        },\n        cycleIsRepair(){\n            this.set(\"settingsConfig.phaseENV.isRepairing\", !this.get('settingsConfig.phaseENV.isRepairing'));\n            if(this.get('settingsConfig.phaseENV.isRepairing')){\n                this.getCompletedFullPackProfiles();\n            }\n            console.log(this.get('settingsConfig.phaseENV.isRepairing'));\n            resetDataSelectedPackTypeProfile(this);\n            resetPackProgressionBar(this);\n        },\n        validatePriorCalibration(){\n            validateAllForms(this);\n        },\n        updateRigFormData(event) {\n            const key = event.target.id;\n            const value = event.target.value;\n            // console.log(`key:${key}, value:${value}`);\n            if (key === 'rigCategory'){\n                this.set(`formRigData.${key}`, value.toUpperCase()); \n            }else if (key === 'rigReferenceCalibrationDate'){\n                this.set(`formRigData.${key}`, formatDateTimeFromInputField(value)); \n            }\n            else{\n                this.set(`formRigData.${key}`, value); \n\n            }\n          console.log(this.get(\"formRigData\"));\n        },\n        updatePackTypeFormData(event) {\n            try{\n\n                const key = event.target.id;\n                const value = event.target.value;\n                console.log(`type:${key}, value:${value}`);\n                if(key===\"checkpointPositions\"){   \n                    try{\n                        \n                        this.set(`formPackTypeData.${key}`, value.split(','));\n                    }catch(err){\n                        showPopup(['Checkpoint Positions is in incorrect syntax.\\nPlease follow this sample:0.00,8.33,25.00,50.00,75.00,100.00,125.00'],'error');\n                    }\n                }else if (key === \"packType\"){\n                    let sizeValue = `${value}-Pack`;\n                    this.set(`formPackTypeData.packType`, sizeValue);\n                    console.log(`you selected sensor type : ${sizeValue}`);\n                \n                }\n                else{\n                    this.set(`formPackTypeData.${key}`, value);\n                    \n                }\n            }catch(err){\n                console.log(`Error in updatePackTypeFormData: ${err.message}`);\n                \n            }\n        },\n        updatePackFormData(event) {\n            const key = event.target.id;\n            const value = event.target.value;\n            if ((value == '' || value == null) && (key in this.get(\"userInputtedData.selectedPackData\"))){\n                delete this.get('userInputtedData.selectedPackData')[key];\n            }else{\n                this.set(`userInputtedData.selectedPackData.${key}`, value); \n            }\n\n            //Immediately reset status to Not Validated if the user changes any textboxes when it is already Validated\n            if(JSON.stringify(this.get(\"dashboardStatusBarData\")['status']) === JSON.stringify(generalStatusLibrary(603))){\n                this.set(\"dashboardStatusBarData.status\",generalStatusLibrary(602));\n            }\n        },\n        updateSearchObjData(event) {\n            const key = event.target.id;\n            const value = event.target.value;\n            console.log(`key:${key}, value:${value}`)\n            if ((value == '' || value == null) && (key in this.get(\"paginationSearchConfig.searchObject\"))){\n                delete this.get('paginationSearchConfig.searchObject')[key];\n            }else if (key == 'page_size'){\n                this.set(`paginationSearchConfig.pagination.pageSize`, value); \n                this.getPackProfileList();\n            }\n            else{\n                this.set(`paginationSearchConfig.searchObject.${key}`, value); \n            }\n        },\n        choseRig(value) {\n            // console.log(\"User selected:\" + value);\n            let oldRigObject = this.get(\"rigObject\");\n            if(oldRigObject != null && oldRigObject[\"ip\"] != null ){\n                oldRigObject[\"ip\"] = value;\n                this.set(\"oldRigObject\", oldRigObject);\n            }\n        },\n        choseSensorType(value) {\n            // console.log(\"User selected:\" + value);\n            let oldRigObject = this.get(\"rigObject\");\n            if(oldRigObject != null && oldRigObject['sensorType'] != null ){\n                oldRigObject['sensorType'] = value;\n                this.set(\"oldRigObject\", oldRigObject);\n            }\n        },\n        cycleEditMode(){\n            // console.log(`click edit mode:${type}`)\n            this.set(\"isShowConfig.isFormEditing\", !this.isShowConfig.isFormEditing);\n        },\n        cyclePhase(){\n            console.log(`called cyclePhase`)\n            if(this.get('settingsConfig.phaseENV.phase') === 1){\n                this.set('settingsConfig.phaseENV.phase', 2);\n            }else{\n                this.set('settingsConfig.phaseENV.phase', 1);\n            }\n            this.set(\"dashboardStatusBarData.status\",generalStatusLibrary(602));\n            destroyAndClearAnchorLiveView(this);\n            this.set('selectedPackTypeDP', '0');\n            this.set('manufacturedPackProfileDP', '0');\n            // this.set('selectedRigDP', '0');\n            this.set('isShowConfig.isShowSettings', false);\n\n        },\n        cycleAddNewRigMode(){\n            this.set(\"isShowConfig.isShowRigForm\", !this.isShowConfig.isShowRigForm);\n            this.set(\"isShowConfig.isShowPackTypeForm\", false);\n            this.set('isShowConfig.isShowSettings', false);\n        },\n        cycleAddNewPackTypeMode(){\n            this.set(\"isShowConfig.isShowPackTypeForm\", !this.isShowConfig.isShowPackTypeForm);\n            this.set(\"isShowConfig.isShowRigForm\", false);\n            this.set('isShowConfig.isShowSettings', false);\n        },\n        cycleInternalHotButton(){\n            if(this.get(\"settingsConfig.internalVersion\") === \"v1.0\"){\n                this.set(\"settingsConfig.internalVersion\", \"v2.0\");\n                showPopup([`Currently using internal version: v2.0`], \"notification\", 5);\n            }else{\n                this.set(\"settingsConfig.internalVersion\", \"v1.0\");\n                showPopup([`Currently using internal version: v1.0`], \"notification\", 5);\n            }\n            this.set('isShowConfig.isShowSettings', false);\n        },\n        async formDeleteButton(type){\n            switch(type){\n                case \"packType\":\n                    const packTypeSubmittedObject = this.get(\"formPackTypeData\");\n                    if(packTypeSubmittedObject == null || packTypeSubmittedObject == {}){\n                        showPopup(['Please select a calibration profile you wish to delete'],\"warning\");\n                    }else{\n                        if (await sendDELETERequest(`validation_pack_type/${packTypeSubmittedObject['id']}`, packTypeSubmittedObject)){\n                            showPopup([\"Calibration Profile Deleted Successfully!\"],'success');\n                            resetProfile(\"packType\"); \n                            window.location.reload();\n    \n                        }else{\n                            showPopup([\"Calibration Profile Delete Failed!\",'error']);\n                        };\n                    }\n                    break;\n                case \"rig\":\n                    const rigSubmittedObject = this.get(\"formRigData\");\n                    if(rigSubmittedObject == null || rigSubmittedObject == {}){\n                        showPopup(['Please select a calibration profile you wish to delete'],\"warning\");\n                    }else{\n                        if (await sendDELETERequest(`rig_profile_view/${rigSubmittedObject['id']}`, rigSubmittedObject)){\n                            showPopup([\"Rig Profile Deleted Successfully!\"],'success');\n                            resetProfile(\"rig\"); \n                            window.location.reload();\n    \n                        }else{\n                            showPopup([\"Rig Profile Delete Failed!\",'error']);\n                        };\n                    }\n\n                    break;\n            }\n        },\n        async formSaveButton(type){\n            console.log(`formSaveButton:${type}`)\n            switch(type){\n                case \"packType\":\n                    const validationKeys = ['min','max'];\n                    const packTypeSubmittedObject = this.get(\"formPackTypeData\");\n                    packTypeSubmittedObject[\"creationDate\"] = getCurrentDateTime();\n                    //Tier 1 Validation\n                    let missingKeysMsgArr = [];\n                    validationKeys.forEach((value, index)=>{\n                        if ((!packTypeSubmittedObject.hasOwnProperty(value)) ||(packTypeSubmittedObject[value] === '') || (packTypeSubmittedObject[value] === null)) {\n                            missingKeysMsgArr.push(\"Missing \" + value + \"; \");\n                        }\n                    })\n                    console.log(packTypeSubmittedObject);\n                    const userProfile = this.get('session').data.authenticated['userProfile'];\n                    packTypeSubmittedObject[\"creationEmployee\"] = `${userProfile['profile']['first_name']} ${userProfile['profile']['last_name']}`;\n                    packTypeSubmittedObject[\"coilsProfile\"] = {};\n                    packTypeSubmittedObject['coilsProfile']['activeCoilsCount'] = Number.parseInt(packTypeSubmittedObject['activeCoilsCount']);\n                    packTypeSubmittedObject['coilsProfile']['totalCoilsCount'] = Number.parseInt(packTypeSubmittedObject['totalCoilsCount']);\n                    packTypeSubmittedObject['coilsProfile']['referenceUnfilledCoilsPositions'] = packTypeSubmittedObject['referenceUnfilledCoilsPositions'].split(\",\").map(Number);\n                    packTypeSubmittedObject['coilsProfile']['generalCoilsPositions'] = packTypeSubmittedObject['generalCoilsPositions'].split(\",\").map(Number);\n                    delete packTypeSubmittedObject.activeCoilsCount;\n                    delete packTypeSubmittedObject.totalCoilsCount;\n                    delete packTypeSubmittedObject.referenceUnfilledCoilsPositions;\n                    delete packTypeSubmittedObject.generalCoilsPositions;\n                    if(missingKeysMsgArr.length !=0){\n                        showPopup(missingKeysMsgArr,'error', 5);\n                    }else{\n                        if(this.isShowConfig.isFormEditing){\n                            //Handle For Edit Mode\n                            if (await sendPATCHRequest(`validation_pack_type/${packTypeSubmittedObject['id']}`, packTypeSubmittedObject)){\n                                showPopup([\"Calibration Profile Edited Successfully!\"],'success');\n                                resetProfile(\"packType\"); \n                                window.location.reload();\n        \n                            }else{\n                                showPopup([\"Calibration Profile Edit Failed!\",'error']);\n                            };\n                            \n    \n                        }else{\n                            //When adding, the backend does not need id key value\n                            delete packTypeSubmittedObject.id;\n                            console.log(\"Adding\");\n                            //Handle For Add Mode\n                            if (await sendPOSTRequest(\"validation_pack_type\", packTypeSubmittedObject)){\n                                showPopup([\"Calibration Profile Created Successfully!\"],'success');\n                                resetProfile(\"packType\"); \n                                window.location.reload();\n        \n                            }else{\n                                showPopup([\"Calibration Profile Creation Failed!\",'error']);\n                            };\n                            \n                        }\n                    }\n                    break;\n                case \"rig\":\n                    console.log(`Adding Rig`)\n                    const isForAnotherUser = this.get(\"isForAnotherUser\") === true;\n                    // rigName is always required (operator-given label). `username` is only\n                    // required when assigning the rig to another user.\n                    const validationKeys2 = isForAnotherUser\n                        ? ['rigName','username','rigIP','rigCategory','creationDate']\n                        : ['rigName','rigIP','rigCategory','creationDate'];\n                    const rigSubmittedObject = this.get(\"formRigData\");\n                    rigSubmittedObject[\"creationDate\"] = getCurrentDateTime();\n                    rigSubmittedObject[\"isForAnotherUser\"] = isForAnotherUser;\n                    //Tier 1 Validation\n                    let missingKeysMsgArr2 = [];\n                    validationKeys2.forEach((value, index)=>{\n                        if ((rigSubmittedObject[value] == '') || (rigSubmittedObject[value] == null)) {\n                            missingKeysMsgArr.push(\"Missing \" + value + \"; \")\n                            }\n                    })\n                    const userProfile2 = this.get('session').data.authenticated['userProfile'];\n                    if(isForAnotherUser){\n                        // Let the BE derive company / creationEmployee from the selected username.\n                        rigSubmittedObject[\"company\"] = undefined;\n                        rigSubmittedObject[\"creationEmployee\"] = undefined;\n                    }else{\n                        rigSubmittedObject[\"company\"] = userProfile2['profile']['company'];\n                        rigSubmittedObject[\"creationEmployee\"] = `${userProfile2['profile']['first_name']} ${userProfile2['profile']['last_name']}`;\n                    }\n                    if(missingKeysMsgArr2.length !=0){\n                        showPopup(missingKeysMsgArr,'error');\n                    }else{\n                        let activityLog = {};\n                        activityLog['status'] = 602;\n                        activityLog['connection'] = 500;\n                        activityLog['activity'] = 551;\n                        activityLog['activeUser'] = null;\n                        activityLog['connectedTo'] = null;\n                        activityLog['company'] = null;\n                        activityLog['latestDate'] = getCurrentDateTime();\n                        console.log(`Adding Rig`)\n                        console.log(rigSubmittedObject);\n                        rigSubmittedObject[\"activityJSON\"] = activityLog;\n                        if(this.isShowConfig.isFormEditing){\n                            //Handle For Edit Mode\n                            const patchResult = await sendPATCHRequest(`rig_profile_view/${rigSubmittedObject['id']}`, rigSubmittedObject, true);\n                            if(patchResult && patchResult.ok){\n                                showPopup([\"Rig Profile Edited Successfully!\"],'success');\n                                resetProfile(\"rig\");\n                                window.location.reload();\n                            }else{\n                                // Surface the BE's reason for the failure (most useful for 400s\n                                // where the BE explains why this PATCH wasn't allowed).\n                                const reason = (patchResult && patchResult.message) ? patchResult.message : 'Rig Profile Edit Failed!';\n                                showPopup([reason], 'error', 5);\n                            }\n\n                        }else{\n                            if (await sendPOSTRequest(\"rig_profile_view\", rigSubmittedObject)){\n                                showPopup([\"Rig Created Successfully!\"],'success');\n                                resetProfile(\"rig\");\n                                window.location.reload();\n\n                            }else{\n                                showPopup([\"Rig Creation Failed!\"],'error');\n                            };\n\n                        }\n                    }\n                    break;\n\n            }\n\n        },\n        jumpToPage(page){\n            // this.getPackProfileList();\n            try{\n                if(page != \"...\"){\n                    this.set('paginationSearchConfig.pagination.page', Number.parseInt(page))\n                    this.getPackProfileList();\n                }\n            }\n            catch(err){\n\n            }\n        },\n        // Phase radio: 'phaseI' | 'phaseII' | 'both' | 'all'. Reset page to 1 since the filter shifts the result set, then refetch immediately.\n        // Contractors are restricted to 'phaseI' and 'all' (the other radios aren't rendered for them).\n        changePhaseFilter(value){\n            const isContractor = this.get('isContractor');\n            const allowed = isContractor ? ['phaseI', 'all'] : ['phaseI', 'phaseII', 'both', 'all'];\n            const fallback = isContractor ? 'phaseI' : 'both';\n            const next = allowed.indexOf(value) >= 0 ? value : fallback;\n            this.set('searchPhase', next);\n            this.set('paginationSearchConfig.pagination.page', 1);\n            this.getPackProfileList();\n        },\n        changeIsUsedFilter(value){\n            // Non-contractor only (the radio is hidden for contractors).\n            this.set('searchIsUsed', value === true);\n            this.set('paginationSearchConfig.pagination.page', 1);\n            this.getPackProfileList();\n        },\n        search(){\n            this.getPackProfileList();\n        },\n        resetPage(){\n            this.set(\"paginationSearchConfig.pagination.page\", 1);\n        },\n        resetSearch(){\n            this.set(\"paginationSearchConfig.searchObject\", {calibrationIDFilter:\"DESC\"});\n            this.set('searchPhase', this.get('isContractor') ? 'phaseI' : 'both');\n            this.set('searchIsUsed', false);\n            const searchValidationIDComponent = document.getElementById('searchValidationID');\n            if(searchValidationIDComponent){ searchValidationIDComponent.value=null; }\n            const searchPackIDComponent = document.getElementById('searchPackID');\n            if(searchPackIDComponent){ searchPackIDComponent.value=null; }\n            const searchPackNameComponent = document.getElementById('searchPackName');\n            if(searchPackNameComponent){ searchPackNameComponent.value=null; }\n            // searchCompany is hidden for contractors — guard so getElementById null doesn't throw.\n            const searchCompanyComponent = document.getElementById('searchCompany');\n            if(searchCompanyComponent){ searchCompanyComponent.value=null; }\n            this.send('resetPage');\n            this.getPackProfileList();\n        },\n        resetSort(){\n            this.set(\"paginationSearchConfig.searchObject.validationIdOrdering\", null);\n            const validationIdColumnComp = document.getElementById(\"validationIdColumn\");\n            validationIdColumnComp.textContent = \"ID\";\n\n            this.set(\"paginationSearchConfig.searchObject.packIdOrdering\", null);\n            const packIdColumnColumnComp = document.getElementById(\"packIdColumn\");\n            packIdColumnColumnComp.textContent = \"Pack ID\";\n\n            this.set(\"paginationSearchConfig.searchObject.phase1ValidationDateOrdering\", null);\n            const phase1ValidationDateColumnComp = document.getElementById(\"phase1ValidationDateColumn\");\n            phase1ValidationDateColumnComp.textContent = \"P1 Date\";\n\n            this.set(\"paginationSearchConfig.searchObject.phase2ValidationDateOrdering\", null);\n            const phase2ValidationDateColumnComp = document.getElementById(\"phase2ValidationDateColumn\");\n            phase2ValidationDateColumnComp.textContent = \"P2 Date\";\n            \n            this.set(\"paginationSearchConfig.searchObject.overruledOrdering\", null);\n            const overruledColumnComp = document.getElementById(\"overruledColumn\");\n            overruledColumnComp.textContent = \"Overruled\";\n\n            this.send('resetPage');\n            this.getPackProfileList();\n        },\n        columnCycleOrdering(id){\n            const searchObject = this.get(\"paginationSearchConfig.searchObject\");\n            switch(id){\n                case \"overruledOrdering\":\n                    if(searchObject['overruledOrdering'] === 'false'){\n                        this.set(\"paginationSearchConfig.searchObject.overruledOrdering\", 'true');\n                        const overruledColumnComp = document.getElementById(\"overruledColumn\");\n                        overruledColumnComp.textContent = \"Overruled v\";\n                    }else if(searchObject['overruledOrdering'] === 'true'){\n                        this.set(\"paginationSearchConfig.searchObject.overruledOrdering\", null);\n                        const overruledColumnComp = document.getElementById(\"overruledColumn\");\n                        overruledColumnComp.textContent = \"Overruled\";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.overruledOrdering\", 'false');\n                        const overruledColumnComp = document.getElementById(\"overruledColumn\");\n                        overruledColumnComp.textContent = \"Overruled ^\";\n                    };\n                    break;\n                case \"validationIdOrdering\":\n                    if(searchObject['validationIdOrdering'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.validationIdOrdering\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        const validationIdColumnComp = document.getElementById(\"validationIdColumn\");\n                        validationIdColumnComp.textContent = \"ID v\";\n                    }else if(searchObject['validationIdOrdering'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.validationIdOrdering\", null);\n                        const validationIdColumnComp = document.getElementById(\"validationIdColumn\");\n                        validationIdColumnComp.textContent = \"ID\";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.validationIdOrdering\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        const validationIdColumnComp = document.getElementById(\"validationIdColumn\");\n                        validationIdColumnComp.textContent = \"ID ^\";\n                    };\n                    break;\n                case \"packIdOrdering\":\n                    if(searchObject['packIdOrdering'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.packIdOrdering\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        const packIdColumnColumnComp = document.getElementById(\"packIdColumn\");\n                        packIdColumnColumnComp.textContent = \"Pack ID v\";\n                    }else if(searchObject['packIdOrdering'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.packIdOrdering\", null);\n                        const packIdColumnColumnComp = document.getElementById(\"packIdColumn\");\n                        packIdColumnColumnComp.textContent = \"Pack ID\";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.packIdOrdering\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        const packIdColumnColumnComp = document.getElementById(\"packIdColumn\");\n                        packIdColumnColumnComp.textContent = \"Pack ID ^\";\n                    };\n                    break;\n                case \"phase1ValidationDateOrdering\":\n                    if(searchObject['phase1ValidationDateOrdering'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.phase1ValidationDateOrdering\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        const phase1ValidationDateColumnComp = document.getElementById(\"phase1ValidationDateColumn\");\n                        phase1ValidationDateColumnComp.textContent = \"P1 Date v\";\n                    }else if(searchObject['phase1ValidationDateOrdering'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.phase1ValidationDateOrdering\", null);\n                        const phase1ValidationDateColumnComp = document.getElementById(\"phase1ValidationDateColumn\");\n                        phase1ValidationDateColumnComp.textContent = \"P1 Date\";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.phase1ValidationDateOrdering\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        const phase1ValidationDateColumnComp = document.getElementById(\"phase1ValidationDateColumn\");\n                        phase1ValidationDateColumnComp.textContent = \"P1 Date ^\";\n                    };\n                    break;\n                case \"phase2ValidationDateOrdering\":\n                    if(searchObject['phase2ValidationDateOrdering'] === this.get(\"settingsConfig.ASCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.phase2ValidationDateOrdering\", this.get(\"settingsConfig.DESCENDING_CONST\"));\n                        const phase2ValidationDateColumnComp = document.getElementById(\"phase2ValidationDateColumn\");\n                        phase2ValidationDateColumnComp.textContent = \"P2 Date v\";\n                    }else if(searchObject['phase2ValidationDateOrdering'] === this.get(\"settingsConfig.DESCENDING_CONST\")){\n                        this.set(\"paginationSearchConfig.searchObject.phase2ValidationDateOrdering\", null);\n                        const phase2ValidationDateColumnComp = document.getElementById(\"phase2ValidationDateColumn\");\n                        phase2ValidationDateColumnComp.textContent = \"P2 Date\";\n                    }else{\n                        this.set(\"paginationSearchConfig.searchObject.phase2ValidationDateOrdering\", this.get(\"settingsConfig.ASCENDING_CONST\"));\n                        const phase2ValidationDateColumnComp = document.getElementById(\"phase2ValidationDateColumn\");\n                        phase2ValidationDateColumnComp.textContent = \"P2 Date ^\";\n                    };\n                    this.send('resetPage');\n                    this.getPackProfileList();\n                    break;\n            }\n            this.getPackProfileList();\n        }\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n    \n        const ctx = document.getElementById('myChart').getContext('2d');\n        this.chart = new Chart(ctx, {\n            type: 'line',\n            data: {\n                labels: [],\n                datasets: []\n            },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                scales: {\n                    x: {\n                        display: false, // Hide x-axis\n                    },\n                    y: {\n                        display: false, // Hide y-axis\n                    },\n                },\n                plugins: {\n                    legend: {\n                        display: true, // Ensure the legend is displayed\n                        position: 'top', // Position it at the top\n                        labels: {\n                            usePointStyle: true, // Enable custom icons in the legend\n                            generateLabels: (chart) => {\n                                // Customize the legend label icons to appear as lines\n                                return chart.data.datasets.map((dataset, index) => ({\n                                    text: dataset.label,\n                                    fillStyle: dataset.borderColor,\n                                    strokeStyle: dataset.borderColor,\n                                    lineWidth: dataset.borderWidth,\n                                    hidden: !chart.isDatasetVisible(index),\n                                    datasetIndex: index,\n                                }));\n                            },\n                            font: {\n                                size: 8, // Change the font size of the legend\n                                family: 'Arial', // Optional: Change the font family\n                                weight: 'bold', // Optional: Make the text bold\n                            },\n                            color: 'black', // Optional: Change the font color\n                            boxWidth: 8, // Match the size of the font (adjust as needed)\n                            boxHeight: 8, // Match the size of the font (adjust as needed)\n                            padding: 5, // Optional: Add padding around the legend labels\n                        },\n                    },\n                    tooltip: {\n                        enabled: false,\n                    },\n                },\n                elements: {\n                    point: {\n                        radius: 0, // Remove the circle markers\n                    },\n                },\n            },\n        });\n    }\n    \n    \n})","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\n\n\nexport default Component.extend({\n    session: service(),\n\n    //Assume passing in: \n    //dispUnits: from Project Setting, the actual array of supported disp units \n    //initValue: eg m/minute or mm/day, in/hour\n    //allowRAW: true or false\n    //allowBits: true or false\n\n    //IF YOU WANT TO USE THIS COMPONENT, YOUR PARENT COMPONENT NEEDS TO ADD ACTION: updateRateDropdownUnit\n    init() {\n        this._super(...arguments);\n        try{\n            let currRate = this.get(\"initValue\");\n            let dispPart = currRate.split(\"/\")[0]\n            let timePart = currRate.split(\"/\")[1]\n            this.set(\"dispPartRateValue\", dispPart);\n            this.set(\"timePartRateValue\", timePart);\n        }\n        catch{\n            this.set(\"dispPartRateValue\", \"\");\n            this.set(\"timePartRateValue\", \"\");\n        }\n    },\n    getDispPart:computed(\"initValue\", function(){\n        try{\n            let currRate = this.get(\"initValue\");\n            let dispPart = currRate.split(\"/\")[0]\n            return dispPart\n        }\n        catch{\n            return \"\"\n        }\n    }),\n    getTimePart:computed(\"initValue\", function(){\n        try{\n            let currRate = this.get(\"initValue\");\n            let timePart = currRate.split(\"/\")[1]\n            return timePart\n        }\n        catch{\n            return \"\"\n        }\n    }),\n    buildRate:function(dispPart, timePart){\n        try{\n            return dispPart + \"/\" + timePart;\n        }\n        catch(error){\n            console.log(\"Error in arrayCastString: \" + error);\n            return [];\n        }\n    },\n    actions: {\n        updateDispDropdownUnit(value) {\n            this.set(\"dispPartRateValue\", value);\n            if (this.onChange) this.onChange(this.buildRate(value, this.get(\"timePartRateValue\") ? this.get(\"timePartRateValue\") : \"\"));\n        },\n        updateTimeDropdownUnit( value) {\n            console.log(\"updateTimeDropdownUnit: \" + value)\n            this.set(\"timePartRateValue\", value);\n            if (this.onChange) this.onChange(this.buildRate(this.get(\"dispPartRateValue\") ? this.get(\"dispPartRateValue\") : \"\", value));\n        },\n    }\n});\n","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class RawDropDown extends Component {\n    //@service session;\n    //@service currentUser;\n    isAuthenticated = true;\n}","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class RawDropDown extends Component {\n    //@service session;\n    //@service currentUser;\n    isAuthenticated = true;\n}","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class RawPortDropDown extends Component {\n    //@service session;\n    //@service currentUser;\n    isAuthenticated = true;\n    actions = {\n        showPort() {\n            //console.log(\"showPort\");\n            return;\n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n_adapters._date.override({\n    parse(value) { return value == null ? null : moment(value).isValid() ? moment(value).valueOf() : null; },\n    format(time, fmt) { return moment(time).format(fmt); },\n    add(time, amount, unit) { return moment(time).add(amount, unit).valueOf(); },\n    diff(a, b, unit) { return moment(b).diff(moment(a), unit); },\n    startOf(time, unit) { return moment(time).startOf(unit).valueOf(); },\n    endOf(time, unit) { return moment(time).endOf(unit).valueOf(); },\n    formats() { return { datetime:'MMM D, YYYY, h:mm:ss a', millisecond:'h:mm:ss.SSS a', second:'h:mm:ss a', minute:'h:mm a', hour:'hA', day:'MMM D', week:'ll', month:'MMM YYYY', quarter:'[Q]Q - YYYY', year:'YYYY' }; }\n});\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28, colorPalette.orange2, colorPalette.green3,\n    colorPalette.red1, colorPalette.purple7, colorPalette.beige22,\n    colorPalette.pink6, colorPalette.gray5, colorPalette.teal6, colorPalette.cyan4,\n];\n\nexport default Component.extend({\n    store: service(),\n    _spatialChart: null,\n\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        const firstObject = this.get('zoomChartData').get('firstObject');\n        if (!firstObject) { return []; }\n        const dataValuesCount = firstObject.get ? (firstObject.get('values')?.length ?? 0) : (firstObject.values?.length ?? 0);\n        const anchors = this.get('instrument').get('anchors');\n        let anchorDistances = (anchors.content ?? anchors).map(a => a.get('distance'));\n\n        const modelName = this.get('chartDataModelName');\n        console.log('anchorDistances BEFORE:', JSON.stringify(anchorDistances), 'modelName:', modelName, 'dataValuesCount:', dataValuesCount);\n        if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {\n            anchorDistances.splice(0, 1);\n        }\n\n        // axial-displacement: stacked vs staggered gauge length adjustments\n        if (modelName === 'axial-displacement-values') {\n            console.log('ENTERING axial-displacement branch, stacked:', this.get('instrument').get('stacked'));\n            if (this.get('instrument').get('stacked')) {\n                const half_anchors = (anchorDistances.length / 2) + 1;\n                const gauge = this.get('instrument').get('gaugeLength');\n                while (anchorDistances.length > half_anchors) { anchorDistances.pop(); }\n                anchorDistances[0] = anchorDistances[1] - gauge;\n            } else {\n                const last = anchorDistances[anchorDistances.length - 1];\n                anchorDistances.sort((a, b) => a - b);\n                const gauge = this.get('instrument').get('gaugeLength');\n                anchorDistances.forEach((item, index) => { anchorDistances[index] = item - gauge; });\n                anchorDistances.shift();\n                anchorDistances.push(last);\n            }\n        }\n\n        console.log('anchorDistances AFTER:', JSON.stringify(anchorDistances));\n        return anchorDistances;\n    }),\n\n    // Axial strain/load x-distances (stacked vs staggered)\n    anchorAXDistances: computed('instrument', 'zoomChartData', function() {\n        const anchors = this.get('instrument').get('anchors');\n        let anchorDistances = (anchors.content ?? anchors).map(a => a.get('distance'));\n        const modelName = this.get('chartDataModelName');\n        let midPoints = [];\n\n        if (this.get('instrument').get('stacked')) {\n            const headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            let center = Math.ceil((anchorDistances.length - 1) / 2);\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n            for (let ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midPoints.push((leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2);\n            }\n        } else { // staggered\n            const headExclusion = this.get('instrument').get('headExclusionLength');\n            let center = Math.ceil((anchorDistances.length - 1) / 2);\n            const left = anchorDistances.slice(1, center + 1);\n            const right = anchorDistances.slice(center + 1);\n            // interleave left and right anchors (replaces $.map)\n            midPoints = left.flatMap((v, i) => right[i] !== undefined ? [v, right[i]] : [v]);\n            midPoints.unshift(headExclusion);\n            const mid_temp = [];\n            for (let ctr = 1; ctr < midPoints.length; ctr++) {\n                mid_temp.push((midPoints[ctr - 1] + midPoints[ctr]) / 2);\n            }\n            midPoints = mid_temp;\n            if (modelName === 'bending-strain-values') {\n                midPoints.shift();\n                midPoints.pop();\n            }\n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n        return midPoints;\n    }),\n\n    // Bending strain x-distances (stacked vs staggered)\n    anchorBXDistances: computed('instrument', 'zoomChartData', function() {\n        const anchors = this.get('instrument').get('anchors');\n        let anchorDistances = (anchors.content ?? anchors).map(a => a.get('distance'));\n        let midPoints = [];\n\n        if (this.get('instrument').get('stacked')) {\n            const headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            let center = Math.ceil((anchorDistances.length - 1) / 2);\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n            for (let ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midPoints.push((leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2);\n            }\n        } else { // staggered\n            let center = Math.ceil((anchorDistances.length - 1) / 2);\n            const left = anchorDistances.slice(1, center + 1);\n            const right = anchorDistances.slice(center + 1);\n            midPoints = left.flatMap((v, i) => right[i] !== undefined ? [v, right[i]] : [v]);\n            midPoints.shift();\n            midPoints.pop();\n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n        return midPoints;\n    }),\n\n    // Standard midpoints for strain/load (dRebar-specific stacked handling)\n    anchorMidDistances: computed('anchorDistances', 'zoomChartData', function() {\n        const anchorDistances = [...this.get('anchorDistances')];\n        const midDistances = [];\n\n        if (this.get('instrument').get('stacked')) {\n            anchorDistances.shift();\n            const finalSize = anchorDistances.length / 2;\n            while (anchorDistances.length > finalSize) { anchorDistances.pop(); }\n            anchorDistances.unshift(this.get('instrument').get('headExclusionLength'));\n        }\n        // staggered rebar: no special handling, falls through\n\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            midDistances.push(+((anchorDistances[i] + anchorDistances[i + 1]) / 2).toFixed(2));\n        }\n\n        return midDistances;\n    }),\n\n    // Choose x-axis values based on model name\n    spatialXValues: computed('anchorDistances', 'anchorMidDistances', 'anchorAXDistances', 'anchorBXDistances', 'chartDataModelName', function() {\n        const modelName = this.get('chartDataModelName');\n        if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n            return this.get('anchorAXDistances');\n        }\n        if (modelName === 'bending-strain-values') {\n            return this.get('anchorBXDistances');\n        }\n        // displacement, velocity, acceleration use anchorDistances directly\n        return this.get('anchorDistances');\n    }),\n\n    spatialChartLinesData: computed('zoomChartData', 'spatialXValues', 'chartDataModelName', function() {\n        const zoomChartData = this.get('zoomChartData');\n        const xValues = this.get('spatialXValues');\n        console.log('rebar xValues:', JSON.stringify(xValues));\n        console.log('rebar firstItem values:', JSON.stringify(zoomChartData.get('firstObject')?.get?.('values')));\n        console.log('rebar anchorDistances:', JSON.stringify(this.get('anchorDistances')));\n        console.log('rebar gaugeLength:', this.get('instrument').get('gaugeLength'), 'stacked:', this.get('instrument').get('stacked'));\n\n        return zoomChartData.map((item) => {\n            const values = item.get('values') || [];\n            // No data prepend for rebar (dExto/dCable handling not applicable)\n            const pts = values.map((v, idx) => ({\n                x: xValues[idx] !== undefined ? xValues[idx] : null,\n                y: v !== undefined ? v : null\n            })).filter(pt => pt.x !== null);\n            return {\n                key: moment(item.get('id')).format('DD MMM YYYY HH:mm'),\n                timestamp: item.get('id'),\n                values: pts\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        const chartDataModelName = this.get('chartDataModelName');\n        const chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic', x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast', x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes')\n        }));\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        const title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement': axisName = getAttr('temporalDisplacementName'); break;\n            case 'velocity': axisName = getAttr('temporalVelocityName'); units += \"/day\"; break;\n            case 'acceleration': axisName = getAttr('temporalAccelerationName'); units += \"/day²\"; break;\n            case 'strain': axisName = getAttr('temporalStrainName'); units = \"%\"; break;\n            case 'strain_rate': axisName = getAttr('temporalStrainRateName'); units = \"%/day\"; break;\n            case 'load': axisName = getAttr('temporalLoadName'); return `${axisName} (kN)`;\n            case 'axial_strain': axisName = \"Axial Strain\"; units = \"%\"; break;\n            case 'bending_strain': axisName = \"Bending Strain\"; units = \"%\"; break;\n            case 'axial_displacement': axisName = \"Axial Displacement\"; break;\n            default: axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const spatialLinesData = this.get('spatialChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => { if (item.id === type) { chartData = item; } });\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildSpatialChart(spatialLinesData, yAxisTitle);\n        });\n    },\n\n    _buildSpatialChart(linesData, yAxisTitle) {\n        const canvas = this.element.querySelector('canvas.chartjs-spatial');\n        if (!canvas) return;\n        let instrumentLength = 0;\n        try {\n            instrumentLength = this.instrument.get('instrumentLength') || 0;\n        } catch (e) { /* ignore */ }\n\n        const anchorXValues = this.get('spatialXValues');\n        console.log('rebar instrumentLength:', instrumentLength, 'anchorXValues max:', Math.max(...anchorXValues));\n\n        const lineDatasets = linesData.map((line, i) => ({\n            label: line.key, data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length], backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0, pointHoverRadius: 0, tension: 0, parsing: false, _isLine: true\n        }));\n\n        const anchorDatasets = anchorXValues.map((dist, i) => ({\n            label: String(dist), data: [],\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            borderWidth: 0, pointRadius: 0, showLine: false, _isRef: true\n        }));\n\n        const datasets = [...lineDatasets, ...anchorDatasets];\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds._isRef) return;\n                    if (!ds.hidden) ds.data.forEach(pt => { if (pt && pt.y != null) hasData = true; });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save(); ctx.font = '14px sans-serif'; ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center'; ctx.textBaseline = 'middle';\n                    ctx.fillText('No data available', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const anchorDotsPlugin = {\n            id: 'anchorDots',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                const yArea = chart.chartArea.bottom;\n                const ctx = chart.ctx;\n                anchorXValues.forEach((dist, i) => {\n                    const px = xScale.getPixelForValue(dist);\n                    ctx.save(); ctx.beginPath();\n                    ctx.arc(px, yArea, 6, 0, 2 * Math.PI);\n                    ctx.fillStyle = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                    ctx.fill(); ctx.restore();\n                });\n            }\n        };\n\n        let crosshairX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                if (crosshairX === null) return;\n                const { ctx, chartArea: { top, bottom } } = chart;\n                ctx.save(); ctx.beginPath(); ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1; ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top); ctx.lineTo(crosshairX, bottom);\n                ctx.stroke(); ctx.restore();\n            }\n        };\n\n        // --- Legend-tooltip helpers ---\n        let legendTooltipEl = null;\n        let highlightedIndex = null;\n        let lastTooltipIdx = null;\n\n        function buildSpatialLegendItems(chart) {\n            return chart.data.datasets.filter(ds => ds._isLine).map((ds) => {\n                const i = chart.data.datasets.indexOf(ds);\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:1;margin-right:3px;\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div></div>`;\n            }).join('');\n        }\n\n        function highlightLine(chart, idx, skipUpdate) {\n            highlightedIndex = idx;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine) return;\n                ds.borderColor = (i === idx)\n                    ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                    : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '22';\n            });\n            if (!skipUpdate) chart.update('none');\n        }\n\n        function restoreLines(chart, skipUpdate) {\n            highlightedIndex = null;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine) return;\n                ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n            });\n            if (!skipUpdate) chart.update('none');\n        }\n\n        function attachSpatialLegendHandlers(el, chart) {\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                highlightLine(chart, parseInt(item.dataset.ds));\n            };\n            el.onmouseout = function() { restoreLines(chart); };\n        }\n\n        function initSpatialLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildSpatialLegendItems(chart);\n            attachSpatialLegendHandlers(legendTooltipEl, chart);\n        }\n\n        function distToSegment(px, py, x1, y1, x2, y2) {\n            const dx = x2 - x1, dy = y2 - y1;\n            const lenSq = dx * dx + dy * dy;\n            let t = lenSq === 0 ? 0 : Math.max(0, Math.min(1, ((px - x1) * dx + (py - y1) * dy) / lenSq));\n            const projX = x1 + t * dx, projY = y1 + t * dy;\n            const ex = px - projX, ey = py - projY;\n            return Math.sqrt(ex * ex + ey * ey);\n        }\n\n        function findClosestLine(chart, mouseX, mouseY) {\n            let closestIdx = -1;\n            let closestDist = Infinity;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine || chart.getDatasetMeta(i).hidden) return;\n                const pts = chart.getDatasetMeta(i).data;\n                if (!pts || pts.length < 2) return;\n                for (let j = 0; j < pts.length - 1; j++) {\n                    const p1 = pts[j], p2 = pts[j + 1];\n                    if (!p1 || !p2) continue;\n                    const dist = distToSegment(mouseX, mouseY, p1.x, p1.y, p2.x, p2.y);\n                    if (dist < closestDist) { closestDist = dist; closestIdx = i; }\n                }\n            });\n            return { datasetIndex: closestIdx, pixelDist: closestDist };\n        }\n\n        function updateSpatialTooltip(chart, mouseX, mouseY) {\n            if (!legendTooltipEl) return;\n            const { left, right, top, bottom } = chart.chartArea;\n            if (mouseX < left || mouseX > right || mouseY < top || mouseY > bottom) {\n                if (highlightedIndex !== null) restoreLines(chart, true);\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildSpatialLegendItems(chart);\n                attachSpatialLegendHandlers(legendTooltipEl, chart);\n                lastTooltipIdx = null;\n                return;\n            }\n            const closest = findClosestLine(chart, mouseX, mouseY);\n            if (closest.datasetIndex < 0) return;\n            if (closest.datasetIndex !== highlightedIndex) {\n                highlightLine(chart, closest.datasetIndex, true);\n            }\n            const activeIdx = highlightedIndex != null ? highlightedIndex : closest.datasetIndex;\n            if (activeIdx !== lastTooltipIdx) {\n                lastTooltipIdx = activeIdx;\n                const ds = chart.data.datasets[activeIdx];\n                const valuesHtml = ds.data.map((pt, idx) => {\n                    const anchorColor = CHART_LINE_COLORS[idx % CHART_LINE_COLORS.length];\n                    return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${anchorColor};\"></div>${pt && pt.y != null ? pt.y.toFixed(2) : '—'}</div>`;\n                }).join('');\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = `<div class=\"legend-tooltip-date\">${ds.label}</div>${valuesHtml}`;\n            }\n        }\n\n        const spatialChart = new Chart(canvas, {\n            type: 'line', data: { datasets },\n            options: {\n                responsive: true, maintainAspectRatio: false, parsing: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'nearest', intersect: false },\n                onHover(e) { if (e.x != null) { crosshairX = e.x; } },\n                scales: {\n                    x: {\n                        type: 'linear', min: 0,\n                        max: instrumentLength > 0 ? instrumentLength : undefined,\n                        title: { display: true, text: 'Depth (mm)', font: { size: 12 } },\n                        afterBuildTicks(axis) {\n                            const visibleAnchors = anchorXValues\n                                .filter(v => v >= axis.min && v <= axis.max)\n                                .map(v => ({ value: v }));\n                            if (visibleAnchors.length > 0) { axis.ticks = visibleAnchors; }\n                        },\n                        ticks: { callback(val) { return val.toLocaleString(); } }\n                    },\n                    y: {\n                        title: { display: true, text: yAxisTitle, font: { size: 12 } },\n                        ticks: { callback(val) { return val.toFixed ? val.toFixed(2) : val; } }\n                    }\n                },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                }\n            },\n            plugins: [noDataPlugin, anchorDotsPlugin, crosshairPlugin]\n        });\n\n        initSpatialLegendTooltip(canvas.parentElement, spatialChart);\n\n        // --- Scroll-to-zoom (both axes) ---\n        const origXMin = spatialChart.options.scales.x.min;\n        const origXMax = spatialChart.options.scales.x.max;\n        canvas.addEventListener('wheel', e => {\n            e.preventDefault();\n            const rect = canvas.getBoundingClientRect();\n            const xScale = spatialChart.scales['x'];\n            const yScale = spatialChart.scales['y'];\n            const factor = e.deltaY < 0 ? 1.15 : 0.87;\n            const cursorX = xScale.getValueForPixel(e.clientX - rect.left);\n            const cursorY = yScale.getValueForPixel(e.clientY - rect.top);\n            spatialChart.options.scales.x.min = cursorX - (cursorX - xScale.min) * factor;\n            spatialChart.options.scales.x.max = cursorX + (xScale.max - cursorX) * factor;\n            spatialChart.options.scales.y.min = cursorY - (cursorY - yScale.min) * factor;\n            spatialChart.options.scales.y.max = cursorY + (yScale.max - cursorY) * factor;\n            spatialChart.update('none');\n        }, { passive: false });\n\n        // --- Drag-to-pan (both axes) ---\n        let panStartX = null, panStartY = null;\n        let panXMin = null, panXMax = null, panYMin = null, panYMax = null;\n        canvas.addEventListener('mousedown', e => {\n            panStartX = e.clientX; panStartY = e.clientY;\n            panXMin = spatialChart.scales['x'].min; panXMax = spatialChart.scales['x'].max;\n            panYMin = spatialChart.scales['y'].min; panYMax = spatialChart.scales['y'].max;\n            canvas.style.cursor = 'grabbing';\n        });\n        canvas.addEventListener('mousemove', e => {\n            const rect = canvas.getBoundingClientRect();\n            const px = e.clientX - rect.left;\n            const py = e.clientY - rect.top;\n            const { left, right } = spatialChart.chartArea;\n            crosshairX = (px >= left && px <= right) ? px : null;\n            if (panStartX !== null) {\n                const xPxRange = spatialChart.chartArea.right - spatialChart.chartArea.left;\n                const yPxRange = spatialChart.chartArea.bottom - spatialChart.chartArea.top;\n                spatialChart.options.scales.x.min = panXMin - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.x.max = panXMax - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.y.min = panYMin + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n                spatialChart.options.scales.y.max = panYMax + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n            } else {\n                updateSpatialTooltip(spatialChart, px, py);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('mouseleave', () => {\n            crosshairX = null;\n            if (highlightedIndex !== null) restoreLines(spatialChart);\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildSpatialLegendItems(spatialChart);\n                attachSpatialLegendHandlers(legendTooltipEl, spatialChart);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('dblclick', () => {\n            spatialChart.options.scales.x.min = origXMin;\n            spatialChart.options.scales.x.max = origXMax;\n            spatialChart.options.scales.y.min = undefined;\n            spatialChart.options.scales.y.max = undefined;\n            spatialChart.update('none');\n        });\n        const onPanEnd = () => {\n            panStartX = panStartY = panXMin = panXMax = panYMin = panYMax = null;\n            canvas.style.cursor = 'default';\n        };\n        canvas.addEventListener('mouseup', onPanEnd);\n        document.addEventListener('mouseup', onPanEnd);\n\n        this.set('_spatialChart', spatialChart);\n    },\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const spatialChart = this.get('_spatialChart');\n        if (spatialChart) { spatialChart.destroy(); }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\n// Chart line colors — sourced from color-palette\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,    // #0077b6\n    colorPalette.orange2,   // #FF7444\n    colorPalette.green3,    // #2a9d8f\n    colorPalette.red1,      // #D25353\n    colorPalette.purple7,   // #8b5cf6\n    colorPalette.beige22,   // #b08968\n    colorPalette.pink6,     // #ec4899\n    colorPalette.gray5,     // #6b7280\n    colorPalette.teal6,     // #10b981\n    colorPalette.cyan4,     // #06b6d4\n];\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let anchors = this.get('instrument').get('anchors');\n        const arr = anchors.content ?? anchors;\n        let anchorDistances = arr.map(anchor => anchor.get('distance'));\n\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') {\n            var midPoints = [];\n            if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n                for (var ctr = 1; ctr < anchorDistances.length; ctr++) {\n                    var mid = (anchorDistances[ctr - 1] + anchorDistances[ctr]) / 2;\n                    midPoints[ctr] = +mid.toFixed(2);\n                }\n                midPoints.splice(0, 1);\n                midPoints[0] = 0;\n                midPoints.push(anchorDistances[anchorDistances.length - 1]);\n            } else if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n                let headExclusion = this.get('instrument').get('headExclusionLength');\n                let leftAnchors = [headExclusion];\n                let rightAnchors = [headExclusion];\n\n                let center = anchorDistances.length - 1;\n                center = Math.ceil(center / 2);\n\n                leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n\n                let midLeft = [];\n                for (var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                    midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                }\n\n                let midRight = [];\n                for (var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                    midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                }\n\n                if (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values') {\n                    if (this.get('instrument').get('stacked')) {\n                        midPoints = midLeft;\n                        if (modelName === 'load-values') {\n                            midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n                        }\n                    } else {\n                        midPoints = midLeft.concat(midRight);\n                        if (modelName === 'bending-strain-values') {\n                            midPoints.shift();\n                            midPoints.pop();\n                        }\n                    }\n                } else {\n                    midPoints = midLeft.concat(midRight);\n                }\n\n                if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                    for (let ctr = 0; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr + 1) + '-' + midPoints[ctr];\n                    }\n                }\n            } else {\n                for (var ctr = 0; ctr < anchorDistances.length - 1; ctr++) {\n                    midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n                }\n            }\n            if (modelName === 'displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        } else if (modelName === 'axial-displacement-values' && this.get('instrument').get('stacked')) {\n            let mid = (anchorDistances.length - 1) / 2;\n            while (anchorDistances.length > (mid + 1)) {\n                anchorDistances.pop();\n            }\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else if (modelName === 'axial-displacement-values' && !this.get('instrument').get('stacked')) {\n            anchorDistances.sort(function(a, b) { return a - b; });\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else {\n            if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n                if (modelName === 'displacement-values') {\n                    var midPoints = [];\n                    let headExclusion = this.get('instrument').get('headExclusionLength');\n                    let leftAnchors = [headExclusion];\n                    let rightAnchors = [headExclusion];\n\n                    let center = anchorDistances.length - 1;\n                    center = Math.ceil(center / 2);\n\n                    leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                    rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                    if (!this.get('instrument').get('stacked')) {\n                        rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n                    }\n\n                    let midLeft = [];\n                    for (var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                        midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                    }\n\n                    let midRight = [];\n                    for (var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                        midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                    }\n\n                    midPoints = midLeft.concat(midRight);\n                    anchorDistances = midPoints;\n                    anchorDistances.unshift(0);\n                }\n                for (let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n                for (let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n            }\n        }\n        return anchorDistances;\n    }),\n\n    // Main chart sourced from zoomChartData to mirror NVD3 (Group By applies to visible chart).\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'anchorDistances', 'chartDataModelName', function() {\n        const anchorDistances = this.get('anchorDistances');\n        const fullRangeChartData = this.get('zoomChartData');\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values';\n\n        const lines = anchorDistances.map((chartLineName, chartLineIndex) => ({\n            key: chartLineName,\n            values: fullRangeChartData.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[chartLineIndex] !== undefined) ? arr[chartLineIndex] : null\n                };\n            })\n        }));\n\n        // Add temperature overlay on y2 (unless viewing temperature data itself)\n        if (modelName !== 'temperature-values') {\n            const zoomTempData = this.get('zoomTempData');\n            if (zoomTempData && zoomTempData.length) {\n                lines.push({\n                    key: 'T (°C)',\n                    yAxis: 'y2',\n                    hidden: false,\n                    values: zoomTempData.map(item => {\n                        const rawValues = item.get('values');\n                        const arr = Array.isArray(rawValues) ? rawValues : [];\n                        return {\n                            x: moment(item.get('id')).valueOf(),\n                            y: arr[0] !== undefined ? arr[0] : null\n                        };\n                    })\n                });\n            }\n        }\n\n        return lines;\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        let title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                units = this.get(\"yAxisUnit\") || getAttr('units');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName') || 'Load';\n                units = 'kN';\n                break;\n            case 'axial_strain':\n                axisName = \"Axial Strain\";\n                units = \"%\";\n                break;\n            case 'bending_strain':\n                axisName = \"Bending Strain\";\n                units = \"%\";\n                break;\n            case 'axial_displacement':\n                axisName = \"Axial Displacement\";\n                break;\n            case 'temperature':\n                axisName = \"Temperature\";\n                units = \"°C\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const fullRangeChartLinesData = this.get('fullRangeChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildMainChart(fullRangeChartLinesData, yAxisTitle);\n            this._buildOverviewChart();\n        });\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        const datasets = anchorDistances.map((chartLineName, i) => ({\n            label: String(chartLineName),\n            data: fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        anchorDistances.forEach((chartLineName, i) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(chartLineName));\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed, get } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\nimport { getAnchorCountFromId } from '../../utils/instrument-id';\n\nfunction resetNewInstrumentObject(_this) {\n    //console.log('reset');\n    _this.set('newInstrumentObject', {});\n    //_this.set('name', null);\n    _this.set('zeroTimestamp', null);\n    _this.set('installDate', null);\n    //_this.set('east', null);\n    //_this.set('north', null);\n    //_this.set('depth', null);\n    //_this.set('azimuth', null);\n    //_this.set('dip', null);\n    //_this.set('instrumentType', 0);\n    //_this.set('headAt', 'HAC');\n    //_this.set('instrumentLength', 0);\n    //_this.set('strokeLength', 0);\n    //_this.set('referenceAnchor', null);\n    //_this.set('headExclusionLength', 0);\n    //_this.set('gaugeLength', 0);\n    //_this.set('bulbed', false);\n    //_this.set('plated', false);\n    //_this.set('stacked', false);\n    //_this.set('active', true);\n}\n\nexport default class CreatePackInstrument extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n    }\n\n    isAuthenticated = true;\n    newInstrumentObject = {};\n    headAt = 'HAC';\n    zeroTimestamp = null;\n    installDate = null;\n    authError = false;\n\n\n    actions = {\n        createInstrument(object){\n\n            //console.log(this.get('prevDup'));\n            //console.log((typeof this.get('prevDup') === \"undefined\"));\n\n            let _this = this,\n            store = this.get('store'),\n            newInstrumentObject = this.get('newInstrumentObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newInstrumentObject.id = this.get('id');\n            newInstrumentObject.zeroTimestamp = this.get('zeroTimestamp');\n            newInstrumentObject.installDate = this.get('installDate');\n            //newInstrumentObject.east = this.get('east');\n            //newInstrumentObject.north = this.get('north');\n            //newInstrumentObject.depth = this.get('depth');\n            newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n            newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n            newInstrumentObject.stacked = true;//this.get('stacked');\n            newInstrumentObject.active = true;\n            if(typeof newInstrumentObject.id === 'undefined' || newInstrumentObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n\n            if(!error) {\n                if(typeof newInstrumentObject.strokeLength === 'undefined' || newInstrumentObject.strokeLength === 0) {\n                    error = true;\n                    this.setError('fieldError',true);\n                    this.setError('isVisibleError',true);\n                }\n            }\n\n            if (this.get('zeroTimestamp') != null) {\n                newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('installDate') != null) {\n                newInstrumentObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            // console.log(get(this, 'duplicateError'));\n\n            let newInstrument = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    //console.log(this.get('prevDup'));\n                    if(err.message.includes('has already been used')) {\n                        //console.log('duplicate');\n                        this.setError('duplicateError',true);\n                        \n                        error = true;\n                        dup = true;\n                    }\n                    // console.log(err.message);\n                }\n            }\n            \n            this.setError('authError', false);\n\n            if (!error) {\n                \n                    newInstrument.save().then(function(results){\n\n                        if(results.id != null) {\n                            store.createRecord('anchor', {number: 0, distance: 0, instrument: results}).save();\n                            let anchorCount = getAnchorCountFromId(newInstrumentObject.id);\n                            for(var ctr = 0; ctr < anchorCount; ctr++) {\n                                let gauge = parseInt(newInstrumentObject.gaugeLength);\n                                let distance = parseInt(newInstrumentObject.headExclusionLength) + gauge;\n                                if(!newInstrumentObject.stacked && ctr+1 > anchorCount / 2) {\n                                    distance += (gauge + 20) / 2;\n                                }\n                                distance += (gauge + 20) * (ctr % (anchorCount / 2));\n                                if (isNaN(distance)) {\n                                    distance = 0;\n                                }\n                                store.createRecord('anchor', {number: ctr+1, distance: distance, instrument: results}).save();\n                            }\n                        }\n\n                        // console.log(dup);\n                        if(results.id != null) {\n                            _this.get('submit')(results.id);\n                        } else {\n                            this.setError('isVisibleError',true);\n                            error = true;\n                        }\n                    }).catch(function(reason) {\n                        \n                        _this.setError('isVisibleError',true);\n                        _this.setError('authError',true);\n                    }); \n            } \n        },\n        stackedChanged(object)\n        {\n            //console.log(document.getElementById('newInstrumentObjectBulbed').checked);\n            this.set(\"stacked\",document.getElementById('newInstrumentObjectStacked').checked);\n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let displacementValueObjectValues = _this.get('displacementValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(displacementValueObjectValues).forEach(function(key,index) {\n        displacementValueObjectValues[key] = 0;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n    // newTimestampValue: computed('dateFormat', function() {\n    //     return moment().format(this.get('dateFormat'));\n    // }),\n\n    newDisplacementValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n    displacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    newDisplacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n    \n    actions: {\n        setNewDisplacementValue(key, event) {\n            const vals = this.get('newDisplacementValueObjectValues');\n            vals[key] = event.target.value;\n        },\n        setNewTimestampValue(event) {\n            this.set('newTimestampValue', event.target.value);\n        },\n        setTemperatureValue(event) {\n            this.set('temperatureObjectValue', event.target.value);\n        },\n        saveNew(){\n            let _this = this,\n                store = this.get('store'),\n                newDisplacementValuesObject = this.get('newDisplacementValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                displacementValues = this.get('displacementValues'),\n                temperatureValues = this.get('temperatureValues')\n            ;\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newDisplacementValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newDisplacementValuesObject.values = Object.values(this.get('newDisplacementValueObjectValues'));\n\n            const newDisplacementValues = store.createRecord('displacement-value', newDisplacementValuesObject);\n            // save new displacement-value to DB\n            const savedDisplacementValuesObject = newDisplacementValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if displacement-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //displacementValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n                \n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import { getApiBaseUrl } from '../../utils/api-config';\nimport { computed, observer } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    didReceiveAttrs() {\n        this._super(...arguments);\n      },\n    router:service(),\n    store:service(),\n    api:service(),\n    session: service(),\n    //Old Declarations\n    // isAuthenticated : true,\n    selectedVendor: null,\n    selectedModel: null,\n    editing: 0,\n    //New Declarations\n    activeActionTab:null,\n    ordering:null,\n    paginationSearchConfig:{    \n        searchObject:{ calibrationDateOrdering:\"DESC\"},\n        pagination:{page:1, pageSize:5, totalPages:1},\n        alertProfilePaginationList : [],\n    },\n    anchorDiagramInputInitalValue:[],\n    batchSelectedAlertsID:[],\n    isAlertsListVisible:false,\n    isEditAnchorDiagram:false,\n\n    async init() {\n        this._super(...arguments);\n        await this.getAlertsList();\n    },\n    getAlertsList:async function(){\n\n        let payload = {\n            instrumentId: this.get(\"instrument\").id,\n            page: this.paginationSearchConfig.pagination.page,\n            page_size:this.paginationSearchConfig.pagination.pageSize,\n            \n        };\n        if (this.get(\"ordering\") != null ){\n            payload[\"ordering\"] = this.get(\"ordering\");\n        }\n        let url = getApiBaseUrl() + \"/alerts/\";\n        const queryString = new URLSearchParams(payload).toString();\n        if (queryString) {\n            url += `?${queryString}`;\n        }\n        const response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json(); \n            const metaPaginationData = responseData['meta'];\n            this.set(\"paginationSearchConfig.pagination.totalPages\", metaPaginationData['pagination']['total_pages']);\n\n            this.processAlertsList(responseData.data);\n            this.updatePaginationList();\n        }\n        else {\n            this.set(\"alertsList\", [])\n        } \n    },\n    processAlertsList:function(rawList){\n        let list = [];\n        rawList.forEach(element => {\n            let rawElement = element;\n            element = element[\"attributes\"]\n            list.push({\n                id: rawElement[\"id\"],\n                counter: element[\"counter\"],\n                createdAt: element[\"created-at\"],\n                evaluationType: element[\"evaluation-type\"],\n                instrumentId: element[\"instrument-id\"],\n                isAcknowledged: element[\"is-acknowledged\"],\n                isActive: element[\"is-active\"],\n                isMuted: element[\"is-muted\"],\n                lastDataReceivedAt: element[\"last-data-received-at\"],\n                lastEvaluatedAt: element[\"last-evaluated-at\"],\n                lastTriggeredAt: element[\"last-triggered-at\"],\n                level: element[\"level\"],\n                name: element[\"name\"],\n                channels: element[\"channels\"],\n                note: element[\"note\"],\n                parameters: element[\"parameters\"],\n                softResetCounter: element[\"soft-reset-counter\"],\n            })\n        });\n        this.set(\"alertsList\", list)\n    },\n    updatePaginationList: function () {\n        let range = [];\n        const maxPageToShow = 3; // Adjust this based on how many pages you want to show in the middle\n        const paginationObj = this.get('paginationSearchConfig.pagination');\n    \n        // Always include the first page\n        range.push(1);\n    \n        if (paginationObj['totalPages'] <= maxPageToShow + 2) {\n            // If total pages are small enough, show all pages\n            for (let i = 2; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else if (paginationObj['page'] <= maxPageToShow) {\n            // Current page is within the first few pages\n            for (let i = 2; i <= maxPageToShow + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        } else if (paginationObj['page'] >= paginationObj['totalPages'] - maxPageToShow + 1) {\n            // Current page is within the last few pages\n            range.push('...');\n            for (let i = paginationObj['totalPages'] - maxPageToShow; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else {\n            // Current page is in the middle\n            range.push('...');\n            for (let i = paginationObj['page'] - 1; i <= paginationObj['page'] + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        }\n    \n        this.set('paginationSearchConfig.alertProfilePaginationList', range);\n    },\n    orderingObserver: observer('ordering',async function() {\n        await this.getAlertsList();\n    }), \n    anchorDiagramLabelInitalValue:computed(\"instrument\", function(){\n        let data = {};\n        ((_a) => _a.content ?? _a)(this.get(\"instrument\").anchors).forEach((anchorObj, i)=>{\n            if(i == 0){\n                \n            }\n            else{\n                data[`channel_${i}`] = anchorObj.distance;\n            }\n        })\n        return data;\n    }),\n    licenceIsValid: computed('',function() {\n        let valid = false;\n        try {\n            valid = this.session.data.authenticated.isValid;\n        } catch {}\n        return valid;\n    }), \n    actions:{\n        async saveAnchors(){\n            try{\n                let anchors = this.get(\"instrument.anchors\");\n                let anchorMap = {};\n\n                (anchors.content ?? anchors).forEach(anchor => {\n                anchorMap[anchor.get(\"number\")] = anchor;\n                });\n                let savePromises = [];\n\n                let channels = this.get(\"instrument\").channelsNum;\n                for (let i = 0; i < channels; i ++){\n                    let anchorNumber = i;\n                    let newDistance = (i === 0)\n                        ? 0\n                        : this.get(\"anchorDiagramInputInitalValue\")[`channel_${i}`] \n                            ? this.get(\"anchorDiagramInputInitalValue\")[`channel_${i}`]\n                            : 0;\n  \n                    let existingAnchor = anchorMap[anchorNumber];\n                    if (existingAnchor) {\n                        // Update if value changed\n                        if (existingAnchor.get(\"distance\") !== newDistance) {\n                            existingAnchor.set(\"distance\", newDistance);\n                            savePromises.push(existingAnchor.save());\n                        }\n\n                    } else {\n                        // Create new anchor\n                        let newAnchor = this.get(\"store\").createRecord(\"anchor\", {\n                            instrument: this.get(\"instrument\"),\n                            number: anchorNumber,\n                            distance: newDistance\n                        });\n\n                        savePromises.push(newAnchor.save());\n                    }\n                }\n                await Promise.all(savePromises);\n                window.location.reload();\n            }\n            catch(error){\n                console.log(\"Error in saveAnchors: \" + error)\n                console.log(error);\n            }\n        },\n        updateChannelInput(key, value){\n            try{\n                let anchors = this.get(\"anchorDiagramInputInitalValue\");\n                anchors[key] = value ? value : 0;\n                this.set(\"anchorDiagramInputInitalValue\", anchors)\n            }\n            catch(error){\n                console.log(\"Error in updateChannelInput: \" + error)\n            }\n        },\n        cycleEditAnchorDiagram(){\n            let data = {};\n            ((_a) => _a.content ?? _a)(this.get(\"instrument\").anchors).forEach((anchorObj, i)=>{\n                if(i == 0){\n                    \n                }\n                else{\n                    data[`channel_${i}`] = anchorObj.distance;\n                }\n            })\n            this.set(\"anchorDiagramInputInitalValue\", data)\n            this.set(\"isEditAnchorDiagram\", !this.get(\"isEditAnchorDiagram\"));\n        },\n        cycleActionBar(tabName){\n            if (tabName === this.activeActionTab){\n                this.set(\"activeActionTab\", null);\n            }\n            else{ \n                this.set(\"activeActionTab\", tabName);\n            }\n        },\n        async jumpToPage(page){\n            try{\n                if(page != \"...\"){\n                    this.set('paginationSearchConfig.pagination.page', Number.parseInt(page))\n                    await this.getAlertsList();\n                }\n            }\n            catch(err){\n\n            }\n        },\n        cycleAlertsListVisibility(){\n            this.set(\"isAlertsListVisible\", !this.get(\"isAlertsListVisible\"));\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        updatePage(){\n            let store = this.get('store');\n            let instrument = this.get('instrument');\n            let anchors = instrument.get('anchors');\n\n            (anchors.content ?? anchors).forEach(function(anchor, index) {\n                let number = anchor.get('number') - 1;\n                let total = (anchors.content ?? anchors).length-1;\n                if(number >= 0) {\n                    let gauge = instrument.get('gaugeLength');\n                    let distance = instrument.get('headExclusionLength') + gauge;\n                    if(!instrument.get('stacked') && number >= total / 2) {\n                        distance += (gauge + 20) / 2;\n                    }\n                    distance += (gauge + 20) * (number % (total / 2));\n                    if (isNaN(distance)) {\n                        distance = 0;\n                    }\n                    //let val = anchors[index];\n                    anchor.set('distance', distance);\n                    anchor.save();\n                }\n            });\n\n            //instrument.set('anchors',anchors);\n            //instrument.save();\n            setTimeout(function() { alert('To see changes, please refresh the page.'); }, 1);\n        },\n        viewData(id) {\n            let endDateObj = new moment();\n            let startDateObj = moment(endDateObj).subtract(7, 'days').format('YYYY-MM-DDTHH:mm');\n            let formattedEndDateObj = endDateObj.format('YYYY-MM-DDTHH:mm');\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\");\n            this.get('router').transitionTo('raw-data', id, { queryParams: { \"advancedStartDate\": startDateObj, \"advancedEndDate\": formattedEndDateObj, \"advancedYAxisUnit\": baseUnit}});\n            //this.viewData(id);\n        },\n        tGraph(id) {\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values');\n            //this.tGraph(id, 'displacement-values');\n        },\n        sGraph(id) {\n            this.get('router').transitionTo('spatial-graphs.spatial-graph', id, 'displacement-values');\n            //this.sGraph(id, 'displacement-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveInstrument(){\n            const _this = this;\n            // console.log(\"test\");\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/instruments\";    \n                }\n            } else {\n                window.location.href = \"/instruments\";\n            }            \n        }\n\n    }\n\n})","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { copy } from 'ember-copy';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'spatial-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    progressAnimationDuration: 100, //set 50, was 700\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 50, //set 25, was 500\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return this.get('blastEvents').map(function(event) {\n                return {\n                    type: 'Blast',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n            var chartData = { values: item.get(\"values\") };\n\n            var modelName = this.get('chartDataModelName');\n\n            if (modelName === 'strain-values' || modelName === 'load-values') { \n                var plated = this.get('instrument').get('plated');\n                var type = this.get('instrument').get('instrumentType').get('title');\n                //console.log(type);\n                \n                if (type === 'dCable') {\n                    chartData.values.splice(0,1);\n                    chartData.values.unshift(0);\n                    if(plated) {\n                        chartData.values.push(chartData.values[chartData.values.length - 1]);\n                    } else {\n                        chartData.values.push(0);\n                    }\n                } else if (type === 'dExto') {\n                    chartData.values.unshift(chartData.values[0]);\n                }\n            }\n                        \n            return chartData;\n        } catch (error) {\n            return [];\n        }\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n        try {\n            return { values: item.get(\"values\") };            \n        } catch (error) {\n            return [];\n        }\n    }),\n\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n\n/*         if (this.get('instrument').get('instrumentType').get('title') == 'dRebar') {\n            for(let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                anchorDistances[ctr] = (ctr) + '-' + anchorDistances[ctr];\n            }\n\n            for(let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                anchorDistances[ctr] = (ctr) + '-' + anchorDistances[ctr];\n            }\n        }\n */\n        var modelName = this.get('chartDataModelName');\n        //if (this.get('instrument').get('instrumentType').get('title') != 'dRebar') {\n            if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {\n                anchorDistances.splice(0, 1);\n            }\n        //}\n\n        if (modelName === 'axial-displacement-values') {\n            if (this.get('instrument').get('stacked')) {\n                let half_anchors = (anchorDistances.length / 2) + 1;\n                let gauge = this.get('instrument').get('gaugeLength');\n                while (anchorDistances.length > half_anchors) {\n                    anchorDistances.pop();\n                }\n                anchorDistances[0] = anchorDistances[1] - gauge;\n            } else {\n                let last = anchorDistances[anchorDistances.length-1];\n                anchorDistances.sort(function(a,b){return a-b;});\n                let gauge = this.get('instrument').get('gaugeLength');\n                //console.log('gauge: ' + gauge);\n                anchorDistances.forEach(function(item, index) {\n                    anchorDistances[index] = item - gauge;\n                    //console.log(item);\n                });\n                //anchorDistances.push(this.get('instrument').get('instrumentLength') * 1000);\n                anchorDistances.shift();\n                anchorDistances.push(last);\n            }\n        }\n\n\n\n\n        return anchorDistances;\n    }),\n\n    anchorAXDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n\n        let midPoints = [];\n\n        if(this.get('instrument').get('stacked')) {\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            \n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n\n            let midLeft = [];\n            for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n            }\n            midPoints = midLeft;\n        } else { //staggered\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n    \n            midPoints = $.map(anchorDistances.slice(1, center + 1), function(v, i) {\n                return [v, anchorDistances.slice(center + 1)[i]];\n              });\n\n            midPoints.unshift(headExclusion);\n            let mid_temp = [];\n            for(let ctr = 1;ctr < midPoints.length; ctr++) {\n                mid_temp.push((midPoints[ctr - 1] + midPoints[ctr]) / 2);\n            }\n            midPoints = mid_temp;\n\n            if (modelName === 'bending-strain-values') {\n                midPoints.shift();\n                midPoints.pop();\n            }    \n            \n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n        \n        //console.log(midPoints);\n        \n        return midPoints;\n    }),\n\n    anchorBXDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n\n        let midPoints = [];\n\n        if(this.get('instrument').get('stacked')) {\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            \n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n\n            let midLeft = [];\n            for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n            }\n            midPoints = midLeft;\n        } else {\n\n        let center = anchorDistances.length - 1;\n        center = Math.ceil(center / 2);\n\n        midPoints = $.map(anchorDistances.slice(1, center + 1), function(v, i) {\n            return [v, anchorDistances.slice(center + 1)[i]];\n          });\n            midPoints.shift();\n            midPoints.pop();                  \n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n\n        return midPoints;\n    }),\n\n    // calculate mid distances between anchors for strain values\n    anchorMidDistances: computed('anchorDistances', function() {\n        let anchorDistances = copy(this.get('anchorDistances')),\n            dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            midDistances = []\n        ;\n\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n            if (this.get('instrument').get('stacked')) {\n                anchorDistances.shift(0);\n                let finalSize = anchorDistances.length / 2;\n                while (anchorDistances.length > finalSize) {\n                    anchorDistances.pop(finalSize);\n                }\n                anchorDistances.unshift(this.get('instrument').get('headExclusionLength'));\n            } else { //staggered\n\n            }\n        } else { //not rebar\n            anchorDistances.unshift(0);\n        }\n\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            let mid = (anchorDistances[i] + anchorDistances[i + 1]) / 2;\n            midDistances.push( +mid.toFixed(2) );\n        }\n\n        if(type === 'dCable') {\n            midDistances.splice(0,1);\n            //midDistances.unshift(0);\n            midDistances[0] = 0;\n            var len = this.get('instrument').get('length');\n            var length = this.get('instrument').get('instrumentLength');\n\n            var modelName = this.get('chartDataModelName');\n            if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {    \n                if(length !== null && length !== 0) {\n                    midDistances.push(length);\n                } else {\n                    midDistances.push(anchorDistances[anchorDistances.length - 1]);\n                }\n            }\n        }\n        // console.log(\"Anchors: \" + anchorDistances);\n         //console.log(\"Mids: \" + midDistances);\n\n        return midDistances;\n    }),\n\n    anchorColors: d3.scale.category10().range(),\n\n    anchorDistancesChartReferencePoints: computed('chartDataModelName', 'instrument', 'anchorDistances', 'anchorMidDistances', 'anchorAXDistances', 'anchorBXDistances', function() {\n        let anchorDistances = this.get('anchorDistances');\n        var modelName = this.get('chartDataModelName');\n        var anchorMidDistances = this.get('anchorMidDistances');\n\n        //console.log(this.get('instrument').get('instrumentTypeID'));\n\n        if(this.get('instrument').get('instrumentTypeID') === 3) {//rebar \n            if(this.get('instrument').get('stacked')) { //is stacked\n                if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                    anchorDistances = this.get('anchorAXDistances');\n                } else if (modelName === 'bending-strain-values') {\n                    anchorDistances = this.get('anchorBXDistances');\n                }\n            } else { //is NOT stacked\n                if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                    anchorDistances = this.get('anchorAXDistances');\n                } else if (modelName === 'bending-strain-values') {\n                    anchorDistances = this.get('anchorBXDistances');\n                }\n            }\n        }\n\n        if (this.get('instrument').get('instrumentType').get('title') !== 'dRebar') {\n            if(modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                return anchorMidDistances.map(function(anchorDistance){\n                    return {\n                        key: anchorDistance,\n                        type: 'referencePoints',\n                        values: [\n                            anchorDistance\n                        ]\n                    };\n                });\n                    \n            }\n        }\n\n        return anchorDistances.map(function(anchorDistance){\n            return {\n                key: anchorDistance,\n                type: 'referencePoints',\n                values: [\n                    anchorDistance\n                ]\n            };\n        });\n    }),\n\n    inlineHoverValuesSideOffset: computed('chartDataModelName', function() {\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'load-values') {\n            return 28;\n        } else if((modelName === 'axial-strain-values' || modelName === 'bending-strain-values') && this.get('instrument').get('stacked')) {\n            return 28;\n        }\n        return 0;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints'),\n            anchorDistances = this.get('anchorDistances'),\n            anchorAXDistances = this.get('anchorAXDistances'),\n            anchorBXDistances = this.get('anchorBXDistances'),\n            anchorDistancesChartReferencePoints = this.get('anchorDistancesChartReferencePoints'),\n            anchorMidDistances = this.get('anchorMidDistances')\n        ;\n        let zoomChartLinesData = [];\n\n        var modelName = this.get('chartDataModelName');\n\n        \n        if ((modelName === 'strain-values' || modelName === 'load-values') && this.get('instrument').get('instrumentType').get('title') !== 'dRebar') { \n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorMidDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else if (modelName === 'axial-strain-values' || modelName === 'load-values' ) {//&& !this.get('instrument').get('stacked')) {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorAXDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else if (modelName === 'bending-strain-values' ) { //&& !this.get('instrument').get('stacked')) {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorBXDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (anchorDistancesChartReferencePoints) {\n            zoomChartLinesData = zoomChartLinesData.concat(anchorDistancesChartReferencePoints);\n        }\n\n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        var modelName = this.get('chartDataModelName');\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        if(type === 'dCable') {\n            if(modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                //console.log(fullRangeDataPoints);\n                fullRangeDataPoints.forEach(element => element.values[0]=0);\n            }\n        }\n        \n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[chartLineIndex]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n    }),\n\n    numLines: computed('zoomTimePoints', function() {\n        return this.get('zoomTimePoints').length;\n    }),\n\n    lineDrawDelay: computed('numLines', function() {\n        return (13000 / (this.get('numLines') + 1)) ^ (1 / 20);\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            inlineHoverValuesSideOffset = _this.get('inlineHoverValuesSideOffset'),\n            progressAnimationDuration = _this.get('progressAnimationDuration'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n\n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let axisName = '';\n                let units = chartData.get('units');\n                switch(yAxisLegend.get('title')) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    case 'axial_strain':\n                        axisName = \"Axial Strain\";\n                        units = \"%\";\n                        break;\n                    case 'bending_strain':\n                        axisName = \"Bending Strain\";\n                        units = \"%\";\n                        break;\n                    case 'axial_displacement':\n                        axisName = \"Axial Displacement\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n                \n                if(yAxisLegend.get('title')==='load') {\n                    title = axisName + \" (kN)\";\n                } else {\n                    title = axisName + \" (\" + units + \")\";\n                }\n            }\n\n            let zoomChart = nv.models.lineChartProgressAnimationAPI()\n                .margin({top: 55, right: 10, bottom: 85, left: 60})\n                .useInteractiveGuideline(false)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .distXAxisScale(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .showLegend(true)\n                .progressAnimationDuration(progressAnimationDuration)\n                .showXAxis(true)\n                .noData('No usable data')\n                ;\n\n\n            let length = 0;\n            try {\n                length = _this.instrument.get('instrumentLength');\n                let type = _this.instrument.get('instrumentType');\n                if (type === 'dRebar') {\n                    length = length * 1000;\n                }\n                \n            } catch (ex) {\n\n            }\n            \n            if(length !== null && length === 0) {\n                length = 0;\n            }\n\n            zoomChart.forceX([0, length]);\n/*             if (yAxisLegend.get('title') != 'bending_strain' && yAxisLegend.get('title') != 'axial_strain') {\n                \n            }\n */\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .tickFormat(d3.format(\".2f\"))\n                    // .tickFormat(function(d) {\n                    //     let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                    //     return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    // })\n                    ;\n                zoomChart.yAxis\n                    .axisLabel(title)\n                    .tickFormat(d3.format(\".2f\"));\n\n                zoomChart.distXAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .ticks(5)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(45)\n                    .isDistXTooltip(isDistXTooltip)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2);\n\n                //zoomChart.legend.inlineHoverValuesSideOffset(inlineHoverValuesSideOffset);\n\n                zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n\n                }\n\n/*                 zoomChart.xAxis.dispatch.on('xAxisMouseMove', function (mouseMove) {\n                    console.log('test');\n                });\n */\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log('test');\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n\n                    if (!seismicEventsArray.length || !blastEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (!activeTooltipContent) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                return zoomChart;\n            });\n\n            // declare fullRangeChart because later in zoom chart we need axis from fullRangeChart for events axis on zoomChart\n            let fullRangeChart = nv.models.focus(nv.models.line())\n               .margin({top: 10, right: 10, bottom: 30, left: 60})\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .syncBrushing(false)\n                .independentBrushing(true)\n                .showXAxis(true)\n                .showYAxis(false)\n                ;\n\n\n            nv.addGraph(function() {\n\n                fullRangeChart.xAxis\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n                fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n                fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(fullRangeChart.update);\n\n                // set zoom based on query params if set\n                let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n                let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n                if (startTimestamp && endTimestamp) {\n                    fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n                }\n\n                return fullRangeChart;\n            });\n\n        });\n\n    }\n\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n//import JSONAPISerializer from '@ember-data/serializers/json';\n\nexport default Component.extend({\n\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n    yAxisUnit:null,\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if(yAxisUnitParam){\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    // vibeEventsChartDistXData: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log('vibeEvents');\n    //     //console.log(events);\n    //     if ( this.get('vibeEvents') ) {\n    //         return [{\n    //             key: 'BluVibe',\n    //             type: 'distX',\n    //             color: '#80bf5c',\n    //             values: this.get('vibeEvents').map(function(event) {\n    //                 return [\n    //                     moment( event.get('id') ).valueOf(),\n    //                     event.get('size') ? (event.get('size') * -20) + 20 : 20\n    //                 ];\n    //             })\n    //         }];\n    //     }\n    //     return false;\n    // }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            let data_set = this.get('blastEvents').map(function(event) {\n                //console.log(event.get('timestamp'));\n                return {\n                    type: 'Blast',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n            //console.log(data_set);\n            return data_set;\n        }\n        return false;\n    }),\n\n    // vibeEventsArray: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log(events);\n    //     if ( events ) {\n    //         return events.map(function(event) {\n    //             return {\n    //                 type: 'BluVibe',\n    //                 time: event.get('id'),\n    //                 timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n    //                 ppa: event.get('ppa'),\n    //                 ppv: event.get('ppv'),\n    //                 freq: event.get('frequency')\n    //             };\n    //         }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n    //     }\n    //     return false;\n    // }),\n\n    zoomTempPoints: map('zoomTempData', function(item){\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        return chartData;\n    }),\n\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n\n        //console.log(linesKyes);\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        var modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') { \n            var plated = this.get('instrument').get('plated');\n            \n            if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n                if(plated) {\n                    chartData.values[0] = chartData.values[1];\n                } else {\n                    chartData.values[0] = 0;\n                }\n            } else {\n                //chartData.values.unshift(0);\n            }\n            chartData.values.push(0);\n        }\n        //console.log(chartData);\n        return chartData;\n        } catch(e) { return { values: [] }; }\n    }),\n\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n\n/*     fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        if(instType === 'Tilt') {\n            return ['X','Y','Z'];\n        } else if(instType === 'Wire') {\n            let anchors = [];\n            let numPorts = this.instrument.get('portsNum');\n            let startVal = 0;\n            let maxVal = numPorts;\n/*             if (this.port != '') {\n                //startVal = (1 * this.port) - 1;\n                startVal = (1 * numPorts) - 1;\n                maxVal = startVal + 1;\n            }\n */            for(let ctr = startVal; ctr < maxVal; ctr++) {\n                anchors.push('T' + (ctr + 1));\n                anchors.push(ctr + 1);\n            }\n            return anchors;\n        } else if(instType === 'BluVibe') {\n            return ['Data'];\n        }\n        let chartData = this.get('fullRangeChartData');\n        let dataValuesCount;\n        try {\n            dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n        let anchors = this.get('instrument').get('anchors');\n        \n        const arr = anchors.content ?? anchors;\n        \n        let anchorDistances = arr.map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        //anchorDistances.push('T'); //TODO: add temperature\n\n        //IF chart is Strain-Values chart\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') { \n            var midPoints = [];\n            if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n                //Adjust anchors to mid points between anchors\n                for(var ctr = 1; ctr < anchorDistances.length ; ctr++) {\n                    var mid = (anchorDistances[ctr - 1] + anchorDistances[ctr]) / 2;\n                    midPoints[ctr] = + mid.toFixed(2);\n                }\n\n                //console.log(midPoints);\n\n                //add zero point and end point\n                midPoints.splice(0,1);\n                midPoints[0] = 0;\n                midPoints.push(anchorDistances[anchorDistances.length - 1]);  //TODO: change to length of exto once known\n                //console.log(midPoints);\n            } else if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n                //Adjust anchors to mid points between anchors\n                //console.log(this.get('instrument'));\n                let headExclusion = this.get('instrument').get('headExclusionLength');\n                let leftAnchors = [headExclusion];\n                let rightAnchors = [headExclusion];\n                \n                let center = anchorDistances.length - 1;\n                center = Math.ceil(center / 2);\n\n                leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n\n                let midLeft = [];\n                for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                    midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                }\n\n                let midRight = [];\n                for(var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                    midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                }\n\n                if (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values') {\n                    if(this.get('instrument').get('stacked')) {\n                        midPoints = midLeft;\n                        if (modelName === 'load-values') {\n                            midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n                        }\n                    } else {\n                        midPoints = midLeft.concat(midRight);\n                        /* midPoints = $.map(midPoints.slice(1, center + 1), function(v, i) {\n                            return [v, midPoints.slice(center + 1)[i]];\n                          }); */\n                        if (modelName === 'bending-strain-values') {\n                            midPoints.shift();\n                            midPoints.pop();\n                        }\n\n                    }\n                } else {\n                    midPoints = midLeft.concat(midRight);\n                }\n                if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                    for(let ctr = 0; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n  \n/*                     for(let ctr = 0; ctr < midPoints.length / 2; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n        \n                    for(let ctr = 3; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n */                }\n            } else {\n                for(var ctr = 0; ctr < anchorDistances.length-1; ctr++) {\n                    midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n                }\n            }\n            if(modelName==='displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        } else if (modelName === 'axial-displacement-values' && this.get('instrument').get('stacked')) {\n            let mid = (anchorDistances.length - 1) / 2;\n            while (anchorDistances.length > (mid + 1)) {\n                anchorDistances.pop();\n            }\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else if (modelName === 'axial-displacement-values' && !this.get('instrument').get('stacked')) {\n            anchorDistances.sort(function(a,b){return a-b;});\n\n            //anchorDistances.push(this.get('instrument').get('instrumentLength') * 1000);\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else {\n            if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n                if (modelName === 'displacement-values') { //rebar stretch\n                    var midPoints = [];\n                    let headExclusion = this.get('instrument').get('headExclusionLength');\n                    let leftAnchors = [headExclusion];\n                    let rightAnchors = [headExclusion];\n                    \n                    let center = anchorDistances.length - 1;\n                    center = Math.ceil(center / 2);\n    \n                    leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                    rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n    \n                    if(!this.get('instrument').get('stacked')) {\n                        rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n                    }\n    \n                    let midLeft = [];\n                    for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                        midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                    }\n    \n                    let midRight = [];\n                    for(var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                        midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                    }\n\n                    midPoints = midLeft.concat(midRight);\n                    anchorDistances = midPoints;\n\n                    anchorDistances.unshift(0);\n                }\n                for(let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n    \n                for(let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n            }    \n        }\n        //console.log(anchorDistances);\n        return anchorDistances;\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n            const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTempPoints = this.get('zoomTempPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n\n        //console.log(blastEventsChartDistXData);\n        //console.log(vibeEventsChartDistXData);\n\n        let anchorDistances = this.get('anchorDistances'),\n            zoomChartLinesData = []\n        ;\n\n        if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n            var mName = _this.get('chartDataModelName');\n            if (mName === 'strain-values' || mName === 'strain-rate-values' || mName === 'load-values') {\n                zoomDataPoints.forEach(element => element.values[0] = 0);\n            }\n        }    \n\n/*         if (this.get('instrument').get('instrumentType').get('title') == 'Tilt') {\n                zoomDataPoints.forEach(element => element.values.shift());\n        }    \n */\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n        //console.log(zoomTempPoints.length);\n\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            if (_this.get('chartDataModelName') !== 'displacement-values' && this.get('instrument').get('instrumentType').get('title') !== 'BluVibe'){\n                while(zoomTempPoints.length > zoomDataPoints.length) {\n                    zoomTempPoints.pop();\n                    zoomTempPoints.shift();\n                }\n            }\n            var temp = {key: 'T',\n                type: 'lines',\n                yAxis: 2,\n                values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null,\n                    ];\n                })\n            };\n            //console.log(temp);\n            zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                    ];\n                })\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').queryRecord('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            //vibeEventsArray = this.get('vibeEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        //console.log(vibeEventsArray);\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];//.get('firstObject');\n                \n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let instType = _this.instrument.get('instrumentType').get('title');\n\n                let axisName = '';\n                let units = chartData.get('units');\n                title = '';\n                if (instType === 'BluVibe') {\n                    title = _this.get('chartDataModelName');\n                } else {\n                    title = yAxisLegend.get('title');\n                }\n                \n                switch(title) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    case 'axial_strain':\n                        axisName = \"Axial Strain\";\n                        units = \"%\";\n                        break;\n                    case 'bending_strain':\n                        axisName = \"Bending Strain\";\n                        units = \"%\";\n                        break;\n                    case 'axial_displacement':\n                        axisName = \"Axial Displacement\";\n                        break;\n                    case 'temperature':\n                        axisName = \"Temperature\";\n                        units = \"°C\";\n                        break;\n                    case 'event-frequency':\n                        axisName = \"Event Frequency\";\n                        break;\n                    case 'event-ppv':\n                        axisName = \"Event PPV\";\n                        break;\n                    case 'event-ppa':\n                        axisName = \"Event PPA\";\n                        break;\n                    case 'cumulative-event-frequency':\n                        axisName = \"Cumulative Frequency\";\n                        break;\n                    case 'cumulative-event-ppv':\n                        axisName = \"Cumulative PPV\";\n                        break;\n                    case 'cumulative-event-ppa':\n                        axisName = \"Cumulative PPA\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                        //console.log(title);\n                }\n\n                /* let chartName = yAxisLegend.get('title').capitalize();\n                let chartNameL = chartName.substr(0, chartName.indexOf('_'));\n                let chartNameR = chartName.substr(chartName.indexOf('_') + 1).capitalize();\n                if(chartNameL !== \"\") {\n                    chartName = chartNameL + \" \" + chartNameR;\n                } */\n\n                if (yAxisLegend) {\n                    let raw = _this.raw;\n                    if(yAxisLegend.get('title')==='load') {\n                        title = axisName + \" (kN)\";\n                    } else if (instType === 'Wire') {\n                        if (raw === true) {\n                            title = \"Frequency (Hz)\";\n                        } else {\n                            title = \"Calculated Values\";\n                        }\n                    } else {\n                        title = axisName + \" (\" + units + \")\";\n                    }\n                } else {\n                    if (instType === 'BluVibe') {\n                        title = axisName;\n                    } else {\n                        title = axisName + \" (\" + units + \")\";\n                    }\n                }\n                //title = yAxisLegend.get('unit');\n            }\n\n            function usesPoints(chartName) {\n                //console.log(chartName);\n                switch(chartName) {\n                    case 'event-ppv':\n                    case 'event-ppa':\n                        return true;\n                }\n                return false;\n            }\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(usesPoints(_this.get('chartDataModelName')))\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data')\n            ;\n\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                if (_this.instrument.get('instrumentType').get('title') === 'Tilt') {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".3f\"));\n                    zoomChart.legend.numDecimals(3);\n                } else {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                }\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n\n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = `<span class=\"event-type\">PPV - ${this.yAxisUnit ? this.yAxisUnit == \"RAW\" ? \"mm\" : this.yAxisUnit : \"mm\"}: ` + tooltipContent.ppv + `<br />PPA - ${this.yAxisUnit ? this.yAxisUnit == \"RAW\" ? \"mm\" : this.yAxisUnit : \"mm\"}&#178;: ` + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(vibeEventsArray);\n                    //console.log(distXMouseMove);\n/* \n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    } */\n                    if (!seismicEventsArray.length || !blastEventsArray.length){ //} || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            //activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) { _this.setData(zoomChartLinesData); }\n                if (_this.setChart) { _this.setChart(zoomChart); }\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n\n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    isModalOpen: false,\n    modalMode: 'add', // 'add' | 'edit'\n    modalEditingRowId: null,\n\n    anchorLabels: computed('instrument', function(){\n        const anchors = this.get('instrument') ? this.get('instrument').get('anchors') : null;\n        const arr = (anchors && (anchors.content ?? anchors)) || [];\n        let validCounter = 0;\n        return arr.map((anchor, idx) => {\n            const distance = anchor.get ? anchor.get('distance') : (anchor && anchor.distance);\n            const isUnset = (distance == null || distance === '');\n            if(isUnset){\n                return { index: idx, tableLabel: '', modalLabel: 'Anchor N/A', isUnset: true };\n            }\n            validCounter += 1;\n            return { index: idx, tableLabel: String(distance), modalLabel: `Anchor ${validCounter}`, isUnset: false };\n        });\n    }),\n\n    columnSpecs: computed('anchorLabels', function(){\n        const anchors = this.get('anchorLabels') || [];\n        const out = anchors.map((a) => ({\n            key: `anchor_${a.index}`,\n            label: a.modalLabel,\n            tableLabel: a.tableLabel,\n            valuesIndex: a.index,\n        }));\n        out.push({ key: '__temp__', label: 'Temperature', tableLabel: 'Temperature', isTemp: true });\n        return out;\n    }),\n\n    tableRows: computed('displacementData.[]', 'temperatureData.[]', 'columnSpecs', 'globalDatetimeFormat.value', function(){\n        const dispData = this.get('displacementData') || [];\n        const tempData = this.get('temperatureData') || [];\n        const specs = this.get('columnSpecs') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n\n        const tempById = {};\n        tempData.forEach(r => { tempById[r.id] = r; });\n\n        return dispData.map((dispRow) => {\n            const id = dispRow.id;\n            const dispValues = (dispRow.values || dispRow.get?.('values') || []);\n            const tempRow = tempById[id];\n            const tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n\n            const cells = specs.map((spec) => {\n                let value = '';\n                if(spec.isTemp){\n                    value = tempValues[0];\n                }else{\n                    value = dispValues[spec.valuesIndex];\n                }\n                return { key: spec.key, label: spec.label, value: value == null ? '' : value };\n            });\n            const formattedDate = moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt);\n            return { id, date: id, formattedDate, cells };\n        });\n    }),\n\n    modalFields: computed('columnSpecs', 'modalMode', 'modalEditingRowId', 'tableRows.[]', function(){\n        const specs = this.get('columnSpecs') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingRowId');\n\n        let existingRow = null;\n        if(mode === 'edit' && editingId){\n            existingRow = (this.get('tableRows') || []).find(r => r.id === editingId);\n        }\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && existingRow\n                ? moment(existingRow.date, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm')\n                : moment().format('YYYY-MM-DDTHH:mm'),\n        };\n\n        const cellByKey = {};\n        if(existingRow){\n            existingRow.cells.forEach(c => { cellByKey[c.key] = c.value; });\n        }\n\n        const channelFields = specs.map((spec) => ({\n            key: spec.key,\n            label: spec.label,\n            type: 'text',\n            value: cellByKey[spec.key] != null ? cellByKey[spec.key] : '',\n        }));\n\n        return [dateField, ...channelFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function(){\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingRowId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingRowId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const instrumentId = this.get('instrument.id');\n            const dispData = this.get('displacementData');\n            const tempData = this.get('temperatureData');\n            const dispRow = dispData ? dispData.find(r => r.id === rowId) : null;\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            const promises = [];\n            if(dispRow && dispRow.deleteRecord){ dispRow.deleteRecord(); promises.push(dispRow.save(adapterOptions)); }\n            if(tempRow && tempRow.deleteRecord){ tempRow.deleteRecord(); promises.push(tempRow.save(adapterOptions)); }\n            Promise.all(promises)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const specs = this.get('columnSpecs') || [];\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            const dispValues = [];\n            specs.forEach((spec) => {\n                if(spec.isTemp){ return; }\n                dispValues.push(Number(snapshot[spec.key]) || 0);\n            });\n            const tempValues = [Number(snapshot['__temp__']) || 0];\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingRowId');\n\n            const tempData = this.get('temperatureData') || [];\n            const dispData = this.get('displacementData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            if(isEdit && originalId === newId){\n                const tempRow = findRow(tempData, originalId);\n                const dispRow = findRow(dispData, originalId);\n                const promises = [];\n                if(tempRow){ tempRow.set('values', tempValues); promises.push(tempRow.save(adapterOptions)); }\n                if(dispRow){ dispRow.set('values', dispValues); promises.push(dispRow.save(adapterOptions)); }\n                Promise.all(promises).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                const oldDisp = findRow(dispData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n                if(oldDisp){ oldDisp.deleteRecord(); oldDisp.save(adapterOptions); }\n            }\n\n            const tempRecord = store.createRecord('temperature-value', { id: newId, values: tempValues });\n            tempRecord.save(adapterOptions);\n\n            const dispRecord = store.createRecord('displacement-value', { id: newId, values: dispValues });\n            dispRecord.save(adapterOptions).then(refreshRoute).catch(handleErr);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { map } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n_adapters._date.override({\n    parse(value) { return value == null ? null : moment(value).isValid() ? moment(value).valueOf() : null; },\n    format(time, fmt) { return moment(time).format(fmt); },\n    add(time, amount, unit) { return moment(time).add(amount, unit).valueOf(); },\n    diff(a, b, unit) { return moment(b).diff(moment(a), unit); },\n    startOf(time, unit) { return moment(time).startOf(unit).valueOf(); },\n    endOf(time, unit) { return moment(time).endOf(unit).valueOf(); },\n    formats() { return { datetime:'MMM D, YYYY, h:mm:ss a', millisecond:'h:mm:ss.SSS a', second:'h:mm:ss a', minute:'h:mm a', hour:'hA', day:'MMM D', week:'ll', month:'MMM YYYY', quarter:'[Q]Q - YYYY', year:'YYYY' }; }\n});\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28, colorPalette.orange2, colorPalette.green3,\n    colorPalette.red1, colorPalette.purple7, colorPalette.beige22,\n    colorPalette.pink6, colorPalette.gray5, colorPalette.teal6, colorPalette.cyan4,\n];\n\nexport default Component.extend({\n    store: service(),\n    _spatialChart: null,\n\n    isStacked: computed('instrument', function() {\n        return !!this.get('instrument').get('stacked');\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    // Ported from NVD3 rebarv2 — per-timestamp value processing (side A/B splitting, channel reorder, zero padding)\n    zoomDataPoints: map('zoomChartData', function(item) {\n        try {\n            let chartData = { values: item.get(\"values\") };\n            let modelName = this.get('chartDataModelName');\n            let side = this.attrs.getQueryParams('side');\n            if (this.isStacked || modelName === 'displacement-values') {\n                if (chartData['values'].length >= 6) {\n                    if (side === 'B') {\n                        chartData.values['1'] = chartData.values['4'];\n                        chartData.values['2'] = chartData.values['5'];\n                        chartData.values['3'] = chartData.values['6'];\n                        chartData.values = chartData.values.splice(0, 4);\n                    } else {\n                        chartData.values = chartData.values.splice(0, 4);\n                    }\n                }\n\n                if (modelName === 'load-values' || modelName === 'axial-strain-values') {\n                    chartData.values.push(0);\n                }\n                if (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values') {\n                    if (chartData.values[0] == 0) {\n                        chartData.values.shift();\n                    }\n                }\n            } else {\n                if (modelName != 'displacement-values' && (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values')) {\n                    let ch1 = chartData.values['1'];\n                    let ch2 = chartData.values['2'];\n                    let ch3 = chartData.values['3'];\n                    let ch4 = chartData.values['4'];\n                    let ch5 = chartData.values['5'];\n                    let ch6 = chartData.values['6'];\n\n                    chartData.values['1'] = ch1;\n                    chartData.values['2'] = ch4;\n                    chartData.values['3'] = ch2;\n                    chartData.values['4'] = ch5;\n                    chartData.values['5'] = ch3;\n                    chartData.values['6'] = ch6;\n                }\n            }\n\n            if (!this.isStacked && (modelName === 'axial-strain-values' || modelName === 'load-values' || modelName === 'bending-strain-values')) {\n                chartData.values.shift();\n                chartData.values.push(0);\n            }\n            return chartData;\n        } catch (error) {\n            return [];\n        }\n    }),\n\n    zoomTimePoints: map('zoomChartData', function(item) {\n        return item.get('id');\n    }),\n\n    // Ported from NVD3 rebarv2 — side splitting / midPoint logic preserved.\n    // Uses zoomChartData for dataValuesCount (NVD3 rebarv2 used fullRangeChartData but that\n    // yields 0 when the full-range query is empty; regular rebar uses zoomChartData reliably).\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        let chartData = this.get('zoomChartData');\n        let dataValuesCount;\n        let counter = 0;\n\n        let side_a = [];\n        let side_b = [];\n        let midPoints = [];\n        let modelName = this.get('chartDataModelName');\n        let anchors = this.get('instrument').get('anchors');\n        const arr = anchors.content ?? anchors;\n        let anchorDistances = arr.map(function(anchor) {\n            return anchor.get('distance');\n        });\n        midPoints.push(0);\n\n        try {\n            dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n\n        if (dataValuesCount >= 6 && dataValuesCount % 2 == 1) {\n            counter++;\n            for (counter; counter < (anchorDistances.length / 2); counter++) {\n                side_a.push(anchorDistances[counter]);\n            }\n            for (counter; counter < anchorDistances.length; counter++) {\n                side_b.push(anchorDistances[counter]);\n            }\n        } else {\n            if (dataValuesCount > 3) {\n                counter++;\n            }\n            for (counter; counter < dataValuesCount; counter++) {\n                side_a.push(anchorDistances[counter]);\n            }\n        }\n\n        counter = 0;\n        if (this.isStacked || modelName === 'displacement-values') {\n            let indx = 0;\n            if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                side_a.unshift(0);\n                for (indx; indx < side_a.length - 1; indx++) {\n                    midPoints.push(side_a[indx + 1] - (side_a[indx + 1] - side_a[indx]) / 2);\n                }\n                midPoints.sort(function(a, b) {\n                    return a - b;\n                });\n            } else {\n                let side = this.attrs.getQueryParams('side');\n                if (side === 'B' && modelName === 'displacement-values') {\n                    counter = 0;\n                    side_b.forEach(point => {\n                        midPoints.push(point);\n                    });\n                } else if (side === 'A' && modelName === 'displacement-values') {\n                    side_a.forEach(point => {\n                        midPoints.push(point);\n                    });\n                } else {\n                    for (counter; counter < side_a.length; counter++) {\n                        midPoints.push(side_a[counter]);\n                    }\n                }\n            }\n        } else {\n            side_a.unshift(0);\n            side_b.unshift(0);\n            let indx = 0;\n            if (modelName === 'axial-strain-values' || modelName === 'load-values' || modelName === 'bending-strain-values') {\n                for (indx; indx < side_a.length - 1; indx++) {\n                    midPoints.push(side_a[indx + 1] - ((side_a[indx + 1] - side_a[indx]) / 2));\n                }\n                indx = 0;\n                for (indx; indx < side_b.length - 1; indx++) {\n                    midPoints.push(side_b[indx + 1] - ((side_b[indx + 1] - side_b[indx]) / 2));\n                }\n                midPoints.sort(function(a, b) {\n                    return a - b;\n                });\n            }\n        }\n\n        if (modelName === 'bending-strain-values' || modelName === 'axial-strain-values' || modelName === 'load-values') {\n            midPoints.shift();\n        }\n\n        if (modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') {\n            let length = 0;\n            try {\n                length = this.instrument.get('instrumentLength');\n                midPoints.push(length);\n            } catch (ex) {\n                /* ignore */\n            }\n        }\n\n        this.set('anchorMidDistances', midPoints);\n        return midPoints;\n    }),\n\n    spatialChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'anchorDistances', function() {\n        const zoomDataPoints = this.get('zoomDataPoints');\n        const zoomTimePoints = this.get('zoomTimePoints');\n        const anchorMidDistances = this.get('anchorDistances') || [];\n\n        return zoomDataPoints.map((chartLine, chartLineIndex) => {\n            const rawValues = (chartLine && chartLine.values) || [];\n            const pts = rawValues.map((dataPoint, dataPointIndex) => ({\n                x: anchorMidDistances[dataPointIndex] !== undefined ? anchorMidDistances[dataPointIndex] : null,\n                y: dataPoint !== undefined ? dataPoint : null\n            })).filter(pt => pt.x !== null);\n            pts.sort((a, b) => a.x - b.x);\n            return {\n                key: moment(zoomTimePoints[chartLineIndex]).format('DD MMM YYYY HH:mm'),\n                timestamp: zoomTimePoints[chartLineIndex],\n                values: pts\n            };\n        }).sort((a, b) => moment(a.timestamp).valueOf() - moment(b.timestamp).valueOf());\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        const chartDataModelName = this.get('chartDataModelName');\n        const chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic', x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast', x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes')\n        }));\n    }),\n\n    // Ported from NVD3 rebarv2 — switch cases match original (no axial_displacement case → falls to \"Unknown\")\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        const switchTitle = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (switchTitle) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'axial_strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'bending_strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName');\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n\n        if (switchTitle === 'load') {\n            return `${axisName} (kN)`;\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const spatialLinesData = this.get('spatialChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => { if (item.id === type) { chartData = item; } });\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildSpatialChart(spatialLinesData, yAxisTitle);\n        });\n    },\n\n    _buildSpatialChart(linesData, yAxisTitle) {\n        const canvas = this.element.querySelector('canvas.chartjs-spatial');\n        if (!canvas) return;\n        let instrumentLength = 0;\n        try { instrumentLength = this.instrument.get('instrumentLength') || 0; } catch (e) { /* ignore */ }\n\n        const anchorXValues = this.get('anchorDistances');\n\n        const lineDatasets = linesData.map((line, i) => ({\n            label: line.key, data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length], backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0, pointHoverRadius: 0, tension: 0, parsing: false, _isLine: true\n        }));\n\n        const anchorDatasets = anchorXValues.map((dist, i) => ({\n            label: String(dist), data: [],\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            borderWidth: 0, pointRadius: 0, showLine: false, _isRef: true\n        }));\n\n        const datasets = [...lineDatasets, ...anchorDatasets];\n\n        const noDataPlugin = { id: 'noData', afterDraw(chart) {\n            let hasData = false;\n            chart.data.datasets.forEach(ds => { if (ds._isRef) return; if (!ds.hidden) ds.data.forEach(pt => { if (pt && pt.y != null) hasData = true; }); });\n            if (!hasData) { const { ctx, chartArea: { left, right, top, bottom } } = chart; ctx.save(); ctx.font = '14px sans-serif'; ctx.fillStyle = '#999'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.fillText('No data available', (left + right) / 2, (top + bottom) / 2); ctx.restore(); }\n        }};\n\n        const anchorDotsPlugin = { id: 'anchorDots', afterDraw(chart) {\n            const xScale = chart.scales['x']; const yArea = chart.chartArea.bottom; const ctx = chart.ctx;\n            anchorXValues.forEach((dist, i) => { const px = xScale.getPixelForValue(dist); ctx.save(); ctx.beginPath(); ctx.arc(px, yArea, 6, 0, 2 * Math.PI); ctx.fillStyle = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]; ctx.fill(); ctx.restore(); });\n        }};\n\n        let crosshairX = null;\n        const crosshairPlugin = { id: 'crosshair', afterDraw(chart) {\n            if (crosshairX === null) return; const { ctx, chartArea: { top, bottom } } = chart;\n            ctx.save(); ctx.beginPath(); ctx.strokeStyle = colorPalette.gray5; ctx.lineWidth = 1; ctx.setLineDash([4, 4]); ctx.moveTo(crosshairX, top); ctx.lineTo(crosshairX, bottom); ctx.stroke(); ctx.restore();\n        }};\n\n        // --- Legend-tooltip helpers ---\n        let legendTooltipEl = null;\n        let highlightedIndex = null;\n        let lastTooltipIdx = null;\n\n        function buildSpatialLegendItems(chart) {\n            return chart.data.datasets.filter(ds => ds._isLine).map((ds) => {\n                const i = chart.data.datasets.indexOf(ds);\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:1;margin-right:3px;\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div></div>`;\n            }).join('');\n        }\n\n        function highlightLine(chart, idx, skipUpdate) {\n            highlightedIndex = idx;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine) return;\n                ds.borderColor = (i === idx) ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '22';\n            });\n            if (!skipUpdate) chart.update('none');\n        }\n\n        function restoreLines(chart, skipUpdate) {\n            highlightedIndex = null;\n            chart.data.datasets.forEach((ds, i) => { if (!ds._isLine) return; ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]; });\n            if (!skipUpdate) chart.update('none');\n        }\n\n        function attachSpatialLegendHandlers(el, chart) {\n            el.onmouseover = function(e) { const item = e.target.closest('[data-ds]'); if (!item) return; highlightLine(chart, parseInt(item.dataset.ds)); };\n            el.onmouseout = function() { restoreLines(chart); };\n        }\n\n        function initSpatialLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) { legendTooltipEl = document.createElement('div'); legendTooltipEl.className = 'legend-tooltip'; container.style.position = 'relative'; container.appendChild(legendTooltipEl); }\n            legendTooltipEl.innerHTML = buildSpatialLegendItems(chart);\n            attachSpatialLegendHandlers(legendTooltipEl, chart);\n        }\n\n        function distToSegment(px, py, x1, y1, x2, y2) {\n            const dx = x2 - x1, dy = y2 - y1, lenSq = dx * dx + dy * dy;\n            let t = lenSq === 0 ? 0 : Math.max(0, Math.min(1, ((px - x1) * dx + (py - y1) * dy) / lenSq));\n            const ex = px - (x1 + t * dx), ey = py - (y1 + t * dy);\n            return Math.sqrt(ex * ex + ey * ey);\n        }\n\n        function findClosestLine(chart, mouseX, mouseY) {\n            let closestIdx = -1, closestDist = Infinity;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine || chart.getDatasetMeta(i).hidden) return;\n                const pts = chart.getDatasetMeta(i).data; if (!pts || pts.length < 2) return;\n                for (let j = 0; j < pts.length - 1; j++) { const p1 = pts[j], p2 = pts[j + 1]; if (!p1 || !p2) continue; const dist = distToSegment(mouseX, mouseY, p1.x, p1.y, p2.x, p2.y); if (dist < closestDist) { closestDist = dist; closestIdx = i; } }\n            });\n            return { datasetIndex: closestIdx, pixelDist: closestDist };\n        }\n\n        function updateSpatialTooltip(chart, mouseX, mouseY) {\n            if (!legendTooltipEl) return;\n            const { left, right, top, bottom } = chart.chartArea;\n            if (mouseX < left || mouseX > right || mouseY < top || mouseY > bottom) {\n                if (highlightedIndex !== null) restoreLines(chart, true);\n                legendTooltipEl.style.pointerEvents = 'auto'; legendTooltipEl.innerHTML = buildSpatialLegendItems(chart); attachSpatialLegendHandlers(legendTooltipEl, chart); lastTooltipIdx = null; return;\n            }\n            const closest = findClosestLine(chart, mouseX, mouseY);\n            if (closest.datasetIndex < 0) return;\n            if (closest.datasetIndex !== highlightedIndex) { highlightLine(chart, closest.datasetIndex, true); }\n            const activeIdx = highlightedIndex != null ? highlightedIndex : closest.datasetIndex;\n            if (activeIdx !== lastTooltipIdx) {\n                lastTooltipIdx = activeIdx;\n                const ds = chart.data.datasets[activeIdx];\n                const valuesHtml = ds.data.map((pt, idx) => { const c = CHART_LINE_COLORS[idx % CHART_LINE_COLORS.length]; return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${c};\"></div>${pt && pt.y != null ? pt.y.toFixed(2) : '—'}</div>`; }).join('');\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = `<div class=\"legend-tooltip-date\">${ds.label}</div>${valuesHtml}`;\n            }\n        }\n\n        const spatialChart = new Chart(canvas, {\n            type: 'line', data: { datasets },\n            options: {\n                responsive: true, maintainAspectRatio: false, parsing: false, animation: { duration: 300 },\n                interaction: { mode: 'nearest', intersect: false },\n                onHover(e) { if (e.x != null) { crosshairX = e.x; } },\n                scales: {\n                    x: { type: 'linear', min: 0, max: instrumentLength > 0 ? instrumentLength : undefined,\n                        title: { display: true, text: 'Depth (mm)', font: { size: 12 } },\n                        afterBuildTicks(axis) { const va = anchorXValues.filter(v => v >= axis.min && v <= axis.max).map(v => ({ value: v })); if (va.length > 0) { axis.ticks = va; } },\n                        ticks: { callback(val) { return val.toLocaleString(); } }\n                    },\n                    y: { title: { display: true, text: yAxisTitle, font: { size: 12 } }, ticks: { callback(val) { return val.toFixed ? val.toFixed(2) : val; } } }\n                },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                }\n            },\n            plugins: [noDataPlugin, anchorDotsPlugin, crosshairPlugin]\n        });\n\n        initSpatialLegendTooltip(canvas.parentElement, spatialChart);\n\n        // Scroll-to-zoom\n        const origXMin = spatialChart.options.scales.x.min;\n        const origXMax = spatialChart.options.scales.x.max;\n        canvas.addEventListener('wheel', e => {\n            e.preventDefault();\n            const rect = canvas.getBoundingClientRect();\n            const xScale = spatialChart.scales['x']; const yScale = spatialChart.scales['y'];\n            const factor = e.deltaY < 0 ? 1.15 : 0.87;\n            const cursorX = xScale.getValueForPixel(e.clientX - rect.left);\n            const cursorY = yScale.getValueForPixel(e.clientY - rect.top);\n            spatialChart.options.scales.x.min = cursorX - (cursorX - xScale.min) * factor;\n            spatialChart.options.scales.x.max = cursorX + (xScale.max - cursorX) * factor;\n            spatialChart.options.scales.y.min = cursorY - (cursorY - yScale.min) * factor;\n            spatialChart.options.scales.y.max = cursorY + (yScale.max - cursorY) * factor;\n            spatialChart.update('none');\n        }, { passive: false });\n\n        // Drag-to-pan\n        let panStartX = null, panStartY = null, panXMin = null, panXMax = null, panYMin = null, panYMax = null;\n        canvas.addEventListener('mousedown', e => { panStartX = e.clientX; panStartY = e.clientY; panXMin = spatialChart.scales['x'].min; panXMax = spatialChart.scales['x'].max; panYMin = spatialChart.scales['y'].min; panYMax = spatialChart.scales['y'].max; canvas.style.cursor = 'grabbing'; });\n        canvas.addEventListener('mousemove', e => {\n            const rect = canvas.getBoundingClientRect(); const px = e.clientX - rect.left; const py = e.clientY - rect.top; const { left, right } = spatialChart.chartArea;\n            crosshairX = (px >= left && px <= right) ? px : null;\n            if (panStartX !== null) {\n                const xPxRange = spatialChart.chartArea.right - spatialChart.chartArea.left;\n                const yPxRange = spatialChart.chartArea.bottom - spatialChart.chartArea.top;\n                spatialChart.options.scales.x.min = panXMin - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.x.max = panXMax - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.y.min = panYMin + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n                spatialChart.options.scales.y.max = panYMax + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n            } else {\n                updateSpatialTooltip(spatialChart, px, py);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('mouseleave', () => {\n            crosshairX = null;\n            if (highlightedIndex !== null) restoreLines(spatialChart);\n            if (legendTooltipEl) { legendTooltipEl.style.pointerEvents = 'auto'; legendTooltipEl.innerHTML = buildSpatialLegendItems(spatialChart); attachSpatialLegendHandlers(legendTooltipEl, spatialChart); }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('dblclick', () => { spatialChart.options.scales.x.min = origXMin; spatialChart.options.scales.x.max = origXMax; spatialChart.options.scales.y.min = undefined; spatialChart.options.scales.y.max = undefined; spatialChart.update('none'); });\n        const onPanEnd = () => { panStartX = panStartY = panXMin = panXMax = panYMin = panYMax = null; canvas.style.cursor = 'default'; };\n        canvas.addEventListener('mouseup', onPanEnd);\n        document.addEventListener('mouseup', onPanEnd);\n\n        this.set('_spatialChart', spatialChart);\n    },\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const spatialChart = this.get('_spatialChart');\n        if (spatialChart) { spatialChart.destroy(); }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\n// Chart line colors — sourced from color-palette\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,    // #0077b6\n    colorPalette.orange2,   // #FF7444\n    colorPalette.green3,    // #2a9d8f\n    colorPalette.red1,      // #D25353\n    colorPalette.purple7,   // #8b5cf6\n    colorPalette.beige22,   // #b08968\n    colorPalette.pink6,     // #ec4899\n    colorPalette.gray5,     // #6b7280\n    colorPalette.teal6,     // #10b981\n    colorPalette.cyan4,     // #06b6d4\n];\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let chartData = this.get('fullRangeChartData');\n        let dataValuesCount = 0;\n        try {\n            const firstObj = chartData.objectAt ? chartData.objectAt(0) : chartData[0];\n            const vals = firstObj ? (firstObj.get ? firstObj.get('values') : firstObj.values) : null;\n            dataValuesCount = vals ? vals.length : 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n\n        let anchors = this.get('instrument').get('anchors');\n        const arr = anchors.content ?? anchors;\n        let anchorDistances = arr.map(anchor => anchor.get('distance'));\n\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'load-values' || modelName === 'bending-strain-values' || modelName === 'axial-strain-values' || modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            let side_a = [];\n            let side_b = [];\n            side_b.push(0);\n            var midPoints = [];\n            midPoints.push(0);\n\n            anchorDistances.forEach(function(value, index) {\n                if (index <= 3 && value != 0) {\n                    side_a.push(anchorDistances[index]);\n                } else {\n                    side_b.push(anchorDistances[index]);\n                }\n            });\n\n            let indx = 0;\n            for (indx; indx < side_a.length - 1; indx++) {\n                midPoints.push(side_a[indx + 1] - ((side_a[indx + 1] - side_a[indx]) / 2));\n            }\n\n            indx = 0;\n            if (dataValuesCount > 5) {\n                for (indx; indx < side_b.length - 1; indx++) {\n                    midPoints.push(side_b[indx + 1] - ((side_b[indx + 1] - side_b[indx]) / 2));\n                }\n            }\n\n            midPoints.shift();\n            anchorDistances = midPoints;\n        }\n\n        // Label anchors with A/B side prefixes when > 5 data values\n        let anchorCount = anchorDistances.length;\n        let newAnchorDistances = [];\n        let halfIndex = Math.floor((anchorCount - 1) / 2);\n\n        anchorDistances.forEach((obj, index) => {\n            if (dataValuesCount > 5) {\n                if (index <= halfIndex) {\n                    newAnchorDistances.push('A-' + obj);\n                } else {\n                    newAnchorDistances.push('B-' + obj);\n                }\n            } else {\n                newAnchorDistances.push(String(obj));\n            }\n        });\n        return newAnchorDistances;\n    }),\n\n    // Main chart sourced from zoomChartData to mirror NVD3 (Group By applies to visible chart).\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'anchorDistances', 'chartDataModelName', function() {\n        const anchorDistances = this.get('anchorDistances');\n        const fullRangeChartData = this.get('zoomChartData');\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values';\n\n        const lines = anchorDistances.map((chartLineName, chartLineIndex) => ({\n            key: chartLineName,\n            values: fullRangeChartData.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[chartLineIndex] !== undefined) ? arr[chartLineIndex] : null\n                };\n            })\n        }));\n\n        // Add temperature overlay on y2 (unless viewing temperature data itself)\n        if (modelName !== 'temperature-values') {\n            const zoomTempData = this.get('zoomTempData');\n            if (zoomTempData && zoomTempData.length) {\n                lines.push({\n                    key: 'T (°C)',\n                    yAxis: 'y2',\n                    hidden: false,\n                    values: zoomTempData.map(item => {\n                        const rawValues = item.get('values');\n                        const arr = Array.isArray(rawValues) ? rawValues : [];\n                        return {\n                            x: moment(item.get('id')).valueOf(),\n                            y: arr[0] !== undefined ? arr[0] : null\n                        };\n                    })\n                });\n            }\n        }\n\n        return lines;\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        let title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                units = this.get(\"yAxisUnit\") || getAttr('units');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n            case 'axial_strain':\n            case 'bending_strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName') || 'Load';\n                units = 'kN';\n                break;\n            case 'temperature':\n                axisName = \"Temperature\";\n                units = \"°C\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const fullRangeChartLinesData = this.get('fullRangeChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildMainChart(fullRangeChartLinesData, yAxisTitle);\n            this._buildOverviewChart();\n        });\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        const datasets = anchorDistances.map((chartLineName, i) => ({\n            label: String(chartLineName),\n            data: fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        anchorDistances.forEach((chartLineName, i) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(chartLineName));\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed, get, observer } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\nimport { getAnchorCountFromId } from '../../utils/instrument-id';\n\nfunction resetNewInstrumentObject(_this) {\n\n    //console.log('reset');\n    _this.set('newInstrumentObject', {});\n    //_this.set('name', null);\n    _this.set('zeroTimestamp', null);\n    _this.set('installDate', null);\n    //_this.set('east', null);\n    //_this.set('north', null);\n    //_this.set('depth', null);\n    //_this.set('azimuth', null);\n    //_this.set('dip', null);\n    //_this.set('instrumentType', 0);\n    //_this.set('headAt', 'HAC');\n    //_this.set('instrumentLength', 0);\n    //_this.set('strokeLength', 0);\n    //_this.set('referenceAnchor', null);\n    //_this.set('headExclusionLength', 0);\n    //_this.set('gaugeLength', 0);\n    //_this.set('bulbed', false);\n    //_this.set('plated', false);\n    //_this.set('stacked', false);\n    //_this.set('active', true);\n    // _this.set('elasticLimitPct', 0);\n    // _this.set('plasticLimitPct', 0);\n    // _this.set('ultimateLimitPct', 0);\n    // _this.set('elasticLimitFce', 0);\n    // _this.set('plasticLimitFce', 0);\n    // _this.set('ultimateLimitFce', 0);\n    _this.set('newInstrumentObject.youngsModulus', 200);\n    _this.set('newInstrumentObject.crossSectionalArea', 283.53);\n    _this.set('newInstrumentObject.boltDiameter', 19);    \n}\n\nfunction setAxialStiffness(_this){\n    let stiffness = ( ( (_this.get('newInstrumentObject.youngsModulus') * _this.get('newInstrumentObject.crossSectionalArea') )/100).toFixed(2));\n    _this.set('newInstrumentObject.axialStiffness', stiffness);\n}\n\nexport default class CreatePackInstrument extends Component {\n    //@service session;\n    //@service currentUser;\n\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n        setAxialStiffness(this);\n    }\n\n    isAuthenticated = true;\n    newInstrumentObject = {};\n    headAt = 'HAC';\n    zeroTimestamp = null;\n    installDate = null;\n    authError = false;\n    project = null;\n    level = null;\n\n\n    onYoungsModulusChanged = observer('newInstrumentObject.youngsModulus', function() {\n        let youngsModulus = this.get('newInstrumentObject.youngsModulus');\n        \n        console.log(' YoungsModulus changed::: ' + bolt);\n        \n        console.log('Axial Stiffness::: ' + youngsModulus);\n    });\n\n    actions= {\n\n        \n        setProject(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n\n\n        handleBoltDiameterChange(event) {\n            let boltDiameter = event.target.value;\n            console.log('boltDiameter changed' + boltDiameter);\n            let area = Math.PI * Math.pow(boltDiameter/2, 2);\n            let axialStiffness = ((area * this.get('newInstrumentObject.youngsModulus')/100)).toFixed(2);\n            this.set('newInstrumentObject.axialStiffness', axialStiffness) ;\n            this.set('newInstrumentObject.crossSectionalArea', area.toFixed(2));\n        },\n        createInstrument(object){\n\n            //console.log(this.get('prevDup'));\n            //console.log((typeof this.get('prevDup') === \"undefined\"));\n            \n            let _this = this,\n            store = this.get('store'),\n            newInstrumentObject = this.get('newInstrumentObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newInstrumentObject.id = this.get('id');\n            newInstrumentObject.zeroTimestamp = this.get('zeroTimestamp');\n            newInstrumentObject.installDate = this.get('installDate');\n            //newInstrumentObject.east = this.get('east');\n            //newInstrumentObject.north = this.get('north');\n            //newInstrumentObject.depth = this.get('depth');\n            newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n            newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n            newInstrumentObject.stacked = true;//this.get('stacked');\n            newInstrumentObject.active = true;\n            if(typeof newInstrumentObject.id === 'undefined' || newInstrumentObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n            if(this.get('youngsModulus') == null || this.get('youngsModulus') == 0){\n                newInstrumentObject.youngsModulus = 200;\n            }\n            if(this.get('boltDiameter') == null || this.get('boltDiameter') == 0){\n                newInstrumentObject.boltDiameter = 19;\n                newInstrumentObject.crossSectionalArea = (Math.PI * Math.pow(newInstrumentObject.boltDiameter/2, 2)).toFixed(2);\n            }\n\n            let axialStiffness = ((newInstrumentObject.youngsModulus * newInstrumentObject.crossSectionalArea)/100);\n            newInstrumentObject.elasticLimitFce = (newInstrumentObject.youngsModulus * axialStiffness).toFixed(2);\n            if(!error) {\n                if(typeof newInstrumentObject.strokeLength === 'undefined' || newInstrumentObject.strokeLength === 0) {\n                    error = true;\n                    this.setError('fieldError',true);\n                    this.setError('isVisibleError',true);\n                }\n            }\n\n            if (this.get('zeroTimestamp') != null) {\n                newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('installDate') != null) {\n                newInstrumentObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            // console.log(get(this, 'duplicateError'));\n\n            console.log('[rebarv2] newInstrumentObject before createRecord:', newInstrumentObject);\n            console.log('[rebarv2] error before createRecord:', error);\n\n            let newInstrument = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    // axialStiffness is a computed property on the model — cannot be set via createRecord\n                    delete newInstrumentObject.axialStiffness;\n                    // unload any stuck record from a previous failed attempt with the same ID\n                    let existingRecord = store.peekRecord('instrument', newInstrumentObject.id);\n                    if (existingRecord) { existingRecord.unloadRecord(); }\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                    console.log('[rebarv2] createRecord succeeded:', newInstrument);\n                } catch (err) {\n                    console.error('[rebarv2] createRecord threw:', err);\n                    this.setError('isVisibleError',true);\n                    error = true;\n                    if(err.message && err.message.includes('has already been used')) {\n                        this.setError('duplicateError',true);\n                        dup = true;\n                    }\n                }\n            }\n\n            this.setError('authError', false);\n\n            if (!error) {\n                console.log('[rebarv2] calling save()...');\n                    newInstrument.save().then(function(results){\n                        console.log('[rebarv2] save succeeded, results:', results);\n\n                        if(results.id != null) {\n                            store.createRecord('anchor', {number: 0, distance: 0, instrument: results}).save();\n                            let anchorCount = getAnchorCountFromId(newInstrumentObject.id);\n                            for(var ctr = 0; ctr < anchorCount; ctr++) {\n                                let gauge = parseInt(newInstrumentObject.gaugeLength);\n                                let distance = parseInt(newInstrumentObject.headExclusionLength) + gauge;\n                                if(!newInstrumentObject.stacked && ctr+1 > anchorCount / 2) {\n                                    distance += (gauge + 20) / 2;\n                                }\n                                distance += (gauge + 20) * (ctr % (anchorCount / 2));\n                                if (isNaN(distance)) {\n                                    distance = 0;\n                                }\n                                store.createRecord('anchor', {number: ctr+1, distance: distance, instrument: results}).save();\n                            }\n                        }\n\n                        // console.log(dup);\n                        if(results.id != null) {\n                            _this.get('submit')(results.id);\n                        } else {\n                            this.setError('isVisibleError',true);\n                            error = true;\n                        }\n                    }).catch(function(reason) {\n                        console.error('[rebarv2] save() catch:', reason);\n                        _this.setError('isVisibleError',true);\n                        _this.setError('authError',true);\n                    });\n            } \n        },\n        stackedChanged(object)\n        {\n            //console.log(document.getElementById('newInstrumentObjectBulbed').checked);\n            this.set(\"stacked\",document.getElementById('newInstrumentObjectStacked').checked);\n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let displacementValueObjectValues = _this.get('displacementValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(displacementValueObjectValues).forEach(function(key,index) {\n        displacementValueObjectValues[key] = 0;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n    // newTimestampValue: computed('dateFormat', function() {\n    //     return moment().format(this.get('dateFormat'));\n    // }),\n\n    newDisplacementValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n    displacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    newDisplacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n    \n    actions: {\n        setNewDisplacementValue(key, event) {\n            const vals = this.get('newDisplacementValueObjectValues');\n            vals[key] = event.target.value;\n        },\n        setNewTimestampValue(event) {\n            this.set('newTimestampValue', event.target.value);\n        },\n        setTemperatureValue(event) {\n            this.set('temperatureObjectValue', event.target.value);\n        },\n        saveNew(){\n            let _this = this,\n                store = this.get('store'),\n                newDisplacementValuesObject = this.get('newDisplacementValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                displacementValues = this.get('displacementValues'),\n                temperatureValues = this.get('temperatureValues')\n            ;\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newDisplacementValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newDisplacementValuesObject.values = Object.values(this.get('newDisplacementValueObjectValues'));\n\n            const newDisplacementValues = store.createRecord('displacement-value', newDisplacementValuesObject);\n            // save new displacement-value to DB\n            const savedDisplacementValuesObject = newDisplacementValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if displacement-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //displacementValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n                \n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import { getApiBaseUrl } from '../../utils/api-config';\nimport { inject as service } from '@ember/service';\nimport { computed, observer } from '@ember/object';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    didReceiveAttrs() {\n        this._super(...arguments);\n      },\n    router:service(),\n    store:service(),\n    api:service(),\n    session: service(),\n    //Old Declarations\n    // isAuthenticated : true,\n    selectedVendor: null,\n    selectedModel: null,\n    editing: 0,\n\n    //New Params\n    activeActionTab:null,\n    ordering:null,\n    paginationSearchConfig:{\n        searchObject:{ calibrationDateOrdering:\"DESC\"},\n        pagination:{page:1, pageSize:5, totalPages:1},\n        alertProfilePaginationList : [],\n    },\n    anchorDiagramInputInitalValue:[],\n    batchSelectedAlertsID:[],\n    isAlertsListVisible:false,\n    isEditAnchorDiagram:false,\n    \n    async init() {\n        this._super(...arguments);\n        if(this.get('youngsModulus') == null || this.get('youngsModulus') == 0){\n            this.set('youngsModulus', 200);\n        }\n        await this.getAlertsList();\n    },\n    getAlertsList:async function(){\n\n        let payload = {\n            instrumentId: this.get(\"instrument\").id,\n            page: this.paginationSearchConfig.pagination.page,\n            page_size:this.paginationSearchConfig.pagination.pageSize,\n            \n        };\n        if (this.get(\"ordering\") != null ){\n            payload[\"ordering\"] = this.get(\"ordering\");\n        }\n        let url = getApiBaseUrl() + \"/alerts/\";\n        const queryString = new URLSearchParams(payload).toString();\n        if (queryString) {\n            url += `?${queryString}`;\n        }\n        const response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json(); \n            const metaPaginationData = responseData['meta'];\n            this.set(\"paginationSearchConfig.pagination.totalPages\", metaPaginationData['pagination']['total_pages']);\n\n            this.processAlertsList(responseData.data);\n            this.updatePaginationList();\n        }\n        else {\n            this.set(\"alertsList\", [])\n        } \n    },\n    processAlertsList:function(rawList){\n        let list = [];\n        rawList.forEach(element => {\n            let rawElement = element;\n            element = element[\"attributes\"]\n            list.push({\n                id: rawElement[\"id\"],\n                counter: element[\"counter\"],\n                createdAt: element[\"created-at\"],\n                evaluationType: element[\"evaluation-type\"],\n                instrumentId: element[\"instrument-id\"],\n                isAcknowledged: element[\"is-acknowledged\"],\n                isActive: element[\"is-active\"],\n                isMuted: element[\"is-muted\"],\n                lastDataReceivedAt: element[\"last-data-received-at\"],\n                lastEvaluatedAt: element[\"last-evaluated-at\"],\n                lastTriggeredAt: element[\"last-triggered-at\"],\n                level: element[\"level\"],\n                name: element[\"name\"],\n                channels: element[\"channels\"],\n                note: element[\"note\"],\n                parameters: element[\"parameters\"],\n                softResetCounter: element[\"soft-reset-counter\"],\n            })\n        });\n        this.set(\"alertsList\", list)\n    },\n    updatePaginationList: function () {\n        let range = [];\n        const maxPageToShow = 3; // Adjust this based on how many pages you want to show in the middle\n        const paginationObj = this.get('paginationSearchConfig.pagination');\n    \n        // Always include the first page\n        range.push(1);\n    \n        if (paginationObj['totalPages'] <= maxPageToShow + 2) {\n            // If total pages are small enough, show all pages\n            for (let i = 2; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else if (paginationObj['page'] <= maxPageToShow) {\n            // Current page is within the first few pages\n            for (let i = 2; i <= maxPageToShow + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        } else if (paginationObj['page'] >= paginationObj['totalPages'] - maxPageToShow + 1) {\n            // Current page is within the last few pages\n            range.push('...');\n            for (let i = paginationObj['totalPages'] - maxPageToShow; i <= paginationObj['totalPages']; i++) {\n                range.push(i);\n            }\n        } else {\n            // Current page is in the middle\n            range.push('...');\n            for (let i = paginationObj['page'] - 1; i <= paginationObj['page'] + 1; i++) {\n                range.push(i);\n            }\n            range.push('...');\n            range.push(paginationObj['totalPages']);\n        }\n    \n        this.set('paginationSearchConfig.alertProfilePaginationList', range);\n    },\n    orderingObserver: observer('ordering',async function() {\n        await this.getAlertsList();\n    }), \n    anchorDiagramLabelInitalValue:computed(\"instrument\", function(){\n        let data = {};\n        ((_a) => _a.content ?? _a)(this.get(\"instrument\").anchors).forEach((anchorObj, i)=>{\n            if(i == 0){\n                \n            }\n            else{\n                data[`channel_${i}`] = anchorObj.distance;\n            }\n        })\n        return data;\n    }),\n    licenceIsValid: computed('',function() {\n        let valid = false;\n        try {\n            valid = this.session.data.authenticated.isValid;\n        } catch {}\n        return valid;\n    }), \n\n    onYoungsModulusChanged: observer('newInstrumentObject.youngsModulus', function() {\n        let youngsModulus = this.get('newInstrumentObject.youngsModulus');\n        \n        console.log('boltDiameter changed::: ' + bolt);\n        \n        console.log('Axial Stiffness::: ' + youngsModulus);\n    }),\n\n    handleElastLimitForce: observer('youngsModulus', function(){\n        let elf = 0; //this.get('elasticLimitFce');\n        elf = this.get('axialStiffness') * this.get('elasticLimitFce')\n        this.set('elasticLimitFce', elf.toFixed(2));\n    }),\n\n    actions:{\n        async saveAnchors(){\n            try{\n                let anchors = this.get(\"instrument.anchors\");\n                let anchorMap = {};\n\n                (anchors.content ?? anchors).forEach(anchor => {\n                anchorMap[anchor.get(\"number\")] = anchor;\n                });\n                let savePromises = [];\n\n                let channels = this.get(\"instrument\").channelsNum;\n                for (let i = 0; i < channels; i ++){\n                    let anchorNumber = i;\n                    let newDistance = (i === 0)\n                        ? 0\n                        : this.get(\"anchorDiagramInputInitalValue\")[`channel_${i}`] \n                            ? this.get(\"anchorDiagramInputInitalValue\")[`channel_${i}`]\n                            : 0;\n  \n                    let existingAnchor = anchorMap[anchorNumber];\n                    if (existingAnchor) {\n                        // Update if value changed\n                        if (existingAnchor.get(\"distance\") !== newDistance) {\n                            existingAnchor.set(\"distance\", newDistance);\n                            savePromises.push(existingAnchor.save());\n                        }\n\n                    } else {\n                        // Create new anchor\n                        let newAnchor = this.get(\"store\").createRecord(\"anchor\", {\n                            instrument: this.get(\"instrument\"),\n                            number: anchorNumber,\n                            distance: newDistance\n                        });\n\n                        savePromises.push(newAnchor.save());\n                    }\n                }\n                await Promise.all(savePromises);\n                window.location.reload();\n            }\n            catch(error){\n                console.log(\"Error in saveAnchors: \" + error)\n                console.log(error);\n            }\n        },\n        updateChannelInput(key, value){\n            try{\n                let anchors = this.get(\"anchorDiagramInputInitalValue\");\n                anchors[key] = value ? value : 0;\n                this.set(\"anchorDiagramInputInitalValue\", anchors)\n            }\n            catch(error){\n                console.log(\"Error in updateChannelInput: \" + error)\n            }\n        },\n        cycleEditAnchorDiagram(){\n            let data = {};\n            ((_a) => _a.content ?? _a)(this.get(\"instrument\").anchors).forEach((anchorObj, i)=>{\n                if(i == 0){\n                    \n                }\n                else{\n                    data[`channel_${i}`] = anchorObj.distance;\n                }\n            })\n            this.set(\"anchorDiagramInputInitalValue\", data)\n            this.set(\"isEditAnchorDiagram\", !this.get(\"isEditAnchorDiagram\"));\n        },\n        cycleActionBar(tabName){\n            if (tabName === this.activeActionTab){\n                this.set(\"activeActionTab\", null);\n            }\n            else{ \n                this.set(\"activeActionTab\", tabName);\n            }\n        },\n        async jumpToPage(page){\n            try{\n                if(page != \"...\"){\n                    this.set('paginationSearchConfig.pagination.page', Number.parseInt(page))\n                    await this.getAlertsList();\n                }\n            }\n            catch(err){\n\n            }\n        },\n        cycleAlertsListVisibility(){\n            this.set(\"isAlertsListVisible\", !this.get(\"isAlertsListVisible\"));\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        async updateCrossSectionalArea(){\n\n            let instrument = this.get('instrument');\n            let diameter = instrument.boltDiameter;\n            this.set('boltDiameter', diameter);\n            let area = Math.PI * Math.pow(diameter/2, 2);\n            instrument.crossSectionalArea = area.toFixed(2);\n            instrument.axialStiffness = ( ( (instrument.youngsModulus * instrument.crossSectionalArea )/100).toFixed(2));\n            this.set('axialStiffness', instrument.axialStiffness);\n            console.log(\"Axial Stiffness::: \" + instrument.axialStiffness);\n            console.log(\"Cross Sectional Area::: \" + instrument.crossSectionalArea);\n            \n            instrument.save()\n            .then(() => {\n                console.log(\"Instrument saved\");\n            });\n        },\n\n        updatePage(){\n            let store = this.get('store');\n            let instrument = this.get('instrument');\n            let anchors = instrument.get('anchors');\n\n            (anchors.content ?? anchors).forEach(function(anchor, index) {\n                let number = anchor.get('number');\n                let distance = anchor.get('distance');\n                let total = (anchors.content ?? anchors).length-1;\n                anchor.set('distance', distance);\n            });\n            //setTimeout(function() { alert('To see changes, please refresh the page.'); }, 1);\n        },\n        viewData(id) {\n            let endDateObj = new moment();\n            let startDateObj = moment(endDateObj).subtract(7, 'days').format('YYYY-MM-DDTHH:mm');\n            let formattedEndDateObj = endDateObj.format('YYYY-MM-DDTHH:mm');\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\");\n            this.get('router').transitionTo('raw-data', id, { queryParams: {\"advancedStartDate\": startDateObj, \"advancedEndDate\": formattedEndDateObj, \"advancedYAxisUnit\": baseUnit}});\n            //this.viewData(id);\n        },\n        tGraph(id) {\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\") || \"RAW\";\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values', { queryParams: { \"advancedYAxisUnit\": baseUnit}});\n            //this.tGraph(id, 'displacement-values');\n        },\n        sGraph(id) {\n            this.get('router').transitionTo('spatial-graphs.spatial-graph', id, 'displacement-values');\n            //this.sGraph(id, 'displacement-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveInstrument(){\n\n            const _this = this;\n\n            if(this.get('youngsModulus') == null || this.get('youngsModulus') == 0){\n                this.set('youngsModulus',200);\n            }\n            if(this.get('boltDiameter') == null || this.get('boltDiameter') == 0){\n                this.set('boltDiameter',19);\n                this.set('crossSectionalArea', (Math.PI * Math.pow(this.get('boltDiameter')/2, 2)).toFixed(2));\n            }\n\n            this.set('axialStiffness', ((this.get('youngsModulus') * this.get('crossSectionalArea'))/100).toFixed(2));\n            console.log(\"elasticLimitFce::: \" + this.get('elasticLimitFce'));\n            this.set('elasticLimitFce', (this.get('youngsModulus') * this.get('axialStiffness')).toFixed(2)); \n\n            // console.log(\"test\");\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/instruments\";    \n                }\n            } else {\n                window.location.href = \"/instruments\";\n            }            \n        },\n        isStacked: computed('stacked', function() {\n            return instrument.get('stacked');\n        }),\n        stackChanged: observer('stacked',function(){                    \n            if( this.get('stacked') == true){\n                this.isStacked == true;\n            } else {\n                this.isStacked == false;\n            }\n            this.get('isValidateStacked');\n            this.get('isValidatedStaggered');\n            this.get('isAllAnchorsPopulated');\n            this.get('isSaveEditable');\n        }),\n         \n        toggleProperty(property, object) {\n            // let loadCalc = object.get('calculateLoadFromElastic');\n            // this.set('calculateLoadFromElastic', loadCalc);                                \n\n\n\n            // let store = this.get('store');\n            // let instrument = this.get('instrument');\n            // //let instrument = this.get('tableRow');\n            // try {\n            //     let stiffness = instrument.get('elasticLimitFce') / instrument.get('elasticLimitPct');\n            //     stiffness = Math.round(stiffness * 1000) / 1000;\n            //     instrument.set('instrumentStiffness', stiffness);\n            // } catch (ex) {\n            //     instrument.set('instrumentStiffness', 0);\n            // }\n            // instrument.save();\n\n        },\n    }\n}) ","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'spatial-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    progressAnimationDuration: 100, //set 50, was 700\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 50, //set 25, was 500\n\n    isStacked: computed(function (){\n        let isStacked = false;    \n        if(this.get('instrument').get('stacked')) {\n            isStacked = true;\n        }\n        return isStacked;\n    }),\n\n    zoomDataPoints: map('zoomChartData', function(item, index){\n        try {\n            let chartData = { values: item.get(\"values\") };\n            let modelName = this.get('chartDataModelName');\n            console.log(\"[NVD3-DEBUG] zoomDataPoints[\" + index + \"] RAW values:\", JSON.parse(JSON.stringify(chartData.values)), \"modelName:\", modelName, \"isStacked:\", this.isStacked);\n            let side = this.attrs.getQueryParams('side');\n            if(this.isStacked || modelName === 'displacement-values') {\n\n                if(chartData['values'].length >=6){\n                    //Ya, I know.\n                    if(side === 'B'){\n                        chartData.values['1'] = chartData.values['4'];\n                        chartData.values['2'] = chartData.values['5'];\n                        chartData.values['3'] = chartData.values['6'];\n                        chartData.values = chartData.values.splice(0,4);\n                    } else {\n                        //console.log(chartData.values.splice(0,4));\n                        chartData.values = chartData.values.splice(0,4);//chartData.values.splice(5,chartData.values.length-1);\n                    }\n                }\n\n                if(modelName  === 'load-values' || modelName === 'axial-strain-values'){\n                    chartData.values.push(0);\n                }\n                if ( modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values'  ) {\n                    if(chartData.values[0] == 0){\n                        chartData.values.shift();\n                    }\n                }\n            } else {\n                if ( modelName != 'displacement-values' && (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values') ) {\n                    let ch1 = chartData.values['1'];\n                    let ch2 = chartData.values['2'];\n                    let ch3 = chartData.values['3'];\n                    let ch4 = chartData.values['4'];\n                    let ch5 = chartData.values['5'];\n                    let ch6 = chartData.values['6'];\n\n                    chartData.values['1'] = ch1;\n                    chartData.values['2'] = ch4;\n                    chartData.values['3'] = ch2;\n                    chartData.values['4'] = ch5;\n                    chartData.values['5'] = ch3;\n                    chartData.values['6'] = ch6;\n                }\n            }\n\n\n            if(!this.isStacked && (modelName === 'axial-strain-values' || modelName === 'load-values' || modelName === 'bending-strain-values')) {\n                chartData.values.shift();\n                chartData.values.push(0);\n            }\n            console.log(\"[NVD3-DEBUG] zoomDataPoints[\" + index + \"] PROCESSED values:\", JSON.parse(JSON.stringify(chartData.values)));\n            return chartData;\n\n        } catch (error) {\n            console.log(\"[NVD3-DEBUG] zoomDataPoints error:\", error);\n            return [];\n        }\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n        try {\n            return { values: item.get(\"values\") };            \n        } catch (error) {\n            return [];\n        }\n    }),\n\n    zoomTimePoints: map('zoomChartData', function(item){\n        let itemTime = item.get('id');\n        //console.log(\"Item Time: \" + itemTime);\n        return itemTime;\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        // Axial-Load - bring to zero (ends at zero) Starts at first channel\n        // Axial-Strain - bring to zero (ends at zero) Starts at first channel\n        // this means making sure the last index in array is zero in zoomDataPoints function \n        // as well as here. \n        // Axial-Load and Axial Strain do not have zero indexes at the start.\n\n        let instType = this.instrument.get('instrumentType').get('title');\n        let chartData = this.get('fullRangeChartData');\n        let dataValuesCount;\n        let counter = 0;\n        \n        let side_a = [];\n        let side_b = [];\n        var midPoints = [];\n        let modelName = this.get('chartDataModelName');\n        let anchors = this.get('instrument').get('anchors');        \n        const arr = anchors.content ?? anchors;\n        let anchorDistances = arr.map(function(anchor){\n            return anchor.get('distance');\n        });\n        midPoints.push(0);\n        \n        try {\n            dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n\n        console.log(\"[NVD3-DEBUG] anchorDistances INPUTS: modelName=\" + modelName, \"isStacked=\" + this.isStacked, \"dataValuesCount=\" + dataValuesCount, \"anchorDistances(raw)=\", JSON.parse(JSON.stringify(anchorDistances)), \"instType=\" + instType);\n\n        // This means there are 6 channels coming in.\n        // Else there are only three.  \n        // the issue is that I'm not sure if we're getting 6 without ch0 or 7 channels with ch0\n        // or 4 with ch0 or 3 without ch0\n        if( dataValuesCount>=6 && dataValuesCount % 2 == 1) {\n            counter++;\n            for(counter; counter< (anchorDistances.length/2); counter++) {\n                side_a.push(anchorDistances[counter]);                \n            }\n            for(counter; counter< (anchorDistances.length); counter++) {\n                side_b.push(anchorDistances[counter]);                \n            }\n        } else {\n            if(dataValuesCount>3){\n                counter++; //start at index 1\n            }\n            for(counter; counter< dataValuesCount; counter++) {\n                console.log(\"side_a:\" + anchorDistances[counter]);\n                side_a.push(anchorDistances[counter]);                \n            }\n            //side_a.sort();\n        }\n        counter = 0;\n        if(this.isStacked || modelName === 'displacement-values') {            \n            let indx = 0;\n            if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                side_a.unshift(0);\n                for (indx; indx < side_a.length - 1; indx++) {\n                  midPoints.push(side_a[indx + 1] - (side_a[indx + 1] - side_a[indx]) / 2); //midPoints.push(point);    \n                }\n      \n                midPoints.sort(function (a, b) {\n                  return a - b;\n                });\n              } else {\n            \n                let side = this.attrs.getQueryParams('side');\n                if( side === 'B' && modelName === 'displacement-values' ){\n                    counter = 0;\n                    side_b.forEach(point=> {\n                        midPoints.push(point);\n                    })\n                } else if( side === 'A' && modelName === 'displacement-values' ) {\n                    side_a.forEach(point => {\n                        midPoints.push(point);                \n                    });       \n                } else{\n                    for(counter; counter < side_a.length; counter++){\n                        console.log(\"SIDE Non displacement: \" + side_a[counter]);\n                        midPoints.push(side_a[counter]);\n                    }\n                }\n    \n              } \n            \n            \n        } else {\n            side_a.unshift(0);\n            side_b.unshift(0);\n            let indx = 0;\n            if( modelName === 'axial-strain-values' || modelName === 'load-values' || modelName === 'bending-strain-values'  ){\n                for(indx; indx < side_a.length -1; indx++){\n                    midPoints.push(side_a[indx + 1] - ((side_a[indx + 1] - side_a[indx]) / 2));\n                    //midPoints.push(point);    \n                                \n                }; \n                indx = 0;      \n                for(indx; indx < side_b.length -1; indx++){\n                    midPoints.push(side_b[indx+1] - ((side_b[indx+1] - side_b[indx]) / 2));\n                    //midPoints.push(parseInt(point));\n                    \n                };\n\n                midPoints.sort(function(a, b) {\n                    return a - b;\n                  });\n            }\n        }\n        \n        //|| modelName === 'load-values'\n        //To Start at first measurement instead of zero.\n        if (modelName === 'bending-strain-values' || modelName === 'axial-strain-values' || modelName === 'load-values' ) {\n        //if (modelName === 'bending-strain-values' || modelName === 'strain-values' ) {\n                midPoints.shift();\n        }           \n        \n        if(modelName  === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values'){\n            let length = 0;\n            try {\n                // changed instrumentLength to be in mm so we don't have multiply by 1000\n                // length = (this.instrument.get('instrumentLength'))*1000;\n                length = (this.instrument.get('instrumentLength'));\n                midPoints.push(length);\n                //console.log(\"Length:::\" + length);\n                \n            } catch (ex) {\n                console.log(\"Error getting instrument length. Set length in your rebar under 'Total Bolt Length'.\" + ex);\n            }   \n            \n        }\n        \n        this.set('anchorMidDistances', midPoints);\n        anchorDistances = midPoints;\n\n        console.log(\"[NVD3-DEBUG] anchorDistances OUTPUT: side_a=\", JSON.parse(JSON.stringify(side_a)), \"side_b=\", JSON.parse(JSON.stringify(side_b)), \"midPoints(=anchorMidDistances)=\", JSON.parse(JSON.stringify(midPoints)));\n        return anchorDistances;\n    }),\n\n    anchorColors: d3.scale.category10().range(),\n\n    anchorDistancesChartReferencePoints: computed('chartDataModelName', 'instrument', 'anchorDistances', 'anchorMidDistances', function() {\n        var modelName = this.get('chartDataModelName');\n        var anchorMidDistances = this.get('anchorMidDistances');\n        let anchorDistances = this.get('anchorDistances');\n        let side = this.attrs.getQueryParams('side');\n        \n        let anchDist = [];\n        anchorDistances.forEach(anchorDistance => {\n            anchDist.push({\n                key: anchorDistance,\n                type: 'referencePoints',\n                values: [\n                    anchorDistance\n                ]\n            });\n        });\n\n        console.log(\"[NVD3-DEBUG] anchorDistancesChartReferencePoints:\", JSON.parse(JSON.stringify(anchDist)), \"modelName=\" + modelName, \"side=\" + side);\n        \n        let length = 0;\n        try {\n            // changed instrumentLength to be in mm so we don't have multiply by 1000\n            // length = this.instrument.get('instrumentLength') * 1000;\n            length = this.instrument.get('instrumentLength');\n        } catch (ex) {\n            console.log(\"Error getting instrument length. Set length in your rebar under 'Total Bolt Length'.\");\n        }\n        \n        // console.log(\"anchorDistancesChartReferencePoints Returned: \" + JSON.stringify(anchDist));\n        return anchDist;   \n    }),\n\n    inlineHoverValuesSideOffset: computed('chartDataModelName', function() {\n        var modelName = this.get('chartDataModelName');\n        let offSet = 0;\n        if (modelName === 'strain-values' ) {\n            offSet = 28;\n        } else if((modelName === 'axial-strain-values' || modelName === 'bending-strain-values') && this.get('instrument').get('stacked')) {\n            offSet = 0;\n        }\n        if(( modelName === 'bending-strain-values') && !this.get('instrument').get('stacked')) {\n            offSet = 0;\n        }\n        console.log(\"OffSet::: \" + offSet);\n        return offSet;\n    }),\n\n    // zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', function() {\n            const _this = this,\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints'),\n            anchorDistances = this.get('anchorDistances'),\n            anchorDistancesChartReferencePoints = this.get('anchorDistancesChartReferencePoints'),\n            anchorMidDistances = this.get('anchorMidDistances')\n        ;\n        let zoomChartLinesData = [];\n\n        var modelName = this.get('chartDataModelName');\n        let counter = 0;\n            \n        zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n            let dp =  {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorMidDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            // console.log(\"dp:::\" + JSON.stringify(dp));\n            return dp;\n        }).sortBy('timestamp');\n\n\n        if (anchorDistancesChartReferencePoints) {\n            zoomChartLinesData = zoomChartLinesData.concat(anchorDistancesChartReferencePoints);\n        }\n        console.log(\"[NVD3-DEBUG] zoomChartLinesData FINAL (incl referencePoints):\", JSON.parse(JSON.stringify(zoomChartLinesData)));\n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        var modelName = this.get('chartDataModelName');\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        let ad = anchorDistances.map(function(chartLineName, chartLineIndex){\n            let dp = {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[chartLineIndex]\n                    ];\n                })\n            };\n            return dp;\n        }).sortBy('timestamp');\n        return ad;\n\n    }),\n\n    numLines: computed('zoomTimePoints', function() {\n        //console.log(\"zoomTimePoints: \" + this.get('zoomTimePoints').length );\n        return this.get('zoomTimePoints').length;\n    }),\n\n    lineDrawDelay: computed('numLines', function() {\n        return (13000 / (this.get('numLines') + 1)) ^ (1 / 20);\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').queryRecord('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this;\n        const zoomChartLinesData = _this.get('zoomChartLinesData');\n        const fullRangeChartLinesData = _this.get('fullRangeChartLinesData');\n        const inlineHoverValuesSideOffset = _this.get('inlineHoverValuesSideOffset');\n        const progressAnimationDuration = _this.get('progressAnimationDuration');\n        const isDistXTooltip = _this.get('isDistXTooltip');\n        const distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration');\n\n        console.log(\"[NVD3-DEBUG] didInsertElement ENTRY — zoomChartLinesData passed to SVG datum:\", JSON.parse(JSON.stringify(zoomChartLinesData)));\n        console.log(\"[NVD3-DEBUG] didInsertElement — fullRangeChartLinesData:\", JSON.parse(JSON.stringify(fullRangeChartLinesData)));\n        console.log(\"[NVD3-DEBUG] didInsertElement — anchorMidDistances:\", JSON.parse(JSON.stringify(_this.get('anchorMidDistances') || [])));\n\n        let zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-svg');\n        let fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-focus-svg');\n        let yAxisLegend = this.get('yAxisLegend');\n        let apiCallsPromises = [yAxisLegend];\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];//.get('firstObject');\n\n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n                //console.log('Title:::' + yAxisLegend.get('title'));\n                let axisName = '';\n                let units = chartData.get('units');\n                let switchTitle = yAxisLegend.get('title');\n                switch(switchTitle) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'axial_strain':\n                        //console.log(\"SWITCH:::\" + chartData.get('temporalStrainName'));\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'bending_strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n                \n                if(yAxisLegend.get('title')==='load') {\n                    title = axisName + \" (kN)\";\n                } else {\n                    title = axisName + \" (\" + units + \")\";\n                }\n                console.log(\"[NVD3-DEBUG] Y-axis title resolved:\", title, \"switchTitle=\" + switchTitle, \"axisName=\" + axisName, \"units=\" + units);\n            }\n\n            let zoomChart = nv.models.lineChartProgressAnimationAPI()\n                .margin({top: 55, right: 10, bottom: 85, left: 60})\n                .useInteractiveGuideline(false)\n                .x(function(d) { \n                    // console.log(\"X in zoomChart:::: \" + d[0]);\n                    return d[0]; \n                })\n                .y(function(d) { return d[1]; })\n                .distXAxisScale(function(d) { \n                    // console.log(\"X in zoomChart:::: \" + d[0]);\n                    // console.log(\"distXAxis in zoomChart:::: d[0]:::::::::::::::: \" + d[1]);\n                    return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .showLegend(true)\n                .progressAnimationDuration(progressAnimationDuration)\n                .showXAxis(true)\n                .noData('No usable data')\n                ;\n\n            let length = 0;\n            try {\n                // we changed the instrumentLength to be in mm instead of m so we don't have to convert it\n                // length = this.instrument.get('instrumentLength') * 1000;\n                length = this.instrument.get('instrumentLength');\n                let type = this.instrument.get('instrumentType');\n            } catch (ex) {\n\n            }\n            \n            if(length !== null && length === 0) {\n                length = 0;\n            }\n\n            zoomChart.forceX([0, length]);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .ticks(5)\n                    // .tickFormat(d3.format(\".2f\"))\n                    // .tickFormat(function(d) {\n                    //     let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                    //     let first = new Date(zoomChartLinesData[0].timestamp).getTime(); // values[0][0];\n                    //     let last = new Date(zoomChartLinesData[zoomChartXDomainLength].timestamp).getTime();//values[zoomChartXDomainLength-1][0];\n\n                        // console.log('first:::' + first);\n                        // console.log('last:::' + last);\n                        // console.log('d:::' + d);\n                    //     return nv.utils.getDateAutoscaleFormat (first, last)(new Date(d));\n                    // })\n                    ;\n                zoomChart.yAxis\n                    .axisLabel(title)\n                    .tickFormat(d3.format(\".2f\"))\n                    .ticks(5)\n                    ;\n\n                zoomChart.distXAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .ticks(5)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(45)\n                    .isDistXTooltip(isDistXTooltip)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2);\n\n                zoomChart.legend.inlineHoverValuesSideOffset(inlineHoverValuesSideOffset);\n\n                const datumData = zoomChartLinesData.filter(Boolean);\n                console.log(\"[NVD3-DEBUG] SVG .datum() call — final data shape to NVD3:\", JSON.parse(JSON.stringify(datumData)));\n                console.log(\"[NVD3-DEBUG] SVG .datum() — total series:\", datumData.length, \"line series:\", datumData.filter(d => d.type === 'lines').length, \"referencePoints:\", datumData.filter(d => d.type === 'referencePoints').length);\n                zoomChartSVG.datum(datumData).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                return zoomChart;\n            });\n\n            // declare fullRangeChart because later in zoom chart we need axis from fullRangeChart for events axis on zoomChart\n            let fullRangeChart = nv.models.focus(nv.models.line())\n               .margin({top: 10, right: 10, bottom: 30, left: 60})\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .syncBrushing(false)\n                .independentBrushing(true)\n                .showXAxis(true)\n                .showYAxis(false)\n                ;\n\n\n            nv.addGraph(function() {\n\n                fullRangeChart.xAxis\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n                fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n                fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(fullRangeChart.update);\n\n                // set zoom based on query params if set\n                let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n                let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n                if (startTimestamp && endTimestamp) {\n                    fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n                }\n\n                return fullRangeChart;\n            });\n\n        });\n\n    }\n\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n//import JSONAPISerializer from '@ember-data/serializers/json';\n\n// For Strain - in python backend start in \"displacement_measurement/data_process.py and find this\"\n// class StrainListDataClass(DataListClass):\n\n//     def get_data(self):\n//         data_points = super(StrainListDataClass, self).get_data()\n//         zeroed_points = self.get_zeroed_points(data_points)\n//         return self.get_strain(zeroed_points, self.get_mid_distances())\n\nexport default Component.extend({\n\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n    yAxisUnit:null,\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if(yAxisUnitParam){\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    vibeEventsChartDistXData: computed('vibeEvents', function() {\n        var events = this.get('vibeEvents');\n        // console.log('vibeEvents');\n        // console.log(events);\n        if ( this.get('vibeEvents') ) {\n            return [{\n                key: 'BluVibe',\n                type: 'distX',\n                //color: '#d18b40',\n                color: '#80bf5c',\n                values: this.get('vibeEvents').map(function(event) {\n                    return [\n                        moment( event.get('id') ).valueOf(),\n                        console.log(\"event: \" + event.get('size')),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sortBy('time');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            let data_set = this.get('blastEvents').map(function(event) {\n                //console.log(event.get('timestamp'));\n                return {\n                    type: 'Blast',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes'),\n                    location: event.get('location')\n                };\n            }).sortBy('time');\n            //console.log(data_set);\n            return data_set;\n        }\n        return false;\n    }),\n\n    vibeEventsArray: computed('vibeEvents', function() {\n        var events = this.get('vibeEvents');\n        //console.log(\"Events:::\" + events);\n        if ( events ) {\n            return events.map(function(event) {\n                return {\n                    type: 'BluVibe',\n                    time: event.get('id'),\n                    timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    ppa: event.get('ppa'),\n                    ppv: event.get('ppv'),\n                    freq: event.get('frequency')\n                };\n            }).sortBy('time');\n        }\n        return false;\n    }),\n\n    zoomTempPoints: map('zoomTempData', function(item){\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n        return chartData;\n    }),\n    isStacked: computed(function (){\n        let isStacked = false;    \n        if(this.get('instrument').get('stacked')) {\n            isStacked = true;\n        }\n        return isStacked;\n    }),\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n        \n        // console.log(\"zoomDataPoints::::::::::::::::::::::::::::::::::::::::::::::::::: \");\n        let chartData = { values: item.get(\"values\") };\n        let modelName = this.get('chartDataModelName');\n        // console.log(\"zoomDataPoints::: \" + modelName);\n        if(this.isStacked || modelName === 'strain-values') {\n            let side = this.attrs.getQueryParams('side');\n            let modelName = this.get('chartDataModelName');\n            if(modelName  === 'load-values' || modelName === 'axial-strain-values'){\n                if(chartData['values'].length >=6){\n                    //Ya, I know.  \n                    if(side === 'B'){\n                        chartData.values['1'] = chartData.values['4'];\n                        chartData.values['2'] = chartData.values['5'];\n                        chartData.values['3'] = chartData.values['6'];\n                        chartData.values = chartData.values.splice(0,4);\n                    } else {\n                        chartData.values = chartData.values.splice(0,4);//chartData.values.splice(5,chartData.values.length-1);\n                    }\n                }\n            }\n            if(modelName  === 'load-values' || modelName === 'axial-strain-values'){\n            //if( modelName  === 'load-values' ){\n                    chartData.values.push(0);\n            }   \n            if ( modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values'  ) {                 \n                if(chartData.values[0] == 0){\n                    chartData.values.shift();\n                }\n            }\n            //console.log(\"temporal::ChartData::\" + JSON.stringify(chartData));\n            if (modelName === 'strain-values') { \n                chartData.values.shift();\n            }\n                \n        }\n\n        if(!this.isStacked && (modelName === 'axial-strain-values' || modelName === 'load-values' || modelName === 'bending-strain-values')) {\n            chartData.values.shift();\n        }\n\n        return chartData;\n        } catch(e) { return { values: [] }; }\n    }),\n\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n        return { values: item.get(\"values\") };\n    }),\n\n/*     fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n    \n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        let chartData = this.get('fullRangeChartData');\n        let dataValuesCount;\n        \n        try {\n            dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n\n        let anchors = this.get('instrument').get('anchors');        \n        const arr = anchors.content ?? anchors;\n        let anchorDistances = arr.map(function(anchor){\n            let singleAnchorDistance = anchor.get('distance');\n            return singleAnchorDistance;\n        });\n        \n        var modelName = this.get('chartDataModelName');\n                \n        if (modelName === 'load-values' || modelName === 'bending-strain-values' || modelName === 'axial-strain-values' || modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') { \n                        \n            let side_a = []\n            let side_b = []\n            side_b.push(0);\n            var midPoints = [];\n            midPoints.push(0);\n\n            anchorDistances.forEach(function(value, index){                \n                if(index <= 3 && value[index] !=0){\n                    side_a.push(anchorDistances[index]);\n                }\n                else{\n                    side_b.push(anchorDistances[index]);\n                }                    \n            });\n            //side_a.sort();\n            //side_b.sort();\n            let indx = 0;\n            for(indx; indx < side_a.length -1; indx++){\n                midPoints.push(side_a[indx + 1] - ((side_a[indx + 1] - side_a[indx]) / 2));\n            } \n            \n            indx = 0;\n            if(dataValuesCount > 5){\n                for(indx; indx < side_b.length -1; indx++){\n                    \n                    //console.log(\"SIDE_B: Index: \" + indx + \"    \" +( side_b[indx+1] - ((side_b[indx+1] - side_b[indx]) / 2)));\n                    midPoints.push(side_b[indx+1] - ((side_b[indx+1] - side_b[indx]) / 2));\n                }     \n            }\n                        \n            midPoints.shift();\n            anchorDistances = midPoints;\n        }\n\n        let anchorCount = anchorDistances.length;\n        //console.log(\"anchorDistances1: \" + JSON.stringify(anchorDistances));\n        let newAnchorDistances = [];\n        anchorDistances = anchorDistances.map((obj, index) => {\n            //console.log(\"Object:::\" + obj);\n            if(obj > 0){\n                let sideA = dataValuesCount>5 ? 'A-' : '';\n                let sideB = dataValuesCount>5 ? 'B-' : '';\n\n                if( (dataValuesCount< 5 && index <=2) || (index <= ((anchorCount-1) / 2))){\n                    newAnchorDistances.push(sideA + obj);\n                } \n                else {\n                    if(dataValuesCount>5)\n                        newAnchorDistances.push(sideB + obj);     \n                }\n            }\n            else{\n                if(dataValuesCount>5)\n                    newAnchorDistances.push(obj);\n            }        \n        });  \n        anchorDistances = newAnchorDistances; \n        return anchorDistances;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    // zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n            const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTempPoints = this.get('zoomTempPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n        // console.log(\"zoomTempPoints::: \" + JSON.stringify(zoomTempPoints));\n        let anchorDistances = this.get('anchorDistances'),\n            zoomChartLinesData = []\n        ;\n\n        var mName = _this.get('chartDataModelName');\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                //console.log(\"chartLineName \" + chartLineName); \n                //console.log(\"chartLineIndex \" + chartLineIndex); \n                                \n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n        //console.log(zoomTempPoints.length);\n\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            if (_this.get('chartDataModelName') !== 'displacement-values'){\n                while(zoomTempPoints.length > zoomDataPoints.length) {\n                    zoomTempPoints.pop();\n                    zoomTempPoints.shift();\n                }\n            }\n            var temp = {key: 'T',\n                type: 'lines',\n                yAxis: 2,\n                values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null,\n                    ];\n                })\n            };\n            //console.log(temp);\n            zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (vibeEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    // console.log(\"fullReang\")\n                    // console.log(\"DataPoint::: \" + (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null);\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        //console.log(\"zoomChartData:\" + this.get('zoomChartData').query.model_name);\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_');\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        //let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        \n        const _this = this,\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n        const zoomChartLinesData = _this.get('zoomChartLinesData');\n        const fullRangeChartLinesData = _this.get('fullRangeChartLinesData');\n        // console.log(\"ChartID:::::::: \" + _this.get(\"chartId\"));\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            // TODO::: fix me\n            vibeEventsArray = this.get('vibeEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = yAxisLegend\n        ;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n                \n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let instType = \"dRebarv2\";\n\n                let axisName = '';\n                let units = chartData.get('units');\n                title = yAxisLegend.get('title');\n                switch(title) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'axial_strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'bending_strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    case 'temperature':\n                        axisName = \"Temperature\";\n                        units = \"°C\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                        //console.log(title);\n                }\n\n                if (yAxisLegend) {\n                    let raw = _this.raw;\n                    if(yAxisLegend.get('title')==='load') {\n                        title = axisName + \" (kN)\";\n                    } else {\n                        title = axisName + \" (\" + units + \")\";\n                    }\n                } else {\n                    title = axisName + \" (\" + units + \")\";\n                }\n                //title = yAxisLegend.get('unit');\n            }\n\n            function usesPoints(chartName) {\n                //console.log(chartName);\n                switch(chartName) {\n                    case 'event-ppv':\n                    case 'event-ppa':\n                        return true;\n                }\n                return false;\n            }\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(usesPoints(_this.get('chartDataModelName')))\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data')\n            ;\n\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                        //console.log(\"D:::::::::: \" + d);\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        //console.log(nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d)));\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    //console.log(\"BRUSH END::::::::::::::::::::\");\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = `<span class=\"event-type\">PPV - ${this.yAxisUnit ? this.yAxisUnit == \"RAW\" ? \"mm\" : this.yAxisUnit : \"mm\"}: ` + tooltipContent.ppv + `<br />PPA - ${this.yAxisUnit ? this.yAxisUnit == \"RAW\" ? \"mm\" : this.yAxisUnit : \"mm\"}&#178;: ` + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(\"VibeEventsArray:::\" + vibeEventsArray);\n                    //console.log(distXMouseMove);\n \n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length){//} || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { \n                    nv.log('New State:', JSON.stringify(e)); \n                });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) { _this.setData(zoomChartLinesData); }\n                if (_this.setChart) { _this.setChart(zoomChart); }\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n\n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    isModalOpen: false,\n    modalMode: 'add', // 'add' | 'edit'\n    modalEditingRowId: null,\n\n    anchorLabels: computed('instrument', function(){\n        const anchors = this.get('instrument') ? this.get('instrument').get('anchors') : null;\n        const arr = (anchors && (anchors.content ?? anchors)) || [];\n        let validCounter = 0;\n        return arr.map((anchor, idx) => {\n            const distance = anchor.get ? anchor.get('distance') : (anchor && anchor.distance);\n            const isUnset = (distance == null || distance === '');\n            if(isUnset){\n                return { index: idx, tableLabel: '', modalLabel: 'Anchor N/A', isUnset: true };\n            }\n            validCounter += 1;\n            return { index: idx, tableLabel: String(distance), modalLabel: `Anchor ${validCounter}`, isUnset: false };\n        });\n    }),\n\n    columnSpecs: computed('anchorLabels', function(){\n        const anchors = this.get('anchorLabels') || [];\n        const out = anchors.map((a) => ({\n            key: `anchor_${a.index}`,\n            label: a.modalLabel,\n            tableLabel: a.tableLabel,\n            valuesIndex: a.index,\n        }));\n        out.push({ key: '__temp__', label: 'Temperature', tableLabel: 'Temperature', isTemp: true });\n        return out;\n    }),\n\n    tableRows: computed('displacementData.[]', 'temperatureData.[]', 'columnSpecs', 'globalDatetimeFormat.value', function(){\n        const dispData = this.get('displacementData') || [];\n        const tempData = this.get('temperatureData') || [];\n        const specs = this.get('columnSpecs') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n\n        const tempById = {};\n        tempData.forEach(r => { tempById[r.id] = r; });\n\n        return dispData.map((dispRow) => {\n            const id = dispRow.id;\n            const dispValues = (dispRow.values || dispRow.get?.('values') || []);\n            const tempRow = tempById[id];\n            const tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n\n            const cells = specs.map((spec) => {\n                let value = '';\n                if(spec.isTemp){\n                    value = tempValues[0];\n                }else{\n                    value = dispValues[spec.valuesIndex];\n                }\n                return { key: spec.key, label: spec.label, value: value == null ? '' : value };\n            });\n            const formattedDate = moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt);\n            return { id, date: id, formattedDate, cells };\n        });\n    }),\n\n    modalFields: computed('columnSpecs', 'modalMode', 'modalEditingRowId', 'tableRows.[]', function(){\n        const specs = this.get('columnSpecs') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingRowId');\n\n        let existingRow = null;\n        if(mode === 'edit' && editingId){\n            existingRow = (this.get('tableRows') || []).find(r => r.id === editingId);\n        }\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && existingRow\n                ? moment(existingRow.date, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm')\n                : moment().format('YYYY-MM-DDTHH:mm'),\n        };\n\n        const cellByKey = {};\n        if(existingRow){\n            existingRow.cells.forEach(c => { cellByKey[c.key] = c.value; });\n        }\n\n        const channelFields = specs.map((spec) => ({\n            key: spec.key,\n            label: spec.label,\n            type: 'text',\n            value: cellByKey[spec.key] != null ? cellByKey[spec.key] : '',\n        }));\n\n        return [dateField, ...channelFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function(){\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingRowId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingRowId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const instrumentId = this.get('instrument.id');\n            const dispData = this.get('displacementData');\n            const tempData = this.get('temperatureData');\n            const dispRow = dispData ? dispData.find(r => r.id === rowId) : null;\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            const promises = [];\n            if(dispRow && dispRow.deleteRecord){ dispRow.deleteRecord(); promises.push(dispRow.save(adapterOptions)); }\n            if(tempRow && tempRow.deleteRecord){ tempRow.deleteRecord(); promises.push(tempRow.save(adapterOptions)); }\n            Promise.all(promises)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const specs = this.get('columnSpecs') || [];\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            const dispValues = [];\n            specs.forEach((spec) => {\n                if(spec.isTemp){ return; }\n                dispValues.push(Number(snapshot[spec.key]) || 0);\n            });\n            const tempValues = [Number(snapshot['__temp__']) || 0];\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingRowId');\n\n            const tempData = this.get('temperatureData') || [];\n            const dispData = this.get('displacementData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            if(isEdit && originalId === newId){\n                const tempRow = findRow(tempData, originalId);\n                const dispRow = findRow(dispData, originalId);\n                const promises = [];\n                if(tempRow){ tempRow.set('values', tempValues); promises.push(tempRow.save(adapterOptions)); }\n                if(dispRow){ dispRow.set('values', dispValues); promises.push(dispRow.save(adapterOptions)); }\n                Promise.all(promises).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                const oldDisp = findRow(dispData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n                if(oldDisp){ oldDisp.deleteRecord(); oldDisp.save(adapterOptions); }\n            }\n\n            const tempRecord = store.createRecord('temperature-value', { id: newId, values: tempValues });\n            tempRecord.save(adapterOptions);\n\n            const dispRecord = store.createRecord('displacement-value', { id: newId, values: dispValues });\n            dispRecord.save(adapterOptions).then(refreshRoute).catch(handleErr);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n\n});","import { action, computed } from '@ember/object';\nimport Component from '@ember/component';\n\nexport default class TargetSelectorComponent extends Component {\n  showModal = false;\n\n  @action\n  openModal() {\n    this.showModal = true;\n  }\n\n  @action\n  closeModal() {\n    this.showModal = false;\n  }\n\n  @action\n  selectRecord(record) {\n    this.args.onSelect(record);\n    this.showModal = false;\n  }\n  \n  @action\n  handleRecordSelection(record) {\n    // Do something with the selected record\n    // console.log(record.Gateway);\n  }\n\n\n\n// import Component from '@ember/component';\n// import { action } from '@ember/object';\n\n// export default Component.extend({\n//     init() {\n//     this._super(...arguments);\n//     this.set('model', []);\n    \n//     @action\n//     openModal() {\n//       this.showModal = true;\n//     }\n\n//     @action\n//     closeModal() {\n//       this.showModal = false;\n//     }\n\n//     @action\n//     selectRecord(record) {\n//       this.args.onSelect(record);\n//       this.showModal = false;\n//     }\n//     // ajax(host).then((data) => {\n//     //     this.set('model', data.carrier_list);\n//     // });\n//     },\n//     isShowingModal: false,\n//     host: computed(function() {\n//       return \"http://\" + document.location.host.split(':')[0] + \":4500/assets/images/gateway_carrier.json\";\n//     }),\n   \n//     carrierList: computed(function() {\n//       let data = this.getCarriers();\n//       const sortedData = {\n//         \"carrier_list\": Object.values(data.carrier_list)\n//           .sort((a, b) => a.Country.localeCompare(b.Country))\n//           .reduce((acc, curr) => {\n//             acc[curr.Carrier] = curr;\n//             return acc;\n//           }, {})\n//       };\n//       return sortedData.carrier_list;\n//     }),\n\n//     // async fetchCarriers() {\n//     //   return fetch(this.get('host'), {\n//     //     headers : { \n//     //       'Content-Type': 'application/json',\n//     //       'Accept': 'application/json'\n//     //      }  \n//     //     })\n//     //     .then(response => response.json())\n//     //     .then(data => {\n//     //       console.log(\"fetchCarriers:\");\n//     //       // console.log(\"fetchCarriers:\" + JSON.stringify(data.carrier_list));\n//     //       return data;\n//     //     })\n//     // },\n    \n//     actions: {\n//       close() {\n//           this.set('show', false);\n//       },\n\n//       select(record) {\n//           this.set('show', false);\n//           this.sendAction('onSelect', record);\n//       },\n\n//       toggleModal() {\n//         console.log(\"toggleModal:\" + this.get('isShowingModal'));\n//         this.toggleProperty('isShowingModal');\n//         console.log(\"toggleModal:\" + this.get('isShowingModal'));\n//       },\n//       closeTargetSelector() { \n//         this.set('isShowingModal', false);\n//       }\n//     },\n    \ngetCarriers(){\n    \n  return  {\n    \"carrier_list\": {\n      \"AirCel\": {\n        \"Carrier\": \"AirCel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@aircel.co.in\"\n      },\n      \"Airtel\": {\n        \"Carrier\": \"Airtel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@airtelkk.com\"\n      },\n      \"AirFire Mobile\": {\n        \"Carrier\": \"AirFire Mobile\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@sms.airfiremobile.com\"\n      },\n      \"Aio Wireless\": {\n        \"Carrier\": \"Aio Wireless\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@mms.aiowireless.net\"\n      },\n      \"Alaska Communications\": {\n        \"Carrier\": \"Alaska Communications\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@msg.acsalaska.com\"\n      },\n      \"Aliant Canada\": {\n        \"Carrier\": \"Aliant Canada\",\n        \"Country\": \"Canada\",\n        \"Gateway\": \"number@sms.wirefree.informe.ca\"\n      },\n      \"Alltel (Allied Wireless)\": {\n        \"Carrier\": \"Alltel (Allied Wireless)\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@mms.alltelwireless.com\"\n      },\n      \"Verizon Wireless\": {\n        \"Carrier\": \"Verizon Wireless\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@vzwpix.com\"\n      },\n      \"Ameritech\": {\n        \"Carrier\": \"Ameritech\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@paging.acswireless.com\"\n      },\n      \"Andhra Pradesh AirTel\": {\n        \"Carrier\": \"Andhra Pradesh AirTel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@airtelap.com\"\n      },\n      \"Andhra Pradesh Idea\": {\n        \"Carrier\": \"Andhra Pradesh Idea\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@ideacellular.net\"\n      },\n      \"Assurance Wireless\": {\n        \"Carrier\": \"Assurance Wireless\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@vmobl.com\"\n      },\n      \"AT&T Mobility\": {\n        \"Carrier\": \"AT&T Mobility\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@mms.att.net\"\n      },\n      \"AT&T Enterprise Paging\": {\n        \"Carrier\": \"AT&T Enterprise Paging\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@page.att.net\"\n      },\n      \"Beeline\": {\n        \"Carrier\": \"Beeline\",\n        \"Country\": \"Russia\",\n        \"Gateway\": \"number@sms.beemail.ru\"\n      },\n      \"Bell Mobility\": {\n        \"Carrier\": \"Bell Mobility\",\n        \"Country\": \"Canada\",\n        \"Gateway\": \"number@txt.bell.ca\"\n      },\n      \"BellSouth\": {\n        \"Carrier\": \"BellSouth\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@bellsouth.cl\"\n      },\n      \"Bluegrass Cellular\": {\n        \"Carrier\": \"Bluegrass Cellular\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@mms.myblueworks.com\"\n      },\n      \"Bluesky Communications\": {\n        \"Carrier\": \"Bluesky Communications\",\n        \"Country\": \"USA Samoa\",\n        \"Gateway\": \"number@psms.bluesky.as\"\n      },\n      \"Boost mobile\": {\n        \"Carrier\": \"Boost mobile\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@myboostmobile.com\"\n      },\n      \"Bouygues Telecom\": {\n        \"Carrier\": \"Bouygues Telecom\",\n        \"Country\": \"France\",\n        \"Gateway\": \"number@mms.bouyguestelecom.fr\"\n      },\n      \"Box Internet Services\": {\n        \"Carrier\": \"Box Internet Services\",\n        \"Country\": \"Switzerland\",\n        \"Gateway\": \"number@mms.boxis.net\"\n      },\n      \"SFR\": {\n        \"Carrier\": \"SFR\",\n        \"Country\": \"France\",\n        \"Gateway\": \"number@sfr.fr\"\n      },\n      \"CellCom\": {\n        \"Carrier\": \"CellCom\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@cellcom.quiktxt.com\"\n      },\n      \"Cellular South\": {\n        \"Carrier\": \"Cellular South\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@csouth1.com\"\n      },\n      \"Centennial Wireless\": {\n        \"Carrier\": \"Centennial Wireless\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@cwemail.com\"\n      },\n      \"Chariton Valley Wireless\": {\n        \"Carrier\": \"Chariton Valley Wireless\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@sms.cvalley.net\"\n      },\n      \"Chat Mobility\": {\n        \"Carrier\": \"Chat Mobility\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@mail.msgsender.com\"\n      },\n      \"Chennai Skycell / Airtel\": {\n        \"Carrier\": \"Chennai Skycell / Airtel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@airtelchennai.com\"\n      },\n      \"Chennai RPG Cellular\": {\n        \"Carrier\": \"Chennai RPG Cellular\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@rpgmail.net\"\n      },\n      \"China Mobile\": {\n        \"Carrier\": \"China Mobile\",\n        \"Country\": \"China\",\n        \"Gateway\": \"number@139.com\"\n      },\n      \"Cincinnati Bell\": {\n        \"Carrier\": \"Cincinnati Bell\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@mms.gocbw.com\"\n      },\n      \"Claro\": {\n        \"Carrier\": \"Claro\",\n        \"Country\": \"Colombia\",\n        \"Gateway\": \"number@iclaro.com.co\"\n      },\n      \"Cleartalk\": {\n        \"Carrier\": \"Cleartalk\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@sms.cleartalk.us\"\n      },\n      \"Cricket\": {\n        \"Carrier\": \"Cricket\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@mms.mycricket.com\"\n      },\n      \"C Spire Wireless\": {\n        \"Carrier\": \"C Spire Wireless\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@cspire1.com\"\n      },\n      \"Accessyou\": {\n        \"Carrier\": \"Accessyou\",\n        \"Country\": \"Hong Kong\",\n        \"Gateway\": \"number@messaging.accessyou.com\"\n      },\n      \"CSL\": {\n        \"Carrier\": \"CSL\",\n        \"Country\": \"Hong Kong\",\n        \"Gateway\": \"number@mgw.mmsc1.hkcsl.com\"\n      },\n      \"CTI Móvil (Now Claro)\": {\n        \"Carrier\": \"CTI Móvil (Now Claro)\",\n        \"Country\": \"Argentina\",\n        \"Gateway\": \"number@sms.ctimovil.com.ar\"\n      },\n      \"Delhi Airtel\": {\n        \"Carrier\": \"Delhi Airtel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@airtelmail.com\"\n      },\n      \"Digicel\": {\n        \"Carrier\": \"Digicel\",\n        \"Country\": \"Dominica\",\n        \"Gateway\": \"number@digitextdm.com\"\n      },\n      \"DTC\": {\n        \"Carrier\": \"DTC\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@sms.advantagecell.net\"\n      },\n      \"E-Plus\": {\n        \"Carrier\": \"E-Plus\",\n        \"Country\": \"Germany\",\n        \"Gateway\": \"number@smsmail.eplus.de\"\n      },\n      \"Edge Wireless\": {\n        \"Carrier\": \"Edge Wireless\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@sms.edgewireless.com\"\n      },\n      \"Element Mobile\": {\n        \"Carrier\": \"Element Mobile\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@SMS.elementmobile.net\"\n      },\n      \"Emtel\": {\n        \"Carrier\": \"Emtel\",\n        \"Country\": \"Mauritius\",\n        \"Gateway\": \"number@emtelworld.net\"\n      },\n      \"Esendex\": {\n        \"Carrier\": \"Esendex\",\n        \"Country\": \"Spain\",\n        \"Gateway\": \"number@esendex.net\"\n      },\n      \"Fido\": {\n        \"Carrier\": \"Fido\",\n        \"Country\": \"Canada\",\n        \"Gateway\": \"number@sms.fido.ca\"\n      },\n      \"Firmensms\": {\n        \"Carrier\": \"Firmensms\",\n        \"Country\": \"Austria\",\n        \"Gateway\": \"number@subdomain.firmensms.at\"\n      },\n      \"Freebie SMS\": {\n        \"Carrier\": \"Freebie SMS\",\n        \"Country\": \"Europe\",\n        \"Gateway\": \"number@smssturen.com\"\n      },\n      \"General Communications Inc.\": {\n        \"Carrier\": \"General Communications Inc.\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@mobile.gci.net\"\n      },\n      \"Globalstar\": {\n        \"Carrier\": \"Globalstar\",\n        \"Country\": \"International\",\n        \"Gateway\": \"number@msg.globalstarusa.com\"\n      },\n      \"Globul\": {\n        \"Carrier\": \"Globul\",\n        \"Country\": \"Bulgaria\",\n        \"Gateway\": \"number@sms.globul.bg\"\n      },\n      \"Goa Airtel\": {\n        \"Carrier\": \"Goa Airtel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@airtelmail.com\"\n      },\n      \"Goa Idea Cellular\": {\n        \"Carrier\": \"Goa Idea Cellular\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@ideacellular.net\"\n      },\n      \"Golden State Cellular\": {\n        \"Carrier\": \"Golden State Cellular\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@gscsms.com\"\n      },\n      \"Greatcall\": {\n        \"Carrier\": \"Greatcall\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@vtxt.com\"\n      },\n      \"Gujarat Idea Cellular\": {\n        \"Carrier\": \"Gujarat Idea Cellular\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@ideacellular.net\"\n      },\n      \"Gujarat Airtel\": {\n        \"Carrier\": \"Gujarat Airtel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@airtelmail.com\"\n      },\n      \"Gujarat Celforce / Fascel\": {\n        \"Carrier\": \"Gujarat Celforce / Fascel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@celforce.com\"\n      },\n      \"Guyana T&T\": {\n        \"Carrier\": \"Guyana T&T\",\n        \"Country\": \"Guyana\",\n        \"Gateway\": \"number@sms.cellinkgy.com\"\n      },\n      \"Haryana Airtel\": {\n        \"Carrier\": \"Haryana Airtel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@airtelmail.com\"\n      },\n      \"Haryana Escotel\": {\n        \"Carrier\": \"Haryana Escotel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@escotelmobile.com\"\n      },\n      \"Hawaiian Telcom\": {\n        \"Carrier\": \"Hawaiian Telcom\",\n        \"Country\": \"Hawaii USA\",\n        \"Gateway\": \"number@hawaii.sprintpcs.com\"\n      },\n      \"HSL Mobile\": {\n        \"Carrier\": \"HSL Mobile\",\n        \"Country\": \"UK\",\n        \"Gateway\": \"number@sms.haysystems.com\"\n      },\n      \"Helio\": {\n        \"Carrier\": \"Helio\",\n        \"Country\": \"South Korea\",\n        \"Gateway\": \"number@myhelio.com\"\n      },\n      \"Himachai Pradesh Airtel\": {\n        \"Carrier\": \"Himachai Pradesh Airtel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@airtelmail.com\"\n      },\n      \"ICE\": {\n        \"Carrier\": \"ICE\",\n        \"Country\": \"Costa Rica\",\n        \"Gateway\": \"number@sms.ice.cr\"\n      },\n      \"I-wireless(T-Mobile)\": {\n        \"Carrier\": \"I-wireless(T-Mobile)\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number.iws@iwspcs.net\"\n      },\n      \"I-wireless(Sprint PCS)\": {\n        \"Carrier\": \"I-wireless(Sprint PCS)\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@iwirelesshometext.com\"\n      },\n      \"Kajeet\": {\n        \"Carrier\": \"Kajeet\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@mobile.kajeet.net\"\n      },\n      \"Karnataka Airtel\": {\n        \"Carrier\": \"Karnataka Airtel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@airtelkk.com\"\n      },\n      \"Kerala Airtel\": {\n        \"Carrier\": \"Kerala Airtel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@airtelkerala.com\"\n      },\n      \"Kerala Escotel\": {\n        \"Carrier\": \"Kerala Escotel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@escotelmobile.com\"\n      },\n      \"Kolkata Airtel\": {\n        \"Carrier\": \"Kolkata Airtel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@airtelkol.com\"\n      },\n      \"Koodo Mobile\": {\n        \"Carrier\": \"Koodo Mobile\",\n        \"Country\": \"Canada\",\n        \"Gateway\": \"number@msg.telus.com\"\n      },\n      \"LongLines\": {\n        \"Carrier\": \"LongLines\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@text.longlines.com\"\n      },\n      \"Lynx Mobility\": {\n        \"Carrier\": \"Lynx Mobility\",\n        \"Country\": \"Canada\",\n        \"Gateway\": \"number@sms.lynxmobility.com\"\n      },\n      \"M1\": {\n        \"Carrier\": \"M1\",\n        \"Country\": \"Singapore\",\n        \"Gateway\": \"number@m1.com.sg\"\n      },\n      \"Madhya Pradesh Airtel\": {\n        \"Carrier\": \"Madhya Pradesh Airtel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@airtelmail.com\"\n      },\n      \"Maharashtra Airtel\": {\n        \"Carrier\": \"Maharashtra Airtel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@airtelmail.com\"\n      },\n      \"Maharashtra Idea\": {\n        \"Carrier\": \"Maharashtra Idea\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@ideacellular.net\"\n      },\n      \"Más Móvil\": {\n        \"Carrier\": \"Más Móvil\",\n        \"Country\": \"Panama\",\n        \"Gateway\": \"number@cwmovil.com\"\n      },\n      \"Mediaburst\": {\n        \"Carrier\": \"Mediaburst\",\n        \"Country\": \"UK\",\n        \"Gateway\": \"number@sms.mediaburst.co.uk\"\n      },\n      \"MetroPCS\": {\n        \"Carrier\": \"MetroPCS\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@mymetropcs.com\"\n      },\n      \"Mobiltel\": {\n        \"Carrier\": \"Mobiltel\",\n        \"Country\": \"Bulgaria\",\n        \"Gateway\": \"number@sms.mtel.net\"\n      },\n      \"Mobitel\": {\n        \"Carrier\": \"Mobitel\",\n        \"Country\": \"Sri Lanka\",\n        \"Gateway\": \"number@sms.mobitel.lk\"\n      },\n      \"Movistar\": {\n        \"Carrier\": \"Movistar\",\n        \"Country\": \"Uruguay\",\n        \"Gateway\": \"number@sms.movistar.com.uy\"\n      },\n      \"MTN\": {\n        \"Carrier\": \"MTN\",\n        \"Country\": \"South Africa\",\n        \"Gateway\": \"number@sms.co.za\"\n      },\n      \"MTS Mobility\": {\n        \"Carrier\": \"MTS Mobility\",\n        \"Country\": \"Canada\",\n        \"Gateway\": \"number@text.mtsmobility.com\"\n      },\n      \"Mumbai Airtel\": {\n        \"Carrier\": \"Mumbai Airtel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@airtelmail.com\"\n      },\n      \"My-Cool-SMS\": {\n        \"Carrier\": \"My-Cool-SMS\",\n        \"Country\": \"UK\",\n        \"Gateway\": \"number@my-cool-sms.com\"\n      },\n      \"Nextech\": {\n        \"Carrier\": \"Nextech\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@sms.ntwls.net\"\n      },\n      \"Nextel\": {\n        \"Carrier\": \"Nextel\",\n        \"Country\": \"Argentina\",\n        \"Gateway\": \"TwoWay.11number@nextel.net.ar\"\n      },\n      \"O2\": {\n        \"Carrier\": \"O2\",\n        \"Country\": \"Germany\",\n        \"Gateway\": \"number@o2online.de\"\n      },\n      \"OgVodafone\": {\n        \"Carrier\": \"OgVodafone\",\n        \"Country\": \"Iceland\",\n        \"Gateway\": \"number@sms.is\"\n      },\n      \"Orange\": {\n        \"Carrier\": \"Orange\",\n        \"Country\": \"UK\",\n        \"Gateway\": \"number@orange.net\"\n      },\n      \"Page Plus Cellular (Verizon)\": {\n        \"Carrier\": \"Page Plus Cellular (Verizon)\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@vzwpix.com\"\n      },\n      \"Pioneer Cellular\": {\n        \"Carrier\": \"Pioneer Cellular\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"nine-digit-number@zsend.com\"\n      },\n      \"Personal\": {\n        \"Carrier\": \"Personal\",\n        \"Country\": \"Argentina\",\n        \"Gateway\": \"number@alertas.personal.com.ar\"\n      },\n      \"Plus\": {\n        \"Carrier\": \"Plus\",\n        \"Country\": \"Polan\",\n        \"Gateway\": \"number@text.plusgsm.pl\"\n      },\n      \"Pocket Wireless\": {\n        \"Carrier\": \"Pocket Wireless\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@sms.pocket.com\"\n      },\n      \"PC Telecom\": {\n        \"Carrier\": \"PC Telecom\",\n        \"Country\": \"Canada\",\n        \"Gateway\": \"number@mobiletxt.ca\"\n      },\n      \"Polkomtel\": {\n        \"Carrier\": \"Polkomtel\",\n        \"Country\": \"Poland\",\n        \"Gateway\": \"number@text.plusgsm.pl\"\n      },\n      \"Qwest Wireless\": {\n        \"Carrier\": \"Qwest Wireless\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@qwestmp.com\"\n      },\n      \"Red Pocket Mobile\": {\n        \"Carrier\": \"Red Pocket Mobile\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@vtext.com\"\n      },\n      \"Rogers Wireless\": {\n        \"Carrier\": \"Rogers Wireless\",\n        \"Country\": \"Canada & USA\",\n        \"Gateway\": \"number@mms.rogers.com\"\n      },\n      \"SaskTel\": {\n        \"Carrier\": \"SaskTel\",\n        \"Country\": \"Canada\",\n        \"Gateway\": \"number@pcs.sasktelmobility.com\"\n      },\n      \"Sendega\": {\n        \"Carrier\": \"Sendega\",\n        \"Country\": \"Norway\",\n        \"Gateway\": \"number@sendega.com\"\n      },\n      \"Setar Mobile email (Aruba)\": {\n        \"Carrier\": \"Setar Mobile email (Aruba)\",\n        \"Country\": \"Aruba\",\n        \"Gateway\": \"number@mas.aw\"\n      },\n      \"Síminn\": {\n        \"Carrier\": \"Síminn\",\n        \"Country\": \"Iceland\",\n        \"Gateway\": \"number@box.is\"\n      },\n      \"Simple Mobile\": {\n        \"Carrier\": \"Simple Mobile\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@smtext.com\"\n      },\n      \"SMS Broadcast\": {\n        \"Carrier\": \"SMS Broadcast\",\n        \"Country\": \"Australia\",\n        \"Gateway\": \"number@send.smsbroadcast.com.au\"\n      },\n      \"SMS Central\": {\n        \"Carrier\": \"SMS Central\",\n        \"Country\": \"Australia\",\n        \"Gateway\": \"number@sms.smscentral.com.au\"\n      },\n      \"SMSPUP\": {\n        \"Carrier\": \"SMSPUP\",\n        \"Country\": \"Australia\",\n        \"Gateway\": \"number@smspup.com\"\n      },\n      \"Southernlinc\": {\n        \"Carrier\": \"Southernlinc\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@page.southernlinc.com\"\n      },\n      \"South Central Communications\": {\n        \"Carrier\": \"South Central Communications\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@rinasms.com\"\n      },\n      \"Spikko\": {\n        \"Carrier\": \"Spikko\",\n        \"Country\": \"Israel\",\n        \"Gateway\": \"number@SpikkoSMS.com\"\n      },\n      \"Sprint\": {\n        \"Carrier\": \"Sprint\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@pm.sprint.com\"\n      },\n      \"Straight Talk\": {\n        \"Carrier\": \"Straight Talk\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"Other: number@mmst5.tracfone.com\"\n      },\n      \"Sunrise Communications\": {\n        \"Carrier\": \"Sunrise Communications\",\n        \"Country\": \"Switzerland\",\n        \"Gateway\": \"number@gsm.sunrise.ch\"\n      },\n      \"Syringa Wireless\": {\n        \"Carrier\": \"Syringa Wireless\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@rinasms.com\"\n      },\n      \"TeletopiaSMS\": {\n        \"Carrier\": \"TeletopiaSMS\",\n        \"Country\": \"Norway\",\n        \"Gateway\": \"number@sms.teletopiasms.no\"\n      },\n      \"T-Mobile\": {\n        \"Carrier\": \"T-Mobile\",\n        \"Country\": \"Netherlands\",\n        \"Gateway\": \"number@gin.nl\"\n      },\n      \"T-Mobile (Optus Zoo)\": {\n        \"Carrier\": \"T-Mobile (Optus Zoo)\",\n        \"Country\": \"Australia\",\n        \"Gateway\": \"number@optusmobile.com.au\"\n      },\n      \"Tamil Nadu Airtel\": {\n        \"Carrier\": \"Tamil Nadu Airtel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"919894number@airtelmobile.com\"\n      },\n      \"Tamil Nadu Aircel\": {\n        \"Carrier\": \"Tamil Nadu Aircel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"9842number@airsms.com\"\n      },\n      \"Tele2\": {\n        \"Carrier\": \"Tele2\",\n        \"Country\": \"Sweden\",\n        \"Gateway\": \"number@sms.tele2.se\"\n      },\n      \"Telecom\": {\n        \"Carrier\": \"Telecom\",\n        \"Country\": \"New Zealand\",\n        \"Gateway\": \"number@etxt.co.nz\"\n      },\n      \"Teleflip\": {\n        \"Carrier\": \"Teleflip\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@teleflip.com\"\n      },\n      \"Telstra\": {\n        \"Carrier\": \"Telstra\",\n        \"Country\": \"Australia\",\n        \"Gateway\": \"mobile@sms.tim.telstra.com\"\n      },\n      \"Telus Mobility\": {\n        \"Carrier\": \"Telus Mobility\",\n        \"Country\": \"Canada & USA\",\n        \"Gateway\": \"number@mms.telusmobility.com\"\n      },\n      \"TellusTalk\": {\n        \"Carrier\": \"TellusTalk\",\n        \"Country\": \"Europe\",\n        \"Gateway\": \"number@esms.nu\"\n      },\n      \"Tigo (Formerly Ola)\": {\n        \"Carrier\": \"Tigo (Formerly Ola)\",\n        \"Country\": \"Colombia\",\n        \"Gateway\": \"number@sms.tigo.com.co\"\n      },\n      \"TIM\": {\n        \"Carrier\": \"TIM\",\n        \"Country\": \"Italy\",\n        \"Gateway\": \"number@timnet.com\"\n      },\n      \"Ting\": {\n        \"Carrier\": \"Ting\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@message.ting.com\"\n      },\n      \"TracFone (prepaid)\": {\n        \"Carrier\": \"TracFone (prepaid)\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@mmst5.tracfone.com\"\n      },\n      \"Txtlocal\": {\n        \"Carrier\": \"Txtlocal\",\n        \"Country\": \"UK\",\n        \"Gateway\": \"number@txtlocal.co.uk\"\n      },\n      \"Telcel\": {\n        \"Carrier\": \"Telcel\",\n        \"Country\": \"Mexico\",\n        \"Gateway\": \"number@itelcel.com\"\n      },\n      \"Unicel\": {\n        \"Carrier\": \"Unicel\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@utext.com\"\n      },\n      \"UniMóvil Corporation\": {\n        \"Carrier\": \"UniMóvil Corporation\",\n        \"Country\": \"UK\",\n        \"Gateway\": \"number@viawebsms.com\"\n      },\n      \"Union Wireless\": {\n        \"Carrier\": \"Union Wireless\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@union-tel.com\"\n      },\n      \"US Cellular\": {\n        \"Carrier\": \"US Cellular\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@mms.uscc.net\"\n      },\n      \"USA Mobility\": {\n        \"Carrier\": \"USA Mobility\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@usamobility.net\"\n      },\n      \"UTBox\": {\n        \"Carrier\": \"UTBox\",\n        \"Country\": \"Australia\",\n        \"Gateway\": \"number@sms.utbox.net\"\n      },\n      \"Uttar Pradesh West Escotel\": {\n        \"Carrier\": \"Uttar Pradesh West Escotel\",\n        \"Country\": \"India\",\n        \"Gateway\": \"number@escotelmobile.com\"\n      },\n      \"Viaero\": {\n        \"Carrier\": \"Viaero\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@mmsviaero.com\"\n      },\n      \"Vivo\": {\n        \"Carrier\": \"Vivo\",\n        \"Country\": \"Brazil\",\n        \"Gateway\": \"number@torpedoemail.com.br\"\n      },\n      \"Virgin Mobile\": {\n        \"Carrier\": \"Virgin Mobile\",\n        \"Country\": \"UK\",\n        \"Gateway\": \"number@vxtras.com\"\n      },\n      \"Vodacom\": {\n        \"Carrier\": \"Vodacom\",\n        \"Country\": \"South Africa\",\n        \"Gateway\": \"number@voda.co.za\"\n      },\n      \"Vodafone\": {\n        \"Carrier\": \"Vodafone\",\n        \"Country\": \"New Zealand\",\n        \"Gateway\": \"number@mtxt.co.nz\"\n      },\n      \"Voyager Mobile\": {\n        \"Carrier\": \"Voyager Mobile\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@text.voyagermobile.com\"\n      },\n      \"West Central Wireless\": {\n        \"Carrier\": \"West Central Wireless\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@sms.wcc.net\"\n      },\n      \"Wind Mobile\": {\n        \"Carrier\": \"Wind Mobile\",\n        \"Country\": \"Canada\",\n        \"Gateway\": \"number@txt.windmobile.ca\"\n      },\n      \"XIT Communications\": {\n        \"Carrier\": \"XIT Communications\",\n        \"Country\": \"USA\",\n        \"Gateway\": \"number@sms.xit.net\"\n      }\n    }\n    }\n  }\n}\n","export { default } from 'ember-leaflet/components/rectangle-layer';\n","export { default } from 'ember-composability-tools/components/root';\n","import Ember from 'ember';\nimport { computed } from '@ember/object';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n  tagName: 'li',\n  classNameBindings: [\n    ':Searchable-select__option',\n    'isDisabled:Searchable-select__option--disabled',\n    'isSelected:Searchable-select__option--selected'\n  ],\n  attributeBindings: ['tabindex'],\n\n  option: null,\n  optionLabelKey: 'title',\n  optionDisabledKey: null,\n  selected: null,\n  searchText: '',\n\n  isDisabled: computed('option', 'optionDisabledKey', function() {\n    if (this.get('optionDisabledKey')) {\n      return Ember.get(this.get('option'), this.get('optionDisabledKey'));\n    }\n  }),\n\n  isSelected: computed('option', 'selected', 'selected.[]', function() {\n    if (Array.isArray(this.get('selected'))) {\n      return Ember.A(this.get('selected')).includes(this.get('option'));\n    } else {\n      return this.get('selected') === this.get('option');\n    }\n  }),\n\n  tabindex: computed('isDisabled', function() {\n    if (!this.get('isDisabled')) {\n      return -1;\n    }\n  }),\n\n  keyDown(event) {\n    if (event.keyCode === 13) {\n      this.send('selectItem');\n    }\n  },\n\n  click() {\n    this.send('selectItem');\n  },\n\n  actions: {\n    selectItem() {\n      this.attrs['select-item'](this.get('option'));\n    }\n  }\n});\n","import { scheduleOnce, next } from '@ember/runloop';\nimport Ember from 'ember';\nimport { notEmpty, and, empty, not, bool, sort } from '@ember/object/computed';\nimport { computed } from '@ember/object';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n  classNames: ['Searchable-select'],\n  classNameBindings: [\n    '_isShowingMenu:Searchable-select--menu-open',\n    'multiple:Searchable-select--multiple'\n  ],\n\n  content: null,\n  selected: null,\n  optionLabelKey: 'title',\n  optionDisabledKey: null,\n  sortBy: null,\n  limitSearchToWordBoundary: false,\n  multiple: false,\n  closeOnSelection: true,\n\n  prompt: 'Select an option',\n  searchPrompt: 'Type to search',\n  noResultsMessage: 'No matching results',\n\n  isClearable: true,\n  clearLabel: 'Clear',\n\n  addLabel: 'Add',\n\n  isLoading: false,\n  loadingMessage: 'Searching...',\n\n  _searchText: '',\n  _isShowingMenu: false,\n  _hasSelection: notEmpty('_selected'),\n  _isShowingClear: and('isClearable', '_hasSelection'),\n  _hasNoResults: empty('_filteredContent'),\n  _hasResults: not('_hasNoResults'),\n  _isNotLoading: not('isLoading'),\n  _isSingleSelect: not('multiple'),\n  _hasMultipleSelection: and('multiple', '_hasSelection'),\n  _hasSingleSelection: and('_isSingleSelect', '_hasSelection'),\n  _isShowingAddNew: and('_canAddNew', '_hasNoMatchedKeys', '_searchText'),\n  _isShowingNoResultsMessage: and('_searchText', '_hasNoResults', '_isNotLoading'),\n  _canAddNew: bool('on-add'),\n  _hasOnSearchAction: bool('on-search'),\n  _isFilterActive: not('_hasOnSearchAction'),\n\n  'on-change': null,\n  'on-add': null,\n  'on-search': null,\n  'on-close': null,\n  'on-open': null,\n\n  _selected: computed('selected', 'selected.[]', {\n    get() {\n      if (this.get('multiple') && !this.get('selected')) {\n        return Ember.A([]);\n      } else if (this.get('multiple') && !Array.isArray(this.get('selected'))) {\n        throw new Error('Searchable select: passed in multiple selection must be an array');\n      } else {\n        return this.get('selected');\n      }\n    },\n    set(key, value) {\n      return value;\n    }\n  }),\n\n  _sortArray: computed('sortBy', function() {\n    if (this.get('sortBy')) {\n      return this.get('sortBy').replace(' ', '').split(',');\n    }\n    return [];\n  }),\n\n  _sortedContent: sort('content', '_sortArray'),\n\n  _filterRegex: computed('limitSearchToWordBoundary', '_searchText', function() {\n    let searchText = this.get('_searchText');\n    if (searchText) {\n      let regex = this.get('limitSearchToWordBoundary') ? `\\\\b${searchText}` : searchText;\n      return new RegExp(regex, 'i');\n    }\n  }),\n\n  _filteredContent: computed('_sortedContent.[]', 'optionLabelKey', '_filterRegex', '_isFilterActive', function() {\n    let filterRegex = this.get('_filterRegex');\n    let content = this.get('_sortedContent');\n    if (filterRegex && this.get('_isFilterActive')) {\n      return Ember.A(content.filter(item => {\n        return filterRegex.test(Ember.get(item, this.get('optionLabelKey')));\n      }));\n    } else {\n      return content;\n    }\n  }),\n\n  _filteredKeys: computed('_filteredContent', 'optionLabelKey', function() {\n    let optKey = this.get('optionLabelKey');\n    return Ember.A(this.get('_filteredContent').mapBy(optKey));\n  }),\n\n  _hasMatchedKey: computed('_filteredKeys', '_searchText', function() {\n    let regex = new RegExp(`^${this.get('_searchText')}$`, 'i');\n    return this.get('_filteredKeys').filter((key) => {\n      return regex.test(key);\n    }).length;\n  }),\n\n  _hasNoMatchedKeys: not('_hasMatchedKey'),\n\n  didInsertElement() {\n    this._super(...arguments);\n    this.element.addEventListener('keydown', (e) => {\n      this._handleKeyboardControls(e);\n    });\n  },\n\n  willDestroyElement() {\n    this._super(...arguments);\n    this._unbindOutsideClicks();\n  },\n\n  _bindOutsideClicks() {\n    let componentElem = this.element;\n    this._outsideClickHandler = (e) => {\n      if (!componentElem.contains(e.target)) {\n        this.send('hideMenu');\n        let label = componentElem.querySelector('.Searchable-select__label');\n        if (label) label.blur();\n      }\n    };\n    window.addEventListener('click', this._outsideClickHandler);\n  },\n\n  _unbindOutsideClicks() {\n    if (this._outsideClickHandler) {\n      window.removeEventListener('click', this._outsideClickHandler);\n      this._outsideClickHandler = null;\n    }\n  },\n\n  _handleKeyboardControls(e) {\n    let focussable = Array.from(this.element.querySelectorAll('[tabindex]'));\n    let i = focussable.indexOf(e.target);\n\n    if (e.keyCode === 40) {\n      e.preventDefault();\n      if (focussable[i + 1]) focussable[i + 1].focus();\n      if (e.target.classList.contains('Searchable-select__label')) {\n        this.send('showMenu');\n      }\n    } else if (e.keyCode === 38) {\n      e.preventDefault();\n      if (i > 0 && focussable[i - 1]) focussable[i - 1].focus();\n    } else if (e.keyCode === 27 || e.keyCode === 9) {\n      this.send('hideMenu');\n    } else if (e.keyCode === 13) {\n      e.preventDefault();\n      let action = e.target.getAttribute('data-enter-key-action');\n      if (action) {\n        this.send(action);\n      }\n    }\n  },\n\n  _toggleSelection(item) {\n    if (item === null) {\n      this.set('_selected', Ember.A([]));\n    } else if (Ember.A(this.get('_selected')).includes(item)) {\n      this.removeFromSelected(item);\n    } else {\n      this.addToSelected(item);\n    }\n  },\n\n  removeFromSelected(item) {\n    let selected = this.get('_selected');\n    let i = selected.indexOf(item);\n    let newSelection = selected.slice(0, i).concat(selected.slice(i + 1));\n    this.set('_selected', Ember.A(newSelection));\n  },\n\n  addToSelected(item) {\n    this.set('_selected', Ember.A(this.get('_selected').concat([item])));\n  },\n\n  checkForFunction(attr) {\n    if (typeof attr === 'function') {\n      return attr;\n    } else {\n      return function() {};\n    }\n  },\n\n  actions: {\n    updateSearch(text) {\n      this.set('_searchText', text);\n      this.checkForFunction(this.get('on-search')).call(this, text);\n    },\n    selectItem(item) {\n      let disabledKey = this.get('optionDisabledKey');\n      if (item && disabledKey && Ember.get(item, disabledKey)) {\n        return;\n      }\n      if (this.get('multiple')) {\n        this._toggleSelection(item);\n      } else {\n        this.set('_selected', item);\n      }\n      this.checkForFunction(this.get('on-change')).call(this, this.get('_selected'));\n      if (this.get('closeOnSelection')) {\n        this.send('hideMenu');\n      }\n    },\n    toggleMenu() {\n      if (this.get('_isShowingMenu')) {\n        this.send('hideMenu');\n      } else {\n        this.send('showMenu');\n      }\n    },\n    showMenu() {\n      this.set('_isShowingMenu', true);\n      this.checkForFunction(this.get('on-open')).call(this);\n      scheduleOnce('afterRender', this, function() {\n        let input = this.element.querySelector('.Searchable-select__input');\n        if (input) input.focus();\n      });\n      next(this, function() {\n        this._bindOutsideClicks();\n      });\n    },\n    hideMenu() {\n      this.set('_isShowingMenu', false);\n      this._unbindOutsideClicks();\n      this.set('_searchText', '');\n      let label = this.element.querySelector('.Searchable-select__label');\n      if (label) label.focus();\n      this.checkForFunction(this.get('on-close')).call(this);\n    },\n    clear() {\n      this.send('selectItem', null);\n    },\n    removeOption(option) {\n      this.removeFromSelected(option);\n      this['on-change'].call(this, this.get('_selected'));\n    },\n    addNew() {\n      this.get('on-add')(this.get('_searchText'));\n      if (this.get('closeOnSelection')) {\n        this.send('hideMenu');\n      }\n    },\n    noop() {}\n  }\n});\n","import { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    session: service(),\n    userProfileService: service(),\n});\n","import { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\n\n\nexport default Component.extend({\n    session: service(),\n    router: service(),\n    userProfileService: service(),\n    loading:false,\n    actions: {\n        navigateToLicenseKeys(){\n            this.set('loading', true);\n            this.router.transitionTo(\"keys\");\n        },\n        navigateToBackendLogs(){\n            this.set('loading', true);\n            this.router.transitionTo(\"log-viewer\");\n\n        }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    session: service(),\n    userProfileService: service(),\n    init() {\n        this._super(...arguments);\n    },\n    actions: {\n        \n        close(){\n            this.get(\"closeModal\")();\n        },\n        save(type){\n            console.log(\"save modal type:\" + type)\n            this.get(\"confirmModal\")(type);\n        }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Component from \"@ember/component\";\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n    session: service(),\n    router: service(),\n    userProfileService: service(),\n    api: service(),\n    selectedDatetimeFormat: null,\n    selectTimezone: null,\n\n    isShowClearLogsConfirmationModal:false,\n    clearLogsConfirmationModalType:null,\n\n    confirmMessage: {\n        all: \"This will permanently delete all LogViewer & your User logs. This action cannot be undone.\",\n        log_viewer: \"This will permanently delete all LogViewer logs.\",\n        user_logs: \"This will permanently delete all your user activity logs.\"\n    },\n    NA_CONSTANT:\"N/A\",\n    generalUsedValue:0,\n    generalUsedPercent:0,\n    generalFreeValue:0,\n    generalFreePercent:0,\n    generalTotalValue:0,\n\n    postgresGeneralLogsValue:0,\n    postgresGeneralLogsPercent:0,\n    postgresUserLogsValue:0,\n    postgresUserLogsPercent:0,\n    postgresInstrValue:0,\n    postgresInstrPercent:0,\n    postgresGWValue:0,\n    postgresGWPercent:0,\n    postgresOthersValue:0,\n    postgresOthersPercent:0,\n    postgresTotalValue:0,\n\n\n    showStorageMessage:false,\n    updateStorageMessage:null,\n    testRecipientSMTPMessage:null,\n    awsSNSSMSMessage:null,\n\n    loading:false,\n    async init(){\n        this._super(...arguments);\n        let records = this.get('model').toArray();\n\n        for (let i = 0; i < records.length; i++) {\n            if (records[i].get('title') === 'GLOBAL_DATETIME_FORMAT') {\n                this.set(\"selectedDatetimeFormat\", records[i].get('value'));\n            }\n            else if (records[i].get('title') === 'TIME_ZONE') {\n                this.set(\"selectTimezone\", records[i].get('value'));\n            }\n            else if (records[i].get('title') === 'ENABLE_SMS_ALERTS') {\n                this.set(\"isEnabledSMSAlerts\", records[i].get('value') === \"true\");\n            }\n        }\n        console.log(this.get(\"isEnabledSMSAlerts\"))\n        \n        await this.getStorage();\n    },\n    getStorage: async function(){\n        this.set(\"isLoading\", true);\n        let url = `${getApiBaseUrl()}/storage/breakdown/`;\n        let response = await this.api.fetch(url, {\n            method: \"GET\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n        });\n        if (response.status == 200) {\n            const responseData = await response.json(); \n            this.processGeneralData(responseData.data.general);\n            this.processPostGresData(responseData.data.postgres);\n            this.processInfluxData(responseData.data.influx);\n        }\n        else {\n            this.errorGeneralData();\n            this.errorPostGresData();\n            this.errorInfluxData();\n        } \n        this.set(\"isLoading\", false);\n    },\n    processGeneralData:function(data){\n        try{\n            let usedData = data.used.data;\n            let freeData = data.free.data;\n            let totalData = data.total.data;\n            //Get Used Value\n            this.set(\"generalUsedValue\", `${(usedData).toFixed(1)} ${data.used.unit}`)\n            //Get Used Percent\n            this.set(\"generalUsedPercent\", ((usedData / totalData) * 100).toFixed(1))\n            //Get Free Value\n            this.set(\"generalFreeValue\", `${(freeData).toFixed(1)} ${data.free.unit}`)\n            //Get Free Percent\n            this.set(\"generalFreePercent\", ((freeData / totalData) * 100).toFixed(1))\n            //Get Total Value\n            this.set(\"generalTotalValue\", `${(totalData).toFixed(1)} ${data.total.unit}`)\n        }\n        catch (e){\n            console.log(e);\n            this.errorGeneralData();\n            \n        }\n    },\n    errorGeneralData:function(){\n            //Get Used Value\n            this.set(\"generalUsedValue\", NA_CONSTANT)\n            //Get Used Percent\n            this.set(\"generalUsedPercent\", 0)\n            //Get Free Value\n            this.set(\"generalFreeValue\", NA_CONSTANT)\n            //Get Free Percent\n            this.set(\"generalFreePercent\", 0)\n            //Get Total Value\n            this.set(\"generalTotalValue\", NA_CONSTANT)\n    },\n\n    processPostGresData:function(data){\n        try{\n            let tableLabel = [\"general_logs\", \"user_logs\", \"instruments\", \"gateways\", \"others\"]\n            //Bar color matching exactly between tableLabel and colorLabel\n            let colorLabel = [ \"#4E79A7\", \"#F28E2B\", \"#59A14F\", \"#E15759\", \"#BAB0AC\"]\n            let total = data.database.data;\n            let parentStorageBarSection = document.getElementById(\"postgresParentStorageBar\");\n            let parentLabelSection = document.getElementById(\"postgresLabelSection\");\n\n            for(let i=0; i<tableLabel.length; i++){\n                const label = tableLabel[i];\n                let value = data[\"tables\"][label][\"data\"];\n                let title = data[\"tables\"][label][\"label\"];\n                let unit = data[\"tables\"][label][\"unit\"];\n                let percentage = ((value / total) * 100).toFixed(1)\n                //Build Bar Section\n                const bar = document.createElement(\"div\");\n                bar.className = \"settings-storage-neutral\";\n                bar.style.width = `${percentage}%`;\n                bar.style.backgroundColor = colorLabel[i];\n                parentStorageBarSection.appendChild(bar);\n                //Label Section\n                const text = document.createElement(\"div\");\n                text.style.color=colorLabel[i];\n                text.style.whiteSpace = \"pre-line\";\n                text.textContent = `${title}\\n${value.toFixed(4)} ${unit}/${percentage}%`;\n                parentLabelSection.appendChild(text);\n            }\n            //Total Section\n            const totalText = document.createElement(\"div\");\n            totalText.style.color=\"black\";\n            totalText.style.whiteSpace = \"pre-line\";\n            totalText.textContent = `Total\\n${total.toFixed(4)} ${data.database.unit}`;\n            parentLabelSection.appendChild(totalText);\n        }\n        catch (e){\n            console.log(e);\n            this.errorPostGresData();\n            \n        }\n    },\n\n    errorPostGresData:function(){\n        let parentStorageBarSection = document.getElementById(\"postgresParentStorageBar\");\n        if (parentStorageBarSection) { parentStorageBarSection.innerHTML = \"\"; }\n        let parentLabelSection = document.getElementById(\"postgresLabelSection\");\n        if (parentLabelSection) { parentLabelSection.innerHTML = \"\"; }\n    },\n\n    processInfluxData:function(data){\n        try{\n            let parentStorageBarSection = document.getElementById(\"influxParentStorageBar\");\n            parentStorageBarSection.innerHTML = \"\";\n            let parentLabelSection = document.getElementById(\"influxLabelSection\");\n            const text = document.createElement(\"div\");\n            text.style.color=\"black\";\n            text.style.whiteSpace = \"pre-line\";\n            text.textContent = `Used: ${data.data} ${data.unit}\\n${data.note}`;\n            parentLabelSection.appendChild(text);\n        }\n        catch (e){\n            console.log(e);\n            this.errorPostGresData();\n            \n        }\n    },\n    errorInfluxData:function(){\n        let parentStorageBarSection = document.getElementById(\"influxParentStorageBar\");\n        if (parentStorageBarSection) { parentStorageBarSection.innerHTML = \"\"; }\n        let parentLabelSection = document.getElementById(\"influxLabelSection\");\n        if (parentLabelSection) { parentLabelSection.innerHTML = \"\"; }\n    },\n    isMasterProfile:computed(\"userProfileService\", function(){\n        try{\n            return this.get(\"userProfileService\")[\"userProfileService\"].profile.is_master_key_account;\n        }\n        catch(err){\n            return false;\n        }\n    }),\n    isStaffUser: computed('userProfileService', function () {\n        return (\n        this.userProfileService.userProfileService?.profile?.is_staff || false\n        );\n    }),\n    datetimeFormatArray: [\n        {\n            id: 'YYYY-MM-DD HH:mm:ss',\n            title: 'YYYY-MM-DD HH:mm:ss (ISO 8601)'\n        },\n        {\n            id: 'YYYY-DD-MM HH:mm:ss',\n            title: 'YYYY-DD-MM HH:mm:ss'\n        },\n        {\n            id: 'MM-DD-YYYY HH:mm:ss',\n            title: 'MM-DD-YYYY HH:mm:ss (USA)'\n        },\n        {\n            id: 'DD-MM-YYYY HH:mm:ss',\n            title: 'DD-MM-YYYY HH:mm:ss'\n        },\n        {\n            id: 'YYYY/MM/DD HH:mm:ss',\n            title: 'MM/DD/YYYY HH:mm:ss'\n        },\n        {\n            id: 'YYYY/DD/MM HH:mm:ss',\n            title: 'YYYY/DD/MM HH:mm:ss'\n        },\n        {\n            id: 'MM/DD/YYYY HH:mm:ss',\n            title: 'MM/DD/YYYY HH:mm:ss'\n        },\n        {\n            id: 'DD/MM/YYYY HH:mm:ss',\n            title: 'DD/MM/YYYY HH:mm:ss'\n        },\n    ],\n    timeZones: [\n        {\n            id: 'Africa/Abidjan',\n            title: 'Africa/Abidjan'\n        },\n        {\n            id: 'Africa/Accra',\n            title: 'Africa/Accra'\n        },\n        {\n            id: 'Africa/Addis_Ababa',\n            title: 'Africa/Addis_Ababa'\n        },\n        {\n            id: 'Africa/Algiers',\n            title: 'Africa/Algiers'\n        },\n        {\n            id: 'Africa/Asmara',\n            title: 'Africa/Asmara'\n        },\n        {\n            id: 'Africa/Asmera',\n            title: 'Africa/Asmera'\n        },\n        {\n            id: 'Africa/Bamako',\n            title: 'Africa/Bamako'\n        },\n        {\n            id: 'Africa/Bangui',\n            title: 'Africa/Bangui'\n        },\n        {\n            id: 'Africa/Banjul',\n            title: 'Africa/Banjul'\n        },\n        {\n            id: 'Africa/Bissau',\n            title: 'Africa/Bissau'\n        },\n        {\n            id: 'Africa/Blantyre',\n            title: 'Africa/Blantyre'\n        },\n        {\n            id: 'Africa/Brazzaville',\n            title: 'Africa/Brazzaville'\n        },\n        {\n            id: 'Africa/Bujumbura',\n            title: 'Africa/Bujumbura'\n        },\n        {\n            id: 'Africa/Cairo',\n            title: 'Africa/Cairo'\n        },\n        {\n            id: 'Africa/Casablanca',\n            title: 'Africa/Casablanca'\n        },\n        {\n            id: 'Africa/Ceuta',\n            title: 'Africa/Ceuta'\n        },\n        {\n            id: 'Africa/Conakry',\n            title: 'Africa/Conakry'\n        },\n        {\n            id: 'Africa/Dakar',\n            title: 'Africa/Dakar'\n        },\n        {\n            id: 'Africa/Dar_es_Salaam',\n            title: 'Africa/Dar_es_Salaam'\n        },\n        {\n            id: 'Africa/Djibouti',\n            title: 'Africa/Djibouti'\n        },\n        {\n            id: 'Africa/Douala',\n            title: 'Africa/Douala'\n        },\n        {\n            id: 'Africa/El_Aaiun',\n            title: 'Africa/El_Aaiun'\n        },\n        {\n            id: 'Africa/Freetown',\n            title: 'Africa/Freetown'\n        },\n        {\n            id: 'Africa/Gaborone',\n            title: 'Africa/Gaborone'\n        },\n        {\n            id: 'Africa/Harare',\n            title: 'Africa/Harare'\n        },\n        {\n            id: 'Africa/Johannesburg',\n            title: 'Africa/Johannesburg'\n        },\n        {\n            id: 'Africa/Juba',\n            title: 'Africa/Juba'\n        },\n        {\n            id: 'Africa/Kampala',\n            title: 'Africa/Kampala'\n        },\n        {\n            id: 'Africa/Khartoum',\n            title: 'Africa/Khartoum'\n        },\n        {\n            id: 'Africa/Kigali',\n            title: 'Africa/Kigali'\n        },\n        {\n            id: 'Africa/Kinshasa',\n            title: 'Africa/Kinshasa'\n        },\n        {\n            id: 'Africa/Lagos',\n            title: 'Africa/Lagos'\n        },\n        {\n            id: 'Africa/Libreville',\n            title: 'Africa/Libreville'\n        },\n        {\n            id: 'Africa/Lome',\n            title: 'Africa/Lome'\n        },\n        {\n            id: 'Africa/Luanda',\n            title: 'Africa/Luanda'\n        },\n        {\n            id: 'Africa/Lubumbashi',\n            title: 'Africa/Lubumbashi'\n        },\n        {\n            id: 'Africa/Lusaka',\n            title: 'Africa/Lusaka'\n        },\n        {\n            id: 'Africa/Malabo',\n            title: 'Africa/Malabo'\n        },\n        {\n            id: 'Africa/Maputo',\n            title: 'Africa/Maputo'\n        },\n        {\n            id: 'Africa/Maseru',\n            title: 'Africa/Maseru'\n        },\n        {\n            id: 'Africa/Mbabane',\n            title: 'Africa/Mbabane'\n        },\n        {\n            id: 'Africa/Mogadishu',\n            title: 'Africa/Mogadishu'\n        },\n        {\n            id: 'Africa/Monrovia',\n            title: 'Africa/Monrovia'\n        },\n        {\n            id: 'Africa/Nairobi',\n            title: 'Africa/Nairobi'\n        },\n        {\n            id: 'Africa/Ndjamena',\n            title: 'Africa/Ndjamena'\n        },\n        {\n            id: 'Africa/Niamey',\n            title: 'Africa/Niamey'\n        },\n        {\n            id: 'Africa/Nouakchott',\n            title: 'Africa/Nouakchott'\n        },\n        {\n            id: 'Africa/Ouagadougou',\n            title: 'Africa/Ouagadougou'\n        },\n        {\n            id: 'Africa/Porto-Novo',\n            title: 'Africa/Porto-Novo'\n        },\n        {\n            id: 'Africa/Sao_Tome',\n            title: 'Africa/Sao_Tome'\n        },\n        {\n            id: 'Africa/Timbuktu',\n            title: 'Africa/Timbuktu'\n        },\n        {\n            id: 'Africa/Tripoli',\n            title: 'Africa/Tripoli'\n        },\n        {\n            id: 'Africa/Tunis',\n            title: 'Africa/Tunis'\n        },\n        {\n            id: 'Africa/Windhoek',\n            title: 'Africa/Windhoek'\n        },\n        {\n            id: 'America/Adak',\n            title: 'America/Adak'\n        },\n        {\n            id: 'America/Anchorage',\n            title: 'America/Anchorage'\n        },\n        {\n            id: 'America/Anguilla',\n            title: 'America/Anguilla'\n        },\n        {\n            id: 'America/Antigua',\n            title: 'America/Antigua'\n        },\n        {\n            id: 'America/Araguaina',\n            title: 'America/Araguaina'\n        },\n        {\n            id: 'America/Argentina/Buenos_Aires',\n            title: 'America/Argentina/Buenos_Aires'\n        },\n        {\n            id: 'America/Argentina/Catamarca',\n            title: 'America/Argentina/Catamarca'\n        },\n        {\n            id: 'America/Argentina/ComodRivadavia',\n            title: 'America/Argentina/ComodRivadavia'\n        },\n        {\n            id: 'America/Argentina/Cordoba',\n            title: 'America/Argentina/Cordoba'\n        },\n        {\n            id: 'America/Argentina/Jujuy',\n            title: 'America/Argentina/Jujuy'\n        },\n        {\n            id: 'America/Argentina/La_Rioja',\n            title: 'America/Argentina/La_Rioja'\n        },\n        {\n            id: 'America/Argentina/Mendoza',\n            title: 'America/Argentina/Mendoza'\n        },\n        {\n            id: 'America/Argentina/Rio_Gallegos',\n            title: 'America/Argentina/Rio_Gallegos'\n        },\n        {\n            id: 'America/Argentina/Salta',\n            title: 'America/Argentina/Salta'\n        },\n        {\n            id: 'America/Argentina/San_Juan',\n            title: 'America/Argentina/San_Juan'\n        },\n        {\n            id: 'America/Argentina/San_Luis',\n            title: 'America/Argentina/San_Luis'\n        },\n        {\n            id: 'America/Argentina/Tucuman',\n            title: 'America/Argentina/Tucuman'\n        },\n        {\n            id: 'America/Argentina/Ushuaia',\n            title: 'America/Argentina/Ushuaia'\n        },\n        {\n            id: 'America/Aruba',\n            title: 'America/Aruba'\n        },\n        {\n            id: 'America/Asuncion',\n            title: 'America/Asuncion'\n        },\n        {\n            id: 'America/Atikokan',\n            title: 'America/Atikokan'\n        },\n        {\n            id: 'America/Atka',\n            title: 'America/Atka'\n        },\n        {\n            id: 'America/Bahia',\n            title: 'America/Bahia'\n        },\n        {\n            id: 'America/Bahia_Banderas',\n            title: 'America/Bahia_Banderas'\n        },\n        {\n            id: 'America/Barbados',\n            title: 'America/Barbados'\n        },\n        {\n            id: 'America/Belem',\n            title: 'America/Belem'\n        },\n        {\n            id: 'America/Belize',\n            title: 'America/Belize'\n        },\n        {\n            id: 'America/Blanc-Sablon',\n            title: 'America/Blanc-Sablon'\n        },\n        {\n            id: 'America/Boa_Vista',\n            title: 'America/Boa_Vista'\n        },\n        {\n            id: 'America/Bogota',\n            title: 'America/Bogota'\n        },\n        {\n            id: 'America/Boise',\n            title: 'America/Boise'\n        },\n        {\n            id: 'America/Buenos_Aires',\n            title: 'America/Buenos_Aires'\n        },\n        {\n            id: 'America/Cambridge_Bay',\n            title: 'America/Cambridge_Bay'\n        },\n        {\n            id: 'America/Campo_Grande',\n            title: 'America/Campo_Grande'\n        },\n        {\n            id: 'America/Cancun',\n            title: 'America/Cancun'\n        },\n        {\n            id: 'America/Caracas',\n            title: 'America/Caracas'\n        },\n        {\n            id: 'America/Catamarca',\n            title: 'America/Catamarca'\n        },\n        {\n            id: 'America/Cayenne',\n            title: 'America/Cayenne'\n        },\n        {\n            id: 'America/Cayman',\n            title: 'America/Cayman'\n        },\n        {\n            id: 'America/Chicago',\n            title: 'America/Chicago'\n        },\n        {\n            id: 'America/Chihuahua',\n            title: 'America/Chihuahua'\n        },\n        {\n            id: 'America/Coral_Harbour',\n            title: 'America/Coral_Harbour'\n        },\n        {\n            id: 'America/Cordoba',\n            title: 'America/Cordoba'\n        },\n        {\n            id: 'America/Costa_Rica',\n            title: 'America/Costa_Rica'\n        },\n        {\n            id: 'America/Creston',\n            title: 'America/Creston'\n        },\n        {\n            id: 'America/Cuiaba',\n            title: 'America/Cuiaba'\n        },\n        {\n            id: 'America/Curacao',\n            title: 'America/Curacao'\n        },\n        {\n            id: 'America/Danmarkshavn',\n            title: 'America/Danmarkshavn'\n        },\n        {\n            id: 'America/Dawson',\n            title: 'America/Dawson'\n        },\n        {\n            id: 'America/Dawson_Creek',\n            title: 'America/Dawson_Creek'\n        },\n        {\n            id: 'America/Denver',\n            title: 'America/Denver'\n        },\n        {\n            id: 'America/Detroit',\n            title: 'America/Detroit'\n        },\n        {\n            id: 'America/Dominica',\n            title: 'America/Dominica'\n        },\n        {\n            id: 'America/Edmonton',\n            title: 'America/Edmonton'\n        },\n        {\n            id: 'America/Eirunepe',\n            title: 'America/Eirunepe'\n        },\n        {\n            id: 'America/El_Salvador',\n            title: 'America/El_Salvador'\n        },\n        {\n            id: 'America/Ensenada',\n            title: 'America/Ensenada'\n        },\n        {\n            id: 'America/Fort_Nelson',\n            title: 'America/Fort_Nelson'\n        },\n        {\n            id: 'America/Fort_Wayne',\n            title: 'America/Fort_Wayne'\n        },\n        {\n            id: 'America/Fortaleza',\n            title: 'America/Fortaleza'\n        },\n        {\n            id: 'America/Glace_Bay',\n            title: 'America/Glace_Bay'\n        },\n        {\n            id: 'America/Godthab',\n            title: 'America/Godthab'\n        },\n        {\n            id: 'America/Goose_Bay',\n            title: 'America/Goose_Bay'\n        },\n        {\n            id: 'America/Grand_Turk',\n            title: 'America/Grand_Turk'\n        },\n        {\n            id: 'America/Grenada',\n            title: 'America/Grenada'\n        },\n        {\n            id: 'America/Guadeloupe',\n            title: 'America/Guadeloupe'\n        },\n        {\n            id: 'America/Guatemala',\n            title: 'America/Guatemala'\n        },\n        {\n            id: 'America/Guayaquil',\n            title: 'America/Guayaquil'\n        },\n        {\n            id: 'America/Guyana',\n            title: 'America/Guyana'\n        },\n        {\n            id: 'America/Halifax',\n            title: 'America/Halifax'\n        },\n        {\n            id: 'America/Havana',\n            title: 'America/Havana'\n        },\n        {\n            id: 'America/Hermosillo',\n            title: 'America/Hermosillo'\n        },\n        {\n            id: 'America/Indiana/Indianapolis',\n            title: 'America/Indiana/Indianapolis'\n        },\n        {\n            id: 'America/Indiana/Knox',\n            title: 'America/Indiana/Knox'\n        },\n        {\n            id: 'America/Indiana/Marengo',\n            title: 'America/Indiana/Marengo'\n        },\n        {\n            id: 'America/Indiana/Petersburg',\n            title: 'America/Indiana/Petersburg'\n        },\n        {\n            id: 'America/Indiana/Tell_City',\n            title: 'America/Indiana/Tell_City'\n        },\n        {\n            id: 'America/Indiana/Vevay',\n            title: 'America/Indiana/Vevay'\n        },\n        {\n            id: 'America/Indiana/Vincennes',\n            title: 'America/Indiana/Vincennes'\n        },\n        {\n            id: 'America/Indiana/Winamac',\n            title: 'America/Indiana/Winamac'\n        },\n        {\n            id: 'America/Indianapolis',\n            title: 'America/Indianapolis'\n        },\n        {\n            id: 'America/Inuvik',\n            title: 'America/Inuvik'\n        },\n        {\n            id: 'America/Iqaluit',\n            title: 'America/Iqaluit'\n        },\n        {\n            id: 'America/Jamaica',\n            title: 'America/Jamaica'\n        },\n        {\n            id: 'America/Jujuy',\n            title: 'America/Jujuy'\n        },\n        {\n            id: 'America/Juneau',\n            title: 'America/Juneau'\n        },\n        {\n            id: 'America/Kentucky/Louisville',\n            title: 'America/Kentucky/Louisville'\n        },\n        {\n            id: 'America/Kentucky/Monticello',\n            title: 'America/Kentucky/Monticello'\n        },\n        {\n            id: 'America/Knox_IN',\n            title: 'America/Knox_IN'\n        },\n        {\n            id: 'America/Kralendijk',\n            title: 'America/Kralendijk'\n        },\n        {\n            id: 'America/La_Paz',\n            title: 'America/La_Paz'\n        },\n        {\n            id: 'America/Lima',\n            title: 'America/Lima'\n        },\n        {\n            id: 'America/Los_Angeles',\n            title: 'America/Los_Angeles'\n        },\n        {\n            id: 'America/Louisville',\n            title: 'America/Louisville'\n        },\n        {\n            id: 'America/Lower_Princes',\n            title: 'America/Lower_Princes'\n        },\n        {\n            id: 'America/Maceio',\n            title: 'America/Maceio'\n        },\n        {\n            id: 'America/Managua',\n            title: 'America/Managua'\n        },\n        {\n            id: 'America/Manaus',\n            title: 'America/Manaus'\n        },\n        {\n            id: 'America/Marigot',\n            title: 'America/Marigot'\n        },\n        {\n            id: 'America/Martinique',\n            title: 'America/Martinique'\n        },\n        {\n            id: 'America/Matamoros',\n            title: 'America/Matamoros'\n        },\n        {\n            id: 'America/Mazatlan',\n            title: 'America/Mazatlan'\n        },\n        {\n            id: 'America/Mendoza',\n            title: 'America/Mendoza'\n        },\n        {\n            id: 'America/Menominee',\n            title: 'America/Menominee'\n        },\n        {\n            id: 'America/Merida',\n            title: 'America/Merida'\n        },\n        {\n            id: 'America/Metlakatla',\n            title: 'America/Metlakatla'\n        },\n        {\n            id: 'America/Mexico_City',\n            title: 'America/Mexico_City'\n        },\n        {\n            id: 'America/Miquelon',\n            title: 'America/Miquelon'\n        },\n        {\n            id: 'America/Moncton',\n            title: 'America/Moncton'\n        },\n        {\n            id: 'America/Monterrey',\n            title: 'America/Monterrey'\n        },\n        {\n            id: 'America/Montevideo',\n            title: 'America/Montevideo'\n        },\n        {\n            id: 'America/Montreal',\n            title: 'America/Montreal'\n        },\n        {\n            id: 'America/Montserrat',\n            title: 'America/Montserrat'\n        },\n        {\n            id: 'America/Nassau',\n            title: 'America/Nassau'\n        },\n        {\n            id: 'America/New_York',\n            title: 'America/New_York'\n        },\n        {\n            id: 'America/Nipigon',\n            title: 'America/Nipigon'\n        },\n        {\n            id: 'America/Nome',\n            title: 'America/Nome'\n        },\n        {\n            id: 'America/Noronha',\n            title: 'America/Noronha'\n        },\n        {\n            id: 'America/North_Dakota/Beulah',\n            title: 'America/North_Dakota/Beulah'\n        },\n        {\n            id: 'America/North_Dakota/Center',\n            title: 'America/North_Dakota/Center'\n        },\n        {\n            id: 'America/North_Dakota/New_Salem',\n            title: 'America/North_Dakota/New_Salem'\n        },\n        {\n            id: 'America/Ojinaga',\n            title: 'America/Ojinaga'\n        },\n        {\n            id: 'America/Panama',\n            title: 'America/Panama'\n        },\n        {\n            id: 'America/Pangnirtung',\n            title: 'America/Pangnirtung'\n        },\n        {\n            id: 'America/Paramaribo',\n            title: 'America/Paramaribo'\n        },\n        {\n            id: 'America/Phoenix',\n            title: 'America/Phoenix'\n        },\n        {\n            id: 'America/Port-au-Prince',\n            title: 'America/Port-au-Prince'\n        },\n        {\n            id: 'America/Port_of_Spain',\n            title: 'America/Port_of_Spain'\n        },\n        {\n            id: 'America/Porto_Acre',\n            title: 'America/Porto_Acre'\n        },\n        {\n            id: 'America/Porto_Velho',\n            title: 'America/Porto_Velho'\n        },\n        {\n            id: 'America/Puerto_Rico',\n            title: 'America/Puerto_Rico'\n        },\n        {\n            id: 'America/Punta_Arenas',\n            title: 'America/Punta_Arenas'\n        },\n        {\n            id: 'America/Rainy_River',\n            title: 'America/Rainy_River'\n        },\n        {\n            id: 'America/Rankin_Inlet',\n            title: 'America/Rankin_Inlet'\n        },\n        {\n            id: 'America/Recife',\n            title: 'America/Recife'\n        },\n        {\n            id: 'America/Regina',\n            title: 'America/Regina'\n        },\n        {\n            id: 'America/Resolute',\n            title: 'America/Resolute'\n        },\n        {\n            id: 'America/Rio_Branco',\n            title: 'America/Rio_Branco'\n        },\n        {\n            id: 'America/Rosario',\n            title: 'America/Rosario'\n        },\n        {\n            id: 'America/Santa_Isabel',\n            title: 'America/Santa_Isabel'\n        },\n        {\n            id: 'America/Santarem',\n            title: 'America/Santarem'\n        },\n        {\n            id: 'America/Santiago',\n            title: 'America/Santiago'\n        },\n        {\n            id: 'America/Santo_Domingo',\n            title: 'America/Santo_Domingo'\n        },\n        {\n            id: 'America/Sao_Paulo',\n            title: 'America/Sao_Paulo'\n        },\n        {\n            id: 'America/Scoresbysund',\n            title: 'America/Scoresbysund'\n        },\n        {\n            id: 'America/Shiprock',\n            title: 'America/Shiprock'\n        },\n        {\n            id: 'America/Sitka',\n            title: 'America/Sitka'\n        },\n        {\n            id: 'America/St_Barthelemy',\n            title: 'America/St_Barthelemy'\n        },\n        {\n            id: 'America/St_Johns',\n            title: 'America/St_Johns'\n        },\n        {\n            id: 'America/St_Kitts',\n            title: 'America/St_Kitts'\n        },\n        {\n            id: 'America/St_Lucia',\n            title: 'America/St_Lucia'\n        },\n        {\n            id: 'America/St_Thomas',\n            title: 'America/St_Thomas'\n        },\n        {\n            id: 'America/St_Vincent',\n            title: 'America/St_Vincent'\n        },\n        {\n            id: 'America/Swift_Current',\n            title: 'America/Swift_Current'\n        },\n        {\n            id: 'America/Tegucigalpa',\n            title: 'America/Tegucigalpa'\n        },\n        {\n            id: 'America/Thule',\n            title: 'America/Thule'\n        },\n        {\n            id: 'America/Thunder_Bay',\n            title: 'America/Thunder_Bay'\n        },\n        {\n            id: 'America/Tijuana',\n            title: 'America/Tijuana'\n        },\n        {\n            id: 'America/Toronto',\n            title: 'America/Toronto'\n        },\n        {\n            id: 'America/Tortola',\n            title: 'America/Tortola'\n        },\n        {\n            id: 'America/Vancouver',\n            title: 'America/Vancouver'\n        },\n        {\n            id: 'America/Virgin',\n            title: 'America/Virgin'\n        },\n        {\n            id: 'America/Whitehorse',\n            title: 'America/Whitehorse'\n        },\n        {\n            id: 'America/Winnipeg',\n            title: 'America/Winnipeg'\n        },\n        {\n            id: 'America/Yakutat',\n            title: 'America/Yakutat'\n        },\n        {\n            id: 'America/Yellowknife',\n            title: 'America/Yellowknife'\n        },\n        {\n            id: 'Antarctica/Casey',\n            title: 'Antarctica/Casey'\n        },\n        {\n            id: 'Antarctica/Davis',\n            title: 'Antarctica/Davis'\n        },\n        {\n            id: 'Antarctica/DumontDUrville',\n            title: 'Antarctica/DumontDUrville'\n        },\n        {\n            id: 'Antarctica/Macquarie',\n            title: 'Antarctica/Macquarie'\n        },\n        {\n            id: 'Antarctica/Mawson',\n            title: 'Antarctica/Mawson'\n        },\n        {\n            id: 'Antarctica/McMurdo',\n            title: 'Antarctica/McMurdo'\n        },\n        {\n            id: 'Antarctica/Palmer',\n            title: 'Antarctica/Palmer'\n        },\n        {\n            id: 'Antarctica/Rothera',\n            title: 'Antarctica/Rothera'\n        },\n        {\n            id: 'Antarctica/South_Pole',\n            title: 'Antarctica/South_Pole'\n        },\n        {\n            id: 'Antarctica/Syowa',\n            title: 'Antarctica/Syowa'\n        },\n        {\n            id: 'Antarctica/Troll',\n            title: 'Antarctica/Troll'\n        },\n        {\n            id: 'Antarctica/Vostok',\n            title: 'Antarctica/Vostok'\n        },\n        {\n            id: 'Arctic/Longyearbyen',\n            title: 'Arctic/Longyearbyen'\n        },\n        {\n            id: 'Asia/Aden',\n            title: 'Asia/Aden'\n        },\n        {\n            id: 'Asia/Almaty',\n            title: 'Asia/Almaty'\n        },\n        {\n            id: 'Asia/Amman',\n            title: 'Asia/Amman'\n        },\n        {\n            id: 'Asia/Anadyr',\n            title: 'Asia/Anadyr'\n        },\n        {\n            id: 'Asia/Aqtau',\n            title: 'Asia/Aqtau'\n        },\n        {\n            id: 'Asia/Aqtobe',\n            title: 'Asia/Aqtobe'\n        },\n        {\n            id: 'Asia/Ashgabat',\n            title: 'Asia/Ashgabat'\n        },\n        {\n            id: 'Asia/Ashkhabad',\n            title: 'Asia/Ashkhabad'\n        },\n        {\n            id: 'Asia/Atyrau',\n            title: 'Asia/Atyrau'\n        },\n        {\n            id: 'Asia/Baghdad',\n            title: 'Asia/Baghdad'\n        },\n        {\n            id: 'Asia/Bahrain',\n            title: 'Asia/Bahrain'\n        },\n        {\n            id: 'Asia/Baku',\n            title: 'Asia/Baku'\n        },\n        {\n            id: 'Asia/Bangkok',\n            title: 'Asia/Bangkok'\n        },\n        {\n            id: 'Asia/Barnaul',\n            title: 'Asia/Barnaul'\n        },\n        {\n            id: 'Asia/Beirut',\n            title: 'Asia/Beirut'\n        },\n        {\n            id: 'Asia/Bishkek',\n            title: 'Asia/Bishkek'\n        },\n        {\n            id: 'Asia/Brunei',\n            title: 'Asia/Brunei'\n        },\n        {\n            id: 'Asia/Calcutta',\n            title: 'Asia/Calcutta'\n        },\n        {\n            id: 'Asia/Chita',\n            title: 'Asia/Chita'\n        },\n        {\n            id: 'Asia/Choibalsan',\n            title: 'Asia/Choibalsan'\n        },\n        {\n            id: 'Asia/Chongqing',\n            title: 'Asia/Chongqing'\n        },\n        {\n            id: 'Asia/Chungking',\n            title: 'Asia/Chungking'\n        },\n        {\n            id: 'Asia/Colombo',\n            title: 'Asia/Colombo'\n        },\n        {\n            id: 'Asia/Dacca',\n            title: 'Asia/Dacca'\n        },\n        {\n            id: 'Asia/Damascus',\n            title: 'Asia/Damascus'\n        },\n        {\n            id: 'Asia/Dhaka',\n            title: 'Asia/Dhaka'\n        },\n        {\n            id: 'Asia/Dili',\n            title: 'Asia/Dili'\n        },\n        {\n            id: 'Asia/Dubai',\n            title: 'Asia/Dubai'\n        },\n        {\n            id: 'Asia/Dushanbe',\n            title: 'Asia/Dushanbe'\n        },\n        {\n            id: 'Asia/Famagusta',\n            title: 'Asia/Famagusta'\n        },\n        {\n            id: 'Asia/Gaza',\n            title: 'Asia/Gaza'\n        },\n        {\n            id: 'Asia/Harbin',\n            title: 'Asia/Harbin'\n        },\n        {\n            id: 'Asia/Hebron',\n            title: 'Asia/Hebron'\n        },\n        {\n            id: 'Asia/Ho_Chi_Minh',\n            title: 'Asia/Ho_Chi_Minh'\n        },\n        {\n            id: 'Asia/Hong_Kong',\n            title: 'Asia/Hong_Kong'\n        },\n        {\n            id: 'Asia/Hovd',\n            title: 'Asia/Hovd'\n        },\n        {\n            id: 'Asia/Irkutsk',\n            title: 'Asia/Irkutsk'\n        },\n        {\n            id: 'Asia/Istanbul',\n            title: 'Asia/Istanbul'\n        },\n        {\n            id: 'Asia/Jakarta',\n            title: 'Asia/Jakarta'\n        },\n        {\n            id: 'Asia/Jayapura',\n            title: 'Asia/Jayapura'\n        },\n        {\n            id: 'Asia/Jerusalem',\n            title: 'Asia/Jerusalem'\n        },\n        {\n            id: 'Asia/Kabul',\n            title: 'Asia/Kabul'\n        },\n        {\n            id: 'Asia/Kamchatka',\n            title: 'Asia/Kamchatka'\n        },\n        {\n            id: 'Asia/Karachi',\n            title: 'Asia/Karachi'\n        },\n        {\n            id: 'Asia/Kashgar',\n            title: 'Asia/Kashgar'\n        },\n        {\n            id: 'Asia/Kathmandu',\n            title: 'Asia/Kathmandu'\n        },\n        {\n            id: 'Asia/Katmandu',\n            title: 'Asia/Katmandu'\n        },\n        {\n            id: 'Asia/Khandyga',\n            title: 'Asia/Khandyga'\n        },\n        {\n            id: 'Asia/Kolkata',\n            title: 'Asia/Kolkata'\n        },\n        {\n            id: 'Asia/Krasnoyarsk',\n            title: 'Asia/Krasnoyarsk'\n        },\n        {\n            id: 'Asia/Kuala_Lumpur',\n            title: 'Asia/Kuala_Lumpur'\n        },\n        {\n            id: 'Asia/Kuching',\n            title: 'Asia/Kuching'\n        },\n        {\n            id: 'Asia/Kuwait',\n            title: 'Asia/Kuwait'\n        },\n        {\n            id: 'Asia/Macao',\n            title: 'Asia/Macao'\n        },\n        {\n            id: 'Asia/Macau',\n            title: 'Asia/Macau'\n        },\n        {\n            id: 'Asia/Magadan',\n            title: 'Asia/Magadan'\n        },\n        {\n            id: 'Asia/Makassar',\n            title: 'Asia/Makassar'\n        },\n        {\n            id: 'Asia/Manila',\n            title: 'Asia/Manila'\n        },\n        {\n            id: 'Asia/Muscat',\n            title: 'Asia/Muscat'\n        },\n        {\n            id: 'Asia/Nicosia',\n            title: 'Asia/Nicosia'\n        },\n        {\n            id: 'Asia/Novokuznetsk',\n            title: 'Asia/Novokuznetsk'\n        },\n        {\n            id: 'Asia/Novosibirsk',\n            title: 'Asia/Novosibirsk'\n        },\n        {\n            id: 'Asia/Omsk',\n            title: 'Asia/Omsk'\n        },\n        {\n            id: 'Asia/Oral',\n            title: 'Asia/Oral'\n        },\n        {\n            id: 'Asia/Phnom_Penh',\n            title: 'Asia/Phnom_Penh'\n        },\n        {\n            id: 'Asia/Pontianak',\n            title: 'Asia/Pontianak'\n        },\n        {\n            id: 'Asia/Pyongyang',\n            title: 'Asia/Pyongyang'\n        },\n        {\n            id: 'Asia/Qatar',\n            title: 'Asia/Qatar'\n        },\n        {\n            id: 'Asia/Qyzylorda',\n            title: 'Asia/Qyzylorda'\n        },\n        {\n            id: 'Asia/Rangoon',\n            title: 'Asia/Rangoon'\n        },\n        {\n            id: 'Asia/Riyadh',\n            title: 'Asia/Riyadh'\n        },\n        {\n            id: 'Asia/Saigon',\n            title: 'Asia/Saigon'\n        },\n        {\n            id: 'Asia/Sakhalin',\n            title: 'Asia/Sakhalin'\n        },\n        {\n            id: 'Asia/Samarkand',\n            title: 'Asia/Samarkand'\n        },\n        {\n            id: 'Asia/Seoul',\n            title: 'Asia/Seoul'\n        },\n        {\n            id: 'Asia/Shanghai',\n            title: 'Asia/Shanghai'\n        },\n        {\n            id: 'Asia/Singapore',\n            title: 'Asia/Singapore'\n        },\n        {\n            id: 'Asia/Srednekolymsk',\n            title: 'Asia/Srednekolymsk'\n        },\n        {\n            id: 'Asia/Taipei',\n            title: 'Asia/Taipei'\n        },\n        {\n            id: 'Asia/Tashkent',\n            title: 'Asia/Tashkent'\n        },\n        {\n            id: 'Asia/Tbilisi',\n            title: 'Asia/Tbilisi'\n        },\n        {\n            id: 'Asia/Tehran',\n            title: 'Asia/Tehran'\n        },\n        {\n            id: 'Asia/Tel_Aviv',\n            title: 'Asia/Tel_Aviv'\n        },\n        {\n            id: 'Asia/Thimbu',\n            title: 'Asia/Thimbu'\n        },\n        {\n            id: 'Asia/Thimphu',\n            title: 'Asia/Thimphu'\n        },\n        {\n            id: 'Asia/Tokyo',\n            title: 'Asia/Tokyo'\n        },\n        {\n            id: 'Asia/Tomsk',\n            title: 'Asia/Tomsk'\n        },\n        {\n            id: 'Asia/Ujung_Pandang',\n            title: 'Asia/Ujung_Pandang'\n        },\n        {\n            id: 'Asia/Ulaanbaatar',\n            title: 'Asia/Ulaanbaatar'\n        },\n        {\n            id: 'Asia/Ulan_Bator',\n            title: 'Asia/Ulan_Bator'\n        },\n        {\n            id: 'Asia/Urumqi',\n            title: 'Asia/Urumqi'\n        },\n        {\n            id: 'Asia/Ust-Nera',\n            title: 'Asia/Ust-Nera'\n        },\n        {\n            id: 'Asia/Vientiane',\n            title: 'Asia/Vientiane'\n        },\n        {\n            id: 'Asia/Vladivostok',\n            title: 'Asia/Vladivostok'\n        },\n        {\n            id: 'Asia/Yakutsk',\n            title: 'Asia/Yakutsk'\n        },\n        {\n            id: 'Asia/Yangon',\n            title: 'Asia/Yangon'\n        },\n        {\n            id: 'Asia/Yekaterinburg',\n            title: 'Asia/Yekaterinburg'\n        },\n        {\n            id: 'Asia/Yerevan',\n            title: 'Asia/Yerevan'\n        },\n        {\n            id: 'Atlantic/Azores',\n            title: 'Atlantic/Azores'\n        },\n        {\n            id: 'Atlantic/Bermuda',\n            title: 'Atlantic/Bermuda'\n        },\n        {\n            id: 'Atlantic/Canary',\n            title: 'Atlantic/Canary'\n        },\n        {\n            id: 'Atlantic/Cape_Verde',\n            title: 'Atlantic/Cape_Verde'\n        },\n        {\n            id: 'Atlantic/Faeroe',\n            title: 'Atlantic/Faeroe'\n        },\n        {\n            id: 'Atlantic/Faroe',\n            title: 'Atlantic/Faroe'\n        },\n        {\n            id: 'Atlantic/Jan_Mayen',\n            title: 'Atlantic/Jan_Mayen'\n        },\n        {\n            id: 'Atlantic/Madeira',\n            title: 'Atlantic/Madeira'\n        },\n        {\n            id: 'Atlantic/Reykjavik',\n            title: 'Atlantic/Reykjavik'\n        },\n        {\n            id: 'Atlantic/South_Georgia',\n            title: 'Atlantic/South_Georgia'\n        },\n        {\n            id: 'Atlantic/St_Helena',\n            title: 'Atlantic/St_Helena'\n        },\n        {\n            id: 'Atlantic/Stanley',\n            title: 'Atlantic/Stanley'\n        },\n        {\n            id: 'Australia/ACT',\n            title: 'Australia/ACT'\n        },\n        {\n            id: 'Australia/Adelaide',\n            title: 'Australia/Adelaide'\n        },\n        {\n            id: 'Australia/Brisbane',\n            title: 'Australia/Brisbane'\n        },\n        {\n            id: 'Australia/Broken_Hill',\n            title: 'Australia/Broken_Hill'\n        },\n        {\n            id: 'Australia/Canberra',\n            title: 'Australia/Canberra'\n        },\n        {\n            id: 'Australia/Currie',\n            title: 'Australia/Currie'\n        },\n        {\n            id: 'Australia/Darwin',\n            title: 'Australia/Darwin'\n        },\n        {\n            id: 'Australia/Eucla',\n            title: 'Australia/Eucla'\n        },\n        {\n            id: 'Australia/Hobart',\n            title: 'Australia/Hobart'\n        },\n        {\n            id: 'Australia/LHI',\n            title: 'Australia/LHI'\n        },\n        {\n            id: 'Australia/Lindeman',\n            title: 'Australia/Lindeman'\n        },\n        {\n            id: 'Australia/Lord_Howe',\n            title: 'Australia/Lord_Howe'\n        },\n        {\n            id: 'Australia/Melbourne',\n            title: 'Australia/Melbourne'\n        },\n        {\n            id: 'Australia/NSW',\n            title: 'Australia/NSW'\n        },\n        {\n            id: 'Australia/North',\n            title: 'Australia/North'\n        },\n        {\n            id: 'Australia/Perth',\n            title: 'Australia/Perth'\n        },\n        {\n            id: 'Australia/Queensland',\n            title: 'Australia/Queensland'\n        },\n        {\n            id: 'Australia/South',\n            title: 'Australia/South'\n        },\n        {\n            id: 'Australia/Sydney',\n            title: 'Australia/Sydney'\n        },\n        {\n            id: 'Australia/Tasmania',\n            title: 'Australia/Tasmania'\n        },\n        {\n            id: 'Australia/Victoria',\n            title: 'Australia/Victoria'\n        },\n        {\n            id: 'Australia/West',\n            title: 'Australia/West'\n        },\n        {\n            id: 'Australia/Yancowinna',\n            title: 'Australia/Yancowinna'\n        },\n        {\n            id: 'Brazil/Acre',\n            title: 'Brazil/Acre'\n        },\n        {\n            id: 'Brazil/DeNoronha',\n            title: 'Brazil/DeNoronha'\n        },\n        {\n            id: 'Brazil/East',\n            title: 'Brazil/East'\n        },\n        {\n            id: 'Brazil/West',\n            title: 'Brazil/West'\n        },\n        {\n            id: 'CET',\n            title: 'CET'\n        },\n        {\n            id: 'CST6CDT',\n            title: 'CST6CDT'\n        },\n        {\n            id: 'Canada/Atlantic',\n            title: 'Canada/Atlantic'\n        },\n        {\n            id: 'Canada/Central',\n            title: 'Canada/Central'\n        },\n        {\n            id: 'Canada/East-Saskatchewan',\n            title: 'Canada/East-Saskatchewan'\n        },\n        {\n            id: 'Canada/Eastern',\n            title: 'Canada/Eastern'\n        },\n        {\n            id: 'Canada/Mountain',\n            title: 'Canada/Mountain'\n        },\n        {\n            id: 'Canada/Newfoundland',\n            title: 'Canada/Newfoundland'\n        },\n        {\n            id: 'Canada/Pacific',\n            title: 'Canada/Pacific'\n        },\n        {\n            id: 'Canada/Saskatchewan',\n            title: 'Canada/Saskatchewan'\n        },\n        {\n            id: 'Canada/Yukon',\n            title: 'Canada/Yukon'\n        },\n        {\n            id: 'Chile/Continental',\n            title: 'Chile/Continental'\n        },\n        {\n            id: 'Chile/EasterIsland',\n            title: 'Chile/EasterIsland'\n        },\n        {\n            id: 'Cuba',\n            title: 'Cuba'\n        },\n        {\n            id: 'EET',\n            title: 'EET'\n        },\n        {\n            id: 'EST',\n            title: 'EST'\n        },\n        {\n            id: 'EST5EDT',\n            title: 'EST5EDT'\n        },\n        {\n            id: 'Egypt',\n            title: 'Egypt'\n        },\n        {\n            id: 'Eire',\n            title: 'Eire'\n        },\n        {\n            id: 'Etc/GMT',\n            title: 'Etc/GMT'\n        },\n        {\n            id: 'Etc/GMT+0',\n            title: 'Etc/GMT+0'\n        },\n        {\n            id: 'Etc/GMT+1',\n            title: 'Etc/GMT+1'\n        },\n        {\n            id: 'Etc/GMT+10',\n            title: 'Etc/GMT+10'\n        },\n        {\n            id: 'Etc/GMT+11',\n            title: 'Etc/GMT+11'\n        },\n        {\n            id: 'Etc/GMT+12',\n            title: 'Etc/GMT+12'\n        },\n        {\n            id: 'Etc/GMT+2',\n            title: 'Etc/GMT+2'\n        },\n        {\n            id: 'Etc/GMT+3',\n            title: 'Etc/GMT+3'\n        },\n        {\n            id: 'Etc/GMT+4',\n            title: 'Etc/GMT+4'\n        },\n        {\n            id: 'Etc/GMT+5',\n            title: 'Etc/GMT+5'\n        },\n        {\n            id: 'Etc/GMT+6',\n            title: 'Etc/GMT+6'\n        },\n        {\n            id: 'Etc/GMT+7',\n            title: 'Etc/GMT+7'\n        },\n        {\n            id: 'Etc/GMT+8',\n            title: 'Etc/GMT+8'\n        },\n        {\n            id: 'Etc/GMT+9',\n            title: 'Etc/GMT+9'\n        },\n        {\n            id: 'Etc/GMT-0',\n            title: 'Etc/GMT-0'\n        },\n        {\n            id: 'Etc/GMT-1',\n            title: 'Etc/GMT-1'\n        },\n        {\n            id: 'Etc/GMT-10',\n            title: 'Etc/GMT-10'\n        },\n        {\n            id: 'Etc/GMT-11',\n            title: 'Etc/GMT-11'\n        },\n        {\n            id: 'Etc/GMT-12',\n            title: 'Etc/GMT-12'\n        },\n        {\n            id: 'Etc/GMT-13',\n            title: 'Etc/GMT-13'\n        },\n        {\n            id: 'Etc/GMT-14',\n            title: 'Etc/GMT-14'\n        },\n        {\n            id: 'Etc/GMT-2',\n            title: 'Etc/GMT-2'\n        },\n        {\n            id: 'Etc/GMT-3',\n            title: 'Etc/GMT-3'\n        },\n        {\n            id: 'Etc/GMT-4',\n            title: 'Etc/GMT-4'\n        },\n        {\n            id: 'Etc/GMT-5',\n            title: 'Etc/GMT-5'\n        },\n        {\n            id: 'Etc/GMT-6',\n            title: 'Etc/GMT-6'\n        },\n        {\n            id: 'Etc/GMT-7',\n            title: 'Etc/GMT-7'\n        },\n        {\n            id: 'Etc/GMT-8',\n            title: 'Etc/GMT-8'\n        },\n        {\n            id: 'Etc/GMT-9',\n            title: 'Etc/GMT-9'\n        },\n        {\n            id: 'Etc/GMT0',\n            title: 'Etc/GMT0'\n        },\n        {\n            id: 'Etc/Greenwich',\n            title: 'Etc/Greenwich'\n        },\n        {\n            id: 'Etc/UCT',\n            title: 'Etc/UCT'\n        },\n        {\n            id: 'Etc/UTC',\n            title: 'Etc/UTC'\n        },\n        {\n            id: 'Etc/Universal',\n            title: 'Etc/Universal'\n        },\n        {\n            id: 'Etc/Zulu',\n            title: 'Etc/Zulu'\n        },\n        {\n            id: 'Europe/Amsterdam',\n            title: 'Europe/Amsterdam'\n        },\n        {\n            id: 'Europe/Andorra',\n            title: 'Europe/Andorra'\n        },\n        {\n            id: 'Europe/Astrakhan',\n            title: 'Europe/Astrakhan'\n        },\n        {\n            id: 'Europe/Athens',\n            title: 'Europe/Athens'\n        },\n        {\n            id: 'Europe/Belfast',\n            title: 'Europe/Belfast'\n        },\n        {\n            id: 'Europe/Belgrade',\n            title: 'Europe/Belgrade'\n        },\n        {\n            id: 'Europe/Berlin',\n            title: 'Europe/Berlin'\n        },\n        {\n            id: 'Europe/Bratislava',\n            title: 'Europe/Bratislava'\n        },\n        {\n            id: 'Europe/Brussels',\n            title: 'Europe/Brussels'\n        },\n        {\n            id: 'Europe/Bucharest',\n            title: 'Europe/Bucharest'\n        },\n        {\n            id: 'Europe/Budapest',\n            title: 'Europe/Budapest'\n        },\n        {\n            id: 'Europe/Busingen',\n            title: 'Europe/Busingen'\n        },\n        {\n            id: 'Europe/Chisinau',\n            title: 'Europe/Chisinau'\n        },\n        {\n            id: 'Europe/Copenhagen',\n            title: 'Europe/Copenhagen'\n        },\n        {\n            id: 'Europe/Dublin',\n            title: 'Europe/Dublin'\n        },\n        {\n            id: 'Europe/Gibraltar',\n            title: 'Europe/Gibraltar'\n        },\n        {\n            id: 'Europe/Guernsey',\n            title: 'Europe/Guernsey'\n        },\n        {\n            id: 'Europe/Helsinki',\n            title: 'Europe/Helsinki'\n        },\n        {\n            id: 'Europe/Isle_of_Man',\n            title: 'Europe/Isle_of_Man'\n        },\n        {\n            id: 'Europe/Istanbul',\n            title: 'Europe/Istanbul'\n        },\n        {\n            id: 'Europe/Jersey',\n            title: 'Europe/Jersey'\n        },\n        {\n            id: 'Europe/Kaliningrad',\n            title: 'Europe/Kaliningrad'\n        },\n        {\n            id: 'Europe/Kiev',\n            title: 'Europe/Kiev'\n        },\n        {\n            id: 'Europe/Kirov',\n            title: 'Europe/Kirov'\n        },\n        {\n            id: 'Europe/Lisbon',\n            title: 'Europe/Lisbon'\n        },\n        {\n            id: 'Europe/Ljubljana',\n            title: 'Europe/Ljubljana'\n        },\n        {\n            id: 'Europe/London',\n            title: 'Europe/London'\n        },\n        {\n            id: 'Europe/Luxembourg',\n            title: 'Europe/Luxembourg'\n        },\n        {\n            id: 'Europe/Madrid',\n            title: 'Europe/Madrid'\n        },\n        {\n            id: 'Europe/Malta',\n            title: 'Europe/Malta'\n        },\n        {\n            id: 'Europe/Mariehamn',\n            title: 'Europe/Mariehamn'\n        },\n        {\n            id: 'Europe/Minsk',\n            title: 'Europe/Minsk'\n        },\n        {\n            id: 'Europe/Monaco',\n            title: 'Europe/Monaco'\n        },\n        {\n            id: 'Europe/Moscow',\n            title: 'Europe/Moscow'\n        },\n        {\n            id: 'Europe/Nicosia',\n            title: 'Europe/Nicosia'\n        },\n        {\n            id: 'Europe/Oslo',\n            title: 'Europe/Oslo'\n        },\n        {\n            id: 'Europe/Paris',\n            title: 'Europe/Paris'\n        },\n        {\n            id: 'Europe/Podgorica',\n            title: 'Europe/Podgorica'\n        },\n        {\n            id: 'Europe/Prague',\n            title: 'Europe/Prague'\n        },\n        {\n            id: 'Europe/Riga',\n            title: 'Europe/Riga'\n        },\n        {\n            id: 'Europe/Rome',\n            title: 'Europe/Rome'\n        },\n        {\n            id: 'Europe/Samara',\n            title: 'Europe/Samara'\n        },\n        {\n            id: 'Europe/San_Marino',\n            title: 'Europe/San_Marino'\n        },\n        {\n            id: 'Europe/Sarajevo',\n            title: 'Europe/Sarajevo'\n        },\n        {\n            id: 'Europe/Saratov',\n            title: 'Europe/Saratov'\n        },\n        {\n            id: 'Europe/Simferopol',\n            title: 'Europe/Simferopol'\n        },\n        {\n            id: 'Europe/Skopje',\n            title: 'Europe/Skopje'\n        },\n        {\n            id: 'Europe/Sofia',\n            title: 'Europe/Sofia'\n        },\n        {\n            id: 'Europe/Stockholm',\n            title: 'Europe/Stockholm'\n        },\n        {\n            id: 'Europe/Tallinn',\n            title: 'Europe/Tallinn'\n        },\n        {\n            id: 'Europe/Tirane',\n            title: 'Europe/Tirane'\n        },\n        {\n            id: 'Europe/Tiraspol',\n            title: 'Europe/Tiraspol'\n        },\n        {\n            id: 'Europe/Ulyanovsk',\n            title: 'Europe/Ulyanovsk'\n        },\n        {\n            id: 'Europe/Uzhgorod',\n            title: 'Europe/Uzhgorod'\n        },\n        {\n            id: 'Europe/Vaduz',\n            title: 'Europe/Vaduz'\n        },\n        {\n            id: 'Europe/Vatican',\n            title: 'Europe/Vatican'\n        },\n        {\n            id: 'Europe/Vienna',\n            title: 'Europe/Vienna'\n        },\n        {\n            id: 'Europe/Vilnius',\n            title: 'Europe/Vilnius'\n        },\n        {\n            id: 'Europe/Volgograd',\n            title: 'Europe/Volgograd'\n        },\n        {\n            id: 'Europe/Warsaw',\n            title: 'Europe/Warsaw'\n        },\n        {\n            id: 'Europe/Zagreb',\n            title: 'Europe/Zagreb'\n        },\n        {\n            id: 'Europe/Zaporozhye',\n            title: 'Europe/Zaporozhye'\n        },\n        {\n            id: 'Europe/Zurich',\n            title: 'Europe/Zurich'\n        },\n        {\n            id: 'GB',\n            title: 'GB'\n        },\n        {\n            id: 'GB-Eire',\n            title: 'GB-Eire'\n        },\n        {\n            id: 'GMT',\n            title: 'GMT'\n        },\n        {\n            id: 'GMT+0',\n            title: 'GMT+0'\n        },\n        {\n            id: 'GMT-0',\n            title: 'GMT-0'\n        },\n        {\n            id: 'GMT0',\n            title: 'GMT0'\n        },\n        {\n            id: 'Greenwich',\n            title: 'Greenwich'\n        },\n        {\n            id: 'HST',\n            title: 'HST'\n        },\n        {\n            id: 'Hongkong',\n            title: 'Hongkong'\n        },\n        {\n            id: 'Iceland',\n            title: 'Iceland'\n        },\n        {\n            id: 'Indian/Antananarivo',\n            title: 'Indian/Antananarivo'\n        },\n        {\n            id: 'Indian/Chagos',\n            title: 'Indian/Chagos'\n        },\n        {\n            id: 'Indian/Christmas',\n            title: 'Indian/Christmas'\n        },\n        {\n            id: 'Indian/Cocos',\n            title: 'Indian/Cocos'\n        },\n        {\n            id: 'Indian/Comoro',\n            title: 'Indian/Comoro'\n        },\n        {\n            id: 'Indian/Kerguelen',\n            title: 'Indian/Kerguelen'\n        },\n        {\n            id: 'Indian/Mahe',\n            title: 'Indian/Mahe'\n        },\n        {\n            id: 'Indian/Maldives',\n            title: 'Indian/Maldives'\n        },\n        {\n            id: 'Indian/Mauritius',\n            title: 'Indian/Mauritius'\n        },\n        {\n            id: 'Indian/Mayotte',\n            title: 'Indian/Mayotte'\n        },\n        {\n            id: 'Indian/Reunion',\n            title: 'Indian/Reunion'\n        },\n        {\n            id: 'Iran',\n            title: 'Iran'\n        },\n        {\n            id: 'Israel',\n            title: 'Israel'\n        },\n        {\n            id: 'Jamaica',\n            title: 'Jamaica'\n        },\n        {\n            id: 'Japan',\n            title: 'Japan'\n        },\n        {\n            id: 'Kwajalein',\n            title: 'Kwajalein'\n        },\n        {\n            id: 'Libya',\n            title: 'Libya'\n        },\n        {\n            id: 'MET',\n            title: 'MET'\n        },\n        {\n            id: 'MST',\n            title: 'MST'\n        },\n        {\n            id: 'MST7MDT',\n            title: 'MST7MDT'\n        },\n        {\n            id: 'Mexico/BajaNorte',\n            title: 'Mexico/BajaNorte'\n        },\n        {\n            id: 'Mexico/BajaSur',\n            title: 'Mexico/BajaSur'\n        },\n        {\n            id: 'Mexico/General',\n            title: 'Mexico/General'\n        },\n        {\n            id: 'NZ',\n            title: 'NZ'\n        },\n        {\n            id: 'NZ-CHAT',\n            title: 'NZ-CHAT'\n        },\n        {\n            id: 'Navajo',\n            title: 'Navajo'\n        },\n        {\n            id: 'PRC',\n            title: 'PRC'\n        },\n        {\n            id: 'PST8PDT',\n            title: 'PST8PDT'\n        },\n        {\n            id: 'Pacific/Apia',\n            title: 'Pacific/Apia'\n        },\n        {\n            id: 'Pacific/Auckland',\n            title: 'Pacific/Auckland'\n        },\n        {\n            id: 'Pacific/Bougainville',\n            title: 'Pacific/Bougainville'\n        },\n        {\n            id: 'Pacific/Chatham',\n            title: 'Pacific/Chatham'\n        },\n        {\n            id: 'Pacific/Chuuk',\n            title: 'Pacific/Chuuk'\n        },\n        {\n            id: 'Pacific/Easter',\n            title: 'Pacific/Easter'\n        },\n        {\n            id: 'Pacific/Efate',\n            title: 'Pacific/Efate'\n        },\n        {\n            id: 'Pacific/Enderbury',\n            title: 'Pacific/Enderbury'\n        },\n        {\n            id: 'Pacific/Fakaofo',\n            title: 'Pacific/Fakaofo'\n        },\n        {\n            id: 'Pacific/Fiji',\n            title: 'Pacific/Fiji'\n        },\n        {\n            id: 'Pacific/Funafuti',\n            title: 'Pacific/Funafuti'\n        },\n        {\n            id: 'Pacific/Galapagos',\n            title: 'Pacific/Galapagos'\n        },\n        {\n            id: 'Pacific/Gambier',\n            title: 'Pacific/Gambier'\n        },\n        {\n            id: 'Pacific/Guadalcanal',\n            title: 'Pacific/Guadalcanal'\n        },\n        {\n            id: 'Pacific/Guam',\n            title: 'Pacific/Guam'\n        },\n        {\n            id: 'Pacific/Honolulu',\n            title: 'Pacific/Honolulu'\n        },\n        {\n            id: 'Pacific/Johnston',\n            title: 'Pacific/Johnston'\n        },\n        {\n            id: 'Pacific/Kiritimati',\n            title: 'Pacific/Kiritimati'\n        },\n        {\n            id: 'Pacific/Kosrae',\n            title: 'Pacific/Kosrae'\n        },\n        {\n            id: 'Pacific/Kwajalein',\n            title: 'Pacific/Kwajalein'\n        },\n        {\n            id: 'Pacific/Majuro',\n            title: 'Pacific/Majuro'\n        },\n        {\n            id: 'Pacific/Marquesas',\n            title: 'Pacific/Marquesas'\n        },\n        {\n            id: 'Pacific/Midway',\n            title: 'Pacific/Midway'\n        },\n        {\n            id: 'Pacific/Nauru',\n            title: 'Pacific/Nauru'\n        },\n        {\n            id: 'Pacific/Niue',\n            title: 'Pacific/Niue'\n        },\n        {\n            id: 'Pacific/Norfolk',\n            title: 'Pacific/Norfolk'\n        },\n        {\n            id: 'Pacific/Noumea',\n            title: 'Pacific/Noumea'\n        },\n        {\n            id: 'Pacific/Pago_Pago',\n            title: 'Pacific/Pago_Pago'\n        },\n        {\n            id: 'Pacific/Palau',\n            title: 'Pacific/Palau'\n        },\n        {\n            id: 'Pacific/Pitcairn',\n            title: 'Pacific/Pitcairn'\n        },\n        {\n            id: 'Pacific/Pohnpei',\n            title: 'Pacific/Pohnpei'\n        },\n        {\n            id: 'Pacific/Ponape',\n            title: 'Pacific/Ponape'\n        },\n        {\n            id: 'Pacific/Port_Moresby',\n            title: 'Pacific/Port_Moresby'\n        },\n        {\n            id: 'Pacific/Rarotonga',\n            title: 'Pacific/Rarotonga'\n        },\n        {\n            id: 'Pacific/Saipan',\n            title: 'Pacific/Saipan'\n        },\n        {\n            id: 'Pacific/Samoa',\n            title: 'Pacific/Samoa'\n        },\n        {\n            id: 'Pacific/Tahiti',\n            title: 'Pacific/Tahiti'\n        },\n        {\n            id: 'Pacific/Tarawa',\n            title: 'Pacific/Tarawa'\n        },\n        {\n            id: 'Pacific/Tongatapu',\n            title: 'Pacific/Tongatapu'\n        },\n        {\n            id: 'Pacific/Truk',\n            title: 'Pacific/Truk'\n        },\n        {\n            id: 'Pacific/Wake',\n            title: 'Pacific/Wake'\n        },\n        {\n            id: 'Pacific/Wallis',\n            title: 'Pacific/Wallis'\n        },\n        {\n            id: 'Pacific/Yap',\n            title: 'Pacific/Yap'\n        },\n        {\n            id: 'Poland',\n            title: 'Poland'\n        },\n        {\n            id: 'Portugal',\n            title: 'Portugal'\n        },\n        {\n            id: 'ROC',\n            title: 'ROC'\n        },\n        {\n            id: 'ROK',\n            title: 'ROK'\n        },\n        {\n            id: 'Singapore',\n            title: 'Singapore'\n        },\n        {\n            id: 'Turkey',\n            title: 'Turkey'\n        },\n        {\n            id: 'UCT',\n            title: 'UCT'\n        },\n        {\n            id: 'US/Alaska',\n            title: 'US/Alaska'\n        },\n        {\n            id: 'US/Aleutian',\n            title: 'US/Aleutian'\n        },\n        {\n            id: 'US/Arizona',\n            title: 'US/Arizona'\n        },\n        {\n            id: 'US/Central',\n            title: 'US/Central'\n        },\n        {\n            id: 'US/East-Indiana',\n            title: 'US/East-Indiana'\n        },\n        {\n            id: 'US/Eastern',\n            title: 'US/Eastern'\n        },\n        {\n            id: 'US/Hawaii',\n            title: 'US/Hawaii'\n        },\n        {\n            id: 'US/Indiana-Starke',\n            title: 'US/Indiana-Starke'\n        },\n        {\n            id: 'US/Michigan',\n            title: 'US/Michigan'\n        },\n        {\n            id: 'US/Mountain',\n            title: 'US/Mountain'\n        },\n        {\n            id: 'US/Pacific',\n            title: 'US/Pacific'\n        },\n        {\n            id: 'US/Pacific-New',\n            title: 'US/Pacific-New'\n        },\n        {\n            id: 'US/Samoa',\n            title: 'US/Samoa'\n        },\n        {\n            id: 'UTC',\n            title: 'UTC'\n        },\n        {\n            id: 'Universal',\n            title: 'Universal'\n        },\n        {\n            id: 'W-SU',\n            title: 'W-SU'\n        },\n        {\n            id: 'WET',\n            title: 'WET'\n        },\n        {\n            id: 'Zulu',\n            title: 'Zulu'\n        }\n    ],\n    getCurrentSMSAlertStatus: computed(function(){\n        if(this.isEnabledSMSAlerts){\n            return \"Active\"\n        }\n        else{\n            return \"Deactive\"\n        }\n    }),\n    getWarningMessage:computed(\"clearLogsConfirmationModalType\",function(){\n        return this.confirmMessage[this.get(\"clearLogsConfirmationModalType\")];\n    }),\n    clearLogs:async function(key){\n        this.set(\"loading\", true);\n        this.set(\"showStorageMessage\", false);\n        this.set(\"updateStorageMessage\", null);\n        let dataobj = {\n            \"key\": key\n        }\n        /**\n         * key is either all, log_viewer, user_logs\n         * dataobj = {\n            \"key\": key\n        }\n            */\n        const url = `${getApiBaseUrl()}/update/storage/`;\n    \n        let response = await this.api.fetch(url, {\n            method: \"POST\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n            body: JSON.stringify(dataobj)\n        });\n\n        let result = await response.json();\n        let message = result.message;\n        if (!response.ok) {\n            \n        }\n        else{\n            \n        }\n        this.set(\"showStorageMessage\", true);\n        this.set(\"updateStorageMessage\", `${message}`);\n        this.set(\"loading\", false);\n        setTimeout(() => {\n            this.set(\"showStorageMessage\", false);\n            this.set(\"updateStorageMessage\", null);\n        }, 10000);\n\n    },\n    testSMTPRecipientEmail:async function(value){\n        this.set(\"loading\", true);\n        this.set(\"testRecipientSMTPMessage\", null);\n        const url = `${getApiBaseUrl()}/api/admin/test-email/`;\n        let dataobj= {\n            recipient: value\n        }\n        let response = await this.api.fetch(url, {\n            method: \"POST\",\n            headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${localStorage.token}`\n            },\n            body: JSON.stringify(dataobj)\n        });\n\n        let result = await response.json();\n        let message = result.message;\n        this.set(\"testRecipientSMTPMessage\", message);\n        this.set(\"loading\", false);\n        setTimeout(() => {\n            this.set(\"testRecipientSMTPMessage\", null);\n        }, 4500);\n\n    },\n    close:function(){\n        this.set(\"clearLogsConfirmationModalType\", null);\n        this.set(\"isShowClearLogsConfirmationModal\", false);\n    },\n    confirm:async function(type){\n        await this.clearLogs(type);\n        this.set(\"isShowClearLogsConfirmationModal\", false);\n        this.set(\"clearLogsConfirmationModalType\", null);\n    },\n    actions: {\n\n        async testGoogleAuthCode(){\n            let comp = document.getElementById(\"smtp_recipient_tb\")\n            if(comp){\n                await this.testSMTPRecipientEmail(comp.value);\n                comp.value = null\n            }\n        },\n        activateDeactivateSMSAlerts(value){\n            this.set('loading', true);\n\n            let records = this.get('model').toArray();\n            let setting = records.find(\n                r => r.title === 'ENABLE_SMS_ALERTS'\n            );\n            if (!setting) {\n                console.error('ENABLE_SMS_ALERTS setting not found');\n                return;\n            }\n            setting.set('value', `${value}`);\n\n            setting.save().then(() => {\n                this.set('loading', false);\n                window.location.reload()\n            }).catch(error => {\n                this.set('loading', false);\n                console.error('Failed to update value ENABLE_SMS_ALERTS setting', error);\n            });\n        },\n        setClearLogsType(type){\n            this.set(\"clearLogsConfirmationModalType\", type);\n            this.set(\"isShowClearLogsConfirmationModal\", true);\n        },\n        navigateToLookups(){\n            this.set('loading', true);\n            this.router.transitionTo(\"list-lookups\");\n        },\n        updateDatetimeFormat(newValue){\n\n            // Find the project setting record\n            let records = this.get('model').toArray();\n            let setting = records.find(\n            r => r.title === 'GLOBAL_DATETIME_FORMAT'\n            );\n\n            if (!setting) {\n                console.error('GLOBAL_DATETIME_FORMAT setting not found');\n                return;\n            }\n\n            setting.set('value', newValue);\n            \n            this.set('loading', true);\n\n            setting.save().then(() => {\n                this.set('loading', false);\n            }).catch(error => {\n                this.set('loading', false);\n                console.error('Failed to update datetime format', error);\n            });\n        },\n        updateTimezone(newValue){\n\n\n            let records = this.get('model').toArray();\n            let setting = records.find(\n            r => r.title === 'TIME_ZONE'\n            );\n\n            if (!setting) {\n                console.error('TIME_ZONE setting not found');\n                return;\n            }\n\n\n            setting.set('value', newValue);\n            \n            this.set('loading', true);\n\n            setting.save().then(() => {\n                this.set('loading', false);\n            }).catch(error => {\n                this.set('loading', false);\n                console.error('Failed to update timezone format', error);\n            });\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default Component.extend({\n  userProfileService: service(),\n  init(){\n      this._super(...arguments);\n  },\n\n  actions: {\n    updateTab(value){\n        this.set(\"currentTab\", value)\n    }\n  }\n\n\n});\n","import { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    //this allows the check boxes to save after being clicked.\n    isChecked: computed('object', 'field', {\n        get(key) {\n            let instrument = this.get('object');\n            return instrument.get(this.get('field'));\n          },\n          set(key, value) {\n            let instrument = this.get('object');\n            instrument.set(this.get('field'), value);\n            //console.log(\"Value: \" + value);\n            return instrument.get(this.get('field'));\n          }\n        \n    }),\n    actions: {\n        //this allows the check boxes to save after being clicked.\n        change(object){\n            let _this = this;\n            //var origVal = _this.isChecked;\n            //console.log(\"SaveState::: \" + _this.isChecked);\n            //object.set(_this.get('field'), !_this.isChecked);\n            this.set('isChecked', !this.isChecked)\n            object.save().catch(function(reason) {\n\n                let editError = document.getElementById(\"instrumentEditError\");\n                editError.hidden = false;\n                object.set(_this.get('field'), _this.isChecked);\n\n                //Just need to make this line of code work -> change the checkbox to orignal value\n                //Active is properly set, just the front end needs to reflect the change back to original value\n                let field = document.getElementById(_this.get('field'));\n                field.checked = _this.isChecked;\n\n                window.scrollTo(0,0);\n            });\n            if(typeof this.update === \"function\"){\n                this.update();\n            }\n        }\n    },\n});\n","import { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nvar originVal;\nvar field;\n\nexport default Component.extend({\n    datetimeLabel:\"\",\n    init(){\n        this._super(...arguments);\n        this.set(\"datetimeLabel\", this.formattedField(this.object.get(this.field)));\n    },\n    editChanged: observer('isEditing', function() {\n        if (this.get('isEditing')==true) {\n            if(typeof this.editField === \"function\") {\n                this.editField();\n            }\n        } else {\n            if(typeof this.stopEditField === \"function\") {\n                this.stopEditField();\n            }\n        }\n    }),\n    formattedField:function(rawValue) {\n        let standardizedFormat = \"YYYY-MM-DD HH:mm:ss\";\n        let format = this.get(\"format\");\n        const parsedMoment = moment(rawValue, standardizedFormat, true);\n\n        return parsedMoment.isValid()\n            ? parsedMoment.format(format)  // Format for display\n            : '';\n    },\n    isEditing: false,\n    dateTimePicker: null,\n    showClear: false,\n    actions: {\n        edit(){\n            originVal = this.object.get(this.field)\n            this.set('isEditing', true);\n            let currentValue = this.object.get(this.field)\n            if(currentValue == null){\n                this.set('newValue', moment(new Date()).format('YYYY-MM-DDTHH:mm:ss'));            \n            }else {\n                this.set('newValue', moment(new Date(currentValue)).format('YYYY-MM-DDTHH:mm:ss'));            \n            }\n\n            return this.element.tabindex = 1, this.element.focus(); // brings the view into focus in order to capture keyUps.\n        },\n        save(object){\n            let value = this.get('newValue');\n            let newDate = moment(new Date(value)).format('YYYY-MM-DD HH:mm:ss');\n            if (newDate == \"Invalid date\")\n                newDate = null;\n            object.set(this.get('field'), newDate);\n\n            this.set(\"datetimeLabel\", this.formattedField(newDate));\n            field = this.get('field');\n            object.save().catch(function(reason) {\n      \n                let editError = document.getElementById(\"instrumentEditError\");\n                if(editError != null){\n                    editError.hidden = false;\n                }                \n                if (originVal == null) {\n                    originVal = \"\";\n                }\n                \n                object.set(field, originVal);\n\n                window.scrollTo(0,0);\n            });\n            this.set('isEditing', false);\n        },\n        cancel(){\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            this.set('isEditing', false);\n        }\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel', this.get('object'));\n        }\n        if (e.keyCode === 13) {\n            if (this.get('isTextarea') === true && e.ctrlKey === false) {\n                return;\n            }\n            this.send('save', this.get('object'));\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n  isEditing: false,\n  tagName: 'tr',\n  classNameBindings: ['isEditing:active-cell-values-inline-edit'], //, 'isZeroTimestampClass'],\n  isRowDeleteConfirmationDialog: {},\n  rdcd: {},\n  gatewayType: null,\n\n  setRDCD(value) {\n    let rdcd = this.get('isRowDeleteConfirmationDialog');\n    rdcd[value[0]] = value[1];\n    this.set('isRowDeleteConfirmationDialog', rdcd);\n    this.notifyPropertyChange('isRowDeleteConfirmationDialog');\n  },\n\n  valueOver: computed('gateway', function (self, value) {\n    //console.log(value);\n    return true;\n  }),\n\n  tableRowIndexString: computed('tableRowIndex', function () {\n    return String(this.get('tableRowIndex'));\n  }),\n\n  gatewayValueObjectValues: computed('gatewayValueObject', function () {\n    // console.log('gatewayValueObjectValues:::: ' + this.get('gatewayValueObject.values'));\n\n    let obj = this.get('gatewayValueObject.values');\n    let gatewayType = this.get('gatewayType').get('title');\n    return Object.assign({}, obj); // convert array to an object, to be able to get it's items by index in handlebars template\n  }),\n\n  // temperatureValuesObject: computed(\n  //   'temperatureValuesModel',\n  //   function () {\n  //     let temperatureValuesObject = this.get('temperatureValuesModel').objectAt(this.get('tableRowIndex'));\n  //     return temperatureValuesObject;\n  //   }\n  // ),\n\n  // temperatureObjectValue: computed('temperatureValuesObject', function () {\n  //   let temporaryTemperature = null;\n  //   try {\n  //     temporaryTemperature = this.get('temperatureValuesObject')\n  //       .get('values')[0]\n  //       .toFixed(2);\n  //     if (temporaryTemperature <= -999) {\n  //       temporaryTemperature = 'NaN';\n  //     }\n  //   } catch (e) {\n  //     temporaryTemperature = 'NaN';\n  //   }\n  //   console.log('temporaryTemperature:::::: ' + temporaryTemperature);\n      \n  //   return temporaryTemperature;\n  // }),\n\n  actions: {\n    edit() {\n      this.set('isEditing', true);\n      //this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n      //return this.$().attr({ tabindex: 1 }), this.$().focus(); // brings the view into focus in order to capture keyUps.\n    },\n    save() {\n      let _this = this;\n      // save gateway values\n      let obj = Object.values(this.get('gatewayValueObjectValues'));\n      gatewayValueObj = this.get('gatewayValueObject');\n\n      gatewayValueObj.set('values', obj); //set values property to gatewayValueObjectValues converted to array\n      this.get('gatewayValueObject')\n        .save({ adapterOptions: this.get('gatewayId') })\n        .then(function (results) {\n          let values = results._internalModel._record.get('values');\n          //values.shift();\n          results._internalModel._record.set('values', values);\n          _this\n            .get('temperatureValuesObject')\n            .set('values', [_this.get('temperatureObjectValue')]);\n          let gatewayTime = _this.get('temperatureValuesObject');\n          gatewayTime.save({ adapterOptions: _this.get('gatewayId') });\n        })\n        .catch(function (reason) {\n          console.log(reason);\n          if (reason.errors[0].status == 403) {\n            _this.setProp('permissionError', true);\n          }\n        });\n      // hide form\n      this.set('isEditing', false);\n      window.location.reload(); // Refresh the page to update the table\n    },\n    cancel() {\n      // reset displacementValueObjectValues and temperatureObjectValue to original values\n      //this.set('displacementValueObjectValues', Object.assign({}, this.get('displacementValueObject.values')) );\n      //this.set('temperatureObjectValue', this.get('temperatureValuesObject').get('values')[0]);\n\n      this.set('isEditing', false);\n      //this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n    },\n    remove() {\n      let _this = this;\n\n      let gatewayValuesModel = this.get('gatewayValuesModel');\n      let gatewayValueObject = this.get('gatewayValueObject');\n\n      // let temperatureValuesModel = this.get('temperatureValuesModel');\n      // let temperatureValuesObject = this.get('temperatureValuesObject');\n      // console.log('temperatureValuesObject:::: ' + temperatureValuesModel);\n\n      let badValues = [null, undefined, ''];\n      // if (!badValues.includes(temperatureValuesObject)) {\n        // if (!temperatureValuesObject.get('isDeleted')) {\n      //     temperatureValuesObject.deleteRecord();\n      //     temperatureValuesObject\n      //       .save({ adapterOptions: this.get('gatewayId') })\n      //       .then(function () {\n      //         temperatureValuesModel.removeObject(temperatureValuesObject);\n      //       });\n      //   }\n      // }\n\n      if (!gatewayValueObject.originalValue.get('isDeleted')) {\n        gatewayValueObject.originalValue.deleteRecord();\n        gatewayValueObject.originalValue\n          .save({ adapterOptions: this.get('gatewayId') })\n          .then(function () {\n            gatewayValuesModel.removeObject(gatewayValueObject.originalValue);\n          })\n          .catch(function (reason) {\n            if (reason.errors[0].status == 403) {\n              _this.setProp('permissionError', true);\n            }\n          });\n      }\n\n      // hide form\n      this.set('isEditing', false);\n      window.location.reload(); // Refresh the page to update the table\n    },\n    toggleRowDeleteConfirmationDialog(id) {\n      let list = this.get('isRowDeleteConfirmationDialog');\n      let value = list[id] ? false : true;\n      this.setRDCD([id, value]);\n      //this.set('isRowDeleteConfirmationDialog', list); //update isVisibleRowDetails variable for each single row\n      //this.notifyPropertyChange('isRowDeleteConfirmationDialog');\n    },\n  },\n  didRender() {\n    //this.$('.has-tooltip-info').tooltip(); //activate tooltips\n    //console.log(this.get('instrumentType').get('title'));\n  },\n  keyDown: function (e) {\n    if (e.keyCode === 27) {\n      this.send('cancel');\n    }\n    if (e.keyCode === 13) {\n      this.send('save', this.get('object'));\n    }\n  },\n});\n\n// function escape(myStr) {\n//     return myStr.replace('.', ',');\n// }\n","import { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nvar originEast;\nvar originNorth;\nvar originDepth;\n\nexport default Component.extend({\n    editChanged: observer('isEditing', function() {\n        if (this.get('isEditing')==true) {\n            if(typeof this.editField === \"function\") {\n                this.editField();\n            }\n        } else {\n            if(typeof this.stopEditField === \"function\") {\n                this.stopEditField();\n            }\n        }\n    }),\n    isEditing: false,\n    east: null,\n    north: null,\n    depth: null,\n    actions: {\n        edit(){\n            originEast = this.get('east');\n            originNorth = this.get('north');\n            originDepth = this.get('depth');\n            \n            this.set('isEditing', true);\n            this.set('newEast', this.get('east'));\n            this.set('newNorth', this.get('north'));\n            this.set('newDepth', this.get('depth'));\n            return this.element.tabindex = 1, this.element.focus(); // brings the view into focus in order to capture keyUps.\n        },\n        save(object){\n            // object.set(this.get('field'), this.get('geoPoint').toEwkt());\n            object.set('east', this.get('newEast'));\n            object.set('north', this.get('newNorth'));\n            object.set('depth', this.get('newDepth'));\n            \n            object.save().catch(function(reason) {\n      \n                let editError = document.getElementById(\"instrumentEditError\");\n                editError.hidden = false;\n                \n                if (originEast == undefined) {\n                    originEast = \"\";\n                }\n                if (originNorth == undefined) {\n                    originNorth = \"\";\n                }\n                if (originDepth == undefined) {\n                    originDepth = \"\";\n                }\n\n                object.set('east', originEast);\n                object.set('north', originNorth);\n                object.set('depth', originDepth);\n\n                window.scrollTo(0,0);\n            });\n            this.set('isEditing', false);\n        },\n        cancel(){\n            this.set('newEast', this.get('east'));\n            this.set('newNorth', this.get('north'));\n            this.set('newDepth', this.get('depth'));\n            this.set('isEditing', false);\n        }\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel', this.get('object'));\n        }\n        if (e.keyCode === 13) {\n            this.send('save', this.get('object'));\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\n\n\nexport default Component.extend({\n    isEditable: true,\n    isEditing: false,\n    isTextInput: computed('inputType', function() {\n        return this.get('inputType') === 'text';\n    }),\n    isTextarea: computed('inputType', function() {\n        return this.get('inputType') === 'textarea';\n    }),\n    actions: {\n        edit(){\n            \n            this.set('isEditing', true);\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            return this.element.tabindex = 1, this.element.focus(); // brings the view into focus in order to capture keyUps.\n        },\n        save(object){\n            object.set(this.get('field'), this.get('newValue'));\n            \n            object.save();\n            this.set('isEditing', false);\n        },\n        cancel(){\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            this.set('isEditing', false);\n        }\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel', this.get('object'));\n        }\n        if (e.keyCode === 13) {\n            if (this.get('isTextarea') === true && e.ctrlKey === false) {\n                return;\n            }\n            this.send('save', this.get('object'));\n        }\n    }\n});\n","import { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    editChanged: observer('isEditing', function() {\n        if (this.get('isEditing')==true) {\n            if(typeof this.editField === \"function\") {\n                this.editField();\n            }\n        } else {\n            if(typeof this.stopEditField === \"function\") {\n                this.stopEditField();\n            }\n        }\n    }),\n    isEditable: true,\n    isEditing: false,\n    isTextInput: computed('inputType', function() {\n        return this.get('inputType') === 'text';\n    }),\n    isTextarea: computed('inputType', function() {\n        return this.get('inputType') === 'textarea';\n    }),\n    actions: {\n        edit(){\n            this.set('isEditing', true);\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            return this.element.tabindex = 1, this.element.focus(); // brings the view into focus in order to capture keyUps.\n        },\n        save(object){\n\n            object.set(this.get('field'), parseFloat(this.get('newValue')));\n            object.save()\n            .then(() => {\n                if(typeof this.update === \"function\") {\n                    this.update();\n                }\n                this.set('isEditing', false);\n            });\n        },\n        cancel(){\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            this.set('isEditing', false);\n\n        }\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel', this.get('object'));\n        }\n        if (e.keyCode === 13) {\n            if (this.get('isTextarea') === true && e.ctrlKey === false) {\n                return;\n            }\n            this.send('save', this.get('object'));\n        }\n    }\n});\n","import { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nvar originVal;\nvar field;\n\nexport default Component.extend({\n    editChanged: observer('isEditing', function() {\n        if (this.get('isEditing')==true) {\n            if(typeof this.editField === \"function\") {\n                this.editField();\n            }\n        } else {\n            if(typeof this.stopEditField === \"function\") {\n                this.stopEditField();\n            }\n        }\n    }),\n    isEditable: true,\n    isEditing: false,\n    \n    isTextInput: computed('inputType', function() {\n        return this.get('inputType') === 'text';\n    }),\n    isTextarea: computed('inputType', function() {\n        return this.get('inputType') === 'textarea';\n    }),\n    actions: {\n        \n        edit(){\n            originVal = this.get(`object.${this.get('field')}`);\n            this.set('isEditing', true);\n            this.set('newValue', \"\");\n            return this.element.tabindex = 1, this.element.focus(); // brings the view into focus in order to capture keyUps.\n        },\n        save(object){\n            //console.log('here');\n            \n            object.set(this.get('field'), this.get('newValue'));\n\n            field = this.get('field');\n            \n            object.save().catch(function(reason) {\n      \n                let editError = document.getElementById(\"instrumentEditError\");\n                editError.hidden = false;\n                \n                if (originVal == undefined) {\n                    originVal = \"\";\n                }\n\n                object.set(field, originVal);\n\n                window.scrollTo(0,0);\n            });\n            this.set('isEditing', false);\n        },\n        cancel(){\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            this.set('isEditing', false);\n        }\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel', this.get('object'));\n        }\n        if (e.keyCode === 13) {\n            if (this.get('isTextarea') === true && e.ctrlKey === false) {\n                return;\n            }\n            this.send('save', this.get('object'));\n        }\n    }\n});\n","import { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nvar originVal;\nvar field;\n\nexport default Component.extend({\n    editChanged: observer('isEditing', function() {\n        if (this.get('isEditing')==true) {\n            if(typeof this.editField === \"function\") {\n                this.editField();\n            }\n        } else {\n            if(typeof this.stopEditField === \"function\") {\n                this.stopEditField();\n            }\n        }\n    }),\n    isEditable: true,\n    isEditing: false,\n    \n    isTextInput: computed('inputType', function() {\n        return this.get('inputType') === 'text';\n    }),\n    isTextarea: computed('inputType', function() {\n        return this.get('inputType') === 'textarea';\n    }),\n    actions: {\n        \n        edit(){\n            originVal = this.get(`object.${this.get('field')}`);\n            this.set('isEditing', true);\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            return this.element.tabindex = 1, this.element.focus(); // brings the view into focus in order to capture keyUps.\n        },\n        save(object){\n            console.log('in single save input, object is');\n            console.log(object);\n            object.set(this.get('field'), this.get('newValue'));\n\n            field = this.get('field');\n            \n            object.save().catch(function(reason) {\n      \n                let editError = document.getElementById(\"instrumentEditError\");\n                editError.hidden = false;\n                \n                if (originVal == undefined) {\n                    originVal = \"\";\n                }\n\n                object.set(field, originVal);\n\n                window.scrollTo(0,0);\n            });\n            this.set('isEditing', false);\n        },\n        cancel(){\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            this.set('isEditing', false);\n        }\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel', this.get('object'));\n        }\n        if (e.keyCode === 13) {\n            if (this.get('isTextarea') === true && e.ctrlKey === false) {\n                return;\n            }\n            this.send('save', this.get('object'));\n        }\n    }\n});\n","import { computed, set } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    isEditing: false,\n    tagName: 'tr',\n    classNameBindings: ['isEditing:active-cell-values-inline-edit', 'isZeroTimestampClass'],\n    isRowDeleteConfirmationDialog: {},\n    instrumentType: null,\n\n    valueOver: computed('instrument',function(self, value) {\n        //console.log(value);\n        return true;\n    }),\n\n    // isFine: computed('instrumentType', function() {\n    //     var isFine = false;\n    //     //console.log(this.get('instrumentType').get('title'));\n    //     switch(this.get('instrumentType').get('title')) {\n    //         case 'Tilt':\n    //             isFine=true;\n    //             break;\n    //         case 'BluVibe':\n    //             isFine=true;\n    //             break;\n    //         case 'Wire':\n    //             isFine=true;\n    //             break;\n    //     }\n    //     return isFine;\n    // }),\n\n    tableRowIndexString: computed('tableRowIndex', function() {\n        return String(this.get('tableRowIndex'));\n    }),\n\n    displacementValueObjectValues: computed('displacementValueObject', function() {\n        let obj = this.get('displacementValueObject.values');\n/*         let instType = this.get('instrumentType').get('title');\n        if (instType == \"Wire\") {\n            let chans = this.get('instrument').get('channelsNum');\n            if (obj.length >= chans) {\n                obj.shift();\n                this.set('displacementValueObject.values',obj);\n            }\n\n        } */\n        return Object.assign({}, obj); // convert array to an object, to be able to get it's items by index in handlebars template\n    }),\n\n    temperatureValuesObject: computed('temperatureValuesModel', function() {\n        return this.get('temperatureValuesModel').objectAt( this.get('tableRowIndex') );\n    }),\n\n    temperatureObjectValue: computed('temperatureValuesObject', function() {\n        let temporaryTemperature = null;\n        try{\n            temporaryTemperature = this.get('temperatureValuesObject').get('values')[0];\n        }\n        catch(e){\n            temporaryTemperature = 0;\n        }\n        return temporaryTemperature;\n\n    }),\n\n    \n    actions: {\n        edit() {\n            this.set('isEditing', true);\n            //this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n            //return this.$().attr({ tabindex: 1 }), this.$().focus(); // brings the view into focus in order to capture keyUps.\n        },\n        save() {\n            let _this = this;\n            // save displacement values\n            let obj = Object.values(this.get('displacementValueObjectValues'));\n\n            let instrumentType = this.instrumentType.get('title');\n\n            if(instrumentType === 'Wire' || instrumentType === 'Tilt' || instrumentType === 'BluVibe') {\n                obj.unshift(0);\n            }\n\n            //console.log(obj);\n            this.get('displacementValueObject').set('values', obj ); //set values property to displacementValueObjectValues converted to array\n            this.get('displacementValueObject').save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                let instType = _this.get('instrumentType').get('title');\n                if (instType === \"Wire\" || instType === 'Tilt' || instType === 'BluVibe') {\n                    // if displacement-value was successfully saved to DB, then display it\n                    //console.log(results._internalModel._record.get('values'));\n                    let values = results._internalModel._record.get('values');\n                    values.shift();\n                    results._internalModel._record.set('values', values);\n                }\n            });\n\n            // save temperature\n            this.get('temperatureValuesObject').set('values', [this.get('temperatureObjectValue')] );\n            this.get('temperatureValuesObject').save({adapterOptions: this.get('instrumentId')});\n\n            // hide form\n            this.set('isEditing', false);\n            //this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n        },\n        cancel() {\n            // reset displacementValueObjectValues and temperatureObjectValue to original values\n            //this.set('displacementValueObjectValues', Object.assign({}, this.get('displacementValueObject.values')) );\n            //this.set('temperatureObjectValue', this.get('temperatureValuesObject').get('values')[0]);\n\n            this.set('isEditing', false);\n            //this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n        },\n        remove(){\n            let displacementValueObject = this.get('displacementValueObject'),\n                temperatureValuesObject = this.get('temperatureValuesObject'),\n                displacementValuesModel = this.get('displacementValuesModel'),\n                temperatureValuesModel = this.get('temperatureValuesModel')\n            ;\n\n            temperatureValuesObject.deleteRecord();\n            temperatureValuesObject.get('isDeleted');\n            temperatureValuesObject.save({adapterOptions: this.get('instrumentId')}).then(function(){\n                // deal with records that just were created\n                // relates to the way I add new records to model https://github.com/emberjs/data/issues/3313\n                temperatureValuesModel.removeObject(temperatureValuesObject);\n            });\n\n            displacementValueObject.deleteRecord();\n            displacementValueObject.get('isDeleted');\n            displacementValueObject.save({adapterOptions: this.get('instrumentId')}).then(function(){\n                // deal with records that just were created\n                // relates to the way I add new records to model https://github.com/emberjs/data/issues/3313\n                displacementValuesModel.removeObject(displacementValueObject);\n            });\n        },\n        toggleRowDeleteConfirmationDialog(id){\n            let curVal = this.get('isRowDeleteConfirmationDialog')[id] ? false : true;\n            set(this.get('isRowDeleteConfirmationDialog'), id, curVal); //update isVisibleRowDetails variable for each single row\n        },\n    },\n    didRender(){\n        //this.$('.has-tooltip-info').tooltip(); //activate tooltips\n        //console.log(this.get('instrumentType').get('title'));\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel');\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport { getOwner } from '@ember/application';\n\nexport default Component.extend({\n    isEditing: false,\n    datetimeLabel: \"\",\n    init() {\n        this._super(...arguments);\n        this.set(\"datetimeLabel\", this.formattedField(this.temperatureValueObject.get(\"id\")));\n    },\n    tagName: 'tr',\n    classNameBindings: ['isEditing:active-cell-values-inline-edit'],\n    isRowDeleteConfirmationDialog: {},\n    loading: false,\n\n    setRDCD(value) {\n        let rdcd = this.get('isRowDeleteConfirmationDialog');\n        rdcd[value[0]] = value[1];\n        this.set('isRowDeleteConfirmationDialog', rdcd);\n        this.notifyPropertyChange('isRowDeleteConfirmationDialog');\n    },\n\n    formattedField(rawDate) {\n        const standardizedFormat = \"YYYY-MM-DD HH:mm:ss\";\n        const formatObj = this.get(\"format\");\n        const format = formatObj ? formatObj[\"value\"] : null;\n        const parsed = moment(rawDate, standardizedFormat, true);\n        if (!parsed.isValid()) { return ''; }\n        return format ? parsed.format(format) : parsed.format(standardizedFormat);\n    },\n\n    // Convert values array to object for template iteration and editing\n    temperatureValues: computed('temperatureValueObject', function() {\n        const vals = this.get('temperatureValueObject.values');\n        if (!vals) return {};\n        const obj = {};\n        for (let i = 0; i < vals.length; i++) {\n            obj[String(i)] = vals[i];\n        }\n        return obj;\n    }),\n\n    actions: {\n        edit() {\n            this.set('isEditing', true);\n        },\n        setNewTimestamp(event) {\n            this.set('_editedTimestamp', event.target.value);\n        },\n        save() {\n            this.set('loading', true);\n            this.set('isEditing', false);\n\n            const obj = Object.values(this.get('temperatureValues'));\n            const record = this.get('temperatureValueObject');\n            const newTs = this.get('_editedTimestamp');\n            const _this = this;\n            const store = this.get('temperatureValuesModel').store || record.store;\n            const instrumentId = this.get('instrumentId');\n\n            if (newTs) {\n                // Timestamp changed: delete old record, create new one\n                const formatted = moment(newTs).format('YYYY-MM-DD HH:mm:ss');\n                const temperatureValuesModel = this.get('temperatureValuesModel');\n\n                record.deleteRecord();\n                record.save({ adapterOptions: instrumentId }).then(function() {\n                    temperatureValuesModel.removeObject(record);\n\n                    const newRecord = store.createRecord('temperature-value', {\n                        id: formatted,\n                        values: obj\n                    });\n                    return newRecord.save({ adapterOptions: instrumentId });\n                }).then(function() {\n                    _this.set('_editedTimestamp', null);\n                    _this.set('loading', false);\n                    // Refresh the route to reload data\n                    window.location.reload();\n                }).catch(function(reason) {\n                    _this.set('loading', false);\n                    console.log(reason);\n                });\n            } else {\n                // Only values changed, same timestamp\n                record.set('values', obj);\n                record.save({ adapterOptions: instrumentId })\n                    .then(function() {\n                        _this.set('loading', false);\n                        const router = getOwner(_this).lookup('service:router');\n                        window.location.reload();\n                    })\n                    .catch(function(reason) {\n                        _this.set('loading', false);\n                        console.log(reason);\n                    });\n            }\n\n            this.set('isEditing', false);\n        },\n        cancel() {\n            this.set('loading', false);\n            this.set('isEditing', false);\n        },\n        remove() {\n            const _this = this;\n            this.set('loading', true);\n            const temperatureValueObject = this.get('temperatureValueObject');\n            const temperatureValuesModel = this.get('temperatureValuesModel');\n\n            try {\n                temperatureValueObject.deleteRecord();\n                temperatureValueObject.get('isDeleted');\n                temperatureValueObject.save({ adapterOptions: this.get('instrumentId') }).then(function() {\n                    temperatureValuesModel.removeObject(temperatureValueObject);\n                }).catch(function(reason) {\n                    _this.set('loading', false);\n                    console.log(\"Reason::: \" + reason);\n                });\n            } catch (e) {\n                this.set('loading', false);\n                console.log(\"Deleting Temperature::: \" + e);\n            }\n\n            this.set('loading', false);\n        },\n        toggleRowDeleteConfirmationDialog(id) {\n            let list = this.get('isRowDeleteConfirmationDialog');\n            let value = list[id] ? false : true;\n            this.setRDCD([id, value]);\n        },\n    },\n    keyDown(e) {\n        if (e.keyCode === 27) { this.send('cancel'); }\n        if (e.keyCode === 13) { this.send('save'); }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport { getOwner } from '@ember/application';\n\nexport default Component.extend({\n    isEditing: false,\n    datetimeLabel:\"\",\n    init(){\n        this._super(...arguments);\n        this.set(\"datetimeLabel\", this.formattedField(this.displacementValueObject.get(\"id\")));\n    },\n    tagName: 'tr',\n    classNameBindings: ['isEditing:active-cell-values-inline-edit', 'isZeroTimestampClass'],\n    isRowDeleteConfirmationDialog: {},\n    rdcd: {},\n    instrumentType: null,\n    loading: false,\n    setRDCD(value) {\n        let rdcd = this.get('isRowDeleteConfirmationDialog');\n        rdcd[value[0]] = value[1];\n        this.set('isRowDeleteConfirmationDialog', rdcd);\n        this.notifyPropertyChange('isRowDeleteConfirmationDialog');\n    },\n\n    formattedField:function(rawDate) {\n        const standardizedFormat = \"YYYY-MM-DD HH:mm:ss\";\n        const formatObj = this.get(\"format\");\n        const format = formatObj ? formatObj[\"value\"] : null;\n        let formattedValue = \"\";\n\n        // Step 1: Parse the raw date using standardized format (backend default)\n        const parsed = moment(rawDate, standardizedFormat, true);\n\n        if (!parsed.isValid()) {\n            return '';  // Return empty string if invalid\n        }\n\n        // Step 2: Format to target format, or fallback\n        formattedValue = format ? parsed.format(format) : parsed.format(standardizedFormat);\n\n        return formattedValue;\n    },\n    valueOver: computed('instrument',function(self, value) {\n        //console.log(value);\n        return true;\n    }),\n\n    tableRowIndexString: computed('tableRowIndex', function() {\n        return String(this.get('tableRowIndex'));\n    }),\n\n    displacementValueObjectValues: computed('displacementValueObject', function() {\n        let arr = this.get('displacementValueObject.values');\n        // Convert tracked Ember Data array to a plain object for each-in in Ember 5\n        // (Ember Data tracked arrays cause \"Got N, expected: Reference\" errors with each-in)\n        // Use Object.assign to preserve numeric keys for is-equal comparisons in isFine mode\n        if (!arr) return {};\n        return Object.assign({}, arr);\n    }),\n\n    temperatureValuesObject: computed('temperatureValuesModel', function() {\n        return this.get('temperatureValuesModel').objectAt( this.get('tableRowIndex') );\n    }),\n\n    temperatureObjectValue: computed('temperatureValuesObject', '_editedTemperatureValue', function() {\n        // If user has edited the temperature, return the edited value\n        const edited = this.get('_editedTemperatureValue');\n        if (edited !== undefined && edited !== null) return edited;\n\n        let temporaryTemperature = null;\n        let tempObject = this.get('temperatureValuesObject');\n        let vals = null;\n\n        try{\n            vals = tempObject.get('values');\n            temporaryTemperature = vals[0].toFixed(1);\n        }\n        catch(e){\n            temporaryTemperature = null;\n            console.log(e);\n        }\n        return temporaryTemperature;\n\n    }),\n    isCheckedHelper: computed(\"batchSelectedRows\", function() {\n        let batchSelectedRowsObj = this.get(\"batchSelectedRows\");\n        let index = this.get(\"tableRowIndex\");\n        // console.log(\"in isCheckedHelper, batch length is: \" + this.get(\"batchSelectedRows\").length +\" tableRowIndex: \" + this.get(\"tableRowIndex\") );\n        if(batchSelectedRowsObj && batchSelectedRowsObj[index]){\n            return true;\n        }else{\n            return false;\n        } \n      }),\n      convertMMToAdictBits: function(arrayMMs){\n          let bitsArray = [];\n          arrayMMs.forEach((mmValue)=>{\n              bitsArray.push(parseFloat((mmValue / parseFloat(this.get('strokeLength')) ) * 65536))\n          });\n          return bitsArray;\n      },\n    actions: {\n        setNewTimestampValue(event) {\n            this.set('_editedTimestamp', event.target.value);\n        },\n        setDisplacementValue(key, event) {\n            let vals = this.get('displacementValueObjectValues');\n            vals[key] = event.target.value;\n        },\n        setTemperatureValue(event) {\n            this.set('_editedTemperatureValue', event.target.value);\n        },\n        toggleIndivSwitch(value) {\n            let batchSelectedRowsObj = this.get(\"batchSelectedRows\");\n            if(batchSelectedRowsObj){\n                batchSelectedRowsObj[value] = document.getElementById('batchSwitchID').checked;\n                // this.set('isMaxBatch',document.getElementById('batchSwitchID').checked);\n                // console.log( \"ID: \" + value + \"-\" + document.getElementById('batchSwitchID').checked);\n                this.set(\"batchSelectedRows\", batchSelectedRowsObj);\n            }\n        },\n        edit() {\n            this.set('isEditing', true);\n            //this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n            //return this.$().attr({ tabindex: 1 }), this.$().focus(); // brings the view into focus in order to capture keyUps.\n        },\n        save() {\n            let _this = this;\n            this.set('loading', true);\n            this.set('isEditing', false);\n\n            const newTs = this.get('_editedTimestamp');\n            const instrumentId = this.get('instrumentId');\n\n            // save displacement values\n            let obj = Object.values(this.get('displacementValueObjectValues'));\n\n            let instrumentType = this.instrumentType.get('title');\n\n            if(instrumentType == 'Wire' || instrumentType === 'Tilt' || instrumentType === 'BluVibe' || instrumentType === 'Piezo') {\n                obj.unshift(0);\n            }\n            let oldObj = obj;\n            if(instrumentType == 'Adict'){\n                obj = this.convertMMToAdictBits(obj);\n            }\n\n            if (newTs) {\n                // Timestamp changed: delete old records and create new ones\n                const formatted = moment(newTs).format('YYYY-MM-DD HH:mm:ss');\n                const displacementRecord = this.get('displacementValueObject');\n                const temperatureRecord = this.get('temperatureValuesObject');\n                const displacementValuesModel = this.get('displacementValuesModel');\n                const temperatureValuesModel = this.get('temperatureValuesModel');\n                const store = displacementRecord.store;\n                const tempVal = this.get('temperatureObjectValue');\n\n                // Delete old records, then create new ones\n                Promise.all([\n                    displacementRecord.deleteRecord() || displacementRecord.save({ adapterOptions: instrumentId }),\n                    temperatureRecord ? (temperatureRecord.deleteRecord() || temperatureRecord.save({ adapterOptions: instrumentId })) : Promise.resolve()\n                ]).then(function() {\n                    displacementValuesModel.removeObject(displacementRecord);\n                    if (temperatureRecord) temperatureValuesModel.removeObject(temperatureRecord);\n\n                    const newDisp = store.createRecord('displacement-value', { id: formatted, values: obj });\n                    const newTemp = store.createRecord('temperature-value', { id: formatted, values: [tempVal] });\n\n                    return Promise.all([\n                        newDisp.save({ adapterOptions: instrumentId }),\n                        newTemp.save({ adapterOptions: instrumentId })\n                    ]);\n                }).then(function() {\n                    _this.set('_editedTimestamp', null);\n                    _this.set('loading', false);\n                    window.location.reload();\n                }).catch(function(reason) {\n                    _this.set('loading', false);\n                    console.log(reason);\n                });\n            } else {\n                // Same timestamp: save values in place\n                this.get('displacementValueObject').set('values', obj);\n                this.get('displacementValueObject').save({adapterOptions: instrumentId}).then(function(results){\n                    let instType = instrumentType;\n                    if (instType == 'Wire' || instType === 'Tilt' || instType === 'BluVibe' || instrumentType === 'Piezo') {\n                        let values = results._internalModel._record.get('values');\n                        values.shift();\n                        results._internalModel._record.set('values', values);\n                    }\n                    // save temperature\n                    _this.get('temperatureValuesObject').set('values', [_this.get('temperatureObjectValue')] );\n                    return _this.get('temperatureValuesObject').save({adapterOptions: instrumentId});\n                }).then(function() {\n                    _this.set('loading', false);\n                    window.location.reload();\n                })\n                .catch(function(reason) {\n                    _this.set('loading', false);\n                    console.log(reason);\n                    if (reason.errors && reason.errors[0] && reason.errors[0].status == 403) {\n                        _this.setProp('permissionError', true);\n                    }\n                });\n                if(instrumentType == 'Adict'){\n                    this.get('displacementValueObject').set('values', oldObj );\n                }\n            }\n\n            // hide form\n            this.set('_editedTimestamp', null);\n            this.set('loading', false);\n            this.set('isEditing', false);\n            //this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n        },\n        cancel() {\n            this.set('_editedTemperatureValue', null);\n            this.set('_editedTimestamp', null);\n            this.set('loading', false);\n            this.set('isEditing', false);\n        },\n        remove(){\n            \n            let _this = this;\n            this.set('loading', true);\n            let displacementValueObject = this.get('displacementValueObject');\n            let temperatureValuesObject = this.get('temperatureValuesObject');\n            \n            let displacementValuesModel = this.get('displacementValuesModel');\n            let temperatureValuesModel = this.get('temperatureValuesModel');\n            ;\n            try{\n                temperatureValuesObject.deleteRecord();\n                temperatureValuesObject.get('isDeleted');\n                temperatureValuesObject.save({adapterOptions: this.get('instrumentId')}).then(function(){\n                    // deal with records that just were created\n                    // relates to the way I add new records to model https://github.com/emberjs/data/issues/3313\n                    temperatureValuesModel.removeObject(temperatureValuesObject);\n                })\n                .catch(function(reason){\n                    this.set('loading', false);\n                    console.log(\"Reason::: \" + reason);\n                });\n            } catch(e) {\n                this.set('loading', false);\n                console.log(\"Deleting Temperature::: \" + e);\n            }\n\n            try{\n                displacementValueObject.deleteRecord();\n                displacementValueObject.get('isDeleted');\n                displacementValueObject.save({adapterOptions: this.get('instrumentId')}).then(function(){\n                    // deal with records that just were created\n                    // relates to the way I add new records to model https://github.com/emberjs/data/issues/3313\n                    displacementValuesModel.removeObject(displacementValueObject);\n                })\n                .catch(function(reason){\n                    this.set('loading', false);\n                    if (reason.errors[0].status == 403) {\n                        _this.setProp('permissionError', true);\n                    }\n                });\n            } catch(e) {\n                this.set('loading', false);\n                console.log(\"Deleting Displacement::: \" + e);\n            }\n            \n            this.set('loading', false);\n        },\n        toggleRowDeleteConfirmationDialog(id){\n            let list = this.get('isRowDeleteConfirmationDialog');\n            let value = list[id] ? false : true;\n            this.setRDCD([id,value]);\n            //this.set('isRowDeleteConfirmationDialog', list); //update isVisibleRowDetails variable for each single row\n            //this.notifyPropertyChange('isRowDeleteConfirmationDialog');\n        },\n    },\n    didRender(){\n        //this.$('.has-tooltip-info').tooltip(); //activate tooltips\n        //console.log(this.get('instrumentType').get('title'));\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel');\n        }\n        if (e.keyCode === 13) {\n            this.send('save', this.get('object'));\n        }\n    }\n});\n\n\n// function escape(myStr) {\n//     return myStr.replace('.', ',');\n// }","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport { check } from 'prettier';\nimport { htmlSafe } from '@ember/template';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n    editChanged: observer('isEditing', function() {\n        if (this.get('isEditing')==true) {\n            if(typeof this.editField === \"function\") {\n                this.editField();\n            }\n        } else {\n            if(typeof this.stopEditField === \"function\") {\n                this.stopEditField();\n            }\n        }\n        //console.log(\"editing: \" + this.get('isEditing'));\n    }),\n    isEditing: false,\n    store: service(),\n    channelsNum: 0,\n    isToe: computed('headAt', function() {\n        return this.get('headAt') === 'HAT';\n    }),\n    isCollar: computed('headAt', function() {\n        return this.get('headAt') === 'HAC';\n    }),\n    anchorsAmount: computed('object', function() {\n        return this.get('object').length;\n    }),\n    isAllAnchorsPopulated: computed('object', 'anchorsAmount', function() {            \n        let allPopulated = true;\n        let objectLength = this.get('object').map(function(obj){\n            //console.log(\"ObjectLenth: \" + JSON.stringify(obj));\n            return obj.get('distance') !== '' && obj.get('distance') !== null;\n        });\n        //console.log(\"ObjectLenth: \" + objectLength);\n        if (objectLength.indexOf(false) > -1) {\n            allPopulated = false;\n        } else {\n            allPopulated = true;\n        }\n        return allPopulated;\n    }),\n   \n    // sort anchors depending on head position\n    sortProperties: computed('isToe', function() {\n        if (this.get('isToe')) {\n            return ['number:asc'];\n        }\n        return ['number:desc'];\n    }),\n    sortedInstrumentAnchors: sort('anchors', 'sortProperties'),\n\n    listedAnchors: computed(function() {\n        let object = this.get('object');\n        let newSet = [];\n        let anchorCount = this.get('anchorsAmount');\n        if(this.get('stacked')) {\n            object.forEach(function(obj){\n                if(obj.get('number') > 0) {\n                    let anchor = (obj.get('number')-1) % ((anchorCount-1) / 2);\n                    var hash={};\n                    if(obj.get('number')-1 < (anchorCount-1) / 2) {\n                        hash={'number-a':\" - \" + (anchor + 1),'distance-a': obj.get('distance')};\n                        newSet.push(hash);\n                    } else {\n                        hash=newSet.shift();\n                        hash['number-b'] = anchor + 1 + ((anchorCount-1)/2) + \" - \";\n                        hash['distance-b'] = obj.get('distance');\n                        newSet.push(hash);\n                    }\n                }\n            });   \n        } else {\n            object.forEach(function(obj){\n                if(obj.get('number') > 0) {\n                    let anchor = (obj.get('number')-1) % ((anchorCount-1) / 2);\n                    var hash={};\n                    if(obj.get('number')-1 < (anchorCount-1) / 2) {\n                        hash={'number-a':\" - \" + (anchor + 1),'distance-a':obj.get('distance')};\n                        newSet.push(hash);\n                    } else {\n                        let temp=newSet.shift();\n                        hash={'number-b': (anchor + 1 + ((anchorCount-1)/2)) + \" - \",'distance-b':obj.get('distance')};\n                        newSet.push(temp);\n                        newSet.push(hash);\n                    }\n                }\n            });   \n            \n        }\n        //console.log(\"Anchors: \" + JSON.stringify(newSet.reverse()));\n        return newSet.reverse();\n    }),\n\n    // Binding Style Attributes to prevent console warning\n    // https://emberjs.com/deprecations/v1.x/#toc_binding-style-attributes.\n    anchorsCSSCounteStyle: computed('isToe', 'anchorsAmount', function() {\n        let anchorsCSSCounteStyle = this.get('isToe') ? -1 : this.get('anchorsAmount');\n        return htmlSafe(\"counter-reset: anchorNumber \" + anchorsCSSCounteStyle);\n    }),\n\n    actions: {\n        updateAnchorsCounter(object){\n            let j = 0;\n            object.forEach(function(obj){\n                if (!obj.get('isDeleted')) {\n                    j++;\n                }\n            });\n            this.set('anchorsAmount', j);\n        },\n        edit(){\n                this.set('isEditing', true);\n                this.set('newValue', this.get(`object.${this.get('field')}`));\n                return this.element.tabindex = 1, this.element.focus(); // brings the view into focus in order to capture keyUps.\n\n            /* this.set('isEditing', true);\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n            return this.$().attr({ tabindex: 1 }), this.$().focus(); // brings the view into focus in order to capture keyUps. */\n        },\n        inputNewValue(currentAnchor, anchorKey, anchorValue) {\n            var anchKeyPart = anchorKey.substring(anchorKey.length - 1); // => \"1\"\n            var currentAnchorNumber = currentAnchor['number-'+anchKeyPart].replace('-','').trim();\n\n            //this little bit of hackery is because we move the anchors into a new array\n            //in order to arrange them in the form of A -> 1,2,3  and B ->1,2,3  \n            //this is due to the fact that the rebar takes measurements along each side and \n            //together the measurements are used to find the total tension and compression.\n            this.get('object').map(function(obj){\n                //get anchor number and see if it's the same as the temp anchor number\n                if(obj.get('number') == currentAnchorNumber){\n                    obj.set('distance', anchorValue);\n                    //console.log(\"after set: \" + obj.get('distance'));\n                }\n                    \n            });\n            //need to do this after moving the new value from the temp array to the actual anchor array.\n            //that new value is needed n notifyPropertyChange\n            this.notifyPropertyChange('anchorsAmount'); // trigger property change to notify 'isAllAnchorsPopulated' computed property to be recalculated when updating anchors inputs\n            \n            currentAnchor[anchorKey] = anchorValue; //.set(whichAnchor, newValue);\n                        \n        },\n        prePopulateAnchors() {\n            let object = this.get('object'),\n                anchorsArray = [],\n                emptyAnchorsAmount = this.get('channelsNum') - this.get('anchorsAmount')\n            ;            \n            if ( emptyAnchorsAmount > 0 ) {\n                for (var i = emptyAnchorsAmount - 1; i >= 0; i--) {\n                    let newAnchor = this.get('store').createRecord('anchor', {\n                        number: i,\n                        distance: ''\n                    });\n                    anchorsArray.push(newAnchor);\n                }\n            }\n            if (anchorsArray.length) {\n                anchorsArray.forEach(function(a) { object.pushObject(a); });\n                this.send('updateAnchorsCounter', object);\n            }\n\n            // Afterthought to fix broken anchor ordering in database. Proabbaly could be removed at some point when there won't be anymore anchors with empty number value.\n            let isAnchorNumbersCorrupted = -1;\n            object.forEach(function(obj){\n                if (obj.get('number') === 0) {\n                    isAnchorNumbersCorrupted++;\n                }\n            });\n            if (isAnchorNumbersCorrupted) {\n                object.forEach(function(obj, i){\n                    obj.set('number', i);\n                });\n            }\n\n        },\n        save(object){\n            //console.log(JSON.stringify(\"object: \" + object));\n\n            for (let i = object.length; i >= 0; i--) {\n                let currentObject = object.objectAt(i);\n                //console.log(JSON.stringify(currentObject));\n                if (typeof currentObject !== 'undefined' && currentObject.get('hasDirtyAttributes')) {\n                    currentObject.save();\n                    //console.log(\"anchor count: \" + i);\n                }\n            }\n            this.set('isEditing', false);\n        },\n\n        // save(object){\n        //     object.save();\n        //     this.set('isEditing', false);\n        //     this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n        // },\n        cancel(object){\n            // rollback all unsaved items\n            for (let i = object.length; i >= 0; i--) {\n                let currentObject = object.objectAt(i);\n                if (typeof currentObject !== 'undefined') {\n                    currentObject.rollbackAttributes();\n                }\n            }\n            this.send('updateAnchorsCounter', this.get('object'));\n            this.notifyPropertyChange('anchorsAmount');\n            this.set('isEditing', false);\n        }\n    },\n    didRender(){\n        this.send('prePopulateAnchors');\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel', this.get('object'));\n        }\n        if (e.keyCode === 13) {\n            if (this.isAllAnchorsPopulated===true) {\n                this.send('save', this.get('object'));\n            }\n        }\n    },\n    // isValidateStacked: computed('object','anchorsAmount', function() {\n    //     let validatedStack = true;\n    //     console.log(\"isStacked: \" + this.get('isStacked'));\n    //     let uniqueArray = [];\n    //     let anchorArray = [];\n        \n    //     this.get('object').map(function(obj){\n    //         if( !isNaN(obj.get('distance')) ) {\n    //             anchorArray.push(parseInt(obj.get('distance')));\n    //         } else {\n    //             anchorArray.push(obj.get('distance'));\n    //         }\n    //     });\n    //     uniqueArray = anchorArray.filter(function(item, pos, self) {\n    //         return self.indexOf(item) == pos;\n    //     });\n\n    //     if( this.get('isStacked') ){            \n    //         if(uniqueArray.length != 4 && this.get('isAllAnchorsPopulated')){\n    //             validatedStack = false;\n    //         }      \n    //     }                  \n    //     console.log(\"Validated Stacked:\" + validatedStack)\n    //     return validatedStack;        \n    // }),\n    // isValidatedStaggered: computed('object','anchorsAmount', function() {\n    //     let validatedStaggered = true;\n    //     console.log(\"isStacked: \" + this.get('isStacked'));\n    //     let uniqueArray = [];\n    //     let anchorArray = [];\n        \n    //     this.get('object').map(function(obj){\n    //         try{\n    //             anchorArray.push(parseInt(obj.get('distance')));\n    //         } catch (error){\n    //             console.log(error);\n    //         }\n    //     });\n    //     uniqueArray = anchorArray.filter(function(item, pos, self) {\n    //         return self.indexOf(item) == pos;\n    //     });\n\n    //     if( !this.get('isStacked') ){            \n    //         if(uniqueArray.length<7 && this.get('isAllAnchorsPopulated')){\n    //             validatedStaggered = false;\n    //         }\n    //     }\n    //     console.log(\"Validated Staggered:\" + validatedStaggered)\n    //     return validatedStaggered;        \n    // }),\n\n});","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport { htmlSafe } from '@ember/template';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    editChanged: observer('isEditing', function() {\n        if (this.get('isEditing')==true) {\n            if(typeof this.editField === \"function\") {\n                this.editField();\n            }\n        } else {\n            if(typeof this.stopEditField === \"function\") {\n                this.stopEditField();\n            }\n        }\n    }),\n\n    isEditing: false,\n    store: service(),\n    channelsNum: 0,\n    instrument: null,\n    isToe: computed('headAt', function() {\n        return this.get('headAt') === 'HAT';\n    }),\n    isCollar: computed('headAt', function() {\n        return this.get('headAt') === 'HAC';\n    }),\n    anchorsAmount: computed('object.[]', {\n        get() {\n            if (this._anchorCount) {\n                return this._anchorCount;\n            }\n            return this.get('object.length') || 0;\n        },\n\n        set(key, value) {\n            return this._anchorCount = value;\n        }\n    }),\n    isAllAnchorsPopulated: computed('object.[]', 'anchorsAmount', function() {\n        const object = this.get('object');\n        if (!object || typeof object.map !== 'function') { return false; }\n        let objectLength = object.map(function(obj){\n            return obj.get('distance') !== '' && obj.get('distance') !== null;\n        });\n        if (objectLength.indexOf(false) > -1) {\n            return false;\n        } else {\n            return true;\n        }\n    }),\n\n    // sort anchors depending on head position\n    sortProperties: computed('isToe', function() {\n        if (this.get('isToe')) {\n            return ['number:asc'];\n        }\n        return ['number:desc'];\n    }),\n    sortedInstrumentAnchors: sort('object', 'sortProperties'),\n\n    // Binding Style Attributes to prevent console warning\n    // https://emberjs.com/deprecations/v1.x/#toc_binding-style-attributes.\n    anchorsCSSCounteStyle: computed('isToe', 'anchorsAmount', function() {\n        let anchorsCSSCounteStyle = this.get('isToe') ? -1 : this.get('anchorsAmount');\n        return htmlSafe(\"counter-reset: anchorNumber \" + anchorsCSSCounteStyle);\n    }),\n\n    actions: {\n        updateAnchorsCounter(object){\n            let j = 0;\n            object.forEach(function(obj){\n                if (!obj.get('isDeleted')) {\n                    j++;\n                }\n            });\n            this.set('anchorsAmount', j);\n        },\n        edit(){\n            this.set('isEditing', true);\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            return this.element.tabindex = 1, this.element.focus(); // brings the view into focus in order to capture keyUps.\n        },\n        inputNewValue(currentAnchor, newValue) {\n            this.notifyPropertyChange('anchorsAmount'); // trigger property change to notify 'isAllAnchorsPopulated' computed property to be recalculated when updating anchors inputs\n            currentAnchor.set('distance', newValue);\n        },\n        prePopulateAnchors() {\n            let object = this.get('object');\n            let instrument = this.get('instrument');\n            let emptyAnchorsAmount = this.get('channelsNum') - this.get('anchorsAmount');\n\n            if ( emptyAnchorsAmount != null && emptyAnchorsAmount > 0 ) {\n                for (var i = emptyAnchorsAmount - 1; i >= 0; i--) {\n                    this.get('store').createRecord('anchor', {\n                        number: i,\n                        distance: '',\n                        instrument: instrument\n                    });\n                }\n                this.send('updateAnchorsCounter', object);\n            }\n        },\n        save(object){\n            for (let i = object.length; i >= 0; i--) {\n                let currentObject = object[i];\n                if (typeof currentObject !== 'undefined' && currentObject.get('hasDirtyAttributes')) {\n                    currentObject.save()\n                }\n            }\n            this.set('isEditing', false);\n        },\n        cancel(){\n            let object = this.get('object');\n            // rollback all unsaved items\n            for (let i = object.length; i >= 0; i--) {\n                let currentObject = object[i];\n                if (typeof currentObject !== 'undefined') {\n                    currentObject.rollbackAttributes();\n                }\n            }\n\n            this.send('updateAnchorsCounter', this.get('object'));\n            this.notifyPropertyChange('anchorsAmount');\n            this.set('isEditing', false);\n        }\n    },\n    didRender(){\n        this.send('prePopulateAnchors');\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel');\n        }\n        if (e.keyCode === 13) {\n            if (this.get('isAllAnchorsPopulated')===true) {\n                this.send('save', this.get('object'));\n            }\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n});","import { inject as service } from \"@ember/service\";\nimport { computed, get, observer } from '@ember/object';\nimport { camelize } from '@ember/string';\nimport { map } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nvar originVal;\nvar field;\n\nexport default Component.extend({\n    editChanged: observer('isEditing', function() {\n        if (this.get('isEditing')==true) {\n            if(typeof this.editField === \"function\") {\n                this.editField();\n            }\n        } else {\n            if(typeof this.stopEditField === \"function\") {\n                this.stopEditField();\n            }\n        }\n    }),\n\n    store: service(),\n    isEditable: true,\n    isEditing: false,\n    isRelational: true,\n    \n    // isNew means that this is being used on an object that has not been saved before. \n    // New as in not in the database yet. So saving is done at the form level not per control.        \n    isNew: false,\n    selectOptionsArray: map('selectOptions', function(item){\n\n        const selectOptionsKyes = this.get('selectOptionsKyes').split(\",\");\n        \n        // console.log(\"Key: \" + get(item, selectOptionsKyes[0]) + \"   Value:: \" + get(item, selectOptionsKyes[1]))\n        \n        return {\n            key: get(item, selectOptionsKyes[0]),\n            value: get(item, selectOptionsKyes[1])\n        };\n    }),\n    \n    modelName: computed('selectOptions', function() {\n        return this.get('selectOptions.type.modelName');\n    }),\n\n    actions: {\n        selectNewValue(value){\n            // isNew means that this is being used on an object that has not been saved before. \n            // New as in not in the database yet.\n            let isNew = this.isNew;\n\n            // Only save if it's already in the database.\n            if( !isNew){\n                // console.log(`New value: ${value}`);\n                this.set('newValue', value);\n                this.send('save',this.get('parentObject'));\n            }\n            if (this.onSelectionChange) { // check if onSelectionChange function is defined\n                this.onSelectionChange(value);\n            }\n        },\n\n        edit(){\n            originVal = this.get(`object.${this.get('valueSource')}`);\n            this.set('isEditing', true);\n            this.set('newValue', this.get(`object.${this.get('valueSource')}`));\n            // console.log(\"Setting New Value::::: \" + this.get(\"newValue\"));\n            return this.element.tabindex = 1, this.element.focus(); // brings the view into focus in order to capture keyUps.\n        },\n        async save(object){\n            // console.log(`Saving: ${object.id}`);            \n            let modelName = this.get('modelName');\n            // console.log(`modelName: ${modelName}`);\n            // console.log(\"valueSource:: \" + this.get('valueSource'));\n            \n            if (this.get('isRelational')) {\n                var newSelectValue = await this.get('store').findRecord(modelName, this.get('newValue'));\n                object.set(camelize(this.get('inputFieldId')), newSelectValue);\n            } else {\n                // console.log(\"valueSource:: \" + this.get('newValue'));\n                object.set(this.get('valueSource'), this.get('newValue'));\n            }\n\n            // field = this.get('field');\n            \n            await object.save().catch(function(reason) {\n                // console.log(\"REASON:::::::: \" + reason);\n                let editError = document.getElementById(\"instrumentEditError\");\n                editError.hidden = false;\n         \n                // console.log(\"objects saved\");\n                object.set(camelize(modelName), newSelectValue);\n\n                window.scrollTo(0,0);\n            });\n            this.set('isEditing', false);\n        },\n        cancel(){\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            this.set('isEditing', false);\n        }\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel', this.get('object'));\n        }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, get, observer } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    editChanged: observer('isEditing', function() {\n        if (this.get('isEditing')==true) {\n            if(typeof this.editField === \"function\") {\n                this.editField();\n            }\n        } else {\n            if(typeof this.stopEditField === \"function\") {\n                this.stopEditField();\n            }\n        }\n    }),\n    store: service(),\n    isEditable: true,\n    isEditing: false,\n    isRelational: true,\n    selectOptionsArray: map('selectOptions', function(item){\n        const selectOptionsKyes = this.get('selectOptionsKyes').split(\",\");\n        return {\n            key: get(item, selectOptionsKyes[0]),\n            value: get(item, selectOptionsKyes[1])\n        };\n    }),\n    modelName: computed('selectOptions', function() {\n        return this.get('selectOptions.type.modelName');\n    }),\n    actions: {\n        selectNewValue(value){\n            this.set('newValue', value);\n        },\n        edit(){\n            this.set('isEditing', true);\n            this.set('newValue', this.get(`object.${this.get('valueSource')}`));\n            //this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n            return this.element.tabindex = 1, this.element.focus(); // brings the view into focus in order to capture keyUps.\n        },\n        save(object){\n            let modelName = this.get('modelName');\n            //console.log(this.get('newValue'));\n            object.set(this.get('valueSource'), this.get('newValue'));\n            object.save();\n            this.set('isEditing', false);\n            //this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n        },\n        cancel(){\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            this.set('isEditing', false);\n            //this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n        }\n    },\n    didRender(){\n        //this.$('.has-tooltip-info').tooltip(); //activate tooltips\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel', this.get('object'));\n        }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport { camelize } from '@ember/string';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nvar originVal;\nvar field;\n\nexport default Component.extend({\n    editChanged: observer('isEditing', function() {\n        if (this.get('isEditing')==true) {\n            if(typeof this.editField === \"function\") {\n                this.editField();\n            }\n        } else {\n            if(typeof this.stopEditField === \"function\") {\n                this.stopEditField();\n            }\n        }\n    }),\n\n    store: service(),\n    isEditable: true,\n    isEditing: false,\n    isRelational: true,\n    selectOptionsArray: computed('selectOptions', function () {\n        let valueArray = this.get('selectOptions');\n        let items = valueArray[this.get(\"selectOptionKey\")];\n        let selectOptionsKyes = this.get('selectOptionsKyes').split(\",\");\n        let selectOptions = items.map(function (item) {\n          return {\n            key: item[selectOptionsKyes[0]],\n            value: item[selectOptionsKyes[1]]\n          };\n        });\n        return selectOptions;\n    }),\n    modelName: computed('selectOptions', function() {\n        let modelName = this.get('selectOptions');\n        // console.log(`modelName: ${modelName.type.modelName}`);\n        return this.get('selectOptions.type.modelName');\n    }),\n    getOption(key) {\n        let { field, selectOptions, selectOptionKey, object } = this.getProperties('field', 'selectOptions', 'selectOptionKey', 'object');\n        let queryValue = object[field];\n        let value = selectOptions[selectOptionKey].find(({ id }) => id === queryValue) || {};\n        return value;\n    },\n    getOptionValue: computed('selectOptions', function() {\n        let { field, selectOptions, selectOptionKey, object } = this.getProperties('field', 'selectOptions', 'selectOptionKey', 'object');\n        let queryValue = object[field];\n        let { value } = selectOptions[selectOptionKey].find(({ id }) => id === queryValue) || {};\n        return value;\n    }),\n    actions: {\n        // selectNewValue(value){\n        //     console.log(`New value: ${value}`);\n        //     this.set('newValue', value);\n        //     let parent = this.get('parentObject');\n        //     this.send('save',this.get('parentObject'));\n        // },\n        getNewOptionValue() {\n            let { field, selectOptions, selectOptionKey, object } = this.getProperties('field', 'selectOptions', 'selectOptionKey', 'object');\n            let queryValue = object[field];\n            let { value } = selectOptions[selectOptionKey].find(({ id }) => id === queryValue) || {};\n            return value;\n        },\n\n        selectNewValue(value){\n            // console.log(`New value: ${value}`);\n            this.set('newValue', value+\"\");\n            let parent = this.get('parentObject');\n            this.send('save',parent);\n        },\n        edit(){\n            originVal = this.get(`object.${this.get('field')}`);\n            this.set('isEditing', true);\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            return this.element.tabindex = 1, this.element.focus(); // brings the view into focus in order to capture keyUps.\n        },\n        save(object){\n            let modelName = this.get('modelName');\n            let field = this.get('field');\n            if (this.get('isRelational')) {\n                var newSelectValue = this.get('newValue');\n                // console.log(`newSelectValue: ${newSelectValue}`);\n                // console.log(`newSelectValue Value: ${this.get('newValue')}`);\n                object.set(field, this.get('newValue'));\n            } else {\n                object.set(this.get('valueSource'), this.get('newValue'));\n            }\n\n            // field = this.get('field');\n            \n            object.save().catch(function(reason) {\n      \n                let editError = document.getElementById(\"instrumentEditError\");\n                editError.hidden = false;\n                \n                // // let orig = \"\";\n                // // if (originVal == 1) {\n                // //     orig = \"dExto\";\n                // // }\n\n                // //console.log(field);\n                // console.log(originVal);\n\n                // const objectMaps = {\n                //     'HAC': 'collar',\n                //     'HAT': 'toe',\n                //     '1': 'dExto',\n                //     '2': 'dCable',\n                //     '3': 'dRebar',\n                //     '4': 'dMPBX',\n                //     '5': 'dCOnv',\n                //     '6': 'Tilt',\n                //     '7': 'Slough',\n                //     '8': 'Thermostring',\n                //     '9': 'Piezo',\n                //     '10': 'HID',\n                //     '11': 'dGMM',\n                //     '12': 'Wire',\n                //     '13': 'Adict',\n                //     '15': 'BluVibe',\n                // };\n\n                // let originString = objectMaps[originVal];\n\n                // if (! ((originVal == 'HAC') || (originVal == 'HAT')) ) {\n                //     //object.set(\"instrumentType.title\", originString);\n                // } else {\n                //     //object.set(\"headAt.title\", originString);\n                // }\n\n                object.set(camelize(modelName), newSelectValue);\n\n                window.scrollTo(0,0);\n            });\n            this.set('isEditing', false);\n        },\n        cancel(){\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            this.set('isEditing', false);\n        }\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel', this.get('object'));\n        }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, get, observer } from '@ember/object';\nimport { camelize } from '@ember/string';\nimport { map } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nvar originVal;\nvar field;\n\nexport default Component.extend({\n    editChanged: observer('isEditing', function() {\n        if (this.get('isEditing')==true) {\n            if(typeof this.editField === \"function\") {\n                this.editField();\n            }\n        } else {\n            if(typeof this.stopEditField === \"function\") {\n                this.stopEditField();\n            }\n        }\n    }),\n\n    store: service(),\n    isEditable: true,\n    isEditing: false,\n    isRelational: true,\n    selectOptionsArray: map('selectOptions', function(item){\n        const selectOptionsKyes = this.get('selectOptionsKyes').split(\",\");\n        // console.log(\"Key: \" + get(item, selectOptionsKyes[0]) + \"   Value:: \" + get(item, selectOptionsKyes[1]))\n        \n        return {\n            key: get(item, selectOptionsKyes[0]),\n            value: get(item, selectOptionsKyes[1])\n        };\n    }),\n    \n    modelName: computed('selectOptions', function() {\n        const options = this.get('selectOptions');\n        // Ember Data 5: RecordArray no longer has .type.modelName\n        return options?.type?.modelName || options?.modelName || this.get('modelNameOverride');\n    }),\n\n    actions: {\n        selectNewValue(value){\n            // console.log(`New value: ${value}`);\n            this.set('newValue', value);\n            if (this.onSelectionChange) { // check if onSelectionChange function is defined\n                this.onSelectionChange(value);\n            }\n            this.send('save',this.get('parentObject'));\n        },\n\n        edit(){\n            originVal = this.get(`object.${this.get('valueSource')}`);\n            this.set('isEditing', true);\n            this.set('newValue', this.get(`object.${this.get('valueSource')}`));\n            return this.element.tabindex = 1, this.element.focus(); // brings the view into focus in order to capture keyUps.\n        },\n        async save(object){\n            // console.log(`Saving: ${object.id}`);            \n            let modelName = this.get('modelName');\n            // console.log(`modelName: ${modelName}`);\n            // console.log(\"valueSource:: \" + this.get('valueSource'));\n            if (this.get('isRelational')) {\n                var newSelectValue = this.get('store').peekRecord(modelName, this.get('newValue'));\n                object.set(camelize(modelName), newSelectValue);\n            } else {\n                // console.log(\"valueSource:: \" + this.get('newValue'));\n                object.set(this.get('valueSource'), this.get('newValue'));\n            }\n\n            // field = this.get('field');\n            \n            await object.save().catch(function(reason) {\n                // console.log(\"REASON:::::::: \" + reason);\n                let editError = document.getElementById(\"instrumentEditError\");\n                editError.hidden = false;\n                \n                // // let orig = \"\";\n                // // if (originVal == 1) {\n                // //     orig = \"dExto\";\n                // // }\n\n                // //console.log(field);\n                // console.log(originVal);\n\n                // const objectMaps = {\n                //     'HAC': 'collar',\n                //     'HAT': 'toe',\n                //     '1': 'dExto',\n                //     '2': 'dCable',\n                //     '3': 'dRebar',\n                //     '4': 'dMPBX',\n                //     '5': 'dCOnv',\n                //     '6': 'Tilt',\n                //     '7': 'Slough',\n                //     '8': 'Thermostring',\n                //     '9': 'Piezo',\n                //     '10': 'HID',\n                //     '11': 'dGMM',\n                //     '12': 'Wire',\n                //     '13': 'Adict',\n                //     '15': 'BluVibe',\n                // };\n\n                // let originString = objectMaps[originVal];\n\n                // if (! ((originVal == 'HAC') || (originVal == 'HAT')) ) {\n                //     //object.set(\"instrumentType.title\", originString);\n                // } else {\n                //     //object.set(\"headAt.title\", originString);\n                // }\n                // console.log(\"objects saved\");\n                object.set(camelize(modelName), newSelectValue);\n\n                window.scrollTo(0,0);\n            });\n            this.set('isEditing', false);\n        },\n        cancel(){\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            this.set('isEditing', false);\n        }\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel', this.get('object'));\n        }\n    }\n});\n","import { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nvar originVal;\nvar field;\n\nexport default Component.extend({\n    editChanged: observer('isEditing', function() {\n        if (this.get('isEditing')==true) {\n            if(typeof this.editField === \"function\") {\n                this.editField();\n            }\n        } else {\n            if(typeof this.stopEditField === \"function\") {\n                this.stopEditField();\n            }\n        }\n    }),\n\n    isEditing: false,\n    dateTimePicker: null,\n    showClear: false,\n    actions: {\n        edit(){\n            originVal = this.object.get(this.field)\n            this.set('isEditing', true);\n            this.set('newValue', moment(new Date(this.object.get(this.field))).format('HH:mm:ss'));            \n            return this.element.tabindex = 1, this.element.focus(); // brings the view into focus in order to capture keyUps.\n        },\n        save(object){\n            let value = this.get('newValue');\n//            let newDate = moment(new Date(value)).format('HH:mm:ss');\n            let newDate = moment(value,'HH:mm:ss');\n            if (newDate == \"Invalid date\")\n                newDate = null;\n            object.set(this.get('field'), newDate.format('HH:mm:ss'));\n\n            field = this.get('field');\n            object.save().catch(function(reason) {\n      \n                let editError = document.getElementById(\"instrumentEditError\");\n                editError.hidden = false;\n                \n                if (originVal == null) {\n                    originVal = \"\";\n                }\n                \n                object.set(field, originVal);\n\n                window.scrollTo(0,0);\n            });\n            this.set('isEditing', false);\n        },\n        cancel(){\n            this.set('newValue', this.get(`object.${this.get('field')}`));\n            this.set('isEditing', false);\n        }\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel', this.get('object'));\n        }\n        if (e.keyCode === 13) {\n            if (this.get('isTextarea') === true && e.ctrlKey === false) {\n                return;\n            }\n            this.send('save', this.get('object'));\n        }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nexport default Component.extend({\n    store: service(),\n    _spatialChart: null,\n\n    // anchor distances from instrument anchors, trimmed for strain-values\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        const firstObject = this.get('zoomChartData').get('firstObject');\n        if (!firstObject) { return []; }\n        const dataValuesCount = firstObject.get ? (firstObject.get('values')?.length ?? 0) : (firstObject.values?.length ?? 0);\n        const anchors = this.get('instrument').get('anchors');\n        let anchorDistances = (anchors.content ?? anchors).map(anchor => anchor.get('distance'));\n\n        const modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && modelName === 'strain-values') {\n            anchorDistances.splice(0, 1);\n        }\n        return anchorDistances;\n    }),\n\n    // midpoints between anchor distances for strain-values\n    anchorMidDistances: computed('anchorDistances', function() {\n        const anchorDistances = [...this.get('anchorDistances')];\n        const midDistances = [];\n        anchorDistances.unshift(0);\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            midDistances.push(+((anchorDistances[i] + anchorDistances[i + 1]) / 2).toFixed(2));\n        }\n        return midDistances;\n    }),\n\n    // x-axis depth values for the spatial chart\n    spatialXValues: computed('anchorDistances', 'anchorMidDistances', 'chartDataModelName', function() {\n        const modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            return this.get('anchorMidDistances');\n        }\n        return this.get('anchorDistances');\n    }),\n\n    // spatial lines: one line per timestamp reading (X = depth, Y = displacement)\n    spatialChartLinesData: computed('zoomChartData', 'spatialXValues', 'chartDataModelName', function() {\n        const zoomChartData = this.get('zoomChartData');\n        const xValues = this.get('spatialXValues');\n        const modelName = this.get('chartDataModelName');\n\n        return zoomChartData.map((item) => {\n            let values = item.get('values') || [];\n            // strain-values: prepend duplicate of first value (matching NVD3 behavior)\n            if (modelName === 'strain-values') {\n                values = [values[0], ...values];\n            }\n            return {\n                key: moment(item.get('id')).format('DD MMM YYYY HH:mm'),\n                timestamp: item.get('id'),\n                values: values.map((v, idx) => ({\n                    x: xValues[idx] !== undefined ? xValues[idx] : null,\n                    y: v !== undefined ? v : null\n                })).filter(pt => pt.x !== null)\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        const chartDataModelName = this.get('chartDataModelName');\n        const chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes')\n        }));\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        const title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName');\n                units = \"kN\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n\n        const spatialLinesData = this.get('spatialChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildSpatialChart(spatialLinesData, yAxisTitle);\n        });\n    },\n\n    _buildSpatialChart(linesData, yAxisTitle) {\n        const canvas = this.element.querySelector('canvas.chartjs-spatial');\n        if (!canvas) return;\n\n        let instrumentLength = 0;\n        try {\n            instrumentLength = this.instrument.get('instrumentLength') || 0;\n        } catch (e) { /* ignore */ }\n\n        const anchorXValues = this.get('spatialXValues');\n\n        const lineDatasets = linesData.map((line, i) => ({\n            label: line.key,\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            parsing: false,\n            _isLine: true\n        }));\n\n        // Anchor reference datasets: hidden from the chart (drawn by plugin instead)\n        // but still needed for legend generation\n        const anchorDatasets = anchorXValues.map((dist, i) => ({\n            label: String(dist),\n            data: [],\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            borderWidth: 0,\n            pointRadius: 0,\n            showLine: false,\n            _isRef: true\n        }));\n\n        const datasets = [...lineDatasets, ...anchorDatasets];\n\n        // \"No data\" overlay plugin\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds._isRef) return;\n                    if (!ds.hidden) ds.data.forEach(pt => { if (pt && pt.y != null) hasData = true; });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data available', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        // Plugin: draw anchor reference dots pinned to the bottom of the chart area\n        const anchorDotsPlugin = {\n            id: 'anchorDots',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                const yArea = chart.chartArea.bottom;\n                const ctx = chart.ctx;\n\n                anchorXValues.forEach((dist, i) => {\n                    const px = xScale.getPixelForValue(dist);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.arc(px, yArea, 6, 0, 2 * Math.PI);\n                    ctx.fillStyle = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                    ctx.fill();\n                    ctx.restore();\n                });\n            }\n        };\n\n        // Crosshair plugin — vertical dashed line following cursor\n        let crosshairX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                if (crosshairX === null) return;\n                const { ctx, chartArea: { top, bottom } } = chart;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        // --- Legend-tooltip helpers ---\n        let legendTooltipEl = null;\n        let highlightedIndex = null;\n        let lastTooltipIdx = null;\n\n        function buildSpatialLegendItems(chart) {\n            return chart.data.datasets.filter(ds => ds._isLine).map((ds) => {\n                const i = chart.data.datasets.indexOf(ds);\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:1;margin-right:3px;\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div></div>`;\n            }).join('');\n        }\n\n        function highlightLine(chart, idx, skipUpdate) {\n            highlightedIndex = idx;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine) return;\n                ds.borderColor = (i === idx)\n                    ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                    : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '22';\n            });\n            if (!skipUpdate) chart.update('none');\n        }\n\n        function restoreLines(chart, skipUpdate) {\n            highlightedIndex = null;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine) return;\n                ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n            });\n            if (!skipUpdate) chart.update('none');\n        }\n\n        function attachSpatialLegendHandlers(el, chart) {\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                highlightLine(chart, parseInt(item.dataset.ds));\n            };\n            el.onmouseout = function() { restoreLines(chart); };\n        }\n\n        function initSpatialLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildSpatialLegendItems(chart);\n            attachSpatialLegendHandlers(legendTooltipEl, chart);\n        }\n\n        function distToSegment(px, py, x1, y1, x2, y2) {\n            const dx = x2 - x1, dy = y2 - y1;\n            const lenSq = dx * dx + dy * dy;\n            let t = lenSq === 0 ? 0 : Math.max(0, Math.min(1, ((px - x1) * dx + (py - y1) * dy) / lenSq));\n            const projX = x1 + t * dx, projY = y1 + t * dy;\n            const ex = px - projX, ey = py - projY;\n            return Math.sqrt(ex * ex + ey * ey);\n        }\n\n        function findClosestLine(chart, mouseX, mouseY) {\n            let closestIdx = -1;\n            let closestDist = Infinity;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine || chart.getDatasetMeta(i).hidden) return;\n                const pts = chart.getDatasetMeta(i).data;\n                if (!pts || pts.length < 2) return;\n                for (let j = 0; j < pts.length - 1; j++) {\n                    const p1 = pts[j], p2 = pts[j + 1];\n                    if (!p1 || !p2) continue;\n                    const dist = distToSegment(mouseX, mouseY, p1.x, p1.y, p2.x, p2.y);\n                    if (dist < closestDist) { closestDist = dist; closestIdx = i; }\n                }\n            });\n            return { datasetIndex: closestIdx, pixelDist: closestDist };\n        }\n\n        function updateSpatialTooltip(chart, mouseX, mouseY) {\n            if (!legendTooltipEl) return;\n            const { left, right, top, bottom } = chart.chartArea;\n            if (mouseX < left || mouseX > right || mouseY < top || mouseY > bottom) {\n                if (highlightedIndex !== null) restoreLines(chart, true);\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildSpatialLegendItems(chart);\n                attachSpatialLegendHandlers(legendTooltipEl, chart);\n                lastTooltipIdx = null;\n                return;\n            }\n            const closest = findClosestLine(chart, mouseX, mouseY);\n            if (closest.datasetIndex < 0) return;\n            if (closest.datasetIndex !== highlightedIndex) {\n                highlightLine(chart, closest.datasetIndex, true);\n            }\n            const activeIdx = highlightedIndex != null ? highlightedIndex : closest.datasetIndex;\n            if (activeIdx !== lastTooltipIdx) {\n                lastTooltipIdx = activeIdx;\n                const ds = chart.data.datasets[activeIdx];\n                const valuesHtml = ds.data.map((pt, idx) => {\n                    const anchorColor = CHART_LINE_COLORS[idx % CHART_LINE_COLORS.length];\n                    return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${anchorColor};\"></div>${pt && pt.y != null ? pt.y.toFixed(2) : '—'}</div>`;\n                }).join('');\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = `<div class=\"legend-tooltip-date\">${ds.label}</div>${valuesHtml}`;\n            }\n        }\n\n        const spatialChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                parsing: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'nearest', intersect: false },\n                onHover(e) {\n                    if (e.x != null) {\n                        crosshairX = e.x;\n                    }\n                },\n                scales: {\n                    x: {\n                        type: 'linear',\n                        min: 0,\n                        max: instrumentLength > 0 ? instrumentLength : undefined,\n                        title: {\n                            display: true,\n                            text: 'Depth (mm)',\n                            font: { size: 12 }\n                        },\n                        afterBuildTicks(axis) {\n                            // Show ticks at anchor positions that are in visible range\n                            const visibleAnchors = anchorXValues\n                                .filter(v => v >= axis.min && v <= axis.max)\n                                .map(v => ({ value: v }));\n                            if (visibleAnchors.length > 0) {\n                                axis.ticks = visibleAnchors;\n                            }\n                            // else: let ChartJS auto-generate ticks when zoomed between anchors\n                        },\n                        ticks: {\n                            callback(val) { return val.toLocaleString(); }\n                        }\n                    },\n                    y: {\n                        title: {\n                            display: true,\n                            text: yAxisTitle,\n                            font: { size: 12 }\n                        },\n                        ticks: {\n                            callback(val) { return val.toFixed ? val.toFixed(2) : val; }\n                        }\n                    }\n                },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                }\n            },\n            plugins: [noDataPlugin, anchorDotsPlugin, crosshairPlugin]\n        });\n\n        initSpatialLegendTooltip(canvas.parentElement, spatialChart);\n\n        // --- Scroll-to-zoom (both axes) ---\n        const origXMin = spatialChart.options.scales.x.min;\n        const origXMax = spatialChart.options.scales.x.max;\n        canvas.addEventListener('wheel', e => {\n            e.preventDefault();\n            const rect = canvas.getBoundingClientRect();\n            const xScale = spatialChart.scales['x'];\n            const yScale = spatialChart.scales['y'];\n            const factor = e.deltaY > 0 ? 1.15 : 0.87;\n            const cursorX = xScale.getValueForPixel(e.clientX - rect.left);\n            const cursorY = yScale.getValueForPixel(e.clientY - rect.top);\n            spatialChart.options.scales.x.min = cursorX - (cursorX - xScale.min) * factor;\n            spatialChart.options.scales.x.max = cursorX + (xScale.max - cursorX) * factor;\n            spatialChart.options.scales.y.min = cursorY - (cursorY - yScale.min) * factor;\n            spatialChart.options.scales.y.max = cursorY + (yScale.max - cursorY) * factor;\n            spatialChart.update('none');\n        }, { passive: false });\n\n        // --- Drag-to-pan (both axes) ---\n        let panStartX = null, panStartY = null;\n        let panXMin = null, panXMax = null, panYMin = null, panYMax = null;\n        canvas.addEventListener('mousedown', e => {\n            panStartX = e.clientX; panStartY = e.clientY;\n            panXMin = spatialChart.scales['x'].min; panXMax = spatialChart.scales['x'].max;\n            panYMin = spatialChart.scales['y'].min; panYMax = spatialChart.scales['y'].max;\n            canvas.style.cursor = 'grabbing';\n        });\n        canvas.addEventListener('mousemove', e => {\n            const rect = canvas.getBoundingClientRect();\n            const px = e.clientX - rect.left;\n            const py = e.clientY - rect.top;\n            const { left, right } = spatialChart.chartArea;\n            crosshairX = (px >= left && px <= right) ? px : null;\n            if (panStartX !== null) {\n                const xPxRange = spatialChart.chartArea.right - spatialChart.chartArea.left;\n                const yPxRange = spatialChart.chartArea.bottom - spatialChart.chartArea.top;\n                spatialChart.options.scales.x.min = panXMin - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.x.max = panXMax - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.y.min = panYMin + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n                spatialChart.options.scales.y.max = panYMax + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n            } else {\n                updateSpatialTooltip(spatialChart, px, py);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('mouseleave', () => {\n            crosshairX = null;\n            if (highlightedIndex !== null) restoreLines(spatialChart);\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildSpatialLegendItems(spatialChart);\n                attachSpatialLegendHandlers(legendTooltipEl, spatialChart);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('dblclick', () => {\n            spatialChart.options.scales.x.min = origXMin;\n            spatialChart.options.scales.x.max = origXMax;\n            spatialChart.options.scales.y.min = undefined;\n            spatialChart.options.scales.y.max = undefined;\n            spatialChart.update('none');\n        });\n        const onPanEnd = () => {\n            panStartX = panStartY = panXMin = panXMax = panYMin = panYMax = null;\n            canvas.style.cursor = 'default';\n        };\n        canvas.addEventListener('mouseup', onPanEnd);\n        document.addEventListener('mouseup', onPanEnd);\n\n        this.set('_spatialChart', spatialChart);\n    },\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const spatialChart = this.get('_spatialChart');\n        if (spatialChart) { spatialChart.destroy(); }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\n// Chart line colors — sourced from color-palette\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,    // #0077b6\n    colorPalette.orange2,   // #FF7444\n    colorPalette.green3,    // #2a9d8f\n    colorPalette.red1,      // #D25353\n    colorPalette.purple7,   // #8b5cf6\n    colorPalette.beige22,   // #b08968\n    colorPalette.pink6,     // #ec4899\n    colorPalette.gray5,     // #6b7280\n    colorPalette.teal6,     // #10b981\n    colorPalette.cyan4,     // #06b6d4\n];\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        if (instType === 'Tilt') {\n            return ['X', 'Y', 'Z'];\n        } else if (instType === 'Wire') {\n            let anchors = [];\n            let numPorts = this.instrument.get('portsNum');\n            for (let ctr = 0; ctr < numPorts; ctr++) {\n                anchors.push('T' + (ctr + 1));\n                anchors.push(ctr + 1);\n            }\n            return anchors;\n        } else if (instType === 'BluVibe') {\n            return ['Data'];\n        }\n\n        let anchors = this.get('instrument').get('anchors');\n        const arr = anchors.content ?? anchors;\n        let anchorDistances = arr.map(anchor => anchor.get('distance'));\n\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') {\n            var midPoints = [];\n            if (instType === 'dCable') {\n                for (var ctr = 1; ctr < anchorDistances.length; ctr++) {\n                    var mid = (anchorDistances[ctr - 1] + anchorDistances[ctr]) / 2;\n                    midPoints[ctr] = +mid.toFixed(2);\n                }\n                midPoints.splice(0, 1);\n                midPoints[0] = 0;\n                midPoints.push(anchorDistances[anchorDistances.length - 1]);\n            } else if (instType === 'dRebar') {\n                let headExclusion = this.get('instrument').get('headExclusionLength');\n                let leftAnchors = [headExclusion];\n                let rightAnchors = [headExclusion];\n\n                let center = anchorDistances.length - 1;\n                center = Math.ceil(center / 2);\n\n                leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n\n                let midLeft = [];\n                for (var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                    midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                }\n\n                let midRight = [];\n                for (var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                    midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                }\n\n                if (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values') {\n                    if (this.get('instrument').get('stacked')) {\n                        midPoints = midLeft;\n                        if (modelName === 'load-values') {\n                            midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n                        }\n                    } else {\n                        midPoints = midLeft.concat(midRight);\n                        if (modelName === 'bending-strain-values') {\n                            midPoints.shift();\n                            midPoints.pop();\n                        }\n                    }\n                } else {\n                    midPoints = midLeft.concat(midRight);\n                }\n\n                if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                    for (let ctr = 0; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr + 1) + '-' + midPoints[ctr];\n                    }\n                }\n            } else {\n                for (var ctr = 0; ctr < anchorDistances.length - 1; ctr++) {\n                    midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n                }\n            }\n            if (modelName === 'displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        } else if (modelName === 'axial-displacement-values' && this.get('instrument').get('stacked')) {\n            let mid = (anchorDistances.length - 1) / 2;\n            while (anchorDistances.length > (mid + 1)) {\n                anchorDistances.pop();\n            }\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else if (modelName === 'axial-displacement-values' && !this.get('instrument').get('stacked')) {\n            anchorDistances.sort(function(a, b) { return a - b; });\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else {\n            if (instType === 'dRebar') {\n                if (modelName === 'displacement-values') {\n                    var midPoints = [];\n                    let headExclusion = this.get('instrument').get('headExclusionLength');\n                    let leftAnchors = [headExclusion];\n                    let rightAnchors = [headExclusion];\n\n                    let center = anchorDistances.length - 1;\n                    center = Math.ceil(center / 2);\n\n                    leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                    rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                    if (!this.get('instrument').get('stacked')) {\n                        rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n                    }\n\n                    let midLeft = [];\n                    for (var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                        midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                    }\n\n                    let midRight = [];\n                    for (var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                        midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                    }\n\n                    midPoints = midLeft.concat(midRight);\n                    anchorDistances = midPoints;\n                    anchorDistances.unshift(0);\n                }\n                for (let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n                for (let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n            }\n        }\n        return anchorDistances;\n    }),\n\n    // Main chart sourced from zoomChartData to mirror NVD3 (Group By applies to visible chart).\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'anchorDistances', 'chartDataModelName', function() {\n        const anchorDistances = this.get('anchorDistances');\n        const fullRangeChartData = this.get('zoomChartData');\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values';\n\n        const lines = anchorDistances.map((chartLineName, chartLineIndex) => ({\n            key: chartLineName,\n            values: fullRangeChartData.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[chartLineIndex] !== undefined) ? arr[chartLineIndex] : null\n                };\n            })\n        }));\n\n        // Add temperature overlay on y2 (unless viewing temperature data itself)\n        if (modelName !== 'temperature-values') {\n            const zoomTempData = this.get('zoomTempData');\n            if (zoomTempData && zoomTempData.length) {\n                lines.push({\n                    key: 'T (°C)',\n                    yAxis: 'y2',\n                    hidden: false,\n                    values: zoomTempData.map(item => {\n                        const rawValues = item.get('values');\n                        const arr = Array.isArray(rawValues) ? rawValues : [];\n                        return {\n                            x: moment(item.get('id')).valueOf(),\n                            y: arr[0] !== undefined ? arr[0] : null\n                        };\n                    })\n                });\n            }\n        }\n\n        return lines;\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        let title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                units = this.get(\"yAxisUnit\") || getAttr('units');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName') || 'Load';\n                units = 'kN';\n                break;\n            case 'axial_strain':\n                axisName = \"Axial Strain\";\n                units = \"%\";\n                break;\n            case 'bending_strain':\n                axisName = \"Bending Strain\";\n                units = \"%\";\n                break;\n            case 'axial_displacement':\n                axisName = \"Axial Displacement\";\n                break;\n            case 'temperature':\n                axisName = \"Temperature\";\n                units = \"°C\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const fullRangeChartLinesData = this.get('fullRangeChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildMainChart(fullRangeChartLinesData, yAxisTitle);\n            this._buildOverviewChart();\n        });\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        const datasets = anchorDistances.map((chartLineName, i) => ({\n            label: String(chartLineName),\n            data: fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        anchorDistances.forEach((chartLineName, i) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(chartLineName));\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed, get } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nfunction resetNewInstrumentObject(_this) {\n    //console.log('reset');\n    _this.set('newInstrumentObject', {});\n    //_this.set('name', null);\n    _this.set('zeroTimestamp', null);\n    _this.set('installDate', null);\n    //_this.set('east', null);\n    //_this.set('north', null);\n    //_this.set('depth', null);\n    //_this.set('azimuth', null);\n    //_this.set('dip', null);\n    //_this.set('instrumentType', 0);\n    //_this.set('headAt', 'HAC');\n    //_this.set('instrumentLength', 0);\n    //_this.set('strokeLength', 0);\n    //_this.set('referenceAnchor', null);\n    //_this.set('headExclusionLength', 0);\n    //_this.set('gaugeLength', 0);\n    //_this.set('bulbed', false);\n    //_this.set('plated', false);\n    //_this.set('stacked', false);\n    //_this.set('active', true);\n}\n\nexport default class CreatePackInstrument extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n    }\n\n    isAuthenticated = true;\n    newInstrumentObject = {};\n    headAt = 'HAC';\n    zeroTimestamp = null;\n    installDate = null;\n    authError = false;\n    project = null;\n    level = null;\n\n    actions= {\n\n        \n        setProject(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n\n\n\n\n        createInstrument(object){\n\n            //console.log(this.get('prevDup'));\n            //console.log((typeof this.get('prevDup') === \"undefined\"));\n\n            let _this = this,\n            store = this.get('store'),\n            newInstrumentObject = this.get('newInstrumentObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newInstrumentObject.id = this.get('id');\n            newInstrumentObject.zeroTimestamp = this.get('zeroTimestamp');\n            newInstrumentObject.installDate = this.get('installDate');\n            //newInstrumentObject.east = this.get('east');\n            //newInstrumentObject.north = this.get('north');\n            //newInstrumentObject.depth = this.get('depth');\n            newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n            newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n            newInstrumentObject.bulbed = this.get('bulbed');\n            newInstrumentObject.plated = this.get('plated');\n            newInstrumentObject.stacked = this.get('stacked');\n            newInstrumentObject.active = true;\n            newInstrumentObject.instrumentStiffness = 0;\n\n            if(typeof newInstrumentObject.id === 'undefined' || newInstrumentObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n\n            if (this.get('zeroTimestamp') != null) {\n                newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('installDate') != null) {\n                newInstrumentObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            // console.log(get(this, 'duplicateError'));\n\n            let newInstrument = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    //console.log(this.get('prevDup'));\n                    if(err.message.includes('has already been used')) {\n                        //console.log('duplicate');\n                        this.setError('duplicateError',true);\n                        \n                        error = true;\n                        dup = true;\n                    }\n                    // console.log(err.message);\n                }\n            }\n            \n            this.setError('authError', false);\n\n            if (!error) {\n                \n                    newInstrument.save().then(function(results){\n                        // console.log(dup);\n                        if(results.id != null) {\n                            _this.get('submit')(results.id);\n                        } else {\n                            this.setError('isVisibleError',true);\n                            error = true;\n                        }\n                    }).catch(function(reason) {\n                        \n                        _this.setError('isVisibleError',true);\n                        _this.setError('authError',true);\n                    }); \n            } \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let displacementValueObjectValues = _this.get('displacementValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(displacementValueObjectValues).forEach(function(key,index) {\n        displacementValueObjectValues[key] = 0;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n    // newTimestampValue: computed('dateFormat', function() {\n    //     return moment().format(this.get('dateFormat'));\n    // }),\n\n    newDisplacementValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n    displacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    newDisplacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n    \n    actions: {\n        setNewDisplacementValue(key, event) {\n            const vals = this.get('newDisplacementValueObjectValues');\n            vals[key] = event.target.value;\n        },\n        setNewTimestampValue(event) {\n            this.set('newTimestampValue', event.target.value);\n        },\n        setTemperatureValue(event) {\n            this.set('temperatureObjectValue', event.target.value);\n        },\n        saveNew(){\n            let _this = this,\n                store = this.get('store'),\n                newDisplacementValuesObject = this.get('newDisplacementValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                displacementValues = this.get('displacementValues'),\n                temperatureValues = this.get('temperatureValues')\n            ;\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newDisplacementValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newDisplacementValuesObject.values = Object.values(this.get('newDisplacementValueObjectValues'));\n\n            const newDisplacementValues = store.createRecord('displacement-value', newDisplacementValuesObject);\n            // save new displacement-value to DB\n            const savedDisplacementValuesObject = newDisplacementValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if displacement-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //displacementValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n                \n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class EditInstrument extends Component.extend({\n}) {\n    @service router;\n    @service store;\n    //@service session;\n    //@service currentUser;\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    actions = {\n        viewData(id) {\n            this.get('router').transitionTo('raw-data', id);\n            //this.viewData(id);\n        },\n        tGraph(id) {\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values');\n            //this.tGraph(id, 'displacement-values');\n        },\n        sGraph(id) {\n            this.get('router').transitionTo('spatial-graphs.spatial-graph', id, 'displacement-values');\n            //this.sGraph(id, 'displacement-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveInstrument(){\n            const _this = this;\n            // console.log(\"test\");\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/instruments\";    \n                }\n            } else {\n                window.location.href = \"/instruments\";\n            }            \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { copy } from 'ember-copy';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'spatial-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    progressAnimationDuration: 100, //set 50, was 700\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 50, //set 25, was 500\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return this.get('blastEvents').map(function(event) {\n                return {\n                    type: 'Blast',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n            var chartData = { values: item.get(\"values\") };\n\n            var modelName = this.get('chartDataModelName');\n\n            if (modelName === 'strain-values' || modelName === 'load-values') { \n                var plated = this.get('instrument').get('plated');\n                var type = this.get('instrument').get('instrumentType').get('title');\n                //console.log(type);\n                \n                if (type === 'dCable') {\n                    chartData.values.splice(0,1);\n                    chartData.values.unshift(0);\n                    if(plated) {\n                        chartData.values.push(chartData.values[chartData.values.length - 1]);\n                    } else {\n                        chartData.values.push(0);\n                    }\n                } else if (type === 'dExto') {\n                    chartData.values.unshift(chartData.values[0]);\n                }\n            }\n                        \n            return chartData;\n        } catch (error) {\n            return [];\n        }\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n        try {\n            return { values: item.get(\"values\") };            \n        } catch (error) {\n            return [];\n        }\n    }),\n\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n\n/*         if (this.get('instrument').get('instrumentType').get('title') == 'dRebar') {\n            for(let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                anchorDistances[ctr] = (ctr) + '-' + anchorDistances[ctr];\n            }\n\n            for(let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                anchorDistances[ctr] = (ctr) + '-' + anchorDistances[ctr];\n            }\n        }\n */\n        var modelName = this.get('chartDataModelName');\n        //if (this.get('instrument').get('instrumentType').get('title') != 'dRebar') {\n            if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {\n                anchorDistances.splice(0, 1);\n            }\n        //}\n\n        if (modelName === 'axial-displacement-values') {\n            if (this.get('instrument').get('stacked')) {\n                let half_anchors = (anchorDistances.length / 2) + 1;\n                let gauge = this.get('instrument').get('gaugeLength');\n                while (anchorDistances.length > half_anchors) {\n                    anchorDistances.pop();\n                }\n                anchorDistances[0] = anchorDistances[1] - gauge;\n            } else {\n                let last = anchorDistances[anchorDistances.length-1];\n                anchorDistances.sort(function(a,b){return a-b;});\n                let gauge = this.get('instrument').get('gaugeLength');\n                //console.log('gauge: ' + gauge);\n                anchorDistances.forEach(function(item, index) {\n                    anchorDistances[index] = item - gauge;\n                    //console.log(item);\n                });\n                //anchorDistances.push(this.get('instrument').get('instrumentLength') * 1000);\n                anchorDistances.shift();\n                anchorDistances.push(last);\n            }\n        }\n\n\n\n\n        return anchorDistances;\n    }),\n\n    anchorAXDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n\n        let midPoints = [];\n\n        if(this.get('instrument').get('stacked')) {\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            \n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n\n            let midLeft = [];\n            for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n            }\n            midPoints = midLeft;\n        } else { //staggered\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n    \n            midPoints = $.map(anchorDistances.slice(1, center + 1), function(v, i) {\n                return [v, anchorDistances.slice(center + 1)[i]];\n              });\n\n            midPoints.unshift(headExclusion);\n            let mid_temp = [];\n            for(let ctr = 1;ctr < midPoints.length; ctr++) {\n                mid_temp.push((midPoints[ctr - 1] + midPoints[ctr]) / 2);\n            }\n            midPoints = mid_temp;\n\n            if (modelName === 'bending-strain-values') {\n                midPoints.shift();\n                midPoints.pop();\n            }    \n            \n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n        \n        //console.log(midPoints);\n        \n        return midPoints;\n    }),\n\n    anchorBXDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n\n        let midPoints = [];\n\n        if(this.get('instrument').get('stacked')) {\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            \n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n\n            let midLeft = [];\n            for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n            }\n            midPoints = midLeft;\n        } else {\n\n        let center = anchorDistances.length - 1;\n        center = Math.ceil(center / 2);\n\n        midPoints = $.map(anchorDistances.slice(1, center + 1), function(v, i) {\n            return [v, anchorDistances.slice(center + 1)[i]];\n          });\n            midPoints.shift();\n            midPoints.pop();                  \n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n\n        return midPoints;\n    }),\n\n    // calculate mid distances between anchors for strain values\n    anchorMidDistances: computed('anchorDistances', function() {\n        let anchorDistances = copy(this.get('anchorDistances')),\n            dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            midDistances = []\n        ;\n\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n            if (this.get('instrument').get('stacked')) {\n                anchorDistances.shift(0);\n                let finalSize = anchorDistances.length / 2;\n                while (anchorDistances.length > finalSize) {\n                    anchorDistances.pop(finalSize);\n                }\n                anchorDistances.unshift(this.get('instrument').get('headExclusionLength'));\n            } else { //staggered\n\n            }\n        } else { //not rebar\n            anchorDistances.unshift(0);\n        }\n\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            let mid = (anchorDistances[i] + anchorDistances[i + 1]) / 2;\n            midDistances.push( +mid.toFixed(2) );\n        }\n\n        if(type === 'dCable') {\n            midDistances.splice(0,1);\n            //midDistances.unshift(0);\n            midDistances[0] = 0;\n            var len = this.get('instrument').get('length');\n            var length = this.get('instrument').get('instrumentLength');\n\n            var modelName = this.get('chartDataModelName');\n            if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {    \n                if(length !== null && length !== 0) {\n                    midDistances.push(length);\n                } else {\n                    midDistances.push(anchorDistances[anchorDistances.length - 1]);\n                }\n            }\n        }\n        // console.log(\"Anchors: \" + anchorDistances);\n         //console.log(\"Mids: \" + midDistances);\n\n        return midDistances;\n    }),\n\n    anchorColors: d3.scale.category10().range(),\n\n    anchorDistancesChartReferencePoints: computed('chartDataModelName', 'instrument', 'anchorDistances', 'anchorMidDistances', 'anchorAXDistances', 'anchorBXDistances', function() {\n        let anchorDistances = this.get('anchorDistances');\n        var modelName = this.get('chartDataModelName');\n        var anchorMidDistances = this.get('anchorMidDistances');\n\n        //console.log(this.get('instrument').get('instrumentTypeID'));\n\n        if(this.get('instrument').get('instrumentTypeID') === 3) {//rebar \n            if(this.get('instrument').get('stacked')) { //is stacked\n                if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                    anchorDistances = this.get('anchorAXDistances');\n                } else if (modelName === 'bending-strain-values') {\n                    anchorDistances = this.get('anchorBXDistances');\n                }\n            } else { //is NOT stacked\n                if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                    anchorDistances = this.get('anchorAXDistances');\n                } else if (modelName === 'bending-strain-values') {\n                    anchorDistances = this.get('anchorBXDistances');\n                }\n            }\n        }\n\n        if (this.get('instrument').get('instrumentType').get('title') !== 'dRebar') {\n            if(modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                return anchorMidDistances.map(function(anchorDistance){\n                    return {\n                        key: anchorDistance,\n                        type: 'referencePoints',\n                        values: [\n                            anchorDistance\n                        ]\n                    };\n                });\n                    \n            }\n        }\n\n        return anchorDistances.map(function(anchorDistance){\n            return {\n                key: anchorDistance,\n                type: 'referencePoints',\n                values: [\n                    anchorDistance\n                ]\n            };\n        });\n    }),\n\n    inlineHoverValuesSideOffset: computed('chartDataModelName', function() {\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'load-values') {\n            return 28;\n        } else if((modelName === 'axial-strain-values' || modelName === 'bending-strain-values') && this.get('instrument').get('stacked')) {\n            return 28;\n        }\n        return 0;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints'),\n            anchorDistances = this.get('anchorDistances'),\n            anchorAXDistances = this.get('anchorAXDistances'),\n            anchorBXDistances = this.get('anchorBXDistances'),\n            anchorDistancesChartReferencePoints = this.get('anchorDistancesChartReferencePoints'),\n            anchorMidDistances = this.get('anchorMidDistances')\n        ;\n        let zoomChartLinesData = [];\n\n        var modelName = this.get('chartDataModelName');\n\n        \n        if ((modelName === 'strain-values' || modelName === 'load-values') && this.get('instrument').get('instrumentType').get('title') !== 'dRebar') { \n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorMidDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else if (modelName === 'axial-strain-values' || modelName === 'load-values' ) {//&& !this.get('instrument').get('stacked')) {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorAXDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else if (modelName === 'bending-strain-values' ) { //&& !this.get('instrument').get('stacked')) {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorBXDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (anchorDistancesChartReferencePoints) {\n            zoomChartLinesData = zoomChartLinesData.concat(anchorDistancesChartReferencePoints);\n        }\n\n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        var modelName = this.get('chartDataModelName');\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        if(type === 'dCable') {\n            if(modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                //console.log(fullRangeDataPoints);\n                fullRangeDataPoints.forEach(element => element.values[0]=0);\n            }\n        }\n        \n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[chartLineIndex]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n    }),\n\n    numLines: computed('zoomTimePoints', function() {\n        return this.get('zoomTimePoints').length;\n    }),\n\n    lineDrawDelay: computed('numLines', function() {\n        return (13000 / (this.get('numLines') + 1)) ^ (1 / 20);\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            inlineHoverValuesSideOffset = _this.get('inlineHoverValuesSideOffset'),\n            progressAnimationDuration = _this.get('progressAnimationDuration'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-focus-svg')\n            ;\n            let yAxisLegend = this.get('yAxisLegend');\n            let apiCallsPromises = [yAxisLegend];\n \n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n\n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let axisName = '';\n                let units = chartData.get('units');\n                switch(yAxisLegend.get('title')) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    case 'axial_strain':\n                        axisName = \"Axial Strain\";\n                        units = \"%\";\n                        break;\n                    case 'bending_strain':\n                        axisName = \"Bending Strain\";\n                        units = \"%\";\n                        break;\n                    case 'axial_displacement':\n                        axisName = \"Axial Displacement\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n                \n                if(yAxisLegend.get('title')==='load') {\n                    title = axisName + \" (kN)\";\n                } else {\n                    title = axisName + \" (\" + units + \")\";\n                }\n            }\n\n            let zoomChart = nv.models.lineChartProgressAnimationAPI()\n                .margin({top: 55, right: 10, bottom: 85, left: 60})\n                .useInteractiveGuideline(false)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .distXAxisScale(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .showLegend(true)\n                .progressAnimationDuration(progressAnimationDuration)\n                .showXAxis(true)\n                .noData('No usable data')\n                ;\n\n\n            let length = 0;\n            try {\n                length = _this.instrument.get('instrumentLength');\n                let type = _this.instrument.get('instrumentType');\n                if (type === 'dRebar') {\n                    length = length * 1000;\n                }\n                \n            } catch (ex) {\n\n            }\n            \n            if(length !== null && length === 0) {\n                length = 0;\n            }\n\n            zoomChart.forceX([0, length]);\n/*             if (yAxisLegend.get('title') != 'bending_strain' && yAxisLegend.get('title') != 'axial_strain') {\n                \n            }\n */\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .tickFormat(d3.format(\".2f\"))\n                    // .tickFormat(function(d) {\n                    //     let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                    //     return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    // })\n                    ;\n                zoomChart.yAxis\n                    .axisLabel(title)\n                    .tickFormat(d3.format(\".2f\"));\n\n                zoomChart.distXAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .ticks(5)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(45)\n                    .isDistXTooltip(isDistXTooltip)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2);\n\n                //zoomChart.legend.inlineHoverValuesSideOffset(inlineHoverValuesSideOffset);\n\n                zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n\n                }\n\n/*                 zoomChart.xAxis.dispatch.on('xAxisMouseMove', function (mouseMove) {\n                    console.log('test');\n                });\n */\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log('test');\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n\n                    if (!seismicEventsArray.length || !blastEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (!activeTooltipContent) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                return zoomChart;\n            });\n\n            // declare fullRangeChart because later in zoom chart we need axis from fullRangeChart for events axis on zoomChart\n            let fullRangeChart = nv.models.focus(nv.models.line())\n               .margin({top: 10, right: 10, bottom: 30, left: 60})\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .syncBrushing(false)\n                .independentBrushing(true)\n                .showXAxis(true)\n                .showYAxis(false)\n                ;\n\n\n            nv.addGraph(function() {\n\n                fullRangeChart.xAxis\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n                fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n                fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(fullRangeChart.update);\n\n                // set zoom based on query params if set\n                let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n                let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n                if (startTimestamp && endTimestamp) {\n                    fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n                }\n\n                return fullRangeChart;\n            });\n\n        });\n\n    }\n\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n//import JSONAPISerializer from '@ember-data/serializers/json';\n\nexport default Component.extend({\n\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    // vibeEventsChartDistXData: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log('vibeEvents');\n    //     //console.log(events);\n    //     if ( this.get('vibeEvents') ) {\n    //         return [{\n    //             key: 'BluVibe',\n    //             type: 'distX',\n    //             color: '#80bf5c',\n    //             values: this.get('vibeEvents').map(function(event) {\n    //                 return [\n    //                     moment( event.get('id') ).valueOf(),\n    //                     event.get('size') ? (event.get('size') * -20) + 20 : 20\n    //                 ];\n    //             })\n    //         }];\n    //     }\n    //     return false;\n    // }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            let data_set = this.get('blastEvents').map(function(event) {\n                //console.log(event.get('timestamp'));\n                return {\n                    type: 'Blast',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n            //console.log(data_set);\n            return data_set;\n        }\n        return false;\n    }),\n\n    // vibeEventsArray: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log(events);\n    //     if ( events ) {\n    //         return events.map(function(event) {\n    //             return {\n    //                 type: 'BluVibe',\n    //                 time: event.get('id'),\n    //                 timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n    //                 ppa: event.get('ppa'),\n    //                 ppv: event.get('ppv'),\n    //                 freq: event.get('frequency')\n    //             };\n    //         }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n    //     }\n    //     return false;\n    // }),\n\n    zoomTempPoints: map('zoomTempData', function(item){\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        return chartData;\n    }),\n\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n\n        //console.log(linesKyes);\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        var modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') { \n            var plated = this.get('instrument').get('plated');\n            \n            if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n                if(plated) {\n                    chartData.values[0] = chartData.values[1];\n                } else {\n                    chartData.values[0] = 0;\n                }\n            } else {\n                //chartData.values.unshift(0);\n            }\n            chartData.values.push(0);\n        }\n        //console.log(chartData);\n        return chartData;\n        } catch(e) { return { values: [] }; }\n    }),\n\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n\n/*     fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        if(instType === 'Tilt') {\n            return ['X','Y','Z'];\n        } else if(instType === 'Wire') {\n            let anchors = [];\n            let numPorts = this.instrument.get('portsNum');\n            let startVal = 0;\n            let maxVal = numPorts;\n/*             if (this.port != '') {\n                //startVal = (1 * this.port) - 1;\n                startVal = (1 * numPorts) - 1;\n                maxVal = startVal + 1;\n            }\n */            for(let ctr = startVal; ctr < maxVal; ctr++) {\n                anchors.push('T' + (ctr + 1));\n                anchors.push(ctr + 1);\n            }\n            return anchors;\n        } else if(instType === 'BluVibe') {\n            return ['Data'];\n        }\n        let chartData = this.get('fullRangeChartData');\n        let dataValuesCount;\n        try {\n            dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n        let anchors = this.get('instrument').get('anchors');\n        \n        const arr = anchors.content ?? anchors;\n        \n        let anchorDistances = arr.map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        //anchorDistances.push('T'); //TODO: add temperature\n\n        //IF chart is Strain-Values chart\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') { \n            var midPoints = [];\n            if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n                //Adjust anchors to mid points between anchors\n                for(var ctr = 1; ctr < anchorDistances.length ; ctr++) {\n                    var mid = (anchorDistances[ctr - 1] + anchorDistances[ctr]) / 2;\n                    midPoints[ctr] = + mid.toFixed(2);\n                }\n\n                //console.log(midPoints);\n\n                //add zero point and end point\n                midPoints.splice(0,1);\n                midPoints[0] = 0;\n                midPoints.push(anchorDistances[anchorDistances.length - 1]);  //TODO: change to length of exto once known\n                //console.log(midPoints);\n            } else if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n                //Adjust anchors to mid points between anchors\n                //console.log(this.get('instrument'));\n                let headExclusion = this.get('instrument').get('headExclusionLength');\n                let leftAnchors = [headExclusion];\n                let rightAnchors = [headExclusion];\n                \n                let center = anchorDistances.length - 1;\n                center = Math.ceil(center / 2);\n\n                leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n\n                let midLeft = [];\n                for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                    midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                }\n\n                let midRight = [];\n                for(var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                    midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                }\n\n                if (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values') {\n                    if(this.get('instrument').get('stacked')) {\n                        midPoints = midLeft;\n                        if (modelName === 'load-values') {\n                            midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n                        }\n                    } else {\n                        midPoints = midLeft.concat(midRight);\n                        /* midPoints = $.map(midPoints.slice(1, center + 1), function(v, i) {\n                            return [v, midPoints.slice(center + 1)[i]];\n                          }); */\n                        if (modelName === 'bending-strain-values') {\n                            midPoints.shift();\n                            midPoints.pop();\n                        }\n\n                    }\n                } else {\n                    midPoints = midLeft.concat(midRight);\n                }\n                if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                    for(let ctr = 0; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n  \n/*                     for(let ctr = 0; ctr < midPoints.length / 2; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n        \n                    for(let ctr = 3; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n */                }\n            } else {\n                for(var ctr = 0; ctr < anchorDistances.length-1; ctr++) {\n                    midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n                }\n            }\n            if(modelName==='displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        } else if (modelName === 'axial-displacement-values' && this.get('instrument').get('stacked')) {\n            let mid = (anchorDistances.length - 1) / 2;\n            while (anchorDistances.length > (mid + 1)) {\n                anchorDistances.pop();\n            }\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else if (modelName === 'axial-displacement-values' && !this.get('instrument').get('stacked')) {\n            anchorDistances.sort(function(a,b){return a-b;});\n\n            //anchorDistances.push(this.get('instrument').get('instrumentLength') * 1000);\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else {\n            if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n                if (modelName === 'displacement-values') { //rebar stretch\n                    var midPoints = [];\n                    let headExclusion = this.get('instrument').get('headExclusionLength');\n                    let leftAnchors = [headExclusion];\n                    let rightAnchors = [headExclusion];\n                    \n                    let center = anchorDistances.length - 1;\n                    center = Math.ceil(center / 2);\n    \n                    leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                    rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n    \n                    if(!this.get('instrument').get('stacked')) {\n                        rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n                    }\n    \n                    let midLeft = [];\n                    for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                        midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                    }\n    \n                    let midRight = [];\n                    for(var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                        midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                    }\n\n                    midPoints = midLeft.concat(midRight);\n                    anchorDistances = midPoints;\n\n                    anchorDistances.unshift(0);\n                }\n                for(let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n    \n                for(let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n            }    \n        }\n        //console.log(anchorDistances);\n        return anchorDistances;\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n            const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTempPoints = this.get('zoomTempPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n\n        //console.log(blastEventsChartDistXData);\n        //console.log(vibeEventsChartDistXData);\n\n        let anchorDistances = this.get('anchorDistances'),\n            zoomChartLinesData = []\n        ;\n\n        if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n            var mName = _this.get('chartDataModelName');\n            if (mName === 'strain-values' || mName === 'strain-rate-values' || mName === 'load-values') {\n                zoomDataPoints.forEach(element => element.values[0] = 0);\n            }\n        }    \n\n/*         if (this.get('instrument').get('instrumentType').get('title') == 'Tilt') {\n                zoomDataPoints.forEach(element => element.values.shift());\n        }    \n */\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n        //console.log(zoomTempPoints.length);\n\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            if (_this.get('chartDataModelName') !== 'displacement-values' && this.get('instrument').get('instrumentType').get('title') !== 'BluVibe'){\n                while(zoomTempPoints.length > zoomDataPoints.length) {\n                    zoomTempPoints.pop();\n                    zoomTempPoints.shift();\n                }\n            }\n            var temp = {key: 'T',\n                type: 'lines',\n                yAxis: 2,\n                values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null,\n                    ];\n                })\n            };\n            //console.log(temp);\n            zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                    ];\n                })\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            //vibeEventsArray = this.get('vibeEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        //console.log(vibeEventsArray);\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n                \n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let instType = _this.instrument.get('instrumentType').get('title');\n\n                let axisName = '';\n                let units = chartData.get('units');\n                title = '';\n                if (instType === 'BluVibe') {\n                    title = _this.get('chartDataModelName');\n                } else {\n                    title = yAxisLegend.get('title');\n                }\n                \n                switch(title) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    case 'axial_strain':\n                        axisName = \"Axial Strain\";\n                        units = \"%\";\n                        break;\n                    case 'bending_strain':\n                        axisName = \"Bending Strain\";\n                        units = \"%\";\n                        break;\n                    case 'axial_displacement':\n                        axisName = \"Axial Displacement\";\n                        break;\n                    case 'temperature':\n                        axisName = \"Temperature\";\n                        units = \"°C\";\n                        break;\n                    case 'event-frequency':\n                        axisName = \"Event Frequency\";\n                        break;\n                    case 'event-ppv':\n                        axisName = \"Event PPV\";\n                        break;\n                    case 'event-ppa':\n                        axisName = \"Event PPA\";\n                        break;\n                    case 'cumulative-event-frequency':\n                        axisName = \"Cumulative Frequency\";\n                        break;\n                    case 'cumulative-event-ppv':\n                        axisName = \"Cumulative PPV\";\n                        break;\n                    case 'cumulative-event-ppa':\n                        axisName = \"Cumulative PPA\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                        //console.log(title);\n                }\n\n                /* let chartName = yAxisLegend.get('title').capitalize();\n                let chartNameL = chartName.substr(0, chartName.indexOf('_'));\n                let chartNameR = chartName.substr(chartName.indexOf('_') + 1).capitalize();\n                if(chartNameL !== \"\") {\n                    chartName = chartNameL + \" \" + chartNameR;\n                } */\n\n                if (yAxisLegend) {\n                    let raw = _this.raw;\n                    if(yAxisLegend.get('title')==='load') {\n                        title = axisName +  \" (kN)\";\n                    } else if (instType === 'Wire') {\n                        if (raw === true) {\n                            title = \"Frequency (Hz)\";\n                        } else {\n                            title = \"Calculated Values\";\n                        }\n                    } else {\n                        title = axisName + \" (\" + units + \")\";\n                    }\n                } else {\n                    if (instType === 'BluVibe') {\n                        title = axisName;\n                    } else {\n                        title = axisName + \" (\" + units + \")\";\n                    }\n                }\n                //title = yAxisLegend.get('unit');\n            }\n\n            function usesPoints(chartName) {\n                //console.log(chartName);\n                switch(chartName) {\n                    case 'event-ppv':\n                    case 'event-ppa':\n                        return true;\n                }\n                return false;\n            }\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(usesPoints(_this.get('chartDataModelName')))\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data')\n            ;\n\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                if (_this.instrument.get('instrumentType').get('title') === 'Tilt') {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".3f\"));\n                    zoomChart.legend.numDecimals(3);\n                } else {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                }\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n\n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(vibeEventsArray);\n                    //console.log(distXMouseMove);\n/* \n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    } */\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length){//} || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            //activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) { _this.setData(zoomChartLinesData); }\n                if (_this.setChart) { _this.setChart(zoomChart); }\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n\n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    isModalOpen: false,\n    modalMode: 'add', // 'add' | 'edit'\n    modalEditingRowId: null,\n\n    // Per-anchor labels:\n    //   tableLabel — what shows in the table column header (raw distance value, legacy behavior).\n    //                Empty string when distance is missing.\n    //   modalLabel — what shows as the modal field label (\"Anchor 1\", \"Anchor N/A\" per spec).\n    anchorLabels: computed('instrument', function(){\n        const anchors = this.get('instrument') ? this.get('instrument').get('anchors') : null;\n        const arr = (anchors && (anchors.content ?? anchors)) || [];\n        let validCounter = 0;\n        return arr.map((anchor, idx) => {\n            const distance = anchor.get ? anchor.get('distance') : (anchor && anchor.distance);\n            const isUnset = (distance == null || distance === '');\n            if(isUnset){\n                return { index: idx, tableLabel: '', modalLabel: 'Anchor N/A', isUnset: true };\n            }\n            validCounter += 1;\n            return { index: idx, tableLabel: String(distance), modalLabel: `Anchor ${validCounter}`, isUnset: false };\n        });\n    }),\n\n    columnSpecs: computed('anchorLabels', function(){\n        const anchors = this.get('anchorLabels') || [];\n        const out = anchors.map((a) => ({\n            key: `anchor_${a.index}`,\n            label: a.modalLabel,\n            tableLabel: a.tableLabel,\n            valuesIndex: a.index,\n        }));\n        out.push({ key: '__temp__', label: 'Temperature', tableLabel: 'Temperature', isTemp: true });\n        return out;\n    }),\n\n    tableRows: computed('displacementData.[]', 'temperatureData.[]', 'columnSpecs', 'globalDatetimeFormat.value', function(){\n        const dispData = this.get('displacementData') || [];\n        const tempData = this.get('temperatureData') || [];\n        const specs = this.get('columnSpecs') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n\n        const tempById = {};\n        tempData.forEach(r => { tempById[r.id] = r; });\n\n        return dispData.map((dispRow) => {\n            const id = dispRow.id;\n            const dispValues = (dispRow.values || dispRow.get?.('values') || []);\n            const tempRow = tempById[id];\n            const tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n\n            const cells = specs.map((spec) => {\n                let value = '';\n                if(spec.isTemp){\n                    value = tempValues[0];\n                }else{\n                    value = dispValues[spec.valuesIndex];\n                }\n                return { key: spec.key, label: spec.label, value: value == null ? '' : value };\n            });\n            const formattedDate = moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt);\n            return { id, date: id, formattedDate, cells };\n        });\n    }),\n\n    modalFields: computed('columnSpecs', 'modalMode', 'modalEditingRowId', 'tableRows.[]', function(){\n        const specs = this.get('columnSpecs') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingRowId');\n\n        let existingRow = null;\n        if(mode === 'edit' && editingId){\n            existingRow = (this.get('tableRows') || []).find(r => r.id === editingId);\n        }\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && existingRow\n                ? moment(existingRow.date, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm')\n                : moment().format('YYYY-MM-DDTHH:mm'),\n        };\n\n        const cellByKey = {};\n        if(existingRow){\n            existingRow.cells.forEach(c => { cellByKey[c.key] = c.value; });\n        }\n\n        const channelFields = specs.map((spec) => ({\n            key: spec.key,\n            label: spec.label,\n            type: 'text',\n            value: cellByKey[spec.key] != null ? cellByKey[spec.key] : '',\n        }));\n\n        return [dateField, ...channelFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function(){\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingRowId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingRowId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const instrumentId = this.get('instrument.id');\n            const dispData = this.get('displacementData');\n            const tempData = this.get('temperatureData');\n            const dispRow = dispData ? dispData.find(r => r.id === rowId) : null;\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            const promises = [];\n            if(dispRow && dispRow.deleteRecord){ dispRow.deleteRecord(); promises.push(dispRow.save(adapterOptions)); }\n            if(tempRow && tempRow.deleteRecord){ tempRow.deleteRecord(); promises.push(tempRow.save(adapterOptions)); }\n            Promise.all(promises)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const specs = this.get('columnSpecs') || [];\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            const dispValues = [];\n            specs.forEach((spec) => {\n                if(spec.isTemp){ return; }\n                dispValues.push(Number(snapshot[spec.key]) || 0);\n            });\n            const tempValues = [Number(snapshot['__temp__']) || 0];\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingRowId');\n\n            const tempData = this.get('temperatureData') || [];\n            const dispData = this.get('displacementData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            if(isEdit && originalId === newId){\n                const tempRow = findRow(tempData, originalId);\n                const dispRow = findRow(dispData, originalId);\n                const promises = [];\n                if(tempRow){ tempRow.set('values', tempValues); promises.push(tempRow.save(adapterOptions)); }\n                if(dispRow){ dispRow.set('values', dispValues); promises.push(dispRow.save(adapterOptions)); }\n                Promise.all(promises).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                const oldDisp = findRow(dispData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n                if(oldDisp){ oldDisp.deleteRecord(); oldDisp.save(adapterOptions); }\n            }\n\n            const tempRecord = store.createRecord('temperature-value', { id: newId, values: tempValues });\n            tempRecord.save(adapterOptions);\n\n            const dispRecord = store.createRecord('displacement-value', { id: newId, values: dispValues });\n            dispRecord.save(adapterOptions).then(refreshRoute).catch(handleErr);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    tagName: 'th',\n    orderingAscending: false,\n\n    isSelectedSort: computed('selectedSortProperty', 'sortProperty', function() {\n        let selectedSortProperty = this.get('selectedSortProperty');\n        if ( selectedSortProperty ) {\n            if ( selectedSortProperty.indexOf('-') === 0 ) {\n                selectedSortProperty = selectedSortProperty.substring(1);\n            }\n            return selectedSortProperty === this.get('sortProperty');\n        }\n    }),\n\n    actions: {\n        sortBy: function(sortProperty) {\n            //console.log('sorting');\n            this.toggleProperty('orderingAscending');\n\n            if ( this.get('orderingAscending') ) {\n                sortProperty = '-' + sortProperty;\n            }\n            this.sort(sortProperty);\n        }\n    }\n\n})","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n});","import Component from '@ember/component';\n\nexport default class SvgInstrumentComponent extends Component {\n  // Default values\n  get height() {\n    return this.args.height || 500;\n  }\n\n  get width() {\n    return this.args.width || 500;\n  }\n\n  get orientation() {\n    return this.args.orientation || 'horizontal';\n  }\n\n  get anchors() {\n    return this.args.anchors || true;\n  }\n\n  get type() {\n    return this.args.type || 'stacked';\n  }\n}\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    router: service(),\n\n    init() {\n        this._super(...arguments);\n    },\n    actions: {\n    },\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\n\n\nexport default Component.extend({\n    session: service(),\n\n    //Assume passing in: \n    //tempUnits: from Project Setting, the actual array of supported temp units \n    //initValue: c or f\n\n    //IF YOU WANT TO USE THIS COMPONENT, YOUR PARENT COMPONENT NEEDS TO ADD ACTION: updateTempDropdownUnit\n    init() {\n        this._super(...arguments);\n    },\n    getTempUnitsArr: computed(\"tempUnits\",function(){\n        try{\n            return this.arrayCastString(this.get(\"tempUnits\").value);\n        }\n        catch(error){\n            console.log(\"Error in getTempUnitsArr: \" + error);\n        }\n    }),\n    arrayCastString:function(strArr){\n        try{\n            return strArr.split(',');\n        }\n        catch(error){\n            console.log(\"Error in arrayCastString: \" + error);\n            return [];\n        }\n    },\n    actions: {\n        selectedValue(value){\n            \n            if (this.onChange) this.onChange(value);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n});","import Component from '@ember/component';\n\nexport default class BaseTemporalChartDropdownComponent extends Component {\n    \n    constructor() {\n        super(...arguments);\n    }\n}\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n\n});","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nexport default Component.extend({\n    store: service(),\n    _spatialChart: null,\n\n    // anchor distances from instrument anchors, trimmed for strain-values\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        const firstObject = this.get('zoomChartData').get('firstObject');\n        if (!firstObject) { return []; }\n        const dataValuesCount = firstObject.get ? (firstObject.get('values')?.length ?? 0) : (firstObject.values?.length ?? 0);\n        const anchors = this.get('instrument').get('anchors');\n        let anchorDistances = (anchors.content ?? anchors).map(anchor => anchor.get('distance'));\n\n        const modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && modelName === 'strain-values') {\n            anchorDistances.splice(0, 1);\n        }\n        return anchorDistances;\n    }),\n\n    // midpoints between anchor distances for strain-values\n    anchorMidDistances: computed('anchorDistances', function() {\n        const anchorDistances = [...this.get('anchorDistances')];\n        const midDistances = [];\n        anchorDistances.unshift(0);\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            midDistances.push(+((anchorDistances[i] + anchorDistances[i + 1]) / 2).toFixed(2));\n        }\n        return midDistances;\n    }),\n\n    // x-axis depth values for the spatial chart\n    spatialXValues: computed('anchorDistances', 'anchorMidDistances', 'chartDataModelName', function() {\n        const modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            return this.get('anchorMidDistances');\n        }\n        return this.get('anchorDistances');\n    }),\n\n    // spatial lines: one line per timestamp reading (X = depth, Y = displacement)\n    spatialChartLinesData: computed('zoomChartData', 'spatialXValues', 'chartDataModelName', function() {\n        const zoomChartData = this.get('zoomChartData');\n        const xValues = this.get('spatialXValues');\n        const modelName = this.get('chartDataModelName');\n\n        return zoomChartData.map((item) => {\n            let values = item.get('values') || [];\n            // strain-values: prepend duplicate of first value (matching NVD3 behavior)\n            if (modelName === 'strain-values') {\n                values = [values[0], ...values];\n            }\n            return {\n                key: moment(item.get('id')).format('DD MMM YYYY HH:mm'),\n                timestamp: item.get('id'),\n                values: values.map((v, idx) => ({\n                    x: xValues[idx] !== undefined ? xValues[idx] : null,\n                    y: v !== undefined ? v : null\n                })).filter(pt => pt.x !== null)\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        const chartDataModelName = this.get('chartDataModelName');\n        const chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes')\n        }));\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        const title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName');\n                units = \"kN\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n\n        const spatialLinesData = this.get('spatialChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildSpatialChart(spatialLinesData, yAxisTitle);\n        });\n    },\n\n    _buildSpatialChart(linesData, yAxisTitle) {\n        const canvas = this.element.querySelector('canvas.chartjs-spatial');\n        if (!canvas) return;\n\n        let instrumentLength = 0;\n        try {\n            instrumentLength = this.instrument.get('instrumentLength') || 0;\n        } catch (e) { /* ignore */ }\n\n        const anchorXValues = this.get('spatialXValues');\n\n        const lineDatasets = linesData.map((line, i) => ({\n            label: line.key,\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            parsing: false,\n            _isLine: true\n        }));\n\n        // Anchor reference datasets: hidden from the chart (drawn by plugin instead)\n        // but still needed for legend generation\n        const anchorDatasets = anchorXValues.map((dist, i) => ({\n            label: String(dist),\n            data: [],\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            borderWidth: 0,\n            pointRadius: 0,\n            showLine: false,\n            _isRef: true\n        }));\n\n        const datasets = [...lineDatasets, ...anchorDatasets];\n\n        // \"No data\" overlay plugin\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds._isRef) return;\n                    if (!ds.hidden) ds.data.forEach(pt => { if (pt && pt.y != null) hasData = true; });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data available', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        // Plugin: draw anchor reference dots pinned to the bottom of the chart area\n        const anchorDotsPlugin = {\n            id: 'anchorDots',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                const yArea = chart.chartArea.bottom;\n                const ctx = chart.ctx;\n\n                anchorXValues.forEach((dist, i) => {\n                    const px = xScale.getPixelForValue(dist);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.arc(px, yArea, 6, 0, 2 * Math.PI);\n                    ctx.fillStyle = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                    ctx.fill();\n                    ctx.restore();\n                });\n            }\n        };\n\n        // Crosshair plugin — vertical dashed line following cursor\n        let crosshairX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                if (crosshairX === null) return;\n                const { ctx, chartArea: { top, bottom } } = chart;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        // --- Legend-tooltip helpers ---\n        let legendTooltipEl = null;\n        let highlightedIndex = null;\n        let lastTooltipIdx = null;\n\n        function buildSpatialLegendItems(chart) {\n            return chart.data.datasets.filter(ds => ds._isLine).map((ds) => {\n                const i = chart.data.datasets.indexOf(ds);\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:1;margin-right:3px;\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div></div>`;\n            }).join('');\n        }\n\n        function highlightLine(chart, idx, skipUpdate) {\n            highlightedIndex = idx;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine) return;\n                ds.borderColor = (i === idx)\n                    ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                    : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '22';\n            });\n            if (!skipUpdate) chart.update('none');\n        }\n\n        function restoreLines(chart, skipUpdate) {\n            highlightedIndex = null;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine) return;\n                ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n            });\n            if (!skipUpdate) chart.update('none');\n        }\n\n        function attachSpatialLegendHandlers(el, chart) {\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                highlightLine(chart, parseInt(item.dataset.ds));\n            };\n            el.onmouseout = function() { restoreLines(chart); };\n        }\n\n        function initSpatialLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildSpatialLegendItems(chart);\n            attachSpatialLegendHandlers(legendTooltipEl, chart);\n        }\n\n        function distToSegment(px, py, x1, y1, x2, y2) {\n            const dx = x2 - x1, dy = y2 - y1;\n            const lenSq = dx * dx + dy * dy;\n            let t = lenSq === 0 ? 0 : Math.max(0, Math.min(1, ((px - x1) * dx + (py - y1) * dy) / lenSq));\n            const projX = x1 + t * dx, projY = y1 + t * dy;\n            const ex = px - projX, ey = py - projY;\n            return Math.sqrt(ex * ex + ey * ey);\n        }\n\n        function findClosestLine(chart, mouseX, mouseY) {\n            let closestIdx = -1, closestDist = Infinity;\n            chart.data.datasets.forEach((ds, i) => {\n                if (!ds._isLine || chart.getDatasetMeta(i).hidden) return;\n                const pts = chart.getDatasetMeta(i).data;\n                if (!pts || pts.length < 2) return;\n                for (let j = 0; j < pts.length - 1; j++) {\n                    const p1 = pts[j], p2 = pts[j + 1];\n                    if (!p1 || !p2) continue;\n                    const dist = distToSegment(mouseX, mouseY, p1.x, p1.y, p2.x, p2.y);\n                    if (dist < closestDist) { closestDist = dist; closestIdx = i; }\n                }\n            });\n            return { datasetIndex: closestIdx, pixelDist: closestDist };\n        }\n\n        function updateSpatialTooltip(chart, mouseX, mouseY) {\n            if (!legendTooltipEl) return;\n            const { left, right, top, bottom } = chart.chartArea;\n            if (mouseX < left || mouseX > right || mouseY < top || mouseY > bottom) {\n                if (highlightedIndex !== null) restoreLines(chart, true);\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildSpatialLegendItems(chart);\n                attachSpatialLegendHandlers(legendTooltipEl, chart);\n                lastTooltipIdx = null;\n                return;\n            }\n            const closest = findClosestLine(chart, mouseX, mouseY);\n            if (closest.datasetIndex < 0) return;\n            if (closest.datasetIndex !== highlightedIndex) {\n                highlightLine(chart, closest.datasetIndex, true);\n            }\n            const activeIdx = highlightedIndex != null ? highlightedIndex : closest.datasetIndex;\n            if (activeIdx !== lastTooltipIdx) {\n                lastTooltipIdx = activeIdx;\n                const ds = chart.data.datasets[activeIdx];\n                const valuesHtml = ds.data.map((pt, idx) => {\n                    const anchorColor = CHART_LINE_COLORS[idx % CHART_LINE_COLORS.length];\n                    return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${anchorColor};\"></div>${pt && pt.y != null ? pt.y.toFixed(2) : '—'}</div>`;\n                }).join('');\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = `<div class=\"legend-tooltip-date\">${ds.label}</div>${valuesHtml}`;\n            }\n        }\n\n        const spatialChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                parsing: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'nearest', intersect: false },\n                onHover(e) { if (e.x != null) { crosshairX = e.x; } },\n                scales: {\n                    x: {\n                        type: 'linear', min: 0,\n                        max: instrumentLength > 0 ? instrumentLength : undefined,\n                        title: { display: true, text: 'Depth (mm)', font: { size: 12 } },\n                        afterBuildTicks(axis) {\n                            const visibleAnchors = anchorXValues\n                                .filter(v => v >= axis.min && v <= axis.max)\n                                .map(v => ({ value: v }));\n                            if (visibleAnchors.length > 0) { axis.ticks = visibleAnchors; }\n                        },\n                        ticks: { callback(val) { return val.toLocaleString(); } }\n                    },\n                    y: {\n                        title: { display: true, text: yAxisTitle, font: { size: 12 } },\n                        ticks: { callback(val) { return val.toFixed ? val.toFixed(2) : val; } }\n                    }\n                },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                }\n            },\n            plugins: [noDataPlugin, anchorDotsPlugin, crosshairPlugin]\n        });\n\n        initSpatialLegendTooltip(canvas.parentElement, spatialChart);\n\n        // --- Scroll-to-zoom (both axes) ---\n        const origXMin = spatialChart.options.scales.x.min;\n        const origXMax = spatialChart.options.scales.x.max;\n        canvas.addEventListener('wheel', e => {\n            e.preventDefault();\n            const rect = canvas.getBoundingClientRect();\n            const xScale = spatialChart.scales['x'];\n            const yScale = spatialChart.scales['y'];\n            const factor = e.deltaY > 0 ? 1.15 : 0.87;\n            const cursorX = xScale.getValueForPixel(e.clientX - rect.left);\n            const cursorY = yScale.getValueForPixel(e.clientY - rect.top);\n            spatialChart.options.scales.x.min = cursorX - (cursorX - xScale.min) * factor;\n            spatialChart.options.scales.x.max = cursorX + (xScale.max - cursorX) * factor;\n            spatialChart.options.scales.y.min = cursorY - (cursorY - yScale.min) * factor;\n            spatialChart.options.scales.y.max = cursorY + (yScale.max - cursorY) * factor;\n            spatialChart.update('none');\n        }, { passive: false });\n\n        // --- Drag-to-pan (both axes) ---\n        let panStartX = null, panStartY = null;\n        let panXMin = null, panXMax = null, panYMin = null, panYMax = null;\n        canvas.addEventListener('mousedown', e => {\n            panStartX = e.clientX; panStartY = e.clientY;\n            panXMin = spatialChart.scales['x'].min; panXMax = spatialChart.scales['x'].max;\n            panYMin = spatialChart.scales['y'].min; panYMax = spatialChart.scales['y'].max;\n            canvas.style.cursor = 'grabbing';\n        });\n        canvas.addEventListener('mousemove', e => {\n            const rect = canvas.getBoundingClientRect();\n            const px = e.clientX - rect.left;\n            const py = e.clientY - rect.top;\n            const { left, right } = spatialChart.chartArea;\n            crosshairX = (px >= left && px <= right) ? px : null;\n            if (panStartX !== null) {\n                const xPxRange = spatialChart.chartArea.right - spatialChart.chartArea.left;\n                const yPxRange = spatialChart.chartArea.bottom - spatialChart.chartArea.top;\n                spatialChart.options.scales.x.min = panXMin - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.x.max = panXMax - ((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n                spatialChart.options.scales.y.min = panYMin + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n                spatialChart.options.scales.y.max = panYMax + ((e.clientY - panStartY) / yPxRange) * (panYMax - panYMin);\n            } else {\n                updateSpatialTooltip(spatialChart, px, py);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('mouseleave', () => {\n            crosshairX = null;\n            if (highlightedIndex !== null) restoreLines(spatialChart);\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildSpatialLegendItems(spatialChart);\n                attachSpatialLegendHandlers(legendTooltipEl, spatialChart);\n            }\n            spatialChart.update('none');\n        });\n        canvas.addEventListener('dblclick', () => {\n            spatialChart.options.scales.x.min = origXMin;\n            spatialChart.options.scales.x.max = origXMax;\n            spatialChart.options.scales.y.min = undefined;\n            spatialChart.options.scales.y.max = undefined;\n            spatialChart.update('none');\n        });\n        const onPanEnd = () => {\n            panStartX = panStartY = panXMin = panXMax = panYMin = panYMax = null;\n            canvas.style.cursor = 'default';\n        };\n        canvas.addEventListener('mouseup', onPanEnd);\n        document.addEventListener('mouseup', onPanEnd);\n\n        this.set('_spatialChart', spatialChart);\n    },\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const spatialChart = this.get('_spatialChart');\n        if (spatialChart) { spatialChart.destroy(); }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\n// Chart line colors — sourced from color-palette\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,    // #0077b6\n    colorPalette.orange2,   // #FF7444\n    colorPalette.green3,    // #2a9d8f\n    colorPalette.red1,      // #D25353\n    colorPalette.purple7,   // #8b5cf6\n    colorPalette.beige22,   // #b08968\n    colorPalette.pink6,     // #ec4899\n    colorPalette.gray5,     // #6b7280\n    colorPalette.teal6,     // #10b981\n    colorPalette.cyan4,     // #06b6d4\n];\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        if (instType === 'Tilt') {\n            return ['X', 'Y', 'Z'];\n        } else if (instType === 'Wire') {\n            let anchors = [];\n            let numPorts = this.instrument.get('portsNum');\n            for (let ctr = 0; ctr < numPorts; ctr++) {\n                anchors.push('T' + (ctr + 1));\n                anchors.push(ctr + 1);\n            }\n            return anchors;\n        } else if (instType === 'BluVibe') {\n            return ['Data'];\n        }\n\n        let anchors = this.get('instrument').get('anchors');\n        const arr = anchors.content ?? anchors;\n        let anchorDistances = arr.map(anchor => anchor.get('distance'));\n\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') {\n            var midPoints = [];\n            if (instType === 'dCable') {\n                for (var ctr = 1; ctr < anchorDistances.length; ctr++) {\n                    var mid = (anchorDistances[ctr - 1] + anchorDistances[ctr]) / 2;\n                    midPoints[ctr] = +mid.toFixed(2);\n                }\n                midPoints.splice(0, 1);\n                midPoints[0] = 0;\n                midPoints.push(anchorDistances[anchorDistances.length - 1]);\n            } else if (instType === 'dRebar') {\n                let headExclusion = this.get('instrument').get('headExclusionLength');\n                let leftAnchors = [headExclusion];\n                let rightAnchors = [headExclusion];\n\n                let center = anchorDistances.length - 1;\n                center = Math.ceil(center / 2);\n\n                leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n\n                let midLeft = [];\n                for (var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                    midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                }\n\n                let midRight = [];\n                for (var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                    midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                }\n\n                if (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values') {\n                    if (this.get('instrument').get('stacked')) {\n                        midPoints = midLeft;\n                        if (modelName === 'load-values') {\n                            midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n                        }\n                    } else {\n                        midPoints = midLeft.concat(midRight);\n                        if (modelName === 'bending-strain-values') {\n                            midPoints.shift();\n                            midPoints.pop();\n                        }\n                    }\n                } else {\n                    midPoints = midLeft.concat(midRight);\n                }\n\n                if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                    for (let ctr = 0; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr + 1) + '-' + midPoints[ctr];\n                    }\n                }\n            } else {\n                for (var ctr = 0; ctr < anchorDistances.length - 1; ctr++) {\n                    midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n                }\n            }\n            if (modelName === 'displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        } else if (modelName === 'axial-displacement-values' && this.get('instrument').get('stacked')) {\n            let mid = (anchorDistances.length - 1) / 2;\n            while (anchorDistances.length > (mid + 1)) {\n                anchorDistances.pop();\n            }\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else if (modelName === 'axial-displacement-values' && !this.get('instrument').get('stacked')) {\n            anchorDistances.sort(function(a, b) { return a - b; });\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else {\n            if (instType === 'dRebar') {\n                if (modelName === 'displacement-values') {\n                    var midPoints = [];\n                    let headExclusion = this.get('instrument').get('headExclusionLength');\n                    let leftAnchors = [headExclusion];\n                    let rightAnchors = [headExclusion];\n\n                    let center = anchorDistances.length - 1;\n                    center = Math.ceil(center / 2);\n\n                    leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                    rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                    if (!this.get('instrument').get('stacked')) {\n                        rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n                    }\n\n                    let midLeft = [];\n                    for (var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                        midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                    }\n\n                    let midRight = [];\n                    for (var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                        midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                    }\n\n                    midPoints = midLeft.concat(midRight);\n                    anchorDistances = midPoints;\n                    anchorDistances.unshift(0);\n                }\n                for (let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n                for (let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n            }\n        }\n        return anchorDistances;\n    }),\n\n    // Main chart sourced from zoomChartData to mirror NVD3 (Group By applies to visible chart).\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'anchorDistances', 'chartDataModelName', function() {\n        const anchorDistances = this.get('anchorDistances');\n        const fullRangeChartData = this.get('zoomChartData');\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values';\n\n        // For thermostring: use zoomTempData as main data source\n        // Each channel gets its own line from the temperature values array\n        const instType = this.instrument.get('instrumentType').get('title');\n        if (instType === 'Thermostring') {\n            const zoomTempData = this.get('zoomTempData');\n            if (zoomTempData && zoomTempData.length) {\n                const firstObj = zoomTempData.objectAt ? zoomTempData.objectAt(0) : zoomTempData[0];\n                const firstVals = firstObj ? (firstObj.get ? firstObj.get('values') : firstObj.values) || [] : [];\n                const numChannels = firstVals.length;\n                return anchorDistances.slice(0, numChannels).map((channelName, channelIndex) => ({\n                    key: String(channelName),\n                    values: zoomTempData.map(item => {\n                        const vals = item.get('values') || [];\n                        return {\n                            x: moment(item.get('id')).valueOf(),\n                            y: vals[channelIndex] !== undefined ? vals[channelIndex] : null\n                        };\n                    })\n                }));\n            }\n            return [];\n        }\n\n        const lines = anchorDistances.map((chartLineName, chartLineIndex) => ({\n            key: chartLineName,\n            values: fullRangeChartData.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[chartLineIndex] !== undefined) ? arr[chartLineIndex] : null\n                };\n            })\n        }));\n\n        // Add temperature overlay on y2 (unless viewing temperature data itself)\n        const zoomTempData = this.get('zoomTempData');\n        if (zoomTempData && zoomTempData.length) {\n            lines.push({\n                key: 'T (°C)',\n                yAxis: 'y2',\n                hidden: false,\n                values: zoomTempData.map(item => {\n                    const rawValues = item.get('values');\n                    const arr = Array.isArray(rawValues) ? rawValues : [];\n                    return {\n                        x: moment(item.get('id')).valueOf(),\n                        y: arr[0] !== undefined ? arr[0] : null\n                    };\n                })\n            });\n        }\n\n        return lines;\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        // Thermostring: always show Temperature (°C)\n        const instType = this.instrument.get('instrumentType').get('title');\n        if (instType === 'Thermostring') {\n            return 'Temperature (°C)';\n        }\n\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        let title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                units = this.get(\"yAxisUnit\") || getAttr('units');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'load':\n                axisName = getAttr('temporalLoadName') || 'Load';\n                units = 'kN';\n                break;\n            case 'axial_strain':\n                axisName = \"Axial Strain\";\n                units = \"%\";\n                break;\n            case 'bending_strain':\n                axisName = \"Bending Strain\";\n                units = \"%\";\n                break;\n            case 'axial_displacement':\n                axisName = \"Axial Displacement\";\n                break;\n            case 'temperature':\n                axisName = \"Temperature\";\n                units = \"°C\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const fullRangeChartLinesData = this.get('fullRangeChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildMainChart(fullRangeChartLinesData, yAxisTitle);\n            this._buildOverviewChart();\n        });\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        const datasets = anchorDistances.map((chartLineName, i) => ({\n            label: String(chartLineName),\n            data: fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        anchorDistances.forEach((chartLineName, i) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(chartLineName));\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed, get } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nfunction resetNewInstrumentObject(_this) {\n    //console.log('reset');\n    _this.set('newInstrumentObject', {});\n    //_this.set('name', null);\n    _this.set('zeroTimestamp', null);\n    _this.set('installDate', null);\n    //_this.set('east', null);\n    //_this.set('north', null);\n    //_this.set('depth', null);\n    //_this.set('azimuth', null);\n    //_this.set('dip', null);\n    //_this.set('instrumentType', 0);\n    //_this.set('headAt', 'HAC');\n    //_this.set('instrumentLength', 0);\n    //_this.set('strokeLength', 0);\n    //_this.set('referenceAnchor', null);\n    //_this.set('headExclusionLength', 0);\n    //_this.set('gaugeLength', 0);\n    //_this.set('bulbed', false);\n    //_this.set('plated', false);\n    //_this.set('stacked', false);\n    //_this.set('active', true);\n}\n\nexport default class CreatePackInstrument extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n    }\n\n    isAuthenticated = true;\n    newInstrumentObject = {};\n    headAt = 'HAC';\n    zeroTimestamp = null;\n    installDate = null;\n    authError = false;\n    project = null;\n    level = null;\n\n    actions= {\n\n        \n        setProject(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n\n\n\n\n        createInstrument(object){\n\n            //console.log(this.get('prevDup'));\n            //console.log((typeof this.get('prevDup') === \"undefined\"));\n\n            let _this = this,\n            store = this.get('store'),\n            newInstrumentObject = this.get('newInstrumentObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newInstrumentObject.id = this.get('id');\n            newInstrumentObject.zeroTimestamp = this.get('zeroTimestamp');\n            newInstrumentObject.installDate = this.get('installDate');\n            //newInstrumentObject.east = this.get('east');\n            //newInstrumentObject.north = this.get('north');\n            //newInstrumentObject.depth = this.get('depth');\n            newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n            newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n            newInstrumentObject.active = true;\n            newInstrumentObject.instrumentStiffness = 0;\n\n            if(typeof newInstrumentObject.id === 'undefined' || newInstrumentObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n\n            if (this.get('zeroTimestamp') != null) {\n                newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('installDate') != null) {\n                newInstrumentObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            // console.log(get(this, 'duplicateError'));\n\n            let newInstrument = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    //console.log(this.get('prevDup'));\n                    if(err.message.includes('has already been used')) {\n                        //console.log('duplicate');\n                        this.setError('duplicateError',true);\n                        \n                        error = true;\n                        dup = true;\n                    }\n                    // console.log(err.message);\n                }\n            }\n            \n            this.setError('authError', false);\n\n            if (!error) {\n                \n                    newInstrument.save().then(function(results){\n                        // console.log(dup);\n                        if(results.id != null) {\n                            _this.get('submit')(results.id);\n                        } else {\n                            this.setError('isVisibleError',true);\n                            error = true;\n                        }\n                    }).catch(function(reason) {\n                        \n                        _this.setError('isVisibleError',true);\n                        _this.setError('authError',true);\n                    }); \n            } \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let displacementValueObjectValues = _this.get('displacementValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(displacementValueObjectValues).forEach(function(key,index) {\n        displacementValueObjectValues[key] = 0;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n    // newTimestampValue: computed('dateFormat', function() {\n    //     return moment().format(this.get('dateFormat'));\n    // }),\n\n    newDisplacementValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n    displacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    newDisplacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n    \n    actions: {\n        setNewDisplacementValue(key, event) {\n            const vals = this.get('newDisplacementValueObjectValues');\n            vals[key] = event.target.value;\n        },\n        setNewTimestampValue(event) {\n            this.set('newTimestampValue', event.target.value);\n        },\n        setTemperatureValue(event) {\n            this.set('temperatureObjectValue', event.target.value);\n        },\n        saveNew(){\n            let _this = this,\n                store = this.get('store'),\n                newDisplacementValuesObject = this.get('newDisplacementValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                displacementValues = this.get('displacementValues'),\n                temperatureValues = this.get('temperatureValues')\n            ;\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newDisplacementValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newDisplacementValuesObject.values = Object.values(this.get('newDisplacementValueObjectValues'));\n\n            const newDisplacementValues = store.createRecord('displacement-value', newDisplacementValuesObject);\n            // save new displacement-value to DB\n            const savedDisplacementValuesObject = newDisplacementValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if displacement-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //displacementValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n                \n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class EditInstrument extends Component.extend({\n}) {\n    @service router;\n    @service store;\n    //@service session;\n    //@service currentUser;\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    actions = {\n        viewData(id) {\n            this.get('router').transitionTo('raw-data', id);\n            //this.viewData(id);\n        },\n        tGraph(id) {\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values');\n            //this.tGraph(id, 'displacement-values');\n        },\n        sGraph(id) {\n            this.get('router').transitionTo('spatial-graphs.spatial-graph', id, 'displacement-values');\n            //this.sGraph(id, 'displacement-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveInstrument(){\n            const _this = this;\n            // console.log(\"test\");\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/instruments\";    \n                }\n            } else {\n                window.location.href = \"/instruments\";\n            }            \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { copy } from 'ember-copy';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'spatial-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    progressAnimationDuration: 100, //set 50, was 700\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 50, //set 25, was 500\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return this.get('blastEvents').map(function(event) {\n                return {\n                    type: 'Blast',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n            var chartData = { values: item.get(\"values\") };\n\n            var modelName = this.get('chartDataModelName');\n\n            if (modelName === 'strain-values' || modelName === 'load-values') { \n                var plated = this.get('instrument').get('plated');\n                var type = this.get('instrument').get('instrumentType').get('title');\n                //console.log(type);\n                \n                if (type === 'dCable') {\n                    chartData.values.splice(0,1);\n                    chartData.values.unshift(0);\n                    if(plated) {\n                        chartData.values.push(chartData.values[chartData.values.length - 1]);\n                    } else {\n                        chartData.values.push(0);\n                    }\n                } else if (type === 'dExto') {\n                    chartData.values.unshift(chartData.values[0]);\n                }\n            }\n                        \n            return chartData;\n        } catch (error) {\n            return [];\n        }\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n        try {\n            return { values: item.get(\"values\") };            \n        } catch (error) {\n            return [];\n        }\n    }),\n\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = (this.get('zoomChartData.firstObject')?.values?.length ?? 0),\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n\n/*         if (this.get('instrument').get('instrumentType').get('title') == 'dRebar') {\n            for(let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                anchorDistances[ctr] = (ctr) + '-' + anchorDistances[ctr];\n            }\n\n            for(let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                anchorDistances[ctr] = (ctr) + '-' + anchorDistances[ctr];\n            }\n        }\n */\n        var modelName = this.get('chartDataModelName');\n        //if (this.get('instrument').get('instrumentType').get('title') != 'dRebar') {\n            if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {\n                anchorDistances.splice(0, 1);\n            }\n        //}\n\n        if (modelName === 'axial-displacement-values') {\n            if (this.get('instrument').get('stacked')) {\n                let half_anchors = (anchorDistances.length / 2) + 1;\n                let gauge = this.get('instrument').get('gaugeLength');\n                while (anchorDistances.length > half_anchors) {\n                    anchorDistances.pop();\n                }\n                anchorDistances[0] = anchorDistances[1] - gauge;\n            } else {\n                let last = anchorDistances[anchorDistances.length-1];\n                anchorDistances.sort(function(a,b){return a-b;});\n                let gauge = this.get('instrument').get('gaugeLength');\n                //console.log('gauge: ' + gauge);\n                anchorDistances.forEach(function(item, index) {\n                    anchorDistances[index] = item - gauge;\n                    //console.log(item);\n                });\n                //anchorDistances.push(this.get('instrument').get('instrumentLength') * 1000);\n                anchorDistances.shift();\n                anchorDistances.push(last);\n            }\n        }\n\n\n\n\n        return anchorDistances;\n    }),\n\n    anchorAXDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = (this.get('zoomChartData.firstObject')?.values?.length ?? 0),\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n\n        let midPoints = [];\n\n        if(this.get('instrument').get('stacked')) {\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            \n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n\n            let midLeft = [];\n            for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n            }\n            midPoints = midLeft;\n        } else { //staggered\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n    \n            midPoints = $.map(anchorDistances.slice(1, center + 1), function(v, i) {\n                return [v, anchorDistances.slice(center + 1)[i]];\n              });\n\n            midPoints.unshift(headExclusion);\n            let mid_temp = [];\n            for(let ctr = 1;ctr < midPoints.length; ctr++) {\n                mid_temp.push((midPoints[ctr - 1] + midPoints[ctr]) / 2);\n            }\n            midPoints = mid_temp;\n\n            if (modelName === 'bending-strain-values') {\n                midPoints.shift();\n                midPoints.pop();\n            }    \n            \n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n        \n        //console.log(midPoints);\n        \n        return midPoints;\n    }),\n\n    anchorBXDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = (this.get('zoomChartData.firstObject')?.values?.length ?? 0),\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n\n        let midPoints = [];\n\n        if(this.get('instrument').get('stacked')) {\n            let headExclusion = this.get('instrument').get('headExclusionLength');\n            let leftAnchors = [headExclusion];\n            \n            let center = anchorDistances.length - 1;\n            center = Math.ceil(center / 2);\n\n            leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n\n            let midLeft = [];\n            for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n            }\n            midPoints = midLeft;\n        } else {\n\n        let center = anchorDistances.length - 1;\n        center = Math.ceil(center / 2);\n\n        midPoints = $.map(anchorDistances.slice(1, center + 1), function(v, i) {\n            return [v, anchorDistances.slice(center + 1)[i]];\n          });\n            midPoints.shift();\n            midPoints.pop();                  \n        }\n\n        midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n\n        return midPoints;\n    }),\n\n    // calculate mid distances between anchors for strain values\n    anchorMidDistances: computed('anchorDistances', function() {\n        let anchorDistances = copy(this.get('anchorDistances')),\n            dataValuesCount = (this.get('zoomChartData.firstObject')?.values?.length ?? 0),\n            midDistances = []\n        ;\n\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n            if (this.get('instrument').get('stacked')) {\n                anchorDistances.shift(0);\n                let finalSize = anchorDistances.length / 2;\n                while (anchorDistances.length > finalSize) {\n                    anchorDistances.pop(finalSize);\n                }\n                anchorDistances.unshift(this.get('instrument').get('headExclusionLength'));\n            } else { //staggered\n\n            }\n        } else { //not rebar\n            anchorDistances.unshift(0);\n        }\n\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            let mid = (anchorDistances[i] + anchorDistances[i + 1]) / 2;\n            midDistances.push( +mid.toFixed(2) );\n        }\n\n        if(type === 'dCable') {\n            midDistances.splice(0,1);\n            //midDistances.unshift(0);\n            midDistances[0] = 0;\n            var len = this.get('instrument').get('length');\n            var length = this.get('instrument').get('instrumentLength');\n\n            var modelName = this.get('chartDataModelName');\n            if (anchorDistances.length > dataValuesCount && (modelName === 'strain-values' || modelName === 'load-values')) {    \n                if(length !== null && length !== 0) {\n                    midDistances.push(length);\n                } else {\n                    midDistances.push(anchorDistances[anchorDistances.length - 1]);\n                }\n            }\n        }\n        // console.log(\"Anchors: \" + anchorDistances);\n         //console.log(\"Mids: \" + midDistances);\n\n        return midDistances;\n    }),\n\n    anchorColors: d3.scale.category10().range(),\n\n    anchorDistancesChartReferencePoints: computed('chartDataModelName', 'instrument', 'anchorDistances', 'anchorMidDistances', 'anchorAXDistances', 'anchorBXDistances', function() {\n        let anchorDistances = this.get('anchorDistances');\n        var modelName = this.get('chartDataModelName');\n        var anchorMidDistances = this.get('anchorMidDistances');\n\n        //console.log(this.get('instrument').get('instrumentTypeID'));\n\n        if(this.get('instrument').get('instrumentTypeID') === 3) {//rebar \n            if(this.get('instrument').get('stacked')) { //is stacked\n                if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                    anchorDistances = this.get('anchorAXDistances');\n                } else if (modelName === 'bending-strain-values') {\n                    anchorDistances = this.get('anchorBXDistances');\n                }\n            } else { //is NOT stacked\n                if (modelName === 'axial-strain-values' || modelName === 'load-values') {\n                    anchorDistances = this.get('anchorAXDistances');\n                } else if (modelName === 'bending-strain-values') {\n                    anchorDistances = this.get('anchorBXDistances');\n                }\n            }\n        }\n\n        if (this.get('instrument').get('instrumentType').get('title') !== 'dRebar') {\n            if(modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                return anchorMidDistances.map(function(anchorDistance){\n                    return {\n                        key: anchorDistance,\n                        type: 'referencePoints',\n                        values: [\n                            anchorDistance\n                        ]\n                    };\n                });\n                    \n            }\n        }\n\n        return anchorDistances.map(function(anchorDistance){\n            return {\n                key: anchorDistance,\n                type: 'referencePoints',\n                values: [\n                    anchorDistance\n                ]\n            };\n        });\n    }),\n\n    inlineHoverValuesSideOffset: computed('chartDataModelName', function() {\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'load-values') {\n            return 28;\n        } else if((modelName === 'axial-strain-values' || modelName === 'bending-strain-values') && this.get('instrument').get('stacked')) {\n            return 28;\n        }\n        return 0;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints'),\n            anchorDistances = this.get('anchorDistances'),\n            anchorAXDistances = this.get('anchorAXDistances'),\n            anchorBXDistances = this.get('anchorBXDistances'),\n            anchorDistancesChartReferencePoints = this.get('anchorDistancesChartReferencePoints'),\n            anchorMidDistances = this.get('anchorMidDistances')\n        ;\n        let zoomChartLinesData = [];\n\n        var modelName = this.get('chartDataModelName');\n\n        \n        if ((modelName === 'strain-values' || modelName === 'load-values') && this.get('instrument').get('instrumentType').get('title') !== 'dRebar') { \n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorMidDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else if (modelName === 'axial-strain-values' || modelName === 'load-values' ) {//&& !this.get('instrument').get('stacked')) {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorAXDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else if (modelName === 'bending-strain-values' ) { //&& !this.get('instrument').get('stacked')) {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorBXDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n                return {\n                    key: chartLineIndex,\n                    // mean: 3,\n                    type: 'lines',\n                    timestamp: zoomTimePoints[chartLineIndex],\n                    values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            anchorDistances[dataPointIndex],\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (anchorDistancesChartReferencePoints) {\n            zoomChartLinesData = zoomChartLinesData.concat(anchorDistancesChartReferencePoints);\n        }\n\n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        var modelName = this.get('chartDataModelName');\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        if(type === 'dCable') {\n            if(modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                //console.log(fullRangeDataPoints);\n                fullRangeDataPoints.forEach(element => element.values[0]=0);\n            }\n        }\n        \n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[chartLineIndex]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n    }),\n\n    numLines: computed('zoomTimePoints', function() {\n        return this.get('zoomTimePoints').length;\n    }),\n\n    lineDrawDelay: computed('numLines', function() {\n        return (13000 / (this.get('numLines') + 1)) ^ (1 / 20);\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            inlineHoverValuesSideOffset = _this.get('inlineHoverValuesSideOffset'),\n            progressAnimationDuration = _this.get('progressAnimationDuration'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n\n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let axisName = '';\n                let units = chartData.get('units');\n                switch(yAxisLegend.get('title')) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    case 'axial_strain':\n                        axisName = \"Axial Strain\";\n                        units = \"%\";\n                        break;\n                    case 'bending_strain':\n                        axisName = \"Bending Strain\";\n                        units = \"%\";\n                        break;\n                    case 'axial_displacement':\n                        axisName = \"Axial Displacement\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n                \n                if(yAxisLegend.get('title')==='load') {\n                    title = axisName + \" (kN)\";\n                } else {\n                    title = axisName + \" (\" + units + \")\";\n                }\n            }\n\n            let zoomChart = nv.models.lineChartProgressAnimationAPI()\n                .margin({top: 55, right: 10, bottom: 85, left: 60})\n                .useInteractiveGuideline(false)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .distXAxisScale(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .showLegend(true)\n                .progressAnimationDuration(progressAnimationDuration)\n                .showXAxis(true)\n                .noData('No usable data')\n                ;\n\n\n            let length = 0;\n            try {\n                length = _this.instrument.get('instrumentLength');\n                let type = _this.instrument.get('instrumentType');\n                if (type === 'dRebar') {\n                    length = length * 1000;\n                }\n                \n            } catch (ex) {\n\n            }\n            \n            if(length !== null && length === 0) {\n                length = 0;\n            }\n\n            zoomChart.forceX([0, length]);\n/*             if (yAxisLegend.get('title') != 'bending_strain' && yAxisLegend.get('title') != 'axial_strain') {\n                \n            }\n */\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .tickFormat(d3.format(\".2f\"))\n                    // .tickFormat(function(d) {\n                    //     let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                    //     return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    // })\n                    ;\n                zoomChart.yAxis\n                    .axisLabel(title)\n                    .tickFormat(d3.format(\".2f\"));\n\n                zoomChart.distXAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .ticks(5)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(45)\n                    .isDistXTooltip(isDistXTooltip)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2);\n\n                //zoomChart.legend.inlineHoverValuesSideOffset(inlineHoverValuesSideOffset);\n\n                zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n\n                }\n\n/*                 zoomChart.xAxis.dispatch.on('xAxisMouseMove', function (mouseMove) {\n                    console.log('test');\n                });\n */\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log('test');\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n\n                    if (!seismicEventsArray.length || !blastEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (!activeTooltipContent) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                return zoomChart;\n            });\n\n            // declare fullRangeChart because later in zoom chart we need axis from fullRangeChart for events axis on zoomChart\n            let fullRangeChart = nv.models.focus(nv.models.line())\n               .margin({top: 10, right: 10, bottom: 30, left: 60})\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .syncBrushing(false)\n                .independentBrushing(true)\n                .showXAxis(true)\n                .showYAxis(false)\n                ;\n\n\n            nv.addGraph(function() {\n\n                fullRangeChart.xAxis\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n                fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n                fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(fullRangeChart.update);\n\n                // set zoom based on query params if set\n                let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n                let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n                if (startTimestamp && endTimestamp) {\n                    fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n                }\n\n                return fullRangeChart;\n            });\n\n        });\n\n    }\n\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n//import JSONAPISerializer from '@ember-data/serializers/json';\n\nexport default Component.extend({\n\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    // vibeEventsChartDistXData: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log('vibeEvents');\n    //     //console.log(events);\n    //     if ( this.get('vibeEvents') ) {\n    //         return [{\n    //             key: 'BluVibe',\n    //             type: 'distX',\n    //             color: '#80bf5c',\n    //             values: this.get('vibeEvents').map(function(event) {\n    //                 return [\n    //                     moment( event.get('id') ).valueOf(),\n    //                     event.get('size') ? (event.get('size') * -20) + 20 : 20\n    //                 ];\n    //             })\n    //         }];\n    //     }\n    //     return false;\n    // }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            let data_set = this.get('blastEvents').map(function(event) {\n                //console.log(event.get('timestamp'));\n                return {\n                    type: 'Blast',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n            //console.log(data_set);\n            return data_set;\n        }\n        return false;\n    }),\n\n    // vibeEventsArray: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log(events);\n    //     if ( events ) {\n    //         return events.map(function(event) {\n    //             return {\n    //                 type: 'BluVibe',\n    //                 time: event.get('id'),\n    //                 timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n    //                 ppa: event.get('ppa'),\n    //                 ppv: event.get('ppv'),\n    //                 freq: event.get('frequency')\n    //             };\n    //         }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n    //     }\n    //     return false;\n    // }),\n\n    zoomTempPoints: map('zoomTempData', function(item){\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        return chartData;\n    }),\n\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n\n        //console.log(linesKyes);\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        var modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') { \n            var plated = this.get('instrument').get('plated');\n            \n            if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n                if(plated) {\n                    chartData.values[0] = chartData.values[1];\n                } else {\n                    chartData.values[0] = 0;\n                }\n            } else {\n                //chartData.values.unshift(0);\n            }\n            chartData.values.push(0);\n        }\n        //console.log(chartData);\n        return chartData;\n        } catch(e) { return { values: [] }; }\n    }),\n\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n\n/*     fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        let instType = this.instrument.get('instrumentType').get('title');\n        if(instType === 'Tilt') {\n            return ['X','Y','Z'];\n        } else if(instType === 'Wire') {\n            let anchors = [];\n            let numPorts = this.instrument.get('portsNum');\n            let startVal = 0;\n            let maxVal = numPorts;\n/*             if (this.port != '') {\n                //startVal = (1 * this.port) - 1;\n                startVal = (1 * numPorts) - 1;\n                maxVal = startVal + 1;\n            }\n */            for(let ctr = startVal; ctr < maxVal; ctr++) {\n                anchors.push('T' + (ctr + 1));\n                anchors.push(ctr + 1);\n            }\n            return anchors;\n        } else if(instType === 'BluVibe') {\n            return ['Data'];\n        }\n        let chartData = this.get('fullRangeChartData');\n        let dataValuesCount;\n        try {\n            dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        } catch (error) {\n            dataValuesCount = 0;\n        }\n        let anchors = this.get('instrument').get('anchors');\n        \n        const arr = anchors.content ?? anchors;\n        \n        let anchorDistances = arr.map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        //anchorDistances.push('T'); //TODO: add temperature\n\n        //IF chart is Strain-Values chart\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') { \n            var midPoints = [];\n            if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n                //Adjust anchors to mid points between anchors\n                for(var ctr = 1; ctr < anchorDistances.length ; ctr++) {\n                    var mid = (anchorDistances[ctr - 1] + anchorDistances[ctr]) / 2;\n                    midPoints[ctr] = + mid.toFixed(2);\n                }\n\n                //console.log(midPoints);\n\n                //add zero point and end point\n                midPoints.splice(0,1);\n                midPoints[0] = 0;\n                midPoints.push(anchorDistances[anchorDistances.length - 1]);  //TODO: change to length of exto once known\n                //console.log(midPoints);\n            } else if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n                //Adjust anchors to mid points between anchors\n                //console.log(this.get('instrument'));\n                let headExclusion = this.get('instrument').get('headExclusionLength');\n                let leftAnchors = [headExclusion];\n                let rightAnchors = [headExclusion];\n                \n                let center = anchorDistances.length - 1;\n                center = Math.ceil(center / 2);\n\n                leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n\n                rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n\n                let midLeft = [];\n                for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                    midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                }\n\n                let midRight = [];\n                for(var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                    midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                }\n\n                if (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'load-values') {\n                    if(this.get('instrument').get('stacked')) {\n                        midPoints = midLeft;\n                        if (modelName === 'load-values') {\n                            midPoints.push(this.get('instrument').get('instrumentLength') * 1000);\n                        }\n                    } else {\n                        midPoints = midLeft.concat(midRight);\n                        /* midPoints = $.map(midPoints.slice(1, center + 1), function(v, i) {\n                            return [v, midPoints.slice(center + 1)[i]];\n                          }); */\n                        if (modelName === 'bending-strain-values') {\n                            midPoints.shift();\n                            midPoints.pop();\n                        }\n\n                    }\n                } else {\n                    midPoints = midLeft.concat(midRight);\n                }\n                if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values') {\n                    for(let ctr = 0; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n  \n/*                     for(let ctr = 0; ctr < midPoints.length / 2; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n        \n                    for(let ctr = 3; ctr < midPoints.length; ctr++) {\n                        midPoints[ctr] = (ctr+1) + '-' + midPoints[ctr];\n                    }\n */                }\n            } else {\n                for(var ctr = 0; ctr < anchorDistances.length-1; ctr++) {\n                    midPoints[ctr] = ((anchorDistances[ctr] + anchorDistances[ctr + 1]) / 2).toFixed(2);\n                }\n            }\n            if(modelName==='displacement-values') {\n                midPoints.unshift(0);\n            }\n            anchorDistances = midPoints;\n        } else if (modelName === 'axial-displacement-values' && this.get('instrument').get('stacked')) {\n            let mid = (anchorDistances.length - 1) / 2;\n            while (anchorDistances.length > (mid + 1)) {\n                anchorDistances.pop();\n            }\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else if (modelName === 'axial-displacement-values' && !this.get('instrument').get('stacked')) {\n            anchorDistances.sort(function(a,b){return a-b;});\n\n            //anchorDistances.push(this.get('instrument').get('instrumentLength') * 1000);\n            anchorDistances[0] = this.get('instrument').get('headExclusionLength');\n        } else {\n            if (this.get('instrument').get('instrumentType').get('title') === 'dRebar') {\n                if (modelName === 'displacement-values') { //rebar stretch\n                    var midPoints = [];\n                    let headExclusion = this.get('instrument').get('headExclusionLength');\n                    let leftAnchors = [headExclusion];\n                    let rightAnchors = [headExclusion];\n                    \n                    let center = anchorDistances.length - 1;\n                    center = Math.ceil(center / 2);\n    \n                    leftAnchors = leftAnchors.concat(anchorDistances.slice(1, center + 1));\n                    rightAnchors = rightAnchors.concat(anchorDistances.slice(center + 1));\n    \n                    if(!this.get('instrument').get('stacked')) {\n                        rightAnchors[0] = (leftAnchors[1] + leftAnchors[0]) / 2;\n                    }\n    \n                    let midLeft = [];\n                    for(var ctr = 0; ctr < leftAnchors.length - 1; ctr++) {\n                        midLeft[ctr] = (leftAnchors[ctr] + leftAnchors[ctr + 1]) / 2;\n                    }\n    \n                    let midRight = [];\n                    for(var ctr = 0; ctr < rightAnchors.length - 1; ctr++) {\n                        midRight[ctr] = (rightAnchors[ctr] + rightAnchors[ctr + 1]) / 2;\n                    }\n\n                    midPoints = midLeft.concat(midRight);\n                    anchorDistances = midPoints;\n\n                    anchorDistances.unshift(0);\n                }\n                for(let ctr = 1; ctr < anchorDistances.length / 2; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n    \n                for(let ctr = 4; ctr < anchorDistances.length; ctr++) {\n                    anchorDistances[ctr] = ctr + '-' + anchorDistances[ctr];\n                }\n            }    \n        }\n        //console.log(anchorDistances);\n        return anchorDistances;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTempPoints = this.get('zoomTempPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n\n        //console.log(blastEventsChartDistXData);\n        //console.log(vibeEventsChartDistXData);\n\n        let anchorDistances = this.get('anchorDistances'),\n            zoomChartLinesData = []\n        ;\n\n        if (this.get('instrument').get('instrumentType').get('title') === 'dCable') {\n            var mName = _this.get('chartDataModelName');\n            if (mName === 'strain-values' || mName === 'strain-rate-values' || mName === 'load-values') {\n                zoomDataPoints.forEach(element => element.values[0] = 0);\n            }\n        }    \n\n/*         if (this.get('instrument').get('instrumentType').get('title') == 'Tilt') {\n                zoomDataPoints.forEach(element => element.values.shift());\n        }    \n */\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n        //console.log(zoomTempPoints.length);\n\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            if (_this.get('chartDataModelName') !== 'displacement-values' && this.get('instrument').get('instrumentType').get('title') !== 'BluVibe'){\n                while(zoomTempPoints.length > zoomDataPoints.length) {\n                    zoomTempPoints.pop();\n                    zoomTempPoints.shift();\n                }\n            }\n            var temp = {key: 'T',\n                type: 'lines',\n                yAxis: 2,\n                values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null,\n                    ];\n                })\n            };\n            //console.log(temp);\n            zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (vibeEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                    ];\n                })\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_');\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            // vibeEventsArray = this.get('vibeEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg')\n            ;\n            //below is attempted fix to get label changed.\n            let yAxisLegend = this.get('yAxisLegend');\n            let apiCallsPromises = [yAxisLegend];\n        \n        //console.log(\"ChartID: \" + _this.get('chartId') );\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n        // label fix code\n        // Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            let title = \"\";\n            if (yAxisLegend) {\n                // label fix code\n                yAxisLegend = results[0];\n                // yAxisLegend = results[0];\n                \n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let instType = _this.instrument.get('instrumentType').get('title');\n\n                let axisName = '';\n                let units = chartData.get('units');\n                title = '';\n                if (instType === 'BluVibe') {\n                    title = _this.get('chartDataModelName');\n                } else {\n                    try{\n                        title = yAxisLegend.get('title');\n                    } catch (e) {\n                        title = _this.get('chartDataModelName');\n                    }\n                }\n                //console.log(\"Switch: \" + title);\n                switch(title) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    case 'axial_strain':\n                        axisName = \"Axial Strain\";\n                        units = \"%\";\n                        break;\n                    case 'bending_strain':\n                        axisName = \"Bending Strain\";\n                        units = \"%\";\n                        break;\n                    case 'axial_displacement':\n                        axisName = \"Axial Displacement\";\n                        break;\n                    case 'temperature':\n                        axisName = \"Temperature\";\n                        units = \"°C\";\n                        break;\n                    case 'event-frequency':\n                        axisName = \"Event Frequency\";\n                        break;\n                    case 'event-ppv':\n                        axisName = \"Event PPV\";\n                        break;\n                    case 'event-ppa':\n                        axisName = \"Event PPA\";\n                        break;\n                    case 'cumulative-event-frequency':\n                        axisName = \"Cumulative Frequency\";\n                        break;\n                    case 'cumulative-event-ppv':\n                        axisName = \"Cumulative PPV\";\n                        break;\n                    case 'cumulative-event-ppa':\n                        axisName = \"Cumulative PPA\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n\n                /* let chartName = yAxisLegend.get('title').capitalize();\n                let chartNameL = chartName.substr(0, chartName.indexOf('_'));\n                let chartNameR = chartName.substr(chartName.indexOf('_') + 1).capitalize();\n                if(chartNameL !== \"\") {\n                    chartName = chartNameL + \" \" + chartNameR;\n                } */\n\n                if (yAxisLegend) {\n                    let raw = _this.raw;\n                    if(yAxisLegend.get('title')==='load') {\n                        title = axisName + \" (kN)\";\n                    } else if (instType === 'Wire') {\n                        if (raw === true) {\n                            title = \"Frequency (Hz)\";\n                        } else {\n                            title = \"Calculated Values\";\n                        }\n                    } else {\n                        title = axisName + \" (\" + units + \")\";\n                    }\n                } else {\n                    if (instType === 'BluVibe') {\n                        title = axisName;\n                    } else {\n                        title = axisName + \" (\" + units + \")\";\n                    }\n                }\n                //title = yAxisLegend.get('unit');\n            }\n\n            function usesPoints(chartName) {\n                //console.log(chartName);\n                switch(chartName) {\n                    case 'event-ppv':\n                    case 'event-ppa':\n                        return true;\n                }\n                return false;\n            }\n            //console.log(zoomChartLinesData);\n            //console.log(\"chartDataModelName: \" + _this.get('chartDataModelName'));\n\n            let zoomChart = nv.models.lineChartWithFocusAPI(usesPoints(_this.get('chartDataModelName')))\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data')\n            ;\n\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                if (_this.instrument.get('instrumentType').get('title') === 'Tilt') {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".3f\"));\n                    zoomChart.legend.numDecimals(3);\n                } else {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                }\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n\n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(vibeEventsArray);\n                    //console.log(distXMouseMove);\n/* \n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    } */\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length) { //} || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            //activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) { _this.setData(zoomChartLinesData); }\n                if (_this.setChart) { _this.setChart(zoomChart); }\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n\n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\n/**\n * Thermo raw-data — temperature-only flow.\n *\n * Each anchor on a thermostring is a temperature sensor. A row's `values` array carries one\n * temperature per anchor; there's no separate displacement record involved (and no trailing\n * \"Temperature\" column the way pack/cable have).\n */\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    isModalOpen: false,\n    modalMode: 'add', // 'add' | 'edit'\n    modalEditingRowId: null,\n\n    anchorLabels: computed('instrument', function(){\n        const anchors = this.get('instrument') ? this.get('instrument').get('anchors') : null;\n        const arr = (anchors && (anchors.content ?? anchors)) || [];\n        let validCounter = 0;\n        return arr.map((anchor, idx) => {\n            const distance = anchor.get ? anchor.get('distance') : (anchor && anchor.distance);\n            const isUnset = (distance == null || distance === '');\n            if(isUnset){\n                return { index: idx, tableLabel: '', modalLabel: 'Anchor N/A', isUnset: true };\n            }\n            validCounter += 1;\n            return { index: idx, tableLabel: String(distance), modalLabel: `Anchor ${validCounter}`, isUnset: false };\n        });\n    }),\n\n    columnSpecs: computed('anchorLabels', function(){\n        // No \"Temperature\" trailing column — every column on a thermostring IS a temperature reading.\n        return (this.get('anchorLabels') || []).map((a) => ({\n            key: `anchor_${a.index}`,\n            label: a.modalLabel,\n            tableLabel: a.tableLabel,\n            valuesIndex: a.index,\n        }));\n    }),\n\n    tableRows: computed('temperatureData.[]', 'columnSpecs', 'globalDatetimeFormat.value', function(){\n        const tempData = this.get('temperatureData') || [];\n        const specs = this.get('columnSpecs') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n\n        return tempData.map((row) => {\n            const id = row.id;\n            const values = (row.values || row.get?.('values') || []);\n\n            const cells = specs.map((spec) => {\n                const value = values[spec.valuesIndex];\n                return { key: spec.key, label: spec.label, value: value == null ? '' : value };\n            });\n            const formattedDate = moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt);\n            return { id, date: id, formattedDate, cells };\n        });\n    }),\n\n    modalFields: computed('columnSpecs', 'modalMode', 'modalEditingRowId', 'tableRows.[]', function(){\n        const specs = this.get('columnSpecs') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingRowId');\n\n        let existingRow = null;\n        if(mode === 'edit' && editingId){\n            existingRow = (this.get('tableRows') || []).find(r => r.id === editingId);\n        }\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && existingRow\n                ? moment(existingRow.date, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm')\n                : moment().format('YYYY-MM-DDTHH:mm'),\n        };\n\n        const cellByKey = {};\n        if(existingRow){\n            existingRow.cells.forEach(c => { cellByKey[c.key] = c.value; });\n        }\n\n        const channelFields = specs.map((spec) => ({\n            key: spec.key,\n            label: spec.label,\n            type: 'text',\n            value: cellByKey[spec.key] != null ? cellByKey[spec.key] : '',\n        }));\n\n        return [dateField, ...channelFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function(){\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingRowId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingRowId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const instrumentId = this.get('instrument.id');\n            const tempData = this.get('temperatureData');\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            if(!tempRow || !tempRow.deleteRecord){ return; }\n            tempRow.deleteRecord();\n            tempRow.save(adapterOptions)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        /**\n         * Save handler — temperature-only (no displacement record involved).\n         * - Add → store.createRecord('temperature-value', ...)\n         * - Edit, date unchanged → mutate existing tempRow values, save() (PATCH)\n         * - Edit, date changed   → delete old tempRow, create new at the new timestamp\n         */\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const specs = this.get('columnSpecs') || [];\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            const tempValues = specs.map((spec) => Number(snapshot[spec.key]) || 0);\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingRowId');\n\n            const tempData = this.get('temperatureData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            if(isEdit && originalId === newId){\n                const tempRow = findRow(tempData, originalId);\n                if(!tempRow){ return; }\n                tempRow.set('values', tempValues);\n                tempRow.save(adapterOptions).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n            }\n\n            const tempRecord = store.createRecord('temperature-value', { id: newId, values: tempValues });\n            tempRecord.save(adapterOptions).then(refreshRoute).catch(handleErr);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","export { default } from 'ember-leaflet/components/tile-layer';\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\n// Chart line colors — sourced from color-palette\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,    // #0077b6\n    colorPalette.orange2,   // #FF7444\n    colorPalette.green3,    // #2a9d8f\n    colorPalette.red1,      // #D25353\n    colorPalette.purple7,   // #8b5cf6\n    colorPalette.beige22,   // #b08968\n    colorPalette.pink6,     // #ec4899\n    colorPalette.gray5,     // #6b7280\n    colorPalette.teal6,     // #10b981\n    colorPalette.cyan4,     // #06b6d4\n];\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n    anchorDistances: computed('tiltMode', function() {\n        const val = this.get('tiltMode');\n        switch (val) {\n            case 0: return ['Ax', 'Ay', 'Az'];\n            case 1: return ['a', 'nx', 'ny', 'nz'];\n            case 2: return ['X', 'Y', 'Z'];\n            case 3: return ['φ', 'θ', 'ψ'];\n        }\n        return ['a', 'b', 'c', 'd', 'Mode'];\n    }),\n\n    // Main chart sourced from zoomChartData to mirror NVD3 (Group By applies to visible chart).\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'anchorDistances', 'chartDataModelName', function() {\n        const anchorDistances = this.get('anchorDistances');\n        const fullRangeChartData = this.get('zoomChartData');\n        const modelName = this.get('chartDataModelName');\n\n        const lines = anchorDistances.map((chartLineName, chartLineIndex) => ({\n            key: chartLineName,\n            values: fullRangeChartData.map(item => {\n                const vals = item.get('values');\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (vals && vals[chartLineIndex] !== undefined) ? vals[chartLineIndex] : null\n                };\n            })\n        }));\n\n        // Add temperature overlay on y2 (unless viewing temperature data itself)\n        if (modelName !== 'temperature-values') {\n            const zoomTempData = this.get('zoomTempData');\n            if (zoomTempData && zoomTempData.length) {\n                lines.push({\n                    key: 'T (°C)',\n                    yAxis: 'y2',\n                    hidden: false,\n                    values: zoomTempData.map(item => {\n                        const rawValues = item.get('values');\n                        const arr = Array.isArray(rawValues) ? rawValues : [];\n                        return {\n                            x: moment(item.get('id')).valueOf(),\n                            y: arr[0] !== undefined ? arr[0] : null\n                        };\n                    })\n                });\n            }\n        }\n\n        return lines;\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    _buildYAxisTitle(yAxisLegend, chartData) {\n        let axisName = '';\n        const getAttr = (key) => chartData.get ? chartData.get(key) : chartData[key];\n        let units = getAttr('units') || '';\n        let title = yAxisLegend ? yAxisLegend.get('title') : '';\n\n        switch (title) {\n            case 'displacement':\n                axisName = getAttr('temporalDisplacementName');\n                units = this.get(\"yAxisUnit\") || getAttr('units');\n                break;\n            case 'velocity':\n                axisName = getAttr('temporalVelocityName');\n                units += \"/day\";\n                break;\n            case 'acceleration':\n                axisName = getAttr('temporalAccelerationName');\n                units += \"/day²\";\n                break;\n            case 'strain':\n                axisName = getAttr('temporalStrainName');\n                units = \"%\";\n                break;\n            case 'strain_rate':\n                axisName = getAttr('temporalStrainRateName');\n                units = \"%/day\";\n                break;\n            case 'temperature':\n                axisName = \"Temperature\";\n                units = \"°C\";\n                break;\n            default:\n                axisName = \"Unknown\";\n        }\n        return `${axisName} (${units})`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const fullRangeChartLinesData = this.get('fullRangeChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildMainChart(fullRangeChartLinesData, yAxisTitle);\n            this._buildOverviewChart();\n        });\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        const datasets = anchorDistances.map((chartLineName, i) => ({\n            label: String(chartLineName),\n            data: fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        anchorDistances.forEach((chartLineName, i) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(chartLineName));\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed, get } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nfunction resetNewInstrumentObject(_this) {\n    _this.set('newInstrumentObject', {});\n    _this.set('name', null);\n    _this.set('zeroTimestamp', null);\n    //_this.set('project', null);\n    _this.set('installDate', null);\n    _this.set('east', null);\n    _this.set('north', null);\n    _this.set('depth', null);\n    _this.set('azimuth', null);\n    _this.set('dip', null);\n    _this.set('instrumentType', 0);\n    _this.set('headAt', 'HAC');\n    _this.set('instrumentLength', 0);\n    _this.set('strokeLength', 0);\n    _this.set('referenceAnchor', null);\n    _this.set('headExclusionLength', 0);\n    _this.set('gaugeLength', 0);\n    _this.set('bulbed', false);\n    _this.set('plated', false);\n    _this.set('stacked', false);\n    _this.set('active', true);\n}\n\nexport default class CreatePackInstrument extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n    }\n\n    isAuthenticated = true;\n    newInstrumentObject = {};\n    headAt = 'HAC';\n    zeroTimestamp = null;\n    installDate = null;\n    authError = false;\n    project = null;\n    level = null;\n\n    actions= {\n\n        \n        setProject(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n\n\n\n\n\n        createInstrument(object){\n\n            //console.log(this.get('prevDup'));\n            //console.log((typeof this.get('prevDup') === \"undefined\"));\n\n            let _this = this,\n            store = this.get('store'),\n            newInstrumentObject = this.get('newInstrumentObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newInstrumentObject.id = this.get('id');\n            newInstrumentObject.zeroTimestamp = this.get('zeroTimestamp');\n            newInstrumentObject.installDate = this.get('installDate');\n            //newInstrumentObject.east = this.get('east');\n            //newInstrumentObject.north = this.get('north');\n            //newInstrumentObject.depth = this.get('depth');\n            newInstrumentObject.strokeLength = 0;\n            newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n            newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n            newInstrumentObject.active = true;\n            newInstrumentObject.instrumentStiffness = 0;\n            //console.log('here');\n            if(typeof newInstrumentObject.id === 'undefined' || newInstrumentObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n\n            if(!error) {\n                if(typeof newInstrumentObject.strokeLength === 'undefined') {\n                    error = true;\n                    this.setError('fieldError',true);\n                    this.setError('isVisibleError',true);\n                }\n            }\n\n            if (this.get('zeroTimestamp') != null) {\n                newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('installDate') != null) {\n                newInstrumentObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            // console.log(get(this, 'duplicateError'));\n\n            let newInstrument = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    //console.log(this.get('prevDup'));\n                    if(err.message.includes('has already been used')) {\n                        //console.log('duplicate');\n                        this.setError('duplicateError',true);\n                        \n                        error = true;\n                        dup = true;\n                    }\n                    // console.log(err.message);\n                }\n            }\n            \n            this.setError('authError', false);\n\n            if (!error) {\n                \n                    newInstrument.save().then(function(results){\n                        \n                        if(results.id != null) {\n                            store.createRecord('anchor', {number: 0, distance: 0, instrument: results}).save();\n                            store.createRecord('anchor', {number: 1, distance: 1, instrument: results}).save();\n                            store.createRecord('anchor', {number: 2, distance: 2, instrument: results}).save();\n                            store.createRecord('anchor', {number: 3, distance: 3, instrument: results}).save(); \n                            store.createRecord('anchor', {number: 4, distance: 4, instrument: results}).save(); \n                            store.createRecord('anchor', {number: 5, distance: 5, instrument: results}).save(); \n                        }\n\n                        if(results.id != null) {\n                            _this.get('submit')(results.id);\n                        } else {\n                            this.setError('isVisibleError',true);\n                            error = true;\n                        }\n                    }).catch(function(reason) {\n                        \n                        _this.setError('isVisibleError',true);\n                        _this.setError('authError',true);\n                    }); \n            } \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let displacementValueObjectValues = _this.get('displacementValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(displacementValueObjectValues).forEach(function(key,index) {\n        displacementValueObjectValues[key] = 0;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n    // newTimestampValue: computed('dateFormat', function() {\n    //     return moment().format(this.get('dateFormat'));\n    // }),\n\n    newDisplacementValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n    displacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 1; i <= this.get('instrumentAnchors').length; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        displacementValueObjectValues.shift();\n        return displacementValueObjectValues;\n    }),\n\n    newDisplacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n    \n    actions: {\n        setNewDisplacementValue(key, event) {\n            const vals = this.get('newDisplacementValueObjectValues');\n            vals[key] = event.target.value;\n        },\n        setNewTimestampValue(event) {\n            this.set('newTimestampValue', event.target.value);\n        },\n        setTemperatureValue(event) {\n            this.set('temperatureObjectValue', event.target.value);\n        },\n        saveNew(){\n            let _this = this,\n                store = this.get('store'),\n                newDisplacementValuesObject = this.get('newDisplacementValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                displacementValues = this.get('displacementValues'),\n                temperatureValues = this.get('temperatureValues')\n            ;\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newDisplacementValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newDisplacementValuesObject.values = Object.values(this.get('newDisplacementValueObjectValues'));\n            newDisplacementValuesObject.values.unshift('0');\n\n            const newDisplacementValues = store.createRecord('displacement-value', newDisplacementValuesObject);\n            // save new displacement-value to DB\n            const savedDisplacementValuesObject = newDisplacementValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if displacement-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //displacementValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n                \n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class EditInstrument extends Component.extend({\n}) {\n    @service router;\n    @service store;\n    //@service session;\n    //@service currentUser;\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    actions = {\n        viewData(id) {\n            this.get('router').transitionTo('raw-data', id);\n            //this.viewData(id);\n        },\n        tGraph(id) {\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values');\n            //this.tGraph(id, 'displacement-values');\n        },\n        sGraph(id) {\n            this.get('router').transitionTo('spatial-graphs.spatial-graph', id, 'displacement-values');\n            //this.sGraph(id, 'displacement-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveInstrument(){\n            const _this = this;\n            // console.log(\"test\");\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/instruments\";    \n                }\n            } else {\n                window.location.href = \"/instruments\";\n            }            \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n//import JSONAPISerializer from '@ember-data/serializers/json';\n\nexport default Component.extend({\n\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    // vibeEventsChartDistXData: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log('vibeEvents');\n    //     //console.log(events);\n    //     if ( this.get('vibeEvents') ) {\n    //         return [{\n    //             key: 'BluVibe',\n    //             type: 'distX',\n    //             color: '#80bf5c',\n    //             values: this.get('vibeEvents').map(function(event) {\n    //                 return [\n    //                     moment( event.get('id') ).valueOf(),\n    //                     event.get('size') ? (event.get('size') * -20) + 20 : 20\n    //                 ];\n    //             })\n    //         }];\n    //     }\n    //     return false;\n    // }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            let data_set = this.get('blastEvents').map(function(event) {\n                //console.log(event.get('timestamp'));\n                return {\n                    type: 'Blast',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n            //console.log(data_set);\n            return data_set;\n        }\n        return false;\n    }),\n\n    // vibeEventsArray: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log(events);\n    //     if ( events ) {\n    //         return events.map(function(event) {\n    //             return {\n    //                 type: 'BluVibe',\n    //                 time: event.get('id'),\n    //                 timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n    //                 ppa: event.get('ppa'),\n    //                 ppv: event.get('ppv'),\n    //                 freq: event.get('frequency')\n    //             };\n    //         }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n    //     }\n    //     return false;\n    // }),\n\n    zoomTempPoints: map('zoomTempData', function(item){\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        return chartData;\n    }),\n\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n\n        //console.log(linesKyes);\n\n        var rawValues = item.get(\"values\");\n        var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n        var modelName = this.get('chartDataModelName');\n        if (modelName === 'strain-values' || modelName === 'strain-rate-values' || modelName === 'load-values' || modelName === 'axial-strain-values' || modelName === 'bending-strain-values') {           \n            chartData.values.push(0);\n        }\n        //console.log(chartData);\n        return chartData;\n        } catch(e) { return { values: [] }; }\n    }),\n\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n\n/*     fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('tiltMode', function() {\n        let val = this.get('tiltMode');\n\n        switch (val) {\n            case 0:\n                return['Ax','Ay','Az'];\n            case 1:\n                return['a','nx','ny','nz'];\n            case 2:\n                return['X','Y','Z'];\n            case 3:\n                return['φ','θ','ψ'];\n\n        }\n        return ['a','b','c','d','Mode'];\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n            const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTempPoints = this.get('zoomTempPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n\n        //console.log(blastEventsChartDistXData);\n        //console.log(vibeEventsChartDistXData);\n\n        let anchorDistances = this.get('anchorDistances'),\n            zoomChartLinesData = []\n        ;\n\n\n/*         if (this.get('instrument').get('instrumentType').get('title') == 'Tilt') {\n                zoomDataPoints.forEach(element => element.values.shift());\n        }    \n */\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n        //console.log(zoomTempPoints.length);\n\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            if (_this.get('chartDataModelName') !== 'displacement-values' && this.get('instrument').get('instrumentType').get('title') !== 'BluVibe'){\n                while(zoomTempPoints.length > zoomDataPoints.length) {\n                    zoomTempPoints.pop();\n                    zoomTempPoints.shift();\n                }\n            }\n            var temp = {key: 'T',\n                type: 'lines',\n                yAxis: 2,\n                values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null,\n                    ];\n                })\n            };\n            //console.log(temp);\n            zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                    ];\n                })\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').queryRecord('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            //vibeEventsArray = this.get('vibeEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        //console.log(vibeEventsArray);\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];//.get('firstObject');\n                \n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let instType = _this.instrument.get('instrumentType').get('title');\n\n                let axisName = '';\n                let units = chartData.get('units');\n                title = '';\n                if (instType === 'BluVibe') {\n                    title = _this.get('chartDataModelName');\n                } else {\n                    title = yAxisLegend.get('title');\n                }\n                \n                switch(title) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    case 'load':\n                        axisName = chartData.get('temporalLoadName');\n                        break;\n                    case 'axial_strain':\n                        axisName = \"Axial Strain\";\n                        units = \"%\";\n                        break;\n                    case 'bending_strain':\n                        axisName = \"Bending Strain\";\n                        units = \"%\";\n                        break;\n                    case 'axial_displacement':\n                        axisName = \"Axial Displacement\";\n                        break;\n                    case 'temperature':\n                        axisName = \"Temperature\";\n                        units = \"°C\";\n                        break;\n                    case 'event-frequency':\n                        axisName = \"Event Frequency\";\n                        break;\n                    case 'event-ppv':\n                        axisName = \"Event PPV\";\n                        break;\n                    case 'event-ppa':\n                        axisName = \"Event PPA\";\n                        break;\n                    case 'cumulative-event-frequency':\n                        axisName = \"Cumulative Frequency\";\n                        break;\n                    case 'cumulative-event-ppv':\n                        axisName = \"Cumulative PPV\";\n                        break;\n                    case 'cumulative-event-ppa':\n                        axisName = \"Cumulative PPA\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                        //console.log(title);\n                }\n\n                /* let chartName = yAxisLegend.get('title').capitalize();\n                let chartNameL = chartName.substr(0, chartName.indexOf('_'));\n                let chartNameR = chartName.substr(chartName.indexOf('_') + 1).capitalize();\n                if(chartNameL !== \"\") {\n                    chartName = chartNameL + \" \" + chartNameR;\n                } */\n\n                if (yAxisLegend) {\n                    let raw = _this.raw;\n                    if(yAxisLegend.get('title')==='load') {\n                        title = axisName +  \" (kN)\";\n                    } else if (instType === 'Wire') {\n                        if (raw === true) {\n                            title = \"Frequency (Hz)\";\n                        } else {\n                            title = \"Calculated Values\";\n                        }\n                    } else {\n                        title = axisName + \" (\" + units + \")\";\n                    }\n                } else {\n                    if (instType === 'BluVibe') {\n                        title = axisName;\n                    } else {\n                        title = axisName + \" (\" + units + \")\";\n                    }\n                }\n                //title = yAxisLegend.get('unit');\n            }\n\n            function usesPoints(chartName) {\n                //console.log(chartName);\n                switch(chartName) {\n                    case 'event-ppv':\n                    case 'event-ppa':\n                        return true;\n                }\n                return false;\n            }\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(usesPoints(_this.get('chartDataModelName')))\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data')\n            ;\n\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                if (_this.instrument.get('instrumentType').get('title') === 'Tilt') {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".3f\"));\n                    zoomChart.legend.numDecimals(3);\n                } else {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                }\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n\n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(vibeEventsArray);\n                    //console.log(distXMouseMove);\n/* \n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    } */\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length) {//} || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            //activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) { _this.setData(zoomChartLinesData); }\n                if (_this.setChart) { _this.setChart(zoomChart); }\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n\n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\n// tilt raw-data — 4 axis channels + 1 Mode channel + Temperature.\n// Mode (last channel) is an integer code (0-3) that determines the axis labels:\n//   0 → Ax, Ay, Az, n/a\n//   1 → a, nx, ny, nz\n//   2 → X, Y, Z, tilt_z_up\n//   3 → φ, θ, ψ, n/a\n//\n// BE shape: legacy save was `[0, v0, v1, v2, v3, mode]` (6 entries with leading ch0 placeholder\n// — same convention as vibe). Read may return 5 or 6 entries depending on how the BE handles\n// `anchor_count` for tilt; we detect by length so both shapes display correctly.\nconst MODE_LABELS = {\n    0: ['Ax', 'Ay', 'Az', 'n/a'],\n    1: ['a', 'nx', 'ny', 'nz'],\n    2: ['X', 'Y', 'Z', 'tilt_z_up'],\n    3: ['φ', 'θ', 'ψ', 'n/a'],\n};\nconst DEFAULT_AXIS_LABELS = ['a', 'b', 'c', 'd'];\nconst AXIS_CHANNEL_COUNT = 4;\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    isModalOpen: false,\n    modalMode: 'add',\n    modalEditingRowId: null,\n\n    _readOffset(dispValues){\n        // Legacy convention adds a leading 0 placeholder, so a tilt row is 6 entries; some BE\n        // shapes drop it and return 5 entries. Detect by length and align read indices.\n        return (dispValues && dispValues.length >= 6) ? 1 : 0;\n    },\n\n    // Mode is taken from the most recent row's last channel — matches legacy `lastObject.values[4]`.\n    activeAxisLabels: computed('displacementData.[]', function(){\n        const dispData = this.get('displacementData') || [];\n        if(!dispData.length){ return DEFAULT_AXIS_LABELS; }\n        const last = dispData[dispData.length - 1];\n        const values = (last && (last.values || last.get?.('values'))) || [];\n        const offset = this._readOffset(values);\n        const mode = Number(values[AXIS_CHANNEL_COUNT + offset]);\n        return MODE_LABELS[mode] || DEFAULT_AXIS_LABELS;\n    }),\n\n    columnSpecs: computed('activeAxisLabels', function(){\n        const labels = this.get('activeAxisLabels') || DEFAULT_AXIS_LABELS;\n        const out = labels.map((label, i) => ({\n            key: `c_${i}`,\n            label,\n            tableLabel: label,\n            valuesIndex: i,\n            isMode: false,\n            isTemp: false,\n        }));\n        out.push({ key: '__mode__', label: 'Mode', tableLabel: 'Mode', valuesIndex: AXIS_CHANNEL_COUNT, isMode: true, isTemp: false });\n        out.push({ key: '__temp__', label: 'Temperature', tableLabel: 'Temperature', isTemp: true });\n        return out;\n    }),\n\n    tableRows: computed('displacementData.[]', 'temperatureData.[]', 'columnSpecs', 'globalDatetimeFormat.value', function(){\n        const dispData = this.get('displacementData') || [];\n        const tempData = this.get('temperatureData') || [];\n        const specs = this.get('columnSpecs') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n\n        const tempById = {};\n        tempData.forEach(r => { tempById[r.id] = r; });\n\n        return dispData.map((dispRow) => {\n            const id = dispRow.id;\n            const dispValues = (dispRow.values || dispRow.get?.('values') || []);\n            const tempRow = tempById[id];\n            const tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n            const offset = this._readOffset(dispValues);\n\n            const cells = specs.map((spec) => {\n                if(spec.isTemp){\n                    const v = tempValues[0];\n                    return { key: spec.key, label: spec.label, value: v == null ? '' : v };\n                }\n                const raw = dispValues[spec.valuesIndex + offset];\n                return { key: spec.key, label: spec.label, value: raw == null ? '' : raw };\n            });\n\n            return {\n                id,\n                date: id,\n                formattedDate: moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt),\n                cells,\n            };\n        });\n    }),\n\n    modalFields: computed('columnSpecs', 'modalMode', 'modalEditingRowId', 'displacementData.[]', 'temperatureData.[]', function(){\n        const specs = this.get('columnSpecs') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingRowId');\n\n        let dispValues = [];\n        let tempValues = [];\n        if(mode === 'edit' && editingId){\n            const dispRow = (this.get('displacementData') || []).find(r => r.id === editingId);\n            const tempRow = (this.get('temperatureData') || []).find(r => r.id === editingId);\n            dispValues = dispRow ? (dispRow.values || dispRow.get?.('values') || []) : [];\n            tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n        }\n        const offset = this._readOffset(dispValues);\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && editingId\n                ? moment(editingId, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm:ss')\n                : moment().format('YYYY-MM-DDTHH:mm:ss'),\n        };\n\n        const channelFields = specs.map((spec) => {\n            let value = '';\n            if(mode === 'edit'){\n                if(spec.isTemp){\n                    value = tempValues[0];\n                }else{\n                    value = dispValues[spec.valuesIndex + offset];\n                }\n            }\n            return {\n                key: spec.key,\n                label: spec.label,\n                type: 'text',\n                value: value == null ? '' : value,\n            };\n        });\n\n        return [dateField, ...channelFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function(){\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingRowId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingRowId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const instrumentId = this.get('instrument.id');\n            const dispData = this.get('displacementData');\n            const tempData = this.get('temperatureData');\n            const dispRow = dispData ? dispData.find(r => r.id === rowId) : null;\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            const promises = [];\n            if(dispRow && dispRow.deleteRecord){ dispRow.deleteRecord(); promises.push(dispRow.save(adapterOptions)); }\n            if(tempRow && tempRow.deleteRecord){ tempRow.deleteRecord(); promises.push(tempRow.save(adapterOptions)); }\n            Promise.all(promises)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const specs = this.get('columnSpecs') || [];\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            const safeNum = (v) => {\n                const n = Number(v);\n                return Number.isFinite(n) ? n : 0;\n            };\n\n            // Tilt is 1-indexed on the BE: ch0 placeholder + 4 axis channels + Mode = 6 entries.\n            const dispValues = [0];\n            specs.forEach((spec) => {\n                if(spec.isTemp){ return; }\n                dispValues.push(safeNum(snapshot[spec.key]));\n            });\n            const tempValues = [safeNum(snapshot['__temp__'])];\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingRowId');\n\n            const tempData = this.get('temperatureData') || [];\n            const dispData = this.get('displacementData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            const existingTempAtNew = findRow(tempData, newId);\n            const existingDispAtNew = findRow(dispData, newId);\n            const hasExistingAtNewId = !!(existingTempAtNew || existingDispAtNew);\n\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                const oldDisp = findRow(dispData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n                if(oldDisp){ oldDisp.deleteRecord(); oldDisp.save(adapterOptions); }\n            }\n\n            if(hasExistingAtNewId){\n                const promises = [];\n                if(existingTempAtNew){ existingTempAtNew.set('values', tempValues); promises.push(existingTempAtNew.save(adapterOptions)); }\n                else { promises.push(store.createRecord('temperature-value', { id: newId, values: tempValues }).save(adapterOptions)); }\n                if(existingDispAtNew){ existingDispAtNew.set('values', dispValues); promises.push(existingDispAtNew.save(adapterOptions)); }\n                else { promises.push(store.createRecord('displacement-value', { id: newId, values: dispValues }).save(adapterOptions)); }\n                Promise.all(promises).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            const tempRecord = store.createRecord('temperature-value', { id: newId, values: tempValues });\n            tempRecord.save(adapterOptions);\n\n            const dispRecord = store.createRecord('displacement-value', { id: newId, values: dispValues });\n            dispRecord.save(adapterOptions).then(refreshRoute).catch(handleErr);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\n\n\nexport default Component.extend({\n    session: service(),\n\n    //Assume passing in: \n    //timeUnits: from Project Setting, the actual array of supported time units \n    //initValue: minute,hour,day,month,...\n\n    //IF YOU WANT TO USE THIS COMPONENT, YOUR PARENT COMPONENT NEEDS TO ADD ACTION: updateTimeDropdownUnit\n    init() {\n        this._super(...arguments);\n    },\n    getTimeUnitsArr: computed(\"timeUnits\",function(){\n        try{\n            return this.arrayCastString(this.get(\"timeUnits\").value);\n        }\n        catch(error){\n            console.log(\"Error in getTimeUnitsArr: \" + error);\n        }\n    }),\n    arrayCastString:function(strArr){\n        try{\n            return strArr.split(',');\n        }\n        catch(error){\n            console.log(\"Error in arrayCastString: \" + error);\n            return [];\n        }\n    },\n    actions: {\n        selectedValue(value){\n            let onChange = this.get('onChange');\n            if (onChange) onChange(value);\n        }\n    }\n});\n","export { default } from 'ember-leaflet/components/tooltip-layer';\n","import toriiIframePlaceholder from 'torii/components/torii-iframe-placeholder';\n\nexport default toriiIframePlaceholder;\n","","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport { Chart, registerables } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\nChart.register(...registerables);\n\nconst CHART_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n];\n\n// Value indices per channel (7 values per channel, 4 channels = 28 total)\nconst FREQ_INDICES = [2, 9, 16, 23];\nconst PPV_INDICES  = [4, 11, 18, 25];\nconst PPA_INDICES  = [5, 12, 19, 26];\n\nexport default Component.extend({\n    store: service(),\n    _chart: null,\n\n    chartMetric: computed(function() {\n        const chartType = this.attrs.getQueryParams('chart_type');\n        if (chartType === 'ppa') return 'PPA';\n        return 'PPV';\n    }),\n\n    chart_type: computed(function() {\n        return this.attrs.getQueryParams('chart_type');\n    }),\n\n    recordsToDisplay: computed(function() {\n        const r = this.attrs.getQueryParams('display_records');\n        if (r == null) return 100;\n        if (r == 1) return -1;\n        return parseInt(r);\n    }),\n\n    _getXYValueObj() {\n        const q = new URLSearchParams(window.location.search);\n        return {\n            advancedXMax:      q.get('advancedXMax')      ? parseFloat(q.get('advancedXMax'))      : null,\n            advancedXMin:      q.get('advancedXMin')      ? parseFloat(q.get('advancedXMin'))      : null,\n            advancedYLeftMax:  q.get('advancedYLeftMax')  ? parseFloat(q.get('advancedYLeftMax'))  : null,\n            advancedYLeftMin:  q.get('advancedYLeftMin')  ? parseFloat(q.get('advancedYLeftMin'))  : null,\n            advancedYAxisUnit: q.get('advancedYAxisUnit') || null,\n        };\n    },\n\n    _pointPassesFilter(xyObj, x, y) {\n        if (!xyObj) return true;\n        const { advancedXMin, advancedXMax, advancedYLeftMin, advancedYLeftMax } = xyObj;\n        const hasX = advancedXMin != null && advancedXMax != null;\n        const hasY = advancedYLeftMin != null && advancedYLeftMax != null;\n        if (hasX && hasY) return x >= advancedXMin && x <= advancedXMax && y >= advancedYLeftMin && y <= advancedYLeftMax;\n        if (hasX) return x >= advancedXMin && x <= advancedXMax;\n        if (hasY) return y >= advancedYLeftMin && y <= advancedYLeftMax;\n        return true;\n    },\n\n    _buildScatterData() {\n        const zoomChartData = this.get('zoomChartData');\n        const chartMetric   = this.get('chartMetric');\n        const chartType     = this.get('chart_type');\n        const recordsToDisplay = this.get('recordsToDisplay');\n        const xyObj  = this._getXYValueObj();\n        const isPpl  = chartType === 'ppl';\n        const valueIndices = chartMetric === 'PPA' ? PPA_INDICES : PPV_INDICES;\n        const channelLabels = [`${chartMetric} 1`, `${chartMetric} 2`, `${chartMetric} 3`, `${chartMetric} 4`];\n\n        // Transform raw records\n        let records = zoomChartData.map(item => {\n            const vals = item.get('values') || [];\n            return {\n                timestamp:   moment(item.get('id')).valueOf(),\n                freqs:       FREQ_INDICES.map(i => vals[i] != null ? vals[i] : null),\n                metricVals:  valueIndices.map(i => vals[i] != null ? vals[i] : null),\n            };\n        });\n\n        // Sort by max channel value ascending, keep top N (matching original NVD3 behaviour)\n        records.sort((a, b) => {\n            const maxA = Math.max(...a.metricVals.filter(v => v != null), 0);\n            const maxB = Math.max(...b.metricVals.filter(v => v != null), 0);\n            return maxA - maxB;\n        });\n        if (recordsToDisplay > 0 && recordsToDisplay < records.length) {\n            records = records.slice(-recordsToDisplay);\n        }\n\n        // Build one dataset per channel\n        return channelLabels.map((label, chIdx) => {\n            const points = [];\n            records.forEach(rec => {\n                const freq = rec.freqs[chIdx];\n                const val  = rec.metricVals[chIdx];\n                if (freq == null || val == null) return;\n                const x = isPpl ? Math.log10(freq) : freq;\n                if (!this._pointPassesFilter(xyObj, x, val)) return;\n                points.push({ x, y: val, timestamp: rec.timestamp, freq, rawY: val });\n            });\n            return {\n                label,\n                data:            points,\n                backgroundColor: CHART_COLORS[chIdx],\n                pointRadius:     2,\n                pointHoverRadius: 7,\n            };\n        });\n    },\n\n    _xAxisTitle() {\n        const ct = this.get('chart_type');\n        if (ct === 'ppl') return 'Log\\u2081\\u2080(Frequency) (Log Base 10 Hz)';\n        return 'Frequency (Hz)';\n    },\n\n    _yAxisTitle() {\n        const metric = this.get('chartMetric');\n        const unit   = this._getXYValueObj().advancedYAxisUnit;\n        const u      = unit && unit !== 'RAW' ? unit : 'mm';\n        if (metric === 'PPA') return `PPA (${u}/s\\u00B2)`;\n        return `PPV (${u}/s)`;\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const canvas = this.element.querySelector('canvas.chartjs-freq');\n        if (!canvas) return;\n\n        const datasets = this._buildScatterData();\n        const xyObj    = this._getXYValueObj();\n\n        // Pinned tooltip plugin\n        let pinnedElements = null;\n        const pinnedTooltipPlugin = {\n            id: 'pinnedTooltip',\n            afterEvent(chart, args) {\n                if (!pinnedElements || args.event.type === 'mouseout') return;\n                chart.setActiveElements(pinnedElements);\n                chart.tooltip.setActiveElements(pinnedElements, { x: 0, y: 0 });\n            }\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'scatter',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'nearest', intersect: true },\n                plugins: {\n                    legend: {\n                        display: true,\n                        position: 'top',\n                        align: 'end',\n                        onClick(_e, legendItem, legend) {\n                            const meta = legend.chart.getDatasetMeta(legendItem.datasetIndex);\n                            meta.hidden = !meta.hidden;\n                            legend.chart.update();\n                        },\n                        onHover(_e, legendItem, legend) {\n                            legend.chart.data.datasets.forEach((ds, i) => {\n                                ds.backgroundColor = i === legendItem.datasetIndex\n                                    ? CHART_COLORS[i]\n                                    : CHART_COLORS[i] + '33';\n                            });\n                            legend.chart.update('none');\n                        },\n                        onLeave(_e, _li, legend) {\n                            legend.chart.data.datasets.forEach((ds, i) => {\n                                ds.backgroundColor = CHART_COLORS[i];\n                            });\n                            legend.chart.update('none');\n                        }\n                    },\n                    tooltip: {\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].raw.timestamp).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const pt = item.raw;\n                                return [\n                                    `Freq: ${pt.freq != null ? pt.freq.toFixed(3) : 'N/A'} Hz`,\n                                    `${item.dataset.label}: ${pt.rawY != null ? pt.rawY.toFixed(4) : 'N/A'}`\n                                ];\n                            }\n                        }\n                    }\n                },\n                scales: {\n                    x: {\n                        type: 'linear',\n                        title: { display: true, text: this._xAxisTitle() },\n                        min: xyObj.advancedXMin != null ? xyObj.advancedXMin : undefined,\n                        max: xyObj.advancedXMax != null ? xyObj.advancedXMax : undefined,\n                        ticks: { callback: v => v.toFixed(2) },\n                        grid:  { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        title: { display: true, text: this._yAxisTitle() },\n                        min: xyObj.advancedYLeftMin != null ? xyObj.advancedYLeftMin : 0,\n                        max: xyObj.advancedYLeftMax != null ? xyObj.advancedYLeftMax : undefined,\n                        ticks: { callback: v => v.toFixed(3) },\n                        grid:  { display: true }\n                    }\n                }\n            },\n            plugins: [pinnedTooltipPlugin]\n        });\n\n        this.set('_chart', chart);\n        if (this.setData)  this.setData(datasets);\n        if (this.setChart) this.setChart(chart);\n\n        // Scroll to zoom X axis\n        canvas.addEventListener('wheel', e => {\n            e.preventDefault();\n            const xScale = chart.scales['x'];\n            if (!xScale) return;\n            const { left, right } = chart.chartArea;\n            const ratio  = Math.max(0, Math.min(1, (e.clientX - canvas.getBoundingClientRect().left - left) / (right - left)));\n            const span   = xScale.max - xScale.min;\n            const ZOOM   = 0.15;\n            const delta  = e.deltaY < 0 ? -span * ZOOM : span * ZOOM;\n            chart.options.scales.x.min = xScale.min + delta * ratio;\n            chart.options.scales.x.max = xScale.max - delta * (1 - ratio);\n            chart.update('none');\n        }, { passive: false });\n\n        // Drag to pan X axis\n        let panStartX = null, panXMin = null, panXMax = null;\n        canvas.addEventListener('mousedown', e => {\n            panStartX = e.clientX;\n            panXMin   = chart.scales['x'].min;\n            panXMax   = chart.scales['x'].max;\n            canvas.style.cursor = 'grabbing';\n        });\n        canvas.addEventListener('mousemove', e => {\n            if (panStartX === null) return;\n            const xPxRange = chart.chartArea.right - chart.chartArea.left;\n            const dxData   = -((e.clientX - panStartX) / xPxRange) * (panXMax - panXMin);\n            chart.options.scales.x.min = panXMin + dxData;\n            chart.options.scales.x.max = panXMax + dxData;\n            chart.update('none');\n        });\n        const onPanEnd = () => { panStartX = panXMin = panXMax = null; canvas.style.cursor = 'default'; };\n        canvas.addEventListener('mouseup', onPanEnd);\n        document.addEventListener('mouseup', onPanEnd);\n\n        // Click to pin/unpin tooltip\n        canvas.addEventListener('click', e => {\n            if (pinnedElements) {\n                pinnedElements = null;\n                chart.setActiveElements([]);\n                chart.tooltip.setActiveElements([], {});\n            } else {\n                const elements = chart.getElementsAtEventForMode(e, 'nearest', { intersect: true }, false);\n                if (elements.length) {\n                    pinnedElements = elements.map(el => ({ datasetIndex: el.datasetIndex, index: el.index }));\n                    chart.tooltip.setActiveElements(pinnedElements, { x: e.offsetX, y: e.offsetY });\n                }\n            }\n            chart.update('none');\n        });\n\n        // Double-click to reset zoom\n        canvas.addEventListener('dblclick', () => {\n            chart.options.scales.x.min = xyObj.advancedXMin != null ? xyObj.advancedXMin : undefined;\n            chart.options.scales.x.max = xyObj.advancedXMax != null ? xyObj.advancedXMax : undefined;\n            pinnedElements = null;\n            chart.setActiveElements([]);\n            chart.tooltip.setActiveElements([], {});\n            chart.update('none');\n        });\n    },\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,\n    colorPalette.orange2,\n    colorPalette.green3,\n    colorPalette.red1,\n    colorPalette.purple7,\n    colorPalette.beige22,\n    colorPalette.pink6,\n    colorPalette.gray5,\n    colorPalette.teal6,\n    colorPalette.cyan4,\n];\n\nconst GATEWAY_ENUM = Object.freeze({\n    Firmware: 0,\n    Coordinator: 1,\n    Voltage: 2,\n    RSSI: 3,\n    carrier: 4,\n    Readings: 5,\n    Uptime: 6,\n    Reconnection: 7,\n    Uploads: 8,\n    var_1: 9,\n    var_2: 10,\n    var_3: 11,\n    Temperature: 12,\n});\n\nconst AXIS_LABELS = {\n    Voltage: \"Voltage (V)\",\n    RSSI: \"RSSI (dBm)\",\n    Firmware: \"Firmware Ver.\",\n    Coordinator: \"Coordinator\",\n    Readings: \"Readings\",\n    Uptime: \"Uptime (s)\",\n    Reconnection: \"Reconnects\",\n    Uploads: \"Uploads\",\n    Temperature: \"Temperature (\\u00B0C)\",\n    carrier: \"Carrier\",\n    var_1: \"Var 1\",\n    var_2: \"Var 2\",\n    var_3: \"Var 3\",\n};\n\n// Shared line-building helper for both main chart and overview chart.\n// Includes guard for missing sourceData (vibe gateway historically needed this).\nfunction buildGatewayLines(sourceData, tempData, leftAxis, rightAxis) {\n    if (!sourceData) return [];\n\n    const leftIndex = GATEWAY_ENUM[leftAxis];\n    const rightIndex = GATEWAY_ENUM[rightAxis];\n\n    const tempValues = [];\n    if (tempData) {\n        tempData.forEach(item => {\n            const vals = item.get('values');\n            tempValues.push(vals ? vals[0] : null);\n        });\n    }\n\n    const leftLine = {\n        key: leftAxis,\n        yAxis: 'y',\n        values: sourceData.map((item, i) => {\n            let val;\n            if (leftAxis === 'Temperature' && tempData) {\n                val = (i < tempValues.length) ? tempValues[i] : null;\n            } else {\n                val = item.values ? item.values[leftIndex] : null;\n            }\n            return { x: moment(item.get('id')).valueOf(), y: val };\n        })\n    };\n\n    const rightLine = {\n        key: rightAxis,\n        yAxis: 'y2',\n        values: sourceData.map((item, i) => {\n            let val;\n            if (rightAxis === 'Temperature' && tempData) {\n                val = (i < tempValues.length) ? tempValues[i] : null;\n            } else {\n                val = item.values ? item.values[rightIndex] : null;\n            }\n            return { x: moment(item.get('id')).valueOf(), y: val };\n        })\n    };\n\n    return [leftLine, rightLine];\n}\n\nexport default Component.extend({\n    store: service(),\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    leftAxis: computed(function() {\n        let leftAxis = this.attrs.getQueryParams('left_axis_field');\n        return leftAxis || 'Voltage';\n    }),\n\n    rightAxis: computed(function() {\n        let rightAxis = this.attrs.getQueryParams('right_axis_field');\n        return rightAxis || 'RSSI';\n    }),\n\n    // Main chart: sourced from zoomChartData so brushing refetches and adds detail.\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'leftAxis', 'rightAxis', function() {\n        return buildGatewayLines(this.get('zoomChartData'), this.get('zoomTempData'), this.get('leftAxis'), this.get('rightAxis'));\n    }),\n\n    // Overview chart: always the full history (doesn't refetch on brush).\n    overviewChartLinesData: computed('fullRangeChartData', 'leftAxis', 'rightAxis', function() {\n        return buildGatewayLines(this.get('fullRangeChartData'), null, this.get('leftAxis'), this.get('rightAxis'));\n    }),\n\n    didInsertElement() {\n        this._super(...arguments);\n        const linesData = this.get('fullRangeChartLinesData');\n        const leftAxis = this.get('leftAxis');\n        const rightAxis = this.get('rightAxis');\n\n        const y1Title = AXIS_LABELS[leftAxis] || leftAxis;\n        const y2Title = AXIS_LABELS[rightAxis] || rightAxis;\n\n        this._buildMainChart(linesData, y1Title, y2Title);\n        this._buildOverviewChart();\n    },\n\n    _buildMainChart(linesData, y1Title, y2Title) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        let xMin, xMax;\n        linesData.forEach(l => {\n            l.values.forEach(v => {\n                if (v.x != null && v.y != null) {\n                    if (xMin === undefined || v.x < xMin) xMin = v.x;\n                    if (xMax === undefined || v.x > xMax) xMax = v.x;\n                }\n            });\n        });\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        const label = typeof pt.y === 'number' ? pt.y.toFixed(2) : String(pt.y);\n                        ctx.fillText(label, element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: { display: true, text: y1Title },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => typeof v === 'number' ? v.toFixed(2) : v }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: y2Title },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => typeof v === 'number' ? v.toFixed(2) : v }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const linesData = this.get('overviewChartLinesData') || [];\n        if (!linesData.length) return;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        let xMin, xMax;\n        newLines.forEach(l => {\n            (l.values || []).forEach(v => {\n                if (v.x != null && v.y != null) {\n                    if (xMin === undefined || v.x < xMin) xMin = v.x;\n                    if (xMax === undefined || v.x > xMax) xMax = v.x;\n                }\n            });\n        });\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('overviewChartLinesData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const newLines = this.get('overviewChartLinesData') || [];\n\n        newLines.forEach((line) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                overviewChart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin = this.get('axis_min');\n        const axisMax = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    axisScaleObserver2: observer('autoAxis2', 'axis_min_2', 'axis_max_2', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis2 = this.get('autoAxis2');\n        const axisMin2 = this.get('axis_min_2');\n        const axisMax2 = this.get('axis_max_2');\n\n        if (autoAxis2) {\n            chart.options.scales.y2.min = undefined;\n            chart.options.scales.y2.max = undefined;\n        } else {\n            chart.options.scales.y2.min = (axisMin2 != null && axisMin2 !== '') ? parseFloat(axisMin2) : undefined;\n            chart.options.scales.y2.max = (axisMax2 != null && axisMax2 !== '') ? parseFloat(axisMax2) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'GatewayChart.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\n// Chart line colors — sourced from color-palette\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,    // #0077b6\n    colorPalette.orange2,   // #FF7444\n    colorPalette.green3,    // #2a9d8f\n    colorPalette.red1,      // #D25353\n    colorPalette.purple7,   // #8b5cf6\n    colorPalette.beige22,   // #b08968\n    colorPalette.pink6,     // #ec4899\n    colorPalette.gray5,     // #6b7280\n    colorPalette.teal6,     // #10b981\n    colorPalette.cyan4,     // #06b6d4\n];\n\n// Fixed value indices per channel for each metric\nconst METRIC_INDICES = {\n    'Freq ': [2, 9, 16, 23],\n    'PPV ':  [4, 11, 18, 25],\n    'PPA ':  [5, 12, 19, 26],\n};\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    chartMetric: computed(function() {\n        const queryParams = new URLSearchParams(window.location.search);\n        const chartType = queryParams.get('chart_type');\n        if (chartType == null || chartType.trim() === 'frequency') {\n            return 'Freq ';\n        }\n        return chartType.toUpperCase() + ' ';\n    }),\n\n    isScatterMode: computed('chartMetric', function() {\n        return ['Freq ', 'PPV ', 'PPA '].includes(this.get('chartMetric'));\n    }),\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n    // Main chart sourced from zoomChartData to mirror NVD3 (Group By applies to visible chart).\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'chartMetric', function() {\n        const fullRangeChartData = this.get('zoomChartData');\n        const chartMetric = this.get('chartMetric');\n        const indices = METRIC_INDICES[chartMetric] || METRIC_INDICES['Freq '];\n\n        // Build time-ordered data points with per-channel values\n        const dataPoints = fullRangeChartData.map(item => {\n            const vals = item.get('values') || [];\n            return {\n                x: moment(item.get('id')).valueOf(),\n                ch: indices.map(idx => (vals[idx] !== undefined ? vals[idx] : null))\n            };\n        });\n\n        dataPoints.sort((a, b) => a.x - b.x);\n\n        // Build 4 lines, one per channel\n        const lines = [1, 2, 3, 4].map((ch, i) => ({\n            key: chartMetric.trim() + ' ' + ch,\n            values: dataPoints.map(pt => ({\n                x: pt.x,\n                y: pt.ch[i]\n            }))\n        }));\n\n        // Add temperature overlay on y2\n        const zoomTempData = this.get('zoomTempData');\n        if (zoomTempData && zoomTempData.length) {\n            lines.push({\n                key: 'T (°C)',\n                yAxis: 'y2',\n                hidden: false,\n                values: zoomTempData.map(item => {\n                    const rawValues = item.get('values');\n                    const arr = Array.isArray(rawValues) ? rawValues : [];\n                    return {\n                        x: moment(item.get('id')).valueOf(),\n                        y: arr[0] !== undefined ? arr[0] : null\n                    };\n                })\n            });\n        }\n\n        return lines;\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    _buildYAxisTitle(_yAxisLegend, _chartData) {\n        const chartMetric = this.get('chartMetric').trim();\n        const yAxisUnit = this.get('yAxisUnit');\n        const unit = yAxisUnit && yAxisUnit !== 'RAW' ? yAxisUnit : 'mm';\n\n        switch (chartMetric) {\n            case 'Freq':\n                return 'Frequency (Hz)';\n            case 'PPV':\n                return `PPV (${unit}/s)`;\n            case 'PPA':\n                return `PPA (${unit}/s²)`;\n            default:\n                return 'Unknown';\n        }\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const fullRangeChartLinesData = this.get('fullRangeChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildMainChart(fullRangeChartLinesData, yAxisTitle);\n            this._buildOverviewChart();\n        });\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        // Scatter mode for Freq/PPV/PPA — matches NVD3 vibe which used nv.models.scatter().\n        // Only applies to channel lines (y-axis); temperature (y2) stays a line.\n        const isScatter = this.get('isScatterMode');\n\n        const datasets = linesData.map((line, i) => {\n            const isChannelLine = (line.yAxis || 'y') === 'y';\n            const useScatter = isScatter && isChannelLine;\n            return {\n                label: String(line.key),\n                data: line.values,\n                borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n                backgroundColor: useScatter ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] : 'transparent',\n                borderWidth: 1.5,\n                showLine: !useScatter,\n                pointRadius: useScatter ? 3 : 0,\n                pointHoverRadius: 5,\n                pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n                pointHoverBorderWidth: 2,\n                tension: 0,\n                yAxisID: line.yAxis || 'y',\n                hidden: line.hidden || false\n            };\n        });\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        // Vibe-specific: use METRIC_INDICES for the current chartMetric (Freq/PPV/PPA)\n        // instead of anchorDistances — vibe has 4 fixed channels at known indices.\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n        const chartMetric = this.get('chartMetric');\n        const indices = METRIC_INDICES[chartMetric] || METRIC_INDICES['Freq '];\n        const isScatter = this.get('isScatterMode');\n\n        const datasets = [1, 2, 3, 4].map((ch, i) => ({\n            label: chartMetric.trim() + ' ' + ch,\n            data: fullRange.map(item => {\n                const vals = item.get('values') || [];\n                const idx = indices[i];\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (vals[idx] !== undefined) ? vals[idx] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: isScatter ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88' : 'transparent',\n            borderWidth: 1,\n            showLine: !isScatter,\n            pointRadius: isScatter ? 1.5 : 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n        const chartMetric = this.get('chartMetric');\n        const indices = METRIC_INDICES[chartMetric] || METRIC_INDICES['Freq '];\n\n        [1, 2, 3, 4].forEach((ch, i) => {\n            const label = chartMetric.trim() + ' ' + ch;\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === label);\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values') || [];\n                const idx = indices[i];\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (vals[idx] !== undefined) ? vals[idx] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nfunction resetNewGatewayObject(_this) {\n    // console.log(\"NewGatewayObject::: \");\n    _this.set('newGatewayObject', {});\n    _this.set('name', null);\n    _this.set('installDate', null);\n\n}\n\nexport default class CreateBluCellGateway extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewGatewayObject(this);\n    }\n\n    isAuthenticated = true;\n    newGatewayObject = {};\n    installDate = null;\n    authError = false;\n\n    actions = {\n        async createGateway(object){\n\n            let _this = this,\n            store = this.get('store'),\n            newGatewayObject = this.get('newGatewayObject');\n\n            this.set('isVisibleError',false);\n            this.set('duplicateError',false);\n            this.set('fieldError',false);\n\n            let error = false;\n\n            newGatewayObject.id = this.get('id');\n            newGatewayObject.installDate = this.get('installDate');\n            newGatewayObject.depth = this.get('depth');\n            newGatewayObject.active = true;\n\n            let interval_upload = await this.store.query('gateway-interval', {\n                filter: { interval_value: 5, interval_group_name: 'upload_interval' }\n            }).then(r => r.at(0)).catch(() => null);\n\n            let interval_read = await this.store.query('gateway-interval', {\n                filter: { interval_value: 5, interval_group_name: 'instrument_reading_interval' }\n            }).then(r => r.at(0)).catch(() => null);\n\n            if(typeof newGatewayObject.id === 'undefined' || newGatewayObject.id === \"\") {\n                error = true;\n                this.set('fieldError',true);\n                this.set('isVisibleError',true);\n            }\n\n            if (this.get('installDate') != null) {\n                newGatewayObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            let newGateway = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newGateway = store.createRecord('gateway', newGatewayObject);\n                    newGateway.set('gatewayType', store.peekRecord('gateway-type', this.get('typeID')));\n                    newGateway.set('gatewayUploadInterval', interval_upload);\n                    newGateway.set('gatewayReadInterval', interval_read);\n                } catch (err) {\n                    this.set('isVisibleError',true);\n                    error = true;\n                    if(err.message.includes('has already been used')) {\n                        this.set('duplicateError',true);\n                        dup = true;\n                    }\n                }\n            }\n            \n            this.set('authError', false);\n\n            if(!error) {\n                newGateway.save().then(function(results){\n                    // console.log(dup);\n                    if(results.id != null) {\n                        _this.get('submit')(results.id);\n                    } else {\n                        this.set('isVisibleError',true);\n                        error = true;\n                    }\n                }).catch(function(reason) {\n                    _this.set('isVisibleError',true);\n                    _this.set('authError',true);\n                }); \n            } \n        },\n        // bulbChanged(object)\n        // {\n        //     this.set(\"bulbed\",document.getElementById('newInstrumentObjectBulbed').checked);\n        // },\n        // plateChanged(object)\n        // {\n        //     this.set(\"plated\",document.getElementById('newInstrumentObjectPlated').checked);\n        // }\n    }\n}","import { computed, get } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\n\nfunction resetNewInstrumentObject(_this) {\n    //console.log('reset');\n    _this.set('newInstrumentObject', {});\n    //_this.set('name', null);\n    _this.set('zeroTimestamp', null);\n    _this.set('installDate', null);\n    //_this.set('east', null);\n    //_this.set('north', null);\n    //_this.set('depth', null);\n    //_this.set('azimuth', null);\n    //_this.set('dip', null);\n    //_this.set('instrumentType', 0);\n    //_this.set('headAt', 'HAC');\n    //_this.set('instrumentLength', 0);\n    //_this.set('strokeLength', 0);\n    //_this.set('referenceAnchor', null);\n    //_this.set('headExclusionLength', 0);\n    //_this.set('gaugeLength', 0);\n    //_this.set('bulbed', false);\n    //_this.set('plated', false);\n    //_this.set('stacked', false);\n    //_this.set('active', true);\n}\n\nexport default class CreatePackInstrument extends Component {\n    //@service session;\n    //@service currentUser;\n\n\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n    }\n\n    isAuthenticated = true;\n    newInstrumentObject = {};\n    headAt = 'HAC';\n    zeroTimestamp = null;\n    installDate = null;\n    authError = false;\n    project = null;\n    level = null;\n\n    actions= {\n\n        \n        setProject(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n\n\n\n    // actions = {\n        createInstrument(object){\n\n            //console.log(this.get('prevDup'));\n            //console.log((typeof this.get('prevDup') === \"undefined\"));\n\n            let _this = this,\n            store = this.get('store'),\n            newInstrumentObject = this.get('newInstrumentObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newInstrumentObject.id = this.get('id');\n            newInstrumentObject.zeroTimestamp = this.get('zeroTimestamp');\n            newInstrumentObject.installDate = this.get('installDate');\n            \n            //newInstrumentObject.east = this.get('east');\n            //newInstrumentObject.north = this.get('north');\n            //newInstrumentObject.depth = this.get('depth');\n            newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n            newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n            newInstrumentObject.active = true;\n            newInstrumentObject.instrumentStiffness = 0;\n\n            if(typeof newInstrumentObject.id === 'undefined' || newInstrumentObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n\n            if (this.get('zeroTimestamp') != null) {\n                newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('installDate') != null) {\n                newInstrumentObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            // console.log(get(this, 'duplicateError'));\n\n            let newInstrument = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    //console.log(this.get('prevDup'));\n                    if(err.message.includes('has already been used')) {\n                        //console.log('duplicate');\n                        this.setError('duplicateError',true);\n                        \n                        error = true;\n                        dup = true;\n                    }\n                    // console.log(err.message);\n                }\n            }\n            \n            this.setError('authError', false);\n\n            if (!error) {\n                \n                    newInstrument.save().then(function(results){\n                        //TODO::: Might be able to get rid of this.\n                        //Need to test that though.\n                        if(results.id != null) {\n                            store.createRecord('anchor', {number: 0, distance: 0, instrument: results}).save();\n                            store.createRecord('anchor', {number: 1, distance: 1, instrument: results}).save();\n                            store.createRecord('anchor', {number: 2, distance: 2, instrument: results}).save();\n                            store.createRecord('anchor', {number: 3, distance: 3, instrument: results}).save(); \n                            store.createRecord('anchor', {number: 4, distance: 4, instrument: results}).save(); \n                            store.createRecord('anchor', {number: 5, distance: 5, instrument: results}).save(); \n                            store.createRecord('anchor', {number: 6, distance: 6, instrument: results}).save();\n                            store.createRecord('anchor', {number: 7, distance: 7, instrument: results}).save();\n                            store.createRecord('anchor', {number: 8, distance: 8, instrument: results}).save();\n                            store.createRecord('anchor', {number: 9, distance: 9, instrument: results}).save();\n                            store.createRecord('anchor', {number: 10, distance: 10, instrument: results}).save();\n                            store.createRecord('anchor', {number: 11, distance: 11, instrument: results}).save();\n                            store.createRecord('anchor', {number: 12, distance: 12, instrument: results}).save();\n                            store.createRecord('anchor', {number: 13, distance: 13, instrument: results}).save();\n                            store.createRecord('anchor', {number: 14, distance: 14, instrument: results}).save();\n                            store.createRecord('anchor', {number: 15, distance: 15, instrument: results}).save();\n                            store.createRecord('anchor', {number: 16, distance: 16, instrument: results}).save();\n                            store.createRecord('anchor', {number: 17, distance: 17, instrument: results}).save();\n                            store.createRecord('anchor', {number: 18, distance: 18, instrument: results}).save();\n                            store.createRecord('anchor', {number: 19, distance: 19, instrument: results}).save();\n                            store.createRecord('anchor', {number: 20, distance: 20, instrument: results}).save();\n                            store.createRecord('anchor', {number: 21, distance: 21, instrument: results}).save();\n                            store.createRecord('anchor', {number: 22, distance: 22, instrument: results}).save();\n                            store.createRecord('anchor', {number: 23, distance: 23, instrument: results}).save();\n                            store.createRecord('anchor', {number: 24, distance: 24, instrument: results}).save();\n                            store.createRecord('anchor', {number: 25, distance: 25, instrument: results}).save();\n                            store.createRecord('anchor', {number: 26, distance: 26, instrument: results}).save();\n                            store.createRecord('anchor', {number: 27, distance: 27, instrument: results}).save();\n                            store.createRecord('anchor', {number: 28, distance: 28, instrument: results}).save();\n                        }\n\n                        if(results.id != null) {\n                            _this.get('submit')(results.id);\n                        } else {\n                            this.setError('isVisibleError',true);\n                            error = true;\n                        }\n                    }).catch(function(reason) {\n                        \n                        _this.setError('isVisibleError',true);\n                        _this.setError('authError',true);\n                    }); \n            } \n        }\n    }\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let displacementValueObjectValues = _this.get('displacementValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(displacementValueObjectValues).forEach(function(key,index) {\n        displacementValueObjectValues[key] = 0;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n    // newTimestampValue: computed('dateFormat', function() {\n    //     return moment().format(this.get('dateFormat'));\n    // }),\n\n    newDisplacementValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n    displacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 1; i <= this.get('instrumentAnchors').length; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        displacementValueObjectValues.shift();\n        return displacementValueObjectValues;\n    }),\n\n    newDisplacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n    \n    actions: {\n        setNewDisplacementValue(key, event) {\n            const vals = this.get('newDisplacementValueObjectValues');\n            vals[key] = event.target.value;\n        },\n        setNewTimestampValue(event) {\n            this.set('newTimestampValue', event.target.value);\n        },\n        setTemperatureValue(event) {\n            this.set('temperatureObjectValue', event.target.value);\n        },\n        saveNew(){\n            let _this = this,\n                store = this.get('store'),\n                newDisplacementValuesObject = this.get('newDisplacementValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                displacementValues = this.get('displacementValues'),\n                temperatureValues = this.get('temperatureValues')\n            ;\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newDisplacementValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newDisplacementValuesObject.values = Object.values(this.get('newDisplacementValueObjectValues'));\n            newDisplacementValuesObject.values.unshift('0');\n\n            const newDisplacementValues = store.createRecord('displacement-value', newDisplacementValuesObject);\n            // save new displacement-value to DB\n            const savedDisplacementValuesObject = newDisplacementValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if displacement-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //displacementValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n                \n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let gatewayValueObjectValues = _this.get('gatewayValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(gatewayValueObjectValues).forEach(function(key,index) {\n        gatewayValueObjectValues[key] = null;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n\n    newGatewayValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n\n    // look for isVisibleCreateNewForm variable change and reset newGatewayValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n\n    gatewayValueObjectValues: computed('anchorDistances', function() {\n        let gatewayValueObjectValues = [];\n        for (let i = 0; i <= this.get('anchorDistances').length - 1; i++) {\n            gatewayValueObjectValues[i] = 0;\n        }\n        return gatewayValueObjectValues;\n    }),\n\n    newGatewayValueObjectValues: computed('gatewayValueObjectValues', function() {\n        let gatewayValueObjectValues = [];\n        for (let i = 0; i <= this.get('gatewayValueObjectValues').length - 1; i++) {\n            gatewayValueObjectValues[i] = 0;\n        }\n        return gatewayValueObjectValues;\n    }),\n\n    actions: {\n        saveNew(){\n            //  console.log(\"saveNew\");\n            let _this = this,\n                store = this.get('store'),\n                newGatewayValuesObject = this.get('newGatewayValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                gatewayValues = this.get('gatewayValues'),\n                temperatureValues = this.get('temperatureValues');\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-gateway-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('gatewayId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newGatewayValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newGatewayValuesObject.values = Object.values(this.get('newGatewayValueObjectValues'));\n\n            const newGatewayValues = store.createRecord('gateway-value', newGatewayValuesObject);\n            // save new gateway-value to DB\n            const savedGatewayValuesObject = newGatewayValues.save({adapterOptions: this.get('gatewayId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if gateway-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //gatewayValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n\n            })\n            .catch(function(reason){\n                console.log(reason);\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import Component from \"@ember/component\";\nimport { computed, observer } from '@ember/object';\nimport { get3DAnimationData, buildEChartsBluVibeSimulation, applyGraphScaling, buildECharts3DBarForBluVibe, parseDataForEChartsXFocusYFocusZFocus3DBar, parseDataForEChartsXFocusYFocusZFocus2DBar, buildECharts2DBarForBluVibe,buildEChartsXYZFocus3DLineForBluVibe, parseDataForEChartsXYZFocus3DLine, buildEChartsXFocusYFocusZFocus3DLineForBluVibe, buildEChartsXFocusYFocusZFocus2DLineForBluVibe, parseDataForEChartsXFocusYFocusZFocus2DLine, parseDataForEChartsXFocusYFocusZFocus3DLine, getGraphUnit} from '../../helpers/frequency-event-library';\nimport { textLibrary} from '../../helpers/frequency-event-language-library';\nimport * as echarts from 'echarts';\nimport 'echarts-gl/dist/echarts-gl.min.js';\n\n\nexport default Component.extend({\n    is3D:false,\n    controlsText:\"\",\n    playbackOptions:{\n        isVisible: false,\n        isPlayLoop: false,\n        playbackSpeed:1,\n        playbackSpeedData:[5,4,3,2.5,2,1.75,1.5,1.25,1,0.75,0.5,0.25]\n    },\n    graphScaling: {\n        x: { min: null, max: null },\n        y: { min: null, max: null },\n        z: { min: null, max: null }\n    },\n    init() {\n        this._super(...arguments);\n    },\n    isShowConfig:{\n        isShowXYZ3DInstructions:true,\n    }, \n    getTimestamp:computed(function(){\n        const bluvibeV2ModelProfile = this.getCurrentBluvibeV2ModelProfile();\n        let timestamp = bluvibeV2ModelProfile.get(\"timestamp\");\n        let globalDatetimeFormat = this.get(\"globalDatetimeFormat\").get(\"value\");\n        const standardizedFormat = \"YYYY-MM-DD HH:mm:ss.SSS\";\n        const parsed = moment(timestamp, standardizedFormat, true);\n        let convertedTimestamp = globalDatetimeFormat ? parsed.format(`${globalDatetimeFormat}.SSS`) : parsed.format(standardizedFormat);\n        return convertedTimestamp;\n    }),\n    getControlsText:function(){\n        const tab = this.get(\"selectedFreqEventTabKey\");\n        const subTab = this.get(\"selectedFreqEventSubTabKey\");\n        const subSubTab = this.get(\"selectedFreqEventSubSubTabKey\");\n        const is3D = this.get(\"is3D\");\n        const ctrlsKey = `${tab}_${subTab}_${subSubTab}_controls`\n        // console.log(ctrlsKey)\n        switch(ctrlsKey){\n            case \"raw_raw_xyz_axis_focus_null_controls\":\n            case \"acceleration_sub_acceleration_linear_regression_sub_sub_xyz_axis_focus_controls\":\n            case \"velocity_sub_velocity_linear_regression_sub_sub_xyz_axis_focus_controls\":\n            case \"displacement_sub_displacement_linear_regression_sub_sub_xyz_axis_focus_controls\":\n                return textLibrary(\"controls_guide_1\");\n\n            case \"acceleration_sub_fft_sub_sub_x_axis_focus_controls\":\n            case \"acceleration_sub_fft_sub_sub_y_axis_focus_controls\":\n            case \"acceleration_sub_fft_sub_sub_z_axis_focus_controls\":\n\n            case \"velocity_sub_fft_sub_sub_x_axis_focus_controls\":\n            case \"velocity_sub_fft_sub_sub_y_axis_focus_controls\":\n            case \"velocity_sub_fft_sub_sub_z_axis_focus_controls\":\n\n            case \"displacement_sub_fft_sub_sub_x_axis_focus_controls\":\n            case \"displacement_sub_fft_sub_sub_y_axis_focus_controls\":\n            case \"displacement_sub_fft_sub_sub_z_axis_focus_controls\":\n\n                if(is3D)\n                    return textLibrary(\"controls_guide_1\");\n                else\n                    return textLibrary(\"-\");\n                \n            case \"raw_x_axis_focus_null_controls\":\n            case \"raw_y_axis_focus_null_controls\":\n            case \"raw_z_axis_focus_null_controls\":\n\n            case \"acceleration_sub_linear_regression_sub_sub_x_axis_focus_controls\":\n            case \"acceleration_sub_linear_regression_sub_sub_y_axis_focus_controls\":\n            case \"acceleration_sub_linear_regression_sub_sub_z_axis_focus_controls\":\n\n            case \"velocity_sub_linear_regression_sub_sub_x_axis_focus_controls\":\n            case \"velocity_sub_linear_regression_sub_sub_y_axis_focus_controls\":\n            case \"velocity_sub_linear_regression_sub_sub_z_axis_focus_controls\":\n\n\n            case \"displacement_sub_linear_regression_sub_sub_x_axis_focus_controls\":\n            case \"displacement_sub_linear_regression_sub_sub_y_axis_focus_controls\":\n            case \"displacement_sub_linear_regression_sub_sub_z_axis_focus_controls\":\n\n                if(is3D)\n                    return textLibrary(\"controls_guide_2\");\n                else\n                    return textLibrary(\"-\");v\n        }\n    },\n    getCurrentBluvibeV2ModelProfile:function(){\n        const bluvibeV2ModelProfiles = this.get(\"bluvibeV2ModelProfiles\");\n        let obj = null;\n        bluvibeV2ModelProfiles.forEach(profileObj=>{\n            // String compare — IDs may contain a letter in the new 11-char grouped format,\n            // which parseInt would silently truncate.\n            if(String(profileObj[\"id\"]).trim() === String(this.get(\"profileId\")).trim()){\n                obj = profileObj;\n            }\n        })\n        return obj;\n\n    },\n    rebuildEChartsComponent: function(){\n        // console.log(`current tab is: ${this.get(\"selectedFreqEventTabKey\")} ||| current sub tab is: ${this.get(\"selectedFreqEventSubTabKey\")}`);\n        const tab = this.get(\"selectedFreqEventTabKey\");\n        const subTab = this.get(\"selectedFreqEventSubTabKey\");\n        const subSubTab = this.get(\"selectedFreqEventSubSubTabKey\");\n        const chartDom = document.getElementById('bluvibe_frequency_event_echarts');\n        const bluvibeV2ModelProfile = this.getCurrentBluvibeV2ModelProfile();\n\n        // console.log(`rebuildEChartsComponent tab is: ${tab} ||| sub tab is: ${subTab} ||| sub sub tab is: ${subSubTab}`);\n        // console.log(\"rebuildEChartsComponent  sample\");\n        // console.log(this.get(\"bluvibeV2ModelData\")[0][\"attributes\"])\n        // console.log(\"rebuildEChartsComponent bluvibeV2ModelData length \");\n        // console.log(this.get(\"bluvibeV2ModelData\")[\"attributes\"].length)\n        //Update Scaling Textboxes for XYZ\n        this.setGraphVisibleScaling();\n        this.setPlaybackVisible(false);\n        if((bluvibeV2ModelProfile != null) && (chartDom != null) ){\n            if (chartDom) {\n                echarts.dispose(chartDom);\n            }\n            switch(tab){\n                case \"raw\":\n                    switch(subTab){\n                        case \"raw_xyz_axis_focus\":\n                            const data = parseDataForEChartsXYZFocus3DLine(this, this.get(\"bluvibeV2ModelData\"), \"time\", \"value\");\n                            buildEChartsXYZFocus3DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: ` `, zAxisLabel: `${this.get(\"advancedYAxisUnit\")}`, xDataLabel: \"RAW X\", yDataLabel: \"RAW Y\", zDataLabel: \"RAW Z\"})\n                            break;\n                        case \"x_axis_focus\":\n                            if(this.get(\"is3D\")){\n                                const data = parseDataForEChartsXFocusYFocusZFocus3DLine(this, this.get(\"bluvibeV2ModelData\"), \"x\", \"value\");\n                                buildEChartsXFocusYFocusZFocus3DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: ` `, zAxisLabel: `X (${this.get(\"advancedYAxisUnit\")})`})\n                            }else{\n                                const data = parseDataForEChartsXFocusYFocusZFocus2DLine(this, this.get(\"bluvibeV2ModelData\"), \"x\", \"value\"); \n                                buildEChartsXFocusYFocusZFocus2DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: `X (${this.get(\"advancedYAxisUnit\")})`})\n                            }\n                            break;\n                        case \"y_axis_focus\":\n                            if(this.get(\"is3D\")){\n                                const data = parseDataForEChartsXFocusYFocusZFocus3DLine(this, this.get(\"bluvibeV2ModelData\"), \"y\", \"value\");\n                                buildEChartsXFocusYFocusZFocus3DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: ` `, zAxisLabel: `Y (${this.get(\"advancedYAxisUnit\")})`})\n                            }else{\n                                const data = parseDataForEChartsXFocusYFocusZFocus2DLine(this, this.get(\"bluvibeV2ModelData\"), \"y\", \"value\"); \n                                buildEChartsXFocusYFocusZFocus2DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: `Y (${this.get(\"advancedYAxisUnit\")})`})\n                            }\n                            break;\n                        case \"z_axis_focus\":\n                            if(this.get(\"is3D\")){\n                                const data = parseDataForEChartsXFocusYFocusZFocus3DLine(this, this.get(\"bluvibeV2ModelData\"), \"z\", \"value\");\n                                buildEChartsXFocusYFocusZFocus3DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: ` `, zAxisLabel: `Z (${this.get(\"advancedYAxisUnit\")})`})\n                            }else{\n                                const data = parseDataForEChartsXFocusYFocusZFocus2DLine(this, this.get(\"bluvibeV2ModelData\"), \"z\", \"value\"); \n                                buildEChartsXFocusYFocusZFocus2DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: `Z (${this.get(\"advancedYAxisUnit\")})`})\n                            }\n                            break;\n                    }\n                    break;\n                case \"acceleration\":\n                    switch(subTab){\n                        case \"sub_acceleration_linear_regression\":\n                            switch(subSubTab){\n                                case \"sub_sub_xyz_axis_focus\":\n                                    const data = parseDataForEChartsXYZFocus3DLine(this, this.get(\"bluvibeV2ModelData\"), \"time\", \"acceleration\");\n                                    buildEChartsXYZFocus3DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: ` `, zAxisLabel: `Acceleration (${this.get(\"advancedYAxisUnit\")}/s\\u00B2)`, xDataLabel: \"Accel. X\", yDataLabel: \"Accel. Y\", zDataLabel: \"Accel. Z\"})\n                                    break;\n                                case \"sub_sub_x_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DLine(this, this.get(\"bluvibeV2ModelData\"), \"x\", \"acceleration\");\n                                        buildEChartsXFocusYFocusZFocus3DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: ` `, zAxisLabel: `X (${this.get(\"advancedYAxisUnit\")}/s\\u00B2)`})\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DLine(this, this.get(\"bluvibeV2ModelData\"), \"x\", \"acceleration\"); \n                                        buildEChartsXFocusYFocusZFocus2DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: `Acceleration X (${this.get(\"advancedYAxisUnit\")}/s\\u00B2)`})\n                                    }\n                                    break;\n                                case \"sub_sub_y_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DLine(this, this.get(\"bluvibeV2ModelData\"), \"y\", \"acceleration\");\n                                        buildEChartsXFocusYFocusZFocus3DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: ` `, zAxisLabel: `Y (${this.get(\"advancedYAxisUnit\")}/s\\u00B2)`})\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DLine(this, this.get(\"bluvibeV2ModelData\"), \"y\", \"acceleration\"); \n                                        buildEChartsXFocusYFocusZFocus2DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: `Acceleration Y (${this.get(\"advancedYAxisUnit\")}/s\\u00B2)`})\n                                    }\n                                    break;\n                                case \"sub_sub_z_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DLine(this, this.get(\"bluvibeV2ModelData\"), \"z\", \"acceleration\");\n                                        buildEChartsXFocusYFocusZFocus3DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: ` `, zAxisLabel: `Z (${this.get(\"advancedYAxisUnit\")}/s\\u00B2)`})\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DLine(this, this.get(\"bluvibeV2ModelData\"), \"z\", \"acceleration\"); \n                                        buildEChartsXFocusYFocusZFocus2DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: `Acceleration Z (${this.get(\"advancedYAxisUnit\")}/s\\u00B2)`})\n                                    }\n                                    break;\n                            }\n                            break;\n                        case \"sub_acceleration_fft\":\n                            switch(subSubTab){\n                                case \"sub_sub_x_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DBar(this, this.get(\"bluvibeV2ModelData\"), \"x\", \"frequency\", \"amplitude\");\n                                        buildECharts3DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: ` `, zAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")}/s\\u00B2)`})\n\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DBar(this, this.get(\"bluvibeV2ModelData\"), \"x\",\"frequency\", \"amplitude\");\n                                        buildECharts2DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")}/s\\u00B2)`})\n                                    }\n                                    break;\n                                case \"sub_sub_y_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DBar(this, this.get(\"bluvibeV2ModelData\"), \"y\", \"frequency\", \"amplitude\");\n                                        buildECharts3DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: ` `, zAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")}/s\\u00B2)`})\n\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DBar(this, this.get(\"bluvibeV2ModelData\"), \"y\",\"frequency\", \"amplitude\");\n                                        buildECharts2DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")}/s\\u00B2)`})\n                                    }\n                                    break;\n                                case \"sub_sub_z_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DBar(this, this.get(\"bluvibeV2ModelData\"), \"z\", \"frequency\", \"amplitude\");\n                                        buildECharts3DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: ` `, zAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")}/s\\u00B2)`})\n\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DBar(this, this.get(\"bluvibeV2ModelData\"), \"z\",\"frequency\", \"amplitude\");\n                                        buildECharts2DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")}/s\\u00B2)`})\n                                    }\n                                    break;\n                            }\n                            break;\n                    }\n                    break;\n                case \"velocity\":\n                    switch(subTab){\n                        case \"sub_velocity_linear_regression\":\n                            switch(subSubTab){\n                                case \"sub_sub_xyz_axis_focus\":\n                                    const data = parseDataForEChartsXYZFocus3DLine(this, this.get(\"bluvibeV2ModelData\"), \"time\", \"velocity\");\n                                    buildEChartsXYZFocus3DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: ` `, zAxisLabel: `Velocity (${this.get(\"advancedYAxisUnit\")}/s)`, xDataLabel: \"Velo. X\", yDataLabel: \"Velo. Y\", zDataLabel: \"Velo. Z\"})\n                                    \n                                    break;\n                                case \"sub_sub_x_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DLine(this, this.get(\"bluvibeV2ModelData\"), \"x\", \"velocity\");\n                                        buildEChartsXFocusYFocusZFocus3DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: ` `, zAxisLabel: `Velocity (${this.get(\"advancedYAxisUnit\")}/s)`})\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DLine(this, this.get(\"bluvibeV2ModelData\"), \"x\", \"velocity\"); \n                                        buildEChartsXFocusYFocusZFocus2DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: `Velocity (${this.get(\"advancedYAxisUnit\")}/s)`})\n                                    }\n                                    break;\n                                case \"sub_sub_y_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DLine(this, this.get(\"bluvibeV2ModelData\"), \"y\", \"velocity\");\n                                        buildEChartsXFocusYFocusZFocus3DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: ` `, zAxisLabel: `Velocity (${this.get(\"advancedYAxisUnit\")}/s)`})\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DLine(this, this.get(\"bluvibeV2ModelData\"), \"y\", \"velocity\"); \n                                        buildEChartsXFocusYFocusZFocus2DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: `Velocity (${this.get(\"advancedYAxisUnit\")}/s)`})\n                                    }\n                                    break;\n                                case \"sub_sub_z_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DLine(this, this.get(\"bluvibeV2ModelData\"), \"z\", \"velocity\");\n                                        buildEChartsXFocusYFocusZFocus3DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: ` `, zAxisLabel: `Velocity (${this.get(\"advancedYAxisUnit\")}/s)`})\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DLine(this, this.get(\"bluvibeV2ModelData\"), \"z\", \"velocity\"); \n                                        buildEChartsXFocusYFocusZFocus2DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: `Velocity (${this.get(\"advancedYAxisUnit\")}/s)`})\n                                    }\n                                    break;\n                            }\n                            break;\n                        case \"sub_velocity_fft\":\n                            switch(subSubTab){\n                                case \"sub_sub_x_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DBar(this, this.get(\"bluvibeV2ModelData\"), \"x\", \"frequency\", \"amplitude\");\n                                        buildECharts3DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: ` `, zAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")}/s)`})\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DBar(this, this.get(\"bluvibeV2ModelData\"), \"x\",\"frequency\", \"amplitude\");\n                                        buildECharts2DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")}/s)`})\n                                    }\n                                    break;\n                                case \"sub_sub_y_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DBar(this, this.get(\"bluvibeV2ModelData\"), \"y\", \"frequency\", \"amplitude\");\n                                        buildECharts3DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: ` `, zAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")}/s)`})\n\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DBar(this, this.get(\"bluvibeV2ModelData\"), \"y\",\"frequency\", \"amplitude\");\n                                        buildECharts2DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")}/s)`})\n                                    }\n                                    break;\n                                case \"sub_sub_z_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DBar(this, this.get(\"bluvibeV2ModelData\"), \"z\", \"frequency\", \"amplitude\");\n                                        buildECharts3DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: ` `, zAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")}/s)`})\n\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DBar(this, this.get(\"bluvibeV2ModelData\"), \"z\",\"frequency\", \"amplitude\");\n                                        buildECharts2DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")}/s)`})\n                                    }\n                                    break;\n                            }\n                            break;\n                    }\n                    break;\n                case \"displacement\":\n                    switch(subTab){\n                        case \"sub_displacement_linear_regression\":\n                            switch(subSubTab){\n                                case \"sub_sub_xyz_axis_focus\":\n                                    this.setPlaybackVisible(true);\n                                    const data = get3DAnimationData(this, this.get(\"bluvibeV2ModelData\"),this.get(\"bluvibeV2ModelPitchRollData\")); \n                                    buildEChartsBluVibeSimulation(this, data, {xAxisLabel: `${this.get(\"advancedYAxisUnit\")}`, yAxisLabel: `${this.get(\"advancedYAxisUnit\")}`, zAxisLabel: `${this.get(\"advancedYAxisUnit\")}`})\n                                    break;\n                                case \"sub_sub_x_axis_focus\":\n                                    if(this.get(\"is3D\")){                                        \n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DLine(this, this.get(\"bluvibeV2ModelData\"), \"x\", \"displacement\");\n                                        buildEChartsXFocusYFocusZFocus3DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: ` `, zAxisLabel: `Displacement (${this.get(\"advancedYAxisUnit\")})`})\n\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DLine(this, this.get(\"bluvibeV2ModelData\"), \"x\", \"displacement\"); \n                                        buildEChartsXFocusYFocusZFocus2DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: `Displacement (${this.get(\"advancedYAxisUnit\")})`})\n                                    }\n                                    break;\n                                case \"sub_sub_y_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DLine(this, this.get(\"bluvibeV2ModelData\"), \"y\", \"displacement\");\n                                        buildEChartsXFocusYFocusZFocus3DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: ` `, zAxisLabel: `Displacement (${this.get(\"advancedYAxisUnit\")})`})\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DLine(this, this.get(\"bluvibeV2ModelData\"), \"y\", \"displacement\"); \n                                        buildEChartsXFocusYFocusZFocus2DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: `Displacement (${this.get(\"advancedYAxisUnit\")})`})\n                                    }\n                                    break;\n                                case \"sub_sub_z_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DLine(this, this.get(\"bluvibeV2ModelData\"), \"z\", \"displacement\");\n                                        buildEChartsXFocusYFocusZFocus3DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: ` `, zAxisLabel: `Displacement (${this.get(\"advancedYAxisUnit\")})`})\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DLine(this, this.get(\"bluvibeV2ModelData\"), \"z\", \"displacement\"); \n                                        buildEChartsXFocusYFocusZFocus2DLineForBluVibe(this, data, {xAxisLabel: `Time (${getGraphUnit(\"time\")})`, yAxisLabel: `Displacement (${this.get(\"advancedYAxisUnit\")})`})\n                                    }\n                                    break;\n                            }\n                            break;\n                        case \"sub_displacement_fft\":\n                            switch(subSubTab){\n                                case \"sub_sub_x_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DBar(this, this.get(\"bluvibeV2ModelData\"), \"x\", \"frequency\", \"amplitude\");\n                                        buildECharts3DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: ` `, zAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")})`})\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DBar(this, this.get(\"bluvibeV2ModelData\"), \"x\",\"frequency\", \"amplitude\");\n                                        buildECharts2DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")})`})\n                                    }\n                                    break;\n                                case \"sub_sub_y_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DBar(this, this.get(\"bluvibeV2ModelData\"), \"y\", \"frequency\", \"amplitude\");\n                                        buildECharts3DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: ` `, zAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")})`})\n\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DBar(this, this.get(\"bluvibeV2ModelData\"), \"y\",\"frequency\", \"amplitude\");\n                                        buildECharts2DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")})`})\n                                    }\n                                    break;\n                                case \"sub_sub_z_axis_focus\":\n                                    if(this.get(\"is3D\")){\n                                        const data = parseDataForEChartsXFocusYFocusZFocus3DBar(this, this.get(\"bluvibeV2ModelData\"), \"z\", \"frequency\", \"amplitude\");\n                                        buildECharts3DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: ` `, zAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")})`})\n\n                                    }else{\n                                        const data = parseDataForEChartsXFocusYFocusZFocus2DBar(this, this.get(\"bluvibeV2ModelData\"), \"z\",\"frequency\", \"amplitude\");\n                                        buildECharts2DBarForBluVibe(this, data, {xAxisLabel: `Frequency (${getGraphUnit(\"frequency\")})`, yAxisLabel: `Amplitude (${this.get(\"advancedYAxisUnit\")})`})\n                                    }\n                                    break;\n                            }\n                            break;\n                    }\n                    break;\n\n            }\n            this.set(\"controlsText\", this.getControlsText());\n        }\n\n        //Update Integration Method button when visible:\n        const integrationMethodButton = document.getElementById(\"integrationMethodButtonID\");\n        if(integrationMethodButton)\n            integrationMethodButton.textContent = this.get(\"integrationMethod\");\n    },\n    setGraphVisibleScaling:  function () {\n        const tab = this.get(\"selectedFreqEventTabKey\");\n        const subTab = this.get(\"selectedFreqEventSubTabKey\");\n        const subSubTab = this.get(\"selectedFreqEventSubSubTabKey\");\n        const is3D = this.get(\"is3D\");\n        const xGraphScaling = document.getElementById(\"xGraphScaling\");\n        const yGraphScaling = document.getElementById(\"yGraphScaling\");\n        const zGraphScaling = document.getElementById(\"zGraphScaling\");\n        const ctrlsKey = `${tab}_${subTab}_${subSubTab}`\n        // console.log('setGraphVisibleScaling')\n        // console.log(ctrlsKey)\n        switch(ctrlsKey){\n            case \"raw_raw_xyz_axis_focus_null\":\n            case \"acceleration_sub_acceleration_linear_regression_sub_sub_xyz_axis_focus\":\n            case \"velocity_sub_velocity_linear_regression_sub_sub_xyz_axis_focus\":\n            case \"displacement_sub_displacement_linear_regression_sub_sub_xyz_axis_focus\":\n                xGraphScaling.style.display = \"flex\";\n                yGraphScaling.style.display = \"flex\";\n                zGraphScaling.style.display = \"flex\";\n                break;\n\n            case \"raw_x_axis_focus_null\":\n            case \"raw_y_axis_focus_null\":\n            case \"raw_z_axis_focus_null\":\n\n            case \"acceleration_sub_acceleration_linear_regression_sub_sub_x_axis_focus\":\n            case \"acceleration_sub_acceleration_linear_regression_sub_sub_y_axis_focus\":\n            case \"acceleration_sub_acceleration_linear_regression_sub_sub_z_axis_focus\":\n\n            case \"acceleration_sub_acceleration_fft_sub_sub_x_axis_focus\":\n            case \"acceleration_sub_acceleration_fft_sub_sub_y_axis_focus\":\n            case \"acceleration_sub_acceleration_fft_sub_sub_z_axis_focus\":\n\n            case \"velocity_sub_velocity_linear_regression_sub_sub_x_axis_focus\":\n            case \"velocity_sub_velocity_linear_regression_sub_sub_y_axis_focus\":\n            case \"velocity_sub_velocity_linear_regression_sub_sub_z_axis_focus\":\n\n            case \"velocity_sub_velocity_fft_sub_sub_x_axis_focus\":\n            case \"velocity_sub_velocity_fft_sub_sub_y_axis_focus\":\n            case \"velocity_sub_velocity_fft_sub_sub_z_axis_focus\":\n\n            case \"displacement_sub_displacement_linear_regression_sub_sub_x_axis_focus\":\n            case \"displacement_sub_displacement_linear_regression_sub_sub_y_axis_focus\":\n            case \"displacement_sub_displacement_linear_regression_sub_sub_z_axis_focus\":\n\n            case \"displacement_sub_displacement_fft_sub_sub_x_axis_focus\":\n            case \"displacement_sub_displacement_fft_sub_sub_y_axis_focus\":\n            case \"displacement_sub_displacement_fft_sub_sub_z_axis_focus\":\n\n                if(is3D){\n                    xGraphScaling.style.display = \"flex\";\n                    yGraphScaling.style.display = \"flex\";\n                    zGraphScaling.style.display = \"flex\";\n                }\n                else{\n                    xGraphScaling.style.display = \"flex\";\n                    yGraphScaling.style.display = \"flex\";\n                    zGraphScaling.style.display = \"none\";\n                }\n                break;\n        }\n    },\n    setPlaybackVisible:function(visibility){\n        this.set(\"playbackOptions.isVisible\", visibility);\n    },\n    getPlaybackSpeed: computed('playbackOptions.playbackSpeed', function () {\n        return this.get(\"playbackOptions.playbackSpeed\");\n    }),\n    getGraphTitle: computed('selectedFreqEventTabKey','selectedFreqEventSubTabKey',  'selectedFreqEventSubSubTabKey', function () {\n        const title_key=`${this.get(\"selectedFreqEventTabKey\")}_${this.get(\"selectedFreqEventSubTabKey\")}_${this.get(\"selectedFreqEventSubSubTabKey\")}_title`;\n        return textLibrary(title_key);\n    }),\n    setVisibleIntegrationMethod: computed('selectedFreqEventTabKey','selectedFreqEventSubTabKey', function () {\n        const tab = this.get(\"selectedFreqEventTabKey\");\n        const subTab = this.get(\"selectedFreqEventSubTabKey\");\n        let visible = false;\n        switch(tab){\n            case \"raw\":\n            case \"acceleration\":\n                visible = false;\n                break;\n            case \"velocity\":\n                switch(subTab){\n                    case \"sub_linear_regression\":\n                        visible = true;\n                        break;\n                    case \"sub_fft\":\n                        visible = false;\n                        break;\n                }\n                break;\n            case \"displacement\":\n                switch(subTab){\n                    case \"sub_linear_regression\":\n                        visible = true;\n                        break;\n                    case \"sub_fft\":\n                        visible = false;\n                        break;\n                }\n                break;\n\n        }\n        return visible\n    }),\n    showLoadingObserver: observer('showLoading', function () {\n        // console.log(`current is loading? ${this.get(\"showLoading\")}`)\n        if(!this.get(\"showLoading\")){\n            this.rebuildEChartsComponent();\n        }\n    }),\n\n    actions: {\n        cyclePlayLoop(){\n            this.set(\"playbackOptions.isPlayLoop\", !this.get(\"playbackOptions.isPlayLoop\"));\n        },\n        cyclePlaybackSpeed(value){\n            this.set(\"playbackOptions.playbackSpeed\", Number(value));\n            console.log(value)\n        },\n        updateSimulationIndex(value) {\n        this.set('simulationIndex', parseInt(value));\n        this.updateChartPosition();\n        },\n\n        toggleSimulationPlay() {\n        this.toggleProperty('isPlaying');\n        if (this.isPlaying) {\n            this.animate();\n        } else {\n            cancelAnimationFrame(this.animationFrame);\n        }\n        },\n        resetGraphScaling(){\n            const maxXGraph = document.getElementById(\"maxXGraph\");\n            const minXGraph = document.getElementById(\"minXGraph\");\n            const maxYGraph = document.getElementById(\"maxYGraph\");\n            const minYGraph = document.getElementById(\"minYGraph\");\n            const maxZGraph = document.getElementById(\"maxZGraph\");\n            const minZGraph = document.getElementById(\"minZGraph\");\n            maxXGraph.value = null;\n            minXGraph.value = null;\n            maxYGraph.value = null;\n            minYGraph.value = null;\n            maxZGraph.value = null;\n            minZGraph.value = null;\n\n            this.graphScaling.x.max = null;\n            this.graphScaling.x.min = null;\n            this.graphScaling.y.max = null;\n            this.graphScaling.y.min = null;\n            this.graphScaling.z.max = null;\n            this.graphScaling.z.min = null;\n            applyGraphScaling(this);\n\n        },\n        updateGraphScaling(component){\n            const tbID = component.target.id;\n            const tbValue = component.target.value;\n            console.log(`id: ${tbID}, value: ${tbValue}`);\n\n            const value = tbValue === \"\" ? null : parseFloat(tbValue);\n\n            if (tbID == \"maxXGraph\") this.graphScaling.x.max = value;\n            if (tbID == \"minXGraph\") this.graphScaling.x.min = value;\n            if (tbID == \"maxYGraph\") this.graphScaling.y.max = value;\n            if (tbID == \"minYGraph\") this.graphScaling.y.min = value;\n            if (tbID == \"maxZGraph\") this.graphScaling.z.max = value;\n            if (tbID == \"minZGraph\") this.graphScaling.z.min = value;\n\n            applyGraphScaling(this);\n        },\n        handleToggle3D(){\n            // console.log(\"clicked handleToggle3D\");\n            const curr3D = this.get(\"is3D\");\n            if(curr3D){\n                this.set(\"is3D\", false);\n            }\n            else{\n                this.set(\"is3D\", true);\n            }\n            this.rebuildEChartsComponent();\n        },\n        handleToggleIntegrationMethod(){\n            const buttonElement = document.getElementById(\"integrationMethodButtonID\");\n            console.log(`clicked handleToggle3D button id:${buttonElement.textContent}`);\n            if(buttonElement.textContent === \"trapazoidal\"){\n                buttonElement.textContent = \"simpson\";\n                this.set(\"integrationMethod\", \"simpson\");\n            }else{\n                buttonElement.textContent = \"trapazoidal\";\n                this.set(\"integrationMethod\", \"trapazoidal\");\n            }\n        }\n    },\n});\n","import { camelize } from '@ember/string';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default class EditInstrument extends Component.extend({\n    gatewayReadingsIntervals: null,\n\n    init(){\n        this._super(...arguments);\n    },\n    \n    store: service(),\n    isAuthenticated : true,\n    // selectedReadingIntervalID : null,\n    selectedModel : null,\n    editing : 0,\n    \n    getGatewayUploadIntervalID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayUploadInterval = gw.gatewayUploadInterval;\n        // console.log(\"gatewayUploadInterval::: \" + gatewayUploadInterval)\n        if(gatewayUploadInterval == null){\n            return 0;\n        }\n            return (gatewayUploadInterval.id).toString();\n    }),\n\n    getGatewayReadIntervalID: computed(function() {\n        let gw = this.get('gateway');\n        let gatewayReadInterval = gw.gatewayReadInterval;\n        // console.log(\"gatewayReadInterval::: \" + gatewayReadInterval)\n        if(gatewayReadInterval == null){\n            return 0;\n        }\n        return (gatewayReadInterval.id).toString();\n    }),\n    \n}){\n    @service router;\n    @service store;\n    isAuthenticated = true;\n    _this = this;\n\n    actions = {\n        //in order for this to work the id of the select element must be the same as the attribute name\n        setGatewayInterval(event) {\n            let gateway = this.get('gateway');\n            const selectedOptions = Array.from(event.target.selectedOptions);\n            //id of the newly selected interval\n            const selectedValue = parseInt(selectedOptions.map(option => option.value));    \n            //interval attribute name\n            const intervalType = event.target.id;\n            // when the record has no interval records associated with it, when you try to save an error is thrown.\n            // I avoid this by defaulting the interval to 5 minutes when the one is saved and the other is null.\n            let notSelected = intervalType == 'gatewayReadInterval' ? 'gatewayUploadInterval' : 'gatewayReadInterval';\n\n            this.store.findRecord('gateway-interval', selectedValue).then((interval) => { \n                let notSelectedIntervalValue = gateway[notSelected];\n                let group_name = intervalType == 'gatewayReadInterval' ? 'instrument_reading_interval' : 'upload_interval';\n                if(notSelectedIntervalValue == null){\n                    //if the non-selected interval is null I default it here.\n                    this.store.query('gateway-interval', {\n                        filter: {\n                          interval_value: 5,\n                          interval_group_name: group_name\n                        }\n                        }).then(function(results) {\n                            gateway.set(notSelected, results.get('firstObject'));\n                            gateway.set(intervalType, interval); // Set the related object as the new value of the attribute\n                \n                            gateway.save().then(() => {\n                                console.log('Gateway saved successfully!');\n                            }).catch((error) => {\n                                console.log('Error saving gateway:', error);\n                            });\n            \n                        }).catch(function(error) {\n                        console.log(\"Error Getting interval_upload object::: \" + error);\n                      });\n                } else {\n                    \n                    gateway.set(intervalType, interval); // Set the related object as the new value of the attribute\n                    gateway.save().then(() => {\n                        console.log('Gateway saved successfully!');\n                    }).catch((error) => {\n                        console.log('Error saving gateway:', error);\n                    });\n                }                    \n            });\n            \n        },\n                \n        updatePage(){\n            let store = this.get('store');\n            let gateway = this.get('gateway');\n            gateway.save();\n        },\n        viewData(id) {\n            this.get('router').transitionTo('raw-gateway-data', id);\n        },\n        tGraph(id) {\n            //console.log(\"Edit-gateway::: \" + id)\n            this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, 'voltage-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveGateway(){\n            const _this = this;\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/gateway\";\n                }\n            } else {\n                window.location.href = \"/gateway\";\n            }\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        // updateProperty(propertyName, propertyValue) {\n        //     this.set(propertyName, propertyValue);\n        // },\n    \n\n\n    }\n}\n\n\n\n// import Component from '@ember/component'; \n// export default Component.extend({ \n//     classNames: ['person-select'], \n//     people: null, \n//     selectedPerson: null, \n//     actions: { \n//         selectPerson(person) { \n//             this.set('selectedPerson', person); \n//         } \n//     } \n// });\n","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class EditInstrument extends Component.extend({\n    init(){\n        this._super(...arguments);\n            this.set(\"showLoading\", false);\n    },\n    \n}) {\n    @service router;\n    @service store;\n    //@service session;\n    //@service currentUser;\n    isAuthenticated = true;\n    showLoading = false;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    actions = {\n        viewData(id) {\n            this.set(\"showLoading\", true);\n            let subModel = this.get(\"instrument\")[\"subModel\"];\n            let endDateObj = new moment();\n            let startDateObj = moment(endDateObj).subtract(1, 'days').format('YYYY-MM-DDTHH:mm');\n            let formattedEndDateObj = endDateObj.format('YYYY-MM-DDTHH:mm');\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\");\n            console.log(`edit instrument baseUnit: ${baseUnit}`)\n            if(subModel == \"B\"){\n                this.get('router').transitionTo('raw-frequency-events-data', id, {\n                    queryParams: {\n                        \"advancedStartDate\": startDateObj, \n                        \"advancedEndDate\": formattedEndDateObj, \n                        \"profile_id\": undefined,\n                        \"analysis_category\": \"raw\",\n                        \"method\": \"trapezoidal\", \n                        \"advancedYAxisUnit\": baseUnit\n                    }\n                });\n\n            }else{\n                this.get('router').transitionTo('raw-data', id, { \n                    queryParams: { \n                        \"advancedStartDate\": startDateObj, \n                        \"advancedEndDate\": formattedEndDateObj, \n                        \"advancedYAxisUnit\": baseUnit\n                    }\n                });\n\n            }\n            //this.viewData(id);\n        },\n        tGraph(id) {\n            let endDateObj = new moment();\n            let startDateObj = moment(endDateObj).subtract(7, 'days').format('YYYY-MM-DDTHH:mm');\n            let formattedEndDateObj = endDateObj.format('YYYY-MM-DDTHH:mm');\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\");\n            // console.log(\"startDateObj: \" + startDateObj + \" endDateObj: \" + formattedEndDateObj);\n            // console.log(\"base unit for this instrument is: \" +  baseUnit)\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values', { queryParams: { \"chart_type\":\"ppv\", \"advancedStartDate\": startDateObj, \"advancedEndDate\": formattedEndDateObj, \"advancedYAxisUnit\": baseUnit}});\n\n        },\n        fEvent(id) {\n            this.set(\"showLoading\", true);\n            let endDateObj = new moment();\n            let startDateObj = moment(endDateObj).subtract(7, 'days').format('YYYY-MM-DDTHH:mm');\n            let formattedEndDateObj = endDateObj.format('YYYY-MM-DDTHH:mm');\n            // console.log(\"startDateObj: \" + startDateObj + \" endDateObj: \" + formattedEndDateObj);\n            // console.log(\"base unit for this instrument is: \" +  baseUnit)\n            this.get('router').transitionTo('frequency-events', id, { \n                queryParams: { \n                    \"advancedStartDate\": startDateObj, \n                    \"advancedEndDate\": formattedEndDateObj\n                }\n            });\n        },\n        fGraph(id) {\n            this.get('router').transitionTo('frequency-graphs.frequency-graph', id, 'displacement-values');\n            //this.sGraph(id, 'displacement-values');\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveInstrument(){\n            const _this = this;\n            // console.log(\"test\");\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/instruments\";\n                }\n            } else {\n                window.location.href = \"/instruments\";\n            }            \n        }\n    }\n}","import { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport Component from \"@ember/component\";\n\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({ \n});","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport { toJpeg } from 'html-to-image';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport html2canvas from 'html2canvas';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'frequency-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n    worker: new Worker('/js/screenshot-worker.js'),\n\n    capitalizeFirstLetter: function(string) {\n        return string.charAt(0).toUpperCase() + string.slice(1);\n    },\n    //Added for Advanced Filter Feature\n    getXYValueObj:function(){\n        let xyValueObj = {};\n\n        const queryParams = new URLSearchParams(window.location.search);\n\n        const advancedEndDate = queryParams.get('advancedEndDate');\n        const advancedStartDate = queryParams.get('advancedStartDate');\n        const advancedXMax = queryParams.get('advancedXMax');\n        const advancedXMin = queryParams.get('advancedXMin');\n        const advancedYAxisUnit = queryParams.get('advancedYAxisUnit');\n        const advancedYLeftMax = queryParams.get('advancedYLeftMax');\n        const advancedYLeftMin = queryParams.get('advancedYLeftMin');\n\n        xyValueObj[\"advancedEndDate\"]   = advancedEndDate ? advancedEndDate : null;\n        xyValueObj[\"advancedStartDate\"] = advancedStartDate ? advancedStartDate : null;\n        xyValueObj[\"advancedXMax\"]      = advancedXMax ? Number.parseFloat(advancedXMax) : null;\n        xyValueObj[\"advancedXMin\"]      = advancedXMin ? Number.parseFloat(advancedXMin) : null; \n        xyValueObj[\"advancedYAxisUnit\"] = advancedYAxisUnit ? advancedYAxisUnit : null; \n        xyValueObj[\"advancedYLeftMax\"]  = advancedYLeftMax ? Number.parseFloat(advancedYLeftMax) : null;\n        xyValueObj[\"advancedYLeftMin\"]  = advancedYLeftMin ? Number.parseFloat(advancedYLeftMin) : null; \n        return xyValueObj;\n\n    },\n\n    //find what sort of \n    chartMetric: computed(function(){\n        let chartMetric = this.attrs.getQueryParams('chart_type');\n        //this looks strange but we're only charting ppv and ppa\n        //but the default chartMetric is frequency for the other charts that use this param\n        if( chartMetric == null || chartMetric == 'frequency' ){\n            return 'PPV ';\n        }\n        else if( chartMetric == 'ppa' ){\n            return 'PPA ';\n        }\n        else if( chartMetric == 'ppl' ){\n            return 'PPV ';\n        }\n        return 'PPV ';\n    }),  \n    recordsToDisplay: computed(function(){\n        let recordsToDisplay = this.attrs.getQueryParams('display_records');\n        if(recordsToDisplay == null){\n          return '100';\n        }\n        if(recordsToDisplay == 1){\n            return -1;\n        }\n        return recordsToDisplay;\n    }),\n    chDataPoints: function(chartData, ordinalValue){\n        let filteredData = [];\n        let firstValue = 'Freq ' + ordinalValue;\n        let secondValue = this.get('chartMetric') + ordinalValue;\n        \n        filteredData = chartData.map(function(item){\n            let chartData;\n            chartData = [ item[firstValue] ,item[secondValue], item['timestamp']];    \n            return chartData;\n        })\n        return filteredData;\n    },\n    anchorDistances: computed('instrument', 'fullRangeChartData', function () {\n        return [this.get('chartMetric') + '1'];\n      }\n    ),\n    zoomDataPoints: computed('zoomChartData', function () {\n        let chartMetric = this.get('chartMetric');\n        \n        let recordsToDisplay = this.get(\"recordsToDisplay\");\n        let zoomChartData = this.get(\"zoomChartData\");\n        let zoomTimePoints = this.get('zoomTimePoints');\n        \n        zoomChartData = zoomChartData.map(function (item, i){\n          let temporaryObject = new Object();\n        \n          temporaryObject['timestamp'] = moment( zoomTimePoints[i] ).valueOf(); //zoomTimePoints[i].getProperties('timestamp')['timestamp'];\n          temporaryObject['Freq X'] = item.values[2];\n          temporaryObject[\"Freq Y\"] = item.values[16];\n          temporaryObject[\"Freq Z\"] = item.values[16];\n          temporaryObject[\"Freq R\"] = item.values[23];\n          temporaryObject[\"PPV X\"] = item.values[4];\n          temporaryObject[\"PPV Y\"] = item.values[11];\n          temporaryObject[\"PPV Z\"] = item.values[18];\n          temporaryObject[\"PPV R\"] = item.values[25];\n          temporaryObject[\"PPA X\"] = item.values[5];\n          temporaryObject[\"PPA Y\"] = item.values[12];\n          temporaryObject[\"PPA Z\"] = item.values[19];\n          temporaryObject[\"PPA R\"] = item.values[26];\n\n\n\n          return temporaryObject;\n        });\n        function swap(items, leftIndex, rightIndex){\n          var temp = items[leftIndex];\n          items[leftIndex] = items[rightIndex];\n          items[rightIndex] = temp;\n        }\n    \n        function partition(items, left, right) {\n          var pivot   = maxValue(items[Math.floor((right + left) / 2)],chartMetric), //middle element\n              i       = left, //left pointer\n              j       = right; //right pointer\n          while (i <= j) {\n              while (maxValue(items[i], chartMetric) < pivot) {\n                  i++;\n              }\n              while (maxValue(items[j], chartMetric) > pivot ){\n                  j--;\n              }\n              if (i <= j) {\n                  swap(items, i, j); //swap two elements\n                  i++;\n                  j--;\n              }\n          }\n          return i;\n        }\n    \n        function quickSort(items, left, right) {\n          var index;\n          if (items.length > 1) {\n              index = partition(items, left, right); //index returned from partition\n              if (left < index - 1) { //more elements on the left side of the pivot\n                  quickSort(items, left, index - 1);\n              }\n              if (index < right) { //more elements on the right side of the pivot\n                  quickSort(items, index, right);\n              }\n          }\n          return items;\n        }\n    \n        function maxValue(_data, chartMetric){\n          var out = 0;\n          out = Math.max(_data[chartMetric + '1'], _data[chartMetric + '2'], _data[chartMetric + '3'], _data[chartMetric + '4']);\n          return out;\n        }\n    \n        zoomChartData = quickSort(zoomChartData, 0, zoomChartData.length - 1);\n        if(recordsToDisplay >0 && recordsToDisplay < zoomChartData.length){\n          //console.log(\"begin::: \" + (zoomChartData.length - (1+parseInt(recordsToDisplay))));\n          //console.log(\"end::: \" + (zoomChartData.length - 1));\n    \n          zoomChartData = zoomChartData.slice( -1 * (recordsToDisplay));\n        }\n        zoomChartData = zoomChartData.sortBy(\"timestamp\");\n         \n        return this.getData(zoomChartData);\n    \n    }),\n    zoomTimePoints: map('zoomChartData', function (item) {\n        let itemID = item.get('id');\n        //console.log(\"zoomTimePoints ItemID : \" + itemID);\n        return itemID;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints','zoomTimePoints','zoomTempPoints','seismicEventsChartDistXData', 'blastEventsChartDistXData', function () {\n        return this.get('zoomDataPoints');//zoomChartLinesData;\n    }),\n    //Added for Advanced Filter Feature\n    graphPointValidator:function(xyValueObj, x,y){\n        //This function is called by getData.\n        //This validator takes in a point and then proceeds to check if it meets either or both x and y axis range.\n        //Cases:\n        //  - If there is a range obj to consider, \n        //      - If the range object contains both x and y range, then (x,y) must be within BOTH ranges INCLUSIVELY\n        //      - If the range object contains either x or y range, then (x,y) must be within either ranges INCLUSIVELY\n        //  - If there is not range object, then that means it runs to default, which is \"no such validator\"\n        //Other case it can return False is when the user is using Auto Scaling.\n        //The idea of using this validator function is preserving original framework or appending points to a data array\n        // console.log(`xyValueObj is None? ${this.xyValueObj == undefined}`);\n        if (xyValueObj){\n            //Case user provide both X and Y ranges\n            if (xyValueObj[\"advancedYLeftMin\"] != null && xyValueObj[\"advancedYLeftMax\"] != null && xyValueObj[\"advancedXMin\"] != null && xyValueObj[\"advancedXMax\"] != null){\n                let xMin = xyValueObj[\"advancedXMin\"];\n                let xMax = xyValueObj[\"advancedXMax\"];\n                let yLeftMin = xyValueObj[\"advancedYLeftMin\"];\n                let yLeftMax = xyValueObj[\"advancedYLeftMax\"];\n                // console.log(`Validating: x:${x}, y:${y}`);\n                if((xMin <= Number.parseFloat(x) && (Number.parseFloat(x) <= xMax)) && ((yLeftMin <= Number.parseFloat(y)) && (Number.parseFloat(y) <= yLeftMax))){\n                    // console.log(`   PASSED`);\n                    return true;\n                }else{\n                    // console.log(`   FAILED`);\n                    return false;\n                }\n            }\n            //Case user provide only X range\n            else if ( xyValueObj[\"advancedXMin\"] != null && xyValueObj[\"advancedXMax\"] != null){\n                let xMin = xyValueObj[\"advancedXMin\"];\n                let xMax = xyValueObj[\"advancedXMax\"];\n                if((xMin <= Number.parseFloat(x)) && (Number.parseFloat(x) <= xMax)){\n                    return true;\n                }else{\n                    return false;\n                }\n            }\n            //Case user provide only Y range\n            else if ( xyValueObj[\"advancedYLeftMin\"] != null && xyValueObj[\"advancedYLeftMax\"] != null){\n                let yLeftMin = xyValueObj[\"advancedYLeftMin\"];\n                let yLeftMax = xyValueObj[\"advancedYLeftMax\"];\n                if((yLeftMin <= Number.parseFloat(y)) && (Number.parseFloat(y) <= yLeftMax)){\n                    return true;\n                }else{\n                    return false;\n                }\n            }\n            else{\n                return true;\n            }\n        }else{\n            return true;\n        }\n    },\n    getData: function(points) { \n        //Added for Advanced Filter Feature\n        let xyValueObj = this.getXYValueObj();\n        let data = [];\n        let chartMetric = this.get(\"chartMetric\");\n        let channels = [chartMetric + \"X\",chartMetric + \"Y\",chartMetric + \"Z\",chartMetric + \"R\"];\n        let frequency = [\"Freq X\", \"Freq Y\", \"Freq Z\", \"Freq R\"]; \n        let chart_type = this.get(\"chart_type\");\n        for (let i = 0; i < channels.length; i++) {\n            let valuesOfValues = [];\n        \n            for(let j = 0; j< points.length; j++){\n                let x = points[j][frequency[i]];\n                let y = points[j][channels[i]];\n                //Added for Advanced Filter Feature\n                if (this.graphPointValidator(xyValueObj, chart_type === \"ppl\" ? Math.log10(x) : x, y)){\n                    //This is for calulcating spcial values of x points. Keep on adding more should you need, but be smart\n                    if(chart_type == \"ppl\"){\n                        valuesOfValues.push({x: Math.log10(x), y: y, timestamp: points[j][\"timestamp\"] , size: 5, shape: \"circle\", xGraphIndex:frequency[i], yGraphIndex:channels[i]});  \n                        \n                    }else{\n                        valuesOfValues.push({x: x , y: y, timestamp: points[j][\"timestamp\"] , size: 5, shape: \"circle\", xGraphIndex:frequency[i], yGraphIndex:channels[i]});        \n                    }   \n                }          \n            }  \n            data.push({\n                key: channels[i],\n                values: valuesOfValues\n            });\n        }\n        // console.log(\"data : \");\n        // console.log(data);\n        return data;\n    },\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n    chart_type: computed(function(){\n        let chart_type = this.attrs.getQueryParams('chart_type');\n        return chart_type;\n    }),\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let measurementTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_')\n        //console.log(\"measurementTitle:::: \" + measurementTitle);\n        let promise = this.get('store').queryRecord('measurement', {title: \"vibration\"});\n        return promise;\n    }),\n    y1AxisTitle: computed(function(){\n        let title = '';\n        let units = '';\n        let axisName = '';\n        let chartMetric = this.get(\"chartMetric\");\n        chartMetric = chartMetric.trim();\n        if( chartMetric == \"PPV\"){\n          title = \"PPV\";\n        }\n        if(chartMetric == \"PPA\"){\n          title = \"PPA\";\n        }\n        if(chartMetric == \"Freq\"){\n          title = \"Frequency\";\n        }\n        if(chartMetric == \"PPL\"){\n            title = \"PPV\";\n          }\n        switch (title) {\n            case 'Frequency':\n                axisName = 'Frequency';\n                units = 'Hz';\n                break;\n            case 'PPV':\n                axisName = \"PPV\";\n                units += `${this.getXYValueObj()['advancedYAxisUnit']}/s`;\n                break;\n            case 'PPL':\n                axisName = \"PPL\";\n                units +=  `${this.getXYValueObj()['advancedYAxisUnit']}/s`;\n                break;\n            case 'PPA':\n                axisName = \"PPA\";\n                units +=  `${this.getXYValueObj()['advancedYAxisUnit']}/s²`;\n                break;\n            default:\n                axisName = 'Unknown';\n        }\n    \n        title = axisName + ' (' + units + ')';\n        return title;\n    }),\n    mainPartTitle: computed(function(){\n        let title = '';\n        let chartMetric = this.get(\"chart_type\");\n        chartMetric = chartMetric.trim();\n        if( chartMetric == \"ppv\"){\n            title = \"Frequency\";\n        }\n        if(chartMetric == \"ppa\"){\n            title = \"Frequency\";\n        }\n        if(chartMetric == \"ppl\"){\n            title = \"Log(Frequency)\";\n        }\n        return title;\n    }),\n    x1AxisTitle: computed(function(){\n        let title = '';\n        let chartMetric = this.get(\"chart_type\");\n        chartMetric = chartMetric.trim();\n        if( chartMetric == \"ppv\"){\n            title = this.get(\"mainPartTitle\") +  \" (Hz)\";\n        }\n        if(chartMetric == \"ppa\"){\n            title = this.get(\"mainPartTitle\") +  \" (Hz)\";\n        }\n        if(chartMetric == \"ppl\"){\n            title = this.get(\"mainPartTitle\") +  \" (Log Base 10 (Hz))\";\n        }\n        return title;\n    }),\n    didInsertElement: function() {\n        const _this = this;\n        const zoomChartLinesData = _this.get('zoomChartLinesData');\n        let zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-frequency-line-chart-svg');    \n        let yAxisLegend = this.get('yAxisLegend');\n        let apiCallsPromises = [yAxisLegend];\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            let title = _this.get(\"y1AxisTitle\");\n            let x_axisName = _this.get(\"x1AxisTitle\");\n            let type = _this.get(\"mainPartTitle\");\n\n            //let zoomChart = nv.models.lineChartWithFocusAPI(false)\n            let zoomChart = nv.models.scatterChart()\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .x(function(d) { \n                    return +d.x; \n                })\n                .y(function(d) { \n                    return +d.y; \n                })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(false)\n                .showDistY(false)\n                .showLegend(true)\n                .noData('No usable data')\n                \n            ;\n\n            //zoomChart.legend.margin({bottom: 500});\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n                zoomChart.xAxis\n                    .axisLabel(x_axisName)\n                    .axisLabelDistance(20)\n                    .tickPadding(30)\n                    .showMaxMin(false)\n                    .tickFormat(d3.format(\"2\"));\n\n                zoomChart.yAxis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n\n                zoomChart.xAxis.tickFormat(d3.format('.02f'));\n                zoomChart.yAxis.tickFormat(d3.format('.02f'))\n                        \n                zoomChart.forceY([0]);\n\n                zoomChart.yScale(d3.scale.linear());\n                \n                zoomChart.xScale(d3.scale.linear());\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(10)\n                ;\n\n                //zoomChart.yAxis.tickFormat(d3.format(\"1\"));\n\n                //Forcing Y Axis values and tick values for clean looking log graph\n                // zoomChart.forceY([0.5, 2000]); //Make sure y axis starts at 1 not 0\n                // zoomChart.yAxis.tickValues([1, 5, 10, 50, 100, 500, 1000, 2000, 5000]); //Continue pattern for more ticks\n                // zoomChart.forceX([0.5, 100]); //Make sure y axis starts at 1 not 0\n                // zoomChart.xAxis.tickValues([0.5, 1, 2, 5, 10, 20, 50, 100, 1000]); //Continue pattern for more ticks\n\n                zoomChart.tooltip.contentGenerator(function (obj) { \n                    let toolTipText = \"\";\n                    toolTipText = '<div style=\\'margin: 5px 5px 5px 5px;\\'>';\n                    toolTipText += '</div>';\n                    let timestampFormatter = d3.time.format('%m/%e/%y %H:%M:%S.%L');\n                    let newDate = new Date(obj[\"point\"].timestamp);\n                    // console.log(\"formatted newDate: \" + timestampFormatter(newDate))\n                    // let xValue = Number(obj[\"point\"].x).toPrecision(4);\n                    toolTipText += 'Measured At: ' + timestampFormatter(newDate) + '<br />' + obj[\"point\"][\"xGraphIndex\"] + \": \" + obj[\"point\"].x + '<br />' + obj[\"point\"][\"yGraphIndex\"] + ': ' + obj[\"point\"].y;\n\n                    toolTipText += '</div>';\n                    return toolTipText;\n                });\n                // console.log(zoomChartLinesData)\n                zoomChartSVG\n                    .datum(zoomChartLinesData)\n                    .transition()\n                    .call(zoomChart);\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                _this.sendAction('setData',zoomChartLinesData);\n                _this.sendAction('setChart',zoomChart);\n\n                return zoomChart;\n            });\n        });\n    },\n    async captureLargeDOM(element, chunkHeight) {\n        const canvas = document.createElement('canvas');\n        const context = canvas.getContext('2d');\n        const totalHeight = element.scrollHeight;\n        const totalWidth = element.scrollWidth;\n        \n        canvas.width = totalWidth;\n        canvas.height = totalHeight;\n    \n        let yOffset = 0;\n    \n        while (yOffset < totalHeight) {\n            console.log(\"Chunking...\");\n            const viewport = element.cloneNode(true);\n            viewport.style.height = `${chunkHeight}px`;\n            viewport.style.overflow = 'hidden';\n            viewport.style.transform = `translateY(-${yOffset}px)`;\n    \n            const chunkCanvas = await html2canvas(viewport);\n            context.drawImage(chunkCanvas, 0, yOffset);\n    \n            yOffset += chunkHeight;\n        }\n    \n        // Convert the final canvas to JPG\n        return new Promise((resolve) => {\n            canvas.toBlob((blob) => {\n                resolve(blob);\n            }, 'image/jpeg');\n        });\n      },\n\n    actions: {\n         downloadScreenshot() {\n            console.log(\"Clicked take screenshot\");\n            try{\n                const element = document.getElementById('GRAPH2');\n                console.log(\"Creating canvass...\");\n                // Capture the screenshot on the main thread\n                const canvas = toJpeg(element, { quality: 0.95 }).then(function (dataUrl) {\n                    var link = document.createElement('a');\n                    link.download = 'my-image-name.jpeg';\n                    link.href = dataUrl;\n                    link.click();\n                  });\n                console.log(\"Done\");\n            }catch(error){\n                console.error('Error capturing screenshot:', error);\n\n            }\n\n        }\n    }\n});\n\n\n\n// let id =  this.get('instrument').get(\"id\");\n// let endDatetodayObjObj = new moment();\n// let formattedEndDateObj = endDatetodayObjObj.format('YYYY-MM-DDTHH:mm');\n\n// let fileName = `${chartMetric ? chartMetric : \"\"}-frequency_graph-${id}-${formattedEndDateObj}`","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    temperaturePoints: [],\n    distXRiseUpAnimationDuration: 500,\n    // chartMetric: computed(function(){\n    // let chartMetric = this.attrs.getQueryParams('chart_type');\n    //     if(chartMetric == null){\n    //       return 'voltage';\n    //     }\n    //    //console.log(\"chartMetric::: \" + chartMetric);\n    //     return chartMetric;\n    // }),\n    leftAxis: computed(function(){\n        let leftAxis = this.attrs.getQueryParams('left_axis_field');\n        if(leftAxis == null){\n          leftAxis = 'Voltage';\n        }\n        return leftAxis;\n    }),      \n    rightAxis: computed(function(){\n        let rightAxis = this.attrs.getQueryParams('right_axis_field');\n        if(rightAxis == null){\n            rightAxis = 'RSSI';\n          }\n          return rightAxis;\n    }),\n\n    GATEWAY_ENUM: Object.freeze({\n        Firmware: 0,\n        Coordinator: 1,\n        Voltage: 2,\n        RSSI: 3,\n        carrier: 4, \n        Readings: 5, \n        Uptime: 6, \n        Reconnection: 7, \n        Uploads: 8, \n        var_1: 9, \n        var_2: 10, \n        var_3: 11,\n        Temperature: 12,        \n    }),\n\n    // zoomTempPoints: computed(function(){\n    //     // let right = this.get('zoomDataPointsRightAxis');\n    //     let temperaturePoints = [];\n    //     let zoomTempData = this.get(\"zoomTempData\");\n    //     zoomTempData.forEach(function(item, i){\n    //         var chartData = { values: item.get(\"values\") };\n    //         temperaturePoints.push(chartData.values[0]);\n    //         // let temperaturePoints = this.get('temperaturePoints').push(chartData.values);\n    //     });\n        \n    //     return temperaturePoints; //chartData;\n    // }),\n    zoomDataPointsLeftAxis: computed(function(){\n        \n        let zoomChartData = this.get(\"zoomChartData\");\n        console.log(\"this.leftAxis\");\n        console.log(this.leftAxis)\n        let leftAxisIndex = this.GATEWAY_ENUM[this.leftAxis]\n        \n        let zoomLeftAxis = zoomChartData.map(function (item, i){\n            return item.values[leftAxisIndex];            \n        });\n        // console.log(JSON.stringify(zoomLeftAxis))\n        return zoomLeftAxis;\n    }),\n    \n    zoomDataPointsRightAxis: computed(function(){\n        //console.log(\"zoomDataPointsRightAxis::::::::::::::: 8\");\n        let zoomRightAxis = null;\n        if(this.rightAxis != null){\n            let zoomChartData = this.get(\"zoomChartData\");\n            let rightAxisIndex = this.GATEWAY_ENUM[this.rightAxis]        \n            zoomRightAxis = zoomChartData.map(function (item, i){\n                return item.values[rightAxisIndex];            \n            });\n        }\n        ////console.log(\"zoomRightAxis::::::: \" + JSON.stringify(zoomRightAxis));\n        // console.log(JSON.stringify(zoomRightAxis))\n        return zoomRightAxis;\n\n    }),\n\n    zoomDataPoints: computed('zoomChartData', function () {\n       //console.log(\"zoomDataPoints::::::::::::::: 4 and 6 \" + this.get(\"chartDataValueName\") );\n        let left = this.get('zoomDataPointsLeftAxis');\n        \n        return left;\n    }),\n\n    fullRangeDataPoints: computed('fullRangeChartData', function () {\n        let fullRangePoints = null;\n        let itemHolder = {};\n\n        fullRangePoints = this.get('fullRangeChartData');\n        fullRangePoints.map(function (item, i){\n            let itemHolder = { values: item.get(\"values\") };\n            return itemHolder;\n        });\n        \n        return fullRangePoints;\n        \n    }),\n\n/*     \n    fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n       //console.log(\"zoomTimePoints::::::::::::::: 9\");    \n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n       //console.log(\"fullRangeTimePoints::::::::::::::: 13\");\n        return item.get('id');\n    }),\n    \n    anchorDistances: computed('gateway', 'fullRangeChartData', function() {\n        let leftAxis = this.get('leftAxis'); \n       //console.log(\"anchorDistances::::::::::::::: 10   ::\" + leftAxis);\n        return [leftAxis];\n    }),\n\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n       //console.log(\"zoomChartLinesData::::::::::::::: 2\");    \n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n        let tempPoints = this.get('zoomTempPoints');\n            \n        // console.log(\"zoomTempPoints::: \" + JSON.stringify(tempPoints));\n        // console.log(\"zoomTempPoints::: \" + this.get('temperaturePoints'));\n        \n        let anchorDistances = this.get('anchorDistances');\n        let zoomChartLinesData = [];\n\n        var mName = _this.get('chartDataModelName');\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            dataPoint\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[0]\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n       //console.log(\"TEMP::: \" + _this.get('chartDataModelName'));\n        let zoomTempPoints = this.get('zoomDataPointsRightAxis');\n        var temp = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                //console.log(\"temp Points::: \" + zoomTempPoints);\n                return [\n                    moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        //console.log(temp);\n        zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        \n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n       //console.log(\"fullRangeChartLinesData::::::::::::::: 11\");    \n        const _this = this;\n        const fullRangeDataPoints = this.get('fullRangeDataPoints');\n        const fullRangeTimePoints = this.get('fullRangeTimePoints');\n        \n        let fullRangeTempPoints = this.get('zoomDataPointsRightAxis');\n        let anchorDistances = this.get('anchorDistances');\n\n        let fullRangeChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                   //console.log(\"fullReang:::::::::::::::::::\" + _this.GATEWAY_ENUM[_this.leftAxis])\n                    ////console.log(\"DataPoint::: \" + dataPoint.values[chartLineIndex]);\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[_this.GATEWAY_ENUM[_this.leftAxis]]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n\n        var temperature = {key: this.get('rightAxis'),\n            type: 'lines',\n            yAxis: 2,\n            values: fullRangeTempPoints.map(function(dataPoint, dataPointIndex) {\n                return [\n                    moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                    dataPoint,\n                ];\n            })\n        };\n        return fullRangeChartLinesData;           \n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n       //console.log(\"chartDataModelName::::::::::::::: 5   \" + this.get('zoomChartData').query.model_name);    \n        //console.log(\"zoomChartData:\" + this.get('zoomChartData').query.model_name);\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n       //console.log(\"yAxisLegend::::::::::::::: 14\");    \n        let chartTitle = 'voltage'\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        //let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n    getTitleAndUnits: function(axis){\n        let axisValues = {\"Voltage\": \"Voltage, V\", \"RSSI\": \"RSSI, dBm\", \"Firmware\": \"Firmware Ver.\", \"Readings\": \"Readings\", \n                            \"Uptime\": 'Uptime - in Seconds.', \"Reconnection\": \"Reconnects\", \"Uploads\": \"Uploads\",\n                            \"Temperature\": \"Temperature,C\", \"var_1\": 9, \"var_2\": 9,  \"var_3\": 10}\n        // console.log(\"getTitleAndUnits::::::::::::::: \" + axisValues[axis]);\n        return axisValues[axis];\n    },\n    didInsertElement: function() {\n        \n       //console.log(\"didInsertElement::::::::::::::: 1\");    \n        const _this = this,\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n        const zoomChartLinesData = _this.get('zoomChartLinesData');\n        const fullRangeChartLinesData = _this.get('fullRangeChartLinesData');\n        \n        let zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg');\n        \n        let fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg');\n        let yAxisLegend = this.get('yAxisLegend');\n        let apiCallsPromises = yAxisLegend;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(false)\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showLegend(true)\n                .showDistX(true)\n                .noData('No usable data');\n\n            zoomChart.showYAxis = true;\n            zoomChart.y2Axis.showYAxis = true;\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        //console.log(\"D:::::::::: \" + d);\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        //console.log(nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d)));\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    })\n                ;\n               \n                let axis1Title = _this.getTitleAndUnits(_this.get('leftAxis'));\n                let axis2Title = _this.getTitleAndUnits(_this.get('rightAxis'));\n                \n                zoomChart.y1Axis\n                    .axisLabel(axis1Title)\n                    .axisLabelDistance(10);\n                \n                zoomChart.y2Axis\n                    .axisLabel(axis2Title)\n                    .axisLabelDistance(10)\n                ;\n                    \n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                zoomChart.y2Axis.tickFormat(d3.format(\".2f\"));\n                \n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                let legend = zoomChart.legend;\n                if(legend.controls){\n                    legend.controls.forEach(function(d, i) {\n                        d.disabled = false;\n                    });\n                }\n\n                //console.log(\"zoomChart::::\" + zoomChart.legend);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    //console.log(\"BRUSH END::::::::::::::::::::\");\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(false);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n                \n                function selectControls() {\n                    // console.log(\":::::::::::::::::::::: selectControls\");\n                    //zoomChart.chartData.forEach(function(series) { series.disabled = false; });                  \n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n                    tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    tooltipClass = 'other';\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                        \n                }\n\n                //     if (typeof(tooltipContent) === 'object') {\n                //         if (tooltipContent.type === 'Blast') {\n                //             tooltipClass = 'blast';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                //         } else if (tooltipContent.type === 'Seismic') {\n                //             tooltipClass = 'seismic';\n                //             eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                //         } else if (tooltipContent.type === 'BluVibe') {\n                //             tooltipClass = 'bluvibe';\n                //             eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                //         } else if (tooltipContent.type === 'Other') {\n                //             tooltipClass = 'other';\n                //         }\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                //                       '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                //                       eventSize\n                //         ;\n                //     } else {\n                //         tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                //     }\n\n                //     return {\n                //         tooltipClass: tooltipClass,\n                //         tooltipText: tooltipText\n                //     };\n                // }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(\"VibeEventsArray:::\" + vibeEventsArray);\n                    //console.log(distXMouseMove);\n \n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                // d3.select('.nv-y2.nv-axis')\n                // .classed('nv-disabled', false)\n                // .attr('transform', 'translate(0,0)');\n        \n                nv.utils.windowResize(zoomChart.update);\n\n                // zoomChart.dispatch.on('stateChange', function(e) { \n                //     nv.log('New State:', JSON.stringify(e)); \n                // });\n                // zoomChart.state.dispatch.on('change', function(state){\n                //     nv.log('state', JSON.stringify(state));\n                // });\n\n               //console.log(\":::::::::::::::::::::::::::setData called\")\n                // _this.sendAction('setData',zoomChartLinesData);\n                // _this.sendAction('setChart',zoomChart);\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            //.showYAxis(true)\n        ;\n        \n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) {\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n        \n    }\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n//import JSONAPISerializer from '@ember-data/serializers/json';\n\nexport default Component.extend({\n\n    store: service(),\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n    yAxisUnit:null,\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if(yAxisUnitParam){\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n    },\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    // vibeEventsChartDistXData: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log('vibeEvents');\n    //     //console.log(events);\n    //     if ( this.get('vibeEvents') ) {\n    //         return [{\n    //             key: 'BluVibe',\n    //             type: 'distX',\n    //             color: '#80bf5c',\n    //             values: this.get('vibeEvents').map(function(event) {\n    //                 return [\n    //                     moment( event.get('id') ).valueOf(),\n    //                     event.get('size') ? (event.get('size') * -20) + 20 : 20\n    //                 ];\n    //             })\n    //         }];\n    //     }\n    //     return false;\n    // }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            let data_set = this.get('blastEvents').map(function(event) {\n                //console.log(event.get('timestamp'));\n                return {\n                    type: 'Blast',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n            //console.log(data_set);\n            return data_set;\n        }\n        return false;\n    }),\n\n    // vibeEventsArray: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log(events);\n    //     if ( events ) {\n    //         return events.map(function(event) {\n    //             return {\n    //                 type: 'BluVibe',\n    //                 time: event.get('id'),\n    //                 timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n    //                 ppa: event.get('ppa'),\n    //                 ppv: event.get('ppv'),\n    //                 freq: event.get('frequency')\n    //             };\n    //         }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n    //     }\n    //     return false;\n    // }),\n\n    zoomTempPoints: computed('zoomTempData', function () {\n        let zoomTempData = this.get('zoomTempData');\n        let zoomChartData = this.get(\"zoomDataPoints\");\n        // console.log(\"HERE::::::::::::::::::\");  \n        zoomTempData = zoomTempData.map(item => {\n            var chartData = {'timestamp': item.getProperties('id')['id'], 'values':{ values: item.get(\"values\") }['values']} ;\n            return chartData;\n        })\n    \n        // above returns ALL readings from the BluVibe instrument\n        // chartData::: {\"values\":[25]}\n        let filterArray = zoomTempData.filter((elem) => {\n            return zoomChartData.some((ele) => {\n            return ele.timestamp === elem.timestamp;\n            });\n        });\n    \n        filterArray = filterArray.map(function(item){\n            return {'values':item['values']};\n        })\n        return filterArray;\n    }),\n    capitalizeFirstLetter: function(string) {\n        return string.charAt(0).toUpperCase() + string.slice(1);\n    },\n\n    chartMetric: computed(function(){\n      let chartMetric = this.attrs.getQueryParams('chart_type');\n      if(chartMetric == null || chartMetric.trim() == 'frequency'){\n        return 'Freq ';\n      }\n      return chartMetric.toUpperCase()+ \" \";\n    }),\n    recordsToDisplay: computed(function(){\n      let recordsToDisplay = this.attrs.getQueryParams('display_records');\n      if(recordsToDisplay == null){\n        return '100';\n      }\n      if(recordsToDisplay == 1){\n        return -1;\n      }\n      return recordsToDisplay;\n    }),\n    chDataPoints: function(chartData, metric){\n        let filteredData = [];\n        filteredData = chartData.map(function(item){\n            let chartData = '';\n            chartData = item[metric];    \n            return chartData;\n        })\n        return filteredData;\n    },\n    \n    zoomDataPoints: computed('zoomChartData', function () {\n        let chartMetric = this.get('chartMetric');\n        let recordsToDisplay = this.get(\"recordsToDisplay\");\n        // console.log(\"recordsToDisplay::: \" + recordsToDisplay);\n        let zoomChartData = this.get(\"zoomChartData\");\n        let zoomTimePoints = this.get('zoomTimePoints');\n            \n        zoomChartData = zoomChartData.map(function (item, i){\n            let temporaryObject = new Object();\n            \n            // console.log(\"zoomChartData::: \" + JSON.stringify(item) );\n            // console.log(\"\");    \n            \n            temporaryObject['timestamp'] = moment( zoomTimePoints[i] ).valueOf(); //zoomTimePoints[i].getProperties('timestamp')['timestamp'];\n            temporaryObject['Freq 1'] = item.values[2];\n            temporaryObject[\"Freq 2\"] = item.values[9];\n            temporaryObject[\"Freq 3\"] = item.values[16];\n            temporaryObject[\"Freq 4\"] = item.values[23];\n            temporaryObject[\"PPV 1\"] = item.values[4];\n            temporaryObject[\"PPV 2\"] = item.values[11];\n            temporaryObject[\"PPV 3\"] = item.values[18];\n            temporaryObject[\"PPV 4\"] = item.values[25];\n            temporaryObject[\"PPA 1\"] = item.values[5];\n            temporaryObject[\"PPA 2\"] = item.values[12];\n            temporaryObject[\"PPA 3\"] = item.values[19];\n            temporaryObject[\"PPA 4\"] = item.values[26];\n                        \n            //temporaryCounter = (temporaryCounter+ 1000);\n            return temporaryObject;\n        });\n        function swap(items, leftIndex, rightIndex){\n            var temp = items[leftIndex];\n            items[leftIndex] = items[rightIndex];\n            items[rightIndex] = temp;\n        }\n    \n        function partition(items, left, right) {\n            var pivot   = maxValue(items[Math.floor((right + left) / 2)],chartMetric), //middle element\n                i       = left, //left pointer\n                j       = right; //right pointer\n            while (i <= j) {\n                while (maxValue(items[i], chartMetric) < pivot) {\n                    i++;\n                }\n                while (maxValue(items[j], chartMetric) > pivot ){\n                    j--;\n                }\n                if (i <= j) {\n                    swap(items, i, j); //swap two elements\n                    i++;\n                    j--;\n                }\n            }\n            return i;\n        }\n    \n        function quickSort(items, left, right) {\n            var index;\n            if (items.length > 1) {\n                index = partition(items, left, right); //index returned from partition\n                if (left < index - 1) { //more elements on the left side of the pivot\n                    quickSort(items, left, index - 1);\n                }\n                if (index < right) { //more elements on the right side of the pivot\n                    quickSort(items, index, right);\n                }\n            }\n            return items;\n        }\n    \n        function maxValue(_data, chartMetric){\n            var out = 0;\n            out = Math.max(_data[chartMetric + '1'], _data[chartMetric + '2'], _data[chartMetric + '3'], _data[chartMetric + '4']);\n            return out;\n        }\n    \n        zoomChartData = quickSort(zoomChartData, 0, zoomChartData.length - 1);\n        if(recordsToDisplay >0 && recordsToDisplay < zoomChartData.length){\n            //console.log(\"begin::: \" + (zoomChartData.length - (1+parseInt(recordsToDisplay))));\n            //console.log(\"end::: \" + (zoomChartData.length - 1));\n            \n            zoomChartData = zoomChartData.slice( -1 * (recordsToDisplay));\n        }\n        zoomChartData = zoomChartData.slice();\n        // console.log(\"zoomChartData.length::: \" + zoomChartData.length);\n        //console.log(JSON.stringify(zoomChartData));\n        return zoomChartData;\n    \n        }),\n\n        fullRangeDataPoints_OLD: map('fullRangeChartData', function(item){\n            let items = { values: item.get(\"values\") };\n            //console.log(\"ITEMS:::::::::::::::::\");\n            return items;\n        }),\n\n        fullRangeDataPoints: computed('fullRangeChartData', function () {\n            let chartMetric = this.get('chartMetric');\n            let recordsToDisplay = this.get(\"recordsToDisplay\");\n            let fullRangeChartData = this.get(\"fullRangeChartData\");\n\n            fullRangeChartData = fullRangeChartData.map(function (item, i){\n                let temporaryObject = new Object();\n                                 \n                temporaryObject['Freq 1'] = item.values[2];\n                temporaryObject[\"Freq 2\"] = item.values[9];\n                temporaryObject[\"Freq 3\"] = item.values[16];\n                temporaryObject[\"Freq 4\"] = item.values[23];\n                temporaryObject[\"PPV 1\"] = item.values[4];\n                temporaryObject[\"PPV 2\"] = item.values[11];\n                temporaryObject[\"PPV 3\"] = item.values[18];\n                temporaryObject[\"PPV 4\"] = item.values[25];\n                temporaryObject[\"PPA 1\"] = item.values[5];\n                temporaryObject[\"PPA 2\"] = item.values[12];\n                temporaryObject[\"PPA 3\"] = item.values[19];\n                temporaryObject[\"PPA 4\"] = item.values[26];\n                            \n                return temporaryObject;\n            });\n            function swap(items, leftIndex, rightIndex){\n                var temp = items[leftIndex];\n                items[leftIndex] = items[rightIndex];\n                items[rightIndex] = temp;\n            }\n        \n            function partition(items, left, right) {\n                var pivot   = maxValue(items[Math.floor((right + left) / 2)],chartMetric), //middle element\n                    i       = left, //left pointer\n                    j       = right; //right pointer\n                while (i <= j) {\n                    while (maxValue(items[i], chartMetric) < pivot) {\n                        i++;\n                    }\n                    while (maxValue(items[j], chartMetric) > pivot ){\n                        j--;\n                    }\n                    if (i <= j) {\n                        swap(items, i, j); //swap two elements\n                        i++;\n                        j--;\n                    }\n                }\n                return i;\n            }\n        \n            function quickSort(items, left, right) {\n                var index;\n                if (items.length > 1) {\n                    index = partition(items, left, right); //index returned from partition\n                    if (left < index - 1) { //more elements on the left side of the pivot\n                        quickSort(items, left, index - 1);\n                    }\n                    if (index < right) { //more elements on the right side of the pivot\n                        quickSort(items, index, right);\n                    }\n                }\n                return items;\n            }\n        \n            function maxValue(_data, chartMetric){\n                var out = 0;\n                out = Math.max(_data[chartMetric + '1'], _data[chartMetric + '2'], _data[chartMetric + '3'], _data[chartMetric + '4']);\n                return out;\n            }\n        \n            fullRangeChartData = quickSort(fullRangeChartData, 0, fullRangeChartData.length - 1);\n            if(recordsToDisplay >0 && recordsToDisplay < fullRangeChartData.length){\n                //console.log(\"begin::: \" + (zoomChartData.length - (1+parseInt(recordsToDisplay))));\n                //console.log(\"end::: \" + (zoomChartData.length - 1));\n        \n                fullRangeChartData = fullRangeChartData.slice( -1 * (recordsToDisplay));\n            }\n            fullRangeChartData = fullRangeChartData.slice();\n            //console.log(\"zoomChartData.length::: \" + zoomChartData.length);\n            //console.log(JSON.stringify(zoomChartData));\n            return fullRangeChartData;\n        \n            }),\n            \n        \n    \n        //small focus chart data\n        // fullRangeDataPoints: map('fullRangeChartData', function(item){\n        // let items = { values: item.get(\"values\") };\n        // //console.log(\"ITEMS:::::::::::::::::\");\n        // return items;\n        // }),\n    \n\n        \n        fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n        }),\n    \n    \n        zoomTimePoints: map('zoomChartData', function (item) {\n        let itemID = item.get('id');\n        //console.log(\"zoomTimePoints ItemID : \" + itemID);\n        return itemID;\n        }),\n    \n        anchorDistances: computed('instrument', 'fullRangeChartData', function () {\n            return [this.get('chartMetric') + '1'];\n        }\n        ),\n    \n        //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n        zoomChartLinesData: computed('zoomDataPoints','zoomTimePoints','zoomTempPoints','seismicEventsChartDistXData', 'blastEventsChartDistXData', function () {\n            const _this = this,\n                // seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n                // blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n                //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n                zoomDataPoints = this.get('zoomDataPoints'),\n                zoomTempPoints = this.get('zoomTempPoints'),\n                zoomTimePoints = this.get('zoomTimePoints');\n\n\n            let anchorDistances = this.get('anchorDistances'),\n                zoomChartLinesData = [],\n                zoomChannelData = [],\n                channelChartBarData = [],\n                chartMetric = _this.get(\"chartMetric\"),            \n                chDataPoints = _this.get('chDataPoints');\n                \n            channelChartBarData.push(chDataPoints(zoomDataPoints, chartMetric + \"1\"));\n            channelChartBarData.push(chDataPoints(zoomDataPoints, chartMetric + \"2\"));\n            channelChartBarData.push(chDataPoints(zoomDataPoints, chartMetric + \"3\"));\n            channelChartBarData.push(chDataPoints(zoomDataPoints, chartMetric + \"4\"));\n                \n            let chartDataModelName = _this.get('chartDataModelName');\n            let channelCount = 1;\n            channelChartBarData.forEach(barChartData => {\n                zoomChannelData = anchorDistances.map(function () {\n                    return {\n                    key: chartMetric + channelCount,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: barChartData.map(function (dataPoint, dataPointIndex) {\n                        //console.log(\"dataPoint.frequency01::: \" + JSON.stringify(dataPoint));\n                        let dataPointValue = _this.get('chartMetric') + channelCount;\n                        return [\n                        moment(zoomTimePoints[dataPointIndex]).valueOf(),\n                        dataPoint,\n                        ];\n                    }),\n                    };\n                });\n                zoomChartLinesData.push(zoomChannelData[0]);\n                zoomChannelData = [];\n                channelCount++;\n                });\n            // mix data with events\n            // if (seismicEventsChartDistXData) {\n            //     zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n            // }\n            // if (blastEventsChartDistXData) {\n            //     zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n            // }\n            // if (vibeEventsChartDistXData) {\n            //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n            // }\n\n        return zoomChartLinesData;\n    }),\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this;\n        const fullRangeDataPoints = this.get('fullRangeDataPoints'); \n        const fullRangeTimePoints = this.get('fullRangeTimePoints');\n        let anchorDistances = this.get('anchorDistances'),\n            fullRangeChartLinesData = [],\n            fullRangeChannelData = [],\n            channelChartBarData = [],\n            chDataPoints = _this.get('chDataPoints'),\n            chartMetric = _this.get(\"chartMetric\");\n            \n        channelChartBarData.push(chDataPoints(fullRangeDataPoints, chartMetric + \"1\"));\n        channelChartBarData.push(chDataPoints(fullRangeDataPoints, chartMetric + \"2\"));\n        channelChartBarData.push(chDataPoints(fullRangeDataPoints, chartMetric + \"3\"));\n        channelChartBarData.push(chDataPoints(fullRangeDataPoints, chartMetric + \"4\"));\n        \n        let channelCount = 1;\n        channelChartBarData.forEach(fullChartData => {\n            \n            fullRangeChannelData = anchorDistances.map(function () {\n            return {\n              key: chartMetric + channelCount,\n              // mean: 3,\n              type: 'lines',\n              values: fullChartData.map(function (dataPoint, dataPointIndex) {\n                //console.log(\"dataPoint.frequency01::: \" + JSON.stringify(dataPoint));\n                return [\n                  moment(fullRangeTimePoints[dataPointIndex]).valueOf(),\n                  dataPoint,\n                ];\n              }),\n            };\n          });\n          fullRangeChartLinesData.push(fullRangeChannelData[0]);\n          fullRangeChannelData = [];\n          channelCount++;\n        });\n        return fullRangeChartLinesData;\n    }),\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_');\n        let promise = this.get('store').queryRecord('measurement', {title: chartTitle } );\n        return promise;\n    }),\n    y1AxisTitle: computed(function(){\n        let title = '';\n        let units = '';\n        let axisName = '';\n        let chartMetric = this.get(\"chartMetric\");\n        chartMetric = chartMetric.trim(); \n        \n        if( chartMetric == \"PPV\"){\n          title = \"PPV\";\n        }\n        if(chartMetric == \"PPA\"){\n          title = \"PPA\";\n        }\n        if(chartMetric == \"Freq\"){\n          title = \"Frequency\";\n        }\n        switch (title) {\n          case 'Frequency':\n            axisName = 'Frequency';\n            units = 'Hz';\n            break;\n          case 'PPV':\n            axisName = \"PPV\";\n            units += `${this.yAxisUnit ? this.yAxisUnit == \"RAW\" ? \"mm\" : this.yAxisUnit : \"mm\"}/s`;\n            break;\n          case 'PPA':\n            axisName = \"PPA\";\n            units += `${this.yAxisUnit ? this.yAxisUnit == \"RAW\" ? \"mm\" : this.yAxisUnit : \"mm\"}/s²`;\n            break;\n          default:\n            axisName = 'Unknown';\n        }\n        title = axisName + \" (\" + units + \")\";\n        return title;\n    }),\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            // vibeEventsArray = this.get('vibeEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg'),\n            \n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend];\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            let title = \"\";\n\n            title = _this.get(\"y1AxisTitle\");\n            \n            let zoomChart = nv.models.lineChartWithFocusAPI(true)\n                .margin({top: 65, right: 90, bottom: 20, left: 80})\n                // .margin({top: 60, right: 90, bottom:20, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data');\n        \n            zoomChart.legend.margin({bottom: 600});\n                        \n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n                let mainHeight = zoomChartSVG.attr(\"height\");\n                let mainMargin = zoomChart.margin();\n                let customTickFunction = _this.get(\"customTickFunction\");\n                zoomChart.xAxis\n                    .tickPadding(10)\n                    .ticks(8)\n                    .showMaxMin(false)\n                    .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        // assumes that the array is in order by timestamp\n                        let first = zoomChartLinesData[0].values[0][0];\n                        let last = zoomChartLinesData[0].values[zoomChartXDomainLength - 1][0];\n                        //console.log(\"zoomChartLinesData::::\" + zoomChartLinesData[0].values[zoomChartXDomainLength - 1])\n                        let tickDate = nv.utils.getDateAutoscaleFormat(first, last);\n                        return tickDate(new Date(d));\n                    })\n                //.rotateLabels(20)\n                \n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10)\n\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(10)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2);\n\n\n                zoomChart.y1Axis.tickFormat(d3.format(\".2\"));\n                zoomChart.legend.numDecimals(3);\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n                \n                zoomChartSVG\n                    .datum(zoomChartLinesData)\n                    .call(zoomChart);\n                //puts the data into a format that a scatter chart can use. Needs to \n                //be the same as in the frequency graph in this same directory.\n                function getData(points) {\n                    let data = [];\n                    let chartMetric = _this.get('chartMetric');\n                    let channels = [chartMetric + \"1\",chartMetric + \"2\",chartMetric + \"3\",chartMetric + \"4\"]\n                    \n                    for (let i = 0; i < channels.length; i++) {\n                        let valuesOfValues = [];\n                        \n                        for(let j = 0; j< points[i][\"values\"].length; j++){\n                            valuesOfValues.push({x: points[i][\"values\"][j][0], y: points[i][\"values\"][j][1] , size: 5, shape: \"circle\"})                      \n                        }\n    \n                        data.push({\n                            key: points[i].key,\n                            values: valuesOfValues\n                        });\n                    }\n                    return data;\n                }\n                \n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = `<span class=\"event-type\">PPV - ${`${this.yAxisUnit ? this.yAxisUnit == \"RAW\" ? \"mm\" : this.yAxisUnit : \"mm\"}/s`}: ` + tooltipContent.ppv + `<br />PPA - ${this.yAxisUnit ? this.yAxisUnit == \"RAW\" ? \"mm\" : this.yAxisUnit : \"mm\"}/s&#178;: ` + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(vibeEventsArray);\n                    //console.log(distXMouseMove);\n/* \n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    } */\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length){//} || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        } \n                        if (data_set===2) {\n                            //activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { \n                    nv.log('New State:', JSON.stringify(e)); \n                });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) { _this.setData(zoomChartLinesData); }\n                if (_this.setChart) { _this.setChart(zoomChart); }\n\n                return zoomChart;\n            });\n        });\n\n        \n        let graph_type = nv.models.scatter();\n        //there used to be some logic here for determining the graph_type\n        //we don't use it anymore but I didn't want to change it too much as I \n        //was checking in the code.\n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 90, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n\n        nv.addGraph(function() {\n            fullRangeChart.xAxis\n            .ticks(8)\n            .tickPadding(10)    \n            .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG\n                .datum(fullRangeChartLinesData)\n                .call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\n// vibe (BluVibe) raw-data — 4 sub-instruments × 7 channels (Axis/Trigger/Frequency/Amplitude/PPV/PPA/Duration).\n// BE shape: displacement.values = [0, v1, v2, ..., v28] (29 entries — vibe is 1-indexed in InfluxDB,\n// `ch0` is a leading placeholder, real data lives at ch1..ch28). Legacy save did `obj.unshift(0)`\n// for the same reason. Without the placeholder, every value lands at ch{N-1} instead of ch{N}, and\n// the last channel (ch28) reads back as 0 because nothing was written there.\n// Axis columns (channel 0 of each block) render X/Y/Z/R glyphs when their value is 1.0/2.0/3.0/4.0.\nconst CHANNEL_LABELS = ['Axis', 'Trigger', 'Frequency', 'Amplitude', 'PPV', 'PPA', 'Duration'];\nconst SUB_INSTRUMENT_COUNT = 4;\nconst AXIS_GLYPHS = { 1: 'X', 2: 'Y', 3: 'Z', 4: 'R' };\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    isModalOpen: false,\n    modalMode: 'add',\n    modalEditingRowId: null,\n\n    columnSpecs: computed(function(){\n        const specs = [];\n        for(let s = 0; s < SUB_INSTRUMENT_COUNT; s += 1){\n            CHANNEL_LABELS.forEach((label, c) => {\n                const colIdx = s * CHANNEL_LABELS.length + c;\n                specs.push({\n                    key: `c_${colIdx}`,\n                    label,\n                    tableLabel: label,\n                    valuesIndex: colIdx, // logical channel index 0..27; offset added at read time.\n                    isAxis: c === 0,\n                    isTemp: false,\n                });\n            });\n        }\n        specs.push({ key: '__temp__', label: 'Temperature', tableLabel: 'Temp', isTemp: true });\n        return specs;\n    }),\n\n    // Some BE shapes return 29 values (ch0 placeholder + 28 real channels), others return 28\n    // (no placeholder, real channels at ch0..ch27). Detect by length so both old and new data\n    // display correctly.\n    _readOffset(dispValues){\n        return (dispValues && dispValues.length >= 29) ? 1 : 0;\n    },\n\n    tableRows: computed('displacementData.[]', 'temperatureData.[]', 'columnSpecs', 'globalDatetimeFormat.value', function(){\n        const dispData = this.get('displacementData') || [];\n        const tempData = this.get('temperatureData') || [];\n        const specs = this.get('columnSpecs') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n\n        const tempById = {};\n        tempData.forEach(r => { tempById[r.id] = r; });\n\n        return dispData.map((dispRow) => {\n            const id = dispRow.id;\n            const dispValues = (dispRow.values || dispRow.get?.('values') || []);\n            const tempRow = tempById[id];\n            const tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n            const offset = this._readOffset(dispValues);\n\n            const cells = specs.map((spec) => {\n                if(spec.isTemp){\n                    const v = tempValues[0];\n                    return { key: spec.key, label: spec.label, value: v == null ? '' : v };\n                }\n                const raw = dispValues[spec.valuesIndex + offset];\n                if(spec.isAxis){\n                    const glyph = AXIS_GLYPHS[Number(raw)];\n                    return { key: spec.key, label: spec.label, value: glyph || (raw == null ? '' : raw) };\n                }\n                return { key: spec.key, label: spec.label, value: raw == null ? '' : raw };\n            });\n\n            return {\n                id,\n                date: id,\n                formattedDate: moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt),\n                cells,\n            };\n        });\n    }),\n\n    modalFields: computed('columnSpecs', 'modalMode', 'modalEditingRowId', 'displacementData.[]', 'temperatureData.[]', function(){\n        const specs = this.get('columnSpecs') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingRowId');\n\n        // Edit mode reads raw BE values (not the table's display-mapped values) so the modal\n        // shows the underlying number for Axis cells rather than the X/Y/Z/R glyph.\n        let dispValues = [];\n        let tempValues = [];\n        if(mode === 'edit' && editingId){\n            const dispRow = (this.get('displacementData') || []).find(r => r.id === editingId);\n            const tempRow = (this.get('temperatureData') || []).find(r => r.id === editingId);\n            dispValues = dispRow ? (dispRow.values || dispRow.get?.('values') || []) : [];\n            tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n        }\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && editingId\n                ? moment(editingId, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm:ss')\n                : moment().format('YYYY-MM-DDTHH:mm:ss'),\n        };\n\n        const offset = this._readOffset(dispValues);\n        const channelFields = specs.map((spec) => {\n            let value = '';\n            if(mode === 'edit'){\n                if(spec.isTemp){\n                    value = tempValues[0];\n                }else{\n                    value = dispValues[spec.valuesIndex + offset];\n                }\n            }\n            return {\n                key: spec.key,\n                label: spec.label,\n                type: 'text',\n                value: value == null ? '' : value,\n            };\n        });\n\n        return [dateField, ...channelFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function(){\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingRowId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingRowId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const instrumentId = this.get('instrument.id');\n            const dispData = this.get('displacementData');\n            const tempData = this.get('temperatureData');\n            const dispRow = dispData ? dispData.find(r => r.id === rowId) : null;\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            const promises = [];\n            if(dispRow && dispRow.deleteRecord){ dispRow.deleteRecord(); promises.push(dispRow.save(adapterOptions)); }\n            if(tempRow && tempRow.deleteRecord){ tempRow.deleteRecord(); promises.push(tempRow.save(adapterOptions)); }\n            Promise.all(promises)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const specs = this.get('columnSpecs') || [];\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            // Sanitize: BE's JSON renderer rejects NaN/Infinity (\"Out of range float values are\n            // not JSON compliant\"). One bad row makes the whole list endpoint return 500.\n            const safeNum = (v) => {\n                const n = Number(v);\n                return Number.isFinite(n) ? n : 0;\n            };\n            // Vibe is 1-indexed on the BE: ch0 is a leading placeholder, real data lives at ch1..ch28.\n            const dispValues = [0];\n            specs.forEach((spec) => {\n                if(spec.isTemp){ return; }\n                dispValues.push(safeNum(snapshot[spec.key]));\n            });\n            const tempValues = [safeNum(snapshot['__temp__'])];\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingRowId');\n\n            const tempData = this.get('temperatureData') || [];\n            const dispData = this.get('displacementData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            // If a row already exists at newId (either we're editing and didn't change the date,\n            // or we're adding on top of an existing timestamp), mutate-and-save in place.\n            const existingTempAtNew = findRow(tempData, newId);\n            const existingDispAtNew = findRow(dispData, newId);\n            const hasExistingAtNewId = !!(existingTempAtNew || existingDispAtNew);\n\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                const oldDisp = findRow(dispData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n                if(oldDisp){ oldDisp.deleteRecord(); oldDisp.save(adapterOptions); }\n            }\n\n            if(hasExistingAtNewId){\n                const promises = [];\n                if(existingTempAtNew){ existingTempAtNew.set('values', tempValues); promises.push(existingTempAtNew.save(adapterOptions)); }\n                else { promises.push(store.createRecord('temperature-value', { id: newId, values: tempValues }).save(adapterOptions)); }\n                if(existingDispAtNew){ existingDispAtNew.set('values', dispValues); promises.push(existingDispAtNew.save(adapterOptions)); }\n                else { promises.push(store.createRecord('displacement-value', { id: newId, values: dispValues }).save(adapterOptions)); }\n                Promise.all(promises).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            const tempRecord = store.createRecord('temperature-value', { id: newId, values: tempValues });\n            tempRecord.save(adapterOptions);\n\n            const dispRecord = store.createRecord('displacement-value', { id: newId, values: dispValues });\n            dispRecord.save(adapterOptions).then(refreshRoute).catch(handleErr);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\n\n\nexport default Component.extend({\n    router: service(),\n    batchSelectedRows:{},\n    isMaxBatch:false,\n    isVisibleCreateNewForm: false,\n    init() {\n        this._super(...arguments);\n    },\n    getVisibleReadings:computed('instrumentFreqEventData', function () {\n        if (this.get('instrumentFreqEventData')){\n            return this.get('instrumentFreqEventData').length\n        }else{\n            return 0;\n        }\n    }),\n    getTotalReadings:computed('instrumentFreqEventData', function () {\n        if (this.get('instrumentFreqEventData')){\n            return this.get('instrumentFreqEventData').get(\"meta\").pagination.total\n        }else{\n            return 0;\n        }\n    }),\n    anchorDistances: computed('instrument', function() {\n        let dist = ['X', 'Y','Z'];\n        return dist;\n    }),\n    getFreqEventData: computed(\"instrumentFreqEventProfiles\", \"instrumentFreqEventData\", \"globalDatetimeFormat\",function () {\n        const instrumentFreqEventProfiles = this.get('instrumentFreqEventProfiles');\n        const instrumentFreqEventData = this.get('instrumentFreqEventData');\n        const globalDatetimeFormat = this.get('globalDatetimeFormat')[\"value\"];\n        const standardizedFormat = \"YYYY-MM-DD HH:mm:ss.SSS\";\n        let data = [];\n        instrumentFreqEventData.forEach((dataObj, index)=>{\n            let rowObj = {};\n            rowObj[\"id\"] = dataObj[\"id\"];\n            rowObj[\"x\"] = dataObj[\"x\"][\"value\"];\n            rowObj[\"y\"] = dataObj[\"y\"][\"value\"];\n            rowObj[\"z\"] = dataObj[\"z\"][\"value\"];\n            rowObj[\"parent_id\"] = dataObj[\"parent\"]['id'];\n            const parsed = moment(dataObj['parent']['timestamp'], standardizedFormat, true);\n            rowObj['timestamp'] = globalDatetimeFormat ? parsed.format(`${globalDatetimeFormat}.SSS`) : parsed.format(standardizedFormat);\n            data.push(rowObj);\n        }) \n        // console.log(\"instrumentFreqEventProfiles \");\n        // console.log(instrumentFreqEventProfiles);\n        return data;\n    }),\n\n    \n    maxBatchSwitchObserver: observer('isMaxBatch', function() {\n        if(this.get('isMaxBatch')){\n            let length = this.get('instrumentFreqEventData').length;\n            let isCheckedRowsValues = {};\n            for(let i = 0; i < length; i ++){\n                isCheckedRowsValues[i] = true;\n\n            }\n            this.set(\"batchSelectedRows\", isCheckedRowsValues);\n        }else{\n            this.set(\"batchSelectedRows\", {});\n        }\n        // console.log(\"observer triggered \" + this.get('isMaxBatch'));\n        // console.log(\"observer triggered batchSelectedRows length \" + this.get('batchSelectedRows').length);\n    }),\n    actions: {\n        handleAction(actionCategory, rowDataObj){\n            const instrumentFreqEventProfiles = this.get(\"instrumentFreqEventProfiles\");\n            const instrument = this.get(\"instrument\");\n            switch(actionCategory){\n                case \"eventIDHotClick\":\n                    this.set(\"showLoading\", true);\n                    this.router.transitionTo('frequency-events.frequency-event', instrument.get(\"id\"), rowDataObj[\"parent_id\"], {\n                         queryParams: {\n                            page:-1,\n                            selectedFreqEventDate:rowDataObj[\"timestamp\"],\n                            advancedYAxisUnit:\"RAW\",\n                            analysis_category:\"raw\",\n                        } \n                    });\n                    \n            }\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n    }\n});\n","import { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default Component.extend({\n    isVisibleCreateNewForm: false,\n    anchorDistances: computed('gateway', function() {\n        return [\"Firmware Version\", \"Voltage\",\"RSSI\",\"Carrier\",\"Readings\",\"Uptime in Seconds\",\"Reconnection Attempts\",\"Uploads\"]\n}),\n\ngetGatewayData: computed('gateway', 'gatewayData', function() {\n    let fields = [0,2,3,4,5,6,7,8];\n    let items = [];\n    // Perform filtering logic on initial data\n    const filteredData = this.get('gatewayData');\n    if (filteredData) {\n      filteredData.forEach(item => {\n        let values = [];\n        let firmware = item.values[0];\n        let voltage = item.values[2];\n        let rssi = item.values[3];\n        let carrier = item.values[4];\n        let readings = item.values[5];\n        let uptime = item.values[6];\n        let recon = item.values[7];\n        let uploads = item.values[8];\n        let temperature = item.values[item.values.length -2];\n        items.push({ id: item.id, values: {'firm_version':firmware,'voltage':voltage,'rssi': rssi, 'carrier': carrier, 'readings':readings,'uptime':uptime,'recon': recon, 'uploads': uploads, 'temperature': temperature}, \n        originalValue: item, save_values:{'firm_version':firmware,'voltage':voltage, 'rssi': rssi, 'carrier': carrier, 'readings':readings,'uptime':uptime,'recon': recon, 'uploads': uploads , 'temperature': temperature} });\n      });\n    }        \n    \n    return items;\n  }),\n\n    actions: {\n        updateProperty(propertyName, propertyValue) {\n          // console.log(\"Update property: \" + propertyValue);\n          this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import Component from '@ember/component';\nimport { inject as service } from '@ember/service';\n\nexport default class LeftAxisDropdown extends Component.extend({}) {\n    @service router;\n    @service store;\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    actions = {\n        tGraph(id, modelName, params) {\n            // console.log(\"in LeftAxisDropdown:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\")\n            this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, modelName, params);\n        },\n    }\n}","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport EmberObject from '@ember/object';\nimport Component from '@ember/component';\n\nexport default class TemporalGatewayRightAxisDropdown extends Component.extend({\n}) {\n    @service router;\n    @service store;\n\n    isAuthenticated = true;\n    selectedVendor= null;\n    selectedModel= null;\n    editing= 0;\n    selectedOption = null;\n    \n    actions = {\n        setSelection(selected) {\n            this.set('selectedOption', selected)\n            // console.log(this.get('selectedOption'))\n        },\n    }\n}","export { default } from 'ember-leaflet/components/video-layer';\n","export { default } from \"ember-welcome-page/components/welcome-page\";\n","import { computed } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n    \n    isEditing: false,\n    tagName: 'tr',\n    classNameBindings: ['isEditing:active-cell-values-inline-edit', 'isZeroTimestampClass'],\n    isRowDeleteConfirmationDialog: {},\n    rdcd: {},\n    instrumentType: null,\n\n    setRDCD(value) {\n        let rdcd = this.get('isRowDeleteConfirmationDialog');\n        rdcd[value[0]] = value[1];\n        this.set('isRowDeleteConfirmationDialog', rdcd);\n        this.notifyPropertyChange('isRowDeleteConfirmationDialog');\n    },\n\n    valueOver: computed('instrument',function(self, value) {\n        //console.log(value);\n        return true;\n    }),\n\n    tableRowIndexString: computed('tableRowIndex', function() {\n        return String(this.get('tableRowIndex'));\n    }),\n\n    displacementValueObjectValues: computed('displacementValueObject', function() {\n        let obj = this.get('displacementValueObject.values');\n        let instType = this.get('instrumentType').get('title');\n        return Object.assign({}, obj); // convert array to an object, to be able to get it's items by index in handlebars template\n    }),\n\n    temperatureValuesObject: computed('temperatureValuesModel', function() {\n        return this.get('temperatureValuesModel').objectAt( this.get('tableRowIndex') );\n    }),\n\n    temperatureObjectValue: computed('temperatureValuesObject', function() {\n        let temporaryTemperature = null;\n        try{\n            temporaryTemperature = this.get('temperatureValuesObject').get('values')[0].toFixed(1);\n        }\n        catch(e){\n            temporaryTemperature = null;\n        }    \n        return temporaryTemperature;\n\n    }),\n\n    actions: {\n        edit() {\n            this.set('isEditing', true);\n            //this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n            //return this.$().attr({ tabindex: 1 }), this.$().focus(); // brings the view into focus in order to capture keyUps.\n        },\n        save() {\n            let _this = this;\n            // save displacement values\n            let obj = Object.values(this.get('displacementValueObjectValues'));\n\n            let instrumentType = this.instrumentType.get('title');\n\n            if(instrumentType == 'Wire' || instrumentType === 'Tilt' || instrumentType === 'BluVibe' || instrumentType === 'Piezo') {\n                obj.unshift(0);\n            }\n\n            this.get('displacementValueObject').set('values', obj ); //set values property to displacementValueObjectValues converted to array\n            this.get('displacementValueObject').save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                let instType = instrumentType;\n                if (instType == 'Wire' || instType === 'Tilt' || instType === 'BluVibe' || instrumentType === 'Piezo') {\n                    // if displacement-value was successfully saved to DB, then display it\n                    //console.log(results._internalModel._record.get('values'));\n                    let values = results._internalModel._record.get('values');\n                    values.shift();\n                    results._internalModel._record.set('values', values);\n                }\n                // save temperature\n                _this.get('temperatureValuesObject').set('values', [_this.get('temperatureObjectValue')] );\n                _this.get('temperatureValuesObject').save({adapterOptions: _this.get('instrumentId')});\n\n            })\n            .catch(function(reason){\n                console.log(reason);\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n\n\n            // hide form\n            this.set('isEditing', false);\n            //this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n        },\n        cancel() {\n            // reset displacementValueObjectValues and temperatureObjectValue to original values\n            //this.set('displacementValueObjectValues', Object.assign({}, this.get('displacementValueObject.values')) );\n            //this.set('temperatureObjectValue', this.get('temperatureValuesObject').get('values')[0]);\n\n            this.set('isEditing', false);\n            //this.$('.has-tooltip-info').tooltip('hide'); //hide any active tooltips\n        },\n        remove(){\n            let _this = this;\n            \n            let instrument_id = this.get('instrumentId');\n            \n            let displacementValueObject = this.get('displacementValueObject'),\n                temperatureValuesObject = this.get('temperatureValuesObject'),\n                displacementValuesModel = this.get('displacementValuesModel'),\n                temperatureValuesModel = this.get('temperatureValuesModel')\n            ;\n            let list = this.get('isRowDeleteConfirmationDialog');\n            let value = list[displacementValueObject.id] ? false : true;\n            this.setRDCD([displacementValueObject.id,value]);\n\n            temperatureValuesObject.deleteRecord();\n            temperatureValuesObject.get('isDeleted');\n            temperatureValuesObject.save({adapterOptions: instrument_id}).then(function(){\n                // deal with records that just were created\n                // relates to the way I add new records to model https://github.com/emberjs/data/issues/3313\n                temperatureValuesModel.removeObject(temperatureValuesObject);\n            });\n\n            displacementValueObject.deleteRecord();\n            displacementValueObject.get('isDeleted');\n            displacementValueObject.save({adapterOptions: this.get('instrumentId')}).then(function(){\n                // deal with records that just were created\n                // relates to the way I add new records to model https://github.com/emberjs/data/issues/3313\n                displacementValuesModel.removeObject(displacementValueObject);\n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        toggleRowDeleteConfirmationDialog(id){\n            let list = this.get('isRowDeleteConfirmationDialog');\n            let value = list[id] ? false : true;\n            this.setRDCD([id,value]);\n            //this.set('isRowDeleteConfirmationDialog', list); //update isVisibleRowDetails variable for each single row\n            //this.notifyPropertyChange('isRowDeleteConfirmationDialog');\n        },\n    },\n    didRender(){\n        //this.$('.has-tooltip-info').tooltip(); //activate tooltips\n        //console.log(this.get('instrumentType').get('title'));\n    },\n    keyDown: function(e) {\n        if (e.keyCode === 27) {\n            this.send('cancel');\n        }\n        if (e.keyCode === 13) {\n            this.send('save', this.get('object'));\n        }\n    }\n});\n\n\n// function escape(myStr) {\n//     return myStr.replace('.', ',');\n// }","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport moment from 'moment';\nimport { Chart, registerables, _adapters } from 'chart.js';\nimport colorPalette from '../../utils/color-palette';\n\n// Register moment as Chart.js date adapter inline (avoids chartjs-adapter-moment module issues)\n_adapters._date.override({\n    parse(value) {\n        if (value === null || value === undefined) return null;\n        return moment(value).isValid() ? moment(value).valueOf() : null;\n    },\n    format(time, fmt) {\n        return moment(time).format(fmt);\n    },\n    add(time, amount, unit) {\n        return moment(time).add(amount, unit).valueOf();\n    },\n    diff(a, b, unit) {\n        return moment(b).diff(moment(a), unit);\n    },\n    startOf(time, unit) {\n        return moment(time).startOf(unit).valueOf();\n    },\n    endOf(time, unit) {\n        return moment(time).endOf(unit).valueOf();\n    },\n    formats() {\n        return {\n            datetime:    'MMM D, YYYY, h:mm:ss a',\n            millisecond: 'h:mm:ss.SSS a',\n            second:      'h:mm:ss a',\n            minute:      'h:mm a',\n            hour:        'hA',\n            day:         'MMM D',\n            week:        'll',\n            month:       'MMM YYYY',\n            quarter:     '[Q]Q - YYYY',\n            year:        'YYYY'\n        };\n    }\n});\n\nChart.register(...registerables);\n\n// Chart line colors — sourced from color-palette\nconst CHART_LINE_COLORS = [\n    colorPalette.blue28,    // #0077b6\n    colorPalette.orange2,   // #FF7444\n    colorPalette.green3,    // #2a9d8f\n    colorPalette.red1,      // #D25353\n    colorPalette.purple7,   // #8b5cf6\n    colorPalette.beige22,   // #b08968\n    colorPalette.pink6,     // #ec4899\n    colorPalette.gray5,     // #6b7280\n    colorPalette.teal6,     // #10b981\n    colorPalette.cyan4,     // #06b6d4\n];\n\nconst OUTLIER_MODEL_NAMES = {\n    vw2100: \"VW2100-7.5-HD\",\n    jms: \"JM-S\"\n};\n\nexport default Component.extend({\n    store: service(),\n    yAxisUnit: null,\n    calibColLabel: \"-\",\n    linColLabel: \"_\",\n    _mainChart: null,\n    _overviewChart: null,\n    _brushDragStartPx: null,\n    _brushLastRange: null,\n    OUTLIER_MODEL_NAMES:{\n        vw2100: \"VW2100-7.5-HD\",\n        jms: \"JM-S\"\n    },\n\n    init() {\n        this._super(...arguments);\n        const queryParams = new URLSearchParams(window.location.search);\n        const yAxisUnitParam = queryParams.get('advancedYAxisUnit');\n        if (yAxisUnitParam) {\n            this.set('yAxisUnit', yAxisUnitParam);\n        }\n        this.updateCalibColLabel(this.get('port'));\n        this.updateLinColLabel(this.get('port'));\n    },\n    // columnLabelObserver: observer('port', function() {\n    //     this.updateCalibColLabel(this.get(\"port\"));\n    //     this.updateLinColLabel(this.get(\"port\"));\n    // }),\n\n    updateCalibColLabel(currentPort) {\n        let vwPropertyArr = this.get(\"instrument.vwproperty\");\n        this.set(\"calibColLabel\", currentPort);\n        if (currentPort == null) {\n            this.set(\"calibColLabel\", \"Presssure (-)\");\n        } else {\n            vwPropertyArr.forEach(async vwProp => {\n                if (currentPort == vwProp.get(\"port\")) {\n                    let model = await vwProp.get(\"vwmodel\")\n                    if(model.modelName === this.OUTLIER_MODEL_NAMES[\"jms\"]){\n                        this.set(\"calibColLabel\", `Displacement (${vwProp.get(\"serial\")})`);\n                    }\n                    else{\n                        this.set(\"calibColLabel\", `Pressure (${vwProp.get(\"serial\")})`);\n                    }\n                }\n            });\n        }\n    },\n\n    updateLinColLabel: async function(currentPort) {\n        this.set(\"linColLabel\", currentPort);\n        if (currentPort == null) {\n            this.set(\"linColLabel\", \"LU/digits\");\n        } else {\n            for (let property of this.get(\"instrument.vwproperty\").toArray()) {\n                let model = await property.get(\"vwmodel\");\n                if (currentPort == property.get(\"port\")) {\n                    let modelName = model ? model.modelName : null;\n                    if (modelName == OUTLIER_MODEL_NAMES[\"vw2100\"]) {\n                        this.set(\"linColLabel\", \"B units\");\n                    } \n                    else if (modelName == OUTLIER_MODEL_NAMES[\"jms\"]) {\n                        this.set(\"linColLabel\", \"LU (Hz)\");\n                    }else {\n                        this.set(\"linColLabel\", \"LU/digits\");\n                    }\n                }\n            }\n        }\n    },\n\n    seismicEventsChartData: computed('seismicEvents', function() {\n        if (!this.get('seismicEvents')) return [];\n        return this.get('seismicEvents').map(event => ({\n            type: 'Seismic',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            momentMagnitude: event.get('momentMagnitude'),\n            location: event.get('location')\n        }));\n    }),\n\n    blastEventsChartData: computed('blastEvents', function() {\n        if (!this.get('blastEvents')) return [];\n        return this.get('blastEvents').map(event => ({\n            type: 'Blast',\n            x: moment(event.get('timestamp')).valueOf(),\n            timestamp: moment(event.get('timestamp')).format(\"DD MMM, YYYY HH:mm:ss\"),\n            tonnes: event.get('tonnes'),\n            location: event.get('location')\n        }));\n    }),\n\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        return ['F'];\n    }),\n\n    // Main chart sourced from zoomChartData to mirror NVD3 (Group By applies to visible chart).\n    fullRangeChartLinesData: computed('zoomChartData', 'zoomTempData', 'anchorDistances', 'chartDataModelName', function() {\n        const anchorDistances = this.get('anchorDistances');\n        const fullRangeChartData = this.get('zoomChartData');\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n\n        const lines = anchorDistances.map((chartLineName, chartLineIndex) => ({\n            key: chartLineName,\n            values: fullRangeChartData.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[chartLineIndex] !== undefined) ? arr[chartLineIndex] : null\n                };\n            })\n        }));\n\n        // Add temperature overlay on y2 (unless viewing temperature data itself)\n        if (modelName !== 'temperature-values') {\n            const zoomTempData = this.get('zoomTempData');\n            if (zoomTempData && zoomTempData.length) {\n                lines.push({\n                    key: 'T (°C)',\n                    yAxis: 'y2',\n                    hidden: false,\n                    values: zoomTempData.map(item => {\n                        const rawValues = item.get('values');\n                        const arr = Array.isArray(rawValues) ? rawValues : [];\n                        return {\n                            x: moment(item.get('id')).valueOf(),\n                            y: arr[0] !== undefined ? arr[0] : null\n                        };\n                    })\n                });\n            }\n        }\n\n        return lines;\n    }),\n\n    chartDataModelName: computed('fullRangeChartData', function() {\n        return this.get('fullRangeChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let chartTitle = chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-', '_');\n        return this.get('store').queryRecord('measurement', { title: chartTitle });\n    }),\n\n    _buildYAxisTitle(_yAxisLegend, _chartData) {\n        if (this.get('linear') == true) {\n            return this.get('linColLabel');\n        } else if (this.get('calib') == true) {\n            return this.get('calibColLabel');\n        } else if (this.get('depth') == true) {\n            return 'mm-Water';\n        } else {\n            return 'Frequency (Hz)';\n        }\n    },\n\n    didInsertElement() {\n        this._super(...arguments);\n        const fullRangeChartLinesData = this.get('fullRangeChartLinesData');\n\n        Promise.resolve(this.get('yAxisLegend')).then(yAxisLegend => {\n            let type = this.instrument.get('instrumentTypeID').toString();\n            let chartData = this.get('chartData');\n            chartData.forEach(item => {\n                if (item.id === type) { chartData = item; }\n            });\n\n            const yAxisTitle = this._buildYAxisTitle(yAxisLegend, chartData);\n            this._buildMainChart(fullRangeChartLinesData, yAxisTitle);\n            this._buildOverviewChart();\n        });\n    },\n\n    _buildMainChart(linesData, yAxisTitle) {\n        const _this = this;\n        const canvas = this.element.querySelector('canvas.chartjs-main');\n        if (!canvas) return;\n\n        const seismicEvents = this.get('seismicEventsChartData');\n        const blastEvents = this.get('blastEventsChartData');\n\n        const allTs = linesData.flatMap(l => l.values.filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n\n        const datasets = linesData.map((line, i) => ({\n            label: String(line.key),\n            data: line.values,\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            backgroundColor: 'transparent',\n            borderWidth: 1.5,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length],\n            pointHoverBorderWidth: 2,\n            tension: 0,\n            yAxisID: line.yAxis || 'y',\n            hidden: line.hidden || false\n        }));\n\n        const noDataPlugin = {\n            id: 'noData',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let hasData = false;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) hasData = true;\n                    });\n                });\n                if (!hasData) {\n                    const { ctx, chartArea: { left, right, top, bottom } } = chart;\n                    ctx.save();\n                    ctx.font = '14px sans-serif';\n                    ctx.fillStyle = '#999';\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.fillText('No data in selected range', (left + right) / 2, (top + bottom) / 2);\n                    ctx.restore();\n                }\n            }\n        };\n\n        const eventMarkersPlugin = {\n            id: 'eventMarkers',\n            afterDraw(chart) {\n                const ctx = chart.ctx;\n                const xScale = chart.scales['x'];\n                const { top, bottom } = chart.chartArea;\n\n                const drawLine = (x, color) => {\n                    if (x < xScale.min || x > xScale.max) return;\n                    const px = xScale.getPixelForValue(x);\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = color;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([4, 2]);\n                    ctx.moveTo(px, top);\n                    ctx.lineTo(px, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                };\n\n                seismicEvents.forEach(e => drawLine(e.x, colorPalette.cyan3));\n                blastEvents.forEach(e => drawLine(e.x, colorPalette.red1));\n            }\n        };\n\n        let crosshairX = null;\n        let pinnedX = null;\n        const crosshairPlugin = {\n            id: 'crosshair',\n            afterDraw(chart) {\n                const { ctx, chartArea: { top, bottom } } = chart;\n                if (pinnedX !== null) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.strokeStyle = colorPalette.gray5;\n                    ctx.lineWidth = 1.5;\n                    ctx.setLineDash([]);\n                    ctx.moveTo(pinnedX, top);\n                    ctx.lineTo(pinnedX, bottom);\n                    ctx.stroke();\n                    ctx.restore();\n                    return;\n                }\n                if (crosshairX === null) return;\n                ctx.save();\n                ctx.beginPath();\n                ctx.strokeStyle = colorPalette.gray5;\n                ctx.lineWidth = 1;\n                ctx.setLineDash([4, 4]);\n                ctx.moveTo(crosshairX, top);\n                ctx.lineTo(crosshairX, bottom);\n                ctx.stroke();\n                ctx.restore();\n            }\n        };\n\n        const pointLabelsPlugin = {\n            id: 'pointLabels',\n            afterDraw(chart) {\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                let totalVisible = 0;\n                chart.data.datasets.forEach(ds => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    ds.data.forEach(pt => {\n                        if (pt && pt.y != null && pt.x >= xScale.min && pt.x <= xScale.max) totalVisible++;\n                    });\n                });\n                if (totalVisible === 0 || totalVisible > 20) return;\n                const { ctx } = chart;\n                ctx.save();\n                ctx.font = '11px sans-serif';\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'bottom';\n                chart.data.datasets.forEach((ds, dsIndex) => {\n                    if (ds.hidden || (ds.yAxisID && ds.yAxisID !== 'y')) return;\n                    const meta = chart.getDatasetMeta(dsIndex);\n                    ctx.fillStyle = ds.borderColor;\n                    ds.data.forEach((pt, ptIndex) => {\n                        if (!pt || pt.y == null || pt.x < xScale.min || pt.x > xScale.max) return;\n                        const element = meta.data[ptIndex];\n                        if (!element) return;\n                        ctx.fillText(pt.y.toFixed(2), element.x, element.y - 6);\n                    });\n                });\n                ctx.restore();\n            }\n        };\n\n        function buildLegendItems(chart) {\n            return chart.data.datasets.map((ds, i) => {\n                const meta = chart.getDatasetMeta(i);\n                const hidden = meta.hidden;\n                const color = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                return `<div data-ds=\"${i}\" class=\"legend-tooltip-item\" style=\"opacity:${hidden ? 0.35 : 1};\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div><span>${ds.label}</span></div>`;\n            }).join('');\n        }\n\n        function buildTooltipItems(tooltipItems) {\n            if (!tooltipItems.length) return '';\n            const dateStr = moment(tooltipItems[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n            const values = tooltipItems.map(item => {\n                const color = CHART_LINE_COLORS[item.datasetIndex % CHART_LINE_COLORS.length];\n                const val = item.parsed.y;\n                return `<div class=\"legend-tooltip-value\"><div class=\"legend-tooltip-dot\" style=\"background:${color};\"></div>${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}</div>`;\n            }).join('');\n            return `<div class=\"legend-tooltip-date\">${dateStr}</div>${values}`;\n        }\n\n        let legendTooltipEl = null;\n\n        function initLegendTooltip(container, chart) {\n            legendTooltipEl = container.querySelector('.legend-tooltip');\n            if (!legendTooltipEl) {\n                legendTooltipEl = document.createElement('div');\n                legendTooltipEl.className = 'legend-tooltip';\n                container.style.position = 'relative';\n                container.appendChild(legendTooltipEl);\n            }\n            legendTooltipEl.innerHTML = buildLegendItems(chart);\n            attachLegendHandlers(legendTooltipEl, chart);\n            // Right-click anywhere on the legend → clear the pinned crosshair\n            legendTooltipEl.oncontextmenu = (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            };\n        }\n\n        function attachLegendHandlers(el, chart) {\n            el.onclick = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const i = parseInt(item.dataset.ds);\n                const meta = chart.getDatasetMeta(i);\n                meta.hidden = !meta.hidden;\n                chart.update();\n                el.innerHTML = buildLegendItems(chart);\n            };\n            el.onmouseover = function(e) {\n                const item = e.target.closest('[data-ds]');\n                if (!item) return;\n                const idx = parseInt(item.dataset.ds);\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = (i === idx)\n                        ? CHART_LINE_COLORS[i % CHART_LINE_COLORS.length]\n                        : CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '33';\n                });\n                chart.update('none');\n            };\n            el.onmouseout = function() {\n                chart.data.datasets.forEach((ds, i) => {\n                    ds.borderColor = CHART_LINE_COLORS[i % CHART_LINE_COLORS.length];\n                });\n                chart.update('none');\n            };\n        }\n\n        const externalTooltipHandler = function(context) {\n            const chart = context.chart;\n            const tooltip = context.tooltip;\n            if (!legendTooltipEl) return;\n            // When a point is pinned, the legend-tooltip is owned by the pin —\n            // don't let cursor-driven tooltip updates overwrite it.\n            if (pinnedX !== null) return;\n            if (tooltip.opacity === 0 || !tooltip.dataPoints || !tooltip.dataPoints.length) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n                return;\n            }\n            legendTooltipEl.style.pointerEvents = 'none';\n            legendTooltipEl.innerHTML = buildTooltipItems(tooltip.dataPoints);\n        };\n\n        // Compute the closest data point per visible dataset at a given canvas-x px.\n        // Returns objects shaped like Chart.js tooltip.dataPoints so buildTooltipItems can reuse them.\n        function getDataPointsAtPx(chart, px) {\n            const xScale = chart.scales['x'];\n            if (!xScale) return [];\n            const targetX = xScale.getValueForPixel(px);\n            const items = [];\n            chart.data.datasets.forEach((ds, datasetIndex) => {\n                const meta = chart.getDatasetMeta(datasetIndex);\n                if (meta.hidden) return;\n                let closest = null;\n                let bestDist = Infinity;\n                ds.data.forEach(pt => {\n                    if (!pt || pt.x == null || pt.y == null) return;\n                    const d = Math.abs(pt.x - targetX);\n                    if (d < bestDist) { bestDist = d; closest = pt; }\n                });\n                if (closest) {\n                    items.push({\n                        datasetIndex,\n                        dataset: ds,\n                        parsed: { x: closest.x, y: closest.y }\n                    });\n                }\n            });\n            return items;\n        }\n\n        const setPinnedTooltip = (px) => {\n            pinnedX = px;\n            const items = getDataPointsAtPx(chart, px);\n            if (!items.length) { pinnedX = null; return; }\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'none';\n                legendTooltipEl.innerHTML = buildTooltipItems(items);\n            }\n            chart.update('none');\n        };\n\n        const clearPinnedTooltip = () => {\n            if (pinnedX === null) return;\n            pinnedX = null;\n            if (legendTooltipEl) {\n                legendTooltipEl.style.pointerEvents = 'auto';\n                legendTooltipEl.innerHTML = buildLegendItems(chart);\n                attachLegendHandlers(legendTooltipEl, chart);\n            }\n            chart.update('none');\n        };\n\n        const chart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: { duration: 300 },\n                interaction: { mode: 'index', intersect: false },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: {\n                        enabled: false,\n                        external: externalTooltipHandler,\n                        callbacks: {\n                            title(items) {\n                                if (!items.length) return '';\n                                return moment(items[0].parsed.x).format('DD MMM YYYY HH:mm:ss');\n                            },\n                            label(item) {\n                                const val = item.parsed.y;\n                                return `${item.dataset.label}: ${val != null ? val.toFixed(3) : 'N/A'}`;\n                            }\n                        }\n                    },\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            tooltipFormat: 'DD MMM YYYY HH:mm:ss',\n                            displayFormats: {\n                                millisecond: 'HH:mm:ss',\n                                second:      'HH:mm:ss',\n                                minute:      'HH:mm',\n                                hour:        'DD MMM HH:mm',\n                                day:         'DD MMM',\n                                week:        'DD MMM',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        min: xMin,\n                        max: xMax,\n                        ticks: {\n                            maxTicksLimit: 8,\n                            maxRotation: 0\n                        },\n                        grid: { display: true }\n                    },\n                    y: {\n                        type: 'linear',\n                        position: 'left',\n                        title: {\n                            display: true,\n                            text: yAxisTitle\n                        },\n                        min: (!this.get('autoAxis') && this.get('axis_min') != null) ? parseFloat(this.get('axis_min')) : undefined,\n                        max: (!this.get('autoAxis') && this.get('axis_max') != null) ? parseFloat(this.get('axis_max')) : undefined,\n                        ticks: { callback: v => v.toFixed(2) }\n                    },\n                    y2: {\n                        type: 'linear',\n                        position: 'right',\n                        title: { display: true, text: 'Temperature (°C)' },\n                        grid: { drawOnChartArea: false },\n                        ticks: { callback: v => v.toFixed(1) }\n                    }\n                }\n            },\n            plugins: [noDataPlugin, eventMarkersPlugin, crosshairPlugin, pointLabelsPlugin]\n        });\n\n        this.set('_mainChart', chart);\n        this.set('_clearPinFn', clearPinnedTooltip);\n        initLegendTooltip(canvas.parentElement, chart);\n        if (this.setData) { this.setData(linesData); }\n        if (this.setChart) { this.setChart(chart); }\n\n        // Main chart interactions:\n        //  - crosshair follows cursor\n        //  - drag horizontally → draw selection rectangle, on release submits start/end to route\n        //  - double-click → reset brush (clears start/end query params, full history)\n        const mainCanvas = this.element.querySelector('canvas.chartjs-main');\n        const mainSelectionEl = this.element.querySelector('.chartjs-main-selection');\n        if (mainCanvas) {\n            let dragStartPx = null;\n\n            const getCanvasX = (e) => {\n                const rect = mainCanvas.getBoundingClientRect();\n                return e.clientX - rect.left;\n            };\n\n            mainCanvas.addEventListener('mousedown', (e) => {\n                e.preventDefault();\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n                if (px < left || px > right) return;\n                dragStartPx = px;\n                if (mainSelectionEl) {\n                    mainSelectionEl.style.left = px + 'px';\n                    mainSelectionEl.style.width = '0px';\n                    mainSelectionEl.style.display = 'block';\n                }\n            });\n\n            mainCanvas.addEventListener('mousemove', e => {\n                const px = getCanvasX(e);\n                const { left, right } = chart.chartArea;\n\n                if (dragStartPx != null && mainSelectionEl) {\n                    const curX = Math.max(left, Math.min(right, px));\n                    const l = Math.min(curX, dragStartPx);\n                    const w = Math.abs(curX - dragStartPx);\n                    mainSelectionEl.style.left = l + 'px';\n                    mainSelectionEl.style.width = w + 'px';\n                    crosshairX = null;\n                } else {\n                    crosshairX = (px >= left && px <= right) ? px : null;\n                }\n                chart.update('none');\n            });\n\n            mainCanvas.addEventListener('mouseleave', () => {\n                crosshairX = null;\n                chart.update('none');\n            });\n\n            const onMouseUp = (e) => {\n                if (dragStartPx == null) return;\n                const startPx = dragStartPx;\n                dragStartPx = null;\n                const endPx = getCanvasX(e);\n\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n\n                // Click (no meaningful drag) → toggle a pinned crosshair at this x so the\n                // user can read values without holding the cursor in place.\n                if (Math.abs(endPx - startPx) < 5) {\n                    const { left, right } = chart.chartArea;\n                    if (startPx < left || startPx > right) return;\n                    if (pinnedX !== null && Math.abs(startPx - pinnedX) < 5) {\n                        clearPinnedTooltip();\n                    } else {\n                        setPinnedTooltip(startPx);\n                    }\n                    return;\n                }\n\n                const xScale = chart.scales['x'];\n                if (!xScale) return;\n                const { left, right } = chart.chartArea;\n                const leftPx = Math.max(left, Math.min(right, Math.min(startPx, endPx)));\n                const rightPx = Math.max(left, Math.min(right, Math.max(startPx, endPx)));\n                const startTs = xScale.getValueForPixel(leftPx);\n                const endTs = xScale.getValueForPixel(rightPx);\n                if (startTs == null || endTs == null || endTs <= startTs) return;\n\n                _this._submitBrush(\n                    moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                    moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n                );\n            };\n\n            mainCanvas.addEventListener('mouseup', onMouseUp);\n            document.addEventListener('mouseup', onMouseUp);\n\n            // Right-click on the chart → clear pinned crosshair (suppresses browser menu)\n            mainCanvas.addEventListener('contextmenu', (e) => {\n                e.preventDefault();\n                clearPinnedTooltip();\n            });\n\n            mainCanvas.addEventListener('dblclick', () => {\n                if (mainSelectionEl) mainSelectionEl.style.display = 'none';\n                clearPinnedTooltip();\n                // Also hide the overview brush selection so the reset feels instant,\n                // not waiting for fullRangeChartData to refire the overviewDataObserver.\n                const overviewSelectionEl = _this.element && _this.element.querySelector('.chartjs-brush-selection');\n                if (overviewSelectionEl) overviewSelectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n            });\n        }\n    },\n\n    _buildOverviewChart() {\n        const canvas = this.element.querySelector('canvas.chartjs-overview');\n        const overlayEl = this.element.querySelector('.chartjs-brush-overlay');\n        const selectionEl = this.element.querySelector('.chartjs-brush-selection');\n        if (!canvas || !overlayEl || !selectionEl) return;\n\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        const datasets = anchorDistances.map((chartLineName, i) => ({\n            label: String(chartLineName),\n            data: fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            }),\n            borderColor: CHART_LINE_COLORS[i % CHART_LINE_COLORS.length] + '88',\n            backgroundColor: 'transparent',\n            borderWidth: 1,\n            pointRadius: 0,\n            pointHoverRadius: 0,\n            tension: 0,\n            spanGaps: true\n        }));\n\n        const overviewChart = new Chart(canvas, {\n            type: 'line',\n            data: { datasets },\n            options: {\n                responsive: true,\n                maintainAspectRatio: false,\n                animation: false,\n                interaction: { mode: null },\n                plugins: {\n                    legend: { display: false },\n                    tooltip: { enabled: false }\n                },\n                scales: {\n                    x: {\n                        type: 'time',\n                        time: {\n                            displayFormats: {\n                                millisecond: 'MMM YYYY',\n                                second:      'MMM YYYY',\n                                minute:      'MMM YYYY',\n                                hour:        'MMM YYYY',\n                                day:         'MMM YYYY',\n                                week:        'MMM YYYY',\n                                month:       'MMM YYYY',\n                                quarter:     'MMM YYYY',\n                                year:        'YYYY'\n                            }\n                        },\n                        ticks: { maxTicksLimit: 6, font: { size: 10 } },\n                        grid: { display: false }\n                    },\n                    y: { display: false }\n                }\n            }\n        });\n        this.set('_overviewChart', overviewChart);\n\n        this._restoreBrushFromQueryParams();\n        this._attachBrushHandlers(overlayEl, selectionEl);\n    },\n\n    _restoreBrushFromQueryParams() {\n        const overviewChart = this.get('_overviewChart');\n        const selectionEl = this.element && this.element.querySelector('.chartjs-brush-selection');\n        if (!overviewChart || !selectionEl) return;\n\n        const qp = this.attrs && this.attrs.getQueryParams;\n        const startQP = qp ? qp('start_timestamp') : null;\n        const endQP = qp ? qp('end_timestamp') : null;\n        if (!startQP || !endQP) { selectionEl.style.display = 'none'; return; }\n\n        const startTs = moment(startQP).valueOf();\n        const endTs = moment(endQP).valueOf();\n        if (!startTs || !endTs || endTs <= startTs) { selectionEl.style.display = 'none'; return; }\n\n        const xScale = overviewChart.scales.x;\n        if (!xScale) return;\n        const leftPx = xScale.getPixelForValue(startTs);\n        const rightPx = xScale.getPixelForValue(endTs);\n        selectionEl.style.left = Math.max(0, leftPx) + 'px';\n        selectionEl.style.width = Math.max(1, rightPx - leftPx) + 'px';\n        selectionEl.style.display = 'block';\n\n        this.set('_brushLastRange', [startQP, endQP]);\n    },\n\n    _attachBrushHandlers(overlayEl, selectionEl) {\n        const _this = this;\n\n        const getOverlayX = (evt) => {\n            const rect = overlayEl.getBoundingClientRect();\n            return Math.max(0, Math.min(rect.width, evt.clientX - rect.left));\n        };\n\n        overlayEl.addEventListener('mousedown', (e) => {\n            e.preventDefault();\n            _this._brushDragStartPx = getOverlayX(e);\n            selectionEl.style.left = _this._brushDragStartPx + 'px';\n            selectionEl.style.width = '0px';\n            selectionEl.style.display = 'block';\n        });\n\n        const onMove = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const curX = getOverlayX(e);\n            const left = Math.min(curX, _this._brushDragStartPx);\n            const width = Math.abs(curX - _this._brushDragStartPx);\n            selectionEl.style.left = left + 'px';\n            selectionEl.style.width = width + 'px';\n        };\n\n        const onUp = (e) => {\n            if (_this._brushDragStartPx == null) return;\n            const endPx = getOverlayX(e);\n            const startPx = _this._brushDragStartPx;\n            _this._brushDragStartPx = null;\n\n            if (Math.abs(endPx - startPx) < 4) {\n                selectionEl.style.display = 'none';\n                _this._submitBrush(null, null);\n                return;\n            }\n\n            const overviewChart = _this.get('_overviewChart');\n            const xScale = overviewChart && overviewChart.scales.x;\n            if (!xScale) return;\n\n            const leftPx = Math.min(startPx, endPx);\n            const rightPx = Math.max(startPx, endPx);\n            const startTs = xScale.getValueForPixel(leftPx);\n            const endTs = xScale.getValueForPixel(rightPx);\n            if (startTs == null || endTs == null || endTs <= startTs) return;\n\n            _this._submitBrush(\n                moment(startTs).format('YYYY-MM-DD HH:mm:ss.SSS'),\n                moment(endTs).format('YYYY-MM-DD HH:mm:ss.SSS')\n            );\n        };\n\n        overlayEl.addEventListener('mousemove', onMove);\n        document.addEventListener('mousemove', onMove);\n        document.addEventListener('mouseup', onUp);\n\n        overlayEl.addEventListener('dblclick', () => {\n            selectionEl.style.display = 'none';\n            _this._submitBrush(null, null);\n        });\n    },\n\n    _submitBrush(startTs, endTs) {\n        if (this.isDestroyed || this.isDestroying) return;\n        const prev = this.get('_brushLastRange');\n        if (prev && prev[0] === startTs && prev[1] === endTs) return;\n        this.set('_brushLastRange', [startTs, endTs]);\n        if (this.attrs && this.attrs.updateProperties) {\n            this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTs, endTs]);\n        }\n    },\n\n    dataObserver: observer('fullRangeChartLinesData', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n        const newLines = this.get('fullRangeChartLinesData');\n        if (!Array.isArray(newLines)) return;\n\n        // New data → axis is about to shift; the old pinned px would point at a\n        // different time. Clear the pin so the user isn't reading a stale value.\n        const clearPin = this.get('_clearPinFn');\n        if (clearPin) clearPin();\n\n        newLines.forEach((line) => {\n            const dsIdx = chart.data.datasets.findIndex(ds => String(ds.label) === String(line.key));\n            if (dsIdx >= 0) {\n                chart.data.datasets[dsIdx].data = line.values;\n            }\n        });\n\n        const allTs = newLines.flatMap(l => (l.values || []).filter(v => v.x != null && v.y != null).map(v => v.x));\n        const xMin = allTs.length ? Math.min(...allTs) : undefined;\n        const xMax = allTs.length ? Math.max(...allTs) : undefined;\n        chart.options.scales.x.min = xMin;\n        chart.options.scales.x.max = xMax;\n\n        if (this.get('autoAxis') || this.get('axis_min') == null || this.get('axis_max') == null) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    overviewDataObserver: observer('fullRangeChartData', function() {\n        const overviewChart = this.get('_overviewChart');\n        if (!overviewChart) return;\n        const anchorDistances = this.get('anchorDistances') || [];\n        const modelName = this.get('chartDataModelName');\n        const isStrain = modelName === 'strain-values' || modelName === 'strain-rate-values';\n        const fullRange = this.get('fullRangeChartData');\n        if (!fullRange) return;\n\n        anchorDistances.forEach((chartLineName, i) => {\n            const dsIdx = overviewChart.data.datasets.findIndex(ds => String(ds.label) === String(chartLineName));\n            if (dsIdx < 0) return;\n            overviewChart.data.datasets[dsIdx].data = fullRange.map(item => {\n                const vals = item.get('values');\n                const arr = isStrain ? [...(Array.isArray(vals) ? vals : []), 0] : vals;\n                return {\n                    x: moment(item.get('id')).valueOf(),\n                    y: (arr && arr[i] !== undefined) ? arr[i] : null\n                };\n            });\n        });\n        overviewChart.update('none');\n        this._restoreBrushFromQueryParams();\n    }),\n\n    axisScaleObserver: observer('autoAxis', 'axis_min', 'axis_max', function() {\n        const chart = this.get('_mainChart');\n        if (!chart) return;\n\n        const autoAxis = this.get('autoAxis');\n        const axisMin  = this.get('axis_min');\n        const axisMax  = this.get('axis_max');\n\n        if (autoAxis) {\n            chart.options.scales.y.min = undefined;\n            chart.options.scales.y.max = undefined;\n        } else {\n            chart.options.scales.y.min = (axisMin != null && axisMin !== '') ? parseFloat(axisMin) : undefined;\n            chart.options.scales.y.max = (axisMax != null && axisMax !== '') ? parseFloat(axisMax) : undefined;\n        }\n\n        chart.update('none');\n    }),\n\n    willDestroyElement() {\n        this._super(...arguments);\n        const mainChart = this.get('_mainChart');\n        if (mainChart) mainChart.destroy();\n        const overviewChart = this.get('_overviewChart');\n        if (overviewChart) overviewChart.destroy();\n    },\n\n    actions: {\n        saveImage() {\n            html2canvas(this.element.querySelector('#capture')).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(blob => {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        toggleLine(seriesIndex) {\n            const mainChart = this.get('_mainChart');\n            if (!mainChart) return;\n            const meta = mainChart.getDatasetMeta(seriesIndex);\n            meta.hidden = !meta.hidden;\n            mainChart.update();\n        }\n    }\n});\n","import { computed, get, observer } from '@ember/object';\nimport Component from '@ember/component';\nimport EmberObject from '@ember/object';\nimport { getAnchorCountFromId } from '../../utils/instrument-id';\n\nfunction resetNewInstrumentObject(_this) {\n    _this.set('newInstrumentObject', {});\n    _this.set('zeroTimestamp', null);\n    _this.set('installDate', null);\n    _this.set('strokeLength', 0);\n}\n\n\nexport default class CreatePackInstrument extends Component.extend({\n    //@service session;\n    //@service currentUser;\n\n    modelList: computed('selectedVendor', function() {\n        let modelList = this.get('vwModels');\n        //console.log('test');\n        let shortModelList = [];\n\n        modelList.toArray().forEach(element => {\n            if (element.get('vwvendor').id === this.get('selectedVendor')) {\n                shortModelList.push(element);\n            }\n        });\n\n        return shortModelList;\n    }),\n\n    getModelById(modelId) {\n        let modelList = this.get('modelList');\n        return modelList.find(model => model.get('id') === modelId);\n    },\n    is4500HH: computed('selectedModel', function() {\n        let selectedModel = this.get('selectedModel');\n        let model = this.getModelById(selectedModel);\n\n        if (model != null){\n            return model.modelName === '4500-HH';\n        } else {\n            return false;        \n        }\n    }),\n    isTypeGeoPt: computed('selectedModel', function() {\n        let selectedVendor = this.get('selectedVendor');\n        let selectedModel = this.get('selectedModel');\n\n        if (selectedModel != \"\" && selectedModel != null)\n            if (selectedVendor == 2)\n                return true;\n \n        return false;\n    }),\n    isTypeRocPws: computed('selectedModel', function() {\n        let selectedVendor = this.get('selectedVendor');\n        let selectedModel = this.get('selectedModel');\n\n        if (selectedModel != \"\" && selectedModel != null)\n            if (selectedVendor == 1)\n                return true;\n        \n        return false;\n    }),\n\n    vwProperties: [],\n\n    authError:false,\n    isAuthenticated:true,\n    newInstrumentObject:{},\n    headAt:'HAC',\n    zeroTimestamp:null,\n    installDate:null,\n    selectedVendor:null,\n    selectedModel:null,\n    calcCoef1:null,\n    calcCoef2:null,\n    calcCoef3:null,\n    calcCoef4:null,\n    calcCoef5:null,\n   \n    project: null,\n    level: null,\n\n    \n    actions: {\n\n        \n        setProject(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(value) {\n            const selectedId = value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n\n        setVendor(vendorID){\n            this.set('selectedVendor', vendorID);\n            this.set('selectedModel', null);\n            this.send('setModel', null);\n        },\n\n        setModel(modelID){\n            this.set('selectedModel', modelID);\n        },\n        setValue(prop, val){\n            //console.log('setting' + prop + val);\n            this.set(prop,val);\n        },\n        createInstrument(object){\n\n            let _this = this,\n            store = this.get('store'),\n            newInstrumentObject = this.get('newInstrumentObject');\n\n            this.setError('isVisibleError',false);\n            this.setError('duplicateError',false);\n            this.setError('fieldError',false);\n\n            let error = false;\n\n            newInstrumentObject.id = this.get('id');\n\n            newInstrumentObject.instrumentType = store.peekRecord('instrument-type', this.get('typeID'));\n            newInstrumentObject.headAt = store.peekRecord('head-at', this.get('headAt'));\n            newInstrumentObject.active = true;\n\n            if(typeof newInstrumentObject.id === 'undefined' || newInstrumentObject.id === \"\") {\n                error = true;\n                this.setError('fieldError',true);\n                this.setError('isVisibleError',true);\n            }\n\n            if (this.get('zeroTimestamp') != null) {\n                newInstrumentObject.zeroTimestamp = moment(this.get('zeroTimestamp'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n\n            if (this.get('installDate') != null) {\n                newInstrumentObject.installDate = moment(this.get('installDate'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            }\n            console.log(\"level::::: \" + this.level);\n            newInstrumentObject.project = this.get('project');\n            newInstrumentObject.level = this.get('level');\n\n            // console.log(get(this, 'duplicateError'));\n\n            let newInstrument = null;\n            let dup = false;\n            if(!error) {\n                try {\n                    newInstrument = store.createRecord('instrument', newInstrumentObject);\n                } catch (err) {\n                    this.setError('isVisibleError',true);\n                    //console.log(this.get('prevDup'));\n                    if(err.message.includes('has already been used')) {\n                        //console.log('duplicate');\n                        this.setError('duplicateError',true);\n                        \n                        error = true;\n                        dup = true;\n                    }\n                    // console.log(err.message);\n                }\n            }\n            \n            this.setError('authError', false);\n\n\n            if (!error) {                \n                newInstrument.save().then(function(results){\n\n                    let model = _this.get('vwModels').findBy('id', _this.get('selectedModel'));\n\n                    if(newInstrumentObject.instrumentType.id === '12') {\n                        if(results.id != null) {\n                            let anchorCount = getAnchorCountFromId(newInstrumentObject.id);\n                            for(var ctr = 0; ctr <= anchorCount; ctr++) {\n                                store.createRecord('anchor', {number: ctr, distance: ctr, instrument: results}).save();\n                            }\n                            \n                            _this.createVwProperties(results);\n                            \n                            // create vwProperty records\n                            _this.vwProperties.forEach((vwPropertyData, index) => {\n\n                                // console.log(\"vwPropertyData.port: \" + vwPropertyData.port);\n                                let vwp = store.createRecord('vwproperty', {port: vwPropertyData.port, instrument: vwPropertyData.instrument});\n                                vwp.save().then(propertyResults => {\n                                // console.log(\"property saved: Port: \" + propertyResults.port);\n                                }).catch(function(reason) {\n                                    console.log(\"property save failed: \" + reason);\n                                });\n                            });\n                        }\n                    }\n\n                    if(results.id != null) {\n                        _this.get('submit')(results.id);\n                    } else {\n                        this.setError('isVisibleError',true);\n                        error = true;\n                    }\n                }).catch(function(reason) {\n                    \n                    _this.setError('isVisibleError',true);\n                    _this.setError('authError',true);\n                });\n            }\n        }\n    },\n    createVwProperties(instrument) {\n        this.set('vwProperties', []);\n        let channelsNum = 0;\n        channelsNum = parseInt(instrument.get(\"channelsNum\") / 2);\n        console.log(\"channelsNum:::::::::::: \" + channelsNum)\n        for (let channel = 1; channel <= channelsNum; channel++) {\n            let vwProperty = {\n                port: channel,\n                instrument: instrument\n            };\n            this.vwProperties.push(vwProperty);\n        }\n    }\n\n}){\n    init() {\n        super.init(...arguments);\n        resetNewInstrumentObject(this);\n    }\n\n}","import { inject as service } from \"@ember/service\";\nimport { computed, observer } from '@ember/object';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\nimport { getOwner } from '@ember/application';\n\nfunction resetNewRawDataValueObject(_this) {\n    let displacementValueObjectValues = _this.get('displacementValueObjectValues');\n\n    // reset variables to defaults\n    _this.set('newTimestampValue', moment().format(_this.get('dateFormat')));\n    _this.set('temperatureObjectValue', 0);\n    Object.keys(displacementValueObjectValues).forEach(function(key,index) {\n        displacementValueObjectValues[key] = 0;\n    });\n}\n\nexport default Component.extend({\n    store: service(),\n    router: service(),\n    isVisibleCreateNewForm: true,\n    dateFormat: 'YYYY-MM-DD HH:mm:ss',\n    dateTimePicker: null, // dateTimePicker object\n    temperatureObjectValue: 0,\n    newTimestampValue: null,\n    // newTimestampValue: computed('dateFormat', function() {\n    //     return moment().format(this.get('dateFormat'));\n    // }),\n\n    newDisplacementValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    newTemperatureValuesObject: computed('newTimestampValue', function() {\n        return {\n            id: this.get('newTimestampValue')\n        };\n    }),\n\n    // look for isVisibleCreateNewForm variable change and reset newDisplacementValuesObject object if create new form was called twice\n    handleIsVisibleCreateNewFormChange: observer('isVisibleCreateNewForm', function(){\n        if ( this.get('isVisibleCreateNewForm') ) {\n            resetNewRawDataValueObject(this);\n        }\n    }),\n\n    displacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i < this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    // displacementValueObjectValues: computed('instrumentAnchors', function() {\n    //     let displacementValueObjectValues = [];\n    //     for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n    //         displacementValueObjectValues[i] = 0;\n    //     }\n    //     return displacementValueObjectValues;\n    // }),\n\n    newDisplacementValueObjectValues: computed('instrumentAnchors', function() {\n        let displacementValueObjectValues = [];\n        for (let i = 0; i <= this.get('instrumentAnchors').length - 1; i++) {\n            displacementValueObjectValues[i] = 0;\n        }\n        return displacementValueObjectValues;\n    }),\n\n    actions: {\n        setNewDisplacementValue(key, event) {\n            const vals = this.get('newDisplacementValueObjectValues');\n            vals[key] = event.target.value;\n        },\n        setNewTimestampValue(event) {\n            this.set('newTimestampValue', event.target.value);\n        },\n        setTemperatureValue(event) {\n            this.set('temperatureObjectValue', event.target.value);\n        },\n        saveNew(){\n            let _this = this,\n                store = this.get('store'),\n                newDisplacementValuesObject = this.get('newDisplacementValuesObject'),\n                newTemperatureValuesObject = this.get('newTemperatureValuesObject'),\n                displacementValues = this.get('displacementValues'),\n                temperatureValues = this.get('temperatureValues')\n            ;\n\n            newTemperatureValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newTemperatureValuesObject.values = [this.get('temperatureObjectValue')];\n\n            const newTemperatureValues = store.createRecord('temperature-value', newTemperatureValuesObject);\n            // save new displacement-value to DB\n            const savedTemperatureValuesObject = newTemperatureValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                //_this.set('isVisibleCreateNewForm', false);\n\n                // if displacement-value was successfully saved to DB, then display it\n                //temperatureValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n            });\n\n            newDisplacementValuesObject.id = moment(this.get('newTimestampValue'),'YYYY MM DD HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');\n            newDisplacementValuesObject.values = Object.values(this.get('newDisplacementValueObjectValues'));\n            \n            newDisplacementValuesObject.values.unshift(\"0\");\n\n            const newDisplacementValues = store.createRecord('displacement-value', newDisplacementValuesObject);\n            // save new displacement-value to DB\n            const savedDisplacementValuesObject = newDisplacementValues.save({adapterOptions: this.get('instrumentId')}).then(function(results){\n                // hide create new item form\n                _this.set('isVisibleReadingCreated', true);\n                _this.set('isVisibleCreateNewForm', false);\n                // if displacement-value was successfully saved to DB, then display it\n                //results._internalModel._data.values.shift();\n                //displacementValues.unshiftObject(results._internalModel); // https://github.com/emberjs/data/issues/3313\n                const currentRouteName = _this.get(\"router.currentRouteName\");\n                const currentRouteInstance = getOwner(_this).lookup(`route:${currentRouteName}`);\n                currentRouteInstance.refresh();\n                \n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.setProp('permissionError', true);\n                }\n            });\n        },\n        cancelNew(object){\n            // hide create new item form\n            this.set('isVisibleCreateNewForm', false);\n            // reset all variables\n            resetNewRawDataValueObject(this);\n        }\n    },\n    didRender() {\n        let _this = this;\n        // let dateTimePicker = this.$(\".datetimepicker-input\").datetimepicker({\n        //     format: _this.get('dateFormat'),\n        // }).on('dp.change', function(e) {\n        //     if (e.date) {\n        //         _this.set(e.currentTarget.id, e.date.format(_this.get('dateFormat')));\n        //     } else {\n        //         _this.set(e.currentTarget.id, null);\n        //     }\n        // });\n        // this.set('dateTimePicker', dateTimePicker);\n\n    },\n    willDestroyElement() {\n        if (this.get('dateTimePicker')) {\n            this.get('dateTimePicker').datetimepicker(\"destroy\");\n        }\n\n    },\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\n\nexport default class EditInstrumentPortDropDown extends Component.extend({\n    editing: 0,\n    selectedVendor: null,\n    selectedModel: null,\n    //numberOfPorts: 1,\n\n    // ports: computed('instrument', function() {\n    //     console.log(\"ChannelsNum::: \");\n    //     let channelsNum = this.get('instrument').channelsNum;\n    //     console.log(\"ChannelsNum::: \" + channelsNum);\n    //     channelsNum = parseInt(channelsNum/2);\n    //     let numberOfPorts = [];\n    //     for(let channel = 1 ; channel <= channelsNum; channel++){\n    //         numberOfPorts.push({\"channel\": channel});\n    //     }\n    //     console.log(JSON.stringify(numberOfPorts));\n    //     return numberOfPorts;\n    // }),\n    \n    selectedVendorID: computed('instrument', function() {\n        try {\n            let vendor = this.get('instrument').get('vwproperty').toArray()[0].get('vwmodel').get('vwvendor');\n            this.set('selectedVendor', vendor.id);\n            \n            return vendor.id;\n        } catch (ex) {}\n        return 0;\n    }),\n\n    selectedModelID: computed('instrument', function() {\n        //console.log('test');\n        try {\n            let model = this.get('instrument').get('vwproperty').toArray()[0].get('vwmodel');\n            //console.log(model.get('id'));\n            this.set('selectedModel', model.get('id'));\n\n            \n            return model.get('id');\n        } catch (ex) {}\n        return 0;\n    }),\n\n    modelList: computed('selectedVendor', 'instrument', function() {\n        let modelList = this.get('vwModels');\n        \n        let shortModelList = [];\n\n        modelList.toArray().forEach(element => {\n            if (element.get('vwvendor').id === this.get('selectedVendor')) {\n                shortModelList.push(element);\n            }\n        });\n\n        return shortModelList;\n    }),\n\n    vendorName: computed('selectedModel', function() {\n        try {\n            let vendor = this.get('instrument').get('vwproperty').toArray()[0].get('vwmodel').get('vwvendor');\n            return vendor.vendorName;\n        } catch (ex) {}\n        return \"\"\n    })\n}) {\n    @service router;\n    @service store;\n    //@service session;\n    //@service currentUser;\n    isAuthenticated = true;\n    _this = this;\n\n//     actions = {\n//         viewData(id) {\n//             this.get('router').transitionTo('raw-data', id);\n//             //this.viewData(id);\n//         },\n//         tGraph(id) {\n//             this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values');\n//             //this.tGraph(id, 'displacement-values');\n//         },\n//         fGraph(id) {\n//             this.get('router').transitionTo('frequency-graphs.frequency-graph', id, 'displacement-values');\n//             //this.sGraph(id, 'displacement-values');\n//         },\n//         setVendor(vendorID) {\n//             let vendors = this.get('vwVendors');\n//             for(let i = 0; i < vendors.length; i++) {\n//                 console.log(vendors[i].id);\n//                 console.log(vendors[i].vendorName);\n//                 console.log(vendors[i].id);\n                \n//             }                    \n//             console.log('setVendor: ' + this.get('vwVendors'));\n//             this.set('selectedVendor', vendorID);\n//             this.set('selectedModel', null);\n//             this.send('setModel', null);\n//         },\n//         setPort(portID) {\n//             //console.log('setPort');\n//             let inst = this.get('instrument');\n//             this.get('router').transitionTo('edit-instrument', inst, 'instrument');\n//         },\n//         setModel(modelID) {\n//             console.log('setModel');\n//             this.set('selectedModel', modelID);\n//             let inst = this.get('instrument');\n//             let prop = inst.get('vwproperty').toArray()[0];\n//             let model = this.get('vwModels').findBy('id', modelID);\n\n//             if (typeof model === \"undefined\") {\n//                 model = null;\n//             }\n\n//             if(prop.get('serial') == null) {\n//                 prop.set('serial', \"\");\n//             }\n\n//             prop.set('vwmodel', model);\n\n//             prop.save();\n//         },\n//         editField() {\n//             this.set('editing', this.get('editing') + 1);\n//         },\n//         stopEditField() {\n//             this.set('editing', this.get('editing') - 1);\n//         },\n//         saveInstrument(){\n//             const _this = this;\n//             // console.log(\"test\");\n//             if (this.get('editing') > 0) {\n//                 var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n//                 if (t) {\n//                     window.location.href = \"/instruments\";    \n//                 }\n//             } else {\n//                 window.location.href = \"/instruments\";\n//             }            \n//         }\n    // }\n}","import { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@ember/component';\nimport vwmodel from '../../models/vwmodel';\n\nexport default class EditInstrument extends Component.extend({\n    editing: 0,\n    selectedVendor: null,\n    selectedModel: null,\n    modelList: null,\n    vwProperties: [],\n    project: null,\n    level: null,\n\n\n    async init() {\n        this._super(...arguments);\n\n        let inst = this.get(\"instrument\");\n        this.set('vwProperties', []);        \n        if( (inst.get(\"vwproperty\") === null && inst.get(\"vwproperty\") != 'undefined') || inst.get(\"vwproperty\").length === 0 ){\n            console.log(\"vwproperty is null\");\n            // there should always be one property at least.  That there is not means that this instrument existed prior to \n            // the automatic generation of vwproperty records.  So we need to create one.\n            console.log(\"edit-instrument/wire: Creating vwproperty\");\n            this.createVwProperties(inst);\n        } \n        if (inst.vwproperty != undefined && inst.vwproperty.length > 0) {\n            for(let prop of inst.get(\"vwproperty\").toArray()){\n\n                let model = await prop.get(\"vwmodel\");\n                this.set(\"model\", model)\n                if( model != null && model != undefined){\n                    prop.vendor = prop.get(\"vwmodel\").get(\"vwvendor\");\n                    prop.modelTypes = this.modelList(prop.get(\"vwmodel\").get(\"vwvendor\").get(\"id\"));\n                }\n                if(prop.get(\"instrument\").id === inst.id){\n                    this.get('vwProperties').pushObject(prop);\n                }\n            }\n        } else {\n            console.log('Not an Error: edit-instrument/wire: inst.vwProperty is undefined');\n        }\n\n        // console.log(JSON.stringify(this.vwProperties, null, 2));\n\n    },\n    getSubRoctestModel:computed(\"vwModels\", function(){\n        let models = this.get(\"vwModels\");\n        console.log(models)\n    }),\n    modelList: function(vendorId) {\n        let modelList = this.get('vwModels');\n        \n        let shortModelList = [];\n\n        modelList.toArray().forEach(element => {\n            if (element.get('vwvendor').id === vendorId) {\n                shortModelList.push(element);\n            }\n        });\n\n        return shortModelList;\n    }\n}) {\n    @service router;\n    @service store;\n    //@service session;\n    //@service currentUser;\n    isAuthenticated = true;\n    _this = this;\n    \n    createVwProperties(instrument) {\n        this.vwProperties = [];\n        console.log(\"instrument: \" + instrument);\n        let channelsNum = 0;\n        channelsNum = parseInt(instrument.get(\"channelsNum\") / 2);\n\n        for (let channel = 1; channel <= channelsNum; channel++) {\n            // let vwProperty = {\n            //     port: channel,\n            //     instrument: instrument\n            // };\n            // this.vwProperties.push(vwProperty);\n    \n            // console.log(\"vwPropertyData.port: \" + vwPropertyData.port);\n            let vwp = this.store.createRecord('vwproperty', {\n                    port: channel, \n                    instrument: instrument,\n                    vwmodel: null,\n                    serial: \"\"\n                });\n            vwp.save().then(propertyResults => {\n                this.vwProperties.push(propertyResults);\n                // console.log(\"property saved: Port: \" + propertyResults.port);\n            }).catch(function(reason) {\n                console.log(\"property save failed: \" + reason);\n            });\n\n        \n        }\n        \n    }\n\n    actions = {\n        \n        setProject(event) {\n            const selectedId = event.target.value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.projectLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('project', foundObject);\n            }\n        },\n        \n        setLevel(event) {\n            \n            const selectedId = event.target.value;\n          \n            // Assume levelLookupList is the array of lookup objects\n            const foundObject = this.levelLookupList.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n          \n            if (foundObject) {\n              // Do something with foundObject\n              this.set('level', foundObject);\n            }\n        },\n\n        willDestroyElement() {\n            super.willDestroyElement(...arguments);\n            this.args.vwProperties = [];\n        },\n        selectProperty(value){\n            let inst = this.get('instrument');\n            let prop = inst.get('vwproperty').toArray()[0];\n            console.log(\"prop::: \" + prop.get('port'));\n            let model = this.get('vwModels').findBy('id', this.get('selectedModel'));\n            let vendor = this.get('vwVendors').findBy('id', this.get('selectedVendor'));\n            let serial = this.get('serial');\n        },\n        viewData(id) {\n            let endDateObj = new moment();\n            let startDateObj = moment(endDateObj).subtract(7, 'days').format('YYYY-MM-DDTHH:mm');\n            let formattedEndDateObj = endDateObj.format('YYYY-MM-DDTHH:mm');\n            let baseUnit = this.get(\"instrument\").get(\"instrumentType\").get(\"base_unit\");\n            this.get('router').transitionTo('raw-data', id, { queryParams: { \"advancedStartDate\": startDateObj, \"advancedEndDate\": formattedEndDateObj, \"advancedYAxisUnit\": baseUnit}});\n            //this.viewData(id);\n        },\n        tGraph(id) {\n            this.get('router').transitionTo('temporal-graphs.temporal-graph', id, 'displacement-values');\n            //this.tGraph(id, 'displacement-values');\n        },\n        fGraph(id) {\n            this.get('router').transitionTo('frequency-graphs.frequency-graph', id, 'displacement-values');\n            //this.sGraph(id, 'displacement-values');\n        },\n        // setVendor(vwProperty, value) {\n        //     getProperty\n        //     console.log('setVendor: ' + vendorID);\n        //     this.set('selectedVendor', vendorID);\n        //     this.set('selectedModel', null);\n        //     this.send('setModel', null);\n        // },\n\n        setVendor(vwProperty, event) {\n            // Finding the index of vwProperty in the vwProperties array\n            let index = this.vwProperties.indexOf(vwProperty);\n            let vendorId = event.target.value;\n            let vendor = this.get('vwVendors').findBy('id', vendorId);\n\n            \n            // Setting the selectedVendor and selectedModel on the component\n            vwProperty.vendor = vendor;//getVendor(value.target.value);\n            // this.set('selectedModel', null);\n            vwProperty.modelTypes = this.modelList(vendorId);\n            console.log(vwProperty.modelTypes);\n            // Calling another action to set the model\n            \n            // If vwProperty is found in the array, update it\n            if (index !== -1) {\n                set(this.vwProperties, index, vwProperty);\n            }\n        },\n\n        setModel(vwProperty, event) {\n            let index = this.vwProperties.indexOf(vwProperty);\n            this.set('selectedModel', event.target.value);\n            console.log(this.get(\"selectedModel\"))\n            if(event.target.value !== null){\n                let inst = this.get('instrument');\n                let model = this.get('vwModels').findBy('id', event.target.value);\n                        \n                if (typeof model === \"undefined\") {\n                    model = null;\n                }\n                else {\n                    this.set('model', model);\n                }\n                vwProperty.vwmodel = model;\n                if(vwProperty.serial == null) {\n                    vwProperty.serial = \"\";\n                } else {\n                    vwProperty.serial = vwProperty.serial;\n                }\n                // If vwProperty is found in the array, update it\n                if (index !== -1) {\n                    set(this.vwProperties, index, vwProperty);\n                }\n\n                try{\n                    vwProperty.save();\n                } catch (ex) {\n                    console.log(ex);\n                }\n            }\n        },\n        editField() {\n            this.set('editing', this.get('editing') + 1);\n        },\n        stopEditField() {\n            this.set('editing', this.get('editing') - 1);\n        },\n        saveInstrument(){\n            const _this = this;\n            // console.log(\"test\");\n            if (this.get('editing') > 0) {\n                var t = confirm(\"Some changes have not been saved!\\r\\nTo save changes, click cancel then\\r\\nclick the checkbox next to each open field.\\r\\nOtherwise click ok to continue.\");\n                if (t) {\n                    window.location.href = \"/instruments\";    \n                }\n            } else {\n                window.location.href = \"/instruments\";\n            }            \n        }\n    }\n}\n\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n  gVariableUnit2:\"digit\",\n  kVariableUnit2:\"°C\",\n  gPressureUnit:\"\",\n  kPressureUnit:\"\",\n  store: service(),\n  router: service(),\n  init() {\n      this._super(...arguments);\n      let vwProperty = this.get(\"port\");\n\n      //WARNING. YES SERIAL PROPERTY IS MASKED AS THE UNIT FOR PRESSURE. IT IS NOT A TYPO\n      let initUnit = vwProperty.get(\"serial\");\n      if(initUnit != null){\n        next(() => {\n          let dropdown = document.getElementById(`pressureUnitDropdown${vwProperty.get(\"port\")}`);\n          if (dropdown) {\n            dropdown.value = initUnit;\n          }\n        });\n        this.buildAndUpdateGUnit(initUnit);\n        this.buildAndUpdateKUnit(initUnit);\n      }\n      \n\n  },\n  getPressureUnit: computed('model.modelName', function() {\n      console.log(this.get(\"port\"));\n      return this.pressureUnit;\n  }),\n  getGPressureUnit: computed('model.modelName', function() {\n      return this.pressureUnit;\n  }),\n  buildAndUpdateGUnit:function(newUnit){\n    let newU = newUnit + \"/\" + this.get(\"gVariableUnit2\")\n    this.set(\"gPressureUnit\" , newU);\n  },\n  buildAndUpdateKUnit:function(newUnit){\n    let newU = newUnit + \"/\" + this.get(\"kVariableUnit2\")\n    this.set(\"kPressureUnit\" , newU);\n  },\n  didInsertElement() {\n    this._super(...arguments);\n    // Object.keys(this).forEach(key => {\n    //     // console.log(key, this.get(key));\n    // });\n  },\n  actions: {\n    handlePressureUnitChange(event){\n        let newValue = event.target.value;\n        this.buildAndUpdateGUnit(newValue);\n        this.buildAndUpdateKUnit(newValue);\n        let correspondingVWProperty = this.get(\"port\");\n        if(correspondingVWProperty != null){\n          correspondingVWProperty.set(\"serial\", newValue);\n          correspondingVWProperty.save()\n          .then(() => {\n            console.log(\"vw property successfully updated\")\n          });\n        }\n        console.log(\"Select pressure unit is:\" + newValue)\n    }\n  },\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { copy } from 'ember-copy';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n    store: service(),\n    chartId: 'spatial-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    progressAnimationDuration: 100, //set 50, was 700\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 50, //set 25, was 500\n\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: this.get('blastEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -15) + 15 : 15\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    blastEventsArray: computed('blastEvents', function() {\n        if ( this.get('blastEvents') ) {\n            return this.get('blastEvents').map(function(event) {\n                return {\n                    type: 'Blast',\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes')\n                };\n            }).sortBy('timestamp');\n        }\n        return false;\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    zoomDataPoints: map('zoomChartData', function(item){\n        try {\n            var chartData = { values: item.get(\"values\") };\n\n            var modelName = this.get('chartDataModelName');\n\n            if (modelName === 'strain-values') { \n                chartData.values.unshift(chartData.values[0]);\n            }\n                        \n            return chartData;\n        } catch (error) {\n            return [];\n        }\n    }),\n\n    //TODO: Try/Catch is a temporary fix, if there isn't enough data, or its not valid, Frequency dropdown will act strangely\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n        try {\n            return { values: item.get(\"values\") };            \n        } catch (error) {\n            return [];\n        }\n    }),\n\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n\n    anchorDistances: computed('instrument', 'zoomChartData', function() {\n        let dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            anchors = this.get('instrument').get('anchors')\n        ;\n        let anchorDistances = (anchors.content ?? anchors).map(function(anchor){\n            return anchor.get('distance');\n        });\n\n        var modelName = this.get('chartDataModelName');\n        if (anchorDistances.length > dataValuesCount && modelName === 'strain-values') {\n            anchorDistances.splice(0, 1);\n        }\n        return anchorDistances;\n    }),\n\n    // calculate mid distances between anchors for strain values\n    anchorMidDistances: computed('anchorDistances', function() {\n        let anchorDistances = copy(this.get('anchorDistances')),\n            dataValuesCount = this.get('zoomChartData')?.get?.('firstObject')?.values?.length ?? 0,\n            midDistances = []\n        ;\n\n        var type = this.get('instrument').get('instrumentType').get('title');\n\n        anchorDistances.unshift(0);\n\n        for (let i = 0; i <= anchorDistances.length - 2; i++) {\n            let mid = (anchorDistances[i] + anchorDistances[i + 1]) / 2;\n            midDistances.push( +mid.toFixed(2) );\n        }\n\n        return midDistances;\n    }),\n\n    anchorColors: d3.scale.category10().range(),\n\n    anchorDistancesChartReferencePoints: computed('chartDataModelName', 'instrument', 'anchorDistances', 'anchorMidDistances', function() {\n        let anchorDistances = this.get('anchorDistances');\n        var modelName = this.get('chartDataModelName');\n        var anchorMidDistances = this.get('anchorMidDistances');\n\n        //console.log(this.get('instrument').get('instrumentTypeID'));\n\n        if(modelName === 'strain-values' || modelName === 'strain-rate-values') {\n            return anchorMidDistances.map(function(anchorDistance){\n                return {\n                    key: anchorDistance,\n                    type: 'referencePoints',\n                    values: [\n                        anchorDistance\n                    ]\n                };\n            });\n                \n        }\n\n        return anchorDistances.map(function(anchorDistance){\n            return {\n                key: anchorDistance,\n                type: 'referencePoints',\n                values: [\n                    anchorDistance\n                ]\n            };\n        });\n    }),\n\n    inlineHoverValuesSideOffset: computed('chartDataModelName', function() {\n        var modelName = this.get('chartDataModelName');\n\n        if (modelName === 'strain-values') {\n            return 28;\n        }\n        return 0;\n    }),\n\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n        const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTimePoints = this.get('zoomTimePoints'),\n            anchorDistances = this.get('anchorDistances'),\n            anchorDistancesChartReferencePoints = this.get('anchorDistancesChartReferencePoints')\n        ;\n        let zoomChartLinesData = [];\n\n        var modelName = this.get('chartDataModelName');\n\n        zoomChartLinesData = zoomDataPoints.map(function(chartLine, chartLineIndex){\n            return {\n                key: chartLineIndex,\n                // mean: 3,\n                type: 'lines',\n                timestamp: zoomTimePoints[chartLineIndex],\n                values: chartLine.values.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        anchorDistances[dataPointIndex],\n                        dataPoint\n                    ];\n                })\n            };\n        });\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        if (anchorDistancesChartReferencePoints) {\n            zoomChartLinesData = zoomChartLinesData.concat(anchorDistancesChartReferencePoints);\n        }\n\n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        var modelName = this.get('chartDataModelName');\n        var type = this.get('instrument').get('instrumentType').get('title');        \n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        dataPoint.values[chartLineIndex]\n                    ];\n                })\n            };\n        }).sortBy('timestamp');\n    }),\n\n    numLines: computed('zoomTimePoints', function() {\n        return this.get('zoomTimePoints').length;\n    }),\n\n    lineDrawDelay: computed('numLines', function() {\n        return (13000 / (this.get('numLines') + 1)) ^ (1 / 20);\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').query('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n    didInsertElement: function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            inlineHoverValuesSideOffset = _this.get('inlineHoverValuesSideOffset'),\n            progressAnimationDuration = _this.get('progressAnimationDuration'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = this.get('blastEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-spatial-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = [yAxisLegend]\n        ;\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all(apiCallsPromises).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n\n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let axisName = '';\n                let units = chartData.get('units');\n                switch(yAxisLegend.get('title')) {\n                    case 'displacement':\n                        axisName = chartData.get('temporalDisplacementName');\n                        break;\n                    case 'velocity':\n                        axisName = chartData.get('temporalVelocityName');\n                        units += \"/day\";\n                        break;\n                    case 'acceleration':\n                        axisName = chartData.get('temporalAccelerationName');\n                        units += \"/day²\";\n                        break;\n                    case 'strain':\n                        axisName = chartData.get('temporalStrainName');\n                        units = \"%\";\n                        break;\n                    case 'strain_rate':\n                        axisName = chartData.get('temporalStrainRateName');\n                        units = \"%/day\";\n                        break;\n                    default:\n                        axisName = \"Unknown\";\n                }\n                \n                title = axisName + \" (\" + units + \")\";\n            }\n\n            let zoomChart = nv.models.lineChartProgressAnimationAPI()\n                .margin({top: 55, right: 10, bottom: 85, left: 60})\n                .useInteractiveGuideline(false)\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .distXAxisScale(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .showLegend(true)\n                .progressAnimationDuration(progressAnimationDuration)\n                .showXAxis(true)\n                .noData('No usable data')\n                ;\n\n\n            let length = 0;\n            try {\n                length = _this.instrument.get('instrumentLength');\n                let type = _this.instrument.get('instrumentType');\n                if (type === 'dRebar') {\n                    length = length * 1000;\n                }\n                \n            } catch (ex) {\n\n            }\n            \n            if(length !== null && length === 0) {\n                length = 0;\n            }\n\n            zoomChart.forceX([0, length]);\n/*             if (yAxisLegend.get('title') != 'bending_strain' && yAxisLegend.get('title') != 'axial_strain') {\n                \n            }\n */\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .tickFormat(d3.format(\".2f\"))\n                    // .tickFormat(function(d) {\n                    //     let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                    //     return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    // })\n                    ;\n                zoomChart.yAxis\n                    .axisLabel(title)\n                    .tickFormat(d3.format(\".2f\"));\n\n                zoomChart.distXAxis\n                    .tickPadding(40)\n                    .showMaxMin(false)\n                    // .ticks(5)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(45)\n                    .isDistXTooltip(isDistXTooltip)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2);\n\n                //zoomChart.legend.inlineHoverValuesSideOffset(inlineHoverValuesSideOffset);\n\n                zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log('test');\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n\n                    if (!seismicEventsArray.length || !blastEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (!activeTooltipContent) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                return zoomChart;\n            });\n\n            // declare fullRangeChart because later in zoom chart we need axis from fullRangeChart for events axis on zoomChart\n            let fullRangeChart = nv.models.focus(nv.models.line())\n               .margin({top: 10, right: 10, bottom: 30, left: 60})\n                .x(function(d) { return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .syncBrushing(false)\n                .independentBrushing(true)\n                .showXAxis(true)\n                .showYAxis(false)\n                ;\n\n\n            nv.addGraph(function() {\n\n                fullRangeChart.xAxis\n                    .showMaxMin(false)\n                    .tickFormat(function(d) {\n                        if (fullRangeChartLinesData.length > 0) {\n                            let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } else {\n                            return [0, 0];\n                        }\n                    });\n\n                fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n                fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n                fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                 });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(fullRangeChart.update);\n\n                // set zoom based on query params if set\n                let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n                let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n                if (startTimestamp && endTimestamp) {\n                    fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n                }\n\n                return fullRangeChart;\n            });\n\n        });\n\n    }\n\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({\n\n    store: service(),\n    modelName: null,\n    \n    init() {\n        this._super(...arguments);\n        this.loadModelName(); // Call the action during initialization\n        this.updateCalibColLabel(this.get(\"port\"));\n        this.updateLinColLabel(this.get(\"port\"));\n    },\n    loadModelName: function() {\n        return;\n        // Get the instrument's first vwproperty id\n        // let vwPropertyId = await this.get('instrument.vwproperty.firstObject.id');\n    \n        // Use Ember's store to find the vwproperty by its ID, then access its vwmodel's modelName\n        // this.store.findRecord('vwproperty', vwPropertyId).then((vwproperty) => {\n        //   this.set('modelName', vwproperty.get('vwmodel.modelName'));\n        // });\n\n    },\n    \n    filterEventsByAttributes(events, instrumentAttributes, eventAttributes) {\n        return events.filter(event => {\n            \n            for (let i = 0; i < instrumentAttributes.length; i++) {\n                let instrumentAttr = instrumentAttributes[i];\n                let eventAttr = eventAttributes[i];\n\n                if (instrumentAttr) {\n                    let eventAttrValue = event.get(eventAttr);\n                    if (eventAttrValue && eventAttrValue.get(\"id\") !== instrumentAttr.get(\"id\")) {\n                        return false; // If the specific event attribute does not match the instrument's\n                    }\n                }\n            }\n            return true; // If all checks pass\n        });\n    },\n    \n    calibColLabel: \"-\",\n    linColLabel: \"_\",\n    chartId: 'temporal-chart',\n    startTimestamp: null,\n    endTimestamp: null,\n    isDistXTooltip: true,\n    distXRiseUpAnimationDuration: 500,\n    \n    RST_MODEL_NAMES:{\n        vw2100: \"VW2100-7.5-HD\"\n    },\n    seismicEventsChartDistXData: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return [{\n                key: 'Seismic',\n                type: 'distX',\n                color: '#429CBA',\n                values: this.get('seismicEvents').map(function(event) {\n                    return [\n                        moment( event.get('timestamp') ).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n\n    \n    // Usage within your original computed property function:\n    blastEventsChartDistXData: computed('blastEvents', function() {\n        // console.log(\"blasting::::::::::::::::::::::::::::\");\n        let instrument = this.get(\"instrument\");\n        let blastEvents = this.get('blastEvents');\n\n        // Filtering\n        let instrumentAttributes = [instrument.get('level'), instrument.get('project')];\n        let eventAttributes = ['level', 'project']; \n        blastEvents = this.filterEventsByAttributes(blastEvents, instrumentAttributes, eventAttributes);\n        if(this.blastEvents){\n            return [{\n                key: 'Blast',\n                type: 'distX',\n                color: '#D14240',\n                values: blastEvents.map(function(event) {\n                    return [\n                        moment(event.get('timestamp')).valueOf(),\n                        event.get('size') ? (event.get('size') * -20) + 20 : 20\n                    ];\n                })\n            }];\n        }\n        return false;\n    }),\n    \n    seismicEventsArray: computed('seismicEvents', function() {\n        if ( this.get('seismicEvents') ) {\n            return this.get('seismicEvents').map(function(event) {\n                return {\n                    type: 'Seismic',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    // timestamp: moment( event.get('timestamp') ).valueOf(),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    momentMagnitude: event.get('momentMagnitude'),\n                    location: event.get('location')\n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n        }\n        return false;\n    }),\n\n    async getLevelId(instrument) {\n        try {\n\n            let instrumentLevelId = await instrument.get('level').get('content').id;\n            if (instrumentLevelId) {\n                return instrumentLevelId; \n            }\n            return null;\n        } catch (error) {\n            return null;\n        }\n    },\n    \n    async getProjectId(instrument) {\n        try {\n            let instrumentProject = await instrument.get('project').get('content').id;\n            if (instrumentProject) {\n                return instrumentProject;\n            }\n            return null;\n        } catch (error) {\n            return null;\n        }\n    },    \n    async fetchValueFromStore(id) {\n        if (!id) {\n            return \"Not Set\";\n        }\n        try {\n            let record = await this.store.findRecord('lookup', id);\n            return record.get('value');\n        } catch (error) {\n            console.error(`Error fetching record with id ${id}: returning Not Set`);\n            return \"Not Set\";\n        }\n    },\n    \n    blastEventsArray: computed('blastEvents', async function() {\n        if ( this.get('blastEvents') ) {\n                        \n            let instrument = this.get('instrument');\n            let instrumentLevelId = await this.getLevelId(instrument);\n            let instrumentProjectId = await this.getProjectId(instrument);\n\n            let levelValue = await this.fetchValueFromStore(instrumentLevelId);\n            let projectValue = await this.fetchValueFromStore(instrumentProjectId);\n\n            let data_set = this.get('blastEvents').map(function(event) {\n                return {\n                    type: 'Blast',\n                    time: event.get('timestamp'),\n                    timestamp: moment( event.get('timestamp') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n                    eventSize: event.get('size') ? (event.get('size') * -15) + 15 : 15,\n                    tonnes: event.get('tonnes'),\n                    location: event.get('location'),\n                    project: projectValue,\n                    level: levelValue,\n                    \n                };\n            }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n            // console.log(JSON.stringify(data_set));\n            return data_set;\n        }\n        return false;\n    }),\n    // vibeEventsArray: computed('vibeEvents', function() {\n    //     var events = this.get('vibeEvents');\n    //     //console.log(events);\n    //     if ( events ) {\n    //         return events.map(function(event) {\n    //             return {\n    //                 type: 'BluVibe',\n    //                 time: event.get('id'),\n    //                 timestamp: moment( event.get('id') ).format(\"DD MMM, YYYY HH:mm:ss\"),\n    //                 ppa: event.get('ppa'),\n    //                 ppv: event.get('ppv'),\n    //                 freq: event.get('frequency')\n    //             };\n    //         }).sort((a, b) => a.time < b.time ? -1 : a.time > b.time ? 1 : 0);\n    //     }\n    //     return false;\n    // }),\n\n    // zoomTempPoints: computed('zoomTempData', function(){\n    //     let \n\n    //     var rawValues = item.get(\"values\");\n    //     var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n    //     console.log(\"ChartData: \" + chartData);\n    //     return chartData;\n    // }),\n    zoomTempPoints: computed('zoomTempData', function() {\n        // console.log(\"CURRENT_PORT::::::::::::::::::: \" + this.currentPort);\n        let chartDataResult = null;\n\n        let zoomTempData = this.get('zoomTempData');\n        chartDataResult = zoomTempData.map(function(item){\n            if (item.toJSON) {\n                let chartData = { values: item.get(\"values\") };\n                // console.log(\"ChartData: \" + chartData);\n                return chartData;\n            }\n        });\n\n        // if(this.currentPort === 1){\n        //     let zoomTempData = this.get('zoomTempData');\n        //     chartDataResult = zoomTempData.map(function(item){\n        //         if (item.toJSON) {\n        //             let chartData = { values: item.get(\"values\") };\n        //             console.log(\"ChartData: \" + chartData);\n        //             return chartData;\n        //         }\n        //     });\n        // } else {\n        //     let zoomTempData = this.get('zoomChartData');\n            \n        //     chartDataResult = zoomTempData.map((item) => {\n        //         console.log(\"CURRENT_PORT::::::::::::::::::: \" + this.currentPort);\n        //         if (item.toJSON) {\n        //             let chartData = { values: item.get(\"values\") };\n        //             // console.log(\"ChartData: \" + chartData);\n        //             return chartData;\n        //         }\n        //     });\n        // }\n        return chartDataResult;\n    }),\n    currentPort: computed('instrument', function() {\n        let port = this.attrs.getQueryParams('port');\n        return port;\n    }),\n    zoomDataPoints: computed('zoomChartData', function() {\n        let zoomData = this.get('zoomChartData');\n        let chartDataResult = null;\n        var modelName = this.get('chartDataModelName');\n            \n        chartDataResult = zoomData.map(function(item){\n            \n            var rawValues = item.get(\"values\");\n            var chartData = { values: Array.isArray(rawValues) ? rawValues.slice() : [] };\n\n            if (modelName === 'strain-values' || modelName === 'strain-rate-values') { \n                chartData.values.push(0);\n            }\n            // console.log(chartData);\n            return chartData;\n        });\n        return chartDataResult;\n    }),\n    fullRangeDataPoints: map('fullRangeChartData', function(item){\n\n        return { values: item.get(\"values\") };\n    }), \n/*     fullRangeTempDataPoints: map('fullRangeTempData', function(item){\n\n        return { values: item.get(\"values\") };\n    }),\n */\n    zoomTimePoints: map('zoomChartData', function(item){\n        return item.get('id');\n    }),\n    fullRangeTimePoints: map('fullRangeChartData', function(item){\n        return item.get('id');\n    }),\n    anchorDistances: computed('instrument', 'fullRangeChartData', function() {\n        return ['F'];\n        // let instType = this.instrument.get('instrumentType').get('title');\n        // let chartData = this.get('fullRangeChartData');\n        // let dataValuesCount;\n        // try {\n        //     dataValuesCount = chartData?.get?.('firstObject')?.values?.length ?? 0;\n        // } catch (error) {\n        //     dataValuesCount = 0;\n        // }\n        // let anchors = this.get('instrument').get('anchors');\n        \n        // let anchorDistances = anchors.map(function(anchor){\n        //     return anchor.get('distance');\n        // });\n\n        // //anchorDistances.push('T'); //TODO: add temperature\n\n        // //IF chart is Strain-Values chart\n        // var modelName = this.get('chartDataModelName');\n\n        // return anchorDistances;\n    }),\n    //zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', 'vibeEventsChartDistXData', function() {\n    zoomChartLinesData: computed('zoomDataPoints', 'zoomTimePoints', 'zoomTempPoints', 'seismicEventsChartDistXData', 'blastEventsChartDistXData', function() {\n            const _this = this,\n            seismicEventsChartDistXData = this.get('seismicEventsChartDistXData'),\n            blastEventsChartDistXData = this.get('blastEventsChartDistXData'),\n            //vibeEventsChartDistXData = this.get('vibeEventsChartDistXData'),\n            zoomDataPoints = this.get('zoomDataPoints'),\n            zoomTempPoints = this.get('zoomTempPoints'),\n            zoomTimePoints = this.get('zoomTimePoints')\n        ;\n\n\n        // console.log(zoomTempPoints);\n        //console.log(vibeEventsChartDistXData);\n\n        let anchorDistances = this.get('anchorDistances'),\n            zoomChartLinesData = []\n        ;\n\n        // an exception for temperature sensor in dExto\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            zoomChartLinesData = anchorDistances.map(function(chartLineName, chartLineIndex){\n                return {\n                    key: chartLineName,\n                    // mean: 3,\n                    type: 'lines',\n                    yAxis: 1,\n                    values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                        return [\n                            moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                            (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                        ];\n                    })\n                };\n            });\n        } else {\n            zoomChartLinesData = [{\n                key: 'T. ℃',\n                // mean: 3,\n                type: 'lines',\n                yAxis: 1,\n                values: zoomDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null\n                    ];\n                })\n            }];\n        }\n\n        //console.log(zoomDataPoints.length);\n        //console.log(zoomTempPoints.length);\n\n        if (_this.get('chartDataModelName') !== 'temperature-values') {\n            if (_this.get('chartDataModelName') !== 'displacement-values'){\n                while(zoomTempPoints.length > zoomDataPoints.length) {\n                    zoomTempPoints.pop();\n                    zoomTempPoints.shift();\n                }\n            }\n            var temp = {key: 'T',\n                type: 'lines',\n                yAxis: 2,\n                values: zoomTempPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( zoomTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[0] : null,\n                    ];\n                })\n            };\n            //console.log(temp);\n            zoomChartLinesData.push(temp); //#TODO: Add Temp Points\n            //console.log(zoomChartLinesData);\n        }\n\n        // mix data with events\n        if (seismicEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(seismicEventsChartDistXData);\n        }\n        if (blastEventsChartDistXData) {\n            zoomChartLinesData = zoomChartLinesData.concat(blastEventsChartDistXData);\n        }\n        // if (vibeEventsChartDistXData) {\n        //     zoomChartLinesData = zoomChartLinesData.concat(vibeEventsChartDistXData);\n        // }\n        \n        return zoomChartLinesData;\n    }),\n\n    fullRangeChartLinesData: computed('fullRangeDataPoints', 'fullRangeTimePoints', function() {\n        const _this = this,\n            fullRangeDataPoints = this.get('fullRangeDataPoints'),\n            fullRangeTimePoints = this.get('fullRangeTimePoints')\n        ;\n\n        let anchorDistances = this.get('anchorDistances');\n\n        return anchorDistances.map(function(chartLineName, chartLineIndex){\n            return {\n                key: chartLineName,\n                // mean: 3,\n                type: 'lines',\n                values: fullRangeDataPoints.map(function(dataPoint, dataPointIndex) {\n                    return [\n                        moment( fullRangeTimePoints[dataPointIndex] ).valueOf(),\n                        (dataPoint && dataPoint.values) ? dataPoint.values[chartLineIndex] : null\n                    ];\n                })\n            };\n        });\n    }),\n\n    chartDataModelName: computed('zoomChartData', function() {\n        return this.get('zoomChartData').query.model_name;\n    }),\n    yAxisLegend: computed('chartDataModelName', function() {\n        let chartDataModelName = this.get('chartDataModelName');\n        let promise = this.get('store').queryRecord('measurement', {title: chartDataModelName.substr(0, chartDataModelName.lastIndexOf('-')).replace('-','_') });\n        return promise;\n    }),\n\n\n    modelNames: computed(function() {\n        let vwmodelName= \"\";\n        this.store.query('vwproperty',{}).then((vwproperties) => {\n            if(vwproperties && vwproperties.length > 0){\n                vwproperties.forEach(vwproperty=>{\n                    try {\n                        if(vwproperty.get('instrument')){\n                            vwmodelName = vwproperty.get(\"vwmodel\").get(\"modelName\");\n                            console.log('vwmodel::::::' + vwmodelName);\n                        }\n                    } catch {\n                        console.log(\"instrument dont exist\")\n                    }\n                })\n            }\n          });\n        return vwmodelName;\n    }),\n    \n    updateCalibColLabel: function(currentPort){\n        let vwPropertyArr = this.get(\"instrument.vwproperty\");\n        this.set(\"calibColLabel\", currentPort)\n        if(currentPort == null){\n            this.set(\"calibColLabel\", \"Presssure (-)\");\n        }\n        else{\n            vwPropertyArr.forEach(vwProp =>{\n                if (currentPort == vwProp.get(\"port\")){\n                    this.set(\"calibColLabel\", `Pressure (${vwProp.get(\"serial\")})`);\n                }\n            })\n        }\n\n    },\n    \n    updateLinColLabel: async function(currentPort){;\n        this.set(\"linColLabel\", currentPort)\n        if(currentPort == null){\n            this.set(\"linColLabel\", \"LU/digits\");\n        }\n        else{\n\n            for(let property of this.get(\"instrument.vwproperty\").toArray()){\n                let model = await property.get(\"vwmodel\");\n                if (currentPort == property.get(\"port\")){\n                    let modelName = model ? model.modelName : null;\n                    if(modelName == this.RST_MODEL_NAMES[\"vw2100\"]){\n                        this.set(\"linColLabel\", \"B units\");\n                    }\n                    else{\n                        this.set(\"linColLabel\", \"LU/digits\");\n                    }\n                }\n\n            }\n        }\n\n    },\n    didInsertElement: async function() {\n        const _this = this,\n            zoomChartLinesData = _this.get('zoomChartLinesData'),\n            fullRangeChartLinesData = _this.get('fullRangeChartLinesData'),\n            isDistXTooltip = _this.get('isDistXTooltip'),\n            distXRiseUpAnimationDuration = _this.get('distXRiseUpAnimationDuration')\n        ;\n\n        let seismicEventsArray = this.get('seismicEventsArray'),\n            blastEventsArray = await this.get('blastEventsArray'),\n            // vibeEventsArray = this.get('vibeEventsArray'),\n            zoomChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-svg'),\n            fullRangeChartSVG = d3.select('#' + _this.get('chartId') + ' svg.nvd3-temporal-line-chart-focus-svg'),\n            yAxisLegend = this.get('yAxisLegend'),\n            apiCallsPromises = yAxisLegend\n        ;\n\n        //console.log(vibeEventsArray);\n\n        // draw zoomChart only after yAxis label is fetched\n        Promise.all([apiCallsPromises]).then(function(results){\n            //code _this must be executed only after all of the promises in apiCallsPromises is resolved\n            //console.log(\"rendering graph...\");\n            let title = \"\";\n            if (yAxisLegend) {\n                yAxisLegend = results[0];\n                \n                //get pretty chart name if chart has multiple parts to it\n                let type = _this.instrument.get('instrumentTypeID').toString();\n                let chartData = _this.get('chartData');\n                chartData.forEach(function(item) {\n                    if(item.id === type) {\n                        chartData = item;\n                        return;\n                    }\n                });\n\n                let instType = _this.instrument.get('instrumentType').get('title');\n                let axisName = '';\n                let linAxisName = '';\n                let units = chartData.get('units');\n                title = yAxisLegend.get('title');\n                axisName = _this.get(\"calibColLabel\");\n                linAxisName = _this.get(\"linColLabel\");\n                if (_this.get('linear') == true){\n                    title = [linAxisName];\n                } else if (_this.get('calib') == true){\n                    // console.log(\"axisname::::\" + axisName);\n                    title = [axisName];\n                } else if (_this.get('depth') == true){\n                    title = ['mm-Water'];\n                } else {\n                    title = ['Frequency (Hz)'];\n                }\n                    \n            }\n\n            function usesPoints(chartName) {\n                //console.log(chartName);\n                switch(chartName) {\n                    case 'event-ppv':\n                    case 'event-ppa':\n                        return true;\n                }\n                return false;\n            }\n            //console.log(zoomChartLinesData);\n            let zoomChart = nv.models.lineChartWithFocusAPI(usesPoints(_this.get('chartDataModelName')))\n                .margin({top: 55, right: 90, bottom: 60, left: 80})\n                .useInteractiveGuideline(true)\n                .x(function(d) { \n                    return d[0]; })\n                .y(function(d) { return d[1]; })\n                .color(d3.scale.category10().range())\n                .duration(300)\n                .showDistX(true)\n                .noData('No usable data')\n            ;\n\n            zoomChart.legend.margin({bottom: 500});\n            \n            //console.log(title);\n\n            // Wrapping in nv.addGraph allows for '0 timeout render', stores rendered charts in nv.graphs,\n            // and may do more in the future... it's NOT required\n            nv.addGraph(function() {\n\n                zoomChart.xAxis\n                    .ticks(5)\n                    .tickPadding(40)\n                    .showMaxMin(true)\n                    .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                        let zoomChartXDomainLength = zoomChartLinesData[0].values.length;\n                        return nv.utils.getDateAutoscaleFormat (zoomChartLinesData[0].values[0][0], zoomChartLinesData[0].values[zoomChartXDomainLength-1][0])(new Date(d));\n                    });\n                \n                zoomChart.y1Axis\n                    .axisLabel(title)\n                    .axisLabelDistance(10);\n\n                zoomChart.y2Axis\n                    .axisLabel('Temperature (°C)')\n                    .axisLabelDistance(10);\n                    \n                zoomChart.distX\n                    .margin({top: 3, right: 0, bottom: 0, left: 0})\n                    .size(30)\n                    .distXTooltipBottomOffset(5)\n                    .isDistXTooltip(isDistXTooltip)\n                    .isFixedDistXTooltip(false)\n                    .distXRiseUpAnimationDuration(distXRiseUpAnimationDuration)\n                    .distXRiseUpAnimationDelay(false)\n                    .lineWidth(2)\n                ;\n\n                if (_this.instrument.get('instrumentType').get('title') === 'Tilt') {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".3f\"));\n                    zoomChart.legend.numDecimals(3);\n                } else {\n                    zoomChart.y1Axis.tickFormat(d3.format(\".2f\"));\n                }\n                zoomChart.y2Axis.tickFormat(d3.format(\".1f\"));\n\n                zoomChartLinesData.some(function(d) { return d && d.type === 'lines' && d.yAxis === 1 && d.values && d.values.length >= 2; }) && zoomChartSVG.datum(zoomChartLinesData.filter(Boolean)).call(zoomChart);\n\n                zoomChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                    _this.set('startTimestamp', brushExtent[0]);\n                    _this.set('endTimestamp', brushExtent[1]);\n                    let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                    let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                    zoomChart.tooltip.hidden(true);\n\n                    // update query params via updateProperties action it the controller\n                    _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n                 });\n\n                zoomChart.dispatch.on('brush', function (brushExtent) {\n                    if (brushExtent.extent[0] > 0) {\n                        // chart.focus.dispatch.onBrushCall(brushExtent.extent);\n                        fullRangeChart.dispatch.onBrushCall(brushExtent.extent);\n                    }\n                });\n\n                function selectControls() {\n                    zoomChart.chartData.forEach(function(series) { series.disabled = false; });\n                }\n\n                function updateDistXTooltip(tooltipContent) {\n\n                    if (typeof tooltipContent === 'undefined') {\n                        return false;\n                    }\n\n                    let tooltipText = '',\n                        tooltipClass = '',\n                        eventSize = null\n                    ;\n\n                    if (typeof(tooltipContent) === 'object') {\n                        if (tooltipContent.type === 'Blast') {\n                            tooltipClass = 'blast';\n                            eventSize = '<span class=\"event-type\">Project: ' + tooltipContent.project + '<br />Level: ' + tooltipContent.level + '<br />Location: ' + tooltipContent.location + '<br />Tonnes: ' + tooltipContent.tonnes + '</span>';\n                        } else if (tooltipContent.type === 'Seismic') {\n                            tooltipClass = 'seismic';\n                            eventSize = '<span class=\"event-type\">Location: ' + tooltipContent.location + '<br />Moment-magnitude: ' + tooltipContent.momentMagnitude + '</span>';\n                        } else if (tooltipContent.type === 'BluVibe') {\n                            tooltipClass = 'bluvibe';\n                            eventSize = '<span class=\"event-type\">PPV - mm/s: ' + tooltipContent.ppv + '<br />PPA - mm/s&#178;: ' + tooltipContent.ppa + '<br />Frequency - Hz: ' + tooltipContent.freq + '</span>';\n                        } else if (tooltipContent.type === 'Other') {\n                            tooltipClass = 'other';\n                        }\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>' +\n                                      '<span class=\"event-type\">Type: ' + tooltipContent.type + '</span>' +\n                                      eventSize\n                        ;\n                    } else {\n                        tooltipText = '<span class=\"time\">' + tooltipContent.timestamp + '</span>';\n                    }\n\n                    return {\n                        tooltipClass: tooltipClass,\n                        tooltipText: tooltipText\n                    };\n                }\n\n                zoomChart.distX.dispatch.on('distXMouseMove', function (distXMouseMove) {\n                    //console.log(blastEventsArray);\n                    //console.log(vibeEventsArray);\n                    //console.log(distXMouseMove);\n/* \n                    if ( vibeEventsArray.length && distXMouseMove.distX2 > -1 ) {\n                        //console.log('mouseMove');\n                        //console.log(vibeEventsArray);\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(vibeEventsArray[distXMouseMove.distX2]) );\n                    } */\n\n                    if ( seismicEventsArray.length && distXMouseMove.distX0 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(seismicEventsArray[distXMouseMove.distX0]) );\n                    }\n                    if ( blastEventsArray.length && distXMouseMove.distX1 > -1 ) {\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(blastEventsArray[distXMouseMove.distX1]) );\n                    }\n                    if (!seismicEventsArray.length || !blastEventsArray.length){//} || !vibeEventsArray.length) {\n                        let distXIndex = distXMouseMove.distX0;\n                        let data_set = 0;\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX1;\n                            data_set = 1;\n                        }\n                        if (distXIndex === -1) {\n                            distXIndex = distXMouseMove.distX2;\n                            data_set = 2;\n                        }\n\n                        let activeTooltipContent = seismicEventsArray[distXIndex];\n                        if (data_set===1) {\n                            activeTooltipContent = blastEventsArray[distXIndex];\n                        }\n                        if (data_set===2) {\n                            //activeTooltipContent = vibeEventsArray[distXIndex];\n                        }\n                        zoomChart.distX.dispatch.onDistXTooltipShowCall( updateDistXTooltip(activeTooltipContent) );\n                    }\n                });\n\n                //TODO: Figure out a good way to do this automatically\n                nv.utils.windowResize(zoomChart.update);\n\n                zoomChart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e)); });\n                zoomChart.state.dispatch.on('change', function(state){\n                    nv.log('state', JSON.stringify(state));\n                });\n\n                //console.log('nvd3 data: ', zoomChartLinesData);\n                if (_this.setData) { _this.setData(zoomChartLinesData); }\n                if (_this.setChart) { _this.setChart(zoomChart); }\n\n                return zoomChart;\n            });\n        });\n\n\n        function usesPoints(chartName) {\n            //console.log(chartName);\n            switch(chartName) {\n                case 'event-ppv':\n                case 'event-ppa':\n                    return true;\n            }\n            return false;\n        }\n\n        let graph_type = null;\n        if (usesPoints(_this.get('chartDataModelName'))) {\n            graph_type = nv.models.scatter();\n        } else {\n            graph_type = nv.models.line();\n        }\n        \n        let fullRangeChart = nv.models.focus(graph_type)\n            .margin({top: 10, right: 10, bottom: 30, left: 80})\n            .x(function(d) { return d[0]; })\n            .y(function(d) { return d[1]; })\n            .color(d3.scale.category10().range())\n            .syncBrushing(false)\n            .independentBrushing(true)\n            .showXAxis(true)\n            .showYAxis(false)\n        ;\n\n        nv.addGraph(function() {\n\n            fullRangeChart.xAxis\n                .showMaxMin(false)\n                .tickFormat(function(d) { if (!zoomChartLinesData[0] || !zoomChartLinesData[0].values.length) { return \"\"; }\n                    //console.log(\"beep\");\n                    if (fullRangeChartLinesData.length > 0) {\n                        let fullRangeChartXDomainLength = fullRangeChartLinesData[0].values.length;\n                        try {\n                            return nv.utils.getDateAutoscaleFormat (fullRangeChartLinesData[0].values[0][0], fullRangeChartLinesData[0].values[fullRangeChartXDomainLength-1][0])(new Date(d));\n                        } catch (ex) {\n                            return [0, 0];\n                        }\n                    } else {\n                        return [0, 0];\n                    }\n                });\n\n\n            fullRangeChart.yAxis.tickFormat(d3.format(\".2f\"));\n\n            fullRangeChartSVG.datum(fullRangeChartLinesData).call(fullRangeChart);\n\n\n            fullRangeChart.dispatch.on('onBrushEnd', function (brushExtent) {\n                _this.set('startTimestamp', brushExtent[0]);\n                _this.set('endTimestamp', brushExtent[1]);\n                let startTimestamp = moment(_this.get('startTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n                let endTimestamp = moment(_this.get('endTimestamp'), \"x\").format(\"YYYY-MM-DD HH:mm:ss.SSS\");\n\n                // update query params via updateProperties action it the controller\n                _this.attrs.updateProperties(['start_timestamp', 'end_timestamp'], [startTimestamp, endTimestamp]);\n             });\n\n            fullRangeChart.dispatch.on('brush', function (brushExtent) {\n                if (brushExtent.extent[0] > 0) {\n                    // zoomChart.dispatch.onBrushCall(brushExtent.extent);\n                }\n             });\n\n            //TODO: Figure out a good way to do this automatically\n            nv.utils.windowResize(fullRangeChart.update);\n\n            // set zoom based on query params if set\n            let startTimestamp = moment(_this.attrs.getQueryParams('start_timestamp')).valueOf();\n            let endTimestamp = moment(_this.attrs.getQueryParams('end_timestamp')).valueOf();\n            if (startTimestamp && endTimestamp) {\n                fullRangeChart.dispatch.onBrushCall([startTimestamp, endTimestamp]);\n            }\n\n            return fullRangeChart;\n        });\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport Component from '@glimmer/component';\n\nexport default class DropdownComponent extends Component {\n    @service store;\n\n    @tracked instrument;\n    // port = 1;\n    constructor() {\n        super(...arguments);\n        this.loadInstrument();\n    }\n\n    get sortedProperties() {\n        if (!this.instrument?.vwproperty) return [];\n        return [...this.instrument.vwproperty].sort((a, b) => a.port - b.port);\n    }\n\n    // I need the instrument.vwProperty to get the ports.\n    async loadInstrument() {\n        if (!this.args.instrumentId) return;\n        this.instrument = await this.store.findRecord('instrument', this.args.instrumentId);\n    }\n}\n","import { computed, observer } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\n// Wire (vibrating-wire) raw-data — Temperature + one value column whose label/units depend on the\n// display mode (Raw = Freq.(Hz), Linear = LU/digits|B units|LU(Hz), Calibrated = Pressure, Depth).\n//\n// Add/Edit/Delete use the shared data-row-modal and are RAW-MODE ONLY. The route asks the BE for\n// computed values in linear/calib/depth mode (see app/routes/raw-data.js sending linear/calib/depth),\n// so displacementData holds derived numbers in those modes — editing them back as raw frequency would\n// corrupt the stored signal. We therefore only expose CRUD when no mode flag is set.\n//\n// BE write contract (mirrors the legacy inline editor + create-new form): displacement-value.values is\n// written as [0, ...freqValues] — a leading-0 placeholder the BE strips on read (read returns just the\n// freq values, which is why the table renders one column). Temperature is stored separately as [temp].\nexport default Component.extend({\n    store: service(),\n    router: service(),\n\n    calibColLabel: \"-\",\n    linColLabel: \"-\",\n    OUTLIER_MODEL_NAMES:{\n        vw2100: \"VW2100-7.5-HD\",\n        jms: \"JM-S\"\n    },\n\n    isModalOpen: false,\n    modalMode: 'add', // 'add' | 'edit'\n    modalEditingId: null,\n\n    init() {\n        this._super(...arguments);\n        this.updateCalibColLabel(this.get(\"port\"));\n        this.updateLinColLabel(this.get(\"port\"));\n    },\n\n    // CRUD is only safe in Raw Data mode (no linear/calib/depth flag). See file header.\n    isRawMode: computed('linear', 'calib', 'depth', function() {\n        return !this.get('linear') && !this.get('calib') && !this.get('depth');\n    }),\n\n    modelNames: computed(function() {\n        let vwmodelName= \"\";\n        this.store.query('vwproperty',{}).then((vwproperties) => {\n            if(vwproperties && vwproperties.length > 0){\n                vwproperties.forEach(vwproperty=>{\n                    try {\n                        if(vwproperty.get('instrument')){\n                            vwmodelName = vwproperty.get(\"vwmodel\").get(\"modelName\");\n                        }\n                    } catch {\n                        console.log(\"instrument dont exist\")\n                    }\n                })\n            }\n          });\n        return vwmodelName;\n    }),\n    columnLabelObserver: observer('port', function() {\n        this.updateCalibColLabel(this.get(\"port\"));\n        this.updateLinColLabel(this.get(\"port\"));\n    }),\n    updateCalibColLabel: function(currentPort){\n        if(currentPort == null){\n            this.set(\"calibColLabel\", \"Presssure (-)\");\n        }\n        else{\n            this.get(\"instrument.vwproperty\").forEach(vwProp =>{\n                if (currentPort == vwProp.get(\"port\")){\n                    this.set(\"calibColLabel\", `Pressure (${vwProp.get(\"serial\")})`);\n                }\n            })\n        }\n    },\n    updateLinColLabel: async function(currentPort){\n        if(currentPort == null){\n            this.set(\"linColLabel\", \"LU/digits\");\n        }\n        else{\n            for(let property of this.get(\"instrument.vwproperty\").toArray()){\n                let model = await property.get(\"vwmodel\");\n                if (currentPort == property.get(\"port\")){\n                    let modelName = model.modelName;\n                    if(modelName == this.OUTLIER_MODEL_NAMES[\"vw2100\"]){\n                        this.set(\"linColLabel\", \"B units\");\n                    }\n                    else if(modelName == this.OUTLIER_MODEL_NAMES[\"jms\"]) {\n                        this.set(\"linColLabel\", \"LU (Hz)\");\n                    }\n                    else{\n                        this.set(\"linColLabel\", \"LU/digits\");\n                    }\n                }\n            }\n        }\n    },\n\n    // The value column(s) shown to the right of Temperature, labelled per display mode.\n    anchorDistances: computed(\"port\",'instrument','linear','calib', 'depth', 'calibColLabel', 'linColLabel', function() {\n        let channelsNum = this.get(\"instrument\").channelsNum;\n        let anchorDistances = [];\n        let calibColLabel = this.get(\"calibColLabel\");\n        let linColLabel = this.get(\"linColLabel\");\n\n        if (channelsNum >= 2){\n            if (this.get('linear') == true){\n                anchorDistances.push(linColLabel);\n                return anchorDistances;\n            }\n            if (this.get('calib') == true){\n                anchorDistances.push(calibColLabel);\n                return anchorDistances;\n            }\n            if (this.get('depth') == true){\n                anchorDistances.push('Depth (mm-Water)');\n                return anchorDistances;\n            }\n            anchorDistances.push('Freq.(Hz)');\n            return anchorDistances;\n        }\n        else {\n            let linear = this.get('linear') == true;\n            let calib = this.get('calib') == true;\n            let depth = this.get('depth') == true;\n\n            for(let channel = 1 ; channel < channelsNum; channel++){\n                if(channel % 2 == 1){\n                    if (linear){ anchorDistances.push(linColLabel); continue; }\n                    if (calib){ anchorDistances.push(calibColLabel); continue; }\n                    if (depth){ anchorDistances.push('Depth (mm-Water)'); continue; }\n                    if(!linear && !calib && !depth){ anchorDistances.push('Freq.(Hz)'); }\n                } else {\n                    anchorDistances.push('Temperature (°C)');\n                }\n            }\n        }\n        return anchorDistances;\n    }),\n\n    // One display row per displacement reading, matched to its temperature reading by timestamp id.\n    tableRows: computed('displacementData.[]', 'temperatureData.[]', 'anchorDistances', 'globalDatetimeFormat.value', 'instrument.strokeLength', function() {\n        const dispData = this.get('displacementData') || [];\n        const tempData = this.get('temperatureData') || [];\n        const anchors = this.get('anchorDistances') || [];\n        const fmt = this.get('globalDatetimeFormat.value') || 'YYYY-MM-DD HH:mm:ss';\n        const strokeLength = this.get('instrument.strokeLength');\n        const meta = this.get('displacementData.meta');\n        const zeroTimestamp = meta ? meta['closest-zero-timestamp'] : null;\n\n        const tempById = {};\n        tempData.forEach(r => { tempById[r.id] = r; });\n\n        return dispData.map((dispRow, index) => {\n            const id = dispRow.id;\n            const dispValues = (dispRow.values || dispRow.get?.('values') || []);\n            const tempRow = tempById[id] || (tempData.objectAt ? tempData.objectAt(index) : tempData[index]);\n            const tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n            const tempValue = tempValues[0];\n\n            const cells = anchors.map((label, i) => {\n                const v = dispValues[i];\n                const hasValue = v != null && v !== '';\n                return {\n                    label,\n                    value: hasValue ? v : '',\n                    hasValue,\n                    aboveStroke: strokeLength != null && hasValue && Number(v) > Number(strokeLength),\n                };\n            });\n\n            return {\n                id,\n                index,\n                formattedDate: moment(id, 'YYYY-MM-DD HH:mm:ss').format(fmt),\n                tempValue: tempValue == null ? '' : Number(tempValue).toFixed(1),\n                cells,\n                isZeroTimestampClass: (zeroTimestamp && id === zeroTimestamp) ? 'initialization-date' : '',\n            };\n        });\n    }),\n\n    modalFields: computed('anchorDistances', 'modalMode', 'modalEditingId', 'displacementData.[]', 'temperatureData.[]', function() {\n        const anchors = this.get('anchorDistances') || [];\n        const mode = this.get('modalMode');\n        const editingId = this.get('modalEditingId');\n\n        let dispValues = [];\n        let tempValues = [];\n        if(mode === 'edit' && editingId){\n            const dispRow = (this.get('displacementData') || []).find(r => r.id === editingId);\n            const tempRow = (this.get('temperatureData') || []).find(r => r.id === editingId);\n            dispValues = dispRow ? (dispRow.values || dispRow.get?.('values') || []) : [];\n            tempValues = tempRow ? (tempRow.values || tempRow.get?.('values') || []) : [];\n        }\n\n        const dateField = {\n            key: '__date__',\n            label: 'Date',\n            type: 'datetime-local',\n            value: mode === 'edit' && editingId\n                ? moment(editingId, 'YYYY-MM-DD HH:mm:ss').format('YYYY-MM-DDTHH:mm:ss')\n                : moment().format('YYYY-MM-DDTHH:mm:ss'),\n        };\n\n        const tempField = {\n            key: '__temp__',\n            label: 'Temperature (°C)',\n            type: 'text',\n            value: mode === 'edit' ? (tempValues[0] == null ? '' : tempValues[0]) : '',\n        };\n\n        const freqFields = anchors.map((label, i) => ({\n            key: `f_${i}`,\n            label,\n            type: 'text',\n            value: mode === 'edit' ? (dispValues[i] == null ? '' : dispValues[i]) : '',\n        }));\n\n        return [dateField, tempField, ...freqFields];\n    }),\n\n    modalTitle: computed('modalMode', 'instrument.id', function() {\n        const verb = this.get('modalMode') === 'edit' ? 'Edit' : 'Add';\n        return `${verb} Data Row for ${this.get('instrument.id')}`;\n    }),\n\n    actions: {\n        openAdd(){\n            this.set('modalMode', 'add');\n            this.set('modalEditingId', null);\n            this.set('isModalOpen', true);\n        },\n        openEdit(rowId){\n            this.set('modalMode', 'edit');\n            this.set('modalEditingId', rowId);\n            this.set('isModalOpen', true);\n        },\n        closeModal(){\n            this.set('isModalOpen', false);\n        },\n        removeRow(rowId){\n            if(!window.confirm('Delete this row? This cannot be undone.')){ return; }\n            const instrumentId = this.get('instrument.id');\n            const dispData = this.get('displacementData');\n            const tempData = this.get('temperatureData');\n            const dispRow = dispData ? dispData.find(r => r.id === rowId) : null;\n            const tempRow = tempData ? tempData.find(r => r.id === rowId) : null;\n            const adapterOptions = { adapterOptions: instrumentId };\n            const promises = [];\n            if(dispRow && dispRow.deleteRecord){ dispRow.deleteRecord(); promises.push(dispRow.save(adapterOptions)); }\n            if(tempRow && tempRow.deleteRecord){ tempRow.deleteRecord(); promises.push(tempRow.save(adapterOptions)); }\n            Promise.all(promises)\n                .then(() => {\n                    const routeName = this.get('router.currentRouteName');\n                    const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                    if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n                })\n                .catch((reason) => {\n                    if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                        const setProp = this.get('setProp');\n                        if(setProp){ setProp('permissionError', true); }\n                    }\n                });\n        },\n        saveRow(snapshot){\n            const store = this.get('store');\n            const instrumentId = this.get('instrument.id');\n            const anchors = this.get('anchorDistances') || [];\n            const adapterOptions = { adapterOptions: instrumentId };\n\n            // BE's JSON renderer rejects NaN/Infinity; one bad row breaks the whole list endpoint.\n            const safeNum = (v) => {\n                const n = Number(v);\n                return Number.isFinite(n) ? n : 0;\n            };\n\n            const freqValues = anchors.map((label, i) => safeNum(snapshot[`f_${i}`]));\n            // Leading-0 placeholder: the BE strips it on read (read returns just the freq values).\n            const dispValues = [0, ...freqValues];\n            const tempValues = [safeNum(snapshot['__temp__'])];\n\n            const newId = moment(snapshot['__date__']).format('YYYY-MM-DD HH:mm:ss');\n            const isEdit = this.get('modalMode') === 'edit';\n            const originalId = this.get('modalEditingId');\n\n            const tempData = this.get('temperatureData') || [];\n            const dispData = this.get('displacementData') || [];\n            const findRow = (collection, id) => collection.find(r => r.id === id);\n\n            const refreshRoute = () => {\n                this.set('isModalOpen', false);\n                const routeName = this.get('router.currentRouteName');\n                const routeInstance = getOwner(this).lookup(`route:${routeName}`);\n                if(routeInstance && routeInstance.refresh){ routeInstance.refresh(); }\n            };\n            const handleErr = (reason) => {\n                if(reason && reason.errors && reason.errors[0] && reason.errors[0].status == 403){\n                    const setProp = this.get('setProp');\n                    if(setProp){ setProp('permissionError', true); }\n                }\n            };\n\n            // Editing the date moves the row: delete the old timestamp first.\n            if(isEdit && originalId !== newId){\n                const oldTemp = findRow(tempData, originalId);\n                const oldDisp = findRow(dispData, originalId);\n                if(oldTemp){ oldTemp.deleteRecord(); oldTemp.save(adapterOptions); }\n                if(oldDisp){ oldDisp.deleteRecord(); oldDisp.save(adapterOptions); }\n            }\n\n            // Mutate-and-save in place if a row already exists at the target timestamp.\n            const existingTemp = findRow(tempData, newId);\n            const existingDisp = findRow(dispData, newId);\n            if(existingTemp || existingDisp){\n                const promises = [];\n                if(existingTemp){ existingTemp.set('values', tempValues); promises.push(existingTemp.save(adapterOptions)); }\n                else { promises.push(store.createRecord('temperature-value', { id: newId, values: tempValues }).save(adapterOptions)); }\n                if(existingDisp){ existingDisp.set('values', dispValues); promises.push(existingDisp.save(adapterOptions)); }\n                else { promises.push(store.createRecord('displacement-value', { id: newId, values: dispValues }).save(adapterOptions)); }\n                Promise.all(promises).then(refreshRoute).catch(handleErr);\n                return;\n            }\n\n            store.createRecord('temperature-value', { id: newId, values: tempValues }).save(adapterOptions);\n            store.createRecord('displacement-value', { id: newId, values: dispValues }).save(adapterOptions)\n                .then(refreshRoute).catch(handleErr);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n  hzSquared:\"Hz²\",\n  hz:\"Hz\",\n  unitA:\"\",\n  unitB:\"\",\n  unitC:\"\",\n  store: service(),\n  router: service(),\n  init() {\n      this._super(...arguments);\n      let vwProperty = this.get(\"port\");\n\n      //WARNING. YES SERIAL PROPERTY IS MASKED AS THE UNIT FOR PRESSURE. IT IS NOT A TYPO\n      let initUnit = vwProperty.get(\"serial\");\n      if(initUnit != null){\n        next(() => {\n          let dropdown = document.getElementById(`pressureUnitDropdown${vwProperty.get(\"port\")}`);\n          if (dropdown) {\n            dropdown.value = initUnit;\n          }\n        });\n        this.buildUnitA(initUnit);\n        this.buildUnitB(initUnit);\n        this.buildUnitC(initUnit);\n      }\n      \n\n  },\n  getUnitA: computed('model.modelName', function() {\n      return this.pressureUnit;\n  }),\n  getUnitB: computed('model.modelName', function() {\n      return this.pressureUnit;\n  }),\n  getUnitC: computed('model.modelName', function() {\n      return this.pressureUnit;\n  }),\n  buildUnitA:function(newUnit){\n    this.set(\"unitA\" , newUnit + \"/\" + this.get(\"hzSquared\"));\n  },\n  buildUnitB:function(newUnit){\n    this.set(\"unitB\" , newUnit + \"/\" + this.get(\"hz\"));\n  },\n  buildUnitC:function(newUnit){\n    this.set(\"unitC\" , newUnit);\n  },\n  actions: {\n    handleUnitChange(event){\n        let newValue = event.target.value;\n        this.buildUnitA(newValue);\n        this.buildUnitB(newValue);\n        this.buildUnitC(newValue);\n        let correspondingVWProperty = this.get(\"port\");\n        if(correspondingVWProperty != null){\n          correspondingVWProperty.set(\"serial\", newValue);\n          correspondingVWProperty.save()\n          .then(() => {\n            console.log(\"vw property successfully updated\")\n          });\n        }\n        console.log(\"Select pressure unit is:\" + newValue)\n    }\n  },\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n  ctPressureTempUnit:\"\",\n  tempUnit:\"°C\",\n  store: service(),\n  router: service(),\n  init() {\n      this._super(...arguments);\n      let vwProperty = this.get(\"port\");\n\n      //WARNING. YES SERIAL PROPERTY IS MASKED AS THE UNIT FOR PRESSURE. IT IS NOT A TYPO\n      let initUnit = vwProperty.get(\"serial\");\n      if(initUnit != null){\n        next(() => {\n          let dropdown = document.getElementById(`pressureUnitDropdown${vwProperty.get(\"port\")}`);\n          if (dropdown) {\n            dropdown.value = initUnit;\n          }\n        });\n        this.buildAndUpdateCTUnit(initUnit);\n      }\n      \n\n  },\n  getPressureUnit: computed('model.modelName', function() {\n      console.log(this.get(\"port\"));\n      return this.pressureUnit;\n  }),\n  getGPressureUnit: computed('model.modelName', function() {\n      return this.pressureUnit;\n  }),\n  buildAndUpdateCTUnit:function(newUnit){\n    this.set(\"ctPressureTempUnit\" , newUnit + \"/\" + this.get(\"tempUnit\"));\n  },\n  actions: {\n    handleUnitChange(event){\n        let newValue = event.target.value;\n        this.buildAndUpdateCTUnit(newValue);\n        let correspondingVWProperty = this.get(\"port\");\n        if(correspondingVWProperty != null){\n          correspondingVWProperty.set(\"serial\", newValue);\n          correspondingVWProperty.save()\n          .then(() => {\n            console.log(\"vw property successfully updated\")\n          });\n        }\n        console.log(\"Select pressure unit is:\" + newValue)\n    }\n  },\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport Component from \"@ember/component\";\nimport EmberObject from '@ember/object';\n\nexport default Component.extend({\n  cfVariableUnit2:\"B\",\n  tkVariableUnit2:\"°C\",\n  cfPressureUnit:\"\",\n  tkPressureUnit:\"\",\n  store: service(),\n  router: service(),\n  init() {\n      this._super(...arguments);\n      let vwProperty = this.get(\"port\");\n\n      //WARNING. YES SERIAL PROPERTY IS MASKED AS THE UNIT FOR PRESSURE. IT IS NOT A TYPO\n      let initUnit = vwProperty.get(\"serial\");\n      if(initUnit != null){\n        next(() => {\n          let dropdown = document.getElementById(`pressureUnitDropdown${vwProperty.get(\"port\")}`);\n          if (dropdown) {\n            dropdown.value = initUnit;\n          }\n        });\n        this.buildAndUpdateCFUnit(initUnit);\n        this.buildAndUpdateTKUnit(initUnit);\n      }\n      \n\n  },\n  getPressureUnit: computed('model.modelName', function() {\n      console.log(this.get(\"port\"));\n      return this.pressureUnit;\n  }),\n  getGPressureUnit: computed('model.modelName', function() {\n      return this.pressureUnit;\n  }),\n  buildAndUpdateCFUnit:function(newUnit){\n    let newU = newUnit === \"-\" ? \"-\" : newUnit + \"/\" + this.get(\"cfVariableUnit2\")\n    this.set(\"cfPressureUnit\" , newU);\n  },\n  buildAndUpdateTKUnit:function(newUnit){\n    let newU = newUnit + \"/\" + this.get(\"tkVariableUnit2\")\n    this.set(\"tkPressureUnit\" , newU);\n  },\n  didInsertElement() {\n    this._super(...arguments);\n    // Object.keys(this).forEach(key => {\n    //     // console.log(key, this.get(key));\n    // });\n  },\n  actions: {\n    handlePressureUnitChange(event){\n        let newValue = event.target.value;\n        this.buildAndUpdateCFUnit(newValue);\n        this.buildAndUpdateTKUnit(newValue);\n        let correspondingVWProperty = this.get(\"port\");\n        if(correspondingVWProperty != null){\n          correspondingVWProperty.set(\"serial\", newValue);\n          correspondingVWProperty.save()\n          .then(() => {\n            console.log(\"vw property successfully updated\")\n          });\n        }\n        console.log(\"Select pressure unit is:\" + newValue)\n    }\n  },\n});\n","import { computed } from '@ember/object';\nimport Component from '@ember/component';\n// import { inject as service } from \"@ember/service\";\n\n// export default class TemporalChartDropdown extends Component {\n//     //@service session;\n//     //@service currentUser;\n//     isAuthenticated = true;\n//     selected = \"Displacement\";\n// }\n\nimport EmberObject from '@ember/object';\nimport moment from 'moment';\n\nexport default Component.extend({ \n});","import { inject as service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport Component from '@glimmer/component';\n\nexport default class DropdownComponent extends Component {\n    @service store;\n\n    @tracked instrument;\n    // port = 1;\n    constructor() {\n        super(...arguments);\n        this.loadInstrument();\n    }\n\n    // I need the instrument.vwProperty to get the ports.\n    async loadInstrument() {\n        if (!this.args.instrumentId) return;\n        this.instrument = await this.store.findRecord('instrument', this.args.instrumentId);\n    }\n}\n","export { default } from 'ember-leaflet/components/wms-tile-layer';\n","export { default } from 'ember-resolver/container-debug-adapter';\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { getOwner } from '@ember/application';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    page_size: 20,\n    page: 1,\n    search: null,\n    batchSelectedAlertsID:[],\n    activeActionTab:null,\n    alertsBatch: service(),\n    session: service(),\n    breadCrumbs: [\n        {\n            label: \"Dashboard\",\n            path: 'index'\n        },\n        {\n            label: \"Alerts\",\n            path: 'alerts'\n        }\n    ],\n\n    typeBatch:null,\n    isShowBatchConfirmationModal:false,\n    batchWarningMessage:\"\",\n\n    licenceIsValid: computed('',function() {\n        let valid = false;\n        try {\n            valid = this.session.data.authenticated.isValid;\n        } catch {}\n        return valid;\n    }), \n\n    actions: {\n        close() {\n            this.set(\"isShowBatchConfirmationModal\", null);\n            this.set(\"batchWarningMessage\", false);\n            this.set(\"typeBatch\", null);\n        },\n        async confirm(type) {\n            let alertProfileIDs = this.get(\"batchSelectedAlertsID\");\n            if (!alertProfileIDs || alertProfileIDs.length === 0) {\n                alert('No alerts selected');\n                return;\n            }\n            this.set('batchActionLoading', true);\n            try {\n                if(type === \"delete\"){\n                    await this.alertsBatch.batchDelete(alertProfileIDs);\n                } else {\n                    await this.alertsBatch.batchEdit(type, alertProfileIDs);\n                }\n                this.set(\"isShowBatchConfirmationModal\", false);\n                this.set(\"batchWarningMessage\", null);\n                this.set(\"typeBatch\", null);\n                this.set('batchActionLoading', false);\n                this.set('batchSelectedAlertsID', []);\n                const route = getOwner(this).lookup(\"route:alerts\");\n                route.refresh();\n            } catch (err) {\n                console.error('Batch edit error:', err);\n            }\n        },\n        cycleActionBar(tabName){\n            if (tabName === this.activeActionTab){\n                this.set(\"activeActionTab\", null);\n            } else { \n                this.set(\"activeActionTab\", tabName);\n            }\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n        refreshRoute() {\n            this.send('refreshModel');\n        },\n    }\n});","import { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\n// app/controllers/application.js\nimport Controller from '@ember/controller';\n \nexport default class ApplicationController extends Controller {\n  @service session;\n\n  @action\n  invalidateSession() {\n    // console.log(\"LOGOUT!\");\n    localStorage.clear();\n    this.session.invalidate();\n  }\n}\n","import { computed, set } from '@ember/object';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    init() {\n        this._super(...arguments);\n        scheduleOnce('afterRender', this, function() {\n            //this.send('updateNav',this.get('model').licence.content[0]._data);\n        });\n    },\n    queryParams: ['page', 'page_size', 'ordering', 'search'],\n    page_size: 20,\n    eventsMeta: null,\n    ordering: null,\n    search: null,\n    isVisibleRowDetails: {},\n    isRowDeleteConfirmationDialog: {},\n    isVisibleCreateNewForm: false,\n    permissionError: false,\n    project: null,\n    level: null,\n\n    breadCrumbs: [\n        {\n            label: \"Dashboard\",\n            path: 'index'\n        },\n        {\n            label: \"Blast Events\",\n            path: 'blast-events'\n        },\n        \n    ],\n\n    actions: {\n        // updateNav(licence) {\n        //     let modules = licence.modules;\n        //     if(licence.isValid) {\n        //         if(licence.withinLimit) {\n        //             if(!modules.temporal) {\n        //                 document.getElementById(\"temp-link\").style.display = \"none\";\n        //             } else {\n        //                 document.getElementById(\"temp-link\").style.display = \"block\";\n        //             }\n        //             if(!modules.spatial) {\n        //                 document.getElementById(\"spat-link\").style.display = \"none\";\n        //             } else {\n        //                 document.getElementById(\"spat-link\").style.display = \"block\";\n        //             }\n        //             if(!modules.frequency) {\n        //                 document.getElementById(\"freq-link\").style.display = \"none\";\n        //             } else {\n        //                 document.getElementById(\"freq-link\").style.display = \"block\";\n        //             }\n        //             document.getElementById(\"licence-error-instruments\").style.display = \"none\";\n        //         } else {\n        //             document.getElementById(\"licence-error-instruments\").style.display = \"block\";\n        //         }\n        //         document.getElementById(\"licence-error-expired\").style.display = \"none\";\n        //     } else {\n        //         document.getElementById(\"add-new\").style.display = \"none\";\n        //         document.getElementById(\"licence-error-expired\").style.display = \"block\";\n        //     }\n        //     document.getElementById(\"licence-error-module\").style.display = \"none\";\n        // },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n        vewRowDetails(id){\n            let curVal = this.get('isVisibleRowDetails')[id] ? false : true;\n            set(this.get('isVisibleRowDetails'), id, curVal); //update isVisibleRowDetails variable for each single row\n        },\n        toggleRowDeleteConfirmationDialog(id){\n            let curVal = this.get('isRowDeleteConfirmationDialog')[id] ? false : true;\n            set(this.get('isRowDeleteConfirmationDialog'), id, curVal); //update isVisibleRowDetails variable for each single row\n        },\n        remove(model, object){\n            let _this = this;\n            object.deleteRecord();\n            object.get('isDeleted');\n            object.save().then(function(){\n                // deal with records that just were created\n                // relates to the way I add new records to model https://github.com/emberjs/data/issues/3313\n                model.removeObject(object);\n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.send('updateProperty', 'permissionError', true);\n                }\n            });\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        setProject(object, event) {\n            const selectedId = event.target.value;;\n            \n            // Assume projectLookupList is the array of lookup objects\n            let foundObjects = this.get(\"model.projectLookupList\")\n            let foundObject = foundObjects.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n            // console.log(\"Found Object:: \" + foundObject)\n\n            if (foundObject) {\n              // Do something with foundObject\n              console.log(\"saving project\")\n              object.set(\"project\", foundObject)\n              object.save();\n            }\n        },\n        \n        setLevel(object, event) {\n            const selectedId = event.target.value;;\n            \n            // Assume levelLookupList is the array of lookup objects\n            let foundObjects = this.get(\"model.levelLookupList\")\n            let foundObject = foundObjects.find((lookup) => {\n              return lookup.id === selectedId;\n            });\n            // console.log(\"Found Object:: \" + foundObject)\n\n            if (foundObject) {\n              // Do something with foundObject\n              console.log(\"saving level\")\n              object.set(\"level\", foundObject)\n              object.save();\n            //   this.set('project', foundObject);\n            }\n        },\n\n    }\n});\n","import Controller from '@ember/controller';\n\nexport default Controller.extend({\n    breadCrumbs: [\n        {\n            label: \"Dashboard\",\n            path: 'index'\n        },\n        {\n            label: \"Contact Us\",\n            path: 'contact-us'\n        }\n    ],\n});\n","import { inject as service } from '@ember/service';\nimport { computed } from '@ember/object';\nimport Controller from '@ember/controller';\n\n\nexport default Controller.extend({\n    session: service(),\n    alertProfileFormFinalData:{},\n    alertProfileFormChannelsData:[],\n    alertProfileFormParametersData:{},\n\n    breadCrumbs: [\n        {\n            label: \"Dashboard\",\n            path: \"index\"\n        },\n        {\n            label: \"Alerts\",\n            path: 'alerts'\n        },\n        {\n            label: 'Create Alert Profile',\n            path: 'create-alert-profile',\n        }\n    ],\n    init() {\n        this._super(...arguments);\n    },\n    resetAlertProfileFormFinalData:function(){\n        this.set(\"alertProfileFormData\",{});\n    },\n    resetAlertProfileFormChannelsData:function(){\n        this.set(\"alertProfileFormChannelsData\",[]);\n    },\n    resetAlertProfileFormParametersData:function(){\n        this.set(\"alertProfileFormParametersData\",{});\n    },\n    licenceIsValid: computed('',function() {\n        let valid = false;\n        try {\n            valid = this.session.data.authenticated.isValid;\n        } catch {}\n        return valid;\n    }), \n    actions: {\n    }\n});\n","import { computed, set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Controller from '@ember/controller';\n\nexport default class CreateGatewayController extends Controller {\n    @service store;\n    @service router;\n    gatewayType = 0;\n    gatewayTypes = null;\n    id = null;\n    isVisibleError = false;\n    duplicateError = false;\n    typeError = false;\n    fieldError = false;\n    authError = false;\n\n    breadCrumbs = [\n        {\n            label: \"Dashboard\",\n            path: \"index\"\n        },\n        {\n            label: \"Gateways\",\n            path: 'gateway'\n        },\n        {\n            label: 'Create Gateway',\n            path: 'create-gateway',\n        }\n    ];\n\n    actions = {\n        choseForm(value) {\n            console.log(`setting gatewayTypes: ${value}`)\n            set(this, 'gatewayTypes', value);\n        },\n        submit(id) {\n            if (id != null) {\n                this.router.transitionTo('edit-gateway', id);\n            } else {\n                this.router.transitionTo('gateway');\n            }\n        },\n        setError(error,value) {\n            set(this, error, value);\n        },\n    };\n}\n\n","import { tracked } from '@glimmer/tracking';\nimport { set } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Controller from '@ember/controller';\nimport EmberObject, { computed } from '@ember/object';\n\nexport default class CreateInstrumentController extends Controller {\n    @service store;\n    @service router;\n    @tracked vendors = [];\n\n    instType = 0;\n    isVisibleError = false;\n    duplicateError = false;\n    typeError = false;\n    fieldError = false;\n\n    breadCrumbs = [\n        {\n            label: \"Dashboard\",\n            path: \"index\"\n        },\n        {\n            label: \"Instruments\",\n            path: 'instruments'\n        },\n        {\n            label: 'Create Instrument',\n            path: 'create-instrument',\n        }\n    ];\n\n    sortTypesByTitle(typesArray) {\n        return typesArray.sort((a, b) => {\n            if (a.title < b.title) return -1;\n            if (a.title > b.title) return 1;\n            return 0;\n        });\n    };\n\n    @computed('model')\n    get getInstrumentTypes() {\n        let types = this.model.instrumentTypes;\n        let newTypesArr = [];\n        types.forEach(element => {\n            if(element.id != \"3\"){ \n                newTypesArr.push(element)\n            };\n        });\n        newTypesArr = this.sortTypesByTitle(newTypesArr);\n        return newTypesArr;\n    }\n    \n    actions = {\n        choseForm(value) {\n            set(this, 'instType', value);\n            this.store.query('vendor', { instrument_type: value })\n                .then((vendors) => {\n                    this.vendors = vendors;\n            });\n  \n        },\n        submit(id) {\n            if (id != null) {\n                this.router.transitionTo('edit-instrument', id);\n            } else {\n                this.router.transitionTo('instruments');\n            }\n        },\n        setError(error,value) {\n            set(this, error, value);\n        },\n    };\n}\n\n// export default Controller.extend({\n//     instType: 0,\n//     id: \"\",\n//     store: service(),\n    \n//     isVisibleError: false,\n//     duplicateError: false,\n//     typeError: false,\n//     fieldError: false,\n\n//     breadCrumbs: computed({\n//         get() {\n//             let obj = [\n//                 {\n//                     label: \"Instruments\",\n//                     path: 'instruments'\n//                 },\n//                 {\n//                     label: 'Create Instrument',\n//                     path: 'create-instrument',\n//                 }\n//             ]\n        \n//             return obj;\n//         }\n//     }),\n//     actions: {\n//         choseForm(value) {\n//             set(this, 'instType', value);\n//         },\n//         submit(id) {\n//             if (id != null) {\n//                 this.transitionToRoute('edit-instrument', id);\n//             } else {\n//                 this.transitionToRoute('instruments');\n//             }\n//         },\n//         setError(error,value) {\n//             set(this, error, value);\n//         }\n//     }\n// });\n","import { computed, set } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\nimport Controller from '@ember/controller';\n\nfunction resetNewLookupObject(_this) {\n    //console.log('reset');\n    _this.set('newLookupObject', {});\n    _this.set('name', \"\");\n    _this.set('type', \"\");\n    _this.set('value', \"\");\n}\n\nexport default class CreateInstrumentController extends Controller {\n\n\n    init() {\n        super.init(...arguments);\n        resetNewLookupObject(this);\n    }\n\n    @service store;\n    @tracked vendors = [];\n\n    lookupType = 0;\n    isVisibleError = false;\n    duplicateError = false;\n    typeError = false;\n    fieldError = false;\n    type = \"\";\n    breadCrumbs = [\n        {\n            label: \"Dashboard\",\n            path: \"index\"\n        },\n        {\n            label: \"Lookups\",\n            path: 'list-lookups'\n        },\n        {\n            label: 'Create Lookup',\n            path: 'create-lookup',\n        }\n    ];\n\n    actions = {\n        choseType(value) {\n            set(this, 'lookupType', value);\n        },\n        submit(id) {\n            if (id != null) {\n                this.transitionToRoute('edit-lookup', id);\n            } else {\n                this.transitionToRoute('list-lookups');\n            }\n        },\n\n        createLookup(object){\n\n            let _this = this;\n            let store = this.get('store');\n            let newLookupObject = this.get('newLookupObject');\n\n            newLookupObject.name = this.get('name');\n            newLookupObject.type = this.get('lookupType');\n            newLookupObject.value = this.get('value');\n            \n\n            if (! newLookupObject.name || !newLookupObject.type || !newLookupObject.value) {\n                alert(\"All fields are required\");\n                return;\n            }\n            console.log(\"newLookupObject::::::::::: \" + JSON.stringify(newLookupObject));\n            \n            let newLookup = null;\n            let dup = false;\n            \n            try {\n                newLookup = store.createRecord('lookup', newLookupObject);\n            } catch (err) {\n                this.setError('isVisibleError',true);\n                console.log(\"Error::::: \");\n                console.log(err.message);\n            }\n        \n            \n            // this.setError('authError', false);\n\n            // if (!error) {\n                \n            newLookup.save().then(function(results){\n                // console.log(dup);\n                if(results.id != null) {\n                    _this.get('submit')(results.id);\n                } else {\n                    this.setError('isVisibleError',true);\n                    error = true;\n                }\n            }).catch(function(reason) {             \n                console.log(\"REASON: \" + reason);  \n                // _this.setError('isVisibleError',true);\n                // _this.setError('authError',true);\n            }); \n            \n        },\n\n    };\n}\n\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    session: service(),\n    currentTab:\"HOME\",\n    breadCrumbs: computed('model',{\n        get() {\n            let alert = this.get('model').alert;\n            \n            let obj = [{\n                label: \"Alerts\",\n            }];\n            \n            if (alert != null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Alerts\",\n                        path: 'alerts'\n                    },\n                    {\n                        label: alert.get('id'),\n                        path: 'edit-alert-profile',\n                        model: alert.get('id'),\n                    }\n                ]\n            }\n            return obj;\n        }\n    }),\n    async init() {\n        this._super(...arguments);\n    },\n    licenceIsValid: computed('',function() {\n        let valid = false;\n        try {\n            valid = this.session.data.authenticated.isValid;\n        } catch {}\n        return valid;\n    }), \n    actions: {\n        updateTab(value){\n            this.set(\"currentTab\", value)\n        },\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    session: service(),\n    router: service(),\n    queryParams: ['parentGateway'],\n\n    init() {\n        this._super(...arguments);\n        // Check if there's a parentGateway in the query params\n        const queryParamParentGateway = this.parentGateway;\n        if (queryParamParentGateway) {\n            // If so, save it to localStorage\n            window.localStorage.setItem('parentGateway', queryParamParentGateway);\n        } else {\n            // If not, try to load it from localStorage\n            const storedParentGateway = window.localStorage.getItem('parentGateway');\n            if (storedParentGateway) {\n                // If found, set it to the controller's property\n                this.set('parentGateway', storedParentGateway);\n            }\n        }\n    },\n    parentGateway: computed({\n        get() {\n            return this._parentGateway;\n        },\n        set(key, value) {\n            // Save to localStorage whenever it's updated\n            window.localStorage.setItem('parentGateway', value);\n            this._parentGateway = value;\n            return value;\n        }\n    }),\n    \n    breadCrumbs: computed('model',{\n        get() {\n        let gateway = this.get('model').gateway;\n        \n        let obj = [{\n            label: \"Gateway\",\n        }];\n\n            if (gateway != null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Gateway\",\n                        path: 'gateway'\n                    },\n                    {\n                        label: gateway.get('id'),\n                        path: 'edit-gateway',\n                        model: gateway.get('id'),\n                    }\n                ]\n            }\n            return obj;\n        }\n    }),\n    \n    gatewayTypeLabel: computed('model.gateway.gatewayType', function() {\n        // console.log(\"Model:\")\n        let modelTemp = this.get('model')\n\n        // console.log('model: ')\n        // console.log(this.parentGateway)\n\n        let gatewayType = this.get('model.gateway.gatewayType');\n        // console.log(\"gatewayType::: \" + gatewayType.title);\n        if(gatewayType == null){\n            return \"Gateway\";\n        }\n        if( gatewayType.title == 'Blu900' ) {\n            return \"Node\";\n        }\n        return 'Gateway';\n    }),\n\n    hasGraphs: computed('', {\n        get() {\n            if (this.getPerms() != undefined){\n                return ('graphing' in this.getPerms() && this.getPerms()['graphing'] == true);\n            }\n        }\n    }),\n    getPerms: function() {\n        let perms = null;\n        try{\n            perms = this.session.data.authenticated.modules;\n        } catch {}\n        return perms;\n    },\n    actions: {\n        viewData(id) {\n            this.router.transitionTo('raw-gateway-data', id);\n        },\n        tGraph(id, chart) {\n            this.router.transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, { queryParams: { \"chart\":chart, \"start_timestamp\": null, \"end_timestamp\": null }});\n        },\n        saveToLocalStorage() {\n          // 'this.parentGateway' is the value you want to store\n          window.localStorage.setItem('parentGateway', this.parentGateway);\n        },   \n        loadFromLocalStorage() {\n            let parentGateway = window.localStorage.getItem('parentGateway');\n            if (parentGateway) {\n              this.set('parentGateway', parentGateway);\n            }\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    session: service(),\n    breadCrumbs: computed('model',{\n        get() {\n            let instrument = this.get('model').instrument;\n            \n            let obj = [{\n                label: \"Instruments\",\n            }];\n            \n            if (instrument != null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Instruments\",\n                        path: 'instruments'\n                    },\n                    {\n                        label: instrument.get('id'),\n                        path: 'edit-instrument',\n                        model: instrument.get('id'),\n                    }\n                ]\n            }\n            return obj;\n        }\n    }),\n    hasGraphs: computed('', {\n        get() {\n            if (this.getPerms() != undefined){\n                return ('graphing' in this.getPerms() && this.getPerms()['graphing'] == true);\n            }\n        }\n    }),\n    getPerms: function() {\n        let perms = null;\n        try{\n            perms = this.session.data.authenticated.modules;\n        } catch {}\n        return perms;\n    },\n    ports: computed('instrument', function() {\n        let channelsNum = null;\n        try{\n            channelsNum = this.get('model').instrument.channelsNum;\n            channelsNum = parseInt(channelsNum/2);\n        } catch (ex) {\n            channelsNum = 1;\n\n        }\n        \n        let numberOfPorts = [];\n        for(let channel = 1 ; channel <= channelsNum; channel++){\n            numberOfPorts.push({\"channel\": channel, \"title\": \"Port: \" + channel, route:\"edit-instrument\"});\n        }\n        console.log(JSON.stringify(numberOfPorts));\n        //this.ports = numberOfPorts;\n        return numberOfPorts;\n    }),    \n\n    actions: {\n        selectProperty(value){\n            let inst = this.get('model').instrument;\n            let prop = inst.get('vwproperty').toArray()[0];\n            console.log(\"prop::: \" + prop.get('port'));\n            let model = this.get('vwModels').findBy('id', this.get('selectedModel'));\n            let vendor = this.get('vwVendors').findBy('id', this.get('selectedVendor'));\n            let serial = this.get('serial');\n        },\n\n        viewData(id) {\n            this.transitionToRoute('raw-data', id);\n        },\n        tGraph(id, chart) {\n            this.transitionToRoute('temporal-graphs.temporal-graph', id, chart);\n        },\n        sGraph(id, chart) {\n            this.transitionToRoute('spatial-graphs.spatial-graph', id, chart);\n        },\n        fGraph(id, chart) {\n            this.transitionToRoute('frequency-graphs.frequency-graph', id, chart);\n        },\n    }\n});\n","import { computed, observer, set } from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    breadCrumbs: computed('model',{\n        get() {\n            let alert = this.get('model').alert;\n            \n            let obj = [\n                {\n                    label: \"Dashboard\",\n                    path: 'index'\n                },    \n            {\n                label: \"Alerts\",\n            }];\n            \n            if (alert != null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Alerts\",\n                        path: 'alerts'\n                    },\n                    {\n                        label: alert.get('id'),\n                        path: 'edit-alert',\n                        model: alert.get('id'),\n                    }\n                ]\n            }\n            return obj;\n        }\n    }),\n    instrumentTypeName: computed('', function() {\n        // console.log(this.get('model').alert.instrument.get('instrumentType').title);\n        this.set('instType', this.get('model').alert.instrument.get('instrumentType'));\n        this.set('id',this.get('alert_id'));\n        return 'test';\n    }),\n    actions: {\n        saved() {\n        },\n        setError(error,value) {\n            set(this, error, value);\n        },\n    },\n})\n","import { inject as service } from '@ember/service';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport Controller from '@ember/controller';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default class ForgotPasswordController extends Controller {\n\n  @tracked isSentResetRequest = false;\n  @tracked errorMessage;\n  @service api;\n  @service session;\n\n  @tracked loading = false;\n  @tracked email = \"\";\n\n  @action\n  async resetPassword(){\n    try{\n      this.loading = true;\n      let response =  await this.api.fetch(`${getApiBaseUrl()}/api/auth/password-reset/`, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({ email: this.email })\n      });\n      await response.json();\n      this.isSentResetRequest = true;\n      this.loading = false;\n\n    }\n    catch (err){\n      console.log(\"reset password err\");\n      console.log(err)\n      this.errorMessage = \"Something went wrong. Please try again later.\";\n      this.loading = false;\n\n    }\n    return;\n\n  }\n\n  @action\n  updateInfo(type, e) {\n    console.log(\"type:\" + type)\n    console.log(e.target.value)\n    switch(type){\n      case \"email\":\n        this.email = e.target.value;\n        return;\n    }\n  }\n}\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { time } from 'echarts';\nimport Controller from '@ember/controller';\nimport EmberObject from '@ember/object';\nimport { buildDeleteWarningBoard, buildFrequencyEventsOverviewBoard, buildFrequencyEventsEditBoard} from '../helpers/frequency-events-library';\n\nexport default Controller.extend({\n    router: service(),\n    session: service(),\n    isRowDeleteConfirmationDialog: {},\n    showLoading: false,\n    init(){\n        this._super(...arguments);\n        this.router.on('routeDidChange', this.handleRouteChange.bind(this));\n    },\n\n    handleRouteChange(transition) {\n        if (transition.to.name === 'frequency-events') {\n            this.set('showLoading', false);\n        }\n    },\n    isShowConfig:{\n        isShowPopupNotification:false,\n    }, \n    licenceIsValid: computed('',function() {\n        let valid = false;\n        try {\n            valid = this.session.data.authenticated.isValid;\n        } catch {}\n        return valid;\n    }),\n    getVisibleReadings:computed('bluvibeV2Profiles', function () {\n        if (this.get('bluvibeV2Profiles')){\n            return this.get(\"bluvibeV2Profiles\").length\n        }else{\n            return 0;\n        }\n    }),\n    getTotalReadings:computed('bluvibeV2Profiles', function () {\n        if (this.get('bluvibeV2Profiles')){\n            return this.get('bluvibeV2Profiles').get(\"meta\").pagination.total\n        }else{\n            return 0;\n        }\n    }),\n    breadCrumbs: computed(\"instrument\", {\n        get() {\n            let instrument = this.get('instrument');\n            \n            let obj = null\n            if (instrument != null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Instruments\",\n                        path: 'instruments'\n                    },\n                    {\n                        label: instrument.id,\n                        path: 'edit-instrument',\n                        model: instrument.id,\n                    },\n                    {\n                        label: \"Frequency Events\",\n                        path: 'frequency-events',\n                        model: instrument.id,\n                    }\n                ]\n            }\n            return obj;\n        }\n    }),\n\n    displayData: computed('instrumentId', function() {\n        if (this.instrumentId !== null) {\n            return true;\n        } else {\n            return false;\n        }\n    }),\n    getbluvibev2ProfileList:computed(\"bluvibeV2Profiles\", function(){\n        let list = this.get(\"bluvibeV2Profiles\");\n        return list;\n\n    }),\n    actions: {\n        closeNotificationPopup(){\n            const notificationPopupContentBody = document.getElementById('notificationPopupContentBody');\n            notificationPopupContentBody.innerHTML=\"\";\n            this.set('isShowConfig.isShowPopupNotification', false);\n        },\n        async actionsHotKey(key, profile_obj){\n            switch(key){\n                case \"overview\":\n                    buildFrequencyEventsOverviewBoard(this,profile_obj);\n                    return;\n                case \"analytics\":\n                    this.set(\"showLoading\", true);\n                    this.get(\"router\").transitionTo('frequency-events.frequency-event', profile_obj.parent.id, profile_obj.id);\n                    return;   \n                case \"data\":\n\n                    let endDateObj = new moment();\n                    let startDateObj = moment(endDateObj).subtract(1, 'days').format('YYYY-MM-DDTHH:mm');\n                    let formattedEndDateObj = endDateObj.format('YYYY-MM-DDTHH:mm');\n                    this.get('router').transitionTo('raw-frequency-events-data', profile_obj.parent.id, {\n                        queryParams: {\n                            \"advancedStartDate\": startDateObj, \n                            \"advancedEndDate\": formattedEndDateObj,\n                            profile_id:profile_obj.id,\n                            advancedYAxisUnit:\"mm\",\n                            analysis_category:\"raw\",\n                        }\n                    });\n                    return;                 \n                case \"edit\":\n                    buildFrequencyEventsEditBoard(this,profile_obj);\n                    return;\n                case \"delete\":\n                    buildDeleteWarningBoard(this,profile_obj)\n                    return;\n                    \n            }\n        }\n    }\n\n})","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    router: service(),\n    session: service(),\n    init(){\n        this._super(...arguments);\n    },\n    actions: {\n    }\n});\n","import { computed, observer } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\nimport { buildRedWarningNotificationBoard, sendGETRequest} from '../../helpers/frequency-event-library';\n\nexport default Controller.extend({\n    router: service(),\n    session: service(),\n    showLoading: true,\n    integrationMethod:\"trapazoidal\",\n    selectedFreqEventTabKey:\"raw\",\n    selectedFreqEventSubTabKey:\"raw_xyz_axis_focus\",\n    selectedFreqEventSubSubTabKey:null,\n    advancedYAxisUnit:\"RAW\",\n    raw: false,\n    tabs:[],\n    isShowConfig:{\n        isShowPopupNotification:false,\n    }, \n    init(){\n        this._super(...arguments);\n\n    },\n    initializeGraphDataFromTabKeys:async function(key){\n        try{\n            // console.log(`initializeGraphDataFromTabKeys: ${key}`)\n            let profiles = this.get(\"bluvibeV2ModelProfiles\");\n            let profileObj = profiles.objectAt(0);\n            const endPoint = \"blu-vibe-v2-data-model2s/\";\n            let timestamp = profileObj[\"timestamp\"];\n            let profileID = profileObj[\"id\"];\n            let instrID = profileObj[\"parent\"][\"id\"];\n            let method = \"trapazoid\";\n            let analysisCategory = \"raw\";\n            this.set('showLoading', true);\n\n            switch(key){\n                case \"raw_xyz_axis_focus\":\n                    analysisCategory='raw';\n                    this.set(\"advancedYAxisUnit\", \"RAW\");\n                    sendGETRequest(endPoint, {\n                        instrument_id: instrID,\n                        selectedFreqEventDate: timestamp,\n                        profile_id: profileID,\n                        method: method,\n                        analysis_category: analysisCategory,\n                        advancedYAxisUnit: this.get(\"advancedYAxisUnit\"),\n                        run_analysis: \"true\"\n                    })\n                    .then(response1 => {\n                            this.set('showLoading', false);\n                            this.set(\"bluvibeV2ModelData\", response1.data);\n                    })\n                    .catch(error => {\n                        console.error(\"Request failed:\", error);\n                        this.set('showLoading', false);\n                    });\n                    break;\n                case \"sub_acceleration_linear_regression\":\n                    analysisCategory='linear_regression_acceleration';\n                    this.set(\"advancedYAxisUnit\", \"mm\");\n                    sendGETRequest(endPoint, {\n                        instrument_id: instrID,\n                        selectedFreqEventDate: timestamp,\n                        profile_id: profileID,\n                        method: method,\n                        analysis_category: analysisCategory,\n                        advancedYAxisUnit: this.get(\"advancedYAxisUnit\")\n                    })\n                    .then(response => {\n                        \n                        this.set('showLoading', false);\n                        this.set(\"bluvibeV2ModelData\", response.data);\n                        \n                    })\n                    .catch(error => {\n                        console.error(\"Request failed:\", error);\n                        this.set('showLoading', false);\n                    });\n                    break;\n                case \"sub_acceleration_fft\":\n                    analysisCategory='fft_acceleration';\n                    this.set(\"advancedYAxisUnit\", \"mm\");\n                    sendGETRequest(endPoint, {\n                        instrument_id: instrID,\n                        selectedFreqEventDate: timestamp,\n                        profile_id: profileID,\n                        method: method,\n                        analysis_category: analysisCategory,\n                        advancedYAxisUnit: this.get(\"advancedYAxisUnit\")\n                    })\n                    .then(response => {\n                        \n                        this.set('showLoading', false);\n                        this.set(\"bluvibeV2ModelData\", response.data);\n                    })\n                    .catch(error => {\n                        console.error(\"Request failed:\", error);\n                        this.set('showLoading', false);\n                    });\n                    break;\n                case \"sub_velocity_linear_regression\":\n                    analysisCategory='linear_regression_velocity';\n                    this.set(\"advancedYAxisUnit\", \"mm\");\n                    sendGETRequest(endPoint, {\n                        instrument_id: instrID,\n                        selectedFreqEventDate: timestamp,\n                        profile_id: profileID,\n                        method: method,\n                        analysis_category: analysisCategory,\n                        advancedYAxisUnit: this.get(\"advancedYAxisUnit\")\n                    })\n                    .then(response => {\n                        \n                        this.set(\"bluvibeV2ModelData\", response.data);\n                        this.set('showLoading', false);\n                    })\n                    .catch(error => {\n                        console.error(\"Request failed:\", error);\n                        this.set('showLoading', false);\n                    });\n                    break;\n                case \"sub_velocity_fft\":\n                    analysisCategory='fft_velocity';\n                    this.set(\"advancedYAxisUnit\", \"mm\");\n                    sendGETRequest(endPoint, {\n                        instrument_id: instrID,\n                        selectedFreqEventDate: timestamp,\n                        profile_id: profileID,\n                        method: method,\n                        analysis_category: analysisCategory,\n                        advancedYAxisUnit: this.get(\"advancedYAxisUnit\")\n                    })\n                    .then(response => {\n                        \n                        this.set('showLoading', false);\n                        this.set(\"bluvibeV2ModelData\", response.data);\n                    })\n                    .catch(error => {\n                        console.error(\"Request failed:\", error);\n                        this.set('showLoading', false);\n                    });\n                    break;\n                case \"sub_displacement_linear_regression\":\n                    analysisCategory='linear_regression_displacement';\n                    this.set(\"advancedYAxisUnit\", \"mm\");\n                    sendGETRequest(endPoint, {\n                        instrument_id: instrID,\n                        selectedFreqEventDate: timestamp,\n                        profile_id: profileID,\n                        method: method,\n                        analysis_category: analysisCategory,\n                        advancedYAxisUnit: this.get(\"advancedYAxisUnit\")\n                    })\n                    .then(response1 => {\n                        sendGETRequest(endPoint, {\n                            instrument_id: instrID,\n                            selectedFreqEventDate: timestamp,\n                            profile_id: profileID,\n                            method: method,\n                            analysis_category: \"linear_regression_acceleration_pitch_roll\",\n                            advancedYAxisUnit: this.get(\"advancedYAxisUnit\")\n                        })\n                        .then(response2 => {\n                            \n                            // console.log(\"response1\");\n                            // console.log(response1.data[0]);\n                            // console.log(\"response2\");\n                            // console.log(response2.data[0]);\n                            this.set('showLoading', false);\n                            this.set(\"bluvibeV2ModelData\", response1.data);\n                            this.set(\"bluvibeV2ModelPitchRollData\", response2.data);\n                        })\n                        .catch(error => {\n                            console.error(\"Request failed:\", error);\n                            this.set('showLoading', false);\n                        });\n                    })\n                    .catch(error => {\n                        console.error(\"Request failed:\", error);\n                        this.set('showLoading', false);\n                    });\n                    break;\n                case \"sub_displacement_fft\":\n                    analysisCategory='fft_displacement';\n                    this.set(\"advancedYAxisUnit\", \"mm\");\n                    sendGETRequest(endPoint, {\n                        instrument_id: instrID,\n                        selectedFreqEventDate: timestamp,\n                        profile_id: profileID,\n                        method: method,\n                        analysis_category: analysisCategory,\n                        advancedYAxisUnit: this.get(\"advancedYAxisUnit\")\n                    })\n                    .then(response => {\n                        \n                        this.set('showLoading', false);\n                        this.set(\"bluvibeV2ModelData\", response.data);\n                    })\n                    .catch(error => {\n                        console.error(\"Request failed:\", error);\n                        this.set('showLoading', false);\n                    });\n                    break;\n                default:\n                    // this.set('showLoading', false);\n                    this.set(\"advancedYAxisUnit\", \"RAW\");\n                    next(this, function () {\n                        this.set('showLoading', false); // triggers observer again\n                    });\n                    break;\n                \n            };\n        }catch(err){\n            console.log(`Error in initializeGraphDataFromTabKeys: ${err.message}`);\n            console.log(err.stack);\n        }\n    },\n    updateRedWarning: computed(\"bluvibeV2ModelProfiles\",function(){\n        let profiles = this.get(\"bluvibeV2ModelProfiles\");\n        let profileObj = profiles.objectAt(0);\n        //Check for Clipping Data, immediately trigger red warning\n        if(profileObj[\"analytics\"].hasOwnProperty(`clippingData`) && profileObj[\"analytics\"][\"clippingData\"].length > 0)\n            return true;\n        //For Future: Check for .... Data, immediately trigger red warning\n        return false;\n\n\n    }),\n    subTabObserver: observer('selectedFreqEventSubTabKey', async function () {\n        const subTab = this.get(\"selectedFreqEventSubTabKey\");\n        // console.log(`subTabObserver: ${subTab}`);\n        await this.initializeGraphDataFromTabKeys(subTab)\n    }),\n    loadProfiles: observer(\"bluvibeV2ModelProfiles\", async function() {\n        //For First Render once all requests are done\n        //Get First Graph Data \n        const tab = this.get(\"selectedFreqEventTabKey\");\n        const subTab = this.get(\"selectedFreqEventSubTabKey\");\n        await this.initializeGraphDataFromTabKeys(subTab);\n    }),\n    breadCrumbs: computed(\"instrument\", {\n        get() {\n            let instrument = this.get('instrument');\n            let obj = null\n            // console.log(\"chart::: \"  + chart)\n            if (instrument != null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Instruments\",\n                        path: 'instruments'\n                    },\n                    {\n                        label: instrument.id,\n                        path: 'edit-instrument',\n                        model: instrument.id,\n                    },\n                    {\n                        label: \"Frequency Events\",\n                        path: 'frequency-events',\n                        model: instrument.id,\n                    },\n                    {\n                        label: `Frequency Event ${this.get(\"profileId\")}`,\n                        path: 'frequency-events.frequency-event',\n                        model: instrument.id,\n                    }\n                ]\n            }\n            return obj;\n        }\n    }),\n    getProfileID: computed('bluvibeV2ModelProfiles', function() {\n        let bluvibeV2ModelProfiles = this.get(\"bluvibeV2ModelProfiles\");\n        if(bluvibeV2ModelProfiles.length == 1){\n            return bluvibeV2ModelProfiles.objectAt(0).get(\"id\");\n        }else{\n            return \"\";\n        }\n    }),\n    displayData: computed('instrumentId', function() {\n        if (this.instrumentId !== null) {\n            return true;\n        } else {\n            return false;\n        }\n    }),\n    buildTabsInstrTypeDependent: computed('instrument', function() {\n        let instrument = this.get(\"instrument\");\n        let instrumentType = this.get(\"instrumentType\");\n        switch (instrumentType){\n            case \"BluVibe\":\n                this.set(\"tabs\", [\n                    {id: \"raw\", label: \"RAW Data\"},\n                    {id: \"linear_regresssion_not_detrended\", label: \"RAW Linear Regression\"},,\n                    {id: \"linear_regression_detrended\", label: \"Linear Regression Detrended\"},\n                ])\n        }\n    }),\n\n    actions: {\n        closeNotificationPopup(){\n            const notificationPopupContentBody = document.getElementById('notificationPopupContentBody');\n            notificationPopupContentBody.innerHTML=\"\";\n            this.set('isShowConfig.isShowPopupNotification', false);\n        },\n        redWarningNotification(){\n            console.log(\"triggered red warning buttons\");\n            let profiles = this.get(\"bluvibeV2ModelProfiles\");\n            let profileObj = profiles.objectAt(0);\n            buildRedWarningNotificationBoard(this, profileObj)\n        },\n        updateProperties(propertyNames = [], propertyValues = []) {\n            const _this = this;\n            if (propertyNames.length > 0 && propertyValues.length > 0 && propertyNames.length === propertyValues.length) {\n                propertyNames.forEach( function(propertyName, i) {\n                    _this.set(propertyName, propertyValues[i]);\n                });\n            }\n        },\n        getQueryParams(variable) {\n            return this.get(variable);\n        },\n        toggleProperty(property) {\n            if ( this.get(property) === null ) {\n                this.set(property, true);\n            } else if(this.get(property) === false ) {\n                this.set(property, true);\n            } else {\n                this.set(property, false);\n            }\n        }\n    }\n});\n","import { computed, observer } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport { inject as controller } from '@ember/controller';\nimport { inject as service } from '@ember/service';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    xyRangeObj:{},\n    router: service(),\n    instrumentId: null,\n    instrumentType: null,\n    instrumentTypeId: null,\n    name: null,\n    location: null,\n    level: null,\n    borehole: null,\n    project: null,\n    modelName: null,\n    activeInstrumentMeta: null,\n    frequencyGraphController: controller(\"frequency-graphs/frequency-graph\"),\n    //eventType: null,\n    //blastType: null,\n    //seismicType: null,\n    chartDataValueName: null,\n    frequency: null,\n    chartData: null,\n    chart: null,\n    chartDataPoints: null,\n    adjust_scales: false,\n    auto_scale: true,\n    x_min: null,\n    x_max: null,\n    x_min_old: null,\n    x_max_old: null,\n    x_min_auto: null,\n    x_max_auto: null,\n    y_min: null,\n    y_max: null,\n    y_min_old: null,\n    y_max_old: null,\n    y_min_auto: null,\n    y_max_auto: null,\n    auto_scale_2: true,\n    y_min_2: null,\n    y_max_2: null,\n    y_min_old_2: null,\n    y_max_old_2: null,\n    y_min_auto_2: null,\n    y_max_auto_2: null,\n    lastClick: null,\n    instrumentAnchors: {},\n    instrumentAnchorsSorting: ['number'],\n    chart_type: null,\n    log_frequency: false,\n    display_records: null,\n\n    breadCrumbs: computed(\"instrumentId\", \"modelName\", {\n        get() {\n            let chart = this.get('chartDataValueName');\n            let mName = this.get('modelName');\n            let instID = this.get('instrumentId');\n            let instrument = this.get('content').instrument;\n            let chart_type = this.get('chart_type');\n            if(chart_type != null) {\n                chart = chart_type.toUpperCase();\n            }\n            \n            let obj = null\n            // console.log(\"chart::: \"  + chart)\n            if (instrument != null && instID == null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Instruments\",\n                        path: 'instruments'\n                    },\n                    {\n                        label: instrument.query,\n                        path: 'edit-instrument',\n                        model: instrument.query,\n                    }\n                ]\n            }\n\n            if (instID != null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Instruments\",\n                        path: 'instruments'\n                    },\n                    {\n                        label: instID,\n                        path: 'edit-instrument',\n                        model: instID,\n                    },\n                    {\n                        label: chart + \" vs. Frequency Graph\",\n                        path: \"frequency-graphs.frequency-graph\",\n                        model: mName,\n                        linkable: mName != null\n                    },\n                ];\n            }\n            return obj;\n        }\n    }),\n\n    chartChanged: observer('chart', function() {\n        // console.log(\"chartChanged triggered!!\")\n        //Adapter for advanced filter\n        let xyRangeValues={};\n        var chart = this.get('chart');\n        if (!chart || !chart.yAxis || typeof chart.yAxis.scale !== 'function') return;\n        var yDomain = chart.yAxis.scale().domain();\n        var xDomain = chart.xAxis.scale().domain();\n        this.set('x_min_auto',xDomain[0].toFixed(2));\n        this.set('x_max_auto',xDomain[1].toFixed(2));\n        this.set('x_min',xDomain[0].toFixed(2));\n        this.set('x_max',xDomain[1].toFixed(2));\n        this.set('x_min_old',null);\n        this.set('x_max_old',null);\n\n        this.set('y_min_auto',yDomain[0].toFixed(2));\n        this.set('y_max_auto',yDomain[1].toFixed(2));\n        this.set('y_min',yDomain[0].toFixed(2));\n        this.set('y_max',yDomain[1].toFixed(2));\n        this.set('y_min_old',null);\n        this.set('y_max_old',null);\n        /*         \n        var domain = chart.y2Axis.scale().domain();\n        this.set('y_min_auto_2',domain[0].toFixed(1));\n        this.set('y_max_auto_2',domain[1].toFixed(1));\n        this.set('y_min_2',domain[0].toFixed(1));\n        this.set('y_max_2',domain[1].toFixed(1));\n        this.set('y_min_old_2',null);\n        this.set('y_max_old_2',null);\n        */    \n    }),\n\n    xValueChanged: observer('x_min','x_max', function() {\n        var chart = this.get('chart');\n        if (!chart || typeof chart.xDomain !== 'function') return;\n        chart.xDomain([this.get('x_min'),this.get('x_max')]);\n        try{\n            chart.update();\n        }\n        catch(error){\n            console.error(\"There is a timing issue with the valueChanged observer. This tends to fix itself afterloading.\");\n            console.error(error)\n        }\n    }),\n    valueChanged: observer('y_min','y_max', function() {\n        var chart = this.get('chart');\n        //var points = this.get('chartDataPoints');\n        //console.log(\"custom axis\");\n        if (!chart || typeof chart.yDomain !== 'function') return;\n        chart.yDomain([this.get('y_min'),this.get('y_max')]);\n        //chart.yScale(10);\n        try{\n            chart.update();\n        }\n        catch(error){\n            console.error(\"There is a timing issue with the valueChanged observer. This tends to fix itself afterloading.\");\n            console.error(error)\n        }\n    }),\n\n    autoScaleChanged: observer('auto_scale', function() {\n        if (this.auto_scale) {\n            this.set('y_min_old', this.y_min);\n            this.set('y_max_old', this.y_max);\n            this.set('y_min',this.get('y_min_auto'));\n            this.set('y_max',this.get('y_max_auto'));\n            this.set('x_min_old', this.x_min);\n            this.set('x_max_old', this.x_max);\n            this.set('x_min',this.get('x_min_auto'));\n            this.set('x_max',this.get('x_max_auto'));\n        } else {\n            if (this.get('y_min_old') != null) {\n                this.set('y_min', this.y_min_old);\n                this.set('y_max',this.y_max_old);    \n            }\n            if (this.get('x_min_old') != null) {\n                this.set('x_min', this.x_min_old);\n                this.set('x_max',this.x_max_old);    \n            }\n        }\n    }),\n\n/*     valueChanged2: observer('y_min_2','y_max_2', function() {\n        var chart = this.get('chart');\n        //var points = this.get('chartDataPoints');\n        //console.log(\"custom axis\");\n        chart.yDomain2([this.get('y_min_2'),this.get('y_max_2')]);\n        //chart.yScale(10);\n        chart.update();\n    }),\n\n    autoScaleChanged2: observer('auto_scale_2', function() {\n        if (this.auto_scale_2) {\n            this.set('y_min_old_2', this.y_min_2);\n            this.set('y_max_old_2', this.y_max_2);\n            this.set('y_min_2',this.get('y_min_auto_2'));\n            this.set('y_max_2',this.get('y_max_auto_2'));\n        } else {\n            if (this.get('y_min_old_2') != null) {\n                this.set('y_min_2', this.y_min_old_2);\n                this.set('y_max_2',this.y_max_old_2);    \n            }\n        }\n    }),\n */\n    // isThermo: computed('instrumentType', function() {\n    //     //console.log(this.instrumentType);\n    //     if (this.instrumentType === 'Thermostring') {\n    //         return true;\n    //     }\n    //     return false;\n    // }),\n    // isWire: computed('instrumentType', function() {\n    //     //console.log(this.instrumentType);\n    //     return (this.instrumentType === 'Wire');\n    // }),\n\n    getInstrumentObject: function() {\n        return this.get(\"instruments\");\n    },\n    displayData: computed('instrumentId', function() {\n        if (this.instrumentId !== null) {\n            return true;\n        } else {\n            return false;\n        }\n    }),\n\n    details: computed('name', 'project', 'location', 'level', 'borehole', 'instrumentId', function() {\n        var detailString = \"\";\n        let projectId = this.get('project'); // Assuming project has an 'id' field\n        let projectName = this.get('project.name'); // Assuming project has a 'name' field\n        \n        let levelId = this.get('level.id'); // Assuming level has an 'id' field\n        let levelName = this.get('level.name'); // Assuming level has a 'name' field\n        let badCodes = ['null', 'undefined', ''];\n        \n        if (this.instrumentId !== null) {\n            if (!badCodes.includes(projectName) && projectName != null && projectName != undefined) {\n                // console.log(\"::::::::::::in projectId\")\n                detailString += projectName + ' / ';\n            }\n            \n            if ( !badCodes.includes(this.get('location')) ) {\n                // console.log(\"::::::::::::in location\")\n                detailString += this.get('location') + ' / ';\n            }\n            \n            if (!badCodes.includes(levelName) && levelName != null && levelName != undefined) {\n                // console.log(\"::::::::::::in levelId\")\n                detailString += levelName + ' / ';\n            }\n            \n            if (!badCodes.includes(this.get('borehole')) ) {\n                // console.log(\"::::::::::::in borehole\")\n                detailString += this.get('borehole') + ' / ';\n            }\n                \n            if (detailString !== \"\" && detailString != 'Details:  /') {\n                detailString = detailString.substr(0, detailString.length - 3);\n            }\n        }\n        // console.log(\"::::::::::::Detail String: \" + detailString)\n        return detailString;\n    }),\n\n    bluVibe: computed('instrumentType', function() {\n        if(this.instrumentType==='BluVibe') {\n            return true;\n        }\n        return false;\n    }),\n    //--------------------------------------\n\n    instrumentAnchorsSorted: sort('instrumentAnchors', 'instrumentAnchorsSorting'),\n    refHeadPosition: computed('activeInstrumentMeta', function () {\n        return this.get('activeInstrumentMeta')['ref-head-position'];\n    }),\n    rawData: computed('activeInstrumentMeta', function () {\n        return this.get('activeInstrumentMeta')['raw'];\n    }),\n    timeRef: computed('activeInstrumentMeta', function () {\n        return this.get('activeInstrumentMeta')['zeroed'];\n    }),\n    flipSigns: computed('activeInstrumentMeta', function () {\n        return this.get('activeInstrumentMeta')['flip-signs'];\n    }),\n    allInstruments: filter('model.instruments', function(instrument) {\n        //return true;\n        if (instrument.get('anchorCount') > 0) {\n            return true;\n        }\n    }),\n    instruments: map('allInstruments', function(instrument) {\n        return {\n            title: instrument.get('id'),\n            value: instrument.get('id')\n        };\n    }),\n    // needed for filtered select list to be able to set active instrument on page reload\n    initialInstrumentSelection: computed('instruments', 'instrumentId', function () {\n\n        var id = this.get('instrumentId');\n        \n        if(id != null) {\n            writeCookie('instrumentId', id, 0.02);\n        }\n\n        return this.get('instruments').findBy('title', this.get('instrumentId'));\n    }),\n    actions: {\n\n        updateNav(licence) {\n            let modules = licence.modules;\n            if(licence.isValid) {\n                if(licence.withinLimit) {\n                    if(!modules.temporal) {\n                        document.getElementById(\"temp-link\").style.display = \"none\";\n                        document.getElementById(\"licence-error-module\").style.display = \"block\";\n                    } else {\n                        document.getElementById(\"temp-link\").style.display = \"block\";\n                    }\n                    if(!modules.spatial) {\n                        document.getElementById(\"spat-link\").style.display = \"none\";\n                    } else {\n                        document.getElementById(\"spat-link\").style.display = \"block\";\n                    }\n                    if(!modules.frequency) {\n                        document.getElementById(\"freq-link\").style.display = \"none\";\n                    } else {\n                        document.getElementById(\"freq-link\").style.display = \"block\";\n                    }\n        \n                    document.getElementById(\"licence-error-instruments\").style.display = \"none\";\n                } else {\n                    document.getElementById(\"licence-error-instruments\").style.display = \"block\";\n                }    \n                document.getElementById(\"licence-error-expired\").style.display = \"none\";\n            } else {\n                document.getElementById(\"licence-error-expired\").style.display = \"block\";\n            }\n        },\n        updateProperties(propertyNames = [], propertyValues = []) {\n            const _this = this;\n            if (propertyNames.length > 0 && propertyValues.length > 0 && propertyNames.length === propertyValues.length) {\n                propertyNames.forEach( function(propertyName, i) {\n                    _this.set(propertyName, propertyValues[i]);\n                });\n            }\n        },\n        toggleProperty(property) {\n            this.get('frequencyGraphController').send('toggleProperty', property);\n        },\n        toggleLocalProperty(property) {\n            if ( this.get(property) === null ) {\n                this.set(property, true);\n            } else if(this.get(property) === false ) {\n                this.set(property, true);\n            } else {\n                this.set(property, null);\n            }\n        },\n        onUpdateTransitionTo(selection) {\n            // console.log(\"selection: \" + selection.value)\n            if (this.get('modelName') == null || this.get('modelName') == '') {\n                this.set('modelName', 'displacement-values');\n            }\n            this.RouterService.transitionTo('frequency-graphs.frequency-graph', selection.value, this.get('modelName'));\n        },\n        setChart(chart) {\n            this.set('chart',chart);\n        },\n        setData(data) {\n            this.set('chartDataPoints', data);\n        },\n        selectTemps() {\n            let lastClick = this.get('lastClick');\n            if (lastClick === null || lastClick !== \"temp\") {\n                let chart = this.get('chart');\n                let points = this.get('chartDataPoints');\n                if (chart !== null) {\n                    for (let ctr = 0; ctr < points.length - 2; ctr++) {\n                        if (ctr % 2 === 0) {\n                            if (!points[ctr + 1].disabled) {\n                                points[ctr].disabled = false;\n                                points[ctr].userDisabled = false;\n                            }\n                        } else {\n                            points[ctr].disabled = true;\n                            points[ctr].userDisabled = true;\n                        }\n                    }\n                    chart.update();\n                }\n                this.set('lastClick', 'temp');\n            }\n        },\n        selectReadings() {\n            let lastClick = this.get('lastClick');\n            if (lastClick === null || lastClick !== \"vals\") {\n                let chart = this.get('chart');\n                let points = this.get('chartDataPoints');\n                if (chart !== null) {\n                    for (let ctr = points.length - 2; ctr >= 0; ctr--) {\n                        if (ctr % 2 === 0) {\n                            points[ctr].disabled = true;\n                            points[ctr].userDisabled = true;\n                        } else {\n                            if (!points[ctr - 1].disabled) {\n                                points[ctr].disabled = false;\n                                points[ctr].userDisabled = false;\n                            }\n                        }\n                    }\n                    chart.update();\n                }\n                this.set('lastClick', 'vals');\n            }\n        }\n    },\n    activate: function() {\n        var id = this.get('instrumentId');\n        var inst = null;\n\n        if(id == null) {\n            id = readCookie('instrumentId');\n            if(id !== \"\") {\n                scheduleOnce('afterRender', this, function() {\n                    //console.log(\"running re-load\");\n                    this.RouterService.transitionTo('frequency-graphs.frequency-graph', id, this.get('modelName'));\n                    });\n            }\n        } else {\n            writeCookie('instrumentId', id, 1);\n        }\n    }\n});\n\nfunction writeCookie(name,value,days) {\n    var date, expires;\n    if (days) {\n        date = new Date();\n        date.setTime(date.getTime()+(days*24*60*60*1000));\n        expires = \"; expires=\" + date.toGMTString();\n            }else{\n        expires = \"\";\n    }\n    document.cookie = name + \"=\" + value + expires + \"; path=/\";\n}\n\nfunction readCookie(name) {\n    var i, c, ca, nameEQ = name + \"=\";\n    ca = document.cookie.split(';');\n    for(i=0;i < ca.length;i++) {\n        c = ca[i];\n        while (c.charAt(0)===' ') {\n            c = c.substring(1,c.length);\n        }\n        if (c.indexOf(nameEQ) === 0) {\n            return c.substring(nameEQ.length,c.length);\n        }\n    }\n    return '';\n}\n","import { computed } from '@ember/object';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    queryParams: [\n        'start_timestamp',\n        'end_timestamp',\n        'num_points_requested',\n        'ref_head_position',\n        'ref_anchor',\n        'zeroed',\n        'flip_signs',\n        'event_type',\n        'blast_type',\n        'seismic_type',\n        'frequency',\n        'chart_type',\n        'display_records',\n        'raw',\n    ],\n    start_timestamp: null,\n    end_timestamp: null,\n    num_points_requested: 300,\n    ref_head_position: \"\",\n    ref_anchor: \"0\",\n    zeroed: true,\n    modelName: null,\n    flip_signs: null,\n    //event_type: null,\n    //blast_type: null,\n    //seismic_type: null,\n    frequency: null,\n    chart: null,\n    chart_type: 'frequency',\n    display_records: 1,\n    raw: false,\n    actions: {\n        setData(data) {\n            this.send('setDataR',data);\n        },\n        setChart(chart) {\n            this.send('setChartR',chart);\n        },\n        updateProperties(propertyNames = [], propertyValues = []) {\n            const _this = this;\n            if (propertyNames.length > 0 && propertyValues.length > 0 && propertyNames.length === propertyValues.length) {\n                propertyNames.forEach( function(propertyName, i) {\n                    _this.set(propertyName, propertyValues[i]);\n                });\n            }\n        },\n        getQueryParams(variable) {\n            return this.get(variable);\n        },\n        toggleProperty(property) {\n            if ( this.get(property) === null ) {\n                this.set(property, true);\n            } else if(this.get(property) === false ) {\n                this.set(property, true);\n            } else {\n                this.set(property, false);\n            }\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    page_size: 20,\n    page: 1,\n    search: null,\n    breadCrumbs: [\n        {\n            label: \"Dashboard\",\n            path: 'index'\n        },\n        {\n        label: \"Gateway\",\n        path: 'gateway'\n    }],\n    actions: {\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n        refreshRoute() {\n            // Trigger the action in the route\n            this.send('refreshModel');\n        },\n        \n    }\n});\n","import Controller from '@ember/controller';\n\nexport default Controller.extend({\n    breadCrumbs: [\n        {\n            label: \"Dashboard\",\n            path: 'index'\n        },\n        {\n            label: \"Have an Issue?\",\n            path: 'have-an-issue'\n        }\n    ],\n});\n","import { inject as service } from \"@ember/service\";\nimport { computed } from '@ember/object';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    init() {\n        this._super(...arguments);\n        scheduleOnce('afterRender', this, function() {\n            //console.log(this.get('model'));\n        });\n    },\n    store: service(),\n    queryParams: ['page', 'page_size', 'ordering', 'search', 'searchTgt'],\n    page_size: 20,\n    instrumentsMeta: null,\n    ordering: null,\n    search: null,\n    searchTgt: null,\n    page: 1,\n    lat: 40.574706,\n    lng: -112.178131,\n    zoom: 12,\n    mapBounds: computed(function() {\n        return [[40.574706, -112.178131],[40.492465, -112.099509]];\n    }),\n    actions: {\n        sortByA(property) {\n            this.set('ordering', \"a:\" + property);\n        },\n        sortByI(property) {\n            this.set('ordering', \"i:\" + property);\n        },\n        sortByG(property) {\n            this.set('ordering', \"g:\" + property);\n            // console.log(\"Property::: \" + property)\n        },\n    }\n})\n","import { computed } from '@ember/object';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    page_size: 20,\n    page: 1,\n    search: null,\n    breadCrumbs: [\n        {\n            label: \"Dashboard\",\n            path: 'index'\n        },\n        {\n        label: \"Instruments\",\n        path: 'instruments'\n    }],\n    actions: {\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { action, set } from '@ember/object';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Controller from '@ember/controller';\n\nexport default class KeysController extends Controller{\n    isRowDeleteConfirmationDialog = {};\n    @service session;\n    @service store;\n    @service api;\n\n    @action\n    updateActive(theModel) {\n        let valid = {};\n        let active = {};\n        let ctr = 0;\n        let tooltip = {};\n\n        theModel.licenceKeys.forEach(function(theItem){\n            valid[theItem.id] = theItem.isValidKey;\n            let count = theItem.numInst;\n            let modules = theItem.modules;\n            tooltip[theItem.id] = \"\";\n            active[theItem.id] = false;\n            //console.log(modules);\n            for (var key in modules) {\n                var type = typeof modules[key];\n                if(type === \"boolean\") {\n                    if(modules[key]) {\n                        active[theItem.id] = true;\n                        tooltip[theItem.id] += capitalizeFirstLetter(key) + \"\\n\";\n                    }\n                } else {\n                    for (var key2 in modules[key]) {\n                        if(modules[key][key2]) {\n                            active[theItem.id] = true;\n                            tooltip[theItem.id] += capitalizeFirstLetter(key2) + \" \" + capitalizeFirstLetter(key) + \"\\n\";\n                        }\n                    }\n                }\n            }\n        });\n        this.set('activeKeys',valid);\n        this.set('activeModules',active);\n        this.set('tooltip',tooltip);\n    }\n\n    @action\n    async remove(model, object) {\n        await object.destroyRecord();\n        window.location.reload();\n    }\n\n    @action\n    toggleRowDeleteConfirmationDialog(id) {\n        let curVal = this.get('isRowDeleteConfirmationDialog')[id] ? false : true;\n        set(this.get('isRowDeleteConfirmationDialog'), id, curVal); //update isVisibleRowDetails variable for each single row    \n    }\n}\nfunction capitalizeFirstLetter(string) {\n    return string.charAt(0).toUpperCase() + string.slice(1);\n}\n","import { inject as service } from '@ember/service';\nimport { action, computed } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport Controller from '@ember/controller';\n\n\nexport default class ListLookupController extends Controller{\n\n    @service router;  \n    @service session;\n\n\n    isRowDeleteConfirmationDialog = {};\n    lookups = [];    \n    classNameBindings = ['editingId:active-cell-values-inline-edit'];\n    // isEditing = false;\n    rdcd = {}\n    \n    editingId = null;\n\n\n    @action\n    startEditing(lookupId, lookup) {\n        console.log(\"startEditing: editingId: \" + lookupId);\n        this.set('editingId',lookupId);\n    }\n    \n    @action\n    stopEditing(lookupId) {\n        console.log(\"stopEditing: editingId: \" + lookupId);\n        this.set('editingId',null);\n    }\n        \n\n    licenceIsValid = computed('',function() {\n        let valid = false;\n        try {\n            valid = this.session.data.authenticated.isValid;\n        } catch {}\n        return valid;\n    });\n    \n    setRDCD(value) {\n        let rdcd = this.get('isRowDeleteConfirmationDialog');\n        rdcd[value[0]] = value[1];\n        console.log(this.rdcd);\n\n        this.set('isRowDeleteConfirmationDialog', rdcd);\n        this.notifyPropertyChange('isRowDeleteConfirmationDialog');\n    };\n\n    @action\n    createLookup() {\n        console.log(\"create lookup\");\n        this.router.transitionTo('create-lookup');  // Directly use service\n    }\n    \n    @action\n    updateActive(model) {\n        model.lookups.forEach(function(item){\n            console.log(\"Item: \" + item.id);\n        });\n    }\n\n    @action\n    toggleRowDeleteConfirmationDialog(id){\n        let list = this.get('isRowDeleteConfirmationDialog');\n        let value = list[id] ? false : true;\n        this.setRDCD([id,value]);\n        //this.set('isRowDeleteConfirmationDialog', list); //update isVisibleRowDetails variable for each single row\n        //this.notifyPropertyChange('isRowDeleteConfirmationDialog');\n    }\n    \n    @action \n    save(lookupId, lookup){\n        let _this = this;\n        let _store = this.get('store');\n        lookup.save().then(function(){\n            console.log(\"Saved\")\n            _this.set('editingId', null);\n        }).catch(function(reason){\n            _this.set('editingId', null);\n            let status = reason.errors[0].status;\n            console.log(\"status: \" + status);\n            if (status == 403){\n                errBox.hidden = false;\n            }\n        });\n    }\n\n    @action\n    remove(object) {\n        console.log(\"removing record:\")\n        let _this = this;\n        let _store = this.get('store');\n        object.deleteRecord();\n\n        object.save().then(function(){                    \n            object.unloadRecord();\n        }).catch(function(reason){\n            let status = reason.errors[0].status;\n            console.log(\"status: \" + status);\n            if (status == 403) {\n                errBox.hidden = false;\n            };\n        });        \n    }\n}\n","import { computed } from '@ember/object';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    page_size: 20,\n    page: 1,\n    search: null,\n    breadCrumbs: [\n        {\n            label: \"Dashboard\",\n            path: 'index'\n        },\n        {\n        label: \"Log Viewer\",\n        path: 'log-viewer'\n    }],\n    actions: {\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n        refreshRoute() {\n            // Trigger the action in the route\n            this.send('refreshModel');\n        },\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport Controller from '@ember/controller';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\nimport Configuration from 'ember-simple-auth/configuration';\n\nexport default class LoginController extends Controller {\n  @tracked errorMessage;\n  @tracked identification;\n  @tracked password;\n  @tracked loading = false;\n  @tracked showResendVerification = false;\n  @service api;\n  @service session;\n  @service router;\n\n  @action\n  registerNewAccount() {\n    let url = this.router.urlFor('register');\n    window.open(url, '_blank');\n  }\n\n  @action\n  forgotPassword() {\n    let url = this.router.urlFor('forgot-password');\n    window.open(url, '_blank');\n  }\n \n  @action\n  onLoginKeydown(event) {\n    if (event.key === 'Enter') {\n      this.authenticateWithProvider('login');\n    }\n  }\n\n  @action\n  async authenticateWithProvider(providerName) {\n    this.errorMessage = \"\";\n\n    try {\n      if (providerName === 'login') {\n        // await this.session.authenticate('authenticator:basic-auth', providerName, {\"username\":this.identification, \"password\":this.password});\n        await this.session.authenticate(\"authenticator:jwt\", {\n          username: this.identification,\n          password: this.password,\n        });\n      } else if (providerName === 'azure-ad-oauth2') {\n        await this.session.authenticate(\"authenticator:oauth-jwt\", {\n          provider: \"azure-ad-oauth2\"\n        });\n      }\n\n      if (this.session.isAuthenticated) {\n        this.loading = true;\n        this.session.handleAuthentication(Configuration.routeAfterAuthentication);\n      }\n\n    } catch (error) {\n        const msg = error.message || 'An unknown error occurred';\n        console.log(\"authenticateWithProvider: \"  + msg)\n        this.errorMessage = msg;\n\n        // 👇 Detect exactly the backend message\n        if (msg.includes(\"not verified\")) {\n          this.showResendVerification = true;\n        } else {\n          this.showResendVerification = false;\n        }\n    }\n  }\n\n  @action\n  async resendVerification() {\n    this.loading = true;\n    this.errorMessage = \"\";\n    if (!this.identification) {\n      alert(\"Enter your username or email first.\");\n      return;\n    }\n\n    let payload = { email: this.identification };\n\n    let response = await this.api.fetch(`${getApiBaseUrl()}/api/auth/resend-verification/`, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify(payload)\n    });\n\n    let data = await response.json();\n\n    alert(data.message || \"If the account exists, a verification email has been resent.\");\n    this.errorMessage = \"\";\n    this.loading = false;\n    this.showResendVerification = false;\n  }\n\n  @action\n  updateIdentification(e) {\n    this.identification = e.target.value;\n  }\n\n  @action\n  updatePassword(e) {\n    this.password = e.target.value;\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Controller from '@ember/controller';\n\n\nexport default class MyProfileController extends Controller {\n  @service session;\n  currentTab = 'HOME';\n}\n","import { computed } from '@ember/object';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    page_size: 20,\n    page: 1,\n    search: null,\n    breadCrumbs: [\n        {\n            label: \"Dashboard\",\n            path: 'index'\n        },\n        {\n        label: \"Packs Validation Analytics\",\n        path: 'packs-validation-analytics'\n    }],\n    actions: {\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n        refreshRoute() {\n            // Trigger the action in the route\n            this.send('refreshModel');\n        },\n    }\n});\n","import { computed } from '@ember/object';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    page_size: 20,\n    page: 1,\n    search: null,\n    breadCrumbs: [\n        {\n            label: \"Dashboard\",\n            path: 'index'\n        },\n        {\n        label: \"Packs Validation\",\n        path: 'packs-validation'\n    }],\n    actions: {\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n        refreshRoute() {\n            // Trigger the action in the route\n            this.send('refreshModel');\n        },\n    }\n});\n","import { tracked } from '@glimmer/tracking';\nimport { inject as service } from '@ember/service';\nimport Controller from '@ember/controller';\n\nexport default class ApplicationController extends Controller {\n  @tracked tasks = [];\n  @service api;\n  addTask(taskName) {\n    this.tasks.pushObject({\n      name: taskName,\n      percentage: 0\n    });\n  }\n\n  updateTask(taskName, percentage) {\n    let task = this.tasks.findBy('name', taskName);\n    if (task) {\n      task.percentage = percentage;\n    }\n  }\n\n  removeTask(taskName) {\n    let task = this.tasks.findBy('name', taskName);\n    if (task) {\n      this.tasks.removeObject(task);\n    }\n  }\n\n  async updateTaskStatus(taskId) {\n    let response = await this.api.fetch(`/api/task-status/${taskId}`);\n    let { percentage, status } = await response.json();\n    \n    // Assuming you have a method to update the task percentage\n    this.updateTask(taskId, percentage);\n    \n    if (status !== 'completed') {\n      // If the task is not completed, poll again after a delay\n      setTimeout(() => this.updateTaskStatus(taskId), 2000);\n    }\n  }\n\n\n}\n\n","import { computed } from '@ember/object';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    isVisibleExportDataForm: false,\n    isVisibleImportDataForm: false,\n    displacementValuesMeta: null,\n    permissionError: false,\n    linear: false,\n    calib: false,\n    depth: false,\n    port_number:1,\n    port:1,\n    \n    breadCrumbs: computed('model', {\n        get() {\n            let instrument = this.get('model').instrument;\n            \n            let obj = null\n\n            if (instrument != null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Instruments\",\n                        path: 'instruments'\n                    },\n                    {\n                        label: instrument.id,\n                        path: 'edit-instrument',\n                        model: instrument.id,\n                    },\n                    {\n                        label: \"Raw Data\",\n                        path: 'raw-data',\n                        model: instrument.id,\n                    }\n                ]\n            }\n            return obj;\n        }\n    }),\n    hasPorts: computed('instrument', function() {\n        let channelsNum = this.get('model').instrument.channelsNum;\n        channelsNum = parseInt(channelsNum/2);\n        let hasPorts = false;\n        if(channelsNum > 1){\n            hasPorts = true;\n        } else {\n            hasPorts = false;\n        }\n        return hasPorts;\n    }),\n    ports: computed('instrument', function() {\n        let channelsNum = this.get('model').instrument.channelsNum;\n        channelsNum = parseInt(channelsNum/2);\n        let numberOfPorts = [];\n        for(let channel = 1 ; channel <= channelsNum; channel++){\n            numberOfPorts.push({\"channel\": channel});\n        }\n        // console.log(JSON.stringify(numberOfPorts));\n        return numberOfPorts;\n    }),    \n    linearData: computed('displacementValuesMeta', function() {\n        let linear = this.get('displacementValuesMeta')['linear'];\n        return linear;\n    }),\n    calibData: computed('displacementValuesMeta', function() {\n        let calib = this.get('displacementValuesMeta')['calib'];\n        return calib;\n    }),\n    depthData: computed('displacementValuesMeta', function() {\n        let depth = this.get('displacementValuesMeta')['depth'];\n        return depth;\n    }),\n    isWire: computed('model', function(instrument) {\n        let prop = this.get('model').instrument.get('instrumentType');\n        return prop.get(\"title\") === 'Wire';\n    }),\n    actions: {\n\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n        toggleDataType(property) {\n            if (property == \"raw\"){\n                this.set(\"linear\", false);\n                this.set(\"calib\", false);\n                this.set(\"depth\", false);\n            } else if (property == \"linear\") {\n                this.set(\"linear\", true);\n                this.set(\"calib\", false);\n                this.set(\"depth\", false);\n            } else if (property == \"calib\") {\n                this.set(\"linear\", false);\n                this.set(\"calib\", true);\n                this.set(\"depth\", false);\n            } else {\n                this.set(\"linear\", false);\n                this.set(\"calib\", false);\n                this.set(\"depth\", true);\n            }\n        },\n        toggleProperty(property) {\n            // console.log(property);\n            // console.log(this.get(property));\n            if ( !this.get(property) ) {\n                this.set(property, true);\n            } else {\n                this.set(property, false);\n            }\n            //console.log(this.get(property));\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    router: service(),\n    session: service(),\n    isVisibleExportDataForm: false,\n    isVisibleImportDataForm: false,\n    permissionError: false,\n    showLoading:false,\n    init(){\n        this._super(...arguments);\n        this.router.on('routeDidChange', this.handleRouteChange.bind(this));\n    },\n\n    handleRouteChange(transition) {\n        if (transition.to.name === 'raw-frequency-events-data') {\n            this.set('showLoading', false);\n        }\n    },\n\n    breadCrumbs: computed('model', {\n        get() {\n            let instrument = this.get('model').instrument;\n            \n            let obj = null\n\n            if (instrument != null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Instruments\",\n                        path: 'instruments'\n                    },\n                    {\n                        label: instrument.id,\n                        path: 'edit-instrument',\n                        model: instrument.id,\n                    },\n                    {\n                        label: \"Raw Frequency Events Data\",\n                        path: 'raw-frequency-events-data',\n                        model: instrument.id,\n                    }\n                ]\n            }\n            return obj;\n        }\n    }),\n    actions: {\n\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n        toggleProperty(property) {\n            // console.log(property);\n            // console.log(this.get(property));\n            if ( !this.get(property) ) {\n                this.set(property, true);\n            } else {\n                this.set(property, false);\n            }\n            //console.log(this.get(property));\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    queryParams: ['raw_parent_gateway'],\n\n    isVisibleExportDataForm: false,\n    isVisibleImportDataForm: false,\n    gatewayValuesMeta: null,\n    permissionError: false,\n    linear: false,\n    calib: false,\n    depth: false,\n    raw_parent_gateway: null,\n\n    breadCrumbs: computed('model', {\n        get() {\n            console.log(\"::::::::::::::::\")\n            let gateway = this.get('model').gateway;\n\n            let obj = null\n\n            if (gateway != null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Gateway\",\n                        path: 'gateway'\n                    },\n                    {\n                        label: gateway.id,\n                        path: 'edit-gateway',\n                        model: gateway.id,\n                    },\n                    {\n                        label: \"Raw Data\",\n                        path: 'raw-gateway-data',\n                        model: gateway.id,\n                    }\n                ]\n            }\n            return obj;\n        }\n    }),\n    actions: {\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n        toggleProperty(property) {\n            // console.log(property);\n            // console.log(this.get(property));\n            if ( !this.get(property) ) {\n                this.set(property, true);\n            } else {\n                this.set(property, false);\n            }\n            //console.log(this.get(property));\n        }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport Controller from '@ember/controller';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default class RegisterController extends Controller {\n\n  @tracked isSuccessful = false;\n  @tracked errorMessage;\n  @tracked identification;\n  @tracked password = '';\n  @tracked passwordStrength = 0;   // 0–4\n  @service session;\n  @service api;\n  @tracked loading = false;\n\n  @tracked isValidUsername = false;\n  usernameTips = \"150 characters or fewer. Letters, digits and @/./+/-/_ only\";\n\n  @tracked isValidEmail = false;\n  emailTips = \"Invalid email structure\";\n\n  @tracked firstName = \"\";\n  @tracked lastName = \"\";\n  @tracked email = \"\";\n  @tracked emailsSent = \"\";\n  @tracked username = \"\";\n\n  @action\n  async resendVerification() {\n    this.loading = true;\n    if (!this.email) {\n      this.errorMessage = \"Enter your email first.\";\n      return;\n    }\n\n    let url = getApiBaseUrl() + \"/api/auth/resend-verification/\";\n\n    try {\n      let response = await this.api.fetch(url, {\n        method: \"POST\",\n        headers: {\"Content-Type\": \"application/json\"},\n        body: JSON.stringify({ email: this.email })\n      });\n\n      let data = await response.json();\n\n      if (!response.ok) {\n        alert(data.error);\n        this.errorMessage = data.error || \"Unable to resend email.\";\n        this.loading = false;\n        return;\n      }\n      else{\n        this.errorMessage = \"\";\n        alert(data.message);\n        this.loading = false;\n        return;\n      }\n\n    } catch (err) {\n      this.errorMessage = \"Network error. Try again later.\";\n    }\n  }\n\n\n  @action\n  async submitRegistration(event) {\n    this.loading = true;\n    this.errorMessage = null;\n\n    try {\n      let url = getApiBaseUrl() + \"/api/auth/register/\";\n      console.log(\"url:\" + url)\n      let response = await this.api.fetch(url, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({\n          username: this.username,\n          email: this.email,\n          first_name: this.firstName,\n          last_name: this.lastName,\n          password: this.password,\n        }),\n      });\n\n      let data = await response.json();\n      if (!response.ok) {\n        alert(data.error);\n        this.errorMessage = data.error || \"Registration failed.\";\n        this.loading = false;\n        return;\n      }\n      else{\n        this.isSuccessful = true;\n          this.errorMessage = \"\";\n          alert(data.message);\n          this.loading = false;\n          this.updateEmailsSent(data[\"emails_sent\"])\n          return;\n      }\n    } catch (err) {\n      this.errorMessage = \"Network error. Please try again.\";\n    }\n    this.loading = false;\n  }\n\n  @action\n  updateUsername(event) {\n    if (this.validateUsername(event.target.value)){\n      this.username = event.target.value;\n      this.set(\"isValidUsername\", false);\n    }\n    else{\n      this.set(\"isValidUsername\", true);\n    }\n  }\n  validateUsername(inputUsername){\n    if (!inputUsername) {\n      return false;\n    }\n\n    // Length check\n    if (inputUsername.length > 150) {\n      return false;\n    }\n\n    // Character check (Django-compatible)\n    const usernameRegex = /^[\\w.@+-]+$/;\n\n    return usernameRegex.test(inputUsername);\n\n  }\n\n  @action\n  updateEmail(event) {\n    if (this.validateEmail(event.target.value)){\n      this.email = event.target.value;\n      this.set(\"isValidEmail\", false);\n    }\n    else{\n      this.set(\"isValidEmail\", true);\n    }\n  }\n  validateEmail(email){\n    if (!email) {\n      return false;\n    }\n\n    if (email.length > 254) {\n      return false;\n    }\n\n    const emailRegex =\n      /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}$/;\n\n    return emailRegex.test(email);\n\n  }\n\n  @action\n  updatePassword(event) {\n    this.password = event.target.value;\n    this.calculateStrength();\n  }\n\n  calculateStrength() {\n    let score = 0;\n    const pw = this.password;\n\n    // RULES:\n\n    // Rule 1: At least 10 chars\n    if (pw.length >= 15) score++;\n\n    // Rule 2: Contains uppercase\n    if (/[A-Z]/.test(pw)) score++;\n\n    // Rule 3: Contains number\n    if (/[0-9]/.test(pw)) score++;\n\n    // Rule 4: Contains lowercase (new rule to make 4 scales possible)\n    if (/[a-z]/.test(pw)) score++;\n\n    // Rule 5: Contains special characters\n    if (/[^A-Za-z0-9]/.test(pw)) score++;\n\n    this.passwordStrength = score;\n  }\n\n  updateEmailsSent(emailsSentArr) {\n    let result=\"\";\n    emailsSentArr.forEach(element => {\n      result += element + \"\\n\";\n    });\n    this.set(\"emailsSent\", result);\n  }\n\n  get passwordStrengthText() {\n    switch (this.passwordStrength) {\n      case 0: return \"Very Weak\";\n      case 1: return \"Weak\";\n      case 2: return \"Medium\";\n      case 3: return \"Strong\";\n      case 4: return \"Very Strong\";\n    }\n  }\n\n  get passwordStrengthBarStyle() {\n    // Convert 0–4 → 0%–100%\n    let width = (this.passwordStrength / 4) * 100;\n\n    let color = \"#ff3333\";        // red\n    if (this.passwordStrength === 1) color = \"#ff6600\"; // orange\n    if (this.passwordStrength === 2) color = \"#ffcc00\"; // yellow\n    if (this.passwordStrength === 3) color = \"#66cc33\"; // green\n    if (this.passwordStrength === 4) color = \"#009900\"; // dark green\n\n    return `width:${width}%; background:${color}; height:100%; transition: width 0.3s;`;\n  }\n  get barWidth() {\n    return `${(this.passwordStrength / 4) * 100}%`;\n  }\n\n  get barColor() {\n    let c = [\"#ff3333\", \"#ff6600\", \"#ffcc00\", \"#66cc33\", \"#009900\"];\n    return c[this.passwordStrength];\n  }\n\n\n  @action updateFirstName(e) { this.firstName = e.target.value; }\n  @action updateLastName(e) { this.lastName = e.target.value; }\n\n  @action\n  updateInfo(type, e) {\n    switch(type){\n      case \"firstname\":\n        this.firstName = e.target.value;\n        return;\n      case \"lastname\":\n        this.lastName = e.target.value;\n        return;\n      case \"email\":\n        this.email = e.target.value;\n        return;\n      case \"username\":\n        this.username = e.target.value;\n        return;\n      case \"password\":\n        this.password = e.target.value;\n        return;\n    }\n  }\n}\n","import { inject as service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Controller from \"@ember/controller\";\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default class ResetPasswordController extends Controller {\n  @tracked password = \"\";\n  @tracked passwordConfirm = \"\";\n  @tracked errorMessage = \"\";\n  @tracked success = false;\n  @service api;\n  @action\n  updateField(field, event) {\n    this[field] = event.target.value;\n  }\n\n  @action\n  async submit() {\n    this.errorMessage = \"\";\n\n    if (this.password !== this.passwordConfirm) {\n      this.errorMessage = \"Passwords do not match.\";\n      return;\n    }\n\n    const token = this.model.token;\n\n    const response = await this.api.fetch(\n      `${getApiBaseUrl()}/api/auth/password-reset/confirm/`,\n      {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({ token, password: this.password })\n      }\n    );\n\n    const data = await response.json();\n\n    if (!response.ok) {\n      this.errorMessage = data.error || \"Something went wrong.\";\n      return;\n    }\n\n    this.success = true;\n  }\n}\n","import { computed, set } from '@ember/object';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n\n    init() {\n        this._super(...arguments);\n        scheduleOnce('afterRender', this, function() {\n            //this.send('updateNav',this.get('model').licence.content[0]._data);\n        });\n    },\n    queryParams: ['page', 'page_size', 'ordering', 'search'],\n    page_size: 20,\n    eventsMeta: null,\n    ordering: null,\n    search: null,\n    isVisibleImportDataForm: null,\n    isVisibleRowDetails: {},\n    isRowDeleteConfirmationDialog: {},\n    isVisibleCreateNewForm: false,\n    permissionError: false,\n    \n    breadCrumbs: [\n        {\n            label: \"Dashboard\",\n            path: 'index'\n        },\n        {\n            label: \"Seismic Events\",\n            path: 'seismic-events'\n        },\n        \n    ],\n    \n    actions: {\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n        vewRowDetails(id){\n            let curVal = this.get('isVisibleRowDetails')[id] ? false : true;\n            set(this.get('isVisibleRowDetails'), id, curVal); //update isVisibleRowDetails variable for each single row\n        },\n        toggleRowDeleteConfirmationDialog(id){\n            let curVal = this.get('isRowDeleteConfirmationDialog')[id] ? false : true;\n            set(this.get('isRowDeleteConfirmationDialog'), id, curVal); //update isVisibleRowDetails variable for each single row\n        },\n        toggleProperty(property) {\n            //console.log('toggle property: ' + property);\n            if ( !this.get(property) ) {\n                this.set(property, true);\n            } else {\n                this.set(property, null);\n            }\n        },\n        remove(model, object){\n            let _this = this\n            object.deleteRecord();\n            object.get('isDeleted');\n            object.save().then(function(){\n                // deal with records that just were created\n                // relates to the way I add new records to model https://github.com/emberjs/data/issues/3313\n                model.removeObject(object);\n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.send('updateProperty','permissionError', true);\n                }\n            });\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        }\n    }\n});\n","import { computed } from '@ember/object';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    page_size: 20,\n    page: 1,\n    search: null,\n    breadCrumbs: [\n        {\n            label: \"Dashboard\",\n            path: 'index'\n        },\n        {\n        label: \"Sensor Calibration Analytics\",\n        path: 'sensor-calibration-analytics'\n    }],\n    actions: {\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n        refreshRoute() {\n            // Trigger the action in the route\n            this.send('refreshModel');\n        },\n    }\n});\n","import { computed } from '@ember/object';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    page_size: 20,\n    page: 1,\n    search: null,\n    breadCrumbs: [\n        {\n            label: \"Dashboard\",\n            path: 'index'\n        },\n        {\n        label: \"Sensor Calibration\",\n        path: 'sensor-calibration'\n    }],\n    actions: {\n        sortBy(property) {\n            this.set('ordering', property);\n        },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n        refreshRoute() {\n            // Trigger the action in the route\n            this.send('refreshModel');\n        },\n    }\n});\n","import Controller from '@ember/controller';\n\nexport default class SettingsController extends Controller {\n  loading = false;\n  currentTab = 'GENERAL';\n\n  resetLoading() {\n    this.set(\"loading\", false);\n  }\n}\n","import { computed } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport { inject as controller } from '@ember/controller';\nimport { inject as service } from '@ember/service';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    store: service(),\n    init() {\n        this._super(...arguments);\n        scheduleOnce('afterRender', this, function() {\n            //this.send('updateNav',this.get('model').licence.content[0]._data);\n        });\n    },\n    instrumentId: null,\n    instrumentType: null,\n    instrumentTypeId: null,\n    name: null,\n    location: null,\n    level: null,\n    project: null,\n    borehole: null,\n    modelName: '',\n    activeInstrumentMeta: null,\n    spatialGraphController: controller(\"spatial-graphs/spatial-graph\"),\n    eventType: null,\n    blastType: null,\n    seismicType: null,\n    chartDataValueName: null,\n    chartData: null,\n    instrumentAnchors: {},\n    instrumentAnchorsSorting: ['number'],\n    vendor: null,\n    breadCrumbs: computed(\"instrumentId\", {\n        get() {\n            let chart = this.get('chartDataValueName');\n            let mName = this.get('modelName');\n            let instID = this.get('instrumentId');\n            let instrument = this.get('content').instrument;\n            \n            let obj = null\n\n            if (instrument != null && instID == null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Instruments\",\n                        path: 'instruments'\n                    },\n                    {\n                        label: instrument.query,\n                        path: 'edit-instrument',\n                        model: instrument.query,\n                    }\n                ]\n            }\n            if (instID != null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Instruments\",\n                        path: 'instruments'\n                    },\n                    {\n                        label: instID,\n                        path: 'edit-instrument',\n                        model: instID,\n                    },\n                    {\n                        label: \"Spatial \" + chart + \" Graph\",\n                        path: \"spatial-graphs.spatial-graph\",\n                        model: instID,\n                        model: mName\n                    },\n                ];\n            }\n            return obj;\n        }\n    }),\n    vendor: computed('instrumentId', function() {\n        let id = this.get('instrumentId');\n        let vendor = null;\n        if (id !== null) {\n            const instrument = this.store.peekRecord('instrument', id);\n            if (instrument) {\n                vendor = instrument.get('vendor');\n            }\n        }\n        return vendor;\n    }),\n\n    isThermo: computed('instrumentType', function() {\n        //console.log(this.instrumentType);\n        if (this.instrumentType === 'Thermostring') {\n            return true;\n        }\n        return false;\n    }),\n    isRebar: computed('instrumentType', function() {\n        if (this.instrumentType === 'dRebarv2') {\n            return true;\n        }\n        return false;\n    }),\n    \n    displayData: computed('instrumentId', function() {\n        if (this.instrumentId !== null) {\n            return true;\n        } else {\n            return false;\n        }\n    }),\n\n    details: computed('name', 'project', 'location', 'level', 'borehole', 'instrumentId', function() {\n        var detailString = \"\";\n        let projectId = this.get('project'); // Assuming project has an 'id' field\n        let projectName = this.get('project.name'); // Assuming project has a 'name' field\n        \n        let levelId = this.get('level.id'); // Assuming level has an 'id' field\n        let levelName = this.get('level.name'); // Assuming level has a 'name' field\n        let badCodes = ['null', 'undefined', ''];\n        \n        if (this.instrumentId !== null) {\n            if (!badCodes.includes(projectName) && projectName != null && projectName != undefined) {\n                // console.log(\"::::::::::::in projectId\")\n                detailString += projectName + ' / ';\n            }\n            \n            if ( !badCodes.includes(this.get('location')) ) {\n                // console.log(\"::::::::::::in location\")\n                detailString += this.get('location') + ' / ';\n            }\n            \n            if (!badCodes.includes(levelName) && levelName != null && levelName != undefined) {\n                // console.log(\"::::::::::::in levelId\")\n                detailString += levelName + ' / ';\n            }\n            \n            if (!badCodes.includes(this.get('borehole')) ) {\n                // console.log(\"::::::::::::in borehole\")\n                detailString += this.get('borehole') + ' / ';\n            }\n                \n            if (detailString !== \"\" && detailString != 'Details:  /') {\n                detailString = detailString.substr(0, detailString.length - 3);\n            }\n        }\n        return detailString;\n    }),\n\n    isAdictMDT: computed('instrumentType', function() {\n\n        if(this.instrumentType.toLowerCase() === 'adict' && this.vendor.vendorType.includes('MDT')) {\n            return true;\n        }\n        return false;\n    }),            \n    instrumentAnchorsSorted: sort('instrumentAnchors', 'instrumentAnchorsSorting'),\n\n    instrumentAnchorsForAdictMDT: computed('instrumentAnchors', function() {\n        let instrumentAnchors = this.instrumentAnchorsSorted;\n        \n        // Check if there are anchors to remove\n        if (instrumentAnchors.length > 0) {\n            instrumentAnchors.pop(); // Remove the last anchor\n        }\n        return instrumentAnchors;\n    }),\n\n    allInstruments: filter('model.instruments', function(instrument) {\n        if (instrument.get('anchorCount') > 0) {\n            return true;\n        }\n    }),\n    refHeadPosition: computed('activeInstrumentMeta', function () {\n        return this.get('activeInstrumentMeta')['ref-head-position'];\n    }),\n    timeRef: computed('activeInstrumentMeta', function () {\n        return this.get('activeInstrumentMeta')['zeroed'];\n    }),\n    flipSigns: computed('activeInstrumentMeta', function () {\n        return this.get('activeInstrumentMeta')['flip-signs'];\n    }),\n    instruments: map('allInstruments', function(instrument) {\n        return {\n            title: instrument.get('id'),\n            value: instrument.get('id')\n        };\n    }),\n    frequencySelect: '10',\n    groupTime: false,\n    groupWindow: true,\n    // needed for filtered select list to be able to set active instrument on page reload\n    initialInstrumentSelection: computed('instruments', 'instrumentId', function () {\n\n        var id = this.get('instrumentId');\n        \n        if(id !== null) {\n            writeCookie('instrumentId', id, 0.02);\n        }\n        \n        return this.get('instruments').findBy('title', this.get('instrumentId'));\n    }),\n    actions: {\n        updateNav(licence) {\n            let modules = licence.modules;\n            if(licence.isValid) {\n                if(licence.withinLimit) {\n                    if(!modules.temporal) {\n                        document.getElementById(\"temp-link\").style.display = \"none\";\n                    } else {\n                        document.getElementById(\"temp-link\").style.display = \"block\";\n                    }\n                    if(!modules.spatial) {\n                        document.getElementById(\"licence-error-module\").style.display = \"block\";\n                        document.getElementById(\"spat-link\").style.display = \"none\";\n                    } else {\n                        document.getElementById(\"spat-link\").style.display = \"block\";\n                    }\n                    if(!modules.frequency) {\n                        document.getElementById(\"freq-link\").style.display = \"none\";\n                    } else {\n                        document.getElementById(\"freq-link\").style.display = \"block\";\n                    }    \n                    document.getElementById(\"licence-error-instruments\").style.display = \"none\";\n                } else {\n                    document.getElementById(\"licence-error-instruments\").style.display = \"block\";\n                }\n                document.getElementById(\"licence-error-expired\").style.display = \"none\";\n            } else {\n                document.getElementById(\"licence-error-expired\").style.display = \"block\";\n            }\n        },\n        updateProperties(propertyNames = [], propertyValues = []) {\n            const _this = this;\n            if (propertyNames.length > 0 && propertyValues.length > 0 && propertyNames.length === propertyValues.length) {\n                propertyNames.forEach( function(propertyName, i) {\n                    _this.set(propertyName, propertyValues[i]);\n                });\n            }\n        },\n        toggleProperty(property) {\n            this.get('spatialGraphController').send('toggleProperty', property);\n        },\n        updateActivefrequency(query) {\n            if (query.frequency) {\n                this.set('frequencySelect', query.frequency.charAt(0).toUpperCase() + query.frequency.slice(1));\n            } else if (query.frequency_num) {\n                this.set('frequencySelect', query.frequency_num);\n            } else if (query.events_only) {\n                this.set('frequencySelect', 'Events only');\n            }\n        },\n        updateGroupMode(query) {\n            if (query.group_window==='true') {\n                var freq = this.get('frequencySelect');\n                this.set('groupWindow', true);\n                this.set('groupTime', false);\n            } else if (query.group_time==='true') {\n                var freq = this.get('frequencySelect');\n                this.set('groupWindow', false);\n                this.set('groupTime', true);\n            } else {\n                this.set('groupTime', false);\n                this.set('groupWindow', true);\n                //this.set('frequencySelect', 10);\n            }\n        },\n        onUpdateTransitionTo(selection) {\n            if (this.get('modelName') === null) {\n                this.set('modelName', 'displacement-values');\n            }\n\n            let typeID = selection.value.substr(selection.value.length === 9 ? 5 : 6, 1);\n            let modelName = this.get('modelName');\n            // dRebarv2?\n            let isRebarGraph = (modelName === 'axial-strain-values' || modelName === 'bending-strain-values' || modelName === 'axial-displacement-values');\n            if (typeID === \"3\" || typeID === \"17\") { //isrebar\n                if (!isRebarGraph && modelName !== 'load-values') {\n                    this.set('modelName', 'axial-displacement-values');\n                }\n            } else {\n                // dRebarv2?\n                if (isRebarGraph) {\n                    this.set('modelName', 'displacement-values');\n                }\n            }\n            this.RouterService.transitionTo('spatial-graphs.spatial-graph', selection.value, this.get('modelName'));\n        }\n    },\n    setChart(chart) {\n        this.set('chart',chart);\n    },\n    setData(data) {\n        this.set('chartDataPoints', data);\n    },\n    activate: function() {\n        //static var blah = \"\";\n        var id = this.get('instrumentId');\n        var inst = null;\n\n        //console.log(blah);\n\n        //console.log(\"before cookies: \" + id);\n        if(id === null) {\n            id = readCookie('instrumentId');\n            //inst = this.get('instruments').findBy('title', id);\n            //window.location.href = \"/spatial-graph/\" + id + \"/displacement-values\";\n\n            //console.log(\"after cookies: \" + id);\n            if(id !== \"\") {\n                scheduleOnce('afterRender', this, function() {\n                    //console.log(\"running re-load\");\n                    this.RouterService.transitionTo('spatial-graphs.spatial-graph', id, this.get('modelName'));\n                    });        \n            }\n\n        } else {\n            writeCookie('instrumentId', id, 1);\n        }\n    }\n});\n\nfunction writeCookie(name,value,days) {\n    var date, expires;\n    if (days) {\n        date = new Date();\n        date.setTime(date.getTime()+(days*24*60*60*1000));\n        expires = \"; expires=\" + date.toGMTString();\n            }else{\n        expires = \"\";\n    }\n    document.cookie = name + \"=\" + value + expires + \"; path=/\";\n}\n\nfunction readCookie(name) {\n    var i, c, ca, nameEQ = name + \"=\";\n    ca = document.cookie.split(';');\n    for(i=0;i < ca.length;i++) {\n        c = ca[i];\n        while (c.charAt(0)===' ') {\n            c = c.substring(1,c.length);\n        }\n        if (c.indexOf(nameEQ) === 0) {\n            return c.substring(nameEQ.length,c.length);\n        }\n    }\n    return '';\n}\n","import { computed } from '@ember/object';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    queryParams: [\n        'start_timestamp',\n        'end_timestamp',\n        'num_points_requested',\n        'ref_head_position',\n        'ref_anchor',\n        'zeroed',\n        'flip_signs',\n        'event_type',\n        'blast_type',\n        'seismic_type',\n        'frequency',\n        'frequency_num',\n        'events_only',\n        'group_time',\n        'group_window',\n        'side'\n    ],\n    start_timestamp: null,\n    end_timestamp: null,\n    num_points_requested: 20,\n    ref_head_position: \"\",\n    ref_anchor: \"0\",\n    zeroed: true,\n    modelName: null,\n    flip_signs: null,\n    event_type: null,\n    blast_type: null,\n    seismic_type: null,\n    frequency: null,\n    frequency_num: 10,\n    events_only: null,\n    group_time: null,\n    group_window: null,\n    side:\"A\",\n    actions: {\n        setData(data) {\n            this.send('setDataR',data);\n        },\n        setChart(chart) {\n            this.send('setChartR',chart);\n        },\n        updateProperties(propertyNames = [], propertyValues = []) {\n            const _this = this;\n            if (propertyNames.length > 0 && propertyValues.length > 0 && propertyNames.length === propertyValues.length) {\n                propertyNames.forEach( function(propertyName, i) {\n                    _this.set(propertyName, propertyValues[i]);\n                });\n            }\n        },\n        getQueryParams(variable) {\n            return this.get(variable);\n        },\n        toggleProperty(property) {\n            if ( this.get(property) === null ) {\n                this.set(property, true);\n            } else if(this.get(property) === false ) {\n                this.set(property, true);\n            }  else {\n                this.set(property, false);\n            }\n        }\n    }\n});\n","import { computed, observer } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport { capitalize } from '@ember/string';\nimport { inject as controller } from '@ember/controller';\nimport { inject as service } from '@ember/service';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    queryParams: ['parentGateway'],\n    init() {\n        this._super(...arguments);\n        scheduleOnce('afterRender', this, function() {\n            //this.send('updateNav',this.get('model').licence.content[0]._data);\n        });\n    },\n    gatewayId: null,\n    gatewayType: null,\n    gatewayTypeId: null,\n    name: null,\n    location: null,\n    level: null,\n    project: null,\n    modelName: '',\n    activeGatewayMeta: null,\n    temporalGatewayGraphController: controller(\"temporal-gateway-graphs/temporal-gateway-graph\"),\n    chartDataValueName: null,\n    chartData: null,\n    chart: null,\n    chartDataPoints: null,\n    adjust_scales: false,\n    auto_scale: true,\n    y_min: null,\n    y_max: null,\n    y_min_old: null,\n    y_max_old: null,\n    y_min_auto: null,\n    y_max_auto: null,\n    auto_scale_2: true,\n    y_min_2: null,\n    y_max_2: null,\n    y_min_old_2: null,\n    y_max_old_2: null,\n    y_min_auto_2: null,\n    y_max_auto_2: null,\n    lastClick: null,\n    gatewayAnchors: {},\n    gatewayAnchorsSorting: ['number'],\n    depthChecked: '',\n    chart_type: null,\n    display_records: null,\n    left_axis_field: null,\n    right_axis_field: null,\n    port: null,\n    chart_parent_gateway: null,\n    parentGateway: null,\n\n    rawChecked: computed('depthChecked', function() {\n        if (this.get('depthChecked') == '')\n            return 'Checked'\n        else\n            return ''\n    }),\n\n    breadCrumbs: computed(\"gatewayId\", {\n        get() {\n            let badCodes = ['null', 'undefined', ''];\n            let chart = this.get('chartDataValueName');\n            let mName = this.get('modelName');\n            let gateway = this.get('content').gateway;\n            let gatewayID = gateway.id;\n            let parentGateway = this.get('chart_parent_gateway');\n            // if parentGateway is valid\n            if( !badCodes.includes(this.get('parentGateway')) )\n                parentGateway = this.get('parentGateway');\n            \n            // console.log(\"parentGateway::: \" + parentGateway);\n            let obj = null\n            \n            //chart = this.get('chart_type');\n\n            if (gateway != null && gatewayID == null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Gateway\",\n                        path: 'gateway'\n                    },\n                    {\n                        label: gateway.query,\n                        path: 'edit-gateway',\n                        model: gateway.query,\n                    }\n                ]\n            }\n\n            if (gatewayID != null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Gateways\",\n                        path: 'gateway'\n                    },\n                    {\n                        label: gatewayID,\n                        path: 'edit-gateway',\n                        model: gatewayID,\n                        queryParams: {\n                            parentGateway: this.parentGateway // Include the parentGateway in the queryParams\n                        }\n                    },\n                    {\n                        label: \"Temporal \" + chart + \" Graph\",\n                        path: \"temporal-gateway-graphs.temporal-gateway-graph\",\n                        // model: gatewayID,\n                        model: mName == ''? \"voltage-values\": mName,\n                    },\n                ];\n            }\n            return obj;\n        }\n    }),\n\n    _isChartJS: computed('chart', function() {\n        var chart = this.get('chart');\n        return chart && !chart.y1Axis;\n    }),\n    chartChanged: observer('chart', function() {\n        var chart = this.get('chart');\n        if (!chart) return;\n        if (this.get('_isChartJS')) {\n            this.set('auto_scale', true);\n            this.set('auto_scale_2', true);\n            return;\n        }\n        var domain = chart.y1Axis.scale().domain();\n        this.set('y_min',toFixed(domain[0],2));\n        this.set('y_max',toFixed(domain[1],2));\n        this.set('y_min_old',null);\n        this.set('y_max_old',null);\n        var domain2 = chart.y2Axis.scale().domain();\n        this.set('y_min_2',toFixed(domain2[0],2));\n        this.set('y_max_2',toFixed(domain2[1],2));\n        this.set('y_min_old_2',null);\n        this.set('y_max_old_2',null);\n        this.send('disableTemp');\n        this.set('auto_scale',true);\n        this.set('auto_scale_2',true);\n    }),\n    valueChanged: observer('y_min','y_max', function() {\n        var chart = this.get('chart');\n        if (!chart) return;\n        if (this.get('_isChartJS')) {\n            if (!this.auto_scale) {\n                var yMin = this.get('y_min');\n                var yMax = this.get('y_max');\n                chart.options.scales.y.min = (yMin != null && yMin !== '') ? parseFloat(yMin) : undefined;\n                chart.options.scales.y.max = (yMax != null && yMax !== '') ? parseFloat(yMax) : undefined;\n                chart.update('none');\n            }\n            return;\n        }\n        if (!this.auto_scale) {\n            chart.yDomain1([this.get('y_min'),this.get('y_max')]);\n        }\n        chart.update();\n    }),\n\n    autoScaleChanged: observer('auto_scale', function() {\n        var chart = this.get('chart');\n        if (!chart) return;\n        if (this.get('_isChartJS')) {\n            if (this.auto_scale) {\n                chart.options.scales.y.min = undefined;\n                chart.options.scales.y.max = undefined;\n            } else {\n                var yMin = this.get('y_min');\n                var yMax = this.get('y_max');\n                chart.options.scales.y.min = (yMin != null && yMin !== '') ? parseFloat(yMin) : undefined;\n                chart.options.scales.y.max = (yMax != null && yMax !== '') ? parseFloat(yMax) : undefined;\n            }\n            chart.update('none');\n            return;\n        }\n        if (this.auto_scale) {\n            this.set('y_min_old', this.y_min);\n            this.set('y_max_old', this.y_max);\n\n            chart.yDomain1(null,null);\n            chart.update();\n\n            var domain = chart.y1Axis.scale().domain();\n            this.set('y_min',toFixed(domain[0],2));\n            this.set('y_max',toFixed(domain[1],2));\n        } else {\n            if (this.get('y_min_old') !== null) {\n                this.set('y_min', this.y_min_old);\n                this.set('y_max',this.y_max_old);\n            }\n            chart.yDomain1([this.get('y_min'),this.get('y_max')]);\n            chart.update();\n        }\n    }),\n\n    valueChanged2: observer('y_min_2','y_max_2', function() {\n        var chart = this.get('chart');\n        if (!chart) return;\n        if (this.get('_isChartJS')) {\n            if (!this.auto_scale_2) {\n                var yMin2 = this.get('y_min_2');\n                var yMax2 = this.get('y_max_2');\n                chart.options.scales.y2.min = (yMin2 != null && yMin2 !== '') ? parseFloat(yMin2) : undefined;\n                chart.options.scales.y2.max = (yMax2 != null && yMax2 !== '') ? parseFloat(yMax2) : undefined;\n                chart.update('none');\n            }\n            return;\n        }\n        if (!this.auto_scale_2) {\n            chart.yDomain2([this.get('y_min_2'),this.get('y_max_2')]);\n            chart.update();\n        }\n    }),\n    autoScaleChanged2: observer('auto_scale_2', function() {\n        var chart = this.get('chart');\n        if (!chart) return;\n        if (this.get('_isChartJS')) {\n            if (this.auto_scale_2) {\n                chart.options.scales.y2.min = undefined;\n                chart.options.scales.y2.max = undefined;\n            } else {\n                var yMin2 = this.get('y_min_2');\n                var yMax2 = this.get('y_max_2');\n                chart.options.scales.y2.min = (yMin2 != null && yMin2 !== '') ? parseFloat(yMin2) : undefined;\n                chart.options.scales.y2.max = (yMax2 != null && yMax2 !== '') ? parseFloat(yMax2) : undefined;\n            }\n            chart.update('none');\n            return;\n        }\n        if (this.auto_scale_2) {\n            this.set('y_min_old_2', this.y_min_2);\n            this.set('y_max_old_2', this.y_max_2);\n\n            chart.yDomain2(null,null);\n            chart.update();\n\n            var domain = chart.y2Axis.scale().domain();\n            this.set('y_min_2',toFixed(domain[0],2));\n            this.set('y_max_2',toFixed(domain[1],2));\n        } else {\n            if (this.get('y_min_old_2') !== null) {\n                this.set('y_min_2', this.y_min_old_2);\n                this.set('y_max_2', this.y_max_old_2);\n            }\n            chart.yDomain2([this.get('y_min_2'),this.get('y_max_2')]);\n            chart.update();\n        }\n    }),\n\n    window_value: computed('window', function() {\n        if (this.window === '60') {\n            return '1 Hour';\n        }\n        if (this.window === '480') {\n            return '8 Hours';\n        }\n        if (this.window === '1440') {\n            return '24 Hours';\n        }\n    }),\n\n    displayData: computed('gatewayId', function() {\n        if (this.gatewayId !== null) {\n            return true;\n        } else {\n            return false;\n        }\n    }),\n\n    details: computed('name', 'project', 'location', 'level', 'gatewayId', function() {\n        var detailString = \"\";\n        if (this.gatewayId !== null) {\n            if (this.project !== null && this.project !== \"\") {\n                detailString += this.project + ' / '; }\n            if (this.location !== null && this.location !== \"\") {\n                detailString += this.location + ' / '; }\n            if (this.level !== null && this.level !== \"\") {\n                detailString += this.level + ' / '; }\n            if (detailString !== \"\") {\n                detailString = detailString.substring(0,detailString.length - 3);\n            }\n        }\n        return detailString;\n    }),\n\n    temperatureIsValid: computed('gatewayType', function() {\n        return false;\n    }),\n\n    gatewayAnchorsSorted: sort('gatewayAnchors', 'gatewayAnchorsSorting'),\n    depthData: computed('gatewayValuesMeta', function() {\n        let depth = this.get('gatewayValuesMeta')['depth'];\n        return depth;\n    }),\n    timeRef: computed('activeGatewayMeta', function () {\n        return this.get('activeGatewayMeta')['zeroed'];\n    }),\n    allGateway: filter('model.gateway', function(gateway) {\n        if (gateway.get('anchorCount') > 0) {\n            return true;\n        }\n    }),\n    gateway: map('allGateway', function(gateway) {\n        return {\n            title: gateway.get('id'),\n            value: gateway.get('id')\n        };\n    }),\n\n    initialGatewaySelection: computed('gateway', 'gatewayId', function () {\n\n        var id = this.get('gatewayId');\n\n        if(id !== null) {\n            writeCookie('gatewayId', id, 0.02);\n        }\n\n        return this.get('gateway').findBy('title', this.get('gatewayId'));\n    }),\n    actions: {\n        selectAxis(gatewayId, modelName){\n           //console.log(\"Select Axis::: \")\n           //console.log(\"Select Axis::: \"+ this.get('right_axis_field'));\n           //console.log(\"Select Axis::: \"+ this.get('left_axis_field'));\n           //console.log(\"Select Axis::: \"+ gatewayId);\n           //console.log(\"Select Axis::: \"+ modelName);           \n            //this.get('router').transitionTo('temporal-gateway-graphs.temporal-gateway-graph', id, 'voltage-values');\n\n            // code to save or sendAction\n            // e.g. let selectedOption = this.get('selectedOption')\n            // this.sendAction('submit', selectedOption)\n        },\n        setDepth(value) {\n            this.set('depthChecked', value == true ? 'Checked' : '');\n        },\n        updateNav(licence) {\n            // this.get('temporalGraphController').send('setController', this);\n            let modules = licence.modules;\n            if(licence.isValid) {\n                if(licence.withinLimit) {\n                    if(!modules.temporal) {\n                        document.getElementById(\"temp-link\").style.display = \"none\";\n                        document.getElementById(\"licence-error-module\").style.display = \"block\";\n                    } else {\n                        document.getElementById(\"temp-link\").style.display = \"block\";\n                    }\n                    if(!modules.spatial) {\n                        document.getElementById(\"spat-link\").style.display = \"none\";\n                    } else {\n                        document.getElementById(\"spat-link\").style.display = \"block\";\n                    }\n                    if(!modules.frequency) {\n                        document.getElementById(\"freq-link\").style.display = \"none\";\n                    } else {\n                        document.getElementById(\"freq-link\").style.display = \"block\";\n                    }\n\n                    document.getElementById(\"licence-error-instruments\").style.display = \"none\";\n                } else {\n                    document.getElementById(\"licence-error-instruments\").style.display = \"block\";\n                }\n                document.getElementById(\"licence-error-expired\").style.display = \"none\";\n            } else {\n                document.getElementById(\"licence-error-expired\").style.display = \"block\";\n            }\n        },\n        updateProperties(propertyNames = [], propertyValues = []) {\n            const _this = this;\n            if (propertyNames.length > 0 && propertyValues.length > 0 && propertyNames.length === propertyValues.length) {\n                propertyNames.forEach( function(propertyName, i) {\n                    _this.set(propertyName, propertyValues[i]);\n                });\n            }\n        },\n        toggleDataType(property) {\n            this.get('temporalGraphController').send('toggleDataType', property);\n        },\n        toggleProperty(property) {\n            this.get('temporalGraphController').send('toggleProperty', property);\n        },\n        toggleLocalProperty(property) {\n            let propValue = false;\n            if ( this.get(property) === null ) {\n                propValue = true;\n            } else if(this.get(property) === false ) {\n                propValue = true;\n            }\n            this.set(property, propValue);\n        },\n        updateLocalProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n        onUpdateTransitionTo(selection) {\n           //console.log(\"temporalcontroller: selection: \" + selection.value)\n            if (this.get('modelName') === null || this.get('modelName') == '') {\n                \n                this.set('modelName', 'gateway-value');\n            }\n\n            this.tra('temporal-gateway-graphs.temporal-gateway-graph', selection.value, this.get('modelName'));\n        },        \n        setChart(chart) {\n            this.set('chart',chart);\n        },\n        setData(data) {\n            this.set('chartDataPoints', data);\n        },\n        disableTemp() {\n            let chart = this.get('chart');\n            let points = this.get('chartDataPoints');\n            if (chart !== null) {\n                points.forEach(function(element) {\n                    if (element.yAxis === 2) {\n                        element.disabled = true;\n                        element.userDisabled = true;\n                        //chart.update();\n                    }\n                });\n            }\n        },\n        saveImage() {\n            //console.log(\"SAVE SCREEN\");\n            html2canvas(document.querySelector(\"#capture\"), { allowTaint: true, foreignObjectRendering: true,\n                onrendered: function (canvas) {\n                    let downloadLink = document.createElement('a');\n                    downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                    canvas.toBlob(function(blob) {\n                        let url = URL.createObjectURL(blob);\n                        downloadLink.setAttribute('href', url);\n                        downloadLink.click();\n                      });\n                }\n            });\n        },\n        selectTemps() {\n            let lastClick = this.get('lastClick');\n            if (lastClick === null || lastClick !== \"temp\") {\n                let chart = this.get('chart');\n                let points = this.get('chartDataPoints');\n                if (chart !== null) {\n                    for (let ctr = 0; ctr < points.length - 2; ctr++) {\n                        if (ctr % 2 === 0) {\n                            if (!points[ctr + 1].disabled) {\n                                points[ctr].disabled = false;\n                                points[ctr].userDisabled = false;\n                            }\n                        } else {\n                            points[ctr].disabled = true;\n                            points[ctr].userDisabled = true;\n                        }\n                    }\n                    chart.update();\n                }\n                this.set('lastClick', 'temp');\n            }\n        },\n        selectReadings() {\n            let lastClick = this.get('lastClick');\n            if (lastClick === null || lastClick !== \"vals\") {\n                let chart = this.get('chart');\n                let points = this.get('chartDataPoints');\n                if (chart !== null) {\n                    for (let ctr = points.length - 2; ctr >= 0; ctr--) {\n                        if (ctr % 2 === 0) {\n                            points[ctr].disabled = true;\n                            points[ctr].userDisabled = true;\n                        } else {\n                            if (!points[ctr - 1].disabled) {\n                                points[ctr].disabled = false;\n                                points[ctr].userDisabled = false;\n                            }\n                        }\n                    }\n                    chart.update();\n                }\n                this.set('lastClick', 'vals');\n            }\n        }\n    },\n    activate: function() {\n        var id = this.get('gatewayId');\n\n        if(id === null) {\n            id = readCookie('gatewayId');\n            if(id !== \"\") {\n                scheduleOnce('afterRender', this, function() {\n                    //console.log(\"running re-load\");\n                    this.transitionToRoute('temporal-gateway-graphs.temporal-gateway-graph', id, this.get('modelName'));\n                    });\n            }\n        } else {\n            writeCookie('gatewayId', id, 1);\n        }\n    }\n});\n\nfunction toFixed(value, numDecimals) {\n    var roundVal = Math.pow(10, numDecimals);\n    var answer = 0;\n    if (value > 0) {\n        answer = Math.ceil(value * roundVal) / roundVal;\n    } else {\n        answer = Math.floor(value * roundVal) / roundVal;\n    }\n    return answer;\n}\n\nfunction writeCookie(name,value,days) {\n    var date, expires;\n    if (days) {\n        date = new Date();\n        date.setTime(date.getTime()+(days*24*60*60*1000));\n        expires = \"; expires=\" + date.toGMTString();\n            }else{\n        expires = \"\";\n    }\n    document.cookie = name + \"=\" + value + expires + \"; path=/\";\n}\n\nfunction readCookie(name) {\n    var i, c, ca, nameEQ = name + \"=\";\n    ca = document.cookie.split(';');\n    for(i=0;i < ca.length;i++) {\n        c = ca[i];\n        while (c.charAt(0)===' ') {\n            c = c.substring(1,c.length);\n        }\n        if (c.indexOf(nameEQ) === 0) {\n            return c.substring(nameEQ.length,c.length);\n        }\n    }\n    return '';\n}\n","import { computed, observer } from '@ember/object';\nimport { inject as controller } from '@ember/controller';\nimport { inject as service } from '@ember/service';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    queryParams: [\n        'start_timestamp',\n        'end_timestamp',\n        'num_points_requested',\n        'ref_anchor',\n        'zeroed',\n        'depth',\n        'window',\n        'chart_type',\n        'display_records',\n        'right_axis_field',\n        'left_axis_field',\n        'port',\n        'chart_parent_gateway',\n    \n    ],\n    start_timestamp: null,\n    end_timestamp: null,\n    num_points_requested: 300,\n    ref_anchor: \"0\",\n    zeroed: true,\n    depth: false,\n    modelName: null,\n    window: 480,\n    chart: null,\n    chart_type: null,\n    display_records: 100,\n    right_axis_field: null,\n    left_axis_field: null,\n    port:1,\n    chart_parent_gateway:null,\n    \n    temporalGraphsController: controller(\"temporal-gateway-graphs\"),\n    \n    depthObserver: observer('depth', function() {\n        this.get('temporalGraphsController').send('setDepth', this.get('depth'));\n    }),\n\n    actions: {\n        toggleDataType(property) {\n            if (property == \"raw\"){\n               this.set(\"depth\", false);\n            } else {\n               this.set(\"depth\", true);\n            }\n        },\n        setData(data) {\n            this.send('setDataR',data);\n        },\n        setChart(chart) {\n            this.send('setChartR',chart);\n        },\n        updateWindow(window) {\n            this.set('window', window);\n        },\n        updateProperties(propertyNames = [], propertyValues = []) {\n            const _this = this;\n            if (propertyNames.length > 0 && propertyValues.length > 0 && propertyNames.length === propertyValues.length) {\n                propertyNames.forEach( function(propertyName, i) {\n                    _this.set(propertyName, propertyValues[i]);\n                });\n            }\n        },\n        getQueryParams(variable) {\n            return this.get(variable);\n        },\n        toggleProperty(property) {\n            let propValue = false;\n            if ( this.get(property) === null ) {\n                propValue = true;\n            } else if(this.get(property) === false ) {\n                propValue = true;\n            }\n            this.set(property, propValue);\n        }\n    }\n});\n","import { computed, observer, set } from '@ember/object';\nimport { filter, map, sort } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { inject as controller } from '@ember/controller';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n// import html2canvas from 'html2canvas';\nimport compareAnchors from '../helpers/compare-anchors';\nimport { getAnchorCountFromId, getSubModelFromId } from '../utils/instrument-id';\n\nexport default Controller.extend({\n    store: service(),\n\n    willDestroy() {\n        // Call the super implementation to make sure the hook is called in parent classes\n        this._super(...arguments);\n        // console.log(\"willDestroy:::::::::::::::::\");\n        // let activeInstrumentMeta = this.get('activeInstrumentMeta');\n        // if (activeInstrumentMeta) {\n        //     set(activeInstrumentMeta, 'flip-signs', false);\n        // }\n    },\n    init() {\n        this._super(...arguments);\n        // this.defaultAnchorNumber = this.instrumentAnchorsSorted[0] && this.instrumentAnchorsSorted[0].number;\n        console.log(this)\n    },\n    instrumentId: null,\n    instrumentTypeId: null,\n    name: null,\n    location: null,\n    level: null,\n    borehole: null,\n    project: null,\n    modelName: '',\n    activeInstrumentMeta: null,\n    temporalGraphController: controller(\"temporal-graphs/temporal-graph\"),\n    eventType: null,\n    blastType: null,\n    seismicType: null,\n    chartDataValueName: null,\n    advancedYAxisUnit: null,\n    chartData: null,\n    frequency: null,\n    tiltMode: null,\n    chart: null,\n    chartDataPoints: null,\n    adjust_scales: false,\n    zeroed: true,\n    auto_scale: true,\n    y_min: null,\n    y_max: null,\n    y_min_old: null,\n    y_max_old: null,\n    y_min_auto: null,\n    y_max_auto: null,\n    auto_scale_2: true,\n    y_min_2: null,\n    y_max_2: null,\n    y_min_old_2: null,\n    y_max_old_2: null,\n    y_min_auto_2: null,\n    y_max_auto_2: null,\n    lastClick: null,\n    instrumentAnchors: {},\n    instrumentAnchorsSorting: ['number'],\n    test: null,\n    linearChecked: '',\n    calibChecked: 'Checked',\n    depthChecked: '',\n    tiltZUp: 0,\n    chart_type: null,\n    display_records: null,\n    previousAnchor: 0,\n    router: service(),\n    vendor: null,\n    port:1,\n    selectedAnchor:0,\n    shouldRerender: false,\n\n    instrument: computed(function() {\n        \n        let instrument = this.content.instrument;\n\n        if (instrument !== null) {\n            return instrument;\n        }\n        return null;\n    }),\n    getAnchor: computed('previousAnchor', function() {\n        // console.log(\"previousAnchor::: \" + this.get(\"previousAnchor\"));\n        return this.get(\"previousAnchor\");\n    }),\n\n    instrumentType: computed('instrument', {\n        get() {\n            let instrument = this.get('instrument');\n            if (!instrument) return null;\n            let instrumentType = instrument.instrumentType;\n            if (!instrumentType) return null;\n            return instrumentType.title;\n        },\n        set(key, value) {\n            return value;\n        }\n    }),\n    \n    getInstrumentTypeToLower() {    \n        return this.get('instrumentType').toLowerCase();\n    },\n\n    isDPPC: computed('instrumentId', function() {\n        let instrumentType = this.getInstrumentTypeToLower();\n        let isDPPC = false;\n        if (instrumentType != null && instrumentType != 'undefined' && instrumentType === 'dppc') {\n            isDPPC = true;\n        }\n        // console.log(\"isDPPC::: \" + isDPPC);\n        // console.log(\"PORT:::::::::: \" + this.get('port'));\n        return isDPPC;\n    }),\n\n    rawChecked: computed('linearChecked', 'calibChecked', 'depthChecked', function() {\n        if (this.get('linearChecked') == '' && this.get('calibChecked') == '' && this.get('depthChecked') == '')\n            return 'Checked'\n        else\n            return ''\n    }),\n    vendor: computed('instrumentId', function() {\n        \n        let id = this.get('instrumentId');\n        let vendor = null;\n        if (id !== null) {\n            const instrument = this.store.peekRecord('instrument', id);\n            if (instrument) {\n                vendor = instrument.get('vendor');\n            }\n        }\n        return vendor;\n    }),\n    breadCrumbs: computed(\"instrumentId\", {\n        get() {\n            let chart = this.get('chartDataValueName');\n            let mName = this.get('modelName');\n            // console.log(\"mName::: \" + mName + \"\");\n            let instID = this.get('instrumentId');\n            let instrument = this.get('content').instrument;\n            let obj = null\n\n            if (instrument != null && instID == null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Instruments\",\n                        path: 'instruments'\n                    },\n                    {\n                        label: instrument.query,\n                        path: 'edit-instrument',\n                        model: instrument.query,\n                    }\n                ]\n            }\n\n            if (instID != null) {\n                obj = [\n                    {\n                        label: \"Dashboard\",\n                        path: 'index'\n                    },\n                    {\n                        label: \"Instruments\",\n                        path: 'instruments'\n                    },\n                    {\n                        label: instID,\n                        path: 'edit-instrument',\n                        model: instID,\n                    },\n                    {\n                        label: \"Temporal \" + chart + \" Graph\",\n                        path: \"temporal-graphs.temporal-graph\",\n                        model: instID,\n                        model: mName\n                    },\n                ];\n            }\n            return obj;\n        }\n    }),\n    chartChanged: observer('chart', function() {\n        var chart = this.get('chart');\n        if (!chart || typeof chart.update !== 'function') return;\n        if (!chart.y1Axis) return; // Chart.js instance — skip NVD3-specific axis reading\n        var domain = chart.y1Axis.scale().domain();\n        this.set('y_min',toFixed(domain[0],2));\n        this.set('y_max',toFixed(domain[1],2));\n        this.set('y_min_old',null);\n        this.set('y_max_old',null);\n        var domain = chart.y2Axis.scale().domain();\n        this.set('y_min_2',toFixed(domain[0],2));\n        this.set('y_max_2',toFixed(domain[1],2));\n        this.set('y_min_old_2',null);\n        this.set('y_max_old_2',null);\n        this.send('disableTemp');\n        this.set('auto_scale',true);\n        this.set('auto_scale_2',true);\n    }),\n    valueChanged: observer('y_min','y_max', function() {\n        var chart = this.get('chart');\n        if (!chart || typeof chart.update !== 'function') return;\n        if (!chart.y1Axis) {\n            // Chart.js instance\n            if (!this.auto_scale) {\n                var yMin = this.get('y_min');\n                var yMax = this.get('y_max');\n                chart.options.scales.y.min = (yMin != null && yMin !== '') ? parseFloat(yMin) : undefined;\n                chart.options.scales.y.max = (yMax != null && yMax !== '') ? parseFloat(yMax) : undefined;\n                chart.update('none');\n            }\n            return;\n        }\n        if (!this.auto_scale) {\n            chart.yDomain1([this.get('y_min'),this.get('y_max')]);\n        }\n        chart.update();\n    }),\n    // valueChanged: observer('y_min','y_max', function() {\n    //     if (! this.get(\"bluVibeEvent\")){\n    //         var chart = this.get('chart');\n    //         if (!this.auto_scale) {\n    //             chart.yDomain1([this.get('y_min'),this.get('y_max')]);\n    //         }\n    //         chart.update();\n    //     }\n    // }),\n\n    autoScaleChanged: observer('auto_scale', function() {\n        // console.log(\"autoScaleChanged::: \" + this.get('auto_scale'));\n        var chart = this.get('chart');\n        if (!chart || typeof chart.update !== 'function') return;\n        if (!chart.y1Axis) {\n            // Chart.js instance\n            if (this.auto_scale) {\n                chart.options.scales.y.min = undefined;\n                chart.options.scales.y.max = undefined;\n            } else {\n                var yMin = this.get('y_min');\n                var yMax = this.get('y_max');\n                chart.options.scales.y.min = (yMin != null && yMin !== '') ? parseFloat(yMin) : undefined;\n                chart.options.scales.y.max = (yMax != null && yMax !== '') ? parseFloat(yMax) : undefined;\n            }\n            chart.update('none');\n            return;\n        }\n        if (this.auto_scale) {\n            this.set('y_min_old', this.y_min);\n            this.set('y_max_old', this.y_max);\n\n            chart.yDomain1(null,null);\n            chart.update();\n\n            var domain = chart.y1Axis.scale().domain();\n            this.set('y_min',toFixed(domain[0],2));\n            this.set('y_max',toFixed(domain[1],2));\n                //chart.yScale = this.get('test');\n        } else {\n            if (this.get('y_min_old') !== null) {\n                this.set('y_min', this.y_min_old);\n                this.set('y_max',this.y_max_old);    \n            }\n            chart.yDomain1([this.get('y_min'),this.get('y_max')]);\n            chart.update();\n        }\n    }),\n\n    valueChanged2: observer('y_min_2','y_max_2', function() {\n        var chart = this.get('chart');\n        if (!chart || typeof chart.update !== 'function') return;\n        if (!chart.y1Axis) return; // Chart.js instance — not supported (no y2 attr passed)\n        if (!this.auto_scale_2) {\n            chart.yDomain2([this.get('y_min_2'),this.get('y_max_2')]);\n            chart.update();\n        }\n    }),\n\n    autoScaleChanged2: observer('auto_scale_2', function() {\n        var chart = this.get('chart');\n        if (!chart || typeof chart.update !== 'function') return;\n        if (!chart.y1Axis) return; // Chart.js instance — not supported (no y2 attr passed)\n        if (this.auto_scale_2) {\n            this.set('y_min_old_2', this.y_min_2);\n            this.set('y_max_old_2', this.y_max_2);\n\n            chart.yDomain2(null,null);\n            chart.update();\n\n            var domain = chart.y2Axis.scale().domain();\n            this.set('y_min_2',toFixed(domain[0],2));\n            this.set('y_max_2',toFixed(domain[1],2));\n        } else {\n            if (this.get('y_min_old_2') !== null) {\n                this.set('y_min_2', this.y_min_old_2);\n                this.set('y_max_2', this.y_max_old_2);    \n            }\n            chart.yDomain2([this.get('y_min_2'),this.get('y_max_2')]);\n            chart.update();\n        }\n    }),\n\n    isVelocityGraph: computed('modelName', function() {\n        if (this.modelName === 'velocity-values' || this.modelName === 'acceleration-values')\n            return true;\n        return false;\n    }),\n\n    bluVibeEvent: computed('eventType', function() {\n        //console.log(this.eventType);\n        if(this.eventType === null || this.eventType === 'bluvibe') {\n            if(this.chart_type === null){\n                this.chart_type = 'frequency';\n            }\n            return true;\n        }\n        return false;\n    }),\n    // bluVibeEvent: computed('eventType', function() {\n    //     if(this.eventType === null || this.eventType === 'bluvibe') {\n    //         if(this.chart_type === null){\n    //             this.chart_type = 'frequency';\n    //         }\n    //         return true;\n    //     }\n    //     return false;\n    // }),\n\n    window_value: computed('window', function() {\n        return this.get(\"window\");\n    }),\n\n    typeSelect: computed('instrumentType', function() {\n        //console.log(this.instrumentType);\n        switch(this.instrumentType) {\n            case 'dExto':\n                return 'pack';\n                break;\n            default:\n                return 'pack';\n        }\n        // if (this.instrumentType === 'Thermostring') {\n        //     return true;\n        // }\n        // return false;\n    }),\n    isThermo: computed('instrumentType', function() {\n        //console.log(this.instrumentType);\n        if (this.instrumentType === 'Thermostring') {\n            return true;\n        }\n        return false;\n    }),\n    isPiezo: computed('instrumentType', function() {\n        // console.log(\"instrumentType :::::::::::::::::::::::::::::::: \" + this.instrumentType);\n        if (this.instrumentType === 'Piezo') {\n            return true;\n        }\n        return false;\n    }),\n    isWire: computed('instrumentType', function() {\n        //console.log(this.instrumentType);\n        return (this.instrumentType === 'Wire');\n    }),\n\n    displayData: computed('instrumentId', function() {\n        if (this.instrumentId !== null) {\n            return true;\n        } else {\n            return false;\n        }\n    }),\n\n    details: computed('name', 'project', 'location', 'level', 'borehole', 'instrumentId', function() {\n        var detailString = \"\";\n        let projectId = this.get('project'); // Assuming project has an 'id' field\n        let projectName = this.get('project.name'); // Assuming project has a 'name' field\n        \n        let levelId = this.get('level.id'); // Assuming level has an 'id' field\n        let levelName = this.get('level.name'); // Assuming level has a 'name' field\n        let badCodes = ['null', 'undefined', ''];\n        \n        if (this.instrumentId !== null) {\n            if (!badCodes.includes(projectName) && projectName != null && projectName != undefined) {\n                // console.log(\"::::::::::::in projectId\")\n                detailString += projectName + ' / ';\n            }\n            \n            if ( !badCodes.includes(this.get('location')) ) {\n                // console.log(\"::::::::::::in location\")\n                detailString += this.get('location') + ' / ';\n            }\n            \n            if (!badCodes.includes(levelName) && levelName != null && levelName != undefined) {\n                // console.log(\"::::::::::::in levelId\")\n                detailString += levelName + ' / ';\n            }\n            \n            if (!badCodes.includes(this.get('borehole')) ) {\n                // console.log(\"::::::::::::in borehole\")\n                detailString += this.get('borehole') + ' / ';\n            }\n                \n            if (detailString !== \"\" && detailString != 'Details:  /') {\n                detailString = detailString.substr(0, detailString.length - 3);\n            }\n        }\n        return detailString;\n    }),\n    \n    //--------------------------------------\n    displacementIsValid: computed('instrumentType', function() {\n        //console.log(this.get('instrumentType'));\n        if (this.instrumentType==='BluVibe') {\n            return false;\n        }\n        return true;\n    }),\n    axialDisplacementIsValid: computed('instrumentType', function() {\n        // dRebarv2?\n        //console.log(this.instrumentType);\n        return this.instrumentType === 'dRebar';\n    }),\n    velocityIsValid: computed('chartData', function() {\n        if (this.chartData !== null) {\n            if (this.chartData.temporalVelocityName !== null) {\n                return true;\n            }\n        }\n        return false;\n    }),\n    accelerationIsValid: computed('chartData', function() {\n        if (this.chartData !== null) {\n            if (this.chartData.temporalAccelerationName !== null) {\n                return true;\n            }\n        }\n        return false;\n    }),\n    strainIsValid: computed('chartData', function() {\n        if (this.chartData !== null) {\n            if (this.chartData.temporalStrainName !== null) {\n                return true;\n            }\n        }\n        return false;\n    }),\n    strainRateIsValid: computed('chartData', function() {\n        if (this.chartData !== null) {\n            if (this.chartData.temporalStrainRateName !== null) {\n                return true;\n            }\n        }\n        return false;\n    }),\n    axialIsValid:  computed('instrumentType', function() {\n        // dRebarv2?\n        if(this.instrumentType === 'dRebar') {\n            return true;\n        }\n        return false;\n\n    }),\n    bendingIsValid: computed('instrumentType', function() {\n        // dRebarv2?\n        if(this.instrumentType === 'dRebar') {\n            return true;\n        }\n        return false;\n\n    }),\n    loadIsValid: computed('chartData', function() {\n        if (this.chartData !== null) {\n            if (this.chartData.temporalLoadName !== null) {\n                return true;\n            }\n        }\n        return false;\n    }),\n    temperatureIsValid: computed('instrumentType', function() {\n        if(this.instrumentType === 'Thermostring' || this.instrumentType === 'BluVibe') {\n            return false;\n        }\n        return true;\n    }),\n    bluVibe: computed('instrumentType', function() {\n        if(this.instrumentType === 'BluVibe') {\n            return true;\n        }\n        return false;\n    }),\n    isAdictMDT: computed('instrumentType', function() {\n        try{\n            if(this.instrumentType.toLowerCase() === 'adict' && this.vendor.vendorType.includes('MDT')) {\n                return true;\n            }    \n        } catch (e) {\n            console.log(e);\n            console.log(\"Vendor Not Set: isAcictMDT in termporal-graphs.js controller\");\n        }\n        return false;\n    }),            \n    instSelectedAnchor: computed('instrument.selectedAnchor', function() {\n        let selectedAnchor = this.get('instrument.selectedAnchor');\n        // console.log(\"selected anchor::: \" + selectedAnchor);\n        this.set('selectedAnchor', selectedAnchor);\n        return selectedAnchor;\n    }),\n    _instrumentAnchorsSortedRaw: sort('instrumentAnchors', 'instrumentAnchorsSorting'),\n\n    /**\n     * Anchor list rendered as \"Select Reference Anchor\" buttons.\n     *\n     * For grouped (subModel B) instruments, the BE-stored anchor records may not match the\n     * displacement-channel count derived from the ID format (channels - groupCount). To keep\n     * the buttons in sync with the actual data array per the format spec, we synthesize the\n     * list from the helper for subModel B and fall back to the BE-stored records otherwise.\n     */\n    instrumentAnchorsSorted: computed('_instrumentAnchorsSortedRaw.[]', 'instrument.id', 'instrument.subModel', function(){\n        const instrument = this.get('instrument');\n        const id = instrument && instrument.get ? instrument.get('id') : (instrument ? instrument.id : null);\n        const subModel = instrument && instrument.get ? instrument.get('subModel') : (instrument ? instrument.subModel : null);\n        if(getSubModelFromId(id) === 'B' || subModel === 'B'){\n            const count = getAnchorCountFromId(id);\n            const out = [];\n            for(let i = 0; i < count; i++){\n                out.push({ number: i + 1, distance: i + 1 });\n            }\n            return out;\n        }\n        return this.get('_instrumentAnchorsSortedRaw');\n    }),\n\n    // Default the Select Reference Anchor highlight to the first anchor when the list arrives\n    // and nothing's been explicitly selected (selectedAnchor is the controller default `0`, but\n    // anchors are 1-indexed so no button would otherwise match). The `instrument.selectedAnchor`\n    // value from the BE (if any) wins via `instSelectedAnchor`; this only kicks in when that's\n    // null/undefined and the current selection is the placeholder 0.\n    defaultAnchorOnLoad: observer('instrumentAnchorsSorted.[]', function(){\n        const anchors = this.get('instrumentAnchorsSorted') || [];\n        if(!anchors.length){ return; }\n        const current = this.get('selectedAnchor');\n        if(current == null || current === 0 || current === '0'){\n            const first = anchors[0];\n            const firstNumber = first && (first.number != null ? first.number : (first.get && first.get('number')));\n            if(firstNumber != null){\n                this.set('selectedAnchor', firstNumber);\n            }\n        }\n    }),\n\n    instrumentAnchorsForAdictMDT: computed('instrumentAnchors', function() {\n        let instrumentAnchors = this.get(\"instrumentAnchorsSorted\");\n        let instrument = this.get('instrument');\n        // console.log(\"instrumentAnchorsForAdictMDT::: \" + instrument.id);        \n        // Check if there are anchors to remove\n        if (instrumentAnchors.length > 0) {\n            instrumentAnchors.pop(); // Remove the last anchor\n        }\n        return instrumentAnchors;\n    }),\n    refHeadPosition: computed('activeInstrumentMeta', function () {\n        return this.get('activeInstrumentMeta')['ref-head-position'];\n    }),\n    linearData: computed('activeInstrumentMeta', function () {\n        return this.get('activeInstrumentMeta')['linear'];\n    }),\n    calibData: computed('activeInstrumentMeta', function () {\n        return this.get('activeInstrumentMeta')['calib'];\n    }),\n    depthData: computed('displacementValuesMeta', function() {\n        let depth = this.get('displacementValuesMeta')['depth'];\n        return depth;\n    }),\n    timeRef: computed('activeInstrumentMeta', function () {\n        return this.get('activeInstrumentMeta')['zeroed'];\n    }),\n    flipSigns: computed('activeInstrumentMeta', function () {\n        return this.get('activeInstrumentMeta')['flip-signs'];\n    }),\n    \n    allInstruments: filter('model.instruments', function(instrument) {\n        //return true;\n        if (instrument.get('anchorCount') > 0) {\n            return true;\n        }\n    }),\n    instruments: map('allInstruments', function(instrument) {\n        return {\n            title: instrument.get('id'),\n            value: instrument.get('id')\n        };\n    }),\n    // vibes: map('model.vibes', function(vibe) {\n    //     return {\n    //         title: vibe.get('id'),\n    //         value: vibe.get('id')\n    //     };\n    // }),\n    // vibeSelection: computed('vibeId', 'vibes', function() {\n    //     var id = this.get('vibeId');\n    //     return this.get('vibes').findBy('id', id);\n    // }),\n    // needed for filtered select list to be able to set active instrument on page reload\n    initialInstrumentSelection: computed('instruments', 'instrumentId', function () {\n\n        var id = this.get('instrumentId');\n        \n        if(id !== null) {\n            writeCookie('instrumentId', id, 0.02);\n        }\n\n        return this.get('instruments').findBy('title', this.get('instrumentId'));\n    }),\n    randomValue: null, // Initialize to null or any default value\n    actions: {\n        setRandomValue() {\n            const randomValue = Math.floor(Math.random() * 7); // Generate a random number between 0 and 6\n            this.set('randomValue', randomValue);\n            this.set('selectedAnchor', randomValue);\n        },   \n        updatePort(newPortValue) {\n            // Get the current value of 'port'\n            const currentPortValue = this.get('port');\n      \n            // Set the new value of 'port'\n            this.set('port', newPortValue);\n      \n            // Optionally, you can refresh the URL to reflect the updated query parameter\n            this.send('refresh');\n        },\n\n        resetZoom: function(instrumentId, modelName, start_timestamp, end_timestamp) {\n            this.router.transitionTo('temporal-graphs.temporal-graph', this.instrumentId, this.modelName, { queryParams: { start_timestamp: null, end_timestamp: null } });\n            \n            // this.router.transitionTo('temporal-graphs.temporal-graph', instrumentId, modelName, (start_timestamp=null, end_timestamp=null));\n        // this.RouterService.transitionTo('temporal-graphs.temporal-graph', id, this.get('modelName'));\n        },\n\n        handleAnchorSelection(selectedAnchor, event ) {\n            let instrument = this.get('instrument');\n            this.set('selectedAnchor', selectedAnchor);\n            \n            // console.log(\"selectedAnchor: \" + selectedAnchor);\n            instrument.selectedAnchor = selectedAnchor;\n            instrument.save();\n\n            this.set(\"previousAnchor\", selectedAnchor);        \n        },\n        \n        setDepth(value) {\n            this.set('depthChecked', value == true ? 'Checked' : '');\n        },\n        setLinear(value) {\n            this.set('linearChecked', value == true ? 'Checked' : '');\n        },\n        setCalib(value) {\n            this.set('calibChecked', value == true ? 'Checked' : '');\n        },\n        updateNav(licence) {\n            // this.get('temporalGraphController').send('setController', this);\n            let modules = licence.modules;\n            if(licence.isValid) {\n                if(licence.withinLimit) {\n                    if(!modules.temporal) {\n                        document.getElementById(\"temp-link\").style.display = \"none\";\n                        document.getElementById(\"licence-error-module\").style.display = \"block\";\n                    } else {\n                        document.getElementById(\"temp-link\").style.display = \"block\";\n                    }\n                    if(!modules.spatial) {\n                        document.getElementById(\"spat-link\").style.display = \"none\";\n                    } else {\n                        document.getElementById(\"spat-link\").style.display = \"block\";\n                    }\n                    if(!modules.frequency) {\n                        document.getElementById(\"freq-link\").style.display = \"none\";\n                    } else {\n                        document.getElementById(\"freq-link\").style.display = \"block\";\n                    }\n        \n                    document.getElementById(\"licence-error-instruments\").style.display = \"none\";\n                } else {\n                    document.getElementById(\"licence-error-instruments\").style.display = \"block\";\n                }    \n                document.getElementById(\"licence-error-expired\").style.display = \"none\";\n            } else {\n                document.getElementById(\"licence-error-expired\").style.display = \"block\";\n            }\n        },\n        updateProperties(propertyNames = [], propertyValues = []) {\n            const _this = this;\n            if (propertyNames.length > 0 && propertyValues.length > 0 && propertyNames.length === propertyValues.length) {\n                propertyNames.forEach( function(propertyName, i) {\n                    _this.set(propertyName, propertyValues[i]);\n                });\n            }\n        },\n        toggleDataType(property) {\n            this.get('temporalGraphController').send('toggleDataType', property);\n        },\n        toggleProperty(property) {\n            this.set(property, !this.get(property));\n            this.get('temporalGraphController').send('toggleProperty', property);\n        },\n        // Sets a boolean property from the checkbox's actual checked state (event.target.checked).\n        // Avoids the parent/sub-controller \"toggle\" drift bug where a flip on the parent vs. the\n        // sub's own asymmetric null/false→true logic could leave them out of sync after one click.\n        setCheckboxProperty(property, event){\n            const value = !!(event && event.target && event.target.checked);\n            this.set(property, value);\n            const sub = this.get('temporalGraphController');\n            if(sub){ sub.set(property, value); }\n        },\n        toggleZeroedGraph(){\n            this.router.transitionTo('temporal-graphs.temporal-graph', this.instrumentId, this.modelName, { queryParams: { zeroed: this.zeroed } });\n        },\n        toggleLocalProperty(property) {\n            console.log(\"Clicked adjust scales\")\n            let propValue = false;\n            if ( this.get(property) === null ) {\n                propValue = true;\n            } else if(this.get(property) === false ) {\n                propValue = true; \n            }\n            this.set(property, propValue);\n        },\n\n        updateLocalProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n        onUpdateTransitionTo(selection) {\n            // console.log(\"temporalcontroller: selection: \" + selection.value)\n            if (this.get('modelName') === null || this.get('modelName') == '') {\n                this.set('modelName', 'displacement-values');\n            }\n            this.RouterService.transitionTo('temporal-graphs.temporal-graph', selection.value, this.get('modelName'));\n        },\n        onUpdateTransitionToVibe(selection) {\n            //console.log(this.get('queryParams'));\n            this.get('temporalGraphController').send('updateVibe', selection.value);\n        },\n        setChart(chart) {\n            this.set('chart',chart);\n        },\n        setData(data) {\n            this.set('chartDataPoints', data);\n        },\n        disableTemp() {\n            let chart = this.get('chart');\n            let points = this.get('chartDataPoints');\n            if (chart !== null) {\n                points.forEach(function(element) {\n                    if (element.yAxis === 2) {\n                        element.disabled = true;\n                        element.userDisabled = true;\n                        //chart.update();\n                    }\n                });\n            }\n        },\n        saveImage() {\n            html2canvas(document.querySelector(\"#capture\"), { \n                allowTaint: true, \n                foreignObjectRendering: true\n            }).then(canvas => {\n                let downloadLink = document.createElement('a');\n                downloadLink.setAttribute('download', 'CanvasAsImage.png');\n                canvas.toBlob(function(blob) {\n                    let url = URL.createObjectURL(blob);\n                    downloadLink.setAttribute('href', url);\n                    downloadLink.click();\n                });\n            });\n        },\n        selectTemps() {\n            let lastClick = this.get('lastClick');\n            if (lastClick === null || lastClick !== \"temp\") {\n                let chart = this.get('chart');\n                let points = this.get('chartDataPoints');\n                if (chart !== null) {\n                    for (let ctr = 0; ctr < points.length - 2; ctr++) {\n                        if (ctr % 2 === 0) {\n                            if (!points[ctr + 1].disabled) {\n                                points[ctr].disabled = false;\n                                points[ctr].userDisabled = false;\n                            }\n                        } else {\n                            points[ctr].disabled = true;\n                            points[ctr].userDisabled = true;\n                        }\n                    }\n                    chart.update();\n                }\n                this.set('lastClick', 'temp');\n            }\n        },\n        selectReadings() {\n            let lastClick = this.get('lastClick');\n            if (lastClick === null || lastClick !== \"vals\") {\n                let chart = this.get('chart');\n                let points = this.get('chartDataPoints');\n                if (chart !== null) {\n                    for (let ctr = points.length - 2; ctr >= 0; ctr--) {\n                        if (ctr % 2 === 0) {\n                            points[ctr].disabled = true;\n                            points[ctr].userDisabled = true;\n                        } else {\n                            if (!points[ctr - 1].disabled) {\n                                points[ctr].disabled = false;\n                                points[ctr].userDisabled = false;\n                            }\n                        }\n                    }\n                    chart.update();\n                }\n                this.set('lastClick', 'vals');\n            }\n        }\n    },\n    activate: function() {\n        var id = this.get('instrumentId');\n        var inst = null;\n\n        if(id === null) {\n            id = readCookie('instrumentId');\n            if(id !== \"\") {\n                scheduleOnce('afterRender', this, function() {\n                    //console.log(\"running re-load\");\n                    this.RouterService.transitionTo('temporal-graphs.temporal-graph', id, this.get('modelName'));\n                    });\n            }\n        } else {\n            writeCookie('instrumentId', id, 1);\n        }\n    }\n});\n\nfunction toFixed(value, numDecimals) {\n    var roundVal = Math.pow(10, numDecimals);\n    var answer = 0;\n    if (value > 0) {\n        answer = Math.ceil(value * roundVal) / roundVal;\n    } else {\n        answer = Math.floor(value * roundVal) / roundVal;\n    }\n    return answer;\n}\n\nfunction writeCookie(name,value,days) {\n    var date, expires;\n    if (days) {\n        date = new Date();\n        date.setTime(date.getTime()+(days*24*60*60*1000));\n        expires = \"; expires=\" + date.toGMTString();\n            }else{\n        expires = \"\";\n    }\n    document.cookie = name + \"=\" + value + expires + \"; path=/\";\n}\n\nfunction readCookie(name) {\n    var i, c, ca, nameEQ = name + \"=\";\n    ca = document.cookie.split(';');\n    for(i=0;i < ca.length;i++) {\n        c = ca[i];\n        while (c.charAt(0)===' ') {\n            c = c.substring(1,c.length);\n        }\n        if (c.indexOf(nameEQ) === 0) {\n            return c.substring(nameEQ.length,c.length);\n        }\n    }\n    return '';\n}\n","import { computed, observer } from '@ember/object';\nimport { inject as controller } from '@ember/controller';\nimport { inject as service } from '@ember/service';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    queryParams: [\n        'start_timestamp',\n        'end_timestamp',\n        'num_points_requested',\n        'ref_head_position',\n        'ref_anchor',\n        'zeroed',\n        'linear',\n        'calib',\n        'depth',\n        'flip_signs',\n        'event_type',\n        'blast_type',\n        'window',\n        'seismic_type',\n        'frequency',\n        'chart_type',\n        \"display_records\",\n        \"port\",\n        \"selectedAnchor\",\n        \"advancedYAxisUnit\",\n    ],\n    start_timestamp: null,\n    end_timestamp: null,\n    num_points_requested: 300,\n    ref_head_position: \"\",\n    ref_anchor: \"0\",\n    zeroed: true,\n    linear: false,\n    calib: true,\n    depth: false,\n    modelName: null,\n    flip_signs: null,\n    event_type: null,\n    blast_type: null,\n    tiltMode: null,\n    window: 480,\n    seismic_type: null,\n    frequency: null,\n    chart: null,\n    chart_type: null,\n    display_records: 100,\n    port:1,\n    selectedAnchor: 0,\n    advancedYAxisUnit: null,\n\n    temporalGraphsController: controller(\"temporal-graphs\"),\n\n    linearObserver: observer('linear', function() {\n        this.get('temporalGraphsController').send('setLinear', this.get('linear'));\n    }), \n\n    calibObserver: observer('calib', function() {\n        this.get('temporalGraphsController').send('setCalib', this.get('calib'));\n    }),\n\n    depthObserver: observer('depth', function() {\n        this.get('temporalGraphsController').send('setDepth', this.get('depth'));\n    }),\n\n    actions: {\n        toggleDataType(property) {\n            // console.log(\"PROPERTY::::::::::::::::::: \" + property);\n            if (property == \"raw\"){\n                this.set(\"linear\", false);\n                this.set(\"calib\", false);\n                this.set(\"depth\", false);\n            } else if (property == \"linear\") {\n                this.set(\"linear\", true);\n                this.set(\"calib\", false);\n                this.set(\"depth\", false);\n            } else if (property == \"calib\") {\n                this.set(\"linear\", false);\n                this.set(\"calib\", true);\n                this.set(\"depth\", false);\n            } else {\n                this.set(\"linear\", false);\n                this.set(\"calib\", false);\n                this.set(\"depth\", true);                \n            }\n        },\n        setData(data) {\n            this.send('setDataR',data);\n        },\n        setChart(chart) {\n            this.send('setChartR',chart);\n        },\n        updateVibe(vibeID) {\n            //this.set('vibe_id', vibeID);\n        },\n        updateWindow(window) {\n            this.set('window', window);\n        },\n        updateProperties(propertyNames = [], propertyValues = []) {\n            const _this = this;\n            if (propertyNames.length > 0 && propertyValues.length > 0 && propertyNames.length === propertyValues.length) {\n                propertyNames.forEach( function(propertyName, i) {\n                    _this.set(propertyName, propertyValues[i]);\n                });\n            }\n        },\n        getQueryParams(variable) {\n            return this.get(variable);\n        },\n        toggleProperty(property) {\n            let propValue = false;\n            if ( this.get(property) === null ) {\n                propValue = true;\n            } else if(this.get(property) === false ) {\n                propValue = true; \n            }\n            this.set(property, propValue);\n        },\n        queryParamsDidChange(changes, from, to) {\n            if('selectedAnchor' in changes){\n                this.selectedAnchor = changes.selectedAnchor;\n            }\n          }\n        \n\n    }\n});\n","import { computed, set } from '@ember/object';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport EmberObject from '@ember/object';\nimport Controller from '@ember/controller';\n\nexport default Controller.extend({\n    init() {\n        this._super(...arguments);\n        scheduleOnce('afterRender', this, function() {\n            //this.send('updateNav',this.get('model').licence.content[0]._data);\n        });\n    },\n    headerTitles: computed('instrument', function() {\n        let titles = ['Channel', 'Trigger','Frequency','Aplitude','PPV','PPA','Duration','Channel', 'Trigger','Frequency','Aplitude','PPV','PPA','Duration','Channel', 'Trigger','Frequency','Aplitude','PPV','PPA','Duration','Channel', 'Trigger','Frequency','Aplitude','PPV','PPA','Duration'];\n        return titles;\n    }),\n    queryParams: ['page', 'page_size', 'ordering', 'search'],\n    page_size: 20,\n    eventsMeta: null,\n    ordering: null,\n    search: null,\n    isVisibleRowDetails: {},\n    isRowDeleteConfirmationDialog: {},\n    isVisibleCreateNewForm: false,\n    permissionError: false,\n\n    breadCrumbs: [\n        {\n            label: \"Dashboard\",\n            path: 'index'\n        },\n        {\n            label: \"Vibration Events\",\n            path: 'vibration-events'\n        },\n        \n    ],\n\n    actions: {\n        // updateNav(licence) {\n        //     let modules = licence.modules;\n        //     if(licence.isValid) {\n        //         if(licence.withinLimit) {\n        //             if(!modules.temporal) {\n        //                 document.getElementById(\"temp-link\").style.display = \"none\";\n        //             } else {\n        //                 document.getElementById(\"temp-link\").style.display = \"block\";\n        //             }\n        //             if(!modules.spatial) {\n        //                 document.getElementById(\"spat-link\").style.display = \"none\";\n        //             } else {\n        //                 document.getElementById(\"spat-link\").style.display = \"block\";\n        //             }\n        //             if(!modules.frequency) {\n        //                 document.getElementById(\"freq-link\").style.display = \"none\";\n        //             } else {\n        //                 document.getElementById(\"freq-link\").style.display = \"block\";\n        //             }      \n        //             document.getElementById(\"licence-error-instruments\").style.display = \"none\";\n        //         } else {\n        //             document.getElementById(\"licence-error-instruments\").style.display = \"block\";\n        //         }\n        //         document.getElementById(\"licence-error-expired\").style.display = \"none\";\n        //     } else {\n        //         document.getElementById(\"add-new\").style.display = \"none\";\n        //         document.getElementById(\"licence-error-expired\").style.display = \"block\";\n        //     }\n        //     document.getElementById(\"licence-error-module\").style.display = \"none\";\n        // },\n        updateProperty(propertyName, propertyValue) {\n            this.set(propertyName, propertyValue);\n        },\n        vewRowDetails(id){\n            let curVal = this.get('isVisibleRowDetails')[id] ? false : true;\n            set(this.get('isVisibleRowDetails'), id, curVal); //update isVisibleRowDetails variable for each single row\n        },\n        toggleRowDeleteConfirmationDialog(id){\n            let curVal = this.get('isRowDeleteConfirmationDialog')[id] ? false : true;\n            set(this.get('isRowDeleteConfirmationDialog'), id, curVal); //update isVisibleRowDetails variable for each single row\n        },\n        remove(model, object){\n            let _this = this;\n            object.deleteRecord();\n            object.get('isDeleted');\n            object.save().then(function(){\n                // deal with records that just were created\n                // relates to the way I add new records to model https://github.com/emberjs/data/issues/3313\n                model.removeObject(object);\n            })\n            .catch(function(reason){\n                if (reason.errors[0].status == 403) {\n                    _this.send('updateProperty', 'permissionError', true);\n                }\n            });\n        },\n        sortBy(property) {\n            this.set('ordering', property);\n        }\n    }\n});\n","export { default } from '@ember-data/debug/data-adapter';\n","export { default } from \"ember-moment/helpers/-base\";\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport function activeClass([val]) {\n    if (val) {\n        return 'active';\n    }\n}\n\nexport default helper(activeClass);\n","import { helper } from '@ember/component/helper';\n\nexport default helper(function alertGetId([alertRow]) {\n  let gw = alertRow.get(\"gateway\")\n  let gwId = gw.get(\"id\");\n  return gwId;\n});","export { default } from \"ember-truth-helpers/helpers/and\";\n","import { helper } from '@ember/component/helper';\nimport config from '../config/environment';\nimport {\n  shaRegExp,\n  versionRegExp,\n  versionExtendedRegExp,\n} from 'ember-cli-app-version/utils/regexp';\n\nexport function appVersion(_, hash = {}) {\n  const version = config.APP.version;\n  // e.g. 1.0.0-alpha.1+4jds75hf\n\n  // Allow use of 'hideSha' and 'hideVersion' For backwards compatibility\n  let versionOnly = hash.versionOnly || hash.hideSha;\n  let shaOnly = hash.shaOnly || hash.hideVersion;\n\n  let match = null;\n\n  if (versionOnly) {\n    if (hash.showExtended) {\n      match = version.match(versionExtendedRegExp); // 1.0.0-alpha.1\n    }\n    // Fallback to just version\n    if (!match) {\n      match = version.match(versionRegExp); // 1.0.0\n    }\n  }\n\n  if (shaOnly) {\n    match = version.match(shaRegExp); // 4jds75hf\n  }\n\n  return match ? match[0] : version;\n}\n\nexport default helper(appVersion);\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport function arrayAt(params) {\n    // console.log(\"arrayAt:\" + params);\n    const arr = params[0];\n    const index = params[1];\n    // console.log(\"arr:\" + arr);\n    // console.log(\"index:\" + index);\n    if(arr == undefined){\n        return [];\n    }else{\n        // console.log(\"arr[index]:\");\n        // console.log(arr[index].anchorDistances);\n        return arr[index].anchorDistances;\n    }\n}\n\nexport default helper(arrayAt);\n","export { default, bsContains } from 'ember-bootstrap/helpers/bs-contains';\n","export { default } from 'ember-bootstrap/helpers/bs-default';\n","export { default } from 'ember-bootstrap/helpers/bs-eq';\n","export { default } from 'ember-bootstrap/helpers/bs-form-horiz-input-class';\n","export { default } from 'ember-bootstrap/helpers/bs-form-horiz-offset-class';\n","export { default } from 'ember-bootstrap/helpers/bs-noop';\n","export { default } from 'ember-bootstrap/helpers/bs-size-class';\n","export { default } from 'ember-bootstrap/helpers/bs-type-class';\n","import { helper } from '@ember/component/helper';\n\nexport function buttonclass([anchor, ref_anchor = 0] /*, hash*/) {\n\n    // Use the String constructor to ensure both values are strings.\n    anchor = String(anchor);\n    ref_anchor = String(ref_anchor);\n    // console.log(\"::::::::::::::::::::::::::: anchor.number: \" + anchor + \"   ref_anchor: \" + ref_anchor);\n\n  if (anchor === ref_anchor) {\n    // console.log(\":::::::::::::::::::::::::::Found match: anchor.number: \" + anchor + \"   ref_anchor: \" + ref_anchor);\n    return 'btn btn-outline-primary nowrap active';\n}\n\n  return 'btn btn-outline-primary nowrap';\n}\n\nexport default helper(buttonclass);\n","\nexport function assistiveToolTipLibrary(key) {\n    switch(key){\n        case 'statusBarStatusTooltip':\n            return \"Current status of Step 1 & Step 2 & Step 3.\\nIf it says 'Need Validation' then please check you have inputted all the textboxes for each Step.\\nIf it says 'Validated' then you are good to go and proceed to Calibration Dashboard.\";\n        case 'statusBarConnectionTooltip':\n            return \"Current websocket connection status.\\nIf you are trying to connect and it is failing repeatedly, please contact your manager for assistance.\";    \n        case 'statusBarCalibrationTooltip':\n            return \"Current situational status of the calibration. It is not specific for any phase.\\nPlease look here if you want to know what is going on when you have started Phase I or Phase II.\";    \n        case 'statusBarCurrentTooltip':\n            return \"Current value from the rig. The value you see is from all types of rigs.\\n No need to consider units.\";    \n        case 'statusBarTargetTooltip':\n            return \"Target value set for the rig. The value you see is from all types of rigs.\\n No need to consider units.\";    \n        case 'calibFormChannelsTooltip':\n            return \"Total number of channels for the sensor. Your value needs to include temperature channel.\\nNo need to consider units.\";\n        case 'calibFormMinLimitTooltip':\n            return \"Minimum limit for sensor, sensor type dependent. For example, minimum length for dExto's stroke length.\\nNo need to consider units.\";\n        case 'calibFormMaxLimitTooltip':\n            return \"Maximum limit for sensor, sensor type dependent. For example, maximum length for dExto's stroke length.\\nNo need to consider units.\";\n        case 'calibFormSampleSizeTooltip':\n            return \"When calibrating, how many samples would you like to make for each checkpoint? Your number of samples will be used when doing average calculation.\\nNo need to consider units.\";\n        case 'calibFormSpeedTooltip':\n            return \"When calibrating, what is the speed you want the rig to go from one checkpoint to another.\\nThis is rig type dependent, consult your manual for verification or contact your manager for assistance.\";\n        case 'calibFormUnitTooltip':\n            return \"This is the unit determined for sensor. For displacement, it can be mm or m... For pressure, it can be kPa or Pa...\\nSince this is critical, consult your manual for assurance or contact your manager for assistance.\";\n        case 'calibFormTypeIDTooltip':\n            return \"It is used to uniquely identify the ID of the type of the sensor.\\nSince this is critical, consult your manual for assurance or contact your manager for assistance.\";\n        case 'calibFormDelayTooltip':\n            return \"When calibrating, how long do you want to pause before sampling.\\nThe unit is in minutes.\";\n        case 'calibFormCurrent-TargetBufferTooltip':\n            return \"When calibrating and after setting target value, how much buffer would you like to set between current value and target value?\\nIf you wish to trigger sampling stage faster, set a larger buffer at the cost of calibration accuracy.\\nIf you wish to have higher calibration accuracy, set a smaller buffer value at the cost of calbiration duration.\\nNo need to consider units.\";\n        case 'calibFormPositionsTooltip':\n            return \"When calibrating, where would you like to set the checkpoint locations.\\nPlease follow this sample:\\n0.00,8.33,25.00,50.00,75.00,100.00,125.00\\nThis is rig type dependent, consult your manual for verification or contact your manager for assistance.\";\n        case 'rigFormRigIPTooltip':\n            return \"It is the IP address associated with this and only this rig. When connecting to websocket, it will use this IP value.\";        \n        case 'rigFormRigNameTooltip':\n            return \"This is used for labeling this rig. At no point will the name be used in any areas of the calibration phases.\\nIt is purely for verbally identifying each rig.\";        \n        case 'rigFormRigCategoryTooltip':\n            return \"This is to identify the specific type of rig.\\nCurrently the only supported types are: PUMP & STEPPER.\";\n        case 'rigFormReferenceIDTooltip':\n            return \"This is the serial number associated with the attached sensor.\";\n        case 'rigFormReferenceCalibrationValueTooltip':\n            return \"This is the certificate ID or certificate serial number associated with the attached sensor.\";\n        case 'rigFormReferenceCalibrationDateTooltip':\n            return \"This is the date of certificated associated with the attached sensor.\";\n                        \n    }\n}","import { saveAs } from 'file-saver';\nimport { next, schedule, scheduleOnce } from '@ember/runloop';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport colorPalette from '../utils/color-palette';\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\nimport Chart from 'chart.js/auto';\nimport printJS from 'print-js';\nimport html2pdf from 'html2pdf.js';\n\n\n\n// ─── Sensor Calibration Color Palette ────────────────────────────────────────\n// Semantic aliases over `app/utils/color-palette.js` — every sensor-calibration UI colour\n// goes through this map. To recolour a status across the whole app, swap the palette key\n// (e.g. `colorPalette.red2` → `colorPalette.red15`) here, not in component files.\nexport const SENSOR_CALIBRATION_PALETTE = {\n    danger:  colorPalette.red2,     // failures, 0/N progress\n    warning: colorPalette.orange1,  // partial / early progress\n    caution: colorPalette.yellow1,  // most-of-the-way\n    success: colorPalette.green29,  // complete / certificate-ready\n    neutral: colorPalette.gray24,   // no data / disabled\n    info:    colorPalette.green1,   // informational accents (palette's teal-aligned green)\n};\n\n// Ramp keyed by `done` count. Index 0..N maps to a palette colour. Falls back to `success`\n// for done >= max defined index, `neutral` for negative / missing.\n// Designed for a 0/3 → 3/3 progress total. Add entries here if the BE expands the total.\nexport const SENSOR_CALIBRATION_PROGRESS_RAMP = {\n    0: SENSOR_CALIBRATION_PALETTE.danger,\n    1: SENSOR_CALIBRATION_PALETTE.warning,\n    2: SENSOR_CALIBRATION_PALETTE.caution,\n    3: SENSOR_CALIBRATION_PALETTE.success,\n};\n\n// ─── Backend Sentinel Codes ──────────────────────────────────────────────────\n// \"Sentinels\" are magic values the Frontend writes into an otherwise-normal field to tell\n// the Backend \"this field was deliberately emptied for a specific, known reason\" — as opposed\n// to the operator simply forgetting to fill it in. The BE matches on the EXACT value, so:\n//\n//   • Treat each code as a shared contract: never change a number without a coordinated BE change.\n//   • Keep this object the single source of truth — do NOT scatter raw literals like `-175`\n//     through the codebase. Reference `BE_SENTINEL.<NAME>` instead.\n//   • Add new \"deliberately empty\" reasons here as they appear (e.g. -176 for some future case),\n//     each with a one-line note on which fields use it and what the BE does with it.\n//\n// Current codes:\n//   FOR_INVENTORY (-175) — Calibration is for inventory stock, not a specific job. The operator\n//       leaves Job # / Sensor Name / Anchor values blank on screen (those inputs are disabled);\n//       at POST build time we substitute this sentinel so the BE records \"intentionally empty —\n//       for inventory\" rather than rejecting the record as incomplete. See buildAndGetDataFormat1.\nexport const BE_SENTINEL = {\n    FOR_INVENTORY: -175,\n};\n\nexport function getSensorCalibrationProgressColor(done, total){\n    if(done == null || done < 0){ return SENSOR_CALIBRATION_PALETTE.neutral; }\n    if(SENSOR_CALIBRATION_PROGRESS_RAMP[done] != null){ return SENSOR_CALIBRATION_PROGRESS_RAMP[done]; }\n    if(total != null && done >= total){ return SENSOR_CALIBRATION_PALETTE.success; }\n    return SENSOR_CALIBRATION_PALETTE.neutral;\n}\n\n// Prompt the user to pick a directory. Returns the directory handle on success, `null` on\n// cancel, and `null` on browsers without File System Access directory support (Safari, Firefox,\n// most mobile browsers — caller should fall back to single-file zip download in that case).\nexport async function tryPickExportDirectory(){\n    if(typeof window === 'undefined' || typeof window.showDirectoryPicker !== 'function'){\n        return null;\n    }\n    try{\n        // `mode: 'readwrite'` triggers a one-time write permission prompt up front so we don't\n        // get an extra prompt for every file we write.\n        return await window.showDirectoryPicker({ mode: 'readwrite' });\n    }catch(err){\n        if(err && (err.name === 'AbortError' || err.code === 20)){ return null; } // user cancelled\n        console.warn('tryPickExportDirectory: showDirectoryPicker failed', err);\n        return null;\n    }\n}\n\n// Write a single Blob into a previously-picked directory handle. If a file with the same\n// name already exists, append \" (N)\" before the extension and increment until free, e.g.\n//   260571078.pdf       →  260571078.pdf\n//   (already exists)    →  260571078 (1).pdf\n//   (also exists)       →  260571078 (2).pdf\n// Returns the actual filename written to disk so callers can log / display it.\nexport async function writeBlobToDirectory(directoryHandle, filename, blob){\n    const finalName = await resolveUniqueFilename(directoryHandle, filename);\n    const fileHandle = await directoryHandle.getFileHandle(finalName, { create: true });\n    const writable = await fileHandle.createWritable();\n    await writable.write(blob);\n    await writable.close();\n    return finalName;\n}\n\n// Find a filename in `directoryHandle` that doesn't collide with anything already there.\n// Splits at the LAST dot so multi-dot names like `foo.bar.pdf` keep the right extension.\nasync function resolveUniqueFilename(directoryHandle, filename){\n    const dot = filename.lastIndexOf('.');\n    const base = dot > 0 ? filename.slice(0, dot) : filename;\n    const ext  = dot > 0 ? filename.slice(dot)   : '';\n    let candidate = filename;\n    let n = 1;\n    // Cap the loop just in case — 9999 collisions almost certainly indicates a bug.\n    while(n < 10000){\n        try{\n            // create:false → throws NotFoundError if the file is absent. That's the slot we want.\n            await directoryHandle.getFileHandle(candidate, { create: false });\n            // No throw → file exists, increment and try again.\n            candidate = `${base} (${n})${ext}`;\n            n += 1;\n        }catch(err){\n            if(err && (err.name === 'NotFoundError' || err.code === 8)){ return candidate; }\n            // Any other error (permission, etc.) — surface it; caller will handle.\n            throw err;\n        }\n    }\n    // Defensive — shouldn't reach here.\n    return `${base} (${Date.now()})${ext}`;\n}\n\n// Save a Blob to a user-chosen location.\n// - Chrome / Edge / Opera (and recent Safari 18+): uses the File System Access API's\n//   `showSaveFilePicker` — the OS save dialog opens and the user can pick any folder + filename.\n// - All other browsers (older Safari, Firefox, in-app webviews): falls back to FileSaver's\n//   anchor-download approach which lands in the browser's default Downloads folder. The user\n//   can still rename via the browser's \"Save As\" prompt if they have that toggle enabled in\n//   their browser settings.\n// - User cancels the picker → silent no-op (matches native dialog UX).\n// Returns:\n//   { saved: true,  cancelled: false } — file written.\n//   { saved: false, cancelled: true  } — user cancelled the picker.\n//   { saved: false, cancelled: false } — IO/permission failure; caller may want to surface it.\nasync function _saveBlobWithPicker(blob, suggestedName, accept, description){\n    if(typeof window !== 'undefined' && typeof window.showSaveFilePicker === 'function'){\n        try{\n            const handle = await window.showSaveFilePicker({\n                suggestedName: suggestedName,\n                types: [{ description, accept }],\n            });\n            const writable = await handle.createWritable();\n            await writable.write(blob);\n            await writable.close();\n            return { saved: true, cancelled: false };\n        }catch(err){\n            if(err && (err.name === 'AbortError' || err.code === 20)){\n                return { saved: false, cancelled: true };\n            }\n            console.warn('_saveBlobWithPicker: showSaveFilePicker failed, falling back', err);\n        }\n    }\n    // Legacy path — Safari < 18, Firefox, embedded webviews, or picker error.\n    try{\n        saveAs(blob, suggestedName);\n        return { saved: true, cancelled: false };\n    }catch(err){\n        console.error('_saveBlobWithPicker: legacy saveAs failed', err);\n        return { saved: false, cancelled: false };\n    }\n}\n\nexport async function saveZipWithPicker(blob, suggestedName){\n    const res = await _saveBlobWithPicker(blob, suggestedName, { 'application/zip': ['.zip'] }, 'ZIP archive');\n    return res.saved;\n}\n\n// Save a single PDF Blob via the OS save-as dialog (Chrome/Edge/Opera/Safari 18+).\n// User can rename the file and pick any folder. Falls back to default Downloads on browsers\n// without `showSaveFilePicker`. Returns the same result shape as the internal helper so\n// callers can distinguish a cancel from a failure.\nexport async function savePdfWithPicker(blob, suggestedName){\n    return _saveBlobWithPicker(blob, suggestedName, { 'application/pdf': ['.pdf'] }, 'PDF document');\n}\n// ─────────────────────────────────────────────────────────────────────────────\n\n//Status Code & Incoming & Outgoing Libraries\n//  Allocate 500-549\nexport function connectionStatusLibrary(code) {\n    let statusObject = {\n        key:code,\n        value:\"\",\n        color:\"\",\n    }\n    switch(code){\n        case 500:\n            statusObject[\"value\"] = \"Not Connected\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 501:\n            statusObject[\"value\"] = \"Connecting...\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 502:\n            statusObject[\"value\"] = \"Connected\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n    }\n}\n//  Allocate 550-599\nexport function calibrationStatusLibrary(code) {\n    let statusObject = {\n        key:code,\n        value:\"\",\n        color:\"\",\n    }\n    switch(code){\n        case 550:\n            statusObject[\"value\"] = \"Error\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 551:\n            statusObject[\"value\"] = \"Idle\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 552:\n            statusObject[\"value\"] = \"Phase I: Stepper Increasing\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 553:\n            statusObject[\"value\"] = \"Phase I: Sampling\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 554:\n            statusObject[\"value\"] = \"Phase I: Averaging & Adding to Buffer\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 555:\n            statusObject[\"value\"] = \"Phase I: Clearing Memory & Resetting\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 559:\n            statusObject[\"value\"] = \"Phase I: Stepper Resetting\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 560:\n            statusObject[\"value\"] = \"Phase II: Stepper Increasing\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 561:\n            statusObject[\"value\"] = \"Phase II: Sampling\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 562:\n            statusObject[\"value\"] = \"Phase II: Averaging & Adding to Buffer\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 563:\n            statusObject[\"value\"] = \"Phase II: Clearing Memory & Resetting\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 570:\n            statusObject[\"value\"] = \"V2: Uploading Lookup Data...\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 571:\n            statusObject[\"value\"] = \"V2: Lookup Data Uploaded\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 572:\n            statusObject[\"value\"] = \"V2: Phase II Concluding...\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 573:\n            statusObject[\"value\"] = \"V2: Phase II Concluded\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 574:\n            statusObject[\"value\"] = \"V2 P2: Averaging Current Data\", \n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 575:\n            statusObject[\"value\"] = \"V2 P2: Sampling Current Data\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 576:\n            statusObject[\"value\"] = \"V2 P2: Averaging Calib. Data\", \n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 577:\n            statusObject[\"value\"] = \"V2 P2: Sampling Calib. Data\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 578:\n            statusObject[\"value\"] = \"V2 P2: Awaiting Rig...\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 579:\n            statusObject[\"value\"] = \"V2 P2: Soft Resetting\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 580:\n            statusObject[\"value\"] = \"V2: Phase I Concluding...\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 581:\n            statusObject[\"value\"] = \"V2: Phase I Concluded\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 583:\n            statusObject[\"value\"] = \"V2: Intermission\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 584:\n            statusObject[\"value\"] = \"V2: Emergency Stopped\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 586:\n            statusObject[\"value\"] = \"V2 P1: Averaging Calib. Data\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 587:\n            statusObject[\"value\"] = \"V2 P1: Sampling Calib. Data\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 588:\n            statusObject[\"value\"] = \"V2 P1: Awaiting Rig...\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 589:\n            statusObject[\"value\"] = \"V2 P1: Soft Resetting\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 590:\n            statusObject[\"value\"] = \"Ready to Start Calibration\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 591:\n            statusObject[\"value\"] = \"Sending Validation CMDs...\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 592:\n            statusObject[\"value\"] = \"Emergency Stopped\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 593:\n            statusObject[\"value\"] = \"Emergency Stopping...\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 594:\n            statusObject[\"value\"] = \"Phase I: Emergency Stopped\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 595:\n            statusObject[\"value\"] = \"Phase II: Emergency Stopped\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 596:\n            statusObject[\"value\"] = \"Checkpoint Delay\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 597:\n            statusObject[\"value\"] = \"Phase I: Soft Resetting\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 598:\n            statusObject[\"value\"] = \"Phase II: Soft Resetting\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 599:\n            statusObject[\"value\"] = \"Hard Resetting\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n    }\n}\n//  Allocate 600-649\nexport function generalStatusLibrary(code) {\n    let statusObject = {\n        key:code,\n        value:\"\",\n        color:\"\",\n    }\n    switch(code){\n        case 600:\n            statusObject[\"value\"] = \"-\",\n            statusObject[\"color\"] = \"black\"\n            return statusObject;\n        case 601:\n            statusObject[\"value\"] = \"Unavailable\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 602:\n            statusObject[\"value\"] = \"Need Validation\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 603:\n            statusObject[\"value\"] = \"Validated\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n    }\n}\nexport function incomingMessageLibrary(context, key,value){\n    switch(key){\n        case \"notification\":\n            const rigProfile = context.get(\"userInputtedData.selectedRigProfile\");\n            if(rigProfile != null && context.get(\"frontendData.rigNotificationData\").hasOwnProperty(rigProfile['data']['rigID'])){\n                context.get(\"frontendData.rigNotificationData\")[rigProfile['data']['rigID']]['messages'].push(`(${getCurrentDateTime()})-${value}`);\n            }\n            break;\n        case \"sensorData\":\n            //Used for when the message is in \":YP....\" structure, which is strictly for data values\n            const parsedData = parseMessage(context,value) //Has case consideration for v1.0 & v2.0\n            // console.log(`parsedData: ${parsedData}`)\n            //Update Anchor Live View Section\n            updateAnchorBoardLiveViewData(parsedData);\n            //Update Anchor Live Chart\n            updateAnchorChartLiveViewData(parsedData);\n\n            /**\n             * \n                isSamplingData:{\n                    isPhaseISampling:false,\n                    isSamplingCurrentData:false, \n                    isSamplingCalibrationData:false\n                }\n             */\n            if(context.get(\"settingsConfig.internalVersion\") === \"v1.0\"){\n                //Handle sampling if it is on\n                if(context.get(\"calibrationIsSamplingData\")[\"isPhaseISampling\"]){\n                    calculateAveragePhaseIModule(context, parsedData);\n                }\n                else if(context.get(\"calibrationIsSamplingData\")[\"isPhaseIICalibrationDataValueSampling\"]){\n                    calculateAverageCalibrationDataPhaseIIModule(context, parsedData);\n                }\n                return;\n            }\n            else if(context.get(\"settingsConfig.internalVersion\") === \"v2.0\"){\n                const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n                for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                    if(batchSensorData[i] != null){\n                        const sensorObj = batchSensorData[i];\n                        let sensorIsSamplingData = sensorObj[\"isSamplingData\"];\n                        let sensorData = sensorObj[\"sensorData\"];\n                        if(sensorIsSamplingData[\"isPhaseISampling\"] && (sensorData[\"sensorID\"].trim() == parsedData[0].trim())){\n                            calculateAveragePhaseIV2Module(context, i, parsedData);\n\n                        }else if(sensorIsSamplingData[\"isSamplingCalibrationData\"] && (sensorData[\"sensorID\"].trim() == parsedData[0].trim())){\n                            calculateAverageCalibrationDataPhaseIIV2Module(context, i, parsedData);\n                        }\n                    }\n                }\n                return;\n\n            }\n        case \"current\":\n            // console.log(`current: ${value}`)\n            /**\n             * \n                isSamplingData:{\n                    isPhaseISampling:false,\n                    isSamplingCurrentData:false, \n                    isSamplingCalibrationData:false\n                }\n             */\n            const customStatusObj1 = generalStatusLibrary(602);\n            customStatusObj1[\"value\"] = value;\n            customStatusObj1[\"color\"] = \"black\";\n            context.set(\"dashboardStatusBarData.current\",customStatusObj1)\n            if(context.get(\"settingsConfig.internalVersion\") === \"v1.0\"){\n                if(context.get(\"calibrationIsSamplingData\")[\"isPhaseIICurrentSampling\"]){\n                    calculateAverageCurrentPhaseIIModule(context, value);\n                }\n\n            }else if(context.get(\"settingsConfig.internalVersion\") === \"v2.0\"){\n                const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n                for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                    if(batchSensorData[i] != null){\n                        const sensorObj = batchSensorData[i];\n                        let sensorIsSamplingData = sensorObj[\"isSamplingData\"];\n                        if(sensorIsSamplingData[\"isSamplingCurrentData\"]){\n                            calculateAverageCurrentPhaseIIV2Module(context, i, value);\n                        }\n                    }\n                }\n\n            }\n``            \n            return;\n        case \"target\":\n            // console.log(`target: ${value}`)\n\n            const customStatusObj2 = generalStatusLibrary(602);\n            customStatusObj2[\"value\"] = value;\n            customStatusObj2[\"color\"] = \"black\";\n            context.set(\"dashboardStatusBarData.target\",customStatusObj2)\n            return;\n    }\n}\nexport async function outgoingMessageLibrary(context, cmd, value, type=null){\n    //Check if websocket is still alive, if so send the command, attach type of cmds if needed in the switch case\n    const calibProfile = context.get(\"userInputtedData.selectedCalibrationProfile\");\n\n\n    let msg = null;\n    // console.log(`cmd:${cmd}, value:${value}`);\n    switch(cmd){\n        //For raw cmd straight to device\n        case \"raw\":\n            msg = value;\n            break;\n        //For cmd not needing type such as \"setStepper 22.2\"\n        case \"setTarget\":\n            if(calibProfile != null && calibProfile['data'] != null ){\n                const data = calibProfile['data'];\n                const checkpointSpeed = data['checkpointSpeed'];\n\n                const customStatusObj2 = {};\n                customStatusObj2[\"value\"] = value;\n                customStatusObj2[\"color\"] = \"black\";\n                context.set(\"dashboardStatusBarData.target\",customStatusObj2);\n                msg = `WS+MOV=${value},${checkpointSpeed}`;\n                break;\n            }\n        case \"setRigUnit\":\n            msg = `WS+UNIT=${value}`;\n            break;\n\n        case \"manualStepper\":\n        // case \"manualPump\":\n            msg = `WS+JOG=${value},1`;\n            break;\n        case 'emergencyStop':\n            msg = 'WS+STOP=1';\n            break;\n        //For control panel hotkeys\n        case \"stepperInit\":\n            msg = `WS+SETHOME=1`;\n            break; \n        case \"stepper0\":\n            msg = `WS+MOVHOME=1`;\n            break; \n        case \"getInternalVersion\":\n            showPopup([`Current internal version: ${context.get(\"settingsConfig.dataTranslatorVersion\")}`]);\n            break;\n        case \"setMode\":\n            await sendBatchCommands(context, [\"WS+COMMAND_MODE=1\", \"WS+COMMAND=0\", `WS+COMMAND=${value}`, \"WS+COMMAND=9\"]);\n            break;\n        case \"getDetails\":\n            await sendBatchCommands(context, [\"WS+COMMAND_MODE=1\", \"WS+COMMAND=6\", `WS+COMMAND=${value}`, \"WS+COMMAND=9\"]);\n            break; \n        case \"setChannels\":\n            await sendBatchCommands(context, [\"WS+COMMAND_MODE=1\", \"WS+COMMAND=1\", `WS+COMMAND=${value}`, \"WS+COMMAND=9\"]);\n            break;\n        case \"setStroke\":  \n            await sendBatchCommands(context, [\"WS+COMMAND_MODE=1\", \"WS+COMMAND=2\", `WS+COMMAND=${value}00`, \"WS+COMMAND=9\"]);\n            break;\n        case \"setSensorID\":\n            await sendBatchCommands(context, [\"WS+COMMAND_MODE=1\", \"WS+COMMAND=3\", `WS+COMMAND=${value}`, \"WS+COMMAND=9\"]);\n            break;\n        case \"setType\":\n            await sendBatchCommands(context, [\"WS+COMMAND_MODE=1\", \"WS+COMMAND=4\", `WS+COMMAND=${value}`, \"WS+COMMAND=9\"]);\n            break;\n        case \"setDescription\":\n            await sendBatchCommands(context, [\"WS+COMMAND_MODE=1\", \"WS+COMMAND=5\", `WS+COMMAND=${value}`, \"WS+COMMAND=9\"]);\n            break;\n        case \"setExit\":\n            await sendBatchCommands(context, [\"WS+COMMAND=9\"]);\n            break;\n        //For cmd needing type such as \"ucom setStepper 22.2\"\n        default:\n            msg = `${type ? type : \"\"} ${cmd} ${value}`;\n            break;\n    }\n    if(context.ws){\n        if (msg){\n            appendLiveLog(context,msg, 'outgoing');\n            showPopup([`Message sent: ${msg}`],'success');\n            // console.log(`Sending message:${msg}`);\n            context.ws.send(msg);\n        }\n    }else{\n        showPopup([`Cannot send command!`, `Please connect to a rig first!`],'error');\n\n    }\n    \n}\nexport function generalPermissionLibrary(code) {\n    switch(code){\n        case 'validateButton':\n            return ['add_calibrationinstrumentprofile', 'add_calibrationcalibratedinstrumentdata', 'add_calibrationcalibratedinstrumentlookupdata',\n                'view_calibrationinstrumentprofile','view_calibrationinstrumentdata','view_calibrationinstrumentlookup',\n                'change_calibrationinstrumentprofile','change_calibrationinstrumentdata','change_calibrationinstrumentlookup'\n            ];\n        case 'getRigsList':\n            return ['view_calibrationrigprofile'];\n        case 'saveRigButton':\n            return ['add_calibrationrigprofile'];\n        case 'deleteRigButton':\n            return ['delete_calibrationrigprofile'];\n        case 'editRigButton':\n            return ['change_calibrationrigprofile'];\n        case 'getCalibProfileList':\n            return ['view_calibrationcalibrationprofile'];\n        case 'saveCalibProfileButton':\n            return ['add_calibrationcalibrationprofile'];\n        case 'deleteCalibProfileButton':\n            return ['delete_calibrationcalibrationprofile'];\n        case 'editCalibProfileButton':\n            return ['change_calibrationcalibrationprofile'];\n        case 'calibratedInstrumentTable':\n            return ['view_calibrationinstrumentprofile','view_calibrationcalibratedinstrumentdata', 'view_calibrationcalibratedinstrumentlookupdata'];\n    }\n}\n//Popup & Notification Section\nexport async function showPopup(messageArray, mode = 'standard', seconds = 1) {\n    const popup = document.getElementById('popupMessageSection');\n    const popupBody = document.getElementById('popupMessageBody');\n\n    // Define color based on mode\n    let color = '';\n    switch (mode) {\n        case \"success\":\n            color = \"green\";\n            break;\n        case \"warning\":\n            color = \"orange\";\n            break;\n        case \"notification\":\n            color = \"#4A6A9C\";\n            break;\n        case \"error\":\n            color = \"red\";\n            break;\n        case \"standard\":\n            color = \"black\";\n            break;\n    }\n\n    // Remove existing animation styles\n    const existingStyles = document.querySelectorAll(\"[id^='pulse-border-']\");\n    existingStyles.forEach((styleElement) => styleElement.remove());\n\n    // Define new animation name and style\n    const animationName = `pulse-border-${color.replace(/[^a-zA-Z0-9]/g, '')}`;\n    const styleSheet = document.createElement('style');\n    styleSheet.type = 'text/css';\n    styleSheet.id = animationName;\n\n    styleSheet.innerHTML = `\n        @keyframes ${animationName} {\n            0% {\n                border-color: white;\n            }\n            5% {\n                border-color: ${color};\n            }\n            100% {\n                border-color: white;\n            }\n        }\n    `;\n    document.head.appendChild(styleSheet);\n\n    // Apply the new animation dynamically\n    popup.style.animation = 'none'; // Reset animation\n    popup.offsetHeight; // Trigger reflow\n    popup.style.animation = `${animationName} 1s infinite linear`;\n\n    // Reset border color explicitly\n    popup.style.borderColor = color;\n\n    // Display the popup\n    popup.style.visibility = 'visible';\n    popup.style.opacity = 1;\n\n    // Clear previous messages and populate new messages\n    popupBody.innerHTML = '';\n    messageArray.forEach((message) => {\n        const subtitleSection = document.createElement('div');\n        subtitleSection.style.fontSize = \"small\";\n        subtitleSection.style.textAlign = \"left\";\n        subtitleSection.textContent = message;\n        subtitleSection.style.overflowWrap = 'break-word'\n        popupBody.appendChild(subtitleSection);\n    });\n    let fadeOutTimeout;\n\n    const closeButton = document.createElement('div');\n    closeButton.style.fontSize = \"small\";\n    closeButton.style.textAlign = \"center\";\n    closeButton.style.cursor = \"pointer\";\n    closeButton.textContent = 'Close';\n    closeButton.style.color = 'darkgrey'\n    closeButton.style.textDecoration='underline'\n    closeButton.onclick = () => {\n        popup.style.visibility = 'hidden';\n        popup.style.animation = 'none'; // Stop the animation on hide\n        popup.style.borderColor = 'white'; // Reset border color\n        clearTimeout(fadeOutTimeout);\n\n    };\n    popupBody.appendChild(closeButton);\n\n    // Fade-out logic\n    fadeOutTimeout =  setTimeout(() => {\n        let opacity = 1;\n        const fadeOut = setInterval(() => {\n            opacity -= 0.25;\n            if (opacity <= 0) {\n                clearInterval(fadeOut);\n                popup.style.visibility = 'hidden';\n                popup.style.animation = 'none'; // Stop the animation on hide\n                popup.style.borderColor = 'white'; // Reset border color\n            }\n            popup.style.opacity = opacity;\n        }, 50);\n    }, seconds * 1000);\n}\nexport async function buildRigActivityNotificationBoard(context){\n    context.set(\"isShowConfig.isShowPopupNotification\", true);\n    // const rigProfileList = context.get('rigProfileList');\n    // console.log(rigProfileList);\n    let responseData = await sendGETRequest(`rig_profile_activity_view/`);\n    const data = responseData['data'];\n    scheduleOnce('afterRender', context, () => {\n\n        const masterPopupContent = document.getElementById('notificationPopupContentBody');\n        if(masterPopupContent){\n\n            masterPopupContent.innerHTML = '';\n\n            // Rigs Activity Label\n            const calibTableTitle = document.createElement('div');\n            calibTableTitle.style.marginTop = '10px';\n            calibTableTitle.style.fontSize = 'medium';\n            calibTableTitle.style.textDecoration = 'underline';\n            calibTableTitle.style.fontWeight = 'bold';\n            calibTableTitle.textContent = `Rig Activity Snapshots`;\n            masterPopupContent.appendChild(calibTableTitle);\n            const table = document.createElement('table');\n            table.style.marginTop=\"10px\"\n            // Rigs Activity Table\n            //Columns\n            const thead = document.createElement('thead');\n            thead.style.borderBottom= ``;\n            const trColumns = document.createElement('tr');\n\n            const  row1HeaderObject = [{key:\"rigID\",label:\"ID\",},{key:\"rigIP\",label:\"IP\",},\n                {key:\"rigName\",label:\"Name\",},\n                {key:\"rigCategory\",label:\"Category\",},\n                {key:\"latestDate\",label:\"Last Update\",},\n                {key:\"status\",label:\"Validation Status\",},\n                {key:\"connection\",label:\"Connection Status\",},\n                {key:\"activity\",label:\"Activity Status\",},\n                {key:\"activeUser\",label:\"User\",},\n                {key:\"company\",label:\"Company\",},\n                {key:\"connectedTo\",label:\"Sensor Connected\",},\n            ]\n            row1HeaderObject.forEach((columnObject, index)=>{\n                const thColumn = document.createElement('th');\n                thColumn.style.fontSize= `small`;\n                thColumn.style.border= `solid`;\n                thColumn.style.borderWidth= `1px`;\n                thColumn.style.borderColor= `black`;\n                thColumn.style.textAlign ='center';\n                thColumn.textContent= `${columnObject['label']}`;\n                trColumns.appendChild(thColumn);\n            });\n\n            thead.appendChild(trColumns);\n            table.appendChild(thead);\n            //Rows\n            const tbody = document.createElement('tbody');\n            for(let i=0;i< data.length;i++){\n                const rigProfile = data[i]\n                const rigID = rigProfile['rigID']\n                const activityJSON = rigProfile['activityJSON']\n                const trRows = document.createElement('tr');\n                row1HeaderObject.forEach((columnObject, index)=>{\n                    const tdRowData = document.createElement('td');\n                    tdRowData.style.fontSize= `small`;\n                    tdRowData.style.border= `solid`;\n                    tdRowData.style.borderWidth= `1px`;\n                    tdRowData.style.textAlign ='center';\n                    switch(columnObject['key']){\n                        case \"status\":\n                            tdRowData.textContent= `${generalStatusLibrary(activityJSON[columnObject['key']]) ? generalStatusLibrary(activityJSON[columnObject['key']]).value : \"\"}`;\n                            break;\n                        case \"connection\":\n                            tdRowData.textContent= `${connectionStatusLibrary(activityJSON[columnObject['key']]) ? connectionStatusLibrary(activityJSON[columnObject['key']]).value : \"\"}`;\n                            break;\n                        case \"activity\":\n                            tdRowData.textContent= `${calibrationStatusLibrary(activityJSON[columnObject['key']]) ? calibrationStatusLibrary(activityJSON[columnObject['key']]).value : \"\"}`;\n                            break;\n                        default:\n                            tdRowData.textContent= `${activityJSON[columnObject['key']] ? activityJSON[columnObject['key']] : \"N/A\"}`;\n                            break;\n\n                    }\n                    trRows.appendChild(tdRowData);\n                });\n                tbody.appendChild(trRows);\n            }\n\n            table.appendChild(tbody);\n            masterPopupContent.appendChild(table);\n\n    \n            //Display and setup Ok Button notificationRefreshButton\n            const refreshButtonComponent = document.getElementById('notificationRefreshButton');\n            refreshButtonComponent.style.display = \"block\";\n            refreshButtonComponent.style.marginRight = \"10px\";\n            refreshButtonComponent.onclick = () => {\n                context.send('closeNotificationPopup'); \n                buildRigActivityNotificationBoard(context);\n            };\n            const okButtonComponent = document.getElementById('notificationOkButton');\n            okButtonComponent.style.display = \"block\";\n            okButtonComponent.onclick = () => {\n                context.send('closeNotificationPopup'); \n            };\n        }\n    });\n}\nexport function buildRigNotificationNotificationBoard(context){\n    context.set(\"isShowConfig.isShowPopupNotification\", true);\n    scheduleOnce('afterRender', context, () => {\n\n        const popupContentSectionComponent = document.getElementById('notificationPopupContentBody');\n        if(popupContentSectionComponent){\n\n            popupContentSectionComponent.innerHTML = '';\n    \n            //Phase I label Section\n            Object.entries(context.get(\"frontendData.rigNotificationData\")).forEach(([key, rigObject]) => {\n                const messagesArray = rigObject['messages'];\n                const data = rigObject['data'];\n\n                const rigLabelSection = document.createElement('div');\n                rigLabelSection.id=`rigLabelSection${data['rigID']}`\n                rigLabelSection.style.fontSize = \"small\";\n                rigLabelSection.textContent = `${data['rigName']} Messages:`;\n                rigLabelSection.style.paddingLeft = \"15px\";\n\n                // Add a long press event listener\n                let pressTimer; // Variable to track the timer for each component\n            \n                // Listen for mouse down (start the timer)\n                rigLabelSection.addEventListener('mousedown', (event) => {\n                    pressTimer = setTimeout(() => {\n                        showPopup([`Notifications for Rig ${data['rigName']} has been cleared.`, 'standard'])\n                        context.set(\"frontendData.rigNotificationData\",{...context.get(\"frontendData.rigNotificationData\"), [data['rigID']]: {data:data, messages:[]} });\n                        context.send('closeNotificationPopup'); \n                        context.send('viewRigNotifications'); \n                        \n                    }, 1500); // 2.5 seconds\n                });\n            \n                // Listen for mouse up (cancel the timer if the user releases the mouse early)\n                rigLabelSection.addEventListener('mouseup', () => {\n                    clearTimeout(pressTimer);\n                });\n            \n                // Listen for mouse leave (cancel the timer if the user moves the mouse away early)\n                rigLabelSection.addEventListener('mouseleave', () => {\n                    clearTimeout(pressTimer);\n                });\n\n                popupContentSectionComponent.appendChild(rigLabelSection);\n\n                messagesArray.forEach((message, index)=>{\n                    const rigMessage = document.createElement('div');\n                    rigMessage.style.fontSize = \"small\";\n                    rigMessage.textContent = `${message}`;\n                    rigMessage.style.paddingLeft = \"30px\";\n                    rigLabelSection.appendChild(rigMessage);\n\n                });\n              });\n    \n            //Display and setup Ok Button\n            const okButtonComponent = document.getElementById('notificationOkButton');\n            okButtonComponent.style.display = \"block\";\n            okButtonComponent.onclick = () => {\n                context.send('closeNotificationPopup'); \n            };\n    \n            // if(context.get(\"calibrationData\")['phaseILookupData']\n        }\n    });\n}\nexport function buildPhaseIIConclusionNotificationBoard(context){\n    const userProfile = context.get('session').data.authenticated['userProfile'];\n    const selectedRigProfile = context.get('userInputtedData.selectedRigProfile');\n    const selectedCalibrationProfile = context.get('userInputtedData.selectedCalibrationProfile');\n    const selectedSensorData = context.get(\"userInputtedData.selectedSensorData\");\n    const selectedAnchorData = context.get(\"userInputtedData.selectedAnchorData\")\n    const calibrationData = context.get('calibrationData');\n    console.log(selectedRigProfile);\n    console.log(selectedCalibrationProfile);\n    console.log(selectedSensorData);\n    console.log(selectedAnchorData);\n    console.log(calibrationData);\n    if(userProfile != null && selectedRigProfile != null && selectedCalibrationProfile != null &&  selectedCalibrationProfile != null && JSON.stringify(selectedSensorData) != \"{}\"){\n        context.set(\"isShowConfig.isShowPopupNotification\", true);\n        scheduleOnce('afterRender', context, () => {\n            const popupContentSectionComponent = document.getElementById('notificationPopupContentBody');\n            const selectedRigData = selectedRigProfile['data'];\n            const selectedCalibrationData = selectedCalibrationProfile['data'];\n            const selectedSensorObj = selectedSensorData;\n            if(popupContentSectionComponent){\n                console.log('buildPhaseIIConclusionNotificationBoard');\n        \n                popupContentSectionComponent.innerHTML = ''; \n\n                //Sub-Title Section\n                const subTitleSection = document.createElement('div');\n                subTitleSection.style.fontSize = \"smaller\";\n                subTitleSection.style.paddingBottom = \"15px\";\n                subTitleSection.textContent = \"Before saving, please have a glance at the content which will be saved to the database. If everything looks correct, please tick the checkbox and click Yes. If you believe something is out of the ordinary, please contact your superior or re-calibrate again.\"\n                popupContentSectionComponent.appendChild(subTitleSection);                 \n                \n                //Row 1(Sensor ID & packId & Rig Profile & Calibration Profile & Job ID) Section\n                const row1Section = document.createElement('div');\n                row1Section.style.width = \"100%\";\n                row1Section.style.display = \"flex\";\n                row1Section.style.justifyContent = \"space-evenly\";\n                //sensorID label-value Section\n                const sensorIDSection = document.createElement('div');\n                sensorIDSection.style.display = \"flex\";\n                sensorIDSection.style.flexDirection = \"row\";\n                sensorIDSection.style.alignItems = \"center\";\n                const sensorIDSectionLabelSection = document.createElement('div');\n                sensorIDSectionLabelSection.style.fontSize = \"small\";\n                sensorIDSectionLabelSection.textContent = \"Sensor ID:\";\n                const sensorIDSectionValueSection = document.createElement('div');\n                sensorIDSectionValueSection.style.fontSize = \"small\";\n                sensorIDSectionValueSection.style.fontWeight = \"bold\";\n                sensorIDSectionValueSection.textContent = selectedSensorObj['sensorID'];\n                sensorIDSection.appendChild(sensorIDSectionLabelSection);\n                sensorIDSection.appendChild(sensorIDSectionValueSection);\n                //packId label-value Section\n                const packIdSection = document.createElement('div');\n                packIdSection.style.display = \"flex\";\n                packIdSection.style.flexDirection = \"row\";\n                packIdSection.style.alignItems = \"center\";\n                const packIdSectionLabelSection = document.createElement('div');\n                packIdSectionLabelSection.style.fontSize = \"small\";\n                packIdSectionLabelSection.textContent = \"Pack ID:\";\n                const packIdSectionValueSection = document.createElement('div');\n                packIdSectionValueSection.style.fontSize = \"small\";\n                packIdSectionValueSection.style.fontWeight = \"bold\";\n                packIdSectionValueSection.textContent = selectedSensorObj['selectedPackProfile'] ? selectedSensorObj['selectedPackProfile']['packId'] : \"\";\n                packIdSection.appendChild(packIdSectionLabelSection);\n                packIdSection.appendChild(packIdSectionValueSection);\n                //Rig label-value Section\n                const rigSection = document.createElement('div');\n                rigSection.style.display = \"flex\";\n                rigSection.style.flexDirection = \"row\";\n                rigSection.style.alignItems = \"center\";\n                const rigLabelSection = document.createElement('div');\n                rigLabelSection.style.fontSize = \"small\";\n                rigLabelSection.textContent = \"Rig Profile ID:\";\n                const rigValueSection = document.createElement('div');\n                rigValueSection.style.fontSize = \"small\";\n                rigValueSection.style.fontWeight = \"bold\";\n                rigValueSection.textContent = selectedRigData['rigID'];\n                rigSection.appendChild(rigLabelSection);\n                rigSection.appendChild(rigValueSection); \n                //Calibration label-value Section\n                const calibSection = document.createElement('div');\n                calibSection.style.display = \"flex\";\n                calibSection.style.flexDirection = \"row\";\n                calibSection.style.alignItems = \"center\";\n                const calibLabelSection = document.createElement('div');\n                calibLabelSection.style.fontSize = \"small\";\n                calibLabelSection.textContent = \"Calibration Profile ID:\";\n                const calibValueSection = document.createElement('div');\n                calibValueSection.style.fontSize = \"small\";\n                calibValueSection.style.fontWeight = \"bold\";\n                calibValueSection.textContent = selectedCalibrationData['id'];\n                calibSection.appendChild(calibLabelSection);\n                calibSection.appendChild(calibValueSection);\n                //Job ID label-value Section\n                const jobIDSection = document.createElement('div');\n                jobIDSection.style.display = \"flex\";\n                jobIDSection.style.flexDirection = \"row\";\n                jobIDSection.style.alignItems = \"center\";\n                const jobIDLabelSection = document.createElement('div');\n                jobIDLabelSection.style.fontSize = \"small\";\n                jobIDLabelSection.textContent = \"Job ID:\";\n                const jobIDValueSection = document.createElement('div');\n                jobIDValueSection.style.fontSize = \"small\";\n                jobIDValueSection.style.fontWeight = \"bold\";\n                jobIDValueSection.textContent = selectedSensorData['jobID'];\n                jobIDSection.appendChild(jobIDLabelSection);\n                jobIDSection.appendChild(jobIDValueSection);\n                //Combine & Build Row\n                row1Section.appendChild(sensorIDSection);\n                row1Section.appendChild(packIdSection);\n                row1Section.appendChild(rigSection);\n                row1Section.appendChild(calibSection);\n                row1Section.appendChild(jobIDSection);\n                popupContentSectionComponent.appendChild(row1Section);\n\n                //Row 2(calibrationDate) Section\n                const row2Section = document.createElement('div');\n                row2Section.style.width = \"100%\";\n                row2Section.style.display = \"flex\";\n                row2Section.style.justifyContent = \"space-evenly\";\n                //calibrationDate label-value Section\n                const latestDateTime = selectedSensorObj['calibrationDate'];\n                const calibrationDateSection = document.createElement('div');\n                calibrationDateSection.style.display = \"flex\";\n                calibrationDateSection.style.flexDirection = \"row\";\n                calibrationDateSection.style.alignItems = \"center\";\n                const calibrationDateLabelSection = document.createElement('div');\n                calibrationDateLabelSection.style.fontSize = \"small\";\n                calibrationDateLabelSection.textContent = \"Calibration Date:\";\n                const calibrationDateValueSection = document.createElement('div');\n                calibrationDateValueSection.style.fontSize = \"small\";\n                calibrationDateValueSection.style.fontWeight = \"bold\";\n                calibrationDateValueSection.textContent = `${latestDateTime}`;\n                calibrationDateSection.appendChild(calibrationDateLabelSection);\n                calibrationDateSection.appendChild(calibrationDateValueSection);\n                //Combine & Build Row\n                row2Section.appendChild(calibrationDateSection);\n                popupContentSectionComponent.appendChild(row2Section);\n\n                //Row 3(sensorName & sensorDescription & employee) Section\n                const row3Section = document.createElement('div');\n                row3Section.style.width = \"100%\";\n                row3Section.style.display = \"flex\";\n                row3Section.style.justifyContent = \"space-evenly\";\n                //sensorName label-value Section\n                const sensorNameSection = document.createElement('div');\n                sensorNameSection.style.display = \"flex\";\n                sensorNameSection.style.flexDirection = \"row\";\n                sensorNameSection.style.alignItems = \"center\";\n                const sensorNameLabelSection = document.createElement('div');\n                sensorNameLabelSection.style.fontSize = \"small\";\n                sensorNameLabelSection.textContent = \"Sensor Alias:\";\n                const sensorNameValueSection = document.createElement('div');\n                sensorNameValueSection.style.fontSize = \"small\";\n                sensorNameValueSection.style.fontWeight = \"bold\";\n                sensorNameValueSection.textContent = selectedSensorObj['sensorName'] ? selectedSensorObj['sensorName'] : \"\";\n                sensorNameSection.appendChild(sensorNameLabelSection);\n                sensorNameSection.appendChild(sensorNameValueSection);\n                //sensorDescription label-value Section\n                const sensorDescriptionSection = document.createElement('div');\n                sensorDescriptionSection.style.display = \"flex\";\n                sensorDescriptionSection.style.flexDirection = \"row\";\n                sensorDescriptionSection.style.alignItems = \"center\";\n                const sensorDescriptionLabelSection = document.createElement('div');\n                sensorDescriptionLabelSection.style.fontSize = \"small\";\n                sensorDescriptionLabelSection.textContent = \"Sensor Description:\";\n                const sensorDescriptionValueSection = document.createElement('div');\n                sensorDescriptionValueSection.style.fontSize = \"small\";\n                sensorDescriptionValueSection.style.fontWeight = \"bold\";\n                sensorDescriptionValueSection.textContent = selectedSensorObj['sensorDescription'] ? selectedSensorObj['sensorDescription'] : \"\";\n                sensorDescriptionSection.appendChild(sensorDescriptionLabelSection);\n                sensorDescriptionSection.appendChild(sensorDescriptionValueSection);\n                //employee label-value Section\n                const employeeSection = document.createElement('div');\n                employeeSection.style.display = \"flex\";\n                employeeSection.style.flexDirection = \"row\";\n                employeeSection.style.alignItems = \"center\";\n                const employeeLabelSection = document.createElement('div');\n                employeeLabelSection.style.fontSize = \"small\";\n                employeeLabelSection.textContent = \"Employee:\";\n                const employeeValueSection = document.createElement('div');\n                employeeValueSection.style.fontSize = \"small\";\n                employeeValueSection.style.fontWeight = \"bold\";\n                employeeValueSection.textContent = `${userProfile['profile']['first_name']} ${userProfile['profile']['last_name']}`;\n                employeeSection.appendChild(employeeLabelSection);\n                employeeSection.appendChild(employeeValueSection);\n                //Combine & Build Row\n                row3Section.appendChild(sensorNameSection);\n                row3Section.appendChild(sensorDescriptionSection);\n                row3Section.appendChild(employeeSection);\n                popupContentSectionComponent.appendChild(row3Section);\n\n                //Row 4(checkpointPositions) Section\n                const row4Section = document.createElement('div');\n                row4Section.style.width = \"100%\";\n                row4Section.style.display = \"flex\";\n                row4Section.style.justifyContent = \"space-evenly\";\n                //checkpointPositions label-value Section\n                const checkpointPositionsSection = document.createElement('div');\n                checkpointPositionsSection.style.display = \"flex\";\n                checkpointPositionsSection.style.flexDirection = \"row\";\n                checkpointPositionsSection.style.alignItems = \"center\";\n                const checkpointPositionsLabelSection = document.createElement('div');\n                checkpointPositionsLabelSection.style.fontSize = \"small\";\n                checkpointPositionsLabelSection.textContent = \"Checkpoints:\";\n                const checkpointPositionsValueSection = document.createElement('div');\n                checkpointPositionsValueSection.style.fontSize = \"small\";\n                checkpointPositionsValueSection.style.fontWeight = \"bold\";\n                checkpointPositionsValueSection.textContent = `[${selectedCalibrationData['checkpointPositions']}]`;\n                checkpointPositionsSection.appendChild(checkpointPositionsLabelSection);\n                checkpointPositionsSection.appendChild(checkpointPositionsValueSection);\n                //Combine & Build Row\n                row4Section.appendChild(checkpointPositionsSection);\n                popupContentSectionComponent.appendChild(row4Section);\n                //Memo Section\n                const memoSectionLabelSection = document.createElement('div');\n                memoSectionLabelSection.style.fontSize = \"small\";\n                memoSectionLabelSection.textContent = \"Memo:\";\n                const memoSectionValueSection = document.createElement('div');\n                memoSectionValueSection.style.marginLeft = \"30px\";\n                memoSectionValueSection.style.whiteSpace = 'pre-line';\n                memoSectionValueSection.style.fontSize = \"small\";\n                memoSectionValueSection.style.fontWeight = \"bold\";\n                memoSectionValueSection.textContent = `${selectedSensorObj['memo'] ? selectedSensorObj['memo'] : \"\"}`;\n                //Combine & Build Row\n                popupContentSectionComponent.appendChild(memoSectionLabelSection);\n                popupContentSectionComponent.appendChild(memoSectionValueSection);\n                //Row 5(anchorProfileData) Section Sensor Type Specific\n                if(selectedAnchorData != null && (selectedCalibrationData['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || selectedCalibrationData['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue)){\n\n                    //anchorSection label-value Section\n                    const anchorSectionLabelSection = document.createElement('div');\n                    anchorSectionLabelSection.style.fontSize = \"small\";\n                    anchorSectionLabelSection.textContent = \"Anchor Object:\";\n                    const anchorSectionValueSection = document.createElement('div');\n                    anchorSectionValueSection.style.marginLeft = \"30px\";\n                    anchorSectionValueSection.style.fontSize = \"small\";\n                    anchorSectionValueSection.style.fontWeight = \"bold\";\n                    anchorSectionValueSection.textContent = `${JSON.stringify(selectedAnchorData)}`;\n                    //Combine & Build Row\n                    popupContentSectionComponent.appendChild(anchorSectionLabelSection);\n                    popupContentSectionComponent.appendChild(anchorSectionValueSection);\n                }\n        \n                //Row 6(phaseILookUpArray) Section \n                //phaseILookUpArray label-value Section\n                const channels = selectedCalibrationData['channels'] - 1;//-1 to disregard the temperature channel\n                const phaseILookUpLabelSection = document.createElement('div');\n                phaseILookUpLabelSection.style.fontSize = \"small\";\n                phaseILookUpLabelSection.textContent = \"Phase I Lookup(Channel):\";\n                popupContentSectionComponent.appendChild(phaseILookUpLabelSection);\n                calibrationData['phaseILookupData'].forEach((lookup, index)=>{\n                    const phaseIValueSection = document.createElement('div');\n                    phaseIValueSection.style.color = \"black\";\n                    phaseIValueSection.style.fontSize = \"small\";\n                    phaseIValueSection.style.fontWeight = \"bold\";\n                    phaseIValueSection.style.whiteSpace = \"nowrap\";\n                    phaseIValueSection.textContent =  `${index + 1} = [${lookup.toString()}]`;\n                    phaseIValueSection.style.marginLeft = \"30px\";\n                    popupContentSectionComponent.appendChild(phaseIValueSection);\n                });\n\n                //Row 7(phaseIICalibratedDataArray) Section \n                //phaseIICalibratedDataArray label-value Section\n                const phaseIILookUpLabelSection = document.createElement('div');\n                phaseIILookUpLabelSection.style.fontSize = \"small\";\n                phaseIILookUpLabelSection.textContent = \"Phase II Calibrated Lookup Values(Channel):\";\n                popupContentSectionComponent.appendChild(phaseIILookUpLabelSection);\n                //Lookup value raw format\n                calibrationData['phaseIICalibrationDataValueData'].forEach((lookup, index)=>{\n                    const phaseIIValueSection = document.createElement('div');\n                    phaseIIValueSection.style.color = \"black\";\n                    phaseIIValueSection.style.fontSize = \"small\";\n                    phaseIIValueSection.style.fontWeight = \"bold\";\n                    phaseIIValueSection.style.whiteSpace = \"nowrap\";\n                    phaseIIValueSection.textContent =  `${index + 1} = [${lookup.toString()}]`;\n                    phaseIIValueSection.style.marginLeft = \"30px\";\n                    popupContentSectionComponent.appendChild(phaseIIValueSection);\n                });\n\n                //Row 8(phaseIICalibratedCurrentArray) Section\n                //phaseIICalibratedCurrentArray label-value Section\n                const phaseIICalibratedCurrentLabelSection = document.createElement('div');\n                phaseIICalibratedCurrentLabelSection.style.fontSize = \"small\";\n                phaseIICalibratedCurrentLabelSection.textContent = \"Phase II Calibrated Current Values:\";\n                popupContentSectionComponent.appendChild(phaseIICalibratedCurrentLabelSection);\n                const phaseIICalibratedCurrentValueSection = document.createElement('div');\n                phaseIICalibratedCurrentValueSection.style.color = \"black\";\n                phaseIICalibratedCurrentValueSection.style.fontSize = \"small\";\n                phaseIICalibratedCurrentValueSection.style.fontWeight = \"bold\";\n                phaseIICalibratedCurrentValueSection.style.whiteSpace = \"nowrap\";\n                phaseIICalibratedCurrentValueSection.textContent =  `[${calibrationData['phaseIICurrentData'].toString()}]`;\n                phaseIICalibratedCurrentValueSection.style.marginLeft = \"30px\";\n                popupContentSectionComponent.appendChild(phaseIICalibratedCurrentValueSection);\n\n                //Row 9(phaseIICalibratedSlopeArray) Section\n                //phaseIICalibratedSlopeArray label-value Section\n                const phaseIICalibratedSlopeLabelSection = document.createElement('div');\n                phaseIICalibratedSlopeLabelSection.style.fontSize = \"small\";\n                phaseIICalibratedSlopeLabelSection.textContent = \"Phase II Calibrated Slope Values:\";\n                popupContentSectionComponent.appendChild(phaseIICalibratedSlopeLabelSection);\n                const phaseIICalibratedSlopeValueSection = document.createElement('div');\n                phaseIICalibratedSlopeValueSection.style.color = \"black\";\n                phaseIICalibratedSlopeValueSection.style.fontSize = \"small\";\n                phaseIICalibratedSlopeValueSection.style.fontWeight = \"bold\";\n                phaseIICalibratedSlopeValueSection.style.whiteSpace = \"nowrap\";\n                phaseIICalibratedSlopeValueSection.textContent =  `[${calibrationData['phaseIISlopeData'].toString()}]`;\n                phaseIICalibratedSlopeValueSection.style.marginLeft = \"30px\";\n                popupContentSectionComponent.appendChild(phaseIICalibratedSlopeValueSection);\n\n                //Row 10(phaseIICalibratedOffsetArray) Section\n                //phaseIICalibratedOffsetArray label-value Section\n                const phaseIICalibratedOffsetLabelSection = document.createElement('div');\n                phaseIICalibratedOffsetLabelSection.style.fontSize = \"small\";\n                phaseIICalibratedOffsetLabelSection.textContent = \"Phase II Calibrated Offset Values:\";\n                popupContentSectionComponent.appendChild(phaseIICalibratedOffsetLabelSection);\n                const phaseIICalibratedOffsetValueSection = document.createElement('div');\n                phaseIICalibratedOffsetValueSection.style.color = \"black\";\n                phaseIICalibratedOffsetValueSection.style.fontSize = \"small\";\n                phaseIICalibratedOffsetValueSection.style.fontWeight = \"bold\";\n                phaseIICalibratedOffsetValueSection.style.whiteSpace = \"nowrap\";\n                phaseIICalibratedOffsetValueSection.textContent =  `[${calibrationData['phaseIIOffsetData'].toString()}]`;\n                phaseIICalibratedOffsetValueSection.style.marginLeft = \"30px\";\n                popupContentSectionComponent.appendChild(phaseIICalibratedOffsetValueSection);\n\n\n                //Display and setup Ok Button\n                const saveButtonComponent = document.getElementById('notificationSaveButton');\n                saveButtonComponent.style.display = \"block\";\n                saveButtonComponent.onclick = () => {\n                    const confirmCheckBoxComponent = document.getElementById('confirmationCheckBox');\n                    if(confirmCheckBoxComponent.checked){\n                        saveAndSendPhaseIIData(context);\n                        \n                    }else{\n                        showPopup(['Please tick checkbox in order to save!'], 'notification', 2);\n                    }\n                };\n                //Display and setup Confirmation Checkbox Button\n                const confirmCheckBoxComponentSection = document.getElementById('confirmationCheckBoxSection');\n                confirmCheckBoxComponentSection.style.display = \"flex\";\n                const confirmCheckBoxComponent = document.getElementById('confirmationCheckBox');\n                confirmCheckBoxComponent.oninput = (event) => {\n                };\n        \n                // if(context.get(\"calibrationData\")['phaseILookupData']\n            }\n        });\n    }else{\n        let messageArr = []\n        if(selectedRigProfile == null){\n            messageArr.push(\"Rig profile is missing!\")\n        }\n        if(selectedCalibrationProfile == null){\n            messageArr.push(\"Calibration profile is missing!\")\n        }\n        if(JSON.stringify(selectedSensorData) === \"{}\"){\n            messageArr.push(\"Sensor data is missing!\")\n        }\n        showPopup(messageArr, 'error', messageArr.length > 2 ? 5: 2);\n    }\n\n\n}\nexport function buildPhaseIIConclusionNotificationBoardV2(context){\n    const userProfile = context.get('session').data.authenticated['userProfile'];\n    const selectedRigProfile = context.get('userInputtedData.selectedRigProfile');\n    const selectedCalibrationProfile = context.get('userInputtedData.selectedCalibrationProfile');\n    const selectedSensorData = context.get(\"userInputtedData.selectedSensorData\");\n    const selectedAnchorData = context.get(\"userInputtedData.selectedAnchorData\")\n    console.log(selectedRigProfile);\n    console.log(selectedCalibrationProfile);\n    console.log(selectedSensorData);\n    console.log(selectedAnchorData);\n    if(userProfile != null && selectedCalibrationProfile != null &&  selectedCalibrationProfile != null && JSON.stringify(selectedSensorData) != \"{}\"){\n        context.set(\"isShowConfig.isShowPopupNotification\", true);\n        scheduleOnce('afterRender', context, () => {\n            const popupContentSectionComponent = document.getElementById('notificationPopupContentBody');\n            const selectedRigData = selectedRigProfile['data'];\n            const selectedCalibrationData = selectedCalibrationProfile['data'];\n            const selectedSensorObj = selectedSensorData;\n            if(popupContentSectionComponent){\n                console.log('buildPhaseIIConclusionNotificationBoard');\n        \n                popupContentSectionComponent.innerHTML = ''; \n\n                //Sub-Title Section\n                const subTitleSection = document.createElement('div');\n                subTitleSection.style.fontSize = \"smaller\";\n                subTitleSection.style.paddingBottom = \"15px\";\n                subTitleSection.textContent = \"Before saving, please have a glance at the content which will be saved to the database. If everything looks correct, please tick the checkbox and click Yes. If you believe something is out of the ordinary, please contact your superior or re-calibrate again.\"\n                popupContentSectionComponent.appendChild(subTitleSection);                 \n                \n                const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n\n                for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                    const sensorObj = batchSensorData[i];\n                    const sensorData = sensorObj['sensorData'];\n                    const calibrationData = sensorObj['calibrationData'];\n\n                    //Sensor Title Section\n                    const sensorTitleSection = document.createElement('div');\n                    sensorTitleSection.style.fontSize = \"medium\";\n                    sensorTitleSection.style.textDecoration = \"underline\";\n                    sensorTitleSection.style.fontWeight = \"bold\";\n                    sensorTitleSection.textContent = `Sensor ${sensorData[\"sensorID\"]}`\n                    popupContentSectionComponent.appendChild(sensorTitleSection);   \n\n                    //Row 1(Sensor ID & packId & Rig Profile & Calibration Profile & Job ID) Section\n                    const row1Section = document.createElement('div');\n                    row1Section.style.width = \"100%\";\n                    row1Section.style.display = \"flex\";\n                    row1Section.style.justifyContent = \"space-evenly\";\n                    //sensorID label-value Section\n                    const sensorIDSection = document.createElement('div');\n                    sensorIDSection.style.display = \"flex\";\n                    sensorIDSection.style.flexDirection = \"row\";\n                    sensorIDSection.style.alignItems = \"center\";\n                    const sensorIDSectionLabelSection = document.createElement('div');\n                    sensorIDSectionLabelSection.style.fontSize = \"small\";\n                    sensorIDSectionLabelSection.textContent = \"Sensor ID:\";\n                    const sensorIDSectionValueSection = document.createElement('div');\n                    sensorIDSectionValueSection.style.fontSize = \"small\";\n                    sensorIDSectionValueSection.style.fontWeight = \"bold\";\n                    sensorIDSectionValueSection.textContent = sensorData['sensorID'];\n                    sensorIDSection.appendChild(sensorIDSectionLabelSection);\n                    sensorIDSection.appendChild(sensorIDSectionValueSection);\n                    //packId label-value Section\n                    const packIdSection = document.createElement('div');\n                    packIdSection.style.display = \"flex\";\n                    packIdSection.style.flexDirection = \"row\";\n                    packIdSection.style.alignItems = \"center\";\n                    const packIdSectionLabelSection = document.createElement('div');\n                    packIdSectionLabelSection.style.fontSize = \"small\";\n                    packIdSectionLabelSection.textContent = \"Pack ID:\";\n                    const packIdSectionValueSection = document.createElement('div');\n                    packIdSectionValueSection.style.fontSize = \"small\";\n                    packIdSectionValueSection.style.fontWeight = \"bold\";\n                    packIdSectionValueSection.textContent = sensorData[\"packObj\"] ? sensorData[\"packObj\"][\"packId\"] : \"\";\n                    packIdSection.appendChild(packIdSectionLabelSection);\n                    packIdSection.appendChild(packIdSectionValueSection);\n                    //Rig label-value Section\n                    const rigSection = document.createElement('div');\n                    rigSection.style.display = \"flex\";\n                    rigSection.style.flexDirection = \"row\";\n                    rigSection.style.alignItems = \"center\";\n                    const rigLabelSection = document.createElement('div');\n                    rigLabelSection.style.fontSize = \"small\";\n                    rigLabelSection.textContent = \"Rig Profile ID:\";\n                    const rigValueSection = document.createElement('div');\n                    rigValueSection.style.fontSize = \"small\";\n                    rigValueSection.style.fontWeight = \"bold\";\n                    rigValueSection.textContent = selectedRigData['rigID'] ? selectedRigData['rigID'] : \"\";\n                    rigSection.appendChild(rigLabelSection);\n                    rigSection.appendChild(rigValueSection); \n                    //Calibration label-value Section\n                    const calibSection = document.createElement('div');\n                    calibSection.style.display = \"flex\";\n                    calibSection.style.flexDirection = \"row\";\n                    calibSection.style.alignItems = \"center\";\n                    const calibLabelSection = document.createElement('div');\n                    calibLabelSection.style.fontSize = \"small\";\n                    calibLabelSection.textContent = \"Calibration Profile ID:\";\n                    const calibValueSection = document.createElement('div');\n                    calibValueSection.style.fontSize = \"small\";\n                    calibValueSection.style.fontWeight = \"bold\";\n                    calibValueSection.textContent = selectedCalibrationData['id'];\n                    calibSection.appendChild(calibLabelSection);\n                    calibSection.appendChild(calibValueSection);\n                    //Job ID label-value Section\n                    const jobIDSection = document.createElement('div');\n                    jobIDSection.style.display = \"flex\";\n                    jobIDSection.style.flexDirection = \"row\";\n                    jobIDSection.style.alignItems = \"center\";\n                    const jobIDLabelSection = document.createElement('div');\n                    jobIDLabelSection.style.fontSize = \"small\";\n                    jobIDLabelSection.textContent = \"Job ID:\";\n                    const jobIDValueSection = document.createElement('div');\n                    jobIDValueSection.style.fontSize = \"small\";\n                    jobIDValueSection.style.fontWeight = \"bold\";\n                    jobIDValueSection.textContent = selectedSensorData['jobID'];\n                    jobIDSection.appendChild(jobIDLabelSection);\n                    jobIDSection.appendChild(jobIDValueSection);\n                    //Combine & Build Row\n                    row1Section.appendChild(sensorIDSection);\n                    row1Section.appendChild(packIdSection);\n                    row1Section.appendChild(rigSection);\n                    row1Section.appendChild(calibSection);\n                    row1Section.appendChild(jobIDSection);\n                    popupContentSectionComponent.appendChild(row1Section);\n                    \n                    //Row 2(calibrationDate) Section\n                    const row2Section = document.createElement('div');\n                    row2Section.style.width = \"100%\";\n                    row2Section.style.display = \"flex\";\n                    row2Section.style.justifyContent = \"space-evenly\";\n                    //calibrationDate label-value Section\n                    const latestDateTime = sensorData[\"calibrationDate\"];\n\n                    const calibrationDateSection = document.createElement('div');\n                    calibrationDateSection.style.display = \"flex\";\n                    calibrationDateSection.style.flexDirection = \"row\";\n                    calibrationDateSection.style.alignItems = \"center\";\n                    const calibrationDateLabelSection = document.createElement('div');\n                    calibrationDateLabelSection.style.fontSize = \"small\";\n                    calibrationDateLabelSection.textContent = \"Calibration Date:\";\n                    const calibrationDateValueSection = document.createElement('div');\n                    calibrationDateValueSection.style.fontSize = \"small\";\n                    calibrationDateValueSection.style.fontWeight = \"bold\";\n                    calibrationDateValueSection.textContent = `${latestDateTime}`;\n                    calibrationDateSection.appendChild(calibrationDateLabelSection);\n                    calibrationDateSection.appendChild(calibrationDateValueSection);\n                    //Combine & Build Row\n                    row2Section.appendChild(calibrationDateSection);\n                    popupContentSectionComponent.appendChild(row2Section);\n\n                    //Row 3(sensorName & sensorDescription & employee) Section\n                    const row3Section = document.createElement('div');\n                    row3Section.style.width = \"100%\";\n                    row3Section.style.display = \"flex\";\n                    row3Section.style.justifyContent = \"space-evenly\";\n                    //sensorName label-value Section\n                    const sensorNameSection = document.createElement('div');\n                    sensorNameSection.style.display = \"flex\";\n                    sensorNameSection.style.flexDirection = \"row\";\n                    sensorNameSection.style.alignItems = \"center\";\n                    const sensorNameLabelSection = document.createElement('div');\n                    sensorNameLabelSection.style.fontSize = \"small\";\n                    sensorNameLabelSection.textContent = \"Sensor Alias:\";\n                    const sensorNameValueSection = document.createElement('div');\n                    sensorNameValueSection.style.fontSize = \"small\";\n                    sensorNameValueSection.style.fontWeight = \"bold\";\n                    sensorNameValueSection.textContent = sensorData['sensorName'] ? sensorData['sensorName'] : \"\";\n                    sensorNameSection.appendChild(sensorNameLabelSection);\n                    sensorNameSection.appendChild(sensorNameValueSection);\n                    //sensorDescription label-value Section\n                    const sensorDescriptionSection = document.createElement('div');\n                    sensorDescriptionSection.style.display = \"flex\";\n                    sensorDescriptionSection.style.flexDirection = \"row\";\n                    sensorDescriptionSection.style.alignItems = \"center\";\n                    const sensorDescriptionLabelSection = document.createElement('div');\n                    sensorDescriptionLabelSection.style.fontSize = \"small\";\n                    sensorDescriptionLabelSection.textContent = \"Sensor Description:\";\n                    const sensorDescriptionValueSection = document.createElement('div');\n                    sensorDescriptionValueSection.style.fontSize = \"small\";\n                    sensorDescriptionValueSection.style.fontWeight = \"bold\";\n                    sensorDescriptionValueSection.textContent = sensorData['sensorDescription'] ? sensorData['sensorDescription'] : \"\";\n                    sensorDescriptionSection.appendChild(sensorDescriptionLabelSection);\n                    sensorDescriptionSection.appendChild(sensorDescriptionValueSection);\n                    //employee label-value Section\n                    const employeeSection = document.createElement('div');\n                    employeeSection.style.display = \"flex\";\n                    employeeSection.style.flexDirection = \"row\";\n                    employeeSection.style.alignItems = \"center\";\n                    const employeeLabelSection = document.createElement('div');\n                    employeeLabelSection.style.fontSize = \"small\";\n                    employeeLabelSection.textContent = \"Employee:\";\n                    const employeeValueSection = document.createElement('div');\n                    employeeValueSection.style.fontSize = \"small\";\n                    employeeValueSection.style.fontWeight = \"bold\";\n                    employeeValueSection.textContent = `${userProfile['profile']['first_name']} ${userProfile['profile']['last_name']}`;\n                    employeeSection.appendChild(employeeLabelSection);\n                    employeeSection.appendChild(employeeValueSection);\n                    //Combine & Build Row\n                    row3Section.appendChild(sensorNameSection);\n                    row3Section.appendChild(sensorDescriptionSection);\n                    row3Section.appendChild(employeeSection);\n                    popupContentSectionComponent.appendChild(row3Section);\n\n                    //Row 4(checkpointPositions) Section\n                    const row4Section = document.createElement('div');\n                    row4Section.style.width = \"100%\";\n                    row4Section.style.display = \"flex\";\n                    row4Section.style.justifyContent = \"space-evenly\";\n                    //checkpointPositions label-value Section\n                    const checkpointPositionsSection = document.createElement('div');\n                    checkpointPositionsSection.style.display = \"flex\";\n                    checkpointPositionsSection.style.flexDirection = \"row\";\n                    checkpointPositionsSection.style.alignItems = \"center\";\n                    const checkpointPositionsLabelSection = document.createElement('div');\n                    checkpointPositionsLabelSection.style.fontSize = \"small\";\n                    checkpointPositionsLabelSection.textContent = \"Checkpoints:\";\n                    const checkpointPositionsValueSection = document.createElement('div');\n                    checkpointPositionsValueSection.style.fontSize = \"small\";\n                    checkpointPositionsValueSection.style.fontWeight = \"bold\";\n                    checkpointPositionsValueSection.textContent = `[${selectedCalibrationData['checkpointPositions']}]`;\n                    checkpointPositionsSection.appendChild(checkpointPositionsLabelSection);\n                    checkpointPositionsSection.appendChild(checkpointPositionsValueSection);\n                    //Combine & Build Row\n                    row4Section.appendChild(checkpointPositionsSection);\n                    popupContentSectionComponent.appendChild(row4Section);\n                    //Memo Section\n                    const memoSectionLabelSection = document.createElement('div');\n                    memoSectionLabelSection.style.fontSize = \"small\";\n                    memoSectionLabelSection.textContent = \"Memo:\";\n                    const memoSectionValueSection = document.createElement('div');\n                    memoSectionValueSection.style.marginLeft = \"30px\";\n                    memoSectionValueSection.style.whiteSpace = 'pre-line';\n                    memoSectionValueSection.style.fontSize = \"small\";\n                    memoSectionValueSection.style.fontWeight = \"bold\";\n                    memoSectionValueSection.textContent = `${selectedSensorObj['memo'] ? selectedSensorObj['memo'] : \"\"}`;\n                    //Combine & Build Row\n                    popupContentSectionComponent.appendChild(memoSectionLabelSection);\n                    popupContentSectionComponent.appendChild(memoSectionValueSection);\n\n                    //Row 5(anchorProfileData) Section Sensor Type Specific\n                    if(selectedAnchorData != null && (selectedCalibrationData['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || selectedCalibrationData['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue)){\n    \n                        //anchorSection label-value Section\n                        const anchorSectionLabelSection = document.createElement('div');\n                        anchorSectionLabelSection.style.fontSize = \"small\";\n                        anchorSectionLabelSection.textContent = \"Anchor Object:\";\n                        const anchorSectionValueSection = document.createElement('div');\n                        anchorSectionValueSection.style.marginLeft = \"30px\";\n                        anchorSectionValueSection.style.fontSize = \"small\";\n                        anchorSectionValueSection.style.fontWeight = \"bold\";\n                        anchorSectionValueSection.textContent = `${JSON.stringify(selectedAnchorData)}`;\n                        //Combine & Build Row\n                        popupContentSectionComponent.appendChild(anchorSectionLabelSection);\n                        popupContentSectionComponent.appendChild(anchorSectionValueSection);\n                    }\n        \n                    //Row 6(lookupData) Section \n                    //lookupData label-value Section\n                    const phaseILookUpLabelSection = document.createElement('div');\n                    phaseILookUpLabelSection.style.fontSize = \"small\";\n                    phaseILookUpLabelSection.textContent = \"Phase I Lookup(Channel):\";\n                    popupContentSectionComponent.appendChild(phaseILookUpLabelSection);\n                    calibrationData['lookupData'].forEach((lookup, index)=>{\n                        const phaseIValueSection = document.createElement('div');\n                        phaseIValueSection.style.color = \"black\";\n                        phaseIValueSection.style.fontSize = \"small\";\n                        phaseIValueSection.style.fontWeight = \"bold\";\n                        phaseIValueSection.style.whiteSpace = \"nowrap\";\n                        phaseIValueSection.textContent =  `CH${index + 1} = [${lookup.toString()}]`;\n                        phaseIValueSection.style.marginLeft = \"30px\";\n                        popupContentSectionComponent.appendChild(phaseIValueSection);\n                    });\n\n                    //Row 7(calibrationDataData) Section \n                    //calibrationDataData label-value Section\n                    const phaseIILookUpLabelSection = document.createElement('div');\n                    phaseIILookUpLabelSection.style.fontSize = \"small\";\n                    phaseIILookUpLabelSection.textContent = \"Phase II Calibrated Lookup Values(Channel):\";\n                    popupContentSectionComponent.appendChild(phaseIILookUpLabelSection);\n                    //Lookup value raw format\n                    calibrationData['calibrationDataData'].forEach((lookup, index)=>{\n                        const phaseIIValueSection = document.createElement('div');\n                        phaseIIValueSection.style.color = \"black\";\n                        phaseIIValueSection.style.fontSize = \"small\";\n                        phaseIIValueSection.style.fontWeight = \"bold\";\n                        phaseIIValueSection.style.whiteSpace = \"nowrap\";\n                        phaseIIValueSection.textContent =  `CH${index + 1} = [${lookup.toString()}]`;\n                        phaseIIValueSection.style.marginLeft = \"30px\";\n                        popupContentSectionComponent.appendChild(phaseIIValueSection);\n                    });\n\n                    //Row 8(currentData) Section\n                    //currentData label-value Section\n                    const phaseIICalibratedCurrentLabelSection = document.createElement('div');\n                    phaseIICalibratedCurrentLabelSection.style.fontSize = \"small\";\n                    phaseIICalibratedCurrentLabelSection.textContent = \"Phase II Calibrated Current Values:\";\n                    popupContentSectionComponent.appendChild(phaseIICalibratedCurrentLabelSection);\n                    const phaseIICalibratedCurrentValueSection = document.createElement('div');\n                    phaseIICalibratedCurrentValueSection.style.color = \"black\";\n                    phaseIICalibratedCurrentValueSection.style.fontSize = \"small\";\n                    phaseIICalibratedCurrentValueSection.style.fontWeight = \"bold\";\n                    phaseIICalibratedCurrentValueSection.style.whiteSpace = \"nowrap\";\n                    phaseIICalibratedCurrentValueSection.textContent =  `[${calibrationData['currentData'].toString()}]`;\n                    phaseIICalibratedCurrentValueSection.style.marginLeft = \"30px\";\n                    popupContentSectionComponent.appendChild(phaseIICalibratedCurrentValueSection);\n\n                    //Row 9(slopeData) Section\n                    //slopeData label-value Section\n                    const phaseIICalibratedSlopeLabelSection = document.createElement('div');\n                    phaseIICalibratedSlopeLabelSection.style.fontSize = \"small\";\n                    phaseIICalibratedSlopeLabelSection.textContent = \"Phase II Calibrated Slope Values:\";\n                    popupContentSectionComponent.appendChild(phaseIICalibratedSlopeLabelSection);\n                    const phaseIICalibratedSlopeValueSection = document.createElement('div');\n                    phaseIICalibratedSlopeValueSection.style.color = \"black\";\n                    phaseIICalibratedSlopeValueSection.style.fontSize = \"small\";\n                    phaseIICalibratedSlopeValueSection.style.fontWeight = \"bold\";\n                    phaseIICalibratedSlopeValueSection.style.whiteSpace = \"nowrap\";\n                    phaseIICalibratedSlopeValueSection.textContent =  `[${calibrationData['slopeData'].toString()}]`;\n                    phaseIICalibratedSlopeValueSection.style.marginLeft = \"30px\";\n                    popupContentSectionComponent.appendChild(phaseIICalibratedSlopeValueSection);\n\n                    //Row 10(offsetData) Section\n                    //offsetData label-value Section\n                    const phaseIICalibratedOffsetLabelSection = document.createElement('div');\n                    phaseIICalibratedOffsetLabelSection.style.fontSize = \"small\";\n                    phaseIICalibratedOffsetLabelSection.textContent = \"Phase II Calibrated Offset Values:\";\n                    popupContentSectionComponent.appendChild(phaseIICalibratedOffsetLabelSection);\n                    const phaseIICalibratedOffsetValueSection = document.createElement('div');\n                    phaseIICalibratedOffsetValueSection.style.color = \"black\";\n                    phaseIICalibratedOffsetValueSection.style.fontSize = \"small\";\n                    phaseIICalibratedOffsetValueSection.style.fontWeight = \"bold\";\n                    phaseIICalibratedOffsetValueSection.style.whiteSpace = \"nowrap\";\n                    phaseIICalibratedOffsetValueSection.textContent =  `[${calibrationData['offsetData'].toString()}]`;\n                    phaseIICalibratedOffsetValueSection.style.marginLeft = \"30px\";\n                    popupContentSectionComponent.appendChild(phaseIICalibratedOffsetValueSection);\n\n                }\n\n\n                //Display and setup Ok Button\n                const saveButtonComponent = document.getElementById('notificationSaveButton');\n                saveButtonComponent.style.display = \"block\";\n                saveButtonComponent.onclick = () => {\n                    const confirmCheckBoxComponent = document.getElementById('confirmationCheckBox');\n                    if(confirmCheckBoxComponent.checked){\n                        saveAndSendPhaseIIV2Data(context);\n                        \n                    }else{\n                        showPopup(['Please tick checkbox in order to save!'], 'notification', 2);\n                    }\n                };\n                //Display and setup Confirmation Checkbox Button\n                const confirmCheckBoxComponentSection = document.getElementById('confirmationCheckBoxSection');\n                confirmCheckBoxComponentSection.style.display = \"flex\";\n                const confirmCheckBoxComponent = document.getElementById('confirmationCheckBox');\n                confirmCheckBoxComponent.oninput = (event) => {\n                };\n        \n                // if(context.get(\"calibrationData\")['phaseILookupData']\n            }\n        });\n    }else{\n        let messageArr = []\n        if(selectedRigProfile == null){\n            messageArr.push(\"Rig profile is missing!\")\n        }\n        if(selectedCalibrationProfile == null){\n            messageArr.push(\"Calibration profile is missing!\")\n        }\n        if(JSON.stringify(selectedSensorData) === \"{}\"){\n            messageArr.push(\"Sensor data is missing!\")\n        }\n        showPopup(messageArr, 'error', messageArr.length > 2 ? 5: 2);\n    }\n\n\n}\nexport async function buildBatchCalibrationSheet(context,isVisiblePopup){\n    try{\n        const batchCBData = context.get(\"userInputtedData.batchCheckboxData\");\n        let payload = {\n        };\n        for (const key in batchCBData) {\n            payload[`cb${batchCBData[key]['calibrationID']}`] = batchCBData[key]['calibrationID'];\n        }\n        let responseData = await sendGETRequest(`batch_sensor_profile/`,payload);\n        const rawData = responseData['data'];\n        // Filter to certificate-ready sensors. The BE now exposes a canonical `Progress` object\n        // with `isCertificateReady` (phaseI && phaseII && all per-channel calibration data\n        // populated). We prefer that. Fallback to the flat phase flags for backward compatibility\n        // if a row is missing `Progress`.\n        const _firstTruthy = (obj, keys) => {\n            if(!obj){ return undefined; }\n            for(const k of keys){\n                if(obj[k] !== undefined && obj[k] !== null){ return obj[k]; }\n            }\n            return undefined;\n        };\n        const data = [];\n        const skipped = [];\n        rawData.forEach((c) => {\n            const sp = c && c['sensorProfile'] || {};\n            // BE may include Progress on either the wrapper object or sensorProfile depending\n            // on serializer; check both.\n            const progress = _firstTruthy(c, ['Progress', 'progress']) || _firstTruthy(sp, ['Progress', 'progress']);\n            const phaseI = !!_firstTruthy(sp, ['phaseICompleted', 'phase-i-completed']);\n            const phaseII = !!_firstTruthy(sp, ['phaseIiCompleted', 'phaseIICompleted', 'phase-ii-completed']);\n            const isReady = progress\n                ? !!_firstTruthy(progress, ['isCertificateReady', 'is-certificate-ready'])\n                : (phaseI && phaseII);\n            const conclusion = progress ? _firstTruthy(progress, ['Conclusion', 'conclusion']) : null;\n            if(isReady){\n                data.push(c);\n            } else {\n                skipped.push({\n                    id: sp['calibrationID'],\n                    sensorID: sp['sensorID'],\n                    p1: phaseI,\n                    p2: phaseII,\n                    conclusion,\n                });\n            }\n        });\n        if(skipped.length > 0){\n            const lines = [\n                `Skipped ${skipped.length} of ${rawData.length} selected calibration${rawData.length === 1 ? '' : 's'} — not certificate-ready:`,\n            ].concat(skipped.map(s => {\n                const conc = s.conclusion ? ` (${s.conclusion})` : '';\n                return `Calib ${s.id} (${s.sensorID || 'no sensor ID'})${conc}: Phase I ${s.p1 ? '✓' : '✗'}, Phase II ${s.p2 ? '✓' : '✗'}`;\n            }));\n            showPopup(lines, 'warning', 6);\n        }\n        if (data.length > 0){\n\n            context.set(\"isShowConfig.isShowPopupNotification\", true);\n            scheduleOnce('afterRender', context, () => {\n                const masterContent = document.getElementById('notificationPopupContentBody');\n                masterContent.style.fontFamily = \"sans-serif\"\n                if(masterContent){\n\n                    //Start for looping each certificate obj data\n                    data.forEach((certificateObj, index)=>{\n                        scheduleOnce('afterRender', context, () => {\n                            const sensorProfile = certificateObj['sensorProfile'];\n                            const phaseILookupData = certificateObj['calibrationData']['phaseILookupData'][0];\n                            const phaseIICalibrationDataValueData = certificateObj['calibrationData']['phaseIICalibrationDataValueData'];\n                            // BE returns phaseIICurrentData as a flat array (e.g. [\"0.00\", \"8.33\", ...]).\n                            // Indexing [0] would extract a single string and then `phaseIICurrentData[i]`\n                            // would return individual CHARACTERS instead of checkpoint values, which\n                            // (1) garbles the APPLIED DISP column in the certificate table and\n                            // (2) passes a string to Chart.js as `xValues`, blowing up chart render.\n                            const phaseIICurrentData = certificateObj['calibrationData']['phaseIICurrentData'];\n                            const phaseIISlopeData = certificateObj['calibrationData']['phaseIISlopeData'];\n                            const phaseIIOffsetData = certificateObj['calibrationData']['phaseIIOffsetData'];\n                            // console.log(sensorProfile);\n                            // console.log(phaseILookupData);\n                            // console.log(phaseIICalibrationDataValueData);\n                            // console.log(phaseIICurrentData);\n                            // console.log(phaseIISlopeData);\n                            // console.log(phaseIIOffsetData);\n                            const masterPopupContent = document.createElement('div');\n                            masterPopupContent.id=`certificate-${index}`;\n                            Object.assign(masterPopupContent.style, {\n                                paddingLeft: '20px',\n                                paddingRight: '20px',\n                                display: 'flex',\n                                flexDirection: 'column',\n                                justifyContent: 'space-between',\n                                width: '100%',\n                                fontFamily: \"sans-serif\"\n                            });\n                            //Logo header\n                            const logoComponent = document.createElement('img');\n                            // logoComponent.style.marginTop = `${index * 2}px`;\n                            logoComponent.style.alignSelf = 'center';\n                            logoComponent.style.width = '30%';\n                            logoComponent.src = '/assets/images/yieldpoint-logo.png';\n                            masterPopupContent.appendChild(logoComponent);\n                            //Main Title\n                            const mainComponent = document.createElement('div');\n                            mainComponent.style.fontSize = 'medium';\n                            mainComponent.style.fontWeight = 'bold';\n                            mainComponent.style.width=\"100%\";\n                            mainComponent.style.display=\"flex\";\n                            mainComponent.style.justifyContent=\"center\";\n                            mainComponent.textContent = `${sensorProfile['sensorID']} Calibration Report`;\n                            // mainComponent.style.letterSpacing = '0.01px';\n            \n                            masterPopupContent.appendChild(mainComponent);\n                            //Row 1 Section\n                            //Quick Detail Title\n                            const quickDetailTitle = document.createElement('div');\n                            quickDetailTitle.style.marginTop = '10px';\n                            quickDetailTitle.style.fontSize = 'small';\n                            quickDetailTitle.style.textDecoration = 'underline';\n                            quickDetailTitle.style.width=\"100%\";\n                            quickDetailTitle.style.fontWeight = 'bold';\n                            quickDetailTitle.textContent = `Quick Detail`;\n                            // quickDetailTitle.style.letterSpacing = '0.01px';\n                            const row1Section = document.createElement('div');\n                            row1Section.style.marginLeft = '25px';\n                            row1Section.style.fontSize = 'smaller';\n                            row1Section.style.width = '100%';\n                            row1Section.style.display = 'flex';\n                            row1Section.style.flexDirection = 'row';\n                            row1Section.style.alignItems = 'center';\n                            //Job ID \n                            const jobIDComponent = document.createElement('div');\n                            jobIDComponent.style.width = '20%';\n                            jobIDComponent.textContent = `Job: ${sensorProfile['jobID']}`;\n                            //Sensor Name \n                            const sensorNameComponent = document.createElement('div');\n                            sensorNameComponent.style.width = '20%';\n                            sensorNameComponent.textContent = `Name: ${sensorProfile['sensorName'] ? sensorProfile['sensorName'] : ''}`;\n                            //Sensor Description \n                            const sensorDescriptionComponent = document.createElement('div');\n                            sensorDescriptionComponent.style.width = '20%';\n                            sensorDescriptionComponent.textContent = `Description: ${sensorProfile['sensorDescription']}`;\n                            //Calibration Date \n                            const calibrationDateComponent = document.createElement('div');\n                            calibrationDateComponent.style.width = '40%';\n                            calibrationDateComponent.textContent = `Calibration Date: ${sensorProfile['calibrationDate'].split(' ')[0]}`;\n                            //Append to Row 1\n                            masterPopupContent.appendChild(quickDetailTitle);\n                            masterPopupContent.appendChild(row1Section);\n                            row1Section.appendChild(jobIDComponent);\n                            row1Section.appendChild(sensorNameComponent);\n                            row1Section.appendChild(sensorDescriptionComponent);\n                            row1Section.appendChild(calibrationDateComponent);\n            \n                            //Row 2A Section\n                            const technicalDetailTitle = document.createElement('div');\n                            technicalDetailTitle.style.marginTop = '10px';\n                            technicalDetailTitle.style.fontSize = 'small';\n                            technicalDetailTitle.style.textDecoration = 'underline';\n                            technicalDetailTitle.style.fontWeight = 'bold';\n                            technicalDetailTitle.textContent = `Technical Detail`;\n                            // technicalDetailTitle.style.letterSpacing = '0.01px';\n                            const row2ASection = document.createElement('div');\n                            row2ASection.style.marginLeft = '25px';\n                            row2ASection.style.fontSize = 'smaller';\n                            row2ASection.style.width = '100%';\n                            row2ASection.style.display = 'flex';\n                            row2ASection.style.flexDirection = 'row';\n                            row2ASection.style.alignItems = 'center';\n                            //Employee\n                            const employeeComponent = document.createElement('div');\n                            employeeComponent.style.width = '20%';\n                            employeeComponent.textContent = `Employee: ${sensorProfile['employee']}`;\n                            //Sensor ID \n                            const sensorIDComponent = document.createElement('div');\n                            sensorIDComponent.style.width = '20%';\n                            sensorIDComponent.textContent = `ID: ${sensorProfile['sensorID']}`;\n                            //Sensor Type\n                            const sensorTypeComponent = document.createElement('div');\n                            sensorTypeComponent.style.width = '20%';\n                            sensorTypeComponent.textContent = `Type: ${sensorProfile['type']}`;\n                            //Sensor Unit\n                            const sensorUnitComponent = document.createElement('div');\n                            sensorUnitComponent.style.width = '20%';\n                            sensorUnitComponent.textContent = `Unit: ${sensorProfile['unit']}`;\n            \n                            //Append to Row 2\n                            masterPopupContent.appendChild(technicalDetailTitle);\n                            masterPopupContent.appendChild(row2ASection);\n                            row2ASection.appendChild(employeeComponent);\n                            row2ASection.appendChild(sensorIDComponent);\n                            row2ASection.appendChild(sensorTypeComponent);\n                            row2ASection.appendChild(sensorUnitComponent);\n            \n                            //Row 2B Section\n                            const row2BSection = document.createElement('div');\n                            row2BSection.style.marginLeft = '25px';\n                            row2BSection.style.fontSize = 'smaller';\n                            row2BSection.style.width = '100%';\n                            row2BSection.style.display = 'flex';\n                            row2BSection.style.flexDirection = 'row';\n                            row2BSection.style.alignItems = 'center';\n                            //Rig Calib Cert S/N\n                            const refSNComponent = document.createElement('div');\n                            refSNComponent.style.width = '20%';\n                            refSNComponent.textContent = `Ref. Cert. S/N: ${sensorProfile['rigReferenceID']}`;\n                            //Rig Calib Cert S/N\n                            const refCertValueComponent = document.createElement('div');\n                            refCertValueComponent.style.width = '20%';\n                            refCertValueComponent.textContent = `Ref. Cert.: ${sensorProfile['rigReferenceCalibrationValue']}`;\n                            //Rig Calib Cert Date\n                            const refCertDateComponent = document.createElement('div');\n                            refCertDateComponent.style.width = '60%';\n                            refCertDateComponent.textContent = `Ref. Cert. Date: ${sensorProfile['rigReferenceCalibrationDate']}`;\n                            //Append to Row 2B\n                            // masterPopupContent.appendChild(row2BSection);\n                            row2BSection.appendChild(refSNComponent);\n                            row2BSection.appendChild(refCertValueComponent);\n                            row2BSection.appendChild(refCertDateComponent);\n            \n            \n                            //Calibration Data Table \n                            //Data Table Title\n                            const calibTableTitle = document.createElement('div');\n                            calibTableTitle.style.marginTop = '10px';\n                            calibTableTitle.style.fontSize = 'small';\n                            calibTableTitle.style.textDecoration = 'underline';\n                            calibTableTitle.style.fontWeight = 'bold';\n                            calibTableTitle.textContent = `Data`;\n                            masterPopupContent.appendChild(calibTableTitle);\n                            const table = document.createElement('table');\n                            table.style.marginTop=\"10px\"\n                            //Columns\n                            const thead = document.createElement('thead');\n                            thead.style.borderBottom= ``;\n                            const trColumns = document.createElement('tr');\n            \n                            let columns = []\n                            for(let i=0;i< sensorProfile['channels'];i++){\n                                if(i == 0){\n                                    columns.push(\"APPLIED DISP\");\n                                }else{\n                                    columns.push(`DISP ${i}`);\n                                }\n                            }\n                            columns.forEach((columnLabel, index)=>{\n                                const thColumn = document.createElement('th');\n                                thColumn.style.fontSize= `small`;\n                                thColumn.style.border= `solid`;\n                                thColumn.style.borderWidth= `1px`;\n                                thColumn.style.borderColor= `black`;\n                                thColumn.style.textAlign ='center';\n                                thColumn.textContent= `${columnLabel}`;\n                                trColumns.appendChild(thColumn);\n                            });\n            \n                            thead.appendChild(trColumns);\n                            table.appendChild(thead);\n                            //Rows\n                            const tbody = document.createElement('tbody');\n                            const checkpointPositionsLength = sensorProfile['checkpointPositions'].length\n                            for(let i=0;i< checkpointPositionsLength;i++){\n                                const trRows = document.createElement('tr');\n                                //Current Data\n                                const tdRowCurr = document.createElement('td');\n                                tdRowCurr.style.fontSize= `small`;\n                                tdRowCurr.style.border= `solid`;\n                                tdRowCurr.style.borderWidth= `1px`;\n                                tdRowCurr.style.textAlign ='center';\n                                tdRowCurr.textContent= phaseIICurrentData[i] ? `${phaseIICurrentData[i]}` : \"\";\n                                trRows.appendChild(tdRowCurr);\n                                phaseIICalibrationDataValueData.forEach((channelArray, index)=>{\n                                    //Displacement Row\n                                    const tdRowDisp = document.createElement('td');\n                                    tdRowDisp.style.fontSize= `small`;\n                                    tdRowDisp.style.border= `solid`;\n                                    tdRowDisp.style.borderWidth= `1px`;\n                                    tdRowDisp.style.textAlign ='center';\n                                    tdRowDisp.textContent= channelArray[i] ? `${channelArray[i]}` : \"\";\n                                    trRows.appendChild(tdRowDisp);\n                                });\n                                tbody.appendChild(trRows);\n                            }\n                            //Cal.Slop Data\n                            const trSlopeRows = document.createElement('tr');\n                            const tdSlopeCol = document.createElement('td');\n                            tdSlopeCol.style.fontSize= `small`;\n                            tdSlopeCol.style.border= `solid`;\n                            tdSlopeCol.style.borderWidth= `1px`;\n                            tdSlopeCol.style.textAlign ='center';\n                            tdSlopeCol.textContent= `CAL. SLOPE`;\n                            trSlopeRows.appendChild(tdSlopeCol);\n                            phaseIISlopeData.forEach((slopeVal, index)=>{\n                                //Displacement Row\n                                const tdRowDisp = document.createElement('td');\n                                tdRowDisp.style.fontSize= `small`;\n                                tdRowDisp.style.border= `solid`;\n                                tdRowDisp.style.borderWidth= `1px`;\n                                tdRowDisp.style.textAlign ='center';\n                                tdRowDisp.textContent= `${slopeVal}`;\n                                trSlopeRows.appendChild(tdRowDisp);\n                            });\n                            tbody.appendChild(trSlopeRows);\n            \n                            //Cal.Offset Data\n                            const trOffsetRows = document.createElement('tr');\n                            const tdoffsetCol = document.createElement('td');\n                            tdoffsetCol.style.fontSize= `small`;\n                            tdoffsetCol.style.border= `solid`;\n                            tdoffsetCol.style.borderWidth= `1px`;\n                            tdoffsetCol.style.textAlign ='center';\n                            tdoffsetCol.textContent= `CAL. OFFSET`;\n                            trOffsetRows.appendChild(tdoffsetCol);\n                            phaseIIOffsetData.forEach((offsetVal, index)=>{\n                                //Displacement Row\n                                const tdRowDisp = document.createElement('td');\n                                tdRowDisp.style.fontSize= `small`;\n                                tdRowDisp.style.border= `solid`;\n                                tdRowDisp.style.borderWidth= `1px`;\n                                tdRowDisp.style.textAlign ='center';\n                                tdRowDisp.textContent= `${offsetVal}`;\n                                trOffsetRows.appendChild(tdRowDisp);\n                            });\n                            tbody.appendChild(trOffsetRows);\n            \n                            table.appendChild(tbody);\n                            masterPopupContent.appendChild(table);\n            \n                            //Calibration Anchor Diagram\n                            if(!(Object.keys(sensorProfile['anchorDataValue']).length === 0 && sensorProfile['anchorDataValue'].constructor === Object)){\n                                //Anchor Diagram Title\n                                const anchorDiagramTitle = document.createElement('div');\n                                anchorDiagramTitle.style.marginTop = '25px';\n                                anchorDiagramTitle.style.fontSize = 'medium';\n                                anchorDiagramTitle.style.textDecoration = 'underline';\n                                anchorDiagramTitle.style.fontWeight = 'bold';\n                                anchorDiagramTitle.textContent = `Anchor Diagram`;\n                                masterPopupContent.appendChild(anchorDiagramTitle);\n            \n                                //Anchor Diagram Framework\n                                const masterDiagramSection = document.createElement('div');\n                                masterDiagramSection.className=\"masterAnchorDiagramStyle\";\n            \n                                const upperMasterSection = document.createElement('div');\n                                upperMasterSection.className=\"upperMasterSectionStyle\";\n                                upperMasterSection.id=\"upperMasterSection\";\n                                const anchorDummyHeadComponent1 = document.createElement('div');\n                                anchorDummyHeadComponent1.style.width=\"47px\"\n                                const anchorUpperTextBoxSection = document.createElement('div');\n                                anchorUpperTextBoxSection.className=\"anchorUpperTextBoxSectionStyle\";\n                                anchorUpperTextBoxSection.id=\"anchorUpperTextBoxSection\";\n                                const anchorDummyTailComponent1 = document.createElement('div');\n                                anchorDummyTailComponent1.style.width=\"47px\"\n                                upperMasterSection.appendChild(anchorDummyHeadComponent1);\n                                upperMasterSection.appendChild(anchorUpperTextBoxSection);\n                                upperMasterSection.appendChild(anchorDummyTailComponent1);\n            \n                                const anchorMasterSection = document.createElement('div');\n                                anchorMasterSection.className=\"anchorMasterSectionStyle\";\n                                anchorMasterSection.id=\"anchorMasterSection\"\n            \n                                const anchorHeadComponent = document.createElement('div');\n                                anchorHeadComponent.className=\"anchorHeadTextStyle\";\n                                anchorHeadComponent.textContent=\"HEAD\"\n            \n                                const anchorPointsComponent = document.createElement('div');\n                                anchorPointsComponent.className=\"anchorPointsSectionStyle\";\n                                anchorPointsComponent.id=\"anchorPointsSection\"\n            \n                                const anchorToeTextComponent = document.createElement('div');\n                                anchorToeTextComponent.className=\"anchorToeTextStyle\";\n                                anchorToeTextComponent.textContent=\"TOE\"\n            \n                                anchorMasterSection.appendChild(anchorHeadComponent);\n                                anchorMasterSection.appendChild(anchorPointsComponent);\n                                anchorMasterSection.appendChild(anchorToeTextComponent);\n            \n                                const lowerMasterSection = document.createElement('div');\n                                lowerMasterSection.className=\"lowerMasterSectionStyle\";\n                                lowerMasterSection.id=\"lowerMasterSection\"\n                                const anchorDummyHeadComponent2 = document.createElement('div');\n                                anchorDummyHeadComponent2.style.width=\"47px\"\n                                const anchorLowerTextBoxSection = document.createElement('div');\n                                anchorLowerTextBoxSection.className=\"anchorLowerTextBoxSection\";\n                                anchorLowerTextBoxSection.id=\"anchorLowerTextBoxSection\"\n                                const anchorDummyTailComponent2 = document.createElement('div');\n                                anchorDummyTailComponent2.style.width=\"47px\"\n            \n                                lowerMasterSection.appendChild(anchorDummyHeadComponent2);\n                                lowerMasterSection.appendChild(anchorLowerTextBoxSection);\n                                lowerMasterSection.appendChild(anchorDummyTailComponent2);\n            \n                                masterDiagramSection.appendChild(upperMasterSection);\n                                masterDiagramSection.appendChild(anchorMasterSection);\n                                masterDiagramSection.appendChild(lowerMasterSection);\n            \n                                if(sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dCable.typeValue || sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dMPBX.typeValue){                 \n                                    //Show Upper Section\n                                    upperMasterSection.style.display=\"flex\";\n                                    //Show Anchor Section\n                                    anchorMasterSection.style.display=\"flex\";\n                                    //Hide Lower Section\n                                    lowerMasterSection.style.display=\"none\";\n                                    //Show Master Section\n                                    masterDiagramSection.style.display=\"block\"\n                                }\n                                else if (sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n                                    //Show Upper Section\n                                    upperMasterSection.style.display=\"flex\";\n                                    //Show Anchor Section\n                                    anchorMasterSection.style.display=\"flex\";\n                                    //Show Lower Section\n                                    lowerMasterSection.style.display=\"flex\";\n                                    //Show Master Section\n                                    masterDiagramSection.style.display=\"block\"\n                                }else{\n                                    //Hide Everything\n                                    upperMasterSection.style.display=\"none\";\n                                    anchorMasterSection.style.display=\"none\";\n                                    lowerMasterSection.style.display=\"none\";\n                                    masterDiagramSection.style.display=\"none\"\n                                }\n                                //Build Channels so that it will be using building textboxes\n                                let visualAnchorPoints = [];\n                                try{\n                                    if(sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dCable.typeValue || sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dMPBX.typeValue){                                                                                     \n                                        for(let i=1; i <= sensorProfile['channels'] - 1; i ++){\n                                            visualAnchorPoints.push(i);\n                                        }\n                                    }\n                                    else if (sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n                                        for(let i=1; i <= (sensorProfile['channels'] - 1)/2; i ++){\n                                            visualAnchorPoints.push(i);\n                                        }\n                                    }else{\n                                    }\n                                }catch(e){\n                                    console.log(\"Error in 'Build Channels so that it will be using building textboxes' in buildAnchorDiagram: \" + e)\n                                }\n                                if(anchorUpperTextBoxSection){\n                    \n                                    anchorUpperTextBoxSection.innerHTML = '';\n                    \n                                    const firstBufferSection = document.createElement('div');\n                                    firstBufferSection.style.width = \"65px\";\n                                    firstBufferSection.style.height = \"15px\";\n                    \n                                    anchorUpperTextBoxSection.appendChild(firstBufferSection);\n                    \n                                    visualAnchorPoints.forEach((channel)=>{\n                                        const inputElement = document.createElement('div');\n                                        inputElement.style.fontSize=`small`\n                                        inputElement.style.width = \"50px\";\n                                        inputElement.style.display = 'flex';\n                                        inputElement.id=`upperAnchorTB${channel}-${index}`;\n                                        inputElement.style.justifyContent = 'center';\n                                        inputElement.style.fontWeight = 'bold';\n                                        // inputElement.textContent=`${channel}`\n                                        anchorUpperTextBoxSection.appendChild(inputElement);\n                                    });\n                                }\n                                if (anchorPointsComponent) {\n                                // Clear any existing children\n                                    anchorPointsComponent.innerHTML = '';\n                    \n                                    const headDiv = document.createElement('div');\n                                    headDiv.id='headDiv'\n                                    headDiv.style.display = \"block\";\n                                    headDiv.style.background = \"#4A6A9C\";\n                                    headDiv.style.width = \"65px\";\n                                    headDiv.style.height = \"15px\";\n                                    headDiv.style.borderRadius = \"10px 0 0 10px\";\n                                    anchorPointsComponent.appendChild(headDiv);\n                    \n                                    visualAnchorPoints.forEach((channel) => {\n                                        // Create anchor space\n                                        const anchorSpace = document.createElement('div');\n                                        anchorSpace.id=`anchorPoint${channel}`;\n                                        anchorSpace.style.width = '50px';\n                                        anchorSpace.style.height = '15px';\n                                        anchorSpace.style.display = 'flex';\n                                        anchorSpace.style.justifyContent = 'center';\n                                        anchorSpace.style.alignItems = 'center';\n                                        anchorSpace.style.flexDirection = 'row';\n                                        // Create anchor point\n                                        const anchorPoint = document.createElement('div');\n                                        anchorPoint.style.width = '8px';\n                                        anchorPoint.style.height = '8px';\n                                        anchorPoint.style.background = '#4A6A9C';\n                                        anchorPoint.style.borderStyle = 'solid';\n                                        anchorPoint.style.borderRadius = '999px';\n                                        anchorPoint.style.borderWidth = '1px';\n                    \n                    \n                                        anchorSpace.appendChild(anchorPoint);\n                                        anchorPointsComponent.appendChild(anchorSpace);\n                                    });\n                                }\n                                if(anchorLowerTextBoxSection){\n                    \n                                    anchorLowerTextBoxSection.innerHTML = '';\n                                    const firstBufferSection = document.createElement('div');\n                    \n                                    firstBufferSection.style.width = \"65px\";\n                                    firstBufferSection.style.height = \"15px\";\n                                    anchorLowerTextBoxSection.appendChild(firstBufferSection);\n                    \n                                    visualAnchorPoints.forEach((channel)=>{\n                                        const inputElement = document.createElement('div');\n                                        inputElement.style.fontSize=`small`\n                                        inputElement.style.width = \"50px\";\n                                        inputElement.style.display = 'flex';\n                                        inputElement.id=`lowerAnchorTB${channel}-${index}`;\n                                        inputElement.style.justifyContent = 'center';\n                                        inputElement.style.fontWeight = 'bold';\n                                        // inputElement.textContent=`${channel}`\n                                        anchorLowerTextBoxSection.appendChild(inputElement);\n                                    });\n                                }\n                                masterPopupContent.append(masterDiagramSection);\n                                //Load Initial values for textboxes, sensor type dependent\n                                //Uncomment section below if you want to have ID index as pre-loaded upperAnchorTBs\n                                try{\n                                    if(sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dCable.typeValue || sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dMPBX.typeValue){\n                                        schedule('afterRender', this, () => {\n                                            Object.entries(sensorProfile['anchorDataValue']).map(([key, value])=>{\n                                                // console.log(`key:${key}, value:${value}`)\n                                                const upperAnchorElement = document.getElementById(`${key}-${index}`);\n                                                upperAnchorElement.style.fontSize ='small';\n                                                upperAnchorElement.style.fontWeight ='bold';\n                                                upperAnchorElement.textContent = formatAnchor3dp(value);\n                                            });\n                                        });\n                                }\n                                    else if (sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n                                        schedule('afterRender', this, () => {\n                                            Object.entries(sensorProfile['anchorDataValue']).map(([key, value])=>{\n                                                // console.log(`key:${key}, value:${value}`)\n                                                const lowerAnchorElement = document.getElementById(`${key}-${index}`);\n                                                lowerAnchorElement.style.fontSize ='small';\n                                                lowerAnchorElement.style.fontWeight ='bold';\n                                                lowerAnchorElement.textContent = formatAnchor3dp(value);\n                                            })\n                                        });\n                                    }else{\n                                    }\n                    \n                                }catch(e){\n                                    console.log(\"Error in 'Load Initial values for textboxes, sensor type dependent' in buildAnchorDiagram: \" + e)\n                                    console.log(e.stack);\n                                }\n            \n                                \n                            }\n                            //Memo\n                            const memoTitle = document.createElement('div');\n                            memoTitle.style.marginTop = '15px';\n                            memoTitle.style.fontSize = 'medium';\n                            memoTitle.style.textDecoration = 'underline';\n                            memoTitle.style.fontWeight = 'bold';\n                            memoTitle.textContent = `Memo`;\n                            masterPopupContent.appendChild(memoTitle);\n                            const memoValue = document.createElement('div');\n                            memoValue.style.fontSize = 'small';\n                            memoValue.style.whiteSpace = 'pre-line'; \n                            memoValue.textContent = sensorProfile['memo'];\n                            masterPopupContent.appendChild(memoValue);\n            \n                            //Page Break\n                            const pageBreakDiv = document.createElement('div');\n                            pageBreakDiv.style.display = 'block';\n                            pageBreakDiv.style.height = '0px';\n                            pageBreakDiv.style.pageBreakAfter = 'always';\n                            pageBreakDiv.style.breakAfter = 'page';       \n                            masterPopupContent.appendChild(pageBreakDiv);\n            \n                            //Calibration Graphs\n                            masterContent.appendChild(masterPopupContent);\n                        // });\n                        // scheduleOnce('afterRender', this, () => {\n                            createCalibrationGraphs(context, masterPopupContent, sensorProfile, phaseIICalibrationDataValueData, phaseIICurrentData);\n                        });\n                    })\n\n                    const okButtonComponent = document.getElementById('notificationOkButton');\n                    okButtonComponent.style.display = \"block\";\n                    okButtonComponent.style.marginRight = \"10px\";\n                    okButtonComponent.style.visibility = isVisiblePopup ? \"visible\" : \"hidden\";\n                    okButtonComponent.onclick = () => {\n                        context.send('closeNotificationPopup'); \n                    };\n                    const exportButtonComponent = document.getElementById('notificationExportButton');\n                    exportButtonComponent.style.display = \"block\";\n                    exportButtonComponent.style.visibility = isVisiblePopup ? \"visible\" : \"hidden\";\n                    exportButtonComponent.onclick = async () => {\n                        // Unified with Packs Validation: default is ONE folder for all PDFs\n                        // (showDirectoryPicker); if that's unsupported / blocked / cancelled, fall back\n                        // to a per-file Save dialog (savePdfWithPicker → showSaveFilePicker, then plain\n                        // download). No zip.\n                        const directoryHandle = await tryPickExportDirectory();\n                        showPopup([\"Exporting...\"],\"notification\");\n                        for (const [index, certificateObj] of data.entries()) {\n                            const sensorProfile = certificateObj['sensorProfile'];\n                            const container = document.getElementById(`certificate-${index}`);\n                            if (!container) {\n                                console.error(`Element with ID certificate-${index} not found.`);\n                                continue;\n                            }\n                            const opts = {\n                                margin: 0,\n                                filename: `${sensorProfile['sensorID']}.pdf`,\n                                image: { type: 'jpeg', quality: 0.98 },\n                                html2canvas: { scale: 2, useCORS: true },\n                                jsPDF: { unit: 'in', format: 'a4', orientation: 'portrait' },\n                                pagebreak: { mode: ['avoid-all', 'css', 'legacy'] }\n                            };\n                            const pdfBlob = await html2pdf().set(opts).from(container).outputPdf('blob');\n                            const filename = `${sensorProfile['sensorID']}.pdf`;\n                            if(directoryHandle){\n                                // One-folder-for-all: write straight into the chosen directory.\n                                await writeBlobToDirectory(directoryHandle, filename, pdfBlob);\n                            } else {\n                                // Fallback: per-certificate Save dialog (or plain download).\n                                await savePdfWithPicker(pdfBlob, filename);\n                            }\n                        }\n                        // Clear the batch checkboxes once export finishes so the user starts\n                        // fresh on the next selection.\n                        if(typeof context.clearBatchCBData === 'function'){\n                            context.clearBatchCBData();\n                        }\n                        context.send('closeNotificationPopup');\n                    };\n\n                    if (!isVisiblePopup) {\n                        // Do not wait for user click — auto-export silently. Chart.js default\n                        // animation is ~1000ms; html2pdf snapshots the DOM literally, so we have\n                        // to wait for the animations to finish before triggering export or the\n                        // Displacement Graphs section comes out blank.\n                        setTimeout(() => {\n                            exportButtonComponent.onclick();\n                        }, 1500);\n                    }\n                }\n            });\n\n        }else if(skipped.length === 0){\n            // Nothing selected at all (vs. everything filtered out — that case already showed\n            // the \"Skipped N of M…\" warning above).\n            showPopup([\"Please select calibration(s)!\"], \"notification\")\n\n        }\n    }catch(error){\n        console.error('Error buildBatchCalibrationSheet:', error);\n        console.log(err.stack);\n\n    }\n}\nexport async function buildCalibrationSheet(context, calibrationID){\n    try{\n        const sensorProfileList = context.get(\"frontendData.calibrationInstrumentProfileList\");\n        let selectedSensorProfileObj = null;\n        sensorProfileList.forEach((sensorProfile, index)=>{\n            if (sensorProfile['calibrationId'] === calibrationID){\n                selectedSensorProfileObj = sensorProfile;\n            }\n        });\n        if(selectedSensorProfileObj != null){\n\n            let responseData = await sendGETRequest(`sensor_profile/${calibrationID}/`);\n            const data = responseData['data'];\n\n            // Guard against not-certificate-ready calibrations. Prefer the BE's canonical\n            // `Progress.isCertificateReady` (phaseI && phaseII && all per-channel data populated).\n            // Fall back to the legacy `phaseStatus` shape if the response doesn't include it.\n            const _firstTruthy = (obj, keys) => {\n                if(!obj){ return undefined; }\n                for(const k of keys){\n                    if(obj[k] !== undefined && obj[k] !== null){ return obj[k]; }\n                }\n                return undefined;\n            };\n            const progress = _firstTruthy(data, ['Progress', 'progress']);\n            const phaseStatus = data['phaseStatus'] || {};\n            const phaseI = progress\n                ? !!_firstTruthy(progress, ['phaseI', 'phase-i'])\n                : !!phaseStatus['phaseICompleted'];\n            const phaseII = progress\n                ? !!_firstTruthy(progress, ['phaseIi', 'phaseII', 'phase-i-i', 'phase-ii'])\n                : !!phaseStatus['phaseIICompleted'];\n            const isReady = progress\n                ? !!_firstTruthy(progress, ['isCertificateReady', 'is-certificate-ready'])\n                : (phaseI && phaseII);\n            if(!isReady){\n                const conclusion = progress ? _firstTruthy(progress, ['Conclusion', 'conclusion']) : null;\n                const concText = conclusion ? ` (progress ${conclusion})` : '';\n                showPopup([\n                    `Calibration ID ${calibrationID}: not certificate-ready${concText}.`,\n                    `Phase I complete: ${phaseI ? 'yes' : 'no'}. Phase II complete: ${phaseII ? 'yes' : 'no'}.`,\n                ], 'warning', 5);\n                return;\n            }\n\n            const sensorProfile = data['sensorProfile'];\n            const phaseILookupData = data['calibrationData']['phaseILookupData'];\n            const phaseIICalibrationDataValueData = data['calibrationData']['phaseIICalibrationDataValueData'];\n            const phaseIICurrentData = data['calibrationData']['phaseIICurrentData'];\n            const phaseIISlopeData = data['calibrationData']['phaseIISlopeData'];\n            const phaseIIOffsetData = data['calibrationData']['phaseIIOffsetData'];\n            console.log(\"you selected\")\n            console.log(data);\n\n            context.set(\"isShowConfig.isShowPopupNotification\", true);\n            scheduleOnce('afterRender', context, () => {\n                const masterPopupContent = document.getElementById('notificationPopupContentBody');\n                masterPopupContent.style.fontFamily = \"sans-serif\"\n                if(masterPopupContent){\n                    //Logo header\n                    const logoComponent = document.createElement('img');\n                    logoComponent.style.alignSelf = 'center';\n                    logoComponent.style.width = '30%';\n                    logoComponent.style.paddingTop = '10px';\n                    logoComponent.src = '/assets/images/yieldpoint-logo.png';\n                    masterPopupContent.appendChild(logoComponent);\n                    //Main Title\n                    const mainComponent = document.createElement('div');\n                    mainComponent.style.fontSize = 'medium';\n                    mainComponent.style.fontWeight = 'bold';\n                    mainComponent.style.width=\"100%\";\n                    mainComponent.style.display=\"flex\";\n                    mainComponent.style.justifyContent=\"center\";\n                    mainComponent.textContent = `${sensorProfile['sensorID']} Calibration Report`;\n                    // mainComponent.style.letterSpacing = '0.01px';\n\n                    masterPopupContent.appendChild(mainComponent);\n                    //Row 1 Section\n                    //Quick Detail Title\n                    const quickDetailTitle = document.createElement('div');\n                    quickDetailTitle.style.marginTop = '10px';\n                    quickDetailTitle.style.fontSize = 'small';\n                    quickDetailTitle.style.textDecoration = 'underline';\n                    quickDetailTitle.style.width=\"100%\";\n                    quickDetailTitle.style.fontWeight = 'bold';\n                    quickDetailTitle.textContent = `Quick Detail`;\n                    // quickDetailTitle.style.letterSpacing = '0.01px';\n                    const row1Section = document.createElement('div');\n                    row1Section.style.marginLeft = '25px';\n                    row1Section.style.fontSize = 'smaller';\n                    row1Section.style.width = '100%';\n                    row1Section.style.display = 'flex';\n                    row1Section.style.flexDirection = 'row';\n                    row1Section.style.alignItems = 'center';\n                    //Job ID \n                    const jobIDComponent = document.createElement('div');\n                    jobIDComponent.style.width = '20%';\n                    jobIDComponent.textContent = `Job: ${sensorProfile['jobID']}`;\n                    //Sensor Name \n                    const sensorNameComponent = document.createElement('div');\n                    sensorNameComponent.style.width = '20%';\n                    sensorNameComponent.textContent = `Name: ${sensorProfile['sensorName'] ? sensorProfile['sensorName'] : ''}`;\n                    //Sensor Description \n                    const sensorDescriptionComponent = document.createElement('div');\n                    sensorDescriptionComponent.style.width = '20%';\n                    sensorDescriptionComponent.textContent = `Description: ${sensorProfile['sensorDescription']}`;\n                    //Calibration Date \n                    const calibrationDateComponent = document.createElement('div');\n                    calibrationDateComponent.style.width = '40%';\n                    calibrationDateComponent.textContent = `Calibration Date: ${sensorProfile['calibrationDate'].split(' ')[0]}`;\n                    //Append to Row 1\n                    masterPopupContent.appendChild(quickDetailTitle);\n                    masterPopupContent.appendChild(row1Section);\n                    row1Section.appendChild(jobIDComponent);\n                    row1Section.appendChild(sensorNameComponent);\n                    row1Section.appendChild(sensorDescriptionComponent);\n                    row1Section.appendChild(calibrationDateComponent);\n\n                    //Row 2A Section\n                    const technicalDetailTitle = document.createElement('div');\n                    technicalDetailTitle.style.marginTop = '10px';\n                    technicalDetailTitle.style.fontSize = 'small';\n                    technicalDetailTitle.style.textDecoration = 'underline';\n                    technicalDetailTitle.style.fontWeight = 'bold';\n                    technicalDetailTitle.textContent = `Technical Detail`;\n                    // technicalDetailTitle.style.letterSpacing = '0.01px';\n                    const row2ASection = document.createElement('div');\n                    row2ASection.style.marginLeft = '25px';\n                    row2ASection.style.fontSize = 'smaller';\n                    row2ASection.style.width = '100%';\n                    row2ASection.style.display = 'flex';\n                    row2ASection.style.flexDirection = 'row';\n                    row2ASection.style.alignItems = 'center';\n                    //Employee\n                    const employeeComponent = document.createElement('div');\n                    employeeComponent.style.width = '20%';\n                    employeeComponent.textContent = `Employee: ${sensorProfile['employee']}`;\n                    //Sensor ID \n                    const sensorIDComponent = document.createElement('div');\n                    sensorIDComponent.style.width = '20%';\n                    sensorIDComponent.textContent = `ID: ${sensorProfile['sensorID']}`;\n                    //Sensor Type\n                    const sensorTypeComponent = document.createElement('div');\n                    sensorTypeComponent.style.width = '20%';\n                    sensorTypeComponent.textContent = `Type: ${sensorProfile['type']}`;\n                    //Sensor Unit\n                    const sensorUnitComponent = document.createElement('div');\n                    sensorUnitComponent.style.width = '20%';\n                    sensorUnitComponent.textContent = `Unit: ${sensorProfile['unit']}`;\n\n                    //Append to Row 2\n                    masterPopupContent.appendChild(technicalDetailTitle);\n                    masterPopupContent.appendChild(row2ASection);\n                    row2ASection.appendChild(employeeComponent);\n                    row2ASection.appendChild(sensorIDComponent);\n                    row2ASection.appendChild(sensorTypeComponent);\n                    row2ASection.appendChild(sensorUnitComponent);\n\n                    //Row 2B Section\n                    const row2BSection = document.createElement('div');\n                    row2BSection.style.marginLeft = '25px';\n                    row2BSection.style.fontSize = 'smaller';\n                    row2BSection.style.width = '100%';\n                    row2BSection.style.display = 'flex';\n                    row2BSection.style.flexDirection = 'row';\n                    row2BSection.style.alignItems = 'center';\n                    //Rig Calib Cert S/N\n                    const refSNComponent = document.createElement('div');\n                    refSNComponent.style.width = '20%';\n                    refSNComponent.textContent = `Ref. Cert. S/N: ${sensorProfile['rigReferenceID']}`;\n                    //Rig Calib Cert S/N\n                    const refCertValueComponent = document.createElement('div');\n                    refCertValueComponent.style.width = '20%';\n                    refCertValueComponent.textContent = `Ref. Cert.: ${sensorProfile['rigReferenceCalibrationValue']}`;\n                    //Rig Calib Cert Date\n                    const refCertDateComponent = document.createElement('div');\n                    refCertDateComponent.style.width = '60%';\n                    refCertDateComponent.textContent = `Ref. Cert. Date: ${sensorProfile['rigReferenceCalibrationDate']}`;\n                    //Append to Row 2B\n                    // masterPopupContent.appendChild(row2BSection);\n                    row2BSection.appendChild(refSNComponent);\n                    row2BSection.appendChild(refCertValueComponent);\n                    row2BSection.appendChild(refCertDateComponent);\n\n\n                    //Calibration Data Table \n                    //Data Table Title\n                    const calibTableTitle = document.createElement('div');\n                    calibTableTitle.style.marginTop = '10px';\n                    calibTableTitle.style.fontSize = 'small';\n                    calibTableTitle.style.textDecoration = 'underline';\n                    calibTableTitle.style.fontWeight = 'bold';\n                    calibTableTitle.textContent = `Data`;\n                    masterPopupContent.appendChild(calibTableTitle);\n                    const table = document.createElement('table');\n                    table.style.marginTop=\"10px\"\n                    //Columns\n                    const thead = document.createElement('thead');\n                    thead.style.borderBottom= ``;\n                    const trColumns = document.createElement('tr');\n\n                    let columns = []\n                    for(let i=0;i< sensorProfile['channels'];i++){\n                        if(i == 0){\n                            columns.push(\"APPLIED DISP\");\n                        }else{\n                            columns.push(`DISP ${i}`);\n                        }\n                    }\n                    columns.forEach((columnLabel, index)=>{\n                        const thColumn = document.createElement('th');\n                        thColumn.style.fontSize= `small`;\n                        thColumn.style.border= `solid`;\n                        thColumn.style.borderWidth= `1px`;\n                        thColumn.style.borderColor= `black`;\n                        thColumn.style.textAlign ='center';\n                        thColumn.textContent= `${columnLabel}`;\n                        trColumns.appendChild(thColumn);\n                    });\n\n                    thead.appendChild(trColumns);\n                    table.appendChild(thead);\n                    //Rows\n                    const tbody = document.createElement('tbody');\n                    const checkpointPositionsLength = sensorProfile['checkpointPositions'].length\n                    for(let i=0;i< checkpointPositionsLength;i++){\n                        const trRows = document.createElement('tr');\n                        //Current Data\n                        const tdRowCurr = document.createElement('td');\n                        tdRowCurr.style.fontSize= `small`;\n                        tdRowCurr.style.border= `solid`;\n                        tdRowCurr.style.borderWidth= `1px`;\n                        tdRowCurr.style.textAlign ='center';\n                        tdRowCurr.textContent= `${phaseIICurrentData[i]}`;\n                        trRows.appendChild(tdRowCurr);\n                        phaseIICalibrationDataValueData.forEach((channelArray, index)=>{\n                            //Displacement Row\n                            const tdRowDisp = document.createElement('td');\n                            tdRowDisp.style.fontSize= `small`;\n                            tdRowDisp.style.border= `solid`;\n                            tdRowDisp.style.borderWidth= `1px`;\n                            tdRowDisp.style.textAlign ='center';\n                            tdRowDisp.textContent= `${channelArray[i]}`;\n                            trRows.appendChild(tdRowDisp);\n                        });\n                        tbody.appendChild(trRows);\n                    }\n                    //Cal.Slop Data\n                    const trSlopeRows = document.createElement('tr');\n                    const tdSlopeCol = document.createElement('td');\n                    tdSlopeCol.style.fontSize= `small`;\n                    tdSlopeCol.style.border= `solid`;\n                    tdSlopeCol.style.borderWidth= `1px`;\n                    tdSlopeCol.style.textAlign ='center';\n                    tdSlopeCol.textContent= `CAL. SLOPE`;\n                    trSlopeRows.appendChild(tdSlopeCol);\n                    phaseIISlopeData.forEach((slopeVal, index)=>{\n                        //Displacement Row\n                        const tdRowDisp = document.createElement('td');\n                        tdRowDisp.style.fontSize= `small`;\n                        tdRowDisp.style.border= `solid`;\n                        tdRowDisp.style.borderWidth= `1px`;\n                        tdRowDisp.style.textAlign ='center';\n                        tdRowDisp.textContent= `${slopeVal}`;\n                        trSlopeRows.appendChild(tdRowDisp);\n                    });\n                    tbody.appendChild(trSlopeRows);\n\n                    //Cal.Offset Data\n                    const trOffsetRows = document.createElement('tr');\n                    const tdoffsetCol = document.createElement('td');\n                    tdoffsetCol.style.fontSize= `small`;\n                    tdoffsetCol.style.border= `solid`;\n                    tdoffsetCol.style.borderWidth= `1px`;\n                    tdoffsetCol.style.textAlign ='center';\n                    tdoffsetCol.textContent= `CAL. OFFSET`;\n                    trOffsetRows.appendChild(tdoffsetCol);\n                    phaseIIOffsetData.forEach((offsetVal, index)=>{\n                        //Displacement Row\n                        const tdRowDisp = document.createElement('td');\n                        tdRowDisp.style.fontSize= `small`;\n                        tdRowDisp.style.border= `solid`;\n                        tdRowDisp.style.borderWidth= `1px`;\n                        tdRowDisp.style.textAlign ='center';\n                        tdRowDisp.textContent= `${offsetVal}`;\n                        trOffsetRows.appendChild(tdRowDisp);\n                    });\n                    tbody.appendChild(trOffsetRows);\n\n                    table.appendChild(tbody);\n                    masterPopupContent.appendChild(table);\n\n                    const watermark = document.createElement('div');\n                    watermark.textContent = \"UNOFFICIAL DOCUMENT\";\n                    watermark.style.cssText = `\n                        position: fixed; /* Fixed instead of absolute */\n                        top: 50%; /* Centered vertically */\n                        left: 50%; /* Centered horizontally */\n                        transform: translate(-50%, -50%) rotate(-45deg); /* Center and rotate */\n                        color: rgba(255, 0, 0, 0.6); /* Semi-transparent red */\n                        font-size: 100px;\n                        font-weight: bold;\n                        width: 100%;\n                        text-align: center;\n                        pointer-events: none; /* Click through */\n                        z-index: 1000;\n                    `;\n                    // Adjust position to ensure it covers the entire content area\n                    watermark.style.top = '50%';\n                    watermark.style.left = '50%';\n                    masterPopupContent.style.position = 'relative';\n                    // masterPopupContent.appendChild(watermark);\n\n                    //Calibration Anchor Diagram\n                    if(!(Object.keys(sensorProfile['anchorDataValue']).length === 0 && sensorProfile['anchorDataValue'].constructor === Object)){\n                        //Anchor Diagram Title\n                        const anchorDiagramTitle = document.createElement('div');\n                        anchorDiagramTitle.style.marginTop = '25px';\n                        anchorDiagramTitle.style.fontSize = 'medium';\n                        anchorDiagramTitle.style.textDecoration = 'underline';\n                        anchorDiagramTitle.style.fontWeight = 'bold';\n                        anchorDiagramTitle.textContent = `Anchor Diagram`;\n                        masterPopupContent.appendChild(anchorDiagramTitle);\n\n                        //Anchor Diagram Framework\n                        const masterDiagramSection = document.createElement('div');\n                        masterDiagramSection.className=\"masterAnchorDiagramStyle\";\n\n                        const upperMasterSection = document.createElement('div');\n                        upperMasterSection.className=\"upperMasterSectionStyle\";\n                        upperMasterSection.id=\"upperMasterSection\";\n                        const anchorDummyHeadComponent1 = document.createElement('div');\n                        anchorDummyHeadComponent1.style.width=\"47px\"\n                        const anchorUpperTextBoxSection = document.createElement('div');\n                        anchorUpperTextBoxSection.className=\"anchorUpperTextBoxSectionStyle\";\n                        anchorUpperTextBoxSection.id=\"anchorUpperTextBoxSection\";\n                        const anchorDummyTailComponent1 = document.createElement('div');\n                        anchorDummyTailComponent1.style.width=\"47px\"\n                        upperMasterSection.appendChild(anchorDummyHeadComponent1);\n                        upperMasterSection.appendChild(anchorUpperTextBoxSection);\n                        upperMasterSection.appendChild(anchorDummyTailComponent1);\n\n                        const anchorMasterSection = document.createElement('div');\n                        anchorMasterSection.className=\"anchorMasterSectionStyle\";\n                        anchorMasterSection.id=\"anchorMasterSection\"\n\n                        const anchorHeadComponent = document.createElement('div');\n                        anchorHeadComponent.className=\"anchorHeadTextStyle\";\n                        anchorHeadComponent.textContent=\"HEAD\"\n\n                        const anchorPointsComponent = document.createElement('div');\n                        anchorPointsComponent.className=\"anchorPointsSectionStyle\";\n                        anchorPointsComponent.id=\"anchorPointsSection\"\n\n                        const anchorToeTextComponent = document.createElement('div');\n                        anchorToeTextComponent.className=\"anchorToeTextStyle\";\n                        anchorToeTextComponent.textContent=\"TOE\"\n\n                        anchorMasterSection.appendChild(anchorHeadComponent);\n                        anchorMasterSection.appendChild(anchorPointsComponent);\n                        anchorMasterSection.appendChild(anchorToeTextComponent);\n\n                        const lowerMasterSection = document.createElement('div');\n                        lowerMasterSection.className=\"lowerMasterSectionStyle\";\n                        lowerMasterSection.id=\"lowerMasterSection\"\n                        const anchorDummyHeadComponent2 = document.createElement('div');\n                        anchorDummyHeadComponent2.style.width=\"47px\"\n                        const anchorLowerTextBoxSection = document.createElement('div');\n                        anchorLowerTextBoxSection.className=\"anchorLowerTextBoxSection\";\n                        anchorLowerTextBoxSection.id=\"anchorLowerTextBoxSection\"\n                        const anchorDummyTailComponent2 = document.createElement('div');\n                        anchorDummyTailComponent2.style.width=\"47px\"\n\n                        lowerMasterSection.appendChild(anchorDummyHeadComponent2);\n                        lowerMasterSection.appendChild(anchorLowerTextBoxSection);\n                        lowerMasterSection.appendChild(anchorDummyTailComponent2);\n\n                        masterDiagramSection.appendChild(upperMasterSection);\n                        masterDiagramSection.appendChild(anchorMasterSection);\n                        masterDiagramSection.appendChild(lowerMasterSection);\n\n                        if(sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dCable.typeValue || sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dMPBX.typeValue){                 \n                            //Show Upper Section\n                            upperMasterSection.style.display=\"flex\";\n                            //Show Anchor Section\n                            anchorMasterSection.style.display=\"flex\";\n                            //Hide Lower Section\n                            lowerMasterSection.style.display=\"none\";\n                            //Show Master Section\n                            masterDiagramSection.style.display=\"block\"\n                        }\n                        else if (sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n                            //Show Upper Section\n                            upperMasterSection.style.display=\"flex\";\n                            //Show Anchor Section\n                            anchorMasterSection.style.display=\"flex\";\n                            //Show Lower Section\n                            lowerMasterSection.style.display=\"flex\";\n                            //Show Master Section\n                            masterDiagramSection.style.display=\"block\"\n                        }else{\n                            //Hide Everything\n                            upperMasterSection.style.display=\"none\";\n                            anchorMasterSection.style.display=\"none\";\n                            lowerMasterSection.style.display=\"none\";\n                            masterDiagramSection.style.display=\"none\"\n                        }\n                        //Build Channels so that it will be using building textboxes\n                        let visualAnchorPoints = [];\n                        try{\n                            if(sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dCable.typeValue || sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dMPBX.typeValue){                                                                                     \n                                for(let i=1; i <= sensorProfile['channels'] - 1; i ++){\n                                    visualAnchorPoints.push(i);\n                                }\n                            }\n                            else if (sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n                                for(let i=1; i <= (sensorProfile['channels'] - 1)/2; i ++){\n                                    visualAnchorPoints.push(i);\n                                }\n                            }else{\n                            }\n                        }catch(e){\n                            console.log(\"Error in 'Build Channels so that it will be using building textboxes' in buildAnchorDiagram: \" + e)\n                        }\n                        if(anchorUpperTextBoxSection){\n            \n                            anchorUpperTextBoxSection.innerHTML = '';\n            \n                            const firstBufferSection = document.createElement('div');\n                            firstBufferSection.style.width = \"65px\";\n                            firstBufferSection.style.height = \"15px\";\n            \n                            anchorUpperTextBoxSection.appendChild(firstBufferSection);\n            \n                            visualAnchorPoints.forEach((channel)=>{\n                                const inputElement = document.createElement('div');\n                                inputElement.style.fontSize=`small`\n                                inputElement.style.width = \"50px\";\n                                inputElement.style.display = 'flex';\n                                inputElement.id=`upperAnchorTB${channel}`;\n                                inputElement.style.justifyContent = 'center';\n                                inputElement.style.fontWeight = 'bold';\n                                // inputElement.textContent=`${channel}`\n                                anchorUpperTextBoxSection.appendChild(inputElement);\n                            });\n                        }\n                        if (anchorPointsComponent) {\n                        // Clear any existing children\n                            anchorPointsComponent.innerHTML = '';\n            \n                            const headDiv = document.createElement('div');\n                            headDiv.id='headDiv'\n                            headDiv.style.display = \"block\";\n                            headDiv.style.background = \"#4A6A9C\";\n                            headDiv.style.width = \"65px\";\n                            headDiv.style.height = \"15px\";\n                            headDiv.style.borderRadius = \"10px 0 0 10px\";\n                            anchorPointsComponent.appendChild(headDiv);\n            \n                            visualAnchorPoints.forEach((channel) => {\n                                // Create anchor space\n                                const anchorSpace = document.createElement('div');\n                                anchorSpace.id=`anchorPoint${channel}`;\n                                anchorSpace.style.width = '50px';\n                                anchorSpace.style.height = '15px';\n                                anchorSpace.style.display = 'flex';\n                                anchorSpace.style.justifyContent = 'center';\n                                anchorSpace.style.alignItems = 'center';\n                                anchorSpace.style.flexDirection = 'row';\n                                // Create anchor point\n                                const anchorPoint = document.createElement('div');\n                                anchorPoint.style.width = '8px';\n                                anchorPoint.style.height = '8px';\n                                anchorPoint.style.background = '#4A6A9C';\n                                anchorPoint.style.borderStyle = 'solid';\n                                anchorPoint.style.borderRadius = '999px';\n                                anchorPoint.style.borderWidth = '1px';\n            \n            \n                                anchorSpace.appendChild(anchorPoint);\n                                anchorPointsComponent.appendChild(anchorSpace);\n                            });\n                        }\n                        if(anchorLowerTextBoxSection){\n            \n                            anchorLowerTextBoxSection.innerHTML = '';\n                            const firstBufferSection = document.createElement('div');\n            \n                            firstBufferSection.style.width = \"65px\";\n                            firstBufferSection.style.height = \"15px\";\n                            anchorLowerTextBoxSection.appendChild(firstBufferSection);\n            \n                            visualAnchorPoints.forEach((channel)=>{\n                                const inputElement = document.createElement('div');\n                                inputElement.style.fontSize=`small`\n                                inputElement.style.width = \"50px\";\n                                inputElement.style.display = 'flex';\n                                inputElement.id=`lowerAnchorTB${channel}`;\n                                inputElement.style.justifyContent = 'center';\n                                inputElement.style.fontWeight = 'bold';\n                                // inputElement.textContent=`${channel}`\n                                anchorLowerTextBoxSection.appendChild(inputElement);\n                            });\n                        }\n                        masterPopupContent.append(masterDiagramSection);\n                        //Load Initial values for textboxes, sensor type dependent\n                        //Uncomment section below if you want to have ID index as pre-loaded upperAnchorTBs\n                        try{\n                            // console.log(\"sensorProfile\")\n                            // console.log(sensorProfile)\n                            if(sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dCable.typeValue || sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dMPBX.typeValue){\n                                Object.entries(sensorProfile['anchorDataValue']).map(([key, value])=>{\n                                    // console.log(`key:${key}, value:${value}`)\n                                    const upperAnchorElement = document.getElementById(key);\n                                    upperAnchorElement.style.fontSize ='small';\n                                    upperAnchorElement.style.fontWeight ='bold';\n                                    upperAnchorElement.textContent = formatAnchor3dp(value);\n                                })\n                            }\n                            else if (sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n            \n                                Object.entries(sensorProfile['anchorDataValue']).map(([key, value])=>{\n                                    // console.log(`key:${key}, value:${value}`)\n                                    const lowerAnchorElement = document.getElementById(key);\n                                    lowerAnchorElement.style.fontSize ='small';\n                                    lowerAnchorElement.style.fontWeight ='bold';\n                                    lowerAnchorElement.textContent = formatAnchor3dp(value);\n                                })\n                            }else{\n                            }\n            \n                        }catch(e){\n                            console.log(\"Error in 'Load Initial values for textboxes, sensor type dependent' in buildAnchorDiagram: \" + e)\n                        }\n\n                        \n                    }\n                    //Memo\n                    const memoTitle = document.createElement('div');\n                    memoTitle.style.marginTop = '15px';\n                    memoTitle.style.fontSize = 'medium';\n                    memoTitle.style.textDecoration = 'underline';\n                    memoTitle.style.fontWeight = 'bold';\n                    memoTitle.textContent = `Memo`;\n                    masterPopupContent.appendChild(memoTitle);\n                    const memoValue = document.createElement('div');\n                    memoValue.style.fontSize = 'small';\n                    memoValue.style.whiteSpace = 'pre-line'; \n                    memoValue.textContent = sensorProfile['memo'];\n                    masterPopupContent.appendChild(memoValue);\n\n                    //Page Break\n                    const pageBreakDiv = document.createElement('div');\n                    pageBreakDiv.style.breakAfter='page';\n                    masterPopupContent.appendChild(pageBreakDiv);\n\n                    //Calibration Graphs\n                    createCalibrationGraphs(context, masterPopupContent, sensorProfile, phaseIICalibrationDataValueData, phaseIICurrentData);\n\n                    const okButtonComponent = document.getElementById('notificationOkButton');\n                    okButtonComponent.style.display = \"block\";\n                    okButtonComponent.style.marginRight = \"10px\";\n                    okButtonComponent.onclick = () => {\n                        context.send('closeNotificationPopup'); \n                    };\n                    const printButtonComponent = document.getElementById('notificationPrintButton');\n                    printButtonComponent.style.display = \"block\";\n                    printButtonComponent.onclick = async () => {\n                        const element = document.getElementById('notificationPopupContentBody');\n                        const opt = {\n                            margin:       0, // inches\n                            filename:      `${sensorProfile.sensorID}.pdf`,\n                            image:        { type: 'jpeg', quality: 0.98 },\n                            html2canvas:  { scale: 2, useCORS: true,allowTaint: true, },\n                            jsPDF:        { unit: 'in', format: 'a4', orientation: 'portrait' },\n                            pagebreak: {\n                            mode: ['css', 'legacy'],\n                            avoid: ['.no-break'],\n                            }\n                        };\n                        // Hide the content body's always-on scrollbars (overflow:scroll) so their gray\n                        // tracks aren't captured into the PDF. Restored in finally.\n                        element.style.overflowX = \"visible\";\n                        element.style.overflowY = \"visible\";\n                        try{\n                            const pdfBlob = await html2pdf().set(opt).from(element).outputPdf('blob');\n                            // Pop the OS save-as dialog (Chrome/Edge/Safari 18+), so the user can\n                            // rename the file and pick any folder. Older browsers fall back to the\n                            // default Downloads location.\n                            await savePdfWithPicker(pdfBlob, `${sensorProfile.sensorID}.pdf`);\n                        }finally{\n                            element.style.overflowX = \"scroll\";\n                            element.style.overflowY = \"scroll\";\n                        }\n                    };\n                }\n            });\n\n        }else{\n            showPopup(['Your selected sensor profile cannot be found!'], 'error', 2);\n        }\n\n    }catch (error) {\n        console.error('Error buildCalibrationSheet:', error);\n        console.log(err.stack);\n    }\n}\nfunction roundDownAuto(number) {\n    const digits = Math.floor(Math.log10(number));       // Count digits - 1\n    const place = Math.pow(10, digits);\n    const stepSize = Math.floor(number / place) * place;\n    // console.log(`number:${number} | step size:${stepSize}`)\n    return stepSize;\n}\nfunction createCalibrationGraphs(context, masterPopupContent, sensorProfile, arrayY, xValues) {\n  \n    // // Iterate over each Y-axis array and create a chart\n    const columns = 2;\n    const height='200px'\n    const displacementUnit = ['mm','mm','μm'];\n    const pressureUnit = ['kPa','Pa','PSI'];\n    let row;\n    //Graph Title\n    const anchorDiagramTitle = document.createElement('div');\n    anchorDiagramTitle.style.marginTop = '25px';\n    anchorDiagramTitle.style.fontSize = 'medium';\n    anchorDiagramTitle.style.textDecoration = 'underline';\n    anchorDiagramTitle.style.fontWeight = 'bold';\n    anchorDiagramTitle.textContent = `${context.settingsConfig.APPROVEDINSTRUMENTTYPES[sensorProfile['type']] ? context.settingsConfig.APPROVEDINSTRUMENTTYPES[sensorProfile['type']].typeCategory : \"\"} Graphs`;\n    masterPopupContent.appendChild(anchorDiagramTitle);\n\n    arrayY.forEach((yValues, index) => {\n        if(index % columns === 0){\n            row = document.createElement('div');\n            row.style.width ='700px';\n            row.style.display ='flex';\n            row.style.flexDirection='row';\n            row.style.alignItems='center';\n            row.style.justifyContent = 'space-evenly';\n            masterPopupContent.appendChild(row);\n        }\n        const calibrationGraphsDiv = document.createElement('div');\n        calibrationGraphsDiv.id=`calibrationGraph${index}`;\n        // calibrationGraphsDiv.style.width = '50%';\n        // calibrationGraphsDiv.style.height = height;\n        const calibrationGraphs = document.createElement('canvas');\n        // calibrationGraphs.style.height='400px';\n        // calibrationGraphs.style.width='400px';\n        calibrationGraphsDiv.appendChild(calibrationGraphs);\n        row.appendChild(calibrationGraphsDiv);\n        new Chart(calibrationGraphs, {\n            type: 'line',\n            data: {\n                labels: xValues,\n                datasets: [\n                    {\n                        label: `CH${index + 1}`,\n                        data: yValues,\n                        borderColor: 'rgba(0,0,0)',\n                        borderWidth: 1,\n                        pointRadius: 2, \n                        pointBackgroundColor: 'black',  \n                        fill: false,\n                    }\n                ]\n            },\n            options: {\n                responsive: true,\n                maintainAspectRatio: true,\n                aspectRatio: 1,\n                scales: {\n                    x: getAxisChartOption(context, sensorProfile, xValues, yValues)['x'],\n                    y: getAxisChartOption(context, sensorProfile, xValues, yValues)['y']\n                },\n                plugins: {\n                    title: {\n                        display: true,\n                        text: `Channel ${index + 1}`\n                    },\n                    legend: {\n                        display: false,\n                    },\n                    tooltip: {\n                        enabled: true,\n                    },\n                },\n                elements: {\n                    // point: {\n                    //     radius: 0, // Remove the circle markers\n                    // },\n                },\n            },\n        });\n         \n    });\n}\nfunction getAxisChartOption(context, sensorProfile, xValues, yValues){\n    let option={\n        x:{},\n        y:{}\n    }\n    try{\n        //For x axis\n        option['x'] = {\n            type: 'linear',\n            display: true,\n            data:xValues,\n            title: {\n                display: true,\n                text: `Applied ${context.settingsConfig.APPROVEDINSTRUMENTTYPES[sensorProfile['type']] ? context.settingsConfig.APPROVEDINSTRUMENTTYPES[sensorProfile['type']].typeCategory : \"\"} (${sensorProfile['unit']})`\n            },\n            max: Math.max(...xValues) * 1.05, // Dynamically set the maximum value\n        };\n        option['y'] = {\n            type: 'linear',\n            display: true,\n            data:yValues,\n            title: {\n                display: true,\n                text: `Sensor Output (${sensorProfile['unit']})`\n            },\n            max: Math.max(...xValues) * 1.05, // Dynamically set the maximum value\n\n        };\n        switch(sensorProfile['type']){\n            case context.settingsConfig.APPROVEDINSTRUMENTTYPES.dMicro.typeValue:\n                option['x']['ticks']={\n                    font: {\n                        size: 12,\n                        weight: 'bold'\n                    },\n                    color: 'black',\n                    autoSkip: false,\n                    // stepSize: Number(((Math.max(...xValues) * 1.05)/(xValues.length)).toFixed(0)),\n                    stepSize: 1000,\n                    // stepSize: 8.33,\n                    callback: function(val, index, ctx) {\n                        // return val;\n                        return xValues.some(x => Math.abs(x - val) <= 500) ? val : '';\n                    }\n                };\n                option['x']['grid']={\n                    color: (ctx) => {\n                        const val = ctx.tick.value;\n                        return val === 0 ? \"black\" : xValues.some(x => Math.abs(x - val)  <= 500) ? \"#ccc\" : 'transparent';\n                    },\n                };\n                break;\n            default:\n                option['x']['ticks']={\n                    font: {\n                        size: 12,\n                        weight: 'bold'\n                    },\n                    color: 'black',\n                    autoSkip: false,\n                    // stepSize: Number(((Math.max(...xValues) * 1.05)/(xValues.length)).toFixed(0)),\n                    stepSize: 5,\n                    // stepSize: 8.33,\n                    callback: function(val, index, ctx) {\n                        // return val;\n                        return xValues.some(x => Math.abs(x - val) <= 1) ? val : '';\n                    }\n                };\n                option['x']['grid']={\n                    color: (ctx) => {\n                        const val = ctx.tick.value;\n                        return val === 0 ? \"black\" : xValues.some(x => Math.abs(x - val) <= 1) ? \"#ccc\" : 'transparent';\n                    },\n                };\n                break;\n\n        }\n\n        //For y axis\n        switch(sensorProfile['type']){\n            case context.settingsConfig.APPROVEDINSTRUMENTTYPES.dMicro.typeValue:\n                option['y']['ticks']={\n                    font: {\n                        size: 12,\n                        weight: 'bold'\n                    },\n                    color: 'black',\n                    autoSkip: false,\n                    // stepSize: Number(((Math.max(...xValues) * 1.05)/(xValues.length)).toFixed(0)),\n                    stepSize: 1000,\n                    // stepSize: 8.33,\n                    callback: function(val, index, ctx) {\n                        // console.log(`val:${val}; Index:${index}`);\n                        // return val;\n                        return yValues.some(y => Math.abs(y - val)  <= 600) ? val : '';\n                    }\n                };\n                option['y']['grid']={\n                    color: (ctx) => {\n                        const val = ctx.tick.value;\n                        return val === 0 ? \"black\" : yValues.some(y => Math.abs(y - val)  <= 600) ? \"#ccc\" : 'transparent';\n                    },\n                };\n                break;\n            default:\n                option['y']['ticks']={\n                    font: {\n                        size: 12,\n                        weight: 'bold'\n                    },\n                    color: 'black',\n                    autoSkip: false,\n                    // stepSize: Number(((Math.max(...xValues) * 1.05)/(xValues.length)).toFixed(0)),\n                    stepSize: 5,\n                    // stepSize: 8.33,\n                    callback: function(val, index, ctx) {\n                        // return val;\n                        return yValues.some(y => Math.abs(y - val) <= 1) ? val : '';\n                    }\n                };\n                option['y']['grid']={\n                    color: (ctx) => {\n                        const val = ctx.tick.value;\n                        return val === 0 ? \"black\" : xValues.some(y => Math.abs(y - val) <= 1) ? \"#ccc\" : 'transparent';\n                    },\n                };\n                break;\n\n        }\n\n        return option;\n    }catch (err){\n        console.log(`Error in getAxisChartOption: ${err.message}`);\n        console.log(err.stack);\n    }   \n}\nfunction buildMissingPhaseIIDataNotice(){\n    const notice = document.createElement('div');\n    notice.textContent = \"Missing — Phase II not completed\";\n    notice.style.color = \"#b00020\";\n    notice.style.fontStyle = \"italic\";\n    notice.style.fontSize = \"small\";\n    return notice;\n}\nexport async function buildSensorProfileNotificationBoard(context, allowPrint, packProfile, sensorProfile, phaseILookupData, phaseIICalibrationDataValueData, phaseIICurrentData, phaseIISlopeData, phaseIIOffsetData, phaseIICompleted = true){\n    try{\n        context.set(\"isShowConfig.isShowPopupNotification\", true);\n        scheduleOnce('afterRender', context, () => {\n    \n            const popupContentSectionComponent = document.getElementById('notificationPopupContentBody');\n            if(popupContentSectionComponent){\n                popupContentSectionComponent.innerHTML = '';\n\n                // console.log(\"sensorProfile\");\n                // console.log(sensorProfile);\n                // console.log(\"packProfile\");\n                // console.log(packProfile);\n                // packProfile is `{}` when the sensor has no linked pack (BE returns an empty object for\n                // not-found / validationID -1, NOT null). `{}` is truthy, so guard on validationID —\n                // otherwise Pack ID/Name/Company render the literal string \"undefined\".\n                const hasPack = !!(packProfile && packProfile['validationID'] != null);\n                //Row 1A==========================================================\n                const row1ASection = document.createElement('div');\n                row1ASection.style.display = \"flex\";\n                row1ASection.style.flexDirection = \"row\";\n                row1ASection.style.marginLeft = \"25px\";\n                //SensorID Report Title\n                const reportTitleSection = document.createElement('div');\n                reportTitleSection.style.fontSize = \"large\";\n                reportTitleSection.style.alignSelf = \"center\";\n                reportTitleSection.style.textDecoration = \"underline\";\n                reportTitleSection.textContent = `${sensorProfile['sensorID']} Report`;\n                reportTitleSection.style.fontWeight = \"bold\";\n                //Quick Detail Title\n                const calibrationTitleSection = document.createElement('div');\n                calibrationTitleSection.style.fontSize = \"small\";\n                calibrationTitleSection.textContent = \"Quick Detail:\";\n                calibrationTitleSection.style.fontWeight = \"bold\";\n                calibrationTitleSection.style.textDecoration = \"underline\";\n                //Calib ID\n                const calibIDSection = document.createElement('div');\n                calibIDSection.style.display = \"flex\";\n                calibIDSection.style.flexDirection = \"row\";\n                calibIDSection.style.alignItems = \"center\";\n                calibIDSection.style.width = \"33%\";\n                const calibIDLabelSection = document.createElement('div');\n                calibIDLabelSection.style.fontSize = \"small\";\n                calibIDLabelSection.textContent = \"Calibration ID:\";\n                calibIDLabelSection.style.fontWeight = \"bold\";\n                const calibIDValueSection = document.createElement('div');\n                calibIDValueSection.style.fontSize = \"small\";\n                calibIDValueSection.textContent = `${sensorProfile['calibrationID']}`;\n                calibIDValueSection.style.paddingLeft = \"5px\";\n                calibIDSection.appendChild(calibIDLabelSection);\n                calibIDSection.appendChild(calibIDValueSection);\n                //Job ID\n                const jobIDSection = document.createElement('div');\n                jobIDSection.style.display = \"flex\";\n                jobIDSection.style.flexDirection = \"row\";\n                jobIDSection.style.alignItems = \"center\";\n                jobIDSection.style.width = \"33%\";\n                const jobIDLabelSection = document.createElement('div');\n                jobIDLabelSection.style.fontSize = \"small\";\n                jobIDLabelSection.textContent = \"Job ID:\";\n                jobIDLabelSection.style.fontWeight = \"bold\";\n                const jobIDValueSection = document.createElement('div');\n                jobIDValueSection.style.fontSize = \"small\";\n                jobIDValueSection.textContent = `${sensorProfile['jobID']}`;\n                jobIDValueSection.style.paddingLeft = \"5px\";\n                jobIDSection.appendChild(jobIDLabelSection);\n                jobIDSection.appendChild(jobIDValueSection);\n                //Calib Date\n                const calibDateSection = document.createElement('div');\n                calibDateSection.style.display = \"flex\";\n                calibDateSection.style.flexDirection = \"row\";\n                calibDateSection.style.alignItems = \"center\";\n                calibDateSection.style.width = \"33%\";\n                const calibDateLabelSection = document.createElement('div');\n                calibDateLabelSection.style.fontSize = \"small\";\n                calibDateLabelSection.textContent = \"Calibration Date:\";\n                calibDateLabelSection.style.fontWeight = \"bold\";\n                const calibDateValueSection = document.createElement('div');\n                calibDateValueSection.style.fontSize = \"small\";\n                calibDateValueSection.textContent = `${sensorProfile['calibrationDate']}`;\n                calibDateValueSection.style.paddingLeft = \"5px\";\n                calibDateSection.appendChild(calibDateLabelSection);\n                calibDateSection.appendChild(calibDateValueSection);\n                //Row 1B==========================================================\n                const row1BSection = document.createElement('div');\n                row1BSection.style.display = \"flex\";\n                row1BSection.style.flexDirection = \"row\";\n                row1BSection.style.marginLeft = \"25px\";\n                //Employee\n                const employeeSection = document.createElement('div');\n                employeeSection.style.display = \"flex\";\n                employeeSection.style.flexDirection = \"row\";\n                employeeSection.style.alignItems = \"center\";\n                employeeSection.style.width = \"33%\";\n                const employeeLabelSection = document.createElement('div');\n                employeeLabelSection.style.fontSize = \"small\";\n                employeeLabelSection.textContent = \"Employee:\";\n                employeeLabelSection.style.fontWeight = \"bold\";\n                const employeeValueSection = document.createElement('div');\n                employeeValueSection.style.fontSize = \"small\";\n                employeeValueSection.textContent = `${sensorProfile['employee']}`;\n                employeeValueSection.style.paddingLeft = \"5px\";\n                employeeSection.appendChild(employeeLabelSection);\n                employeeSection.appendChild(employeeValueSection);\n\n                const _firstTruthyProg = (obj, keys) => {\n                    if(!obj){ return undefined; }\n                    for(const k of keys){\n                        if(obj[k] !== undefined && obj[k] !== null){ return obj[k]; }\n                    }\n                    return undefined;\n                };\n                const _progress = _firstTruthyProg(sensorProfile, ['Progress', 'progress']);\n                let _done; let _total;\n                if(_progress){\n                    const conc = _firstTruthyProg(_progress, ['Conclusion', 'conclusion']);\n                    if(typeof conc === 'string' && /^\\d+\\/\\d+$/.test(conc)){\n                        const [d, t] = conc.split('/');\n                        _done = parseInt(d, 10);\n                        _total = parseInt(t, 10);\n                    }\n                }\n                if(_done === undefined || _total === undefined){\n                    const _p1 = !!_firstTruthyProg(sensorProfile, ['phaseICompleted', 'phase-i-completed']);\n                    const _p2 = !!_firstTruthyProg(sensorProfile, ['phaseIiCompleted', 'phaseIICompleted', 'phase-ii-completed']);\n                    _done = (_p1 ? 1 : 0) + (_p2 ? 1 : 0);\n                    _total = 2;\n                }\n                const _percent = _total > 0 ? Math.round((_done / _total) * 100) : 0;\n                const _color = getSensorCalibrationProgressColor(_done, _total);\n\n                const progressionSection = document.createElement('div');\n                progressionSection.style.display = \"flex\";\n                progressionSection.style.flexDirection = \"row\";\n                progressionSection.style.alignItems = \"center\";\n                progressionSection.style.width = \"66%\";\n                const progressionLabelSection = document.createElement('div');\n                progressionLabelSection.style.fontSize = \"small\";\n                progressionLabelSection.textContent = \"Progression:\";\n                progressionLabelSection.style.fontWeight = \"bold\";\n                const progressionValueSection = document.createElement('div');\n                progressionValueSection.style.paddingLeft = \"5px\";                                                                                                                                                                                                                                                \n                const _track = document.createElement('div');                                                                                                                                                                                                                                                     \n                _track.style.cssText = 'background:#eee;border-radius:4px;height:14px;width:80px;overflow:hidden;position:relative;';\n                const _fill = document.createElement('div');                                                                                                                                                                                                                                                      \n                _fill.style.cssText = `background-color:${_color};width:${_percent}%;height:100%;border-radius:4px;`;\n                _track.appendChild(_fill);\n                progressionValueSection.appendChild(_track);\n                progressionSection.appendChild(progressionLabelSection);                                                                                                                                                                                                                                          \n                progressionSection.appendChild(progressionValueSection);\n\n                //Row 2==========================================================\n                const row2ASection = document.createElement('div');\n                row2ASection.style.display = \"flex\";\n                row2ASection.style.flexDirection = \"row\";\n                row2ASection.style.marginLeft = \"25px\";\n                //Rig Detail Title\n                const rigTitleSection = document.createElement('div');\n                rigTitleSection.style.fontSize = \"small\";\n                rigTitleSection.textContent = \"Rig Detail:\";\n                rigTitleSection.style.fontWeight = \"bold\";\n                rigTitleSection.style.textDecoration = \"underline\";\n                //Rig Certificate S/N\n                const rigCalibIDSection = document.createElement('div');\n                rigCalibIDSection.style.display = \"flex\";\n                rigCalibIDSection.style.flexDirection = \"row\";\n                rigCalibIDSection.style.alignItems = \"center\";\n                rigCalibIDSection.style.width = \"33%\";\n                const rigCalibIDLabelSection = document.createElement('div');\n                rigCalibIDLabelSection.style.fontSize = \"small\";\n                rigCalibIDLabelSection.textContent = \"Ref. S/N:\";\n                rigCalibIDLabelSection.style.fontWeight = \"bold\";\n                const rigCalibIDValueSection = document.createElement('div');\n                rigCalibIDValueSection.style.fontSize = \"small\";\n                rigCalibIDValueSection.textContent = `${sensorProfile['rigReferenceID']}`;\n                rigCalibIDValueSection.style.paddingLeft = \"5px\";\n                rigCalibIDSection.appendChild(rigCalibIDLabelSection);\n                rigCalibIDSection.appendChild(rigCalibIDValueSection);\n                //Rig Certificate Value\n                const rigCalibValueSection = document.createElement('div');\n                rigCalibValueSection.style.display = \"flex\";\n                rigCalibValueSection.style.flexDirection = \"row\";\n                rigCalibValueSection.style.alignItems = \"center\";\n                rigCalibValueSection.style.width = \"33%\";\n                const rigCalibValueLabelSection = document.createElement('div');\n                rigCalibValueLabelSection.style.fontSize = \"small\";\n                rigCalibValueLabelSection.textContent = \"Ref. Value:\";\n                rigCalibValueLabelSection.style.fontWeight = \"bold\";\n                const rigCalibValueValueSection = document.createElement('div');\n                rigCalibValueValueSection.style.fontSize = \"small\";\n                rigCalibValueValueSection.textContent = `${sensorProfile['rigReferenceCalibrationValue']}`;\n                rigCalibValueValueSection.style.paddingLeft = \"5px\";\n                rigCalibValueSection.appendChild(rigCalibValueLabelSection);\n                rigCalibValueSection.appendChild(rigCalibValueValueSection);\n                //Rig Certificate Calib Date\n                const rigCalibDateSection = document.createElement('div');\n                rigCalibDateSection.style.display = \"flex\";\n                rigCalibDateSection.style.flexDirection = \"row\";\n                rigCalibDateSection.style.alignItems = \"center\";\n                rigCalibDateSection.style.width = \"33%\";\n                const rigCalibDateLabelSection = document.createElement('div');\n                rigCalibDateLabelSection.style.fontSize = \"small\";\n                rigCalibDateLabelSection.textContent = \"Ref. Date:\";\n                rigCalibDateLabelSection.style.fontWeight = \"bold\";\n                const rigICalibDateValueSection = document.createElement('div');\n                rigICalibDateValueSection.style.fontSize = \"small\";\n                rigICalibDateValueSection.textContent = `${sensorProfile['rigReferenceCalibrationDate']}`;\n                rigICalibDateValueSection.style.paddingLeft = \"5px\";\n                rigCalibDateSection.appendChild(rigCalibDateLabelSection);\n                rigCalibDateSection.appendChild(rigICalibDateValueSection);\n\n                const row2BSection = document.createElement('div');\n                row2BSection.style.display = \"flex\";\n                row2BSection.style.flexDirection = \"row\";\n                row2BSection.style.marginLeft = \"25px\";\n                //Rig ID\n                const rigIDSection = document.createElement('div');\n                rigIDSection.style.display = \"flex\";\n                rigIDSection.style.flexDirection = \"row\";\n                rigIDSection.style.alignItems = \"center\";\n                rigIDSection.style.width = \"33%\";\n                const rigIDLabelSection = document.createElement('div');\n                rigIDLabelSection.style.fontSize = \"small\";\n                rigIDLabelSection.textContent = \"ID:\";\n                rigIDLabelSection.style.fontWeight = \"bold\";\n                const rigIDValueSection = document.createElement('div');\n                rigIDValueSection.style.fontSize = \"small\";\n                rigIDValueSection.textContent = `${sensorProfile['rigID']}`;\n                rigIDValueSection.style.paddingLeft = \"5px\";\n                rigIDSection.appendChild(rigIDLabelSection);\n                rigIDSection.appendChild(rigIDValueSection);\n                //Rig Name\n                const rigNameSection = document.createElement('div');\n                rigNameSection.style.display = \"flex\";\n                rigNameSection.style.flexDirection = \"row\";\n                rigNameSection.style.alignItems = \"center\";\n                rigNameSection.style.width = \"33%\";\n                const rigNameLabelSection = document.createElement('div');\n                rigNameLabelSection.style.fontSize = \"small\";\n                rigNameLabelSection.textContent = \"Name:\";\n                rigNameLabelSection.style.fontWeight = \"bold\";\n                const rigNameValueSection = document.createElement('div');\n                rigNameValueSection.style.fontSize = \"small\";\n                rigNameValueSection.textContent = `${sensorProfile['rigName']}`;\n                rigNameValueSection.style.paddingLeft = \"5px\";\n                rigNameSection.appendChild(rigNameLabelSection);\n                rigNameSection.appendChild(rigNameValueSection);\n                //Rig IP\n                const rigIPSection = document.createElement('div');\n                rigIPSection.style.display = \"flex\";\n                rigIPSection.style.flexDirection = \"row\";\n                rigIPSection.style.alignItems = \"center\";\n                rigIPSection.style.width = \"20%\";\n                const rigIPLabelSection = document.createElement('div');\n                rigIPLabelSection.style.fontSize = \"small\";\n                rigIPLabelSection.textContent = \"IP:\";\n                rigIPLabelSection.style.fontWeight = \"bold\";\n                const rigIPValueSection = document.createElement('div');\n                rigIPValueSection.style.fontSize = \"small\";\n                rigIPValueSection.textContent = `${sensorProfile['rigIP']}`;\n                rigIPValueSection.style.paddingLeft = \"5px\";\n                rigIPSection.appendChild(rigIPLabelSection);\n                rigIPSection.appendChild(rigIPValueSection);\n\n                //Row 3A==========================================================\n                const row3ASection = document.createElement('div');\n                row3ASection.style.display = \"flex\";\n                row3ASection.style.flexDirection = \"row\";\n                row3ASection.style.alignItems = \"center\";\n                row3ASection.style.marginLeft = \"25px\";\n                //Sensor Detail Title\n                const sensorTitleSection = document.createElement('div');\n                sensorTitleSection.style.fontSize = \"small\";\n                sensorTitleSection.textContent = \"Sensor Detail:\";\n                sensorTitleSection.style.fontWeight = \"bold\";\n                sensorTitleSection.style.textDecoration = \"underline\";\n                //Sensor Description\n                const sensorDescriptionSection = document.createElement('div');\n                sensorDescriptionSection.style.display = \"flex\";\n                sensorDescriptionSection.style.flexDirection = \"row\";\n                sensorDescriptionSection.style.alignItems = \"center\";\n                sensorDescriptionSection.style.width = \"33%\";\n                const sensorDescriptionLabelSection = document.createElement('div');\n                sensorDescriptionLabelSection.style.fontSize = \"small\";\n                sensorDescriptionLabelSection.textContent = \"Description:\";\n                sensorDescriptionLabelSection.style.fontWeight = \"bold\";\n                const sensorDescriptionValueSection = document.createElement('div');\n                sensorDescriptionValueSection.style.fontSize = \"small\";\n                sensorDescriptionValueSection.textContent = `${sensorProfile['sensorDescription']}`;\n                sensorDescriptionValueSection.style.paddingLeft = \"5px\";\n                sensorDescriptionSection.appendChild(sensorDescriptionLabelSection);\n                sensorDescriptionSection.appendChild(sensorDescriptionValueSection);\n                //Type\n                const typeSection = document.createElement('div');\n                typeSection.style.display = \"flex\";\n                typeSection.style.flexDirection = \"row\";\n                typeSection.style.alignItems = \"center\";\n                typeSection.style.width = \"33%\";\n                const typeLabelSection = document.createElement('div');\n                typeLabelSection.style.fontSize = \"small\";\n                typeLabelSection.textContent = \"Type:\";\n                typeLabelSection.style.fontWeight = \"bold\";\n                const typeValueSection = document.createElement('div');\n                typeValueSection.style.fontSize = \"small\";\n                typeValueSection.textContent = `${sensorProfile['type']}`;\n                typeValueSection.style.paddingLeft = \"5px\";\n                typeSection.appendChild(typeLabelSection);\n                typeSection.appendChild(typeValueSection);\n                //Unit\n                const unitSection = document.createElement('div');\n                unitSection.style.display = \"flex\";\n                unitSection.style.flexDirection = \"row\";\n                unitSection.style.alignItems = \"center\";\n                unitSection.style.width = \"33%\";\n                const unitLabelSection = document.createElement('div');\n                unitLabelSection.style.fontSize = \"small\";\n                unitLabelSection.textContent = \"Unit:\";\n                unitLabelSection.style.fontWeight = \"bold\";\n                const unitValueSection = document.createElement('div');\n                unitValueSection.style.fontSize = \"small\";\n                unitValueSection.textContent = `${sensorProfile['unit']}`;\n                unitValueSection.style.paddingLeft = \"5px\";\n                unitSection.appendChild(unitLabelSection);\n                unitSection.appendChild(unitValueSection);\n\n                //Row 3B==========================================================\n                const row3BSection = document.createElement('div');\n                row3BSection.style.display = \"flex\";\n                row3BSection.style.flexDirection = \"row\";\n                row3BSection.style.alignItems = \"center\";\n                row3BSection.style.marginLeft = \"25px\";\n                //Sensor ID\n                const sensorIDSection = document.createElement('div');\n                sensorIDSection.style.display = \"flex\";\n                sensorIDSection.style.flexDirection = \"row\";\n                sensorIDSection.style.alignItems = \"center\";\n                sensorIDSection.style.width = \"33%\";\n                const sensorIDLabelSection = document.createElement('div');\n                sensorIDLabelSection.style.fontSize = \"small\";\n                sensorIDLabelSection.textContent = \"ID:\";\n                sensorIDLabelSection.style.fontWeight = \"bold\";\n                const sensorIDValueSection = document.createElement('div');\n                sensorIDValueSection.style.fontSize = \"small\";\n                sensorIDValueSection.textContent = `${sensorProfile['sensorID']}`;\n                sensorIDValueSection.style.paddingLeft = \"5px\";\n                sensorIDSection.appendChild(sensorIDLabelSection);\n                sensorIDSection.appendChild(sensorIDValueSection);\n                //Sensor Name\n                const sensorNameSection = document.createElement('div');\n                sensorNameSection.style.display = \"flex\";\n                sensorNameSection.style.flexDirection = \"row\";\n                sensorNameSection.style.alignItems = \"center\";\n                sensorNameSection.style.width = \"33%\";\n                const sensorNameLabelSection = document.createElement('div');\n                sensorNameLabelSection.style.fontSize = \"small\";\n                sensorNameLabelSection.textContent = \"Name:\";\n                sensorNameLabelSection.style.fontWeight = \"bold\";\n                const sensorNameValueSection = document.createElement('div');\n                sensorNameValueSection.style.fontSize = \"small\";\n                sensorNameValueSection.textContent = `${sensorProfile['sensorName']}`;\n                sensorNameValueSection.style.paddingLeft = \"5px\";\n                sensorNameSection.appendChild(sensorNameLabelSection);\n                sensorNameSection.appendChild(sensorNameValueSection);\n\n                //Row 4==========================================================\n                //Technical Detail Title\n                const technicalTitleSection = document.createElement('div');\n                technicalTitleSection.style.fontSize = \"small\";\n                technicalTitleSection.textContent = \"Technical Detail:\";\n                technicalTitleSection.style.fontWeight = \"bold\";\n                technicalTitleSection.style.textDecoration = \"underline\";\n                const row4ASection = document.createElement('div');\n                row4ASection.style.display = \"flex\";\n                row4ASection.style.flexDirection = \"row\";\n                row4ASection.style.alignItems = \"center\";\n                row4ASection.style.marginLeft = \"25px\";\n                //Sample Size\n                const sampleSizeSection = document.createElement('div');\n                sampleSizeSection.style.display = \"flex\";\n                sampleSizeSection.style.flexDirection = \"row\";\n                sampleSizeSection.style.alignItems = \"center\";\n                sampleSizeSection.style.width = \"33%\";\n                const sampleSizeLabelSection = document.createElement('div');\n                sampleSizeLabelSection.style.fontSize = \"small\";\n                sampleSizeLabelSection.textContent = \"Sample Size:\";\n                sampleSizeLabelSection.style.fontWeight = \"bold\";\n                const sampleSizeValueSection = document.createElement('div');\n                sampleSizeValueSection.style.fontSize = \"small\";\n                sampleSizeValueSection.textContent = `${sensorProfile['checkpointSampleSize']}`;\n                sampleSizeValueSection.style.paddingLeft = \"5px\";\n                sampleSizeSection.appendChild(sampleSizeLabelSection);\n                sampleSizeSection.appendChild(sampleSizeValueSection);\n                //Speed\n                const speedSection = document.createElement('div');\n                speedSection.style.display = \"flex\";\n                speedSection.style.flexDirection = \"row\";\n                speedSection.style.alignItems = \"center\";\n                speedSection.style.width = \"33%\";\n                const speedLabelSection = document.createElement('div');\n                speedLabelSection.style.fontSize = \"small\";\n                speedLabelSection.textContent = \"Sample Speed:\";\n                speedLabelSection.style.fontWeight = \"bold\";\n                const speedValueSection = document.createElement('div');\n                speedValueSection.style.fontSize = \"small\";\n                speedValueSection.textContent = `${sensorProfile['checkpointSpeed']}`;\n                speedValueSection.style.paddingLeft = \"5px\";\n                speedSection.appendChild(speedLabelSection);\n                speedSection.appendChild(speedValueSection);\n                //Delay\n                const delaySection = document.createElement('div');\n                delaySection.style.display = \"flex\";\n                delaySection.style.flexDirection = \"row\";\n                delaySection.style.alignItems = \"center\";\n                delaySection.style.width = \"33%\";\n                const delayLabelSection = document.createElement('div');\n                delayLabelSection.style.fontSize = \"small\";\n                delayLabelSection.textContent = \"Sample Delay:\";\n                delayLabelSection.style.fontWeight = \"bold\";\n                const delayValueSection = document.createElement('div');\n                delayValueSection.style.fontSize = \"small\";\n                delayValueSection.textContent = `${sensorProfile['checkpointDelay']}`;\n                delayValueSection.style.paddingLeft = \"5px\";\n                delaySection.appendChild(delayLabelSection);\n                delaySection.appendChild(delayValueSection);\n\n                const row4BSection = document.createElement('div');\n                row4BSection.style.display = \"flex\";\n                row4BSection.style.flexDirection = \"row\";\n                row4BSection.style.alignItems = \"center\";\n                row4BSection.style.marginLeft = \"25px\";\n                //LimitRange\n                const limitSection = document.createElement('div');\n                limitSection.style.display = \"flex\";\n                limitSection.style.flexDirection = \"row\";\n                limitSection.style.alignItems = \"center\";\n                limitSection.style.width = \"33%\";\n                const limitLabelSection = document.createElement('div');\n                limitLabelSection.style.fontSize = \"small\";\n                limitLabelSection.textContent = \"Range(inclu.):\";\n                limitLabelSection.style.fontWeight = \"bold\";\n                const limitValueSection = document.createElement('div');\n                limitValueSection.style.fontSize = \"small\";\n                limitValueSection.textContent = `${sensorProfile['minLimit']} to ${sensorProfile['maxLimit']}`;\n                limitValueSection.style.paddingLeft = \"5px\";\n                limitSection.appendChild(limitLabelSection);\n                limitSection.appendChild(limitValueSection);\n                //Checkpoint Positions\n                const checkpointPositionsSection = document.createElement('div');\n                checkpointPositionsSection.style.display = \"flex\";\n                checkpointPositionsSection.style.flexDirection = \"row\";\n                checkpointPositionsSection.style.alignItems = \"center\";\n                checkpointPositionsSection.style.width = \"66%\";\n                const checkpointPositionsLabelSection = document.createElement('div');\n                checkpointPositionsLabelSection.style.fontSize = \"small\";\n                checkpointPositionsLabelSection.textContent = \"Checkpoint Positions:\";\n                checkpointPositionsLabelSection.style.fontWeight = \"bold\";\n                const checkpointPositionsValueSection = document.createElement('div');\n                checkpointPositionsValueSection.style.fontSize = \"small\";\n                checkpointPositionsValueSection.textContent = `[${sensorProfile['checkpointPositions'].toString()}]`;\n                checkpointPositionsValueSection.style.paddingLeft = \"5px\";\n                checkpointPositionsSection.appendChild(checkpointPositionsLabelSection);\n                checkpointPositionsSection.appendChild(checkpointPositionsValueSection);\n\n                const row4CSection = document.createElement('div');\n                row4CSection.style.display = \"flex\";\n                row4CSection.style.flexDirection = \"row\";\n                row4CSection.style.alignItems = \"center\";\n                row4CSection.style.marginLeft = \"25px\";\n                //packID\n                const packIDSection = document.createElement('div');\n                packIDSection.style.display = \"flex\";\n                packIDSection.style.flexDirection = \"row\";\n                packIDSection.style.alignItems = \"center\";\n                packIDSection.style.width = \"33%\";\n                const packIDLabelSection = document.createElement('div');\n                packIDLabelSection.style.fontSize = \"small\";\n                packIDLabelSection.textContent = \"Pack ID:\";\n                packIDLabelSection.style.fontWeight = \"bold\";\n                const packIDValueSection = document.createElement('div');\n                packIDValueSection.style.fontSize = \"small\";\n                packIDValueSection.textContent = hasPack ? `${packProfile['packID']}` : '-';\n                packIDValueSection.style.paddingLeft = \"5px\";\n                packIDSection.appendChild(packIDLabelSection);\n                packIDSection.appendChild(packIDValueSection);\n                //packName\n                const packNameSection = document.createElement('div');\n                packNameSection.style.display = \"flex\";\n                packNameSection.style.flexDirection = \"row\";\n                packNameSection.style.alignItems = \"center\";\n                packNameSection.style.width = \"33%\";\n                const packNameLabelSection = document.createElement('div');\n                packNameLabelSection.style.fontSize = \"small\";\n                packNameLabelSection.textContent = \"Pack Name:\";\n                packNameLabelSection.style.fontWeight = \"bold\";\n                const packNameValueSection = document.createElement('div');\n                packNameValueSection.style.fontSize = \"small\";\n                packNameValueSection.textContent = hasPack ? `${packProfile['packName']}` : \"-\";\n                packNameValueSection.style.paddingLeft = \"5px\";\n                packNameSection.appendChild(packNameLabelSection);\n                packNameSection.appendChild(packNameValueSection);\n                //company\n                const packCompanySection = document.createElement('div');\n                packCompanySection.style.display = \"flex\";\n                packCompanySection.style.flexDirection = \"row\";\n                packCompanySection.style.alignItems = \"center\";\n                packCompanySection.style.width = \"33%\";\n                const packCompanyLabelSection = document.createElement('div');\n                packCompanyLabelSection.style.fontSize = \"small\";\n                packCompanyLabelSection.textContent = \"Pack Company:\";\n                packCompanyLabelSection.style.fontWeight = \"bold\";\n                const packCompanyValueSection = document.createElement('div');\n                packCompanyValueSection.style.fontSize = \"small\";\n                packCompanyValueSection.textContent = hasPack ? `${packProfile['company']}` : \"-\";\n                packCompanyValueSection.style.paddingLeft = \"5px\";\n                packCompanySection.appendChild(packCompanyLabelSection);\n                packCompanySection.appendChild(packCompanyValueSection);\n\n\n                const watermark = document.createElement('div');\n                watermark.textContent = \"UNOFFICIAL DOCUMENT\";\n                watermark.style.cssText = `\n                    position: fixed; /* Fixed instead of absolute */\n                    top: 50%; /* Centered vertically */\n                    left: 50%; /* Centered horizontally */\n                    transform: translate(-50%, -50%) rotate(-45deg); /* Center and rotate */\n                    color: rgba(255, 0, 0, 0.6); /* Semi-transparent red */\n                    font-size: 100px;\n                    font-weight: bold;\n                    width: 100%;\n                    text-align: center;\n                    pointer-events: none; /* Click through */\n                    z-index: 1000;\n                `;\n                // Adjust position to ensure it covers the entire content area\n                watermark.style.top = '50%';\n                watermark.style.left = '50%';\n                popupContentSectionComponent.style.position = 'relative';\n                // popupContentSectionComponent.appendChild(watermark);\n                //Row 5==========================================================\n                const row5Section = document.createElement('div');\n                row5Section.style.display = \"none\";\n                row5Section.style.flexDirection = \"column\";\n                row5Section.style.alignItems = \"center\";\n                row5Section.style.marginLeft = \"25px\";\n                //Phase I Title\n                const phaseITitleSection = document.createElement('div');\n                phaseITitleSection.style.fontSize = \"small\";\n                phaseITitleSection.textContent = \"Phase I Detail:\";\n                phaseITitleSection.style.fontWeight = \"bold\";\n                phaseITitleSection.style.cursor = \"pointer\";\n                phaseITitleSection.style.color = \"blue\";\n                phaseITitleSection.style.textDecoration = \"underline\";\n                phaseITitleSection.addEventListener('click', () => {\n                    row5Section.style.display = row5Section.style.display === \"none\" ? \"flex\" : \"none\";\n                });\n                \n                //Lookup Data\n                const lookupSection = document.createElement('div');\n                lookupSection.style.display = \"flex\";\n                lookupSection.style.flexDirection = \"row\";\n                lookupSection.style.width = \"100%\";\n                const lookupLabelSection = document.createElement('div');\n                lookupLabelSection.textContent = `Lookup Data: `; \n                lookupLabelSection.style.fontWeight = \"bold\";\n                lookupLabelSection.style.fontSize = \"small\";\n                const lookupDataSection = document.createElement('div');\n                lookupDataSection.style.display = \"flex\";\n                lookupDataSection.style.flexDirection = \"column\";\n                lookupDataSection.style.fontSize = \"small\";\n                lookupDataSection.style.marginLeft = \"5px\";\n                phaseILookupData.forEach((lookupArr, index)=>{\n                    const lookupRowValueSection = document.createElement('div');\n                    lookupRowValueSection.style.display = \"flex\";\n                    lookupRowValueSection.style.flexDirection = \"row\";\n                    lookupRowValueSection.style.alignItems = \"center\";\n                    const channelLabelSection = document.createElement('div');\n                    channelLabelSection.textContent = `CH${index + 1}: `; \n                    channelLabelSection.style.fontWeight = \"bold\";\n                    const lookupData = document.createElement('div');\n                    lookupData.style.marginLeft = \"5px\";\n                    lookupData.textContent =  `[${lookupArr.toString()}]`;\n                    lookupRowValueSection.appendChild(channelLabelSection);\n                    lookupRowValueSection.appendChild(lookupData);\n                    lookupDataSection.appendChild(lookupRowValueSection);\n                }) \n                lookupSection.appendChild(lookupLabelSection);\n                lookupSection.appendChild(lookupDataSection);\n                //Lookup Translated Data\n                const lookupTranslatedSection = document.createElement('div');\n                lookupTranslatedSection.style.display = \"flex\";\n                lookupTranslatedSection.style.flexDirection = \"row\";\n                lookupTranslatedSection.style.width = \"100%\";\n                const lookupTranslatedLabelSection = document.createElement('div');\n                lookupTranslatedLabelSection.textContent = `Converted Data: `; \n                lookupTranslatedLabelSection.style.fontWeight = \"bold\";\n                lookupTranslatedLabelSection.style.fontSize = \"small\";\n                const lookupTranslatedDataSection = document.createElement('div');\n                lookupTranslatedDataSection.style.display = \"flex\";\n                lookupTranslatedDataSection.style.flexDirection = \"column\";\n                lookupTranslatedDataSection.style.fontSize = \"small\";\n                lookupTranslatedDataSection.style.whiteSpace = \"pre\"; \n                lookupTranslatedDataSection.style.marginLeft = \"5px\";\n                let lookupBodyStructure = `const char Sensor_ID[11]=\"${sensorProfile['sensorID']},\";\\nconst char Sensor_Type[${sensorProfile[\"channels\"]}]=\"${sensorProfile[\"channels\"]}${sensorProfile['typeID']},;\";\\nconst char Sensor_Desc[12]=\"${sensorProfile['sensorDescription']},\";\\n// JOB# ${sensorProfile['jobID']}\\n// Calibration coeff's are temp compensated periods\\n// Cal coeff stored in ROM\\n`;        \n                phaseILookupData.forEach((lookupArr, index)=>{\n                    lookupBodyStructure += `unsigned int cal_${index+1}[${sensorProfile['checkpointPositions'].length }]= {${lookupArr.toString()}};\\n`;\n                });\n                lookupTranslatedDataSection.textContent =  `${lookupBodyStructure}`;\n                lookupTranslatedSection.appendChild(lookupTranslatedLabelSection);\n                lookupTranslatedSection.appendChild(lookupTranslatedDataSection);\n\n                //Row 6==========================================================\n                const row6Section = document.createElement('div');\n                row6Section.style.display = \"none\";\n                row6Section.style.flexDirection = \"column\";\n                row6Section.style.alignItems = \"center\";\n                row6Section.style.marginLeft = \"25px\";\n                //Phase II Title\n                const phaseIITitleSection = document.createElement('div');\n                phaseIITitleSection.style.fontSize = \"small\";\n                phaseIITitleSection.textContent = \"Phase II Detail:\";\n                phaseIITitleSection.style.fontWeight = \"bold\";\n                phaseIITitleSection.style.cursor = \"pointer\";\n                phaseIITitleSection.style.color = \"blue\";\n                phaseIITitleSection.style.textDecoration = \"underline\";\n                phaseIITitleSection.addEventListener('click', () => {\n                    row6Section.style.display = row6Section.style.display === \"none\" ? \"flex\" : \"none\";\n                });\n                \n                //Calibrated Data\n                const calibratedDataSection = document.createElement('div');\n                calibratedDataSection.style.display = \"flex\";\n                calibratedDataSection.style.flexDirection = \"row\";\n                calibratedDataSection.style.width = \"100%\";\n                const calibratedDataLabelSection = document.createElement('div');\n                calibratedDataLabelSection.textContent = `Calib. Data: `; \n                calibratedDataLabelSection.style.fontWeight = \"bold\";\n                calibratedDataLabelSection.style.fontSize = \"small\";\n                const calibratedDataDataSection = document.createElement('div');\n                calibratedDataDataSection.style.display = \"flex\";\n                calibratedDataDataSection.style.flexDirection = \"column\";\n                calibratedDataDataSection.style.fontSize = \"small\";\n                calibratedDataDataSection.style.marginLeft = \"15px\";\n                if(phaseIICompleted){\n                    phaseIICalibrationDataValueData.forEach((calibratedDataArray, index)=>{\n                        const calibratedDataRowValueSection = document.createElement('div');\n                        calibratedDataRowValueSection.style.display = \"flex\";\n                        calibratedDataRowValueSection.style.flexDirection = \"row\";\n                        calibratedDataRowValueSection.style.alignItems = \"center\";\n                        const channelLabelSection = document.createElement('div');\n                        channelLabelSection.textContent = `CH${index + 1}: `;\n                        channelLabelSection.style.fontWeight = \"bold\";\n                        const dataSection = document.createElement('div');\n                        dataSection.style.marginLeft = \"5px\";\n                        dataSection.textContent =  `[${calibratedDataArray.toString()}]`;\n                        calibratedDataRowValueSection.appendChild(channelLabelSection);\n                        calibratedDataRowValueSection.appendChild(dataSection);\n                        calibratedDataDataSection.appendChild(calibratedDataRowValueSection);\n                    })\n                }else{\n                    calibratedDataDataSection.appendChild(buildMissingPhaseIIDataNotice());\n                }\n                calibratedDataSection.appendChild(calibratedDataLabelSection);\n                calibratedDataSection.appendChild(calibratedDataDataSection);\n                //Current Data \n                const currentDataSection = document.createElement('div');\n                currentDataSection.style.display = \"flex\";\n                currentDataSection.style.flexDirection = \"row\";\n                currentDataSection.style.alignItems = \"center\";\n                currentDataSection.style.width = \"100%\";\n                const currentDataLabelSection = document.createElement('div');\n                currentDataLabelSection.style.fontSize = \"small\";\n                currentDataLabelSection.textContent = \"Current Data:\";\n                currentDataLabelSection.style.fontWeight = \"bold\";\n                const currentDataValueSection = document.createElement('div');\n                currentDataValueSection.style.fontSize = \"small\";\n                currentDataValueSection.textContent = phaseIICompleted ? `[${phaseIICurrentData.toString()}]` : \"Missing — Phase II not completed\";\n                if(!phaseIICompleted){ currentDataValueSection.style.color = \"#b00020\"; currentDataValueSection.style.fontStyle = \"italic\"; }\n                currentDataValueSection.style.paddingLeft = \"5px\";\n                currentDataSection.appendChild(currentDataLabelSection);\n                currentDataSection.appendChild(currentDataValueSection);\n                //Slope Data \n                const slopeDataSection = document.createElement('div');\n                slopeDataSection.style.display = \"flex\";\n                slopeDataSection.style.flexDirection = \"row\";\n                slopeDataSection.style.alignItems = \"center\";\n                slopeDataSection.style.width = \"100%\";\n                const slopeDataLabelSection = document.createElement('div');\n                slopeDataLabelSection.style.fontSize = \"small\";\n                slopeDataLabelSection.textContent = \"Slope Data:\";\n                slopeDataLabelSection.style.fontWeight = \"bold\";\n                const slopeDataValueSection = document.createElement('div');\n                slopeDataValueSection.style.fontSize = \"small\";\n                slopeDataValueSection.textContent = phaseIICompleted ? `[${phaseIISlopeData.toString()}]` : \"Missing — Phase II not completed\";\n                if(!phaseIICompleted){ slopeDataValueSection.style.color = \"#b00020\"; slopeDataValueSection.style.fontStyle = \"italic\"; }\n                slopeDataValueSection.style.paddingLeft = \"5px\";\n                slopeDataSection.appendChild(slopeDataLabelSection);\n                slopeDataSection.appendChild(slopeDataValueSection);\n                //Offset Data \n                const offsetDataSection = document.createElement('div');\n                offsetDataSection.style.display = \"flex\";\n                offsetDataSection.style.flexDirection = \"row\";\n                offsetDataSection.style.alignItems = \"center\";\n                offsetDataSection.style.width = \"100%\";\n                const offsetDataLabelSection = document.createElement('div');\n                offsetDataLabelSection.style.fontSize = \"small\";\n                offsetDataLabelSection.textContent = \"Offset Data:\";\n                offsetDataLabelSection.style.fontWeight = \"bold\";\n                const offsetDataValueSection = document.createElement('div');\n                offsetDataValueSection.style.fontSize = \"small\";\n                offsetDataValueSection.textContent = phaseIICompleted ? `[${phaseIIOffsetData.toString()}]` : \"Missing — Phase II not completed\";\n                if(!phaseIICompleted){ offsetDataValueSection.style.color = \"#b00020\"; offsetDataValueSection.style.fontStyle = \"italic\"; }\n                offsetDataValueSection.style.paddingLeft = \"5px\";\n                offsetDataSection.appendChild(offsetDataLabelSection);\n                offsetDataSection.appendChild(offsetDataValueSection);\n\n\n                //Appending to Row 1A==========================================================\n                popupContentSectionComponent.appendChild(reportTitleSection);\n                popupContentSectionComponent.appendChild(calibrationTitleSection);\n                popupContentSectionComponent.appendChild(row1ASection);\n                row1ASection.appendChild(calibIDSection);\n                row1ASection.appendChild(jobIDSection);\n                row1ASection.appendChild(calibDateSection);\n                //Appending to Row 1B==========================================================\n                popupContentSectionComponent.appendChild(row1BSection);\n                row1BSection.appendChild(employeeSection);\n                row1BSection.appendChild(progressionSection);\n                //Appending to Row 2==========================================================\n                popupContentSectionComponent.appendChild(rigTitleSection);\n                popupContentSectionComponent.appendChild(row2ASection);\n                row2ASection.appendChild(rigCalibIDSection);\n                row2ASection.appendChild(rigCalibValueSection);\n                row2ASection.appendChild(rigCalibDateSection);\n                popupContentSectionComponent.appendChild(row2BSection);\n                row2BSection.appendChild(rigIDSection);\n                row2BSection.appendChild(rigNameSection);\n                row2BSection.appendChild(rigIPSection);\n                //Appending to Row 3==========================================================\n                popupContentSectionComponent.append(sensorTitleSection);\n                popupContentSectionComponent.appendChild(row3ASection);\n                row3ASection.appendChild(sensorDescriptionSection);\n                row3ASection.appendChild(typeSection);\n                row3ASection.appendChild(unitSection);\n                popupContentSectionComponent.appendChild(row3BSection);\n                row3BSection.appendChild(sensorIDSection);\n                row3BSection.appendChild(sensorNameSection);\n                //Appending to Row 4==========================================================\n                popupContentSectionComponent.appendChild(technicalTitleSection);\n                popupContentSectionComponent.appendChild(row4ASection);\n                row4ASection.appendChild(sampleSizeSection);\n                row4ASection.appendChild(speedSection);\n                row4ASection.appendChild(delaySection);\n                popupContentSectionComponent.appendChild(row4BSection);\n                row4BSection.appendChild(limitSection);\n                row4BSection.appendChild(checkpointPositionsSection);\n                popupContentSectionComponent.appendChild(row4CSection);\n                row4CSection.appendChild(packIDSection);\n                row4CSection.appendChild(packNameSection);\n                row4CSection.appendChild(packCompanySection);\n                //Appending to Row 5==========================================================\n                popupContentSectionComponent.appendChild(phaseITitleSection);\n                popupContentSectionComponent.appendChild(row5Section);\n                row5Section.appendChild(lookupTranslatedSection);\n                row5Section.appendChild(lookupSection);\n                //Appending to Row 6==========================================================\n                popupContentSectionComponent.appendChild(phaseIITitleSection);\n                popupContentSectionComponent.appendChild(row6Section);\n                row6Section.appendChild(calibratedDataSection);\n                row6Section.appendChild(currentDataSection);\n                row6Section.appendChild(slopeDataSection);\n                row6Section.appendChild(offsetDataSection);\n\n                //Row Memo==========================================================\n                //Memo\n                const memoSection = document.createElement('div');\n                memoSection.style.display = \"flex\";\n                memoSection.style.flexDirection = \"row\";\n                memoSection.style.alignItems = \"center\";\n                memoSection.style.width = \"100%\";\n                const memoLabelSection = document.createElement('div');\n                memoLabelSection.style.fontSize = \"small\";\n                memoLabelSection.textContent = \"Memo Detail:\";\n                memoLabelSection.style.fontWeight = \"bold\";\n                memoLabelSection.style.textDecoration = \"underline\";\n                const memoValueSection = document.createElement('div');\n                memoValueSection.style.fontSize = \"small\";\n                memoValueSection.style.width = \"100%\";\n                memoValueSection.textContent = `${sensorProfile['memo'] ? sensorProfile['memo'] : \"\"}`;\n                memoValueSection.style.paddingLeft = \"25px\";\n                memoValueSection.style.whiteSpace = \"pre\"; \n                popupContentSectionComponent.appendChild(memoLabelSection);\n                popupContentSectionComponent.appendChild(memoValueSection);\n\n                //Anchor Diagram Title\n                //Calibration Anchor Diagram\n                let  masterDiagramSection = null;\n                let  anchorDiagramTitle = null;\n                // console.log(\"anchorDataValue\");\n                // console.log(sensorProfile['anchorDataValue']);\n                if(sensorProfile['anchorDataValue'] != null){\n                    //Anchor Diagram Title\n                    anchorDiagramTitle = document.createElement('div');\n                    anchorDiagramTitle.style.fontSize = 'small';\n                    anchorDiagramTitle.style.textDecoration = 'underline';\n                    anchorDiagramTitle.style.fontWeight = 'bold';\n                    anchorDiagramTitle.textContent = `Anchor Diagram`;\n\n                    //Anchor Diagram Framework\n                    masterDiagramSection = document.createElement('div');\n                    masterDiagramSection.className=\"masterAnchorDiagramStyle\";\n\n                    const upperMasterSection = document.createElement('div');\n                    upperMasterSection.className=\"upperMasterSectionStyle\";\n                    upperMasterSection.id=\"upperMasterSection\";\n                    const anchorDummyHeadComponent1 = document.createElement('div');\n                    anchorDummyHeadComponent1.style.width=\"47px\"\n                    const anchorUpperTextBoxSection = document.createElement('div');\n                    anchorUpperTextBoxSection.className=\"anchorUpperTextBoxSectionStyle\";\n                    anchorUpperTextBoxSection.id=\"anchorUpperTextBoxSection\";\n                    const anchorDummyTailComponent1 = document.createElement('div');\n                    anchorDummyTailComponent1.style.width=\"47px\"\n                    upperMasterSection.appendChild(anchorDummyHeadComponent1);\n                    upperMasterSection.appendChild(anchorUpperTextBoxSection);\n                    upperMasterSection.appendChild(anchorDummyTailComponent1);\n\n                    const anchorMasterSection = document.createElement('div');\n                    anchorMasterSection.className=\"anchorMasterSectionStyle\";\n                    anchorMasterSection.id=\"anchorMasterSection\"\n\n                    const anchorHeadComponent = document.createElement('div');\n                    anchorHeadComponent.className=\"anchorHeadTextStyle\";\n                    anchorHeadComponent.textContent=\"HEAD\"\n\n                    const anchorPointsComponent = document.createElement('div');\n                    anchorPointsComponent.className=\"anchorPointsSectionStyle\";\n                    anchorPointsComponent.id=\"anchorPointsSection\"\n\n                    const anchorToeTextComponent = document.createElement('div');\n                    anchorToeTextComponent.className=\"anchorToeTextStyle\";\n                    anchorToeTextComponent.textContent=\"TOE\"\n\n                    anchorMasterSection.appendChild(anchorHeadComponent);\n                    anchorMasterSection.appendChild(anchorPointsComponent);\n                    anchorMasterSection.appendChild(anchorToeTextComponent);\n\n                    const lowerMasterSection = document.createElement('div');\n                    lowerMasterSection.className=\"lowerMasterSectionStyle\";\n                    lowerMasterSection.id=\"lowerMasterSection\"\n                    const anchorDummyHeadComponent2 = document.createElement('div');\n                    anchorDummyHeadComponent2.style.width=\"47px\"\n                    const anchorLowerTextBoxSection = document.createElement('div');\n                    anchorLowerTextBoxSection.className=\"anchorLowerTextBoxSection\";\n                    anchorLowerTextBoxSection.id=\"anchorLowerTextBoxSection\"\n                    const anchorDummyTailComponent2 = document.createElement('div');\n                    anchorDummyTailComponent2.style.width=\"47px\"\n\n                    lowerMasterSection.appendChild(anchorDummyHeadComponent2);\n                    lowerMasterSection.appendChild(anchorLowerTextBoxSection);\n                    lowerMasterSection.appendChild(anchorDummyTailComponent2);\n\n                    popupContentSectionComponent.appendChild(anchorDiagramTitle);\n                    popupContentSectionComponent.appendChild(masterDiagramSection);\n                    masterDiagramSection.appendChild(upperMasterSection);\n                    masterDiagramSection.appendChild(anchorMasterSection);\n                    masterDiagramSection.appendChild(lowerMasterSection);\n\n                    if(sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue){                            \n                        //Show Upper Section\n                        upperMasterSection.style.display=\"flex\";\n                        //Show Anchor Section\n                        anchorMasterSection.style.display=\"flex\";\n                        //Hide Lower Section\n                        lowerMasterSection.style.display=\"none\";\n                        //Show Master Section\n                        masterDiagramSection.style.display=\"block\"\n                    }\n                    else if (sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n                        //Show Upper Section\n                        upperMasterSection.style.display=\"flex\";\n                        //Show Anchor Section\n                        anchorMasterSection.style.display=\"flex\";\n                        //Show Lower Section\n                        lowerMasterSection.style.display=\"flex\";\n                        //Show Master Section\n                        masterDiagramSection.style.display=\"block\"\n                    }else{\n                        //Hide Everything\n                        upperMasterSection.style.display=\"none\";\n                        anchorMasterSection.style.display=\"none\";\n                        lowerMasterSection.style.display=\"none\";\n                        masterDiagramSection.style.display=\"none\"\n                    }\n                    //Build Channels so that it will be using building textboxes\n                    let visualAnchorPoints = [];\n                    try{\n                        if(sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue){                                                                                               \n                            for(let i=1; i <= sensorProfile['channels'] - 1; i ++){\n                                visualAnchorPoints.push(i);\n                            }\n                        }\n                        else if (sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n                            for(let i=1; i <= (sensorProfile['channels'] - 1)/2; i ++){\n                                visualAnchorPoints.push(i);\n                            }\n                        }else{\n                        }\n                    }catch(e){\n                        console.log(\"Error in 'Build Channels so that it will be using building textboxes' in buildAnchorDiagram: \" + e)\n                    }\n                    if(anchorUpperTextBoxSection){\n        \n                        anchorUpperTextBoxSection.innerHTML = '';\n        \n                        const firstBufferSection = document.createElement('div');\n                        firstBufferSection.style.width = \"65px\";\n                        firstBufferSection.style.height = \"15px\";\n        \n                        anchorUpperTextBoxSection.appendChild(firstBufferSection);\n        \n                        visualAnchorPoints.forEach((channel)=>{\n                            const inputElement = document.createElement('div');\n                            inputElement.style.fontSize=`small`\n                            inputElement.style.width = \"50px\";\n                            inputElement.style.display = 'flex';\n                            inputElement.id=`upperAnchorTB${channel}`;\n                            inputElement.style.justifyContent = 'center';\n                            inputElement.style.fontWeight = 'bold';\n                            // inputElement.textContent=`${channel}`\n                            anchorUpperTextBoxSection.appendChild(inputElement);\n                        });\n                    }\n                    if (anchorPointsComponent) {\n                    // Clear any existing children\n                        anchorPointsComponent.innerHTML = '';\n        \n                        const headDiv = document.createElement('div');\n                        headDiv.id='headDiv'\n                        headDiv.style.display = \"block\";\n                        headDiv.style.background = \"#4A6A9C\";\n                        headDiv.style.width = \"65px\";\n                        headDiv.style.height = \"15px\";\n                        headDiv.style.borderRadius = \"10px 0 0 10px\";\n                        anchorPointsComponent.appendChild(headDiv);\n        \n                        visualAnchorPoints.forEach((channel) => {\n                            // Create anchor space\n                            const anchorSpace = document.createElement('div');\n                            anchorSpace.id=`anchorPoint${channel}`;\n                            anchorSpace.style.width = '50px';\n                            anchorSpace.style.height = '15px';\n                            anchorSpace.style.display = 'flex';\n                            anchorSpace.style.justifyContent = 'center';\n                            anchorSpace.style.alignItems = 'center';\n                            anchorSpace.style.flexDirection = 'row';\n                            // Create anchor point\n                            const anchorPoint = document.createElement('div');\n                            anchorPoint.style.width = '8px';\n                            anchorPoint.style.height = '8px';\n                            anchorPoint.style.background = '#4A6A9C';\n                            anchorPoint.style.borderStyle = 'solid';\n                            anchorPoint.style.borderRadius = '999px';\n                            anchorPoint.style.borderWidth = '1px';\n        \n        \n                            anchorSpace.appendChild(anchorPoint);\n                            anchorPointsComponent.appendChild(anchorSpace);\n                        });\n                    }\n                    if(anchorLowerTextBoxSection){\n        \n                        anchorLowerTextBoxSection.innerHTML = '';\n                        const firstBufferSection = document.createElement('div');\n        \n                        firstBufferSection.style.width = \"65px\";\n                        firstBufferSection.style.height = \"15px\";\n                        anchorLowerTextBoxSection.appendChild(firstBufferSection);\n        \n                        visualAnchorPoints.forEach((channel)=>{\n                            const inputElement = document.createElement('div');\n                            inputElement.style.fontSize=`small`\n                            inputElement.style.width = \"50px\";\n                            inputElement.style.display = 'flex';\n                            inputElement.id=`lowerAnchorTB${channel}`;\n                            inputElement.style.justifyContent = 'center';\n                            inputElement.style.fontWeight = 'bold';\n                            // inputElement.textContent=`${channel}`\n                            anchorLowerTextBoxSection.appendChild(inputElement);\n                        });\n                    }\n\n                    //Load Initial values for textboxes, sensor type dependent\n                    //Uncomment section below if you want to have ID index as pre-loaded upperAnchorTBs\n                    try{\n                        // console.log(\"sensorProfile\")\n                        // console.log(sensorProfile)\n                        if(sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue){\n                            Object.entries(sensorProfile['anchorDataValue']).map(([key, value])=>{\n                                // console.log(`key:${key}, value:${value}`)\n                                const upperAnchorElement = document.getElementById(key);\n                                upperAnchorElement.style.fontSize ='small';\n                                upperAnchorElement.style.fontWeight ='bold';\n                                upperAnchorElement.textContent = formatAnchor3dp(value);\n                            })\n                        }\n                        else if (sensorProfile['type'] === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n        \n                            Object.entries(sensorProfile['anchorDataValue']).map(([key, value])=>{\n                                // console.log(`key:${key}, value:${value}`)\n                                const lowerAnchorElement = document.getElementById(key);\n                                lowerAnchorElement.style.fontSize ='small';\n                                lowerAnchorElement.style.fontWeight ='bold';\n                                lowerAnchorElement.textContent = formatAnchor3dp(value);\n                            })\n                        }else{\n                        }\n        \n                    }catch(e){\n                        console.log(\"Error in 'Load Initial values for textboxes, sensor type dependent' in buildAnchorDiagram: \" + e)\n                    }\n                }\n        \n\n\n                //Row 7==========================================================\n                const row7Section = document.createElement('div');\n                row7Section.style.display = \"none\";\n                row7Section.style.flexDirection = \"column\";\n                row7Section.style.marginLeft = \"25px\";\n                //Phase II Title\n                const activityLogTitleSection = document.createElement('div');\n                activityLogTitleSection.style.fontSize = \"small\";\n                activityLogTitleSection.textContent = \"Activity Log:\";\n                activityLogTitleSection.style.fontWeight = \"bold\";\n                activityLogTitleSection.style.cursor = \"pointer\";\n                activityLogTitleSection.style.color = \"blue\";\n                activityLogTitleSection.style.textDecoration = \"underline\";\n                activityLogTitleSection.addEventListener('click', () => {\n                    row7Section.style.display = row7Section.style.display === \"none\" ? \"flex\" : \"none\";\n                });\n                if(sensorProfile['employeeActivityLog'] != null &&  Object.keys(sensorProfile['employeeActivityLog']).length > 0){\n                    Object.entries(sensorProfile['employeeActivityLog']).forEach(([key, value]) => {\n                        const employee = key;\n                        value.forEach((activityObj, index)=>{\n                            const activityElement = document.createElement('div');\n                            activityElement.style.border=\"solid\";\n                            activityElement.style.borderRadius=\"30px\";\n                            activityElement.style.borderWidth=\"2px\";\n                            activityElement.style.padding=\"0px\";\n                            activityElement.style.paddingLeft=\"15px\";\n                            activityElement.style.paddingRight=\"15px\";\n                            activityElement.style.borderColor=activityObj['severity'] === 2 ? \"red\" : activityObj['severity'] === 1 ? \"darkorange\" : \"lightblue\"\n                            activityElement.style.fontSize=\"x-small\"\n                            activityElement.style.marginBottom=\"10px\";\n                            const activityEmployeeElement = document.createElement('div');\n                            activityEmployeeElement.textContent = employee;\n                            const activityDateElement = document.createElement('div');\n                            activityDateElement.textContent = activityObj['datetime']\n                            const activityMsgElement = document.createElement('div');\n                            activityMsgElement.textContent = activityObj['activity']\n                            activityElement.appendChild(activityEmployeeElement);\n                            activityElement.appendChild(activityDateElement);\n                            activityElement.appendChild(activityMsgElement);\n                            row7Section.appendChild(activityElement);\n                        })\n                        // console.log(`Key: ${key}, Value: ${value}`);\n                      });\n                    //Appending to Row 7==========================================================\n                    popupContentSectionComponent.appendChild(activityLogTitleSection);\n                    popupContentSectionComponent.appendChild(row7Section);\n                }\n\n                //Display and setup Ok Button\n                const okButtonComponent = document.getElementById('notificationOkButton');\n                okButtonComponent.style.display = \"block\";\n                okButtonComponent.style.marginRight = \"10px\";\n                okButtonComponent.onclick = () => {\n                    context.send('closeNotificationPopup'); \n                };\n                if(allowPrint){\n                    const printButtonComponent = document.getElementById('notificationPrintButton');\n                    printButtonComponent.style.display = \"block\";\n                    printButtonComponent.onclick = async () => {\n                        const popupContent = document.getElementById('notificationPopupContentBody');\n                        if (!popupContent) {\n                            console.error(\"Popup content body not found\");\n                            return;\n                        }\n\n                        // Expand the popup so the off-screen detail rows render into the PDF.\n                        // Hide the always-on scrollbars (overflow:scroll) on BOTH axes so their gray\n                        // tracks aren't captured into the PDF. Restored in finally.\n                        popupContent.style.overflowX = \"visible\";\n                        popupContent.style.overflowY = \"visible\";\n                        row5Section.style.display = \"flex\";\n                        row6Section.style.display = \"flex\";\n                        const inlineStyles = `\n                        @media print {\n                            .pagebreak { page-break-before: always; } /* page-break-after works, as well */\n                            body {\n                                -webkit-print-color-adjust: exact;\n                                -moz-print-color-adjust: exact;\n                                -ms-print-color-adjust: exact;\n                                print-color-adjust: exact;\n                            }\n                        }\n                        #notificationPopupContentBody {\n                            overflow-x: visible;\n                            overflow-y: visible;\n                            padding-bottom: 10px;\n                            padding-left: 20px;\n                            display: flex;\n                            flex-direction: column;\n                            justify-content: space-between;\n                            width: 100%;\n                            padding-right: 20px;\n                        }\n                        .masterAnchorDiagramStyle {\n                            display: block;\n                            width: 100%;\n                            margin-top: 10px; \n                            margin-bottom: 10px;\n                        }\n                        .upperMasterSectionStyle {\n                            width: 100%; \n                            display: flex; \n                            flex-direction: row;\n                            justify-content: center;\n                        }\n                        .anchorMasterSectionStyle {\n                            height: 15px;\n                            width: 100%; \n                            display: flex; \n                            flex-direction: row;\n                            justify-content: center;\n                            align-items: center;\n                        }\n                        .lowerMasterSectionStyle {\n                            height: 15px;\n                            width: 100%; \n                            display: flex; \n                            flex-direction: row;\n                            justify-content: center;\n                        }\n                        .anchorUpperTextBoxSectionStyle {\n                            display: flex;\n                            flex-direction: row;\n                            justify-content: space-between;\n                            width: 900px;\n                            height: 15px;\n                        }\n                        .anchorHeadTextStyle {\n                            width: 50px; \n                            font-size: 12px; \n                            font-weight: bold;\n                        }\n                        .anchorToeTextStyle {\n                            width: 50px; \n                            font-size: 12px; \n                            font-weight: bold;\n                            display: flex;\n                            justify-content: flex-end;\n                        }\n                        .anchorLowerTextBoxSection {\n                            display: flex;\n                            flex-direction: row;\n                            justify-content: space-between; \n                            width: 900px;\n                            height: 15px;\n                        }\n                        .anchorPointsSectionStyle {\n                            display: flex;\n                            flex-direction: row;\n                            justify-content: space-between;\n                            width: 900px;\n                            height: 15px;\n                            background: lightgray;\n                            border-width: 1px;\n                            border-color: gray;\n                            border-style: solid;\n                            border-radius: 10px;\n                        }\n                        `;\n                        // Inject the legacy printJS inline styles into the popup just for the\n                        // duration of PDF capture, so the rendered PDF matches what the printJS\n                        // version produced. Removed right after the snapshot.\n                        const styleTag = document.createElement('style');\n                        styleTag.setAttribute('data-purpose', 'profile-pdf-export');\n                        styleTag.textContent = inlineStyles;\n                        document.head.appendChild(styleTag);\n\n                        try{\n                            const opt = {\n                                margin:      0,\n                                filename:    `${sensorProfile.sensorID}.pdf`,\n                                image:       { type: 'jpeg', quality: 0.98 },\n                                html2canvas: { scale: 2, useCORS: true, allowTaint: true },\n                                jsPDF:       { unit: 'in', format: 'a4', orientation: 'portrait' },\n                                pagebreak:   { mode: ['css', 'legacy'], avoid: ['.no-break'] },\n                            };\n                            const pdfBlob = await html2pdf().set(opt).from(popupContent).outputPdf('blob');\n                            // Pop the OS save-as dialog (Chrome/Edge/Safari 18+) so the user\n                            // can rename and pick a folder. Falls back to default Downloads on\n                            // browsers without the picker.\n                            await savePdfWithPicker(pdfBlob, `${sensorProfile.sensorID}.pdf`);\n                        }finally{\n                            // Always restore the popup back to its compact state, even if PDF\n                            // generation throws.\n                            if(styleTag.parentNode){ styleTag.parentNode.removeChild(styleTag); }\n                            row5Section.style.display = \"none\";\n                            row6Section.style.display = \"none\";\n                            popupContent.style.overflowX = \"scroll\";\n                            popupContent.style.overflowY = \"scroll\";\n                        }\n                    };\n                }\n        \n                // if(context.get(\"calibrationData\")['phaseILookupData']\n            }\n            \n    \n        });\n    }catch (error) {\n        console.error('Error buildSensorProfileNotificationBoard:', error);\n    }\n\n}\nexport function buildBatchSensorBoard(context){\n    context.set(\"isShowConfig.isShowPopupNotification\", true);\n    scheduleOnce('afterRender', context, () => {\n\n        const masterPopupContent = document.getElementById('notificationPopupContentBody');\n        if(masterPopupContent){\n\n            masterPopupContent.innerHTML = '';\n\n            // Title\n            const titleSection = document.createElement('div');\n            titleSection.style.fontSize = 'large';\n            titleSection.style.fontWeight = 'bold';\n            titleSection.textContent = `Sensor List`;\n            masterPopupContent.appendChild(titleSection);\n            \n\n            const masterDivSection = document.createElement(\"div\");\n            masterDivSection.style.width = \"100%\";\n            masterDivSection.style.display = \"flex\";\n            masterDivSection.style.flexDirection = \"row\";\n\n            const master1DivSection = document.createElement(\"div\");\n            master1DivSection.style.width = \"50%\";\n            for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n\n                // subRow1Section Section\n                const subRow1Section = document.createElement('div');\n                subRow1Section.style.display = 'flex';\n                subRow1Section.style.flexDirection = 'row';\n                \n                const col1SensorObjSection = document.createElement('div');\n                col1SensorObjSection.style.marginRight=\"20px\";\n                //Sensor ID Label\n                const sensorIDLabel = document.createElement('div');\n                sensorIDLabel.style.fontSize = 'small';\n                sensorIDLabel.textContent = `ID ${i}:`;\n                //Sensor ID TB\n                const tdsensorIDElement = document.createElement('td');\n                tdsensorIDElement.classList.add('input');\n                const inputSensorIDElement = document.createElement('input');\n                inputSensorIDElement.classList.add('form-control'); \n                inputSensorIDElement.setAttribute('type', 'text');\n                inputSensorIDElement.id=`batch_sensorid_${i}`;\n                inputSensorIDElement.style.fontSize = \"small\";\n                inputSensorIDElement.style.padding = \"0px\";\n                inputSensorIDElement.style.padding = \"0px\";\n                let userInputtedSensorID = null;\n                try{\n                    userInputtedSensorID = `${context.get(\"userInputtedData.batchSensorData\")[i]['sensorData']['sensorID'] ? context.get(\"userInputtedData.batchSensorData\")[i]['sensorData']['sensorID'] : \"\"}`\n                }catch(e){\n\n                }\n                inputSensorIDElement.value = userInputtedSensorID;\n                inputSensorIDElement.addEventListener('change', (event) => {\n                    context.set(\"dashboardStatusBarData.calibration\",calibrationStatusLibrary(551));\n                    context.set(\"dashboardStatusBarData.status\",generalStatusLibrary(602));\n\n                });\n                tdsensorIDElement.appendChild(inputSensorIDElement);\n\n                col1SensorObjSection.appendChild(sensorIDLabel);\n                col1SensorObjSection.appendChild(tdsensorIDElement);\n                subRow1Section.appendChild(col1SensorObjSection);\n\n                const col2SensorObjSection = document.createElement('div');\n                col2SensorObjSection.style.marginRight=\"20px\";\n                //Sensor ID Label\n                const sensorNameLabel = document.createElement('div');\n                sensorNameLabel.style.fontSize = 'small';\n                sensorNameLabel.textContent = `Name:`;\n                //Sensor Name TB\n                const tdsensorNameElement = document.createElement('td');\n                tdsensorNameElement.classList.add('input');\n                const inputSensorNameElement = document.createElement('input');\n                inputSensorNameElement.classList.add('form-control'); \n                inputSensorNameElement.setAttribute('type', 'text');\n                inputSensorNameElement.id=`batch_sensorname_${i}`;\n                inputSensorNameElement.style.fontSize = \"small\";\n                inputSensorNameElement.style.padding = \"0px\";\n                let userInputtedSensorName = null;\n                try{\n                    userInputtedSensorName = `${context.get(\"userInputtedData.batchSensorData\")[i]['sensorData']['sensorName'] ? context.get(\"userInputtedData.batchSensorData\")[i]['sensorData']['sensorName'] : \"\"}`\n                }catch(e){\n\n                }\n                inputSensorNameElement.value = userInputtedSensorName;\n                inputSensorNameElement.addEventListener('change', (event) => {\n                    context.set(\"dashboardStatusBarData.calibration\",calibrationStatusLibrary(551));\n                    context.set(\"dashboardStatusBarData.status\",generalStatusLibrary(602));\n\n                });\n                tdsensorNameElement.appendChild(inputSensorNameElement);\n                col2SensorObjSection.appendChild(sensorNameLabel);\n                col2SensorObjSection.appendChild(tdsensorNameElement);\n                subRow1Section.appendChild(col2SensorObjSection);\n\n                const packIDSection = document.createElement('div');\n                //Pack ID Label\n                const packIDLabel = document.createElement('div');\n                packIDLabel.style.fontSize = 'small';\n                packIDLabel.textContent = `Pack ID:`;\n                //Pack Dropdown Label\n                const tdInput = document.createElement('td');\n                tdInput.classList.add('input');\n                const select = document.createElement('select');\n                select.classList.add('form-control');\n                select.id = `batch_validationid_${i}`;\n                select.style.maxWidth = \"130px\";\n                select.style.fontSize = \"small\";\n                select.style.padding = \"0px\";\n\n                const defaultOption = document.createElement('option');\n                defaultOption.value = \"0\";\n                defaultOption.innerText = \"Mandatory selection\";\n                select.appendChild(defaultOption);\n                \n                const packValidationCompletedProfileList = context.get(\"frontendData.packValidationCompletedProfileList\");\n\n                packValidationCompletedProfileList.forEach(selectOption => {\n                    const option = document.createElement('option');\n                    option.value = selectOption.id;\n                    option.innerText = selectOption.title;\n                    select.appendChild(option);\n                });\n                \n                // Attach onchange listener (replicating `action 'updateSensorFormData'`)\n                select.addEventListener('change', (event) => {\n                    const selectedValue = event.target.value;\n                    console.log(event.target);\n                    console.log(\"Selected Pack ID:\", selectedValue);\n                    const selectedPackProfile = context.get('frontendData.packValidationCompletedProfileList')[Number.parseInt(selectedValue) - 1]['data'];\n                    console.log('you ahve selected pack profile')\n                    console.log(selectedPackProfile);\n                });\n                \n                // Final DOM assembly\n                tdInput.appendChild(select);\n\n                packIDSection.appendChild(packIDLabel);\n                packIDSection.appendChild(tdInput);\n                subRow1Section.appendChild(packIDSection);\n\n\n                const col3SensorObjSection = document.createElement('div');\n                col3SensorObjSection.style.display = \"flex\";\n                col3SensorObjSection.style.alignItems = \"end\";\n                //Trash Icon\n                const trashIconComp = document.createElement('img');\n                trashIconComp.src = '/assets/images/trash-icon.png';\n                trashIconComp.style.width = `15px`;\n                trashIconComp.id = `batch_trash_${i}`\n                trashIconComp.style.cursor = \"pointer\";\n                col3SensorObjSection.appendChild(trashIconComp);\n                trashIconComp.onclick = () => {\n                    const inputSensorIDElementElement = document.getElementById(`batch_sensorid_${i}`);\n                    const inputSensorNameElementElement = document.getElementById(`batch_sensorname_${i}`);\n                    const validationIDComponent = document.getElementById(`batch_validationid_${i}`);\n                    // context.send('closeNotificationPopup'); \n                    inputSensorNameElementElement.value = null;\n                    inputSensorIDElementElement.value = null;\n                    validationIDComponent.value = \"0\";\n                    const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n                    if(batchSensorData[i] != null){\n                        batchSensorData[i][\"sensorData\"][\"sensorID\"] = null;\n                        batchSensorData[i][\"sensorData\"][\"sensorName\"] = null;\n                        batchSensorData[i][\"sensorData\"][\"packObj\"] = null;\n                        context.set(\"userInputtedData.batchSensorData\", batchSensorData);\n\n                    }\n                };\n                subRow1Section.appendChild(col3SensorObjSection);\n\n                master1DivSection.appendChild(subRow1Section);\n            }\n\n            masterDivSection.appendChild(master1DivSection);\n            masterPopupContent.appendChild(masterDivSection);\n            \n            //Display and setup Cancel Save Button\n            const notificationCancelButton = document.getElementById('notificationCancelButton');\n            notificationCancelButton.style.display = \"block\";\n            notificationCancelButton.onclick = () => {\n                context.send('closeNotificationPopup'); \n            };\n            const notificationSaveButton = document.getElementById('notificationSaveButton');\n            notificationSaveButton.style.display = \"block\";\n            notificationSaveButton.style.marginRight = \"10px\";\n            notificationSaveButton.onclick = () => {\n                showPopup([\"Applying your changes...\"], \"warning\", 3);\n                const currCalibrationProcessData = context.get(\"calibrationProcessData\");\n                const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n                /**\n                 * \n                 * When the user clicks Save, for loop the textboxes and then iniitalize each sensor object.\n                 * Each sensor obj has format:\n                 * sensorID:*user inputted* \n                    calibrationData:{\n                        sampleDataDump:[],\n                        sampleCurrentDataDump:[],\n                        lookupData:[\n                        ],\n                        calibrationDataData:[\n                        ],\n                        currentData:[\n                        ],\n                        slopeData:[\n                        ], \n                        offsetData:[\n                        ]\n                    },\n                 */\n                for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                    const sensorIDComponent = document.getElementById(`batch_sensorid_${i}`);\n                    const sensorNameComponent = document.getElementById(`batch_sensorname_${i}`);\n                    const validationIDComponent = document.getElementById(`batch_validationid_${i}`);\n                    if(batchSensorData[i] != null && sensorIDComponent != null & sensorNameComponent != null){\n                        //Initialize sensorInputted Data used for sending values at the end of Calibration Process\n                        batchSensorData[i][\"sensorData\"][\"sensorID\"] = sensorIDComponent.value;\n                        batchSensorData[i][\"sensorData\"][\"sensorName\"] = sensorNameComponent.value;\n                        \n                        if(validationIDComponent != null && context.get('frontendData.packValidationCompletedProfileList')[Number.parseInt(validationIDComponent.value) - 1] != null){\n                            const selectedPackProfile = context.get('frontendData.packValidationCompletedProfileList')[Number.parseInt(validationIDComponent.value) - 1]['data'];\n                            batchSensorData[i][\"sensorData\"][\"packObj\"] = selectedPackProfile;\n                        }\n\n                    }\n                }\n                context.set(\"userInputtedData.batchSensorData\", batchSensorData);\n                console.log(context.get(\"userInputtedData.batchSensorData\"));\n                showPopup([\"Changes applied!\"], \"success\", 3);\n                context.send('closeNotificationPopup'); \n            };\n        }\n    });\n\n}\nexport function showHelpNotificationBoard(context){\n    /**\n     * Case sensitive \n     */\n    return new Promise((resolve) => {\n        try{\n            context.set(\"isShowConfig.isShowPopupNotification\", true);\n            scheduleOnce('afterRender', context, () => {\n                const masterPopupContent = document.getElementById('notificationPopupContentBody');\n                if(masterPopupContent){\n                    //Main Title\n                    const mainComponent = document.createElement('div');\n                    mainComponent.style.alignSelf = 'center';\n                    mainComponent.style.fontSize = 'x-large';\n                    mainComponent.style.fontWeight = 'bold';\n                    mainComponent.textContent = `Help`;\n                    masterPopupContent.appendChild(mainComponent);\n                    // Title 1\n                    const rawCodeSubTitleComponent = document.createElement('div');\n                    rawCodeSubTitleComponent.style.fontSize = 'medium';\n                    rawCodeSubTitleComponent.style.fontWeight = 'bold';\n                    rawCodeSubTitleComponent.textContent = `Configure Board's Settings:`;\n                    masterPopupContent.appendChild(rawCodeSubTitleComponent);\n                    //Subtitle 1\n                    const subsection1Component = document.createElement('div');\n                    subsection1Component.style.marginLeft = \"15px\";\n                    //SubCode 1\n                    const subRawCode1 = document.createElement('div');\n                    subRawCode1.style.fontSize = 'smaller';\n                    subRawCode1.style.fontWeight = 'bold';\n                    subRawCode1.textContent = `1) Set Command Mode`;\n                    subsection1Component.appendChild(subRawCode1);\n                    //Subsubtitle 1\n                    const subsubsection1Component = document.createElement('div');\n                    subsubsection1Component.style.marginLeft = \"30px\";\n                    //Command Mode\n                    const commandMode = document.createElement('div');\n                    commandMode.style.fontSize = 'smaller';\n                    commandMode.textContent = `- Set to Command Mode: WS+COMMAND_MODE=1`;\n                    subsubsection1Component.appendChild(commandMode);\n\n                    subsection1Component.appendChild(subsubsection1Component);\n                    //SubCode 2\n                    const subRawCode2 = document.createElement('div');\n                    subRawCode2.style.fontSize = 'smaller';\n                    subRawCode2.style.fontWeight = 'bold';\n                    subRawCode2.textContent = `2) Set Desired Setting`;\n                    subsection1Component.appendChild(subRawCode2);\n                    //Subsubtitle 2\n                    const subsubsection2Component = document.createElement('div');\n                    subsubsection2Component.style.marginLeft = \"30px\";\n                    //Mode Setting \n                    const modeSettingComponent = document.createElement('div');\n                    modeSettingComponent.style.fontSize = 'smaller';\n                    modeSettingComponent.textContent = `- Mode Setting: WS+COMMAND=0`;\n                    subsubsection2Component.appendChild(modeSettingComponent);\n                    //Channels Setting\n                    const channelsSettingComponent = document.createElement('div');\n                    channelsSettingComponent.style.fontSize = 'smaller';\n                    channelsSettingComponent.textContent = `- Channels Setting: WS+COMMAND=1`;\n                    subsubsection2Component.appendChild(channelsSettingComponent);\n                    //Stroke Setting\n                    const strokeSettingComponent = document.createElement('div');\n                    strokeSettingComponent.style.fontSize = 'smaller';\n                    strokeSettingComponent.textContent = `- Stroke Setting: WS+COMMAND=2`;\n                    subsubsection2Component.appendChild(strokeSettingComponent);\n                    //ID Setting\n                    const idSettingComponent = document.createElement('div');\n                    idSettingComponent.style.fontSize = 'smaller';\n                    idSettingComponent.textContent = `- ID Setting: WS+COMMAND=3`;\n                    subsubsection2Component.appendChild(idSettingComponent);\n                    //Type Setting\n                    const typeSettingComponent = document.createElement('div');\n                    typeSettingComponent.style.fontSize = 'smaller';\n                    typeSettingComponent.textContent = `- Type Setting: WS+COMMAND=4`;\n                    subsubsection2Component.appendChild(typeSettingComponent);\n                    //Description Setting\n                    const descriptionSettingComponent = document.createElement('div');\n                    descriptionSettingComponent.style.fontSize = 'smaller';\n                    descriptionSettingComponent.textContent = `- Description Setting: WS+COMMAND=5`;\n                    subsubsection2Component.appendChild(descriptionSettingComponent);\n                    //Table to ROM Setting\n                    const tableToROMSettingComponent = document.createElement('div');\n                    tableToROMSettingComponent.style.fontSize = 'smaller';\n                    tableToROMSettingComponent.textContent = `- Table to ROM Setting: WS+COMMAND=7`;\n                    subsubsection2Component.appendChild(tableToROMSettingComponent);\n                    //ROM to Table\n                    const romToTableSettingComponent = document.createElement('div');\n                    romToTableSettingComponent.style.fontSize = 'smaller';\n                    romToTableSettingComponent.textContent = `- ROM to Table Setting: WS+COMMAND=8`;\n                    subsubsection2Component.appendChild(romToTableSettingComponent);\n                    //Exit Setting\n                    const exitSettingComponent = document.createElement('div');\n                    exitSettingComponent.style.fontSize = 'smaller';\n                    exitSettingComponent.textContent = `- Exit Setting: WS+COMMAND=9`;\n                    subsubsection2Component.appendChild(exitSettingComponent);\n\n                    subsection1Component.appendChild(subsubsection2Component);\n                    //SubCode 3\n                    const subRawCode3 = document.createElement('div');\n                    subRawCode3.style.fontSize = 'smaller';\n                    subRawCode3.style.fontWeight = 'bold';\n                    subRawCode3.textContent = `3) Set Desired Value for Setting`;\n                    subsection1Component.appendChild(subRawCode3);\n                    //Subsubtitle 3\n                    const subsubsection3Component = document.createElement('div');\n                    subsubsection3Component.style.marginLeft = \"30px\";\n                    //Command Mode\n                    const setValueComponent = document.createElement('div');\n                    setValueComponent.style.fontSize = 'smaller';\n                    setValueComponent.textContent = `- Set Value: WS+COMMAND_MODE=XXXX`;\n                    subsubsection3Component.appendChild(setValueComponent);\n\n                    subsection1Component.appendChild(subsubsection3Component);\n                    masterPopupContent.appendChild(subsection1Component);\n\n                    // Title 2\n                    const easterEggTitleComponent = document.createElement('div');\n                    easterEggTitleComponent.style.fontSize = 'medium';\n                    easterEggTitleComponent.style.fontWeight = 'bold';\n                    easterEggTitleComponent.textContent = `Easter Egg Settings:`;\n                    masterPopupContent.appendChild(easterEggTitleComponent);\n\n                    //Subtitle 2\n                    const subsection2Component = document.createElement('div');\n                    subsection2Component.style.marginLeft = \"15px\";\n                    masterPopupContent.appendChild(subsection2Component);\n\n                    //getRigActivity\n                    const getRigActivityComponent = document.createElement('div');\n                    getRigActivityComponent.style.fontSize = 'smaller';\n                    getRigActivityComponent.textContent = `- View all rig activites: getRigActivity`;\n                    subsection2Component.appendChild(getRigActivityComponent);\n\n                    //getInternalVersion\n                    const getInternalVersionComponent = document.createElement('div');\n                    getInternalVersionComponent.style.fontSize = 'smaller';\n                    getInternalVersionComponent.textContent = `- View all rig activites: getInternalVersion`;\n                    subsection2Component.appendChild(getInternalVersionComponent);\n    \n                }\n            });\n    \n        }catch (error) {\n            console.error('Error reflashPopup:', error);\n            resolve(false);\n            document.removeEventListener('keydown', enterKeyHandler);\n\n        }\n    });\n}\nexport function buildCalibrationV2IntermissionNotificationBoard(context){\n    /**\n     * Case sensitive \n     */\n    return new Promise((resolve) => {\n        try{\n            let timer = 300;\n            context.set(\"isShowConfig.isShowPopupNotification\", true);\n            scheduleOnce('afterRender', context, () => {\n                const masterPopupContent = document.getElementById('notificationPopupContentBody');\n                if(masterPopupContent){\n                    //X Cloe Button \n                    const xButtonComponent = document.getElementById('closeXButton');\n                    xButtonComponent.style.display ='none';\n                    //Main Title\n                    const mainComponent = document.createElement('div');\n                    mainComponent.style.alignSelf = 'center';\n                    mainComponent.style.fontSize = ' x-large';\n                    mainComponent.style.fontWeight = 'bold';\n                    mainComponent.textContent = `Calibration Intermission`;\n                    masterPopupContent.appendChild(mainComponent);\n                    //Timer Warning message 1\n                    const timerWarningComponent1 = document.createElement('div');\n                    timerWarningComponent1.style.alignSelf = 'center';\n                    timerWarningComponent1.style.fontSize = 'medium';\n                    timerWarningComponent1.style.color = 'red';\n                    timerWarningComponent1.style.fontWeight = 'bold';\n                    const interval = setInterval(() => {\n                        timerWarningComponent1.textContent = `You have ${timer} seconds to ensure the lookup values meet your expectations!`;\n                        const progressBarSection = document.getElementById('packsProgressionPopupViewSection');\n                        const progressBarFill = document.getElementById('packsProgressionPopupViewBar');\n                        let progressPercentage = ((300 - timer) / 300) * 100;\n                        progressPercentage = Math.min(progressPercentage, 100); // Ensures max is 100%\n                        progressBarSection.style.display = \"flex\"; \n                    \n                        progressBarFill.style.width = `${progressPercentage}%`;\n                        timer -= 1;\n                        if(timer < 0){\n                            const xButtonComponent = document.getElementById('closeXButton');\n                            xButtonComponent.style.display ='block';\n                            clearInterval(interval);\n                            context.send('closeNotificationPopup'); \n                            resolve(true);\n                        }\n                    }, 1000); \n                    masterPopupContent.appendChild(timerWarningComponent1);\n                    //Timer Bar Section\n                    const timerBarSection = document.createElement('div');\n                    timerBarSection.id='packsProgressionPopupViewSection'\n                    timerBarSection.class='packsProgressionViewSection'\n                    //Timer Bar \n                    const timerBarBar = document.createElement('div');\n                    timerBarBar.id='packsProgressionPopupViewBar'\n                    timerBarBar.className='packsProgressionBar'\n                    //Timer Bar Value\n                    const timerBarValue = document.createElement('div');\n                    timerBarValue.id='packsProgressionPopupViewValue'\n                    timerBarValue.className='packsProgressionValue'\n                    timerBarSection.appendChild(timerBarBar);\n                    masterPopupContent.appendChild(timerBarSection);\n\n                    //Batch Sensor Section\n                    const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n                    for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                        if(batchSensorData[i] != null){\n                            const sensorObj = batchSensorData[i];\n                            let calibrationData = sensorObj[\"calibrationData\"];\n                            let sensorData = sensorObj[\"sensorData\"];\n\n                            const subtitle1 = document.createElement('div');\n                            subtitle1.style.fontSize = 'smaller';\n                            subtitle1.style.fontWeight = 'bold';\n                            subtitle1.textContent = `Sensor ${i}: ${sensorData[\"sensorID\"]}`;\n                            masterPopupContent.appendChild(subtitle1);\n\n                            const lookupDataSection = document.createElement('div');\n                            lookupDataSection.style.fontSize = 'smaller';\n                            lookupDataSection.style.marginLeft = '10px';\n                            masterPopupContent.appendChild(lookupDataSection);\n                            calibrationData[\"lookupData\"].forEach((calibrationDataArr, index)=>{\n                                const lookupData = document.createElement('div');\n                                lookupData.style.fontSize = 'smaller';\n                                lookupData.textContent = `Lookup ${index + 1}:[${calibrationDataArr.toString()}]`;\n                                lookupDataSection.appendChild(lookupData);\n\n                            })\n                        }\n                    }\n                                    \n                    //Timer Warning message 2\n                    const timerWarningComponent2 = document.createElement('div');\n                    timerWarningComponent2.style.alignSelf = 'center';\n                    timerWarningComponent2.style.fontSize = 'medium';\n                    timerWarningComponent2.textContent = `If you do not meet the time, calibration will continue.`;\n                    masterPopupContent.appendChild(timerWarningComponent2);\n                    //Timer Warning message 3\n                    const timerWarningComponent3 = document.createElement('div');\n                    timerWarningComponent3.style.alignSelf = 'center';\n                    timerWarningComponent3.style.fontSize = 'small';\n                    timerWarningComponent3.textContent = `If you are ready before the counter, please click Ready below.`;\n                    masterPopupContent.appendChild(timerWarningComponent3);\n    \n                    const readyButtonComponent = document.getElementById('notificationReadyButton');\n                    readyButtonComponent.style.display = \"block\";\n                    readyButtonComponent.style.marginRight = \"10px\";\n                    const closePopupAndResolve = () => {\n                        clearInterval(interval);\n                        xButtonComponent.style.display = 'block';\n                        context.send('closeNotificationPopup');\n                        resolve(true); \n                        document.removeEventListener('keydown', enterKeyHandler);\n                    };\n\n                    readyButtonComponent.onclick = closePopupAndResolve;\n                    const enterKeyHandler = (event) => {\n                        if (event.key === \"Enter\") {\n                            closePopupAndResolve();\n                        }\n                    };\n                    document.addEventListener('keydown', enterKeyHandler);\n                    const abortButtonComponent = document.getElementById('notificationAbortButton');\n                    abortButtonComponent.style.display = \"block\";\n                    abortButtonComponent.style.backgroundColor = \"red\"; \n                    abortButtonComponent.style.borderColor = \"red\"; \n                    const abortResolve = () => {\n                        clearInterval(interval);\n                        xButtonComponent.style.display = 'block';\n                        context.send('closeNotificationPopup');\n                        document.removeEventListener('keydown', enterKeyHandler);\n                        context.get(\"emergencyController\").abort();\n                        resolve(false)\n                    };\n                    abortButtonComponent.onclick = abortResolve;\n    \n                }\n            });\n    \n        }catch (error) {\n            console.error('Error calibrationV2IntermissionNotificationBoard:', error.message);\n            console.error(error.stack);\n            resolve(false);\n            document.removeEventListener('keydown', enterKeyHandler);\n\n        }\n    });\n}\n//Check-out modal for an inventory sensor (entered via the Checkout button, enabled only when the\n//row's isInventory is true). It REUSES the Edit-from-Inventory board verbatim — same fields, same\n//Save/Cancel buttons, same PATCH — and only swaps the heading. Reusing (instead of duplicating) keeps\n//the two flows guaranteed-identical, which matters since the Edit-from-Inv entry point is being retired\n//in favour of Checkout.\nexport function buildCheckoutBoard(context, profile){\n    //Tolerate either key casing (camelCase from the normalized row, kebab from a raw payload).\n    const sensorName = profile['sensorName'] != null ? profile['sensorName'] : (profile['sensor-name'] != null ? profile['sensor-name'] : \"\");\n    const sensorId = profile['sensorId'] != null ? profile['sensorId'] : (profile['sensor-id'] != null ? profile['sensor-id'] : \"\");\n    buildInventoryUpdateBoard(context, profile, `Checking out Sensor: ${sensorName}(${sensorId})`, true);\n}\n//`titleText` lets the Checkout flow reuse this exact board with its own heading; omit it and the\n//original \"Edit Sensor … from Inventory\" title is used.\n//`isCheckout` is the flow flag that drives the `isInventory` value sent to the BE on Save: the\n//Checkout modal (true) sends isInventory=false to take the row OUT of inventory; Edit-from-Inv\n//(undefined/false) is a plain edit and preserves the sensor's current isInventory (does NOT flip it).\nexport function buildInventoryUpdateBoard(context, sensorProfile, titleText, isCheckout){\n    context.set(\"isShowConfig.isShowPopupNotification\", true);\n    scheduleOnce('afterRender', context, () => {\n\n        const masterPopupContent = document.getElementById('notificationPopupContentBody');\n        if(masterPopupContent){\n\n            masterPopupContent.innerHTML = '';\n\n            // Title\n            const titleSection = document.createElement('div');\n            titleSection.style.fontSize = 'large';\n            titleSection.style.fontWeight = 'bold';\n            titleSection.textContent = titleText != null ? titleText : `Edit Sensor ${sensorProfile['sensorId']} from Inventory `;\n            masterPopupContent.appendChild(titleSection);\n            \n\n            const masterDivSection = document.createElement(\"div\");\n            masterDivSection.style.width = \"100%\";\n            masterDivSection.style.display = \"flex\";\n            masterDivSection.style.flexDirection = \"row\";\n\n            const master1DivSection = document.createElement(\"div\");\n            master1DivSection.style.width = \"50%\";\n\n\n            // Row 1 Section\n            const row1Section = document.createElement('div');\n            row1Section.style.display = 'flex';\n            row1Section.style.flexDirection = 'row';\n            row1Section.style.marginTop = \"10px\";\n\n            // Sensor Name Row Section\n            const sensorNameSection = document.createElement('div');\n            sensorNameSection.style.display = 'flex';\n            sensorNameSection.style.flexDirection = 'row';\n            sensorNameSection.style.alignItems = 'center';\n            sensorNameSection.style.marginRight = \"10px\";\n            //Sensor Name Label\n            const sensorNameLabel = document.createElement('div');\n            sensorNameLabel.style.fontSize = 'small';\n            sensorNameLabel.textContent = `Sensor Name:`;\n            //Sensor Name TB\n            const tdsensorNameElement = document.createElement('td');\n            tdsensorNameElement.classList.add('input');\n            const inputSensorNameElement = document.createElement('input');\n            inputSensorNameElement.classList.add('form-control'); \n            inputSensorNameElement.setAttribute('type', 'text');\n            inputSensorNameElement.id=`edit_from_inventory_sensorNameTB`;\n            inputSensorNameElement.style.fontSize = \"small\";\n            inputSensorNameElement.style.padding = \"0px\";\n            inputSensorNameElement.style.marginRight = \"10px\";\n            let userInputtedSensorName = null;\n            try{\n                //Bug fix: this prefilled the Sensor Name field with the Sensor ID. Use the actual sensor name.\n                userInputtedSensorName = `${sensorProfile['sensorName'] ? sensorProfile['sensorName'] : \"\"}`\n            }catch(e){\n\n            }\n            inputSensorNameElement.value = userInputtedSensorName;\n            tdsensorNameElement.appendChild(inputSensorNameElement);\n            sensorNameSection.appendChild(sensorNameLabel);\n            sensorNameSection.appendChild(tdsensorNameElement);\n            row1Section.appendChild(sensorNameSection);\n\n            // Job ID Row Section\n            const jobIDSection = document.createElement('div');\n            jobIDSection.style.display = 'flex';\n            jobIDSection.style.flexDirection = 'row';\n            jobIDSection.style.alignItems = 'center';\n            //Job ID Label\n            const jobIDLabel = document.createElement('div');\n            jobIDLabel.style.fontSize = 'small';\n            jobIDLabel.textContent = `Job ID:`;\n            //Job ID TB\n            const tdJobIDElement = document.createElement('td');\n            tdJobIDElement.classList.add('input');\n            const inputJobIDElement = document.createElement('input');\n            inputJobIDElement.classList.add('form-control'); \n            inputJobIDElement.setAttribute('type', 'text');\n            inputJobIDElement.id=`edit_from_inventory_jobIDTB`;\n            inputJobIDElement.style.fontSize = \"small\";\n            inputJobIDElement.style.padding = \"0px\";\n            let userInputtedJobID = null;\n            try{\n                userInputtedJobID = `${sensorProfile['jobId'] ? sensorProfile['jobId'] : \"\"}`\n            }catch(e){\n\n            }\n            inputJobIDElement.value = userInputtedJobID;\n            tdJobIDElement.appendChild(inputJobIDElement);\n            jobIDSection.appendChild(jobIDLabel);\n            jobIDSection.appendChild(tdJobIDElement);\n            row1Section.appendChild(jobIDSection);\n\n            masterPopupContent.appendChild(row1Section);\n\n            // Row 2 Section\n            const row2Section = document.createElement('div');\n            row2Section.style.display = 'flex';\n            row2Section.style.flexDirection = 'row';\n            row2Section.style.marginTop = \"10px\";\n\n            //Memo\n            const memoSection = document.createElement('div');\n            memoSection.style.display = 'flex';\n            memoSection.style.flexDirection = 'row';\n            memoSection.style.alignItems = 'center';\n            const memoLabelSection = document.createElement('div');\n            memoLabelSection.style.fontSize = 'small';\n            memoLabelSection.textContent = `Memo:`;\n\n            const tdMemoElement = document.createElement('td');\n            tdMemoElement.classList.add('input');\n            // Create the textarea\n            const textareaElement = document.createElement('textarea');\n            textareaElement.classList.add('form-control');\n            textareaElement.id=`edit_from_inventory_memoTB`;\n            textareaElement.style.fontSize = 'small';\n            textareaElement.style.padding = \"0px\";\n            textareaElement.value=sensorProfile['memo']\n            \n            tdMemoElement.appendChild(textareaElement);\n            memoSection.appendChild(memoLabelSection);\n            memoSection.appendChild(tdMemoElement);\n\n            row2Section.appendChild(memoSection)\n            masterPopupContent.appendChild(row2Section);\n\n            // Row 3 Section\n            const row3Section = document.createElement('div');\n            row3Section.style.display = 'flex';\n            row3Section.style.flexDirection = 'row';\n            row3Section.style.marginTop = \"10px\";\n\n            //REMEMBER, \"channels\" passed in contains temeprature channel, thus when you do length and indexing, -1 it. \n            scheduleOnce('afterRender', this, () => {\n                let channels = sensorProfile[\"channels\"];\n                let type = sensorProfile[\"type\"];\n                //Build Sections\n                const masterDiagramSection = document.createElement('div');\n                masterDiagramSection.id = 'masterAnchorDiagram';\n        \n                const upperMasterSection = document.createElement('div');\n                upperMasterSection.className=\"upperMasterSectionStyle\";\n                upperMasterSection.id=\"upperMasterSection\";\n                const anchorDummyHeadComponent1 = document.createElement('div');\n                anchorDummyHeadComponent1.style.width=\"47px\"\n                const anchorUpperTextBoxSection = document.createElement('div');\n                anchorUpperTextBoxSection.className=\"anchorUpperTextBoxSectionStyle\";\n                anchorUpperTextBoxSection.id=\"anchorUpperTextBoxSection\";\n                const anchorDummyTailComponent1 = document.createElement('div');\n                anchorDummyTailComponent1.style.width=\"47px\"\n                upperMasterSection.appendChild(anchorDummyHeadComponent1);\n                upperMasterSection.appendChild(anchorUpperTextBoxSection);\n                upperMasterSection.appendChild(anchorDummyTailComponent1);\n\n                const anchorMasterSection = document.createElement('div');\n                anchorMasterSection.className=\"anchorMasterSectionStyle\";\n                anchorMasterSection.id=\"anchorMasterSection\"\n\n                const anchorHeadComponent = document.createElement('div');\n                anchorHeadComponent.className=\"anchorHeadTextStyle\";\n                anchorHeadComponent.textContent=\"HEAD\"\n\n                const anchorPointsComponent = document.createElement('div');\n                anchorPointsComponent.className=\"anchorPointsSectionStyle\";\n                anchorPointsComponent.id=\"anchorPointsSection\"\n\n                const anchorToeTextComponent = document.createElement('div');\n                anchorToeTextComponent.className=\"anchorToeTextStyle\";\n                anchorToeTextComponent.textContent=\"TOE\"\n\n                anchorMasterSection.appendChild(anchorHeadComponent);\n                anchorMasterSection.appendChild(anchorPointsComponent);\n                anchorMasterSection.appendChild(anchorToeTextComponent);\n\n                const lowerMasterSection = document.createElement('div');\n                lowerMasterSection.className=\"lowerMasterSectionStyle\";\n                lowerMasterSection.id=\"lowerMasterSection\"\n                const anchorDummyHeadComponent2 = document.createElement('div');\n                anchorDummyHeadComponent2.style.width=\"47px\"\n                const anchorLowerTextBoxSection = document.createElement('div');\n                anchorLowerTextBoxSection.className=\"anchorLowerTextBoxSection\";\n                anchorLowerTextBoxSection.id=\"anchorLowerTextBoxSection\"\n                const anchorDummyTailComponent2 = document.createElement('div');\n                anchorDummyTailComponent2.style.width=\"47px\"\n\n                lowerMasterSection.appendChild(anchorDummyHeadComponent2);\n                lowerMasterSection.appendChild(anchorLowerTextBoxSection);\n                lowerMasterSection.appendChild(anchorDummyTailComponent2);\n\n                masterDiagramSection.appendChild(upperMasterSection);\n                masterDiagramSection.appendChild(anchorMasterSection);\n                masterDiagramSection.appendChild(lowerMasterSection);\n        \n                if(type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dCable.typeValue || type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dMPBX.typeValue){                 \n                    //Show Upper Section\n                    upperMasterSection.style.display=\"flex\";\n                    //Show Anchor Section\n                    anchorMasterSection.style.display=\"flex\";\n                    //Hide Lower Section\n                    lowerMasterSection.style.display=\"none\";\n                    //Show Master Section\n                    masterDiagramSection.style.display=\"block\"\n                }\n                else if (type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n                    //Show Upper Section\n                    upperMasterSection.style.display=\"flex\";\n                    //Show Anchor Section\n                    anchorMasterSection.style.display=\"flex\";\n                    //Show Lower Section\n                    lowerMasterSection.style.display=\"flex\";\n                    //Show Master Section\n                    masterDiagramSection.style.display=\"block\"\n                }else{\n                    //Hide Everything\n                    upperMasterSection.style.display=\"none\";\n                    anchorMasterSection.style.display=\"none\";\n                    lowerMasterSection.style.display=\"none\";\n                    masterDiagramSection.style.display=\"none\"\n                }\n                //Build Channels so that it will be using building textboxes\n                let visualAnchorPoints = [];\n                try{\n                    if(type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dCable.typeValue || type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dMPBX.typeValue){                                                                                     \n                        for(let i=1; i <= channels - 1; i ++){\n                            visualAnchorPoints.push(i);\n                        }\n                    }\n                    else if (type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n                        for(let i=1; i <= (channels - 1)/2; i ++){\n                            visualAnchorPoints.push(i);\n                        }\n                    }else{\n                    }\n                }catch(e){\n                    console.log(\"Error in 'Build Channels so that it will be using building textboxes' in visualAnchorPoints: \" + e)\n                }\n                if(anchorUpperTextBoxSection){\n    \n                    anchorUpperTextBoxSection.innerHTML = '';\n    \n                    const firstBufferSection = document.createElement('div');\n                    firstBufferSection.style.width = \"65px\";\n                    firstBufferSection.style.height = \"15px\";\n    \n                    anchorUpperTextBoxSection.appendChild(firstBufferSection);\n    \n                    visualAnchorPoints.forEach((channel)=>{\n\n                        const tdElement = document.createElement('td');\n                        tdElement.classList.add('input');\n                        tdElement.style.width = \"50px\";\n                        tdElement.style.height = '15px';\n                        const inputElement = document.createElement('input');\n                        inputElement.classList.add('form-control'); \n                        inputElement.setAttribute('type', 'number'); \n                        inputElement.id=`upperAnchorTB${channel}`;\n                        inputElement.style.width = \"50px\";\n                        inputElement.style.height = '15px';\n                        inputElement.style.fontSize = \"13px\";\n                        inputElement.style.padding = \"0px\";\n\n                        // inputElement.value = `${channel}`;\n                        tdElement.appendChild(inputElement);\n                        anchorUpperTextBoxSection.appendChild(tdElement);\n                    });\n                }\n                if (anchorPointsComponent) {\n                // Clear any existing children\n                    anchorPointsComponent.innerHTML = '';\n    \n                    const headDiv = document.createElement('div');\n                    headDiv.id='headDiv'\n                    headDiv.style.display = \"block\";\n                    headDiv.style.background = \"#4A6A9C\";\n                    headDiv.style.width = \"65px\";\n                    headDiv.style.height = \"15px\";\n                    headDiv.style.borderRadius = \"10px 0 0 10px\";\n                    anchorPointsComponent.appendChild(headDiv);\n    \n                    visualAnchorPoints.forEach((channel) => {\n                        // Create anchor space\n                        const anchorSpace = document.createElement('div');\n                        anchorSpace.id=`anchorPoint${channel}`;\n                        anchorSpace.style.width = '50px';\n                        anchorSpace.style.height = '15px';\n                        anchorSpace.style.display = 'flex';\n                        anchorSpace.style.justifyContent = 'center';\n                        anchorSpace.style.alignItems = 'center';\n                        anchorSpace.style.flexDirection = 'row';\n                        // Create anchor point\n                        const anchorPoint = document.createElement('div');\n                        anchorPoint.style.width = '8px';\n                        anchorPoint.style.height = '8px';\n                        anchorPoint.style.background = '#4A6A9C';\n                        anchorPoint.style.borderStyle = 'solid';\n                        anchorPoint.style.borderRadius = '999px';\n                        anchorPoint.style.borderWidth = '1px';\n    \n    \n                        anchorSpace.appendChild(anchorPoint);\n                        anchorPointsComponent.appendChild(anchorSpace);\n                    });\n                }\n                if(anchorLowerTextBoxSection){\n    \n                    anchorLowerTextBoxSection.innerHTML = '';\n                    const firstBufferSection = document.createElement('div');\n    \n                    firstBufferSection.style.width = \"65px\";\n                    firstBufferSection.style.height = \"15px\";\n                    anchorLowerTextBoxSection.appendChild(firstBufferSection);\n    \n                    visualAnchorPoints.forEach((channel)=>{\n\n                        const tdElement = document.createElement('td');\n                        tdElement.classList.add('input');\n                        tdElement.style.width = \"50px\";\n                        tdElement.style.height = '15px';\n                        const inputElement = document.createElement('input');\n                        inputElement.classList.add('form-control'); \n                        inputElement.setAttribute('type', 'number');\n                        inputElement.id=`lowerAnchorTB${channel}`;\n                        inputElement.style.width = \"50px\";\n                        inputElement.style.height = '15px';\n                        inputElement.style.fontSize = \"13px\";\n                        inputElement.style.padding = \"0px\";\n                        tdElement.appendChild(inputElement);\n                        anchorLowerTextBoxSection.appendChild(tdElement);\n                    });\n                }\n                row3Section.append(masterDiagramSection);\n                masterPopupContent.appendChild(row3Section);\n                //Load Initial values for textboxes, sensor type dependent\n                //Uncomment section below if you want to have ID index as pre-loaded upperAnchorTBs\n                try{\n                    if(type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dCable.typeValue || type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dMPBX.typeValue){\n                        visualAnchorPoints.forEach(anchorPoint=>{\n                            const anchorUpperTBComponent = document.getElementById(`upperAnchorTB${anchorPoint}`);\n                            if(anchorUpperTBComponent){\n                                anchorUpperTBComponent.value = formatAnchor3dp(sensorProfile['anchorDataValue'][`upperAnchorTB${anchorPoint}`]);\n                            }\n                        });\n                    }\n                    else if (type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n                        let channelArray = []\n                        for(let i = 1; i <= (channels - 1); i ++){\n                            channelArray.push(i);\n                        }\n\n                        visualAnchorPoints.forEach(anchorPoint=>{\n                            const anchorUpperTBComponent = document.getElementById(`upperAnchorTB${anchorPoint}`);\n                            const anchorLowerTBComponent = document.getElementById(`lowerAnchorTB${anchorPoint}`);\n                            if(anchorUpperTBComponent != null && anchorLowerTBComponent != null){\n                                anchorUpperTBComponent.value = formatAnchor3dp(sensorProfile['anchorDataValue'][`upperAnchorTB${anchorPoint}`]);\n                                anchorLowerTBComponent.value = formatAnchor3dp(sensorProfile['anchorDataValue'][`lowerAnchorTB${anchorPoint}`]);\n\n                            }\n                        });\n                    }else{\n                    }\n\n                }catch(e){\n                    console.log(\"Error in 'Load Initial values for textboxes, sensor type dependent' in buildInventoryUpdateBoard: \" + e)\n                    console.log(e.stack);\n                }\n\n            });\n            \n            //Display and setup Cancel Save Button\n            const notificationCancelButton = document.getElementById('notificationCancelButton');\n            notificationCancelButton.style.display = \"block\";\n            notificationCancelButton.onclick = () => {\n                context.send('closeNotificationPopup'); \n            };\n            const notificationSaveButton = document.getElementById('notificationSaveButton');\n            notificationSaveButton.style.display = \"block\";\n            notificationSaveButton.style.marginRight = \"10px\";\n            notificationSaveButton.onclick = async () => {\n                //Anchor upper IDs: upperAnchorTB_edit_from_inventory_${channel}\n                //Anchor lower IDs: lowerAnchorTB_edit_from_inventory_${channel}\n                let channels = sensorProfile[\"channels\"];\n                let type = sensorProfile[\"type\"];\n                let visualAnchorPoints = [];\n                let requestBody = {};\n                let anchorDataValue = {};\n                try{\n                    if(type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dCable.typeValue || type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dMPBX.typeValue){                                                                                     \n                        for(let i=1; i <= channels - 1; i ++){\n                            visualAnchorPoints.push(i);\n                        }\n                    }\n                    else if (type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n                        for(let i=1; i <= (channels - 1)/2; i ++){\n                            visualAnchorPoints.push(i);\n                        }\n                    }else{\n                    }\n                }catch(e){\n                    console.log(\"Error in 'Build Channels so that it will be using building textboxes' in visualAnchorPoints: \" + e)\n                }\n                try{\n                    if(type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dCable.typeValue || type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue || type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dMPBX.typeValue){\n                        visualAnchorPoints.forEach(anchorPoint=>{\n                            const anchorUpperTBComponent = document.getElementById(`upperAnchorTB${anchorPoint}`);\n                            if(anchorUpperTBComponent){\n                                // console.log(`upper tb value:${anchorUpperTBComponent.value}`);\n                                anchorDataValue[`upperAnchorTB${anchorPoint}`] = formatAnchor3dp(anchorUpperTBComponent.value);\n                            }\n                        });\n                    }\n                    else if (type === context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue){\n                        let channelArray = []\n                        for(let i = 1; i <= (channels - 1); i ++){\n                            channelArray.push(i);\n                        }\n\n                        visualAnchorPoints.forEach(anchorPoint=>{\n                            const anchorUpperTBComponent = document.getElementById(`upperAnchorTB${anchorPoint}`);\n                            const anchorLowerTBComponent = document.getElementById(`lowerAnchorTB${anchorPoint}`);\n                            if(anchorUpperTBComponent != null && anchorLowerTBComponent != null){\n                                // console.log(`upperAnchorTB${anchorPoint}: ${anchorUpperTBComponent.value}`);\n                                // console.log(`lowerAnchorTB${anchorPoint}: ${anchorLowerTBComponent.value}`);\n                                anchorDataValue[`upperAnchorTB${anchorPoint}`] = formatAnchor3dp(anchorUpperTBComponent.value);\n                                anchorDataValue[`lowerAnchorTB${anchorPoint}`] = formatAnchor3dp(anchorLowerTBComponent.value);\n                            }\n                        });\n                    }else{\n                    }\n\n                }catch(e){\n                    console.log(\"Error in 'get values from textboxes for anchorDataValue' in buildInventoryUpdateBoard: \" + e)\n                    console.log(e.stack);\n                }\n                requestBody['anchorDataValue'] = anchorDataValue;\n                const sensorNameElement = document.getElementById('edit_from_inventory_sensorNameTB');\n                requestBody['sensorName'] = sensorNameElement.value;\n                const jobIDElement = document.getElementById('edit_from_inventory_jobIDTB');\n                requestBody['jobID'] = jobIDElement.value;\n                const memoElement = document.getElementById('edit_from_inventory_memoTB');\n                requestBody['memo'] = memoElement.value;\n                //Desired inventory state sent to the BE. Checkout takes the row OUT of inventory\n                //(isInventory=false). Edit-from-Inv is a plain edit — it must NOT change the in/out\n                //status, so preserve the sensor's CURRENT isInventory. (Previously this forced `true`,\n                //wrongly checking a not-in-inventory sensor back IN on save.)\n                requestBody['isInventory'] = isCheckout === true ? false : (sensorProfile['isInventory'] === true);\n                const latestDateTime=getCurrentDateTime();\n                requestBody['employeeActivityDate'] = latestDateTime;\n\n                const userProfile = context.get('session').data.authenticated['userProfile'];\n                // console.log(userProfile['profile'])\n                requestBody['employeeActivityUsername'] = `${userProfile['profile']['username']}`\n                showPopup([\"Applying changes...\"], \"warning\", 1);\n                const response = await sendPATCHRequest(`calib_sensor_inventory_profile/${sensorProfile[\"calibrationId\"]}`, requestBody);\n                if(response){\n                    showPopup([\"Changes applied!\"], \"success\", 1);\n                    context.send('closeNotificationPopup');\n                    //Refresh the table so the edited row (and, for a checkout, its now-changed\n                    //inventory state) reflects the save. Covers both Checkout and Edit-from-Inv.\n                    context.getSensorProfileList();\n                }else{\n                    showPopup([\"Changes failed\"], \"error\", 1);\n\n                }\n            };\n        }\n    });\n\n}\n\n//Make POST & PATCH requests \nexport async function sendGETRequest(endpoint, queryParams = {}){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint;\n        const queryString = new URLSearchParams(queryParams).toString();\n        if (queryString) {\n          url += `?${queryString}`;\n        }\n        const response = await fetch(url, {\n          method: 'GET',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n        });\n        if (response.status == 401 || response.status == 403) {\n            console.log(response)\n            showPopup([`${url}`, `${response.status}: ${response.statusText}`], 'error', 4);\n        }\n        else if ((response['status'] == 200) || (response['status'] == 201)) {\n            const responseData = await response.json();\n            const newData = convertKeysToCamelCase(responseData);\n            return newData; // Return true if status code is 201\n        } \n         \n      } catch (error) {\n        console.error('Error submitting data:', error);\n      }\n      return false;\n}\nfunction convertKeysToCamelCase(obj) {\n    /**\n        This helper function is a generic helper function used to convert kebab-case to camelCase, so that I can take the obj and see it as normal JSON object \n        const inputFrom = {\n            'sensor-name': 'Temperature Sensor',\n            'sensor-id': 12345,\n            'nested-data': {\n            'calibration-date': '2024-12-15',\n            'sensor-details': [\n                { 'sensor-value': 100, 'sensor-unit': 'C' },\n                { 'sensor-value': 200, 'sensor-unit': 'F' }\n            ]\n            }\n        };\n        const inputTo =  {\n            sensorName: 'Temperature Sensor',\n            sensorId: 12345,\n            nestedData: {\n            calibrationDate: '2024-12-15',\n            sensorDetails: [\n                { sensorValue: 100, sensorUnit: 'C' },\n                { sensorValue: 200, sensorUnit: 'F' }\n            ]\n            }\n        }\n    */\n\n    if (Array.isArray(obj)) {\n      return obj.map(v => convertKeysToCamelCase(v));\n    } else if (obj !== null && typeof obj === 'object') {\n      return Object.fromEntries(\n        Object.entries(obj).map(([key, value]) => [\n          key.replace(/-([a-z])/g, (_, char) => char.toUpperCase()), // Convert kebab-case to camelCase\n          convertKeysToCamelCase(value)\n        ])\n      );\n    }\n    return obj;\n}\nexport async function sendPOSTRequest(endpoint, data){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint + \"/\";\n        const response = await fetch(url, {\n          method: 'POST',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n          body: JSON.stringify(data),\n        });\n        if (response.status == 401 || response.status == 403) {\n            console.log(response)\n            showPopup([`${url}`, `${response.status}: ${response.statusText}`], 'error', 4);\n        }\n        else if ((response.status == 200) || (response.status == 201)) {\n            return await response.json();\n        }\n\n      } catch (error) {\n        console.error('Error submitting data:', error);\n      }\n      return false;\n}\nexport async function sendPATCHRequest(endpoint, data){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint + \"/\";\n        const response = await fetch(url, {\n          method: 'PATCH',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n          body: JSON.stringify(data),\n        });\n        if (response.status == 401 || response.status == 403) {\n            console.log(response)\n            showPopup([`${url}`, `${response.status}: ${response.statusText}`], 'error', 4);\n        }\n        else if ((response.status == 200) || (response.status == 201)) {\n            return await response.json();\n        }\n\n      } catch (error) {\n        console.error('Error submitting data:', error);\n      }\n      return false;\n}\nexport async function sendDELETERequest(endpoint){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint + \"/\";\n        const response = await fetch(url, {\n          method: 'DELETE',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n        });\n  \n        if (response.status == 401 || response.status == 403) {\n            console.log(response)\n            showPopup([`${url}`, `${response.status}: ${response.statusText}`], 'error', 4);\n        }\n        else if ((response.status == 200) || (response.status == 201)) {\n            const responseData = await response.json();\n            // console.log('Data submitted successfully:', responseData);\n            return true; // Return true if status code is 201\n        } \n         \n      } catch (error) {\n        console.error('Error submitting data:', error);\n      }\n      return false;\n}\n\n//Profile & Form & Data Section\nexport function resetProfile(context, mode){\n    switch (mode){\n        case \"rig\":\n            resetProfileForm(mode);\n            context.set(\"formRigData\",{});\n        case \"calib\":\n            resetProfileForm(mode);\n            context.set(\"formCalibData\",{});\n    }\n\n}\nexport function resetProfileForm(mode){\n    switch(mode){\n        case \"rig\":\n            const rigIPComponent = document.getElementById(\"rigIP\");\n            if(rigIPComponent){\n                rigIPComponent.value = null;\n            }\n            const rigNameComponent = document.getElementById(\"rigName\");\n            if(rigNameComponent){\n                rigNameComponent.value = null;\n            }\n            const rigCategoryComponent = document.getElementById(\"rigCategory\");\n            if(rigCategoryComponent){\n                rigCategoryComponent.value = '';\n            }\n        case \"calib\":\n            const comp1 = document.getElementById(\"calibType\");\n            if(comp1){\n                comp1.value = \"\";\n            }\n            const comp2 = document.getElementById(\"channels\");\n            if(comp2){\n                comp2.value = null;\n            }\n            const comp3 = document.getElementById(\"minLimit\");\n            if(comp3){\n                comp3.value = null;\n            }\n            const comp4 = document.getElementById(\"maxLimit\");\n            if(comp4){\n                comp4.value = null;\n            }\n            const comp5 = document.getElementById(\"checkpointSampleSize\");\n            if(comp5){\n                comp5.value = null;\n            }\n            const comp6 = document.getElementById(\"checkpointSpeed\");\n            if(comp6){\n                comp6.value = null;\n            }\n            const comp7 = document.getElementById(\"checkpointDelay\");\n            if(comp7){\n                comp7.value = null;\n            }\n            const comp8 = document.getElementById(\"checkpointPositions\");\n            if(comp8){\n                comp8.value = null;\n            }\n    }\n}\nexport function resetDataRigProfile(context){\n    console.log(\"resetDataRigProfile\");\n    //Clear live log console\n    const chatBox = document.getElementById('streamingTextBox');\n    if(chatBox){\n        chatBox.innerHTML = \"\";\n    }\n    //Reset Calib Profile Selection\n    const calibProfile = document.getElementById(\"selectedCalibrationType\");\n    calibProfile.value=\"0\";\n    context.set(\"userInputtedData.selectedCalibrationProfile\", 0);\n    //Disable Stepper motor & pump sections & \n    const stepperComponent = document.getElementById('stepperMotorSection');\n    stepperComponent.style.pointerEvents=\"none\";\n    stepperComponent.style.opacity=\"0.5\";\n    const pumpComponent = document.getElementById('pressurePumpSection');\n    pumpComponent.style.pointerEvents=\"none\";\n    pumpComponent.style.opacity=\"0.5\";\n    const pressureCalibHotKeysSectionComponent = document.getElementById('pressureCalibHotKeysSection');\n    pressureCalibHotKeysSectionComponent.style.pointerEvents=\"none\";\n    pressureCalibHotKeysSectionComponent.style.opacity=\"0.5\";\n    let dataVer = \"v1.0\"\n    context.set(\"settingsConfig.internalVersion\", dataVer);\n    //Reset Rig Profile Selection\n    context.set(\"userInputtedData.selectedRigProfile\", null);\n}\nexport function resetDataCalibProfile(context){\n    context.set(\"dashboardStatusBarData.status\",generalStatusLibrary(602));\n    //Reset Anchor Data\n    const masterDiagramSection = document.getElementById('masterAnchorDiagram');\n    masterDiagramSection.style.display=\"none\"\n    context.set(\"userInputtedData.selectedAnchorData\", null);\n    //Clear Anchor Live Section\n    document.getElementById('anchorLiveViewSections').innerHTML = '';\n    //Clear Live Log Charts Dataset\n    if (context.chart) {\n        context.chart.data.datasets = [];\n        context.chart.data.labels = []\n        context.chart.update();\n    }\n    //Clear Selected Calib Profile\n    context.set(\"userInputtedData.selectedCalibrationProfile\", null);\n    if(context.get(\"settingsConfig.internalVersion\") === \"v1.0\"){\n        //Clear Sensor ID TB\n        const sensorIDTBComponent = document.getElementById(\"sensorID\");\n        sensorIDTBComponent.value = ``;\n\n    }else if(context.get(\"settingsConfig.internalVersion\") === \"v2.0\"){\n        clearBatchSensorCalibrationData(context);\n\n    }\n    \n}\nfunction updateAnchorBoardLiveViewData(data){\n    const parsedData = data.slice(2); // Parse your incoming message\n    // console.log(parsedData);\n    const chart = Chart.getChart('myChart'); // Get the Chart instance\n    if (chart && chart.data && chart.data.datasets.length > 0) {\n\n        for(let i=0;i<chart.data.datasets.length; i++){\n            if(i == 0){\n                const tempLabel = document.getElementById('T0');\n                if(tempLabel){\n                    tempLabel.textContent=`T:${parsedData[i]}`\n                }\n            }else{\n                const dispLabel = document.getElementById(`CH${i}`);\n                if(dispLabel){\n                    dispLabel.textContent=`CH${i}:${parsedData[i]}`\n                }\n            }\n        }\n    }\n\n}\nfunction updateAnchorChartLiveViewData (data) {\n    const parsedData = data.slice(2); // Parse your incoming message\n    const chart = Chart.getChart('myChart'); // Get the Chart instance\n    if (chart && chart.data && chart.data.datasets.length > 0) {\n        const currentIndex = chart.data.labels.length;\n\n        // Add the new x-axis label (counter value)\n        chart.data.labels.push(currentIndex);\n\n        // Add the new y-axis data (parsed displacement value)\n        for(let i=0;i<chart.data.datasets.length; i++){\n            chart.data.datasets[i].data.push(parsedData[i]);\n        }\n\n        const maxDataPoints = 60; // max\n        if (chart.data.labels.length > maxDataPoints) {\n            chart.data.labels.shift(); // Remove the oldest x-axis label\n            for(let i=0;i<chart.data.datasets.length; i++){\n                chart.data.datasets[i].data.shift();\n            }\n        }\n\n        chart.update('none'); // Update the chart to reflect the new data\n\n    }\n}\nexport async function validateAllForms(context){\n    //When Building a validator, there are only 3 types validation state:\n    //Missing-Red Neutral-Orange Passed-Green\n    const failedState = \"Missing-Red\";\n    const neutralState = \"Neutral-Orange\";\n    const labelState = \"Label-Black\";\n    const passedState = \"Passed-Green\"\n    //When Building a validator, there are only 3 levels of indentation:\n    const indent = 12; //supposed to represent 10px, setting numbers here because I can use it for multiples\n\n    //What is the structure for failedObjects? \n    //Label Text-Value Text-Value Text Color-# of indents\n    let failedObjects={};\n\n\n    //Check Rig Connection\n    if(context.get(\"dashboardStatusBarData.connection\") == null || (JSON.stringify(context.get(\"dashboardStatusBarData.connection\")) != JSON.stringify(connectionStatusLibrary(502)))){\n        failedObjects[\"rigConnection\"] = `Rig Connection-${failedState}-${0 * indent}px`;\n    }else{\n        failedObjects[\"rigConnection\"] = `Rig Connection-${passedState}-${0 * indent}px`;\n    }\n    //Check Permissions\n    // BE wraps everything under data:{} — { data: { capable, required_permissions, missing_permissions } }.\n    // NOTE: convertKeysToCamelCase (in sendGETRequest) only converts kebab-case, NOT snake_case — so\n    // required_permissions / missing_permissions stay snake_case. Read them as-is.\n    let responseData = await sendGETRequest(`sensor_calib_validate/`);\n    const permData = responseData && responseData['data'];\n    const hasPermission = permData && permData['capable'] === true;\n    if(!hasPermission){\n        failedObjects[\"permission_sensor_calib\"] = `Permissions-${failedState}-${0 * indent}px`;\n        // List the REQUIRED permissions for sensor calibration, line by line in RED, indented under the\n        // permission line, so the operator sees exactly which permissions are needed. (perm names have no\n        // \"-\" so the dash-delimited row format is safe; \"Label\" state colors the label itself.)\n        const required = (permData && Array.isArray(permData['required_permissions'])) ? permData['required_permissions'] : [];\n        required.forEach((perm, idx)=>{\n            failedObjects[`requiredPerm_${idx}`] = `${perm}-Label-red-${1 * indent}px`;\n        });\n    }else{\n        failedObjects[\"permission_sensor_calib\"] = `Permissions-${passedState}-${0 * indent}px`;\n    }\n\n    //Check Calibration Profile\n    if(context.get(\"userInputtedData.selectedCalibrationProfile\") == '0' || context.get(\"userInputtedData.selectedCalibrationProfile\") == '' || context.get(\"userInputtedData.selectedCalibrationProfile\") == null){\n        failedObjects[\"calib\"] = `Calibration Profile-${failedState}-${0 * indent}px`;\n    }else{\n        failedObjects[\"calib\"] = `Calibration Profile-${passedState}-${0 * indent}px`;\n    }\n\n    //Check For Inventory selection — operator must explicitly choose Yes or No (v1.0).\n    //When \"Yes\", Job # / Sensor Name / Anchor are intentionally left blank on screen and the -175\n    //sentinel is injected only at POST time, so their required checks below are skipped.\n    const isForInventory = context.get(\"userInputtedData.isForInventory\") === true;\n    if(context.get(\"settingsConfig.internalVersion\") === \"v1.0\"){\n        if(context.get(\"userInputtedData.isForInventory\") == null){\n            failedObjects[\"forInventory\"] = `For Inventory Selection-${failedState}-${0 * indent}px`;\n        }else{\n            failedObjects[\"forInventory\"] = `For Inventory Selection-${passedState}-${0 * indent}px`;\n        }\n    }\n\n    if(isForInventory){\n\n    }else{\n        //Check Anchor Diagram\n        const masterDiagramSection = document.getElementById('masterAnchorDiagram');\n        if(masterDiagramSection != null && masterDiagramSection.style.display != \"none\"){\n            failedObjects[\"anchorParentSection\"] = `Anchor Diagram Summary-${labelState}-${0 * indent}px`;\n            // console.log(\"Anchor Diagram activated\");\n            let i = 1; \n            if(context.get(\"userInputtedData.selectedAnchorData\") != null){\n                console.log(context.get(\"userInputtedData.selectedAnchorData\"));\n                Object.entries(context.get(\"userInputtedData.selectedAnchorData\")).forEach(([key, value]) => {\n                    const anchorComponent = document.getElementById(key);\n                    failedObjects[key] = `Anchor ${anchorComponent.getAttribute('placeholder')}-${(value == \"\" || value == null) ? \"Missing\" : value}-${value == \"\" ? \"Red\" : \"Green\"}-${1 * indent}px`;\n                });\n    \n            }\n        }\n    }\n    //Check Pack Profile\n    if(context.get(\"userInputtedData.selectedSensorData\") == null || context.get(\"userInputtedData.selectedSensorData\")['selectedPackProfile'] == '' || context.get(\"userInputtedData.selectedSensorData\")['selectedPackProfile'] == null){\n        failedObjects[\"selectedPackProfile\"] = `Pack Profile-${neutralState}-${0 * indent}px`;\n    }else if(context.get(\"userInputtedData.selectedSensorData\") != null && context.get(\"userInputtedData.selectedSensorData\")['selectedPackProfile'] != \"\" && context.get(\"userInputtedData.selectedSensorData\")['selectedPackProfile'] != null){\n        failedObjects[\"selectedPackProfile\"] = `Pack Profile-${neutralState}-${0 * indent}px`;\n    }\n\n    //Check Sensor ID or Batch Sensor ID\n    if(context.get(\"settingsConfig.internalVersion\") === \"v1.0\"){\n        //Check Sensor ID\n        if(context.get(\"userInputtedData.selectedSensorData\") == null || context.get(\"userInputtedData.selectedSensorData\")['sensorID'] == '' || context.get(\"userInputtedData.selectedSensorData\")['sensorID'] == null){\n            failedObjects[\"sensorID\"] = `Sensor ID-${failedState}-${0 * indent}px`;\n        }else if(context.get(\"userInputtedData.selectedSensorData\") != null && context.get(\"userInputtedData.selectedSensorData\")['sensorID'] != \"\" && context.get(\"userInputtedData.selectedSensorData\")['sensorID'] != null){\n            let sensorIDValue = context.get(\"userInputtedData.selectedSensorData\")['sensorID'];\n            if(sensorIDValue.length == 9){\n                failedObjects[\"sensorID\"] = `Sensor ID-${neutralState}-${0 * indent}px`;\n            }else if (sensorIDValue.length == 10){\n                failedObjects[\"sensorID\"] = `Sensor ID-${neutralState}-${0 * indent}px`;\n            }else{\n                failedObjects[\"sensorID\"] = `Sensor ID-${neutralState}-${0 * indent}px`;\n            }\n        }\n    }else if(context.get(\"settingsConfig.internalVersion\") === \"v2.0\"){\n        const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n        for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n            const sensorObj = batchSensorData[i];\n            if(sensorObj != null){\n                const sensorIDValue = sensorObj[\"sensorData\"][\"sensorID\"];\n                if(sensorIDValue.length == 9){\n                    failedObjects[`sensorID${i}`] = `Batch Sensor ID ${i}-${neutralState}-${0 * indent}px`;\n                }else if (sensorIDValue.length == 10){\n                    failedObjects[`sensorID${i}`] = `Batch Sensor ID ${i}-${neutralState}-${0 * indent}px`;\n                }else{\n                    failedObjects[`sensorID${i}`] = `Batch Sensor ID ${i}-${neutralState}-${0 * indent}px`;\n                }\n\n            }\n        }\n    }\n    // console.log(context.get(\"settingsConfig.CALIBRATIONSPECIFICPERMISSIONS\"))\n    if(isForInventory){\n\n    }else{\n        //Check JobID\n        if(context.get(\"userInputtedData.selectedSensorData\") == null || context.get(\"userInputtedData.selectedSensorData\")['jobID'] == '' || context.get(\"userInputtedData.selectedSensorData\")['jobID'] == null){\n            failedObjects[\"jobID\"] = `Job ID-${failedState}-${0 * indent}px`;\n        }else if(context.get(\"userInputtedData.selectedSensorData\") != null && context.get(\"userInputtedData.selectedSensorData\")['jobID'] != \"\" && context.get(\"userInputtedData.selectedSensorData\")['jobID'] != null){\n            failedObjects[\"jobID\"] = `Job ID-${passedState}-${0 * indent}px`;\n        }\n    }\n    //Final Check\n    for (const key in failedObjects) {\n        const value = failedObjects[key];\n\n        // Check if the value contains the keyword (case-insensitive)\n        if (typeof value === 'string' && (value.includes(failedState))) {\n            //When it contains at least one \"Missing\" key word, it fails the check, needs to show notification popup\n            context.set(\"dashboardStatusBarData.status\",generalStatusLibrary(602));\n            return context.buildValidationPopupContent(failedObjects);\n        }\n        \n    }\n\n    \n    //When it passes, don't need to show notification popup. Directly jump to Calibration Daashboard \n    const element = document.getElementById(\"calibrationDashboardTitle\");\n    if (element) {\n        element.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n        // console.log(context.get(\"userInputtedData.selectedRigProfile\"));\n        // console.log(context.get(\"userInputtedData.selectedCalibrationProfile\"));\n        // console.log(context.get(\"userInputtedData.selectedSensorData\"));\n        context.set(\"dashboardStatusBarData.status\",generalStatusLibrary(603));\n    }\n    //Start to send unique batch of commands to prior to start calibration FOR V2.0 ONLY \n    if(context.get(\"settingsConfig.internalVersion\") === \"v2.0\"){\n        showPopup([`Validation Success!`, `Will start to send batch commands`], \"success\", 5);\n        sendV2BatchCommands1(context);\n    }else{\n        showPopup([`Validation Success!`], \"success\", 2);\n    }\n\n}\n\n//Web Socket Section\n/**\n * FOR DEV: USE WS. FOR PRODUCTION: USE WSS\n */\nexport function initializeConnection(context, ip){\n    // console.log(\"called initializeConnection\");\n    //initialize websock component\n    if (context.ws && context.ws.readyState !== WebSocket.CLOSED) {\n        console.warn(\"WebSocket already exists. Disconnecting...\");\n        webSocketDisconnect(context);\n    }\n    resetLog(context, 'live');\n    context.ws = new WebSocket(`wss://${ip}:888`);\n\n    if(context.ws.readyState === WebSocket.CONNECTING){\n        context.set(\"dashboardStatusBarData.connection\",connectionStatusLibrary(501));\n        showPopup(['Connecting... Please wait until connection has been updated!'], 'warning', 10)\n    }\n    context.ws.onopen = () => {\n        context.set(\"dashboardStatusBarData.connection\",connectionStatusLibrary(502));\n\n        updateStepperPressureControlPanel(context, context.get(\"userInputtedData.selectedRigProfile\")['data']['rigCategory']);\n    };\n\n    context.ws.onmessage = event => {\n        if(event.data != null){\n            // console.log(event.data.trim());\n            appendLiveLog(context,event.data.trim(), 'incoming');\n        }\n    };\n\n    context.ws.onerror = error => {\n        console.log(\"error\");\n        context.set(\"dashboardStatusBarData.connection\", connectionStatusLibrary(500));\n    };\n\n    context.ws.onclose = () => {\n        context.set(\"dashboardStatusBarData.connection\", connectionStatusLibrary(500));\n        resetDataRigProfile(context);\n    };    \n    window.addEventListener('beforeunload', function () {\n        const component = document.getElementById('selectedRigIP');\n        component.value = \"0\";\n        context.set(\"selectedRigDP\", \"0\");\n    });\n}\nexport function webSocketDisconnect(context){\n    if(context.ws){\n        console.log(\"Disconnecting websocket\")\n        context.set(\"dashboardStatusBarData.connection\",connectionStatusLibrary(500));\n        resetLog(context, 'live');\n        context.ws.onopen = null;\n        context.ws.onmessage = null;\n        context.ws.onerror = null;\n        context.ws.onclose = null;\n\n        context.ws.close();\n        context.ws = null;\n        console.log(\"Disconnected to websocket\")\n    }\n}\nexport function websocketReconnect(context){\n    if(context.ws){\n        webSocketDisconnect(context);\n    }\n    if(context.get(\"userInputtedData.selectedRigProfile\")){\n        initializeConnection(context, context.get(\"userInputtedData.selectedRigProfile\")['data']['rigIP']);\n        showPopup(['Successfully reconnected Websocket'], 'success');\n    }\n}\n\n//Anchor & Live & Phase I Log & Phase II Log & Control Panel Section  \nexport function updateRigActivity(context){\n    /**\n     * {\n            \"activityJSON\": {\n                \"status\": 602,\n                \"connection\": 500,\n                \"activity\": 551,\n                \"activeUser\": \"Steven Fu\",\n                \"connectedTo\": \"240471999\",\n                \"company\": \"YieldPoint Epiroc\",\n                \"latestDate\": \"2024-01-8 01:00:00\"\n            }\n        }\n     */\n    const dashboardStatusObj    = context.get(\"dashboardStatusBarData\");\n    const formSensorData    = context.get(\"userInputtedData.selectedSensorData\");\n    const userProfile = context.get('session').data.authenticated['userProfile'];\n    const formRigData    = context.get(\"userInputtedData.selectedRigProfile\");\n    const calibrationObj        = dashboardStatusObj['calibration'];\n    const connectionObj         = dashboardStatusObj['connection'];\n    const currentObj            = dashboardStatusObj['current'];\n    const statusObj             = dashboardStatusObj['status'];\n    const targetObj             = dashboardStatusObj['target'];\n    const latestDateTime        = getCurrentDateTime();\n    if(userProfile !== null && formRigData){\n        let activityLog = {};\n        activityLog['status'] = statusObj['key'];\n        activityLog['connection'] = connectionObj['key'];\n        activityLog['activity'] = calibrationObj['key'];\n        activityLog['activeUser'] = `${userProfile['profile']['first_name']} ${userProfile['profile']['last_name']}`;\n        activityLog['connectedTo'] = formSensorData['sensorID'] ? formSensorData['sensorID'] : null;\n        activityLog['company'] =  `${userProfile['profile']['company']}`;\n        activityLog['latestDate'] = latestDateTime;\n        // console.log(activityLog);\n        sendPATCHRequest(`rig_profile_activity_view/${formRigData['data']['rigID']}`, {'activityJSON':activityLog});\n    }\n}\nexport function appendLiveLog(context, newMessage, direction) {\n    //Update Live Log TB\n    const chatBox = document.getElementById('streamingTextBox');\n    if (chatBox) {\n        if(newMessage.includes(\"current\") || newMessage.includes('target')){\n        }else{\n            chatBox.textContent += `${direction == \"incoming\" ? \">>\" : \"<<\"}${newMessage}\\n`;\n            const lines = chatBox.textContent.split('\\n');\n            const maxNumLines = 300;\n            if (lines.length > maxNumLines) {\n                chatBox.textContent = lines.slice(lines.length - maxNumLines).join('\\n');\n            }\n        }\n\n        // Scroll to the bottom if chat is locked\n        if (context.get('settingsConfig.chatLocked.streamingTextBox')) {\n            chatBox.scrollTop = chatBox.scrollHeight;\n        }\n    }\n    //Used for when the message is in standard structure\n    if(newMessage.includes(\"=\") && newMessage.split(\"=\").length == 2){\n        incomingMessageLibrary(context, newMessage.split(\"=\")[0], newMessage.split(\"=\")[1]);\n    }\n    \n}\nexport function appendPhaseILog(context, newMessage) {\n    //Update Live Log TB\n    const chatBox = document.getElementById('phaseITextbox');\n    if (chatBox) {\n        chatBox.textContent += `${newMessage}\\n`;\n        const lines = chatBox.textContent.split('\\n');\n        const maxNumLines = 75;\n        if (lines.length > maxNumLines) {\n            chatBox.textContent = lines.slice(lines.length - maxNumLines).join('\\n');\n        }\n\n        // Scroll to the bottom if chat is locked\n        if (context.get('settingsConfig.chatLocked.phaseITextbox')) {\n            chatBox.scrollTop = chatBox.scrollHeight;\n        }\n    }\n}\nexport function appendPhaseIILog(context, newMessage) {\n    //Update Live Log TB\n    const chatBox = document.getElementById('phaseIITextbox');\n    if (chatBox) {\n        chatBox.textContent += `${newMessage}\\n`;\n        const lines = chatBox.textContent.split('\\n');\n        const maxNumLines = 75;\n        if (lines.length > maxNumLines) {\n            chatBox.textContent = lines.slice(lines.length - maxNumLines).join('\\n');\n        }\n\n        // Scroll to the bottom if chat is locked\n        if (context.get('settingsConfig.chatLocked.phaseIITextbox')) {\n            chatBox.scrollTop = chatBox.scrollHeight;\n        }\n    }\n}\nexport function updateStepperPressureControlPanel(context,value){\n    // console.log(context.get(\"userInputtedData.selectedRigProfile\")['data']);\n    const stepperPanelComponent = document.getElementById(\"stepperMotorSection\");\n    const pumpPanelComponent = document.getElementById(\"pressurePumpSection\");\n    const pressureCalibHotKeysPanelComponent = document.getElementById(\"pressureCalibHotKeysSection\");\n    //Set the Software ENV based on the rig category \n    //In The future, everything should be V2, however, currently the sensorData= message is comma delimited, not JSON, thus it musts be V1\n    //For pressure calibration, data coming in is in JSON< thus it must use V2\n    if(value == null){\n        stepperPanelComponent.style.pointerEvents=\"none\";\n        stepperPanelComponent.style.opacity=\"0.5\";\n        pumpPanelComponent.style.pointerEvents=\"none\";\n        pumpPanelComponent.style.opacity=\"0.5\";\n        pressureCalibHotKeysPanelComponent.style.pointerEvents=\"none\";\n        pressureCalibHotKeysPanelComponent.style.opacity=\"0.5\";\n    }else if (value == \"STEPPER\"){\n        stepperPanelComponent.style.pointerEvents=\"visible\";\n        stepperPanelComponent.style.opacity=\"1\";\n        pumpPanelComponent.style.pointerEvents=\"none\";\n        pumpPanelComponent.style.opacity=\"0.5\";\n        pressureCalibHotKeysPanelComponent.style.pointerEvents=\"none\";\n        pressureCalibHotKeysPanelComponent.style.opacity=\"0.5\";\n    }else if (value == \"PUMP\"){\n        stepperPanelComponent.style.pointerEvents=\"none\";\n        stepperPanelComponent.style.opacity=\"0.5\";\n        pumpPanelComponent.style.pointerEvents=\"visible\";\n        pumpPanelComponent.style.opacity=\"1\";\n        pressureCalibHotKeysPanelComponent.style.pointerEvents=\"visible\";\n        pressureCalibHotKeysPanelComponent.style.opacity=\"1\";\n    }\n}\nexport function resetLog(context, typeOfLog){\n    switch(typeOfLog){\n        case \"live\":\n            const liveChatBox = document.getElementById('streamingTextBox');\n            if(liveChatBox){\n                liveChatBox.innerHTML=\"\";\n            }\n        case \"phaseI\":\n            const pIChatBox = document.getElementById('phaseITextbox');\n            if(pIChatBox){\n                pIChatBox.innerHTML=\"\";\n            }\n        case \"phaseII\":\n            const pIIChatBox = document.getElementById('phaseIITextbox');\n            if(pIIChatBox){\n                pIIChatBox.innerHTML=\"\";\n            }\n\n    }\n}\n//Phase I && II Schematics\nexport async function getSensorPhaseISchematics(context){\n    const calibProfile = context.get(\"userInputtedData.selectedCalibrationProfile\");\n    const websocket = context.ws;\n    try{\n        if(websocket != null && calibProfile != null && calibProfile['data'] != null){\n            const data = calibProfile['data'];\n            const type = data['type'];\n            const checkpointDelay = data['checkpointDelay'];\n            const checkpointPositions = data['checkpointPositions'];\n            const checkpointSampleSize = data['checkpointSampleSize'];\n            const checkpointSpeed = data['checkpointSpeed'];\n            const checkpointCurrentTargetBuffer = data['checkpointCurrentTargetBuffer'];\n            const maxLimit = data['maxLimit'];\n            const minLimit = data['minLimit'];\n            console.log(`type:${type} checkpointDelay:${checkpointDelay} checkpointPositions:${checkpointPositions.toString()} checkpointSampleSize:${checkpointSampleSize} checkpointSpeed:${checkpointSpeed} maxLimit: ${maxLimit} minLimit:${minLimit} checkpointCurrentTargetBuffer:${checkpointCurrentTargetBuffer} `);\n\n            switch(type){\n                case context.settingsConfig.APPROVEDINSTRUMENTTYPES.dPPC.typeValue:\n                    break;\n\n                default:\n                    //Soft Reset\n                    console.log(\"Soft Resetting\");\n                    softResetPhaseIModule(context);\n\n                    //Set Rig Unit\n                    console.log(\"Setting rig unit\");\n                    setRigUnit(context, type, 'phaseI');\n\n                    //Start Phase I Loop Acension\n                    for (const [index, value] of checkpointPositions.entries()) {\n\n                        emergencyCheckOrThrow(context, \"Phase I emergency triggered. For loop, section 1\");\n\n                        //Set Increase Value and the Status\n                        updateCalibrationStatusModule(context, 552);\n                        appendPhaseILog(context,`Target Updated:${value}`)\n                        setTargetModule(context, value);\n \n                        //Wait until reached to target\n                        // console.log(`calling awaitUntilCheckPointPositionReached`);\n                        const awaitReachAcensionStageResult = await awaitUntilCheckPointPositionReachedAcensionStage(context, 'phaseI', data, value)\n                        if (!awaitReachAcensionStageResult){\n                            updateCalibrationStatusModule(context, 594);\n                            return;\n                        }\n\n                        emergencyCheckOrThrow(context, \"Phase I emergency triggered. For loop, section 2\");\n\n                        //CheckPoint Delay\n                        updateCalibrationStatusModule(context, 596);\n                        await delayTimeModule(context,checkpointDelay)\n\n                        emergencyCheckOrThrow(context, \"Phase I emergency triggered. For loop, section 3\");\n\n                        //Build Lookup values \n                        // console.log(\"Updating calibration status\");\n                        const phaseISampleResult = await phaseISampleModule(context, index, checkpointPositions);\n                        if(!phaseISampleResult){\n                            updateCalibrationStatusModule(context, 594);\n                            return;\n                        }\n\n                        emergencyCheckOrThrow(context, \"Phase I emergency triggered. For loop, section 4\");\n                    }\n                    // console.log(context.get(\"calibrationData\")[\"phaseILookupData\"]);\n\n                    //Post Phase I      \n                    postPhaseProceduralModule(context, 'phaseI', 'stepper0');\n                    break;\n            }\n        }else{\n            showPopup(['Missing calibration profile and/or sensor profile!'], 'warning', 2); \n        }\n    }catch(err){\n        if (err.name === \"AbortError\") {\n            updateCalibrationStatusModule(context, 594);\n            showPopup([`Error in getSensorPhaseISchematics: ${err.message}`], 'error', 15);\n        } else {\n            showPopup([`Error in getSensorPhaseISchematics: ${err.message}`], 'error', 15);\n        }\n        return;\n    }\n}\nexport async function getSensorPhaseIISchematics(context){\n    const calibProfile = context.get(\"userInputtedData.selectedCalibrationProfile\"); \n    const websocket = context.ws;\n    try{\n        if(websocket != null && calibProfile != null && calibProfile['data'] != null){\n            const data = calibProfile['data'];\n            const type = data['type'];\n            const checkpointDelay = data['checkpointDelay'];\n            const checkpointPositions = data['checkpointPositions'];\n            const checkpointSampleSize = data['checkpointSampleSize'];\n            const checkpointSpeed = data['checkpointSpeed'];\n            const checkpointCurrentTargetBuffer = data['checkpointCurrentTargetBuffer'];\n            const maxLimit = data['maxLimit'];\n            const minLimit = data['minLimit'];\n            console.log(`type:${type} checkpointDelay:${checkpointDelay} checkpointPositions:${checkpointPositions.toString()} checkpointSampleSize:${checkpointSampleSize} checkpointSpeed:${checkpointSpeed} maxLimit: ${maxLimit} minLimit:${minLimit} checkpointCurrentTargetBuffer:${checkpointCurrentTargetBuffer} `);\n\n            switch(type){\n                case context.settingsConfig.APPROVEDINSTRUMENTTYPES.dPPC.typeValue: \n                    break\n                default:\n                    //Hard Reset\n                    console.log(\"Soft Resetting\");\n                    softResetPhaseIIModule(context);\n\n                    //Set Rig Unit\n                    console.log(\"Setting rig unit\");\n                    setRigUnit(context, type, 'phaseII');\n\n\n                    //Start Phase II Loop Acension\n                    for (const [index, value] of checkpointPositions.entries()) {\n                        //Set Increase Value and the Status\n                        updateCalibrationStatusModule(context, 560);\n                        appendPhaseIILog(context,`Target Updated:${value}`)\n                        setTargetModule(context, value);\n\n                        emergencyCheckOrThrow(context, \"Phase II emergency triggered. For loop, section 1\")\n\n                        //Wait until reached to target\n                        // console.log(`calling awaitUntilCheckPointPositionReached`);\n                        const awaitReachAcensionStageResult = await awaitUntilCheckPointPositionReachedAcensionStage(context, 'phaseII', data, value)\n                        if (!awaitReachAcensionStageResult){\n                            updateCalibrationStatusModule(context, 595);\n                            return;\n                        }\n\n                        emergencyCheckOrThrow(context,\"Phase II emergency triggered. For loop, section 2\");\n\n                        //CheckPoint Delay\n                        updateCalibrationStatusModule(context, 596);\n                        await delayTimeModule(context,checkpointDelay);\n\n                        emergencyCheckOrThrow(context,\"Phase II emergency triggered. For loop, section 3\");\n\n                        //Build Lookup values \n                        // console.log(\"Updating calibration status\");\n                        const phaseISampleResult = await phaseIISampleModule(context, index, checkpointPositions);\n                        if(!phaseISampleResult){\n                            updateCalibrationStatusModule(context, 595);\n                            return;\n                        }\n                        emergencyCheckOrThrow(context,\"Phase II emergency triggered. For loop, section 4\");\n                    }\n                    // console.log(context.get(\"calibrationData\")[\"phaseILookupData\"]); \n\n                    //Post Phase II  \n                    postPhaseProceduralModule(context, 'phaseII', 'stepper0'); \n                    break;\n            }\n        }else{\n            showPopup(['Missing calibration profile and/or sensor profile!'], 'warning', 2); \n        }\n    }catch(err){\n        console.log(`Error in getSensorPhaseIISchematics: Error Name: ${err.name}. Error Message: ${err.message}`);\n        console.log(err.stack);\n        if (err.name === \"AbortError\") {\n            updateCalibrationStatusModule(context, 595);\n            showPopup([`Error in getSensorPhaseIISchematics: ${err.message}`], 'error', 15);\n        } else {\n            showPopup([`Error in getSensorPhaseIISchematics: ${err.message}`], 'error', 15);\n        }\n        return;\n    }\n}\nexport async function getV2CalibrationSchematics(context){\n    const calibProfile = context.get(\"userInputtedData.selectedCalibrationProfile\");\n    const websocket = context.ws;\n    try{\n        if(websocket != null && calibProfile != null && calibProfile['data'] != null){\n            const data = calibProfile['data'];\n            const type = data['type'];\n            const checkpointDelay = data['checkpointDelay'];\n            const checkpointPositions = data['checkpointPositions'];\n            const checkpointSampleSize = data['checkpointSampleSize'];\n            const checkpointSpeed = data['checkpointSpeed'];\n            const checkpointCurrentTargetBuffer = data['checkpointCurrentTargetBuffer'];\n            const maxLimit = data['maxLimit'];\n            const minLimit = data['minLimit'];\n            console.log(`type:${type} checkpointDelay:${checkpointDelay} checkpointPositions:${checkpointPositions.toString()} checkpointSampleSize:${checkpointSampleSize} checkpointSpeed:${checkpointSpeed} maxLimit: ${maxLimit} minLimit:${minLimit} checkpointCurrentTargetBuffer:${checkpointCurrentTargetBuffer} `);\n\n            switch(type){\n                case context.settingsConfig.APPROVEDINSTRUMENTTYPES.dPPC.typeValue:\n                    break;\n                default:\n                    //Soft Reset\n                    updateCalibrationStatusModule(context, 589);//V2 P1: Soft Resetting\n                    softResetV2PhaseIModule(context, \"phaseI\");\n\n                    //Start Phase I Loop\n                    for (const [index, value] of checkpointPositions.entries()) {\n\n                        emergencyCheckOrThrow(context, \"Phase I emergency triggered. For loop, section 1\");\n\n                        //Set Increase Value and the Status\n                        updateCalibrationStatusModule(context, 588);//V2 P1: Awaiting Rig...\n                        appendPhaseILog(context,`Target Updated:${value}`)\n                        setTargetModule(context, value);\n                        //Wait until reached to target\n                        const awaitReachAcensionStageResult = await awaitUntilCheckPointPositionReachedAcensionV2Stage(context, \"phaseI\", data, value)\n                        if (!awaitReachAcensionStageResult){\n                            updateCalibrationStatusModule(context, 584);//V2 P1: Emergency Stopped\n                            return;\n                        }\n\n                        emergencyCheckOrThrow(context, \"Phase I emergency triggered. For loop, section 2\");\n\n                        //CheckPoint Delay\n                        updateCalibrationStatusModule(context, 596);//Checkpoint Delay\n                        await delayTimeModule(context,checkpointDelay)\n\n                        emergencyCheckOrThrow(context, \"Phase I emergency triggered. For loop, section 3\");\n\n                        //Sample & Build Lookup values \n                        const phaseISampleResult = await sampleV2PhaseIModule(context, index, checkpointPositions);\n                        if(!phaseISampleResult){\n                            updateCalibrationStatusModule(context, 584);//V2 P1: Emergency Stopped\n                            return;\n                        }\n\n                        emergencyCheckOrThrow(context, \"Phase I emergency triggered. For loop, section 4\");\n                    }\n\n                    //Post Phase I Actions\n                    let postP1Result = postPhaseCalibrationV2Module(context, \"phaseI\");\n                    if(!postP1Result){\n                        updateCalibrationStatusModule(context, 584);//V2 P1: Emergency Stopped\n                        return;\n                    }\n\n                    //Start Show Intermission Notification\n                    updateCalibrationStatusModule(context, 583);//V2 P1: Intermission\n                    let popupResult = await buildCalibrationV2IntermissionNotificationBoard(context);\n                    if(!popupResult){\n                        updateCalibrationStatusModule(context, 584);//Calibration V2: Emergency Stopped\n                        return;\n                    }\n\n                    updateCalibrationStatusModule(context, 570);//V2: Uploading Lookup Data...\n                    await sendV2BatchCommands2(context);\n                    updateCalibrationStatusModule(context, 571);//V2: Lookup Data Uploaded\n\n                    //Soft Reset Phase II \n                    updateCalibrationStatusModule(context, 579);//V2 P2: Soft Resetting\n                    softResetV2PhaseIModule(context, \"phaseII\");\n\n\n                    //Start Phase II Loop\n                    for (const [index, value] of checkpointPositions.entries()) {\n\n                        emergencyCheckOrThrow(context, \"Phase II emergency triggered. For loop, section 1\");\n\n                        //Set Increase Value and the Status\n                        updateCalibrationStatusModule(context, 578);//Calibration V2: Awaiting Rig...\n                        appendPhaseIILog(context,`Target Updated:${value}`)\n                        setTargetModule(context, value);\n                        //Wait until reached to target\n                        const awaitReachAcensionStageResult = await awaitUntilCheckPointPositionReachedAcensionV2Stage(context, \"phaseII\", data, value)\n                        if (!awaitReachAcensionStageResult){\n                            updateCalibrationStatusModule(context, 584);//Calibration V2: Emergency Stopped\n                            return;\n                        }\n\n                        emergencyCheckOrThrow(context, \"Phase II emergency triggered. For loop, section 2\");\n\n                        //CheckPoint Delay\n                        updateCalibrationStatusModule(context, 596);//Checkpoint Delay\n                        await delayTimeModule(context,checkpointDelay)\n\n                        emergencyCheckOrThrow(context, \"Phase II emergency triggered. For loop, section 3\");\n\n                        //Sample & Build Lookup values \n                        const phaseISampleResult = await sampleV2PhaseIIModule(context, index, checkpointPositions);\n                        if(!phaseISampleResult){\n                            updateCalibrationStatusModule(context, 584);//Calibration V2: Emergency Stopped\n                            return;\n                        }\n\n                        emergencyCheckOrThrow(context, \"Phase II emergency triggered. For loop, section 4\");\n                        for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                            console.log('END OF PHASE II SAMPLING: sensor obj');\n                            console.log(context.get(`userInputtedData.batchSensorData.${i}`));\n                        }\n                    }\n\n                    //Post Phase II Actions\n                    let postP2Result = postPhaseCalibrationV2Module(context, \"phaseII\");\n                    if(!postP2Result){\n                        updateCalibrationStatusModule(context, 584);//V2 P1: Emergency Stopped\n                        return;\n                    }\n                    break;\n            }\n        }else{\n            showPopup(['Missing calibration profile and/or sensor profile!'], 'warning', 2); \n        }\n    }catch(err){\n        if (err.name === \"AbortError\") {\n            updateCalibrationStatusModule(context, 594);\n            showPopup([`Error in getSensorPhaseISchematics: ${err.message}`], 'error', 15);\n        } else {\n            showPopup([`Error in getSensorPhaseISchematics: ${err.message}`], 'error', 15);\n        }\n        return;\n    }\n}\n\n//Phase Modules\nasync function postPhaseProceduralModule(context, phase, rigResetCMD){\n    switch(phase){\n        case \"phaseI\":\n            //ADDITIONAL CALC & DATA MODIFICATIONS\n            //Transform lookup data from array of array(size of checkpoints) to array of array(size of channels)\n            resetLog(context, phase);\n            const sensorDescription = buildSensorDescription(context);\n            console.log(\"Building buildSensorDescription sensorDescription: \" + sensorDescription)\n            context.set('userInputtedData.selectedSensorData.sensorDescription', sensorDescription);\n            context.set('userInputtedData.selectedSensorData.calibrationDate', getCurrentDateTime());\n            const specialPhaseILogText = getLookupBody(context,phase);\n            context.set('userInputtedData.selectedSensorData.phaseIDescription', specialPhaseILogText);\n            appendPhaseILog(context, specialPhaseILogText);//Special Case, add to Phase I log of a specific text form for the production people.\n\n            //Transform the phaseILookupData from array length based off of # of checkpoint to # of channels\n            const transformedLookupArrayPI = transformLookUpDataObj(context,phase); \n            context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseILookupData\"]: transformedLookupArrayPI});\n            console.log('Official final phaseILookupData');\n            console.log(context.get('calibrationData')['phaseILookupData']);\n            \n            //RESET and CLEAR\n            updateCalibrationStatusModule(context, 555); //Clear & Resetting \n            context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseISampleLookupData\"]: []}); //Clear & Resetting\n            context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseISampling\"]: false}); //Clear & Resetting\n            await outgoingMessageLibrary(context, rigResetCMD, '');\n            updateCalibrationStatusModule(context, 551); //Idle\n            showPopup(['Phase I is complete and tidied up.','Please evaluate approprivate values and determine whether to proceed to phase II'], 'success', 20);\n\n            // Silent audit POST: every Phase I attempt creates a backend row so abandoned/restarted\n            // Phase I attempts leave a trail. Stash calibrationID for the Phase II PATCH. All\n            // failures are silent (console only) so operator UX stays identical to pre-audit.\n            context.set('userInputtedData.selectedSensorData.calibrationID', null);\n            try{\n                const phaseIResponse = await sendPOSTRequest(\"calib_sensor_profile\", buildAndGetDataFormat1(context));\n                if(phaseIResponse && phaseIResponse['data'] && phaseIResponse['data']['calibrationID']){\n                    context.set('userInputtedData.selectedSensorData.calibrationID', phaseIResponse['data']['calibrationID']);\n                }else{\n                    console.warn('Silent Phase I audit POST: no calibrationID in response', phaseIResponse);\n                }\n            }catch(err){\n                console.warn('Silent Phase I audit POST failed:', err);\n            }\n            break;\n\n        case \"phaseII\":\n            //ADDITIONAL CALC & DATA MODIFICATIONS\n            //Transform the phaseIICalibrated Data from array length based off of # of checkpoint to # of channels\n            const transformedLookupArrayPII = transformLookUpDataObj(context,'phaseII'); \n            context.set(\"calibrationData.phaseIICalibrationDataValueData\",transformedLookupArrayPII);\n            console.log('Official final phaseIICalibrationDataValueData');\n            console.log(context.get('calibrationData')['phaseIICalibrationDataValueData']);\n            //As soon as after transforming the array to be based off # of channels, need to calculate and build the phaseIISlopeData and phaseIIOffsetData\n            getSlopeAndOffset(context);\n            //RESET and CLEAR\n            updateCalibrationStatusModule(context, 563); //Clear & Resetting \n            context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseIISampleCalibrationDataValueData\"]: []});\n            context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseIISampleCurrentData\"]: []});\n            context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseIICalibrationDataValueSampling\"]: false});\n            context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseIICurrentSampling\"]: false});\n            await outgoingMessageLibrary(context, rigResetCMD, '');\n            resetLog(context, phase);\n            appendPhaseIILog(context, `Calibration Current Data Value: [${context.get(\"calibrationData\")['phaseIICurrentData'].toString()}]`);\n            context.get(\"calibrationData\")['phaseIICalibrationDataValueData'].forEach((dataValueArr, index)=>{\n                appendPhaseIILog(context, `Calibration Data Value[${index + 1}]: [${dataValueArr}]`);\n            })\n\n            updateCalibrationStatusModule(context, 551); //Idle\n            showPopup(['Phase II is complete is tidied up.'], 'success', 20);\n\n            // Silent audit save: PATCH the row created at end of Phase I. If the Phase I POST\n            // silently failed (no calibrationID stashed), fall back to a fresh POST so a row\n            // still lands and the manual Save button can find it. Failures are silent — the\n            // operator-visible save path is the existing Save button on the conclusion board.\n            try{\n                const stashedCalibrationID = context.get('userInputtedData.selectedSensorData.calibrationID');\n                if(stashedCalibrationID){\n                    const calibData = context.get('calibrationData');\n                    //Only calibrationData is sent — the BE's Phase II handler ignores sensorProfileData\n                    //(rebuilds it from the DB row), so isInventory lives solely on the Phase I POST.\n                    await sendPATCHRequest(`calib_sensor_profile/${stashedCalibrationID}`, {\n                        calibrationData: {\n                            phaseIICalibratedDataArray:    calibData['phaseIICalibrationDataValueData'],\n                            phaseIICalibratedCurrentArray: calibData['phaseIICurrentData'],\n                            phaseIICalibratedSlopeArray:   calibData['phaseIISlopeData'],\n                            phaseIICalibratedOffsetArray:  calibData['phaseIIOffsetData'],\n                        }\n                    });\n                }else{\n                    const fallbackResponse = await sendPOSTRequest(\"calib_sensor_profile\", buildAndGetDataFormat1(context));\n                    if(fallbackResponse && fallbackResponse['data'] && fallbackResponse['data']['calibrationID']){\n                        context.set('userInputtedData.selectedSensorData.calibrationID', fallbackResponse['data']['calibrationID']);\n                    }\n                }\n            }catch(err){\n                console.warn('Silent Phase II audit save failed:', err);\n            }\n\n            //Display Phase II Completion Board\n            buildPhaseIIConclusionNotificationBoard(context);\n            break;\n    }\n} \nasync function postPhaseCalibrationV2Module(context, phase){\n    try{\n        const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n        switch(phase){\n            case \"phaseI\":\n                updateCalibrationStatusModule(context, 580); //V2 P1: Phase I Concluding...\n                //For each sensor in batch, transform its corresponding lookup data structure\n                const transformResponse1 = transformLookUpV2(context, \"lookupData\");\n                if(!transformResponse1){\n                    return false;\n                }\n        \n                //Optional: Clear Phase I Log\n                // resetLog(context, 'phaseI');\n        \n                /**\n                 * Add sensorDescription to sensorData in each sensor in batch\n                 * Clear sampleDataDump\n                 * Ensure isPhaseISampling is closed\n                 */\n                const sensorDescription = buildSensorDescription(context);\n                const calibrationDate = getCurrentDateTime();\n                for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                    if(batchSensorData[i] != null){\n                        const sensorObj = batchSensorData[i];\n                        let sensorData = sensorObj['sensorData'];\n                        let calibrationData = sensorObj['calibrationData'];\n                        let isSamplingData = sensorObj['isSamplingData'];\n                        sensorData['sensorDescription'] = sensorDescription;\n                        sensorData['calibrationDate'] = calibrationDate;\n                        calibrationData['sampleDataDump'] = [];\n                        isSamplingData['isPhaseISampling'] = false;\n                    }\n                }\n                context.set(\"userInputtedData.batchSensorData\", batchSensorData);\n        \n                //Move Rig back to 0\n                await outgoingMessageLibrary(context, \"stepper0\");\n                updateCalibrationStatusModule(context, 581); //V2 P1: Phase I Concluded\n        \n                //Start Phase II Loop\n                for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                    console.log('END OF PHASE I: sensor obj');\n                    console.log(context.get(`userInputtedData.batchSensorData.${i}`));\n                }\n        \n                return true;\n            case \"phaseII\":\n                updateCalibrationStatusModule(context, 572); //V2: Phase II Concluding...\n                //For each sensor in batch, transform its corresponding lookup data structure\n                const transformResponse2 = transformLookUpV2(context, \"calibrationDataData\");\n                if(!transformResponse2){\n                    return false;\n                }\n                getSlopeAndOffset(context);\n\n                //Optional: Clear Phase I Log\n                // resetLog(context, 'phaseI');\n        \n                for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                    if(batchSensorData[i] != null){\n                        const sensorObj = batchSensorData[i];\n                        let calibrationData = sensorObj['calibrationData'];\n                        let isSamplingData = sensorObj['isSamplingData'];\n                        calibrationData['sampleDataDump'] = [];\n                        calibrationData['sampleCurrentDataDump'] = [];\n                        isSamplingData['isSamplingCurrentData'] = false;\n                        isSamplingData['isSamplingCalibrationData'] = false;\n                    }\n                }\n                context.set(\"userInputtedData.batchSensorData\", batchSensorData);\n        \n                //Move Rig back to 0\n                await outgoingMessageLibrary(context, \"stepper0\");\n                updateCalibrationStatusModule(context, 573); //V2: Phase II Concluded\n        \n                //Start Phase II Loop\n                for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                    console.log('END OF PHASE II: sensor obj');\n                    console.log(context.get(`userInputtedData.batchSensorData.${i}`));\n                }\n\n                buildPhaseIIConclusionNotificationBoardV2(context);\n                return true;\n\n        }\n    }catch(err){\n        console.log(`Error in postPhase1CalibrationV2Module: ${err.message}`);\n        console.log(err.stack);\n        return false;\n    }\n} \nasync function saveAndSendPhaseIIData(context){\n    const selectedSensorData = context.get(\"userInputtedData.selectedSensorData\");\n    const calibrationID = selectedSensorData ? selectedSensorData['calibrationID'] : null;\n    if(!calibrationID){\n        showPopup(['Missing calibration ID — Phase I must be saved before Phase II can persist.'], 'error', 5);\n        return;\n    }\n    const calibrationData = context.get('calibrationData');\n    //NOTE: this PATCH only updates calibrationData. The BE's Phase II handler ignores sensorProfileData\n    //entirely (it rebuilds it from the DB row), so isInventory is NOT sent here — it is written once at\n    //the Phase I POST (buildAndGetDataFormat1) and never changes during calibration.\n    const requestData = {\n        calibrationData: {\n            phaseIICalibratedDataArray:    calibrationData['phaseIICalibrationDataValueData'],\n            phaseIICalibratedCurrentArray: calibrationData['phaseIICurrentData'],\n            phaseIICalibratedSlopeArray:   calibrationData['phaseIISlopeData'],\n            phaseIICalibratedOffsetArray:  calibrationData['phaseIIOffsetData'],\n        }\n    };\n    const response = await sendPATCHRequest(`calib_sensor_profile/${calibrationID}`, requestData);\n    if (response && response['data'] && response['data']['calibrationID'] === calibrationID){\n        showPopup([\"Sensor Profile Updated Successfully!\"],'success',3);\n        context.send('closeNotificationPopup');\n    }else{\n        showPopup([\"Sensor Profile Update Failed!\"],'error', 3);\n    }\n}\nasync function saveAndSendPhaseIIV2Data(context){\n\n    const selectedRigProfile = context.get('userInputtedData.selectedRigProfile');\n    const selectedCalibrationProfile = context.get('userInputtedData.selectedCalibrationProfile');\n    const selectedSensorData = context.get(\"userInputtedData.selectedSensorData\");\n    // console.log(selectedRigProfile);\n    // console.log(selectedCalibrationProfile);\n    // console.log(selectedSensorData);\n    // console.log(selectedAnchorData);\n    // console.log(calibrationData);\n    if(selectedRigProfile != null && selectedCalibrationProfile != null && JSON.stringify(selectedSensorData) != \"{}\"){\n        const requestArrData = buildAndGetDataFormat2(context);\n\n    for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n        let requestData = requestArrData[i - 1];\n        //send request\n        if (await sendPOSTRequest(\"calib_sensor_profile\", requestData)){\n            showPopup([`Sensor ${i} Profile Created Successfully!`],'success',3);\n            appendLiveLog(context,`Sensor ${i} Profile Created Successfully!`, \"incoming\"); \n\n        }else{\n            showPopup([\"Sensor Profile Creation Failed!\"],'error', 3);\n        };\n    };\n    // window.location.reload();\n\n    context.send('closeNotificationPopup'); \n    }\n}\nexport function buildSensorDescription(context){\n    console.log(\"Building buildSensorDescription\")\n    console.log(\"context.settingsConfig is\")\n    console.log(context.settingsConfig)\n    const calibrationObj = context.get(\"userInputtedData.selectedCalibrationProfile\");\n    try{\n        if(calibrationObj == null){\n            console.warn('buildSensorDescription: selectedCalibrationProfile is null');\n            return \"\";\n        }\n        const data = calibrationObj['data'];\n        if(data == null){\n            console.warn('buildSensorDescription: selectedCalibrationProfile.data is null', calibrationObj);\n            return \"\";\n        }\n        const type = data['type'];\n        if(typeof type !== 'string' || type.length === 0){\n            console.warn('buildSensorDescription: data.type is missing or not a string', data);\n            return \"\";\n        }\n        const channels = (data['channels'] || 0) - 1; // -1 to disregard the temperature channel\n\n        switch(type){\n            case context.settingsConfig.APPROVEDINSTRUMENTTYPES.dMPBX.typeValue:\n            case context.settingsConfig.APPROVEDINSTRUMENTTYPES.dRebar.typeValue:\n            case context.settingsConfig.APPROVEDINSTRUMENTTYPES.dCable.typeValue:\n            case context.settingsConfig.APPROVEDINSTRUMENTTYPES.dExto.typeValue:\n                return type.slice(0, 1) + channels + type.slice(1).toUpperCase();\n            default:\n                return type.slice(0, 1) + type.slice(1).toUpperCase();\n        }\n    }catch (err){\n        console.warn(`buildSensorDescription threw: ${err.message}`, err.stack);\n        return \"\";\n    }\n}\nexport function getSlopeAndOffset(context){\n    if(context.get(\"settingsConfig.internalVersion\") === \"v1.0\"){\n        const calibrationData = context.get(\"calibrationData\");\n        const calibratedData = calibrationData['phaseIICalibrationDataValueData'];\n        const currentData = calibrationData['phaseIICurrentData'];\n        let slopeArr = [];\n        let offsetArr = [];\n        // console.log('calibratedData')\n        // console.log(calibratedData)\n    \n        calibratedData.forEach((calibratedDataArr, index)=>{\n            const result = linearRegression(currentData, calibratedDataArr);\n            // console.log('result')\n            // console.log(result)\n            slopeArr.push(roundToDecimalPlaces(result['slope'], 4));\n            offsetArr.push(roundToDecimalPlaces(result['offset'], 4));\n        });\n    \n        context.set('calibrationData.phaseIISlopeData', slopeArr);\n        context.set('calibrationData.phaseIIOffsetData', offsetArr);\n\n    }else if(context.get(\"settingsConfig.internalVersion\") === \"v2.0\"){\n        const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n        for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n            if(batchSensorData[i] != null){\n                const sensorObj = batchSensorData[i];\n                let calibrationData = sensorObj[\"calibrationData\"];\n                let calibrationDataData = calibrationData[\"calibrationDataData\"];\n                let currentData = calibrationData[\"currentData\"];\n                let slopeArr = [];\n                let offsetArr = [];\n    \n                calibrationDataData.forEach((calibratedDataArr, index)=>{\n                    const result = linearRegression(currentData, calibratedDataArr);\n                    slopeArr.push(roundToDecimalPlaces(result['slope'], 4));\n                    offsetArr.push(roundToDecimalPlaces(result['offset'], 4));\n                });\n                calibrationData[\"slopeData\"] = slopeArr;\n                calibrationData[\"offsetData\"] = offsetArr;\n            }\n        }\n        context.set(\"userInputtedData.batchSensorData\", batchSensorData);\n        \n    }\n}\nfunction getLookupBody(context, phase){\n    const sensorObj = context.get(\"userInputtedData.selectedSensorData\");\n    const calibrationObj = context.get(\"userInputtedData.selectedCalibrationProfile\");\n    try{\n        if(sensorObj != null && calibrationObj != null){\n            const data = calibrationObj['data'];\n            const checkPointPositions = data['checkpointPositions'];\n            const channels = data['channels'] - 1;//-1 to disregard the temperature channel\n            const sensorID = sensorObj['sensorID'];\n            const sensorDescription = sensorObj['sensorDescription'];\n            const jobID = sensorObj['jobID'];\n            const sensorTypeNumber = sensorID.slice(-5, -3)\n\n            let lookupBodyStructure = `const char Sensor_ID[11]=\"${sensorID},\";\\nconst char Sensor_Type[5]=\"${sensorTypeNumber},;\";\\nconst char Sensor_Desc[12]=\"${sensorDescription},\";\\n// JOB# ${jobID}\\n// Calibration coeff's are temp compensated periods\\n// Cal coeff stored in ROM\\n`;\n            const transformedLookupArray = transformLookUpDataObj(context,phase).map(subArray => `{${subArray.join(',')}}`);\n\n            for(let i=1;i<=channels;i++){\n                lookupBodyStructure += `unsigned int cal_${i}[${checkPointPositions.length }]= ${transformedLookupArray[i-1]};\\n`;\n            }\n            return lookupBodyStructure;\n        }\n    }catch (err){\n        console.log(`Error in getLookupStructure: ${err.message}`);\n        console.log(err.stack);\n    }\n}\nasync function awaitUntilCheckPointPositionReachedAcensionStage(context, phaseType,calibProfileData, target){\n    const currentPointComponent = document.getElementById(\"currentPoint\");\n    const type = calibProfileData['type'];\n    const AWAIT_FLEXIBILITY= calibProfileData['checkpointCurrentTargetBuffer'];\n    let timeoutCounter = 0;\n    try{\n        if(currentPointComponent != null){\n            let current = Number.parseFloat(currentPointComponent.textContent);\n            const upperBufferTargetLimit = Number.parseFloat(target + AWAIT_FLEXIBILITY);\n            // const lowerBufferTargetLimit = target - AWAIT_FLEXIBILITY;\n            while (true){\n                emergencyCheckOrThrow(context,`Emergency triggered at awaitUntilCheckPointPositionReachedAcensionStage for phase: ${phaseType}`);\n\n                if(timeoutCounter % 15 == 0){\n                    if(phaseType == 'phaseI'){\n                        appendPhaseILog(context,`Waiting to reach target...${timeoutCounter}/${context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')}`);\n                    }else{\n                        appendPhaseIILog(context,`Waiting to reach target...${timeoutCounter}/${context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')}`);\n                    }\n                }\n                // console.log(`current:${current}, upperBufferTargetLimit:${upperBufferTargetLimit}`);\n                if(areNumbersEqual(current, upperBufferTargetLimit)){\n                    console.log(`reached to target, will exit and continue code`);\n                    if(phaseType == 'phaseI'){\n                        appendPhaseILog(context,`Reached accepted threshold:${upperBufferTargetLimit}`);\n                    }else{\n                        appendPhaseIILog(context,`Reached accepted threshold:${upperBufferTargetLimit}`);\n                    }\n                    return true;\n                }\n                else if(timeoutCounter > context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')){\n                    console.log(`Acension TIMEOUT`);\n                    throw new Error(\"In awaitUntilCheckPointPositionReachedAcensionStage: Exceed MAX_TIMEOUT_AWAITING_SAMPLING, ABORT\");\n                }\n                await delayTimeModule(context, 0.2);\n                timeoutCounter += 1;\n                current = Number.parseFloat(currentPointComponent.textContent);\n            }\n        }\n\n    }catch(err){\n        if (err.name === \"AbortError\") {\n            showPopup([`${err.message}`], 'error', 15);\n        } else {\n            updateCalibrationStatusModule(context, 550);\n            showPopup([`${err.message}`], 'error', 15);\n        }\n        return false;\n    }\n}\nasync function awaitUntilCheckPointPositionReachedAcensionV2Stage(context,phaseType, calibProfileData, target){\n    const currentPointComponent = document.getElementById(\"currentPoint\");\n    const AWAIT_FLEXIBILITY= calibProfileData['checkpointCurrentTargetBuffer'];\n    let timeoutCounter = 0;\n    try{\n        if(currentPointComponent != null){\n            let current = Number.parseFloat(currentPointComponent.textContent);\n            const upperBufferTargetLimit = Number.parseFloat(target + AWAIT_FLEXIBILITY);\n            while (true){\n                emergencyCheckOrThrow(context,`Emergency triggered at awaitUntilCheckPointPositionReachedAcensionV2Stage for calibration V2`);\n\n                if(timeoutCounter % 15 == 0){                \n                    if(phaseType == 'phaseI'){\n                        appendPhaseILog(context,`Waiting to reach target...${timeoutCounter}/${context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')}`);\n                    }else{\n                        appendPhaseIILog(context,`Waiting to reach target...${timeoutCounter}/${context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')}`);\n                    }\n                }\n                // console.log(`waiting is awaitUntilCheckPointPositionReachedAcensionV2Stage... ${current}/${upperBufferTargetLimit}`);\n\n                if(areNumbersEqual(current, upperBufferTargetLimit)){\n                    console.log(`reached to target, will exit and continue code`);\n                    if(phaseType == 'phaseI'){\n                        appendPhaseILog(context,`Reached accepted threshold:${upperBufferTargetLimit}`);\n                    }else{\n                        appendPhaseIILog(context,`Reached accepted threshold:${upperBufferTargetLimit}`);\n                    }\n                    return true;\n                }\n                else if(timeoutCounter > context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')){\n                    console.log(`Acension TIMEOUT`);\n                    throw new Error(\"In awaitUntilCheckPointPositionReachedAcensionV2Stage: Exceed MAX_TIMEOUT_AWAITING_SAMPLING, ABORT\");\n                }\n                timeoutCounter += 1;\n                current = Number.parseFloat(currentPointComponent.textContent);\n                await delayTimeModule(context, 0.5);\n            }\n        }\n\n    }catch(err){\n        if (err.name === \"AbortError\") {\n            showPopup([`${err.message}`], 'error', 15);\n        } else {\n            updateCalibrationStatusModule(context, 550);\n            showPopup([`${err.message}`], 'error', 15);\n        }\n        return false;\n    }\n}\nexport function updateCalibrationStatusModule(context, statusCode){\n    context.set(\"dashboardStatusBarData.calibration\",calibrationStatusLibrary(statusCode));\n}\nasync function setTargetModule(context, quantity){\n    await outgoingMessageLibrary(context, \"setTarget\", quantity);\n}\nasync function setRigUnit(context, type, phase){\n    let unitID = 0;\n    let message = \"\";\n    switch(type){\n        case context.settingsConfig.APPROVEDINSTRUMENTTYPES.dMicro.typeValue:\n            unitID = 1;\n            message = `Updated Rig Unit for dMicro`;\n            break;\n\n        default:\n            unitID = 0;\n            message = `Updated Rig Unit for default`;\n            break;\n    }\n    if(phase === \"phaseI\"){\n        appendPhaseILog(context,message);\n    }else{\n        appendPhaseIILog(context,message);\n    }\n    await outgoingMessageLibrary(context, \"setRigUnit\", unitID);\n}\nasync function phaseISampleModule(context, checkpointPositionIndex, checkpointPositionArray){\n    const checkpointPositionValue = checkpointPositionIndex + 1;\n    //Turn on Sampling\n    context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseISampling\"]: true});\n    let timeoutCounter = 0;\n    try{\n        while (true){\n            emergencyCheckOrThrow(context,`Emergency triggered at phaseISampleModule`);\n    \n            if(timeoutCounter % 20 == 0){\n                appendPhaseILog(context,`Waiting on Lookup & Current sampling. Current checkpoint position:${checkpointPositionValue}/${checkpointPositionArray.length}. Waiting...${timeoutCounter}/${context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')}`);\n            }\n            if(!context.get(\"calibrationIsSamplingData\")[\"isPhaseISampling\"]){\n                return true;\n            }else if (timeoutCounter > context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')){\n                throw new Error(\"In phaseISampleModule: Exceed MAX_TIMEOUT_AWAITING_SAMPLING, ABORTING phase I\");\n            }\n            timeoutCounter+= 1;\n            await delayTimeModule(context, 0.5);\n        }\n        \n    }catch(err){\n\n        if (err.name === \"AbortError\") {\n            showPopup([`${err.message}`], 'error', 15);\n        } else {\n            updateCalibrationStatusModule(context, 550);\n            showPopup([`${err.message}`], 'error', 15);\n        }\n        context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseISampling\"]: false});\n        return false;\n    }\n}\nasync function phaseIISampleModule(context, checkpointPositionIndex, checkpointPositionArray){\n    const checkpointPositionValue = checkpointPositionIndex + 1;\n    //Turn on Sampling\n    context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseIICalibrationDataValueSampling\"]: true});\n    context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseIICurrentSampling\"]: true});\n    let timeoutCounter = 0;\n    try{\n        while (true){                        \n            emergencyCheckOrThrow(context,`Emergency triggered at phaseIISampleModule`);\n            \n            if(timeoutCounter % 20 == 0){\n                appendPhaseIILog(context,`Waiting on Lookup & Current sampling. Current checkpoint position:${checkpointPositionValue}/${checkpointPositionArray.length}. Waiting...${timeoutCounter}/${context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')}`);\n            }\n    \n            if(!context.get(\"calibrationIsSamplingData\")[\"isPhaseIICalibrationDataValueSampling\"] && !context.get(\"calibrationIsSamplingData\")[\"isPhaseIICurrentSampling\"]){\n                return true;\n            }else if (timeoutCounter > context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')){\n                throw new Error(\"In phaseIISampleModule: Exceed MAX_TIMEOUT_AWAITING_SAMPLING, ABORTING phase II\");\n            }\n            timeoutCounter+= 1;\n            await delayTimeModule(context, 0.25);\n        }\n\n    }catch(err){\n        if (err.name === \"AbortError\") {\n            showPopup([`${err.message}`], 'error', 15);\n        } else {\n            updateCalibrationStatusModule(context, 550);\n            showPopup([`Error in phaseIISampleModule: ${err.message}`], 'error', 15);\n        }\n        context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseIICalibrationDataValueSampling\"]: false});\n        context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseIICurrentSampling\"]: false});\n        return false;\n    }\n}\nasync function sampleV2PhaseIModule(context, checkpointPositionIndex, checkpointPositionArray){\n    const checkpointPositionValue = checkpointPositionIndex + 1;\n    //Turn on Sampling\n    for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n        let sensorObj = context.get(`userInputtedData.batchSensorData.${i}`);\n        if( sensorObj != null){\n            context.set(`userInputtedData.batchSensorData.${i}.isSamplingData`,{...context.get(`userInputtedData.batchSensorData.${i}.isSamplingData`), [\"isPhaseISampling\"]: true});\n            appendPhaseILog(context, `Batch Sensor ${i}: Sampling`);\n        }\n    }\n    //Wait for each sensor has sampled to desired amount\n    let timeoutCounter = 0;\n    try{\n        while (true){\n            emergencyCheckOrThrow(context,`Emergency triggered at sampleV2PhaseIModule`);\n            if(timeoutCounter % 15 == 0){\n                appendPhaseILog(context,`Waiting on Lookup & Current sampling. Current checkpoint position:${checkpointPositionValue}/${checkpointPositionArray.length}. Waiting...${timeoutCounter}/${context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')}`);\n            }\n            //Core checking area, Checking all instrument sampling should be done within a specific TIMEOUT constant\n            const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n            let doneSamplingCount = 0;\n            for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                if(batchSensorData[i] != null){\n                    const sensorObj = batchSensorData[i];\n                    let sensorIsSamplingData = sensorObj[\"isSamplingData\"];\n                    if(!sensorIsSamplingData[\"isPhaseISampling\"]){\n                        doneSamplingCount += 1;\n                    }\n                }\n            }\n            // console.log(`waiting is isPhaseISampling... ${doneSamplingCount}/${context.get(\"settingsConfig.BATCH_SENSORS_COUNT\")}`);\n\n            if(doneSamplingCount == context.get(\"settingsConfig.BATCH_SENSORS_COUNT\")){\n                appendPhaseILog(context, `All Batch Sensor: Done sampling`);\n                return true;\n            }\n            else if (timeoutCounter > context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')){\n                appendPhaseILog(context, `All or some batch sensors failed sampling stage`);\n                throw new Error(\"In sampleV2PhaseIModule: Exceed MAX_TIMEOUT_AWAITING_SAMPLING, ABORTING phase I\");\n            }\n            timeoutCounter+= 1;\n            await delayTimeModule(context, 0.5);\n        }\n        \n    }catch(err){\n\n        if (err.name === \"AbortError\") {\n            showPopup([`${err.message}`], 'error', 15);\n        } else {\n            updateCalibrationStatusModule(context, 550);\n            showPopup([`${err.message}`], 'error', 15);\n        }\n        for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n            let sensorObj = context.get(`userInputtedData.batchSensorData.${i}`);\n            if( sensorObj != null){\n                context.set(`userInputtedData.batchSensorData.${i}.isSamplingData`,{...context.get(`userInputtedData.batchSensorData.${i}.isSamplingData`), [\"isPhaseISampling\"]: false});\n            }\n        }\n        return false;\n    }\n}\nasync function sampleV2PhaseIIModule(context, checkpointPositionIndex, checkpointPositionArray){\n    const checkpointPositionValue = checkpointPositionIndex + 1;\n    //Turn on Sampling\n    /**\n     * \n        isSamplingCurrentData:false, \n        isSamplingCalibrationData:false\n     */\n    for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n        let sensorObj = context.get(`userInputtedData.batchSensorData.${i}`);\n        if( sensorObj != null){\n            context.set(`userInputtedData.batchSensorData.${i}.isSamplingData`,{...context.get(`userInputtedData.batchSensorData.${i}.isSamplingData`), [\"isSamplingCurrentData\"]: true});\n            context.set(`userInputtedData.batchSensorData.${i}.isSamplingData`,{...context.get(`userInputtedData.batchSensorData.${i}.isSamplingData`), [\"isSamplingCalibrationData\"]: true});\n            appendPhaseIILog(context, `Batch Sensor ${i}: Sampling`);\n        }\n    }\n    //Wait for each sensor has sampled to desired amount\n    let timeoutCounter = 0;\n    try{\n        while (true){\n            emergencyCheckOrThrow(context,`Emergency triggered at sampleV2PhaseIModule`);\n            if(timeoutCounter % 15 == 0){\n                appendPhaseIILog(context,`Waiting on Lookup & Current sampling. Current checkpoint position:${checkpointPositionValue}/${checkpointPositionArray.length}. Waiting...${timeoutCounter}/${context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')}`);\n            }\n            //Core checking area, Checking all instrument sampling should be done within a specific TIMEOUT constant\n            const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n            let doneCurrentSamplingCount = 0;\n            let doneCalibrationDataSamplingCount = 0;\n            for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                if(batchSensorData[i] != null){\n                    const sensorObj = batchSensorData[i];\n                    let sensorIsSamplingData = sensorObj[\"isSamplingData\"];\n                    if(!sensorIsSamplingData[\"isSamplingCurrentData\"]){\n                        doneCurrentSamplingCount += 1;\n                    }\n                    if(!sensorIsSamplingData[\"isSamplingCalibrationData\"]){\n                        doneCalibrationDataSamplingCount += 1;\n                    }\n                }\n            }\n            // console.log(`waiting is isPhaseISampling...Current: ${doneCurrentSamplingCount}/${context.get(\"settingsConfig.BATCH_SENSORS_COUNT\")} Calibration Data: ${doneCalibrationDataSamplingCount}/${context.get(\"settingsConfig.BATCH_SENSORS_COUNT\")}`);\n\n            if(doneCurrentSamplingCount == context.get(\"settingsConfig.BATCH_SENSORS_COUNT\") && \n            doneCalibrationDataSamplingCount == context.get(\"settingsConfig.BATCH_SENSORS_COUNT\")){\n                appendPhaseIILog(context, `All Batch Sensor: Done sampling`);\n                return true;\n            }\n            else if (timeoutCounter > context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')){\n                appendPhaseIILog(context, `All or some batch sensors failed sampling stage`);\n                throw new Error(\"In sampleV2PhaseIModule: Exceed MAX_TIMEOUT_AWAITING_SAMPLING, ABORTING phase I\");\n            }\n            timeoutCounter+= 1;\n            await delayTimeModule(context, 0.5);\n        }\n        \n    }catch(err){\n\n        if (err.name === \"AbortError\") {\n            showPopup([`${err.message}`], 'error', 15);\n        } else {\n            updateCalibrationStatusModule(context, 550);\n            showPopup([`${err.message}`], 'error', 15);\n        }\n        for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n            let sensorObj = context.get(`userInputtedData.batchSensorData.${i}`);\n            if( sensorObj != null){\n                context.set(`userInputtedData.batchSensorData.${i}.isSamplingData`,{...context.get(`userInputtedData.batchSensorData.${i}.isSamplingData`), [\"isPhaseISampling\"]: false});\n            }\n        }\n        return false;\n    }\n}\nfunction calculateAveragePhaseIModule(context, sensorData){\n    /**\n     * NOTE: ONLY call this function if isPhaseISampling is true\n    */\n    const calibProfile = context.get(\"userInputtedData.selectedCalibrationProfile\");\n    try{\n        if(calibProfile){\n            /***\n             * // first three values from sensor data: \n             * 241171999,71,25.0,19.67,19.60,19.41,19.41,19.01,19.83 -> 19.67,19.60,19.41,19.41,19.01,19.83\n             */\n            const trimmedSensorData = sensorData.slice(3); \n\n            // appendPhaseILog(context,`parsed data::::${trimmedSensorData.toString()}`);\n            const data = calibProfile['data']; \n            const checkpointSampleSize = data['checkpointSampleSize'];\n            if(context.get(\"calibrationData\")[\"phaseISampleLookupData\"].length != checkpointSampleSize){\n                updateCalibrationStatusModule(context, 553); //Sampling Status\n                const updatedSampleArr = context.get(\"calibrationData\")['phaseISampleLookupData'];\n                updatedSampleArr.push(trimmedSensorData)\n                context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseISampleLookupData\"]: updatedSampleArr});\n            }else{\n                updateCalibrationStatusModule(context, 554); //Adding & Averaging Status\n                console.log('phaseISampleLookupData');\n                console.log(context.get(\"calibrationData\")['phaseISampleLookupData']);\n                let lookupValues = [];\n                const result = new Array(context.get(\"calibrationData\")['phaseISampleLookupData'][0].length).fill(0); // Initialize result array with zeros\n\n                context.get(\"calibrationData\")['phaseISampleLookupData'].forEach(subArray => {\n                    subArray.forEach((value, index) => {\n                        result[index] += value; // Add values at the same index\n                    });\n                });\n\n                result.forEach((value, index)=>{\n                    index += 1;\n                    lookupValues.push(roundToDecimalPlaces(value/checkpointSampleSize, 0));\n                })\n                //Lookup Array Object is \n                context.get(\"calibrationData\")[\"phaseILookupData\"].push(lookupValues);\n                appendPhaseILog(context,`Averaged Lookup Value:${lookupValues}`);\n                //Reset & Stop sampling, move on\n                context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseISampleLookupData\"]: []});\n                context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseISampling\"]: false});\n                \n            }\n        }\n    }catch(err){\n        console.log(`Error in calculateAveragePhaseIModule: ${err.message}`);\n        console.log(err.stack);\n        context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseISampling\"]: false});\n\n    }\n}\nfunction calculateAveragePhaseIV2Module(context, batchSensorPosition, sensorData){\n    /**\n     * NOTE: ONLY call this function if isPhaseISampling is true\n    */\n    const calibProfile = context.get(\"userInputtedData.selectedCalibrationProfile\");\n\n    try{\n        if(calibProfile){\n            /***\n             * // first three values from sensor data: \n             * 241171999,71,25.0,19.67,19.60,19.41,19.41,19.01,19.83 -> 19.67,19.60,19.41,19.41,19.01,19.83\n             */\n            const trimmedSensorData = sensorData.slice(3); \n\n            // appendPhaseILog(context,`parsed data::::${trimmedSensorData.toString()}`);\n            const data = calibProfile['data']; \n            const checkpointSampleSize = data['checkpointSampleSize'];\n            if(context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleDataDump`).length != checkpointSampleSize){\n                // console.log(`sample progress:${context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleDataDump`).length}/${checkpointSampleSize}`);\n\n                updateCalibrationStatusModule(context, 587); //V2 P1: Sampling\n                const updatedSampleArr = context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleDataDump`);\n                updatedSampleArr.push(trimmedSensorData)\n                context.set(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData`,{...context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData`), [\"sampleDataDump\"]: updatedSampleArr});\n            }else{\n                console.log(`Done sampling, averaging lookup data...`);\n\n                updateCalibrationStatusModule(context, 586); //V2 P1: Averaging Buffer\n                let lookupValues = [];\n                const result = new Array(context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleDataDump`)[0].length).fill(0); // Initialize result array with zeros\n\n                context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleDataDump`).forEach(subArray => {\n                    subArray.forEach((value, index) => {\n                        result[index] += value; // Add values at the same index\n                    });\n                });\n\n                result.forEach((value, index)=>{\n                    index += 1;\n                    lookupValues.push(roundToDecimalPlaces(value/checkpointSampleSize, 0));\n                })\n                //Lookup Array Object\n                // context.get(\"calibrationData\")[\"phaseILookupData\"].push(lookupValues);\n                context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.lookupData`).push(lookupValues);\n                // freshSensorObj[\"calibrationData\"][\"lookupData\"].push(lookupValues);\n                appendPhaseILog(context,`Averaged Lookup Value:${lookupValues}`);\n\n                context.set(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData`,{...context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData`), [\"sampleDataDump\"]: []});\n                context.set(`userInputtedData.batchSensorData.${batchSensorPosition}.isSamplingData`,{...context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.isSamplingData`), [\"isPhaseISampling\"]: false});\n\n                // console.log(`Done sampling & averaging. lookup data`);\n                // console.log(context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.lookupData`));\n\n            }\n        }\n    }catch(err){\n        console.log(`Error in calculateAveragePhaseIV2Module: ${err.message}`);\n        console.log(err.stack);\n        context.set(`userInputtedData.batchSensorData.${batchSensorPosition}.isSamplingData`,{...context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.isSamplingData`), [\"isPhaseISampling\"]: false});\n    }\n}\nfunction calculateAverageCalibrationDataPhaseIIModule(context, sensorData){\n    /**\n     * NOTE: ONLY call this function if isPhaseIICalibrationDataValueSampling is true\n     * The idea of this helper function is to do handle two important arrays in calibrationData: phaseIICurrentData & phaseIICalibrationDataValueData\n     * There will be two places in incomingMessageLibrary() where it calls, this. When the case is \"sensorData\" and \"current\".\n     * The idea for both are the same, essentially, keep adding into a buffer called \"phaseIISampleCalibrationDataValueData\" and \"phaseIISampleCurrentData\" until it meets limit of \"checkpointSampleSize\"\n     * When it does meets(the length of the buffer == checkpointSampleSize), then it progressively adds each value in the array, and then averages. This might seems simple, but below is a break down.\n     * buffer(regardless phaseIISampleCalibrationDataValueData or phaseIISampleCurrentData) = [[x1,x2,x3,x4,x5],[y1,y2,y3,y4,y5],[z1,z2,z3,z4,z5]], \n     * then jump into else{} and do the averaging:\n     * final array of averaged values: [(x1+y1+z1)/checkpointSampleSize, (x2+y2+z2)/checkpointSampleSize, (x3+y3+z3)/checkpointSampleSize]\n     * \n     * There are some minor differences. The final array for lookup, will be [[],[],[]] format and for current values will be [c1,c2,c3], assuming the checkpointSampleSize is 3. That being said, the\n     * respective array size should all be the same. \n     * \n     * Finally when the array for both are the same, then we can end this calculation & averaging step, clear the buffer and set the isPhaseIICalibrationDataValueSampling false\n    */\n    const calibProfile = context.get(\"userInputtedData.selectedCalibrationProfile\");\n    try{\n        if(calibProfile && sensorData != null){\n            /***\n             * // first three values from sensor data: \n             * 241171999,71,25.0,19.67,19.60,19.41,19.41,19.01,19.83 -> 19.67,19.60,19.41,19.41,19.01,19.83\n             */\n\n            // appendPhaseILog(context,`parsed data::::${trimmedSensorData.toString()}`);\n            const data = calibProfile['data']; \n            const checkpointSampleSize = data['checkpointSampleSize'];\n            if(context.get(\"calibrationData\")[\"phaseIISampleCalibrationDataValueData\"].length != checkpointSampleSize){\n                updateCalibrationStatusModule(context, 561); //Sampling Status\n                const updatedSampleArr = context.get(\"calibrationData\")['phaseIISampleCalibrationDataValueData'];\n                updatedSampleArr.push(sensorData.slice(3))\n                context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseIISampleCalibrationDataValueData\"]: updatedSampleArr});\n                // console.log(`calibrationData phaseIISampleCalibrationDataValueData::::${context.get(\"calibrationData\")[\"phaseIISampleCalibrationDataValueData\"].toString()}`);\n            }else{\n                updateCalibrationStatusModule(context, 562); //Adding & Averaging Status\n                let calibratedDataValues = [];\n                const result = new Array(context.get(\"calibrationData\")['phaseIISampleCalibrationDataValueData'][0].length).fill(0); // Initialize result array with zeros\n\n                context.get(\"calibrationData\")['phaseIISampleCalibrationDataValueData'].forEach(subArray => {\n                    subArray.forEach((value, index) => {\n                        result[index] += value; // Add values at the same index\n                    });\n                });\n                result.forEach((value, index)=>{\n                    index += 1;\n                    calibratedDataValues.push(roundToDecimalPlaces(value/checkpointSampleSize, 2));\n                })\n                //Lookup Array Object is \n                context.get(\"calibrationData\")[\"phaseIICalibrationDataValueData\"].push(calibratedDataValues);\n                // console.log(`phaseIISampleCalibrationDataValueData:`);\n                // console.log(context.get(\"calibrationData\")[\"phaseIISampleCalibrationDataValueData\"]);\n                // console.log(`phaseIICalibrationDataValueData:`);\n                // console.log(context.get(\"calibrationData\")[\"phaseIICalibrationDataValueData\"]);\n                appendPhaseIILog(context,`Averaged Calibrated Data Value:${calibratedDataValues}`);  \n                context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseIISampleCalibrationDataValueData\"]: []});  \n                context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseIICalibrationDataValueSampling\"]: false});         \n            }\n            \n        }\n    }catch(err){\n        console.log(`Error in calculateAverageCalibrationDataPhaseIIModule: ${err.message}`);\n        console.log(err.stack);\n        context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseIICalibrationDataValueSampling\"]: false});     \n\n    }\n\n}\nfunction calculateAverageCurrentPhaseIIModule(context, currentData){\n    /**\n     * NOTE: ONLY call this function if isPhaseIICurrentSampling is true\n     * The idea of this helper function is to do handle two important arrays in calibrationData: phaseIICurrentData & phaseIICalibrationDataValueData\n     * There will be two places in incomingMessageLibrary() where it calls, this. When the case is \"sensorData\" and \"current\".\n     * The idea for both are the same, essentially, keep adding into a buffer called \"phaseIISampleCalibrationDataValueData\" and \"phaseIISampleCurrentData\" until it meets limit of \"checkpointSampleSize\"\n     * When it does meets(the length of the buffer == checkpointSampleSize), then it progressively adds each value in the array, and then averages. This might seems simple, but below is a break down.\n     * buffer(regardless phaseIISampleCalibrationDataValueData or phaseIISampleCurrentData) = [[x1,x2,x3,x4,x5],[y1,y2,y3,y4,y5],[z1,z2,z3,z4,z5]], \n     * then jump into else{} and do the averaging:\n     * final array of averaged values: [(x1+y1+z1)/checkpointSampleSize, (x2+y2+z2)/checkpointSampleSize, (x3+y3+z3)/checkpointSampleSize]\n     * \n     * There are some minor differences. The final array for lookup, will be [[],[],[]] format and for current values will be [c1,c2,c3], assuming the checkpointSampleSize is 3. That being said, the\n     * respective array size should all be the same. \n     * \n     * Finally when the array for both are the same, then we can end this calculation & averaging step, clear the buffer and set the isPhaseIICurrentSampling false\n    */\n    const calibProfile = context.get(\"userInputtedData.selectedCalibrationProfile\");\n    try{\n        if(calibProfile && currentData != null){\n            \n            const data = calibProfile['data']; \n            const checkpointSampleSize = data['checkpointSampleSize'];\n            if(context.get(\"calibrationData\")[\"phaseIISampleCurrentData\"].length != checkpointSampleSize){\n                updateCalibrationStatusModule(context, 561); //Sampling Status\n                const updatedCurrArr = context.get(\"calibrationData\")['phaseIISampleCurrentData'];\n                updatedCurrArr.push(Number.parseFloat(currentData))\n                context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseIISampleCurrentData\"]: updatedCurrArr});\n                // console.log(`calibrationData phaseIISampleCurrentData::::${context.get(\"calibrationData\")[\"phaseIISampleCurrentData\"].toString()}`);\n            }\n            else{\n                updateCalibrationStatusModule(context, 562); //Adding & Averaging Status\n                let finalValue = 0;\n\n                //sample phaseIISampleCurrentData [21.93, 24.47, 30.55, 27.44, 28.91, 29.54]\n                context.get(\"calibrationData\")['phaseIISampleCurrentData'].forEach(sampleValue => { \n                    finalValue += sampleValue;\n                });\n                finalValue = (finalValue/checkpointSampleSize);\n                finalValue = roundToDecimalPlaces(finalValue, 2);\n                //Final Current Value Added \n                context.get(\"calibrationData\")[\"phaseIICurrentData\"].push(finalValue);\n                // console.log(`phaseIISampleCurrentData:`);\n                // console.log(context.get(\"calibrationData\")[\"phaseIISampleCurrentData\"]);\n                // console.log(`phaseIICurrentData:`);\n                // console.log(context.get(\"calibrationData\")[\"phaseIICurrentData\"]);\n                appendPhaseIILog(context,`Averaged Current Value:${finalValue}`);\n                //Reset Buffer and stop lookup sampling\n                context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseIISampleCurrentData\"]: []});\n                context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseIICurrentSampling\"]: false});\n            }\n            \n        }\n    }catch(err){\n        console.log(`Error in calculateAveragePhaseIIModule: ${err.message}`);\n        console.log(err.stack);\n        context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseIICurrentSampling\"]: false});\n\n    }\n}\nfunction calculateAverageCalibrationDataPhaseIIV2Module(context, batchSensorPosition, sensorData){\n    /**\n     * NOTE: ONLY call this function if isPhaseISampling is true\n    */\n    const calibProfile = context.get(\"userInputtedData.selectedCalibrationProfile\");\n\n    try{\n        if(calibProfile){\n            const trimmedSensorData = sensorData.slice(3); \n\n            // appendPhaseILog(context,`parsed data::::${trimmedSensorData.toString()}`);\n            const data = calibProfile['data']; \n            const checkpointSampleSize = data['checkpointSampleSize'];\n            if(context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleDataDump`).length != checkpointSampleSize){\n                // console.log(`sample progress calib. data:${context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleDataDump`).length}/${checkpointSampleSize}`);\n\n                updateCalibrationStatusModule(context, 577); //V2 P2: Sampling Calib. Data\n                const updatedSampleArr = context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleDataDump`);\n                updatedSampleArr.push(trimmedSensorData)\n                context.set(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData`,{...context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData`), [\"sampleDataDump\"]: updatedSampleArr});\n            }else{\n                console.log(`Done sampling, averaging calibration data...`);\n\n                updateCalibrationStatusModule(context, 576); //V2 P2: Averaging Calib. Data\n                let calibDataValues = [];\n                const result = new Array(context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleDataDump`)[0].length).fill(0); // Initialize result array with zeros\n                console.log(context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleDataDump`));\n\n                context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleDataDump`).forEach((calibDataSubArray) => {\n                    calibDataSubArray.forEach((value, index) => {\n                        result[index] += value; // Add values at the same index\n                    });\n                });\n\n                result.forEach((value, index)=>{\n                    index += 1;\n                    calibDataValues.push(roundToDecimalPlaces(value/checkpointSampleSize, 0));\n                })\n                //Calib Data Array Object\n                context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.calibrationDataData`).push(calibDataValues);\n                appendPhaseIILog(context,`Averaged Calib. Data Values:${calibDataValues}`);\n                //Reset\n                context.set(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData`,{...context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData`), [\"sampleDataDump\"]: []});\n                context.set(`userInputtedData.batchSensorData.${batchSensorPosition}.isSamplingData`,{...context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.isSamplingData`), [\"isSamplingCalibrationData\"]: false});\n                \n                // console.log(`Done sampling & averaging. current data`);\n                // console.log(context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.calibrationDataData`));\n\n            }\n        }\n    }catch(err){\n        console.log(`Error in calculateAverageCalibrationDataPhaseIIV2Module: ${err.message}`);\n        console.log(err.stack);\n        context.set(`userInputtedData.batchSensorData.${batchSensorPosition}.isSamplingData`,{...context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.isSamplingData`), [\"isSamplingCalibrationData\"]: false});\n    }\n}\nfunction calculateAverageCurrentPhaseIIV2Module(context, batchSensorPosition, sensorData){\n\n    const calibProfile = context.get(\"userInputtedData.selectedCalibrationProfile\");\n\n    try{\n        if(calibProfile){\n            // appendPhaseILog(context,`parsed data::::${sensorData.toString()}`);\n            const data = calibProfile['data']; \n            const checkpointSampleSize = data['checkpointSampleSize'];\n            if(context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleCurrentDataDump`).length != checkpointSampleSize){\n                // console.log(`sample progress current data:${context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleCurrentDataDump`).length}/${checkpointSampleSize}`);\n\n                updateCalibrationStatusModule(context, 575); //V2 P2: Sampling Current Data\n                const updatedSampleArr = context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleCurrentDataDump`);\n                updatedSampleArr.push(sensorData)\n                context.set(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData`,{...context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData`), [\"sampleCurrentDataDump\"]: updatedSampleArr});\n            }\n            else{\n                console.log(`Done sampling, averaging current data...`);\n                console.log(context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleCurrentDataDump`));\n\n                updateCalibrationStatusModule(context, 574); //V2 P2: Averaging Current Data\n\n                let finalValue = 0;\n                context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.sampleCurrentDataDump`).forEach(sampleValue => { \n                    finalValue += Number.parseFloat(sampleValue);\n                });\n                finalValue = (finalValue/checkpointSampleSize);\n                finalValue = roundToDecimalPlaces(finalValue, 4);\n                context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.currentData`).push(finalValue);\n                appendPhaseIILog(context,`Averaged Current Values:${finalValue}`);\n\n                //Current Data Object\n                //Reset\n                context.set(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData`,{...context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData`), [\"sampleCurrentDataDump\"]: []});\n                context.set(`userInputtedData.batchSensorData.${batchSensorPosition}.isSamplingData`,{...context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.isSamplingData`), [\"isSamplingCurrentData\"]: false});\n                \n                // console.log(`Done sampling & averaging. current data`);\n                // console.log(context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.calibrationData.currentData`));\n\n            }\n        }\n    }catch(err){\n        console.log(`Error in calculateAverageCurrentPhaseIIV2Module: ${err.message}`);\n        console.log(err.stack);\n        context.set(`userInputtedData.batchSensorData.${batchSensorPosition}.isSamplingData`,{...context.get(`userInputtedData.batchSensorData.${batchSensorPosition}.isSamplingData`), [\"isSamplingCurrentData\"]: false});\n    }\n}\nfunction delayTimeModule(context, numberSeconds){\n    /***\n     * Call delay by \"await delayTimeModule(2);\"\n     */\n    return new Promise((resolve) => {\n        setTimeout(resolve, numberSeconds * 1000);\n      });\n}\nfunction softResetV2PhaseIModule(context, phase){\n\n    switch(phase){\n        case \"phaseI\":\n            const chatBoxP1 = document.getElementById('phaseITextbox');\n            if(chatBoxP1){\n                chatBoxP1.innerHTML=\"\";\n            }\n            for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                if(context.get(`userInputtedData.batchSensorData.${i}`) != null){\n                    context.set(`userInputtedData.batchSensorData.${i}.calibrationData`,{...context.get(`userInputtedData.batchSensorData.${i}.calibrationData`), [\"sampleDataDump\"]: []});\n                    context.set(`userInputtedData.batchSensorData.${i}.calibrationData`,{...context.get(`userInputtedData.batchSensorData.${i}.calibrationData`), [\"lookupData\"]: []});\n                    context.set(`userInputtedData.batchSensorData.${i}.isSamplingData`,{...context.get(`userInputtedData.batchSensorData.${i}.isSamplingData`), [\"isPhaseISampling\"]: false});    \n                }\n            }\n            context.set(\"dashboardStatusBarData.current\",generalStatusLibrary(600));\n            context.set(\"dashboardStatusBarData.target\",generalStatusLibrary(600));\n            break;\n\n        case \"phaseII\":\n            const chatBoxPII = document.getElementById('phaseIITextbox');\n            if(chatBoxPII){\n                chatBoxPII.innerHTML=\"\";\n            }\n            for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                if(context.get(`userInputtedData.batchSensorData.${i}`) != null){\n                    /**\n                     * \n                            calibrationDataData:[],\n                            currentData:[],\n                            slopeData:[], \n                            offsetData:[]\n                            isSamplingCurrentData:false, \n                            isSamplingCalibrationData:false\n                     */\n                    context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"sampleDataDump\"]: []});\n                    context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"sampleCurrentDataDump\"]: []});\n                    context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"calibrationDataData\"]: []});\n                    context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"currentData\"]: []});\n                    context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"slopeData\"]: []});\n                    context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"offsetData\"]: []});\n                    context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isSamplingCurrentData\"]: false});\n                    context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isSamplingCalibrationData\"]: false});\n                }\n            }\n            context.set(\"dashboardStatusBarData.current\",generalStatusLibrary(600));\n            context.set(\"dashboardStatusBarData.target\",generalStatusLibrary(600));\n            break;\n    }\n    \n    try{\n\n    }catch(err){\n        console.log(`Error in softResetV2PhaseIModule: ${err.message}`);\n        console.log(err.stack);\n    }\n}\nfunction softResetPhaseIModule(context){\n\n    updateCalibrationStatusModule(context, 597);\n    \n    const chatBox = document.getElementById('phaseITextbox');\n    if(chatBox){\n        chatBox.innerHTML=\"\";\n    }\n    context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseISampleLookupData\"]: []});\n    context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseILookupData\"]: []});\n    context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseISampling\"]: false});\n    context.set(\"dashboardStatusBarData.current\",generalStatusLibrary(600));\n    context.set(\"dashboardStatusBarData.target\",generalStatusLibrary(600));\n}\nfunction softResetPhaseIIModule(context){\n\n    updateCalibrationStatusModule(context, 598);\n        \n    const chatBox = document.getElementById('phaseIITextbox');\n    if(chatBox){\n        chatBox.innerHTML=\"\";\n    }\n    context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseIISampleCalibrationDataValueData\"]: []});\n    context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseIICalibrationDataValueData\"]: []});\n    context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseIISampleCurrentData\"]: []});\n    context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseIICurrentData\"]: []});\n    context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseIISlopeData\"]: []});\n    context.set(\"calibrationData\",{...context.get(\"calibrationData\"), [\"phaseIIOffsetData\"]: []});\n    context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseIICalibrationDataValueSampling\"]: false});\n    context.set(\"calibrationIsSamplingData\",{...context.get(\"calibrationIsSamplingData\"), [\"isPhaseIISampling\"]: false});\n    context.set(\"dashboardStatusBarData.current\",generalStatusLibrary(600));\n    context.set(\"dashboardStatusBarData.target\",generalStatusLibrary(600)); \n}\nexport function hardResetModule(context){\n\n    if(context.get(\"settingsConfig.internalVersion\") === \"v1.0\"){\n        context.set(\"calibrationData\",{phaseISampleLookupData:[],phaseILookupData:[],phaseIISampleCalibrationDataValueData:[],phaseIICalibrationDataValueData:[],phaseIISampleCurrentData:[],phaseIICurrentData:[],phaseIISlopeData:[], phaseIIOffsetData:[]});\n        context.set(\"calibrationIsSamplingData\",{isPhaseISampling:false, isPhaseIISampling:false});\n    }else if(context.get(\"settingsConfig.internalVersion\") === \"v2.0\"){\n        const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n        for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n            if(batchSensorData[i] != null){\n                const sensorObj = batchSensorData[i];\n                sensorObj[\"isSamplingData\"] = {\n                    isPhaseISampling:false,\n                    isSamplingCurrentData:false, \n                    isSamplingCalibrationData:false\n                };\n                sensorObj[\"calibrationData\"] = {\n                    sampleDataDump:[],\n                    sampleCurrentDataDump:[],\n                    lookupData:[],\n                    calibrationDataData:[],\n                    currentData:[],\n                    slopeData:[], \n                    offsetData:[]\n                };\n            }\n        }\n    }\n    context.set(\"dashboardStatusBarData.current\",generalStatusLibrary(600));\n    context.set(\"dashboardStatusBarData.target\",generalStatusLibrary(600));\n    const rigProfile = document.getElementById(\"selectedRigIP\");\n    rigProfile.value=\"0\";\n    context.set(\"selectedRigDP\", \"0\");\n    const calibProfile = document.getElementById(\"selectedCalibrationType\");\n    calibProfile.value=\"0\";\n    context.set(\"selectedCalibDP\", \"0\");\n\n}\nfunction emergencyCheckOrThrow(context, message, errCategory=null){\n    if (context.get(\"emergencyController\")['signal']['aborted']) {\n        throw new DOMException(message, errCategory == null ? \"AbortError\" : errCategory);\n    }\n\n}\n//General utilities and Tools Section\nexport async function sendV2BatchCommands1(context){\n    try{\n        const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n        const selectedCalibrationProfile = context.get(\"userInputtedData.selectedCalibrationProfile\");\n        updateCalibrationStatusModule(context, 591); //Sending Validation CMDs... \n\n        for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n            if(batchSensorData[i] != null && selectedCalibrationProfile != null){\n                const sensorObj = batchSensorData[i];\n                const calibrationProfileData = selectedCalibrationProfile[\"data\"];\n                const sensorData = sensorObj['sensorData'];\n                const sensorName = sensorData['sensorName'];\n                const channelBoard = calibrationProfileData['channels'] - 1;\n                const strokeBoard = calibrationProfileData['maxLimit'];\n                const sensorID = sensorData['sensorID'];\n                const type = calibrationProfileData['typeID'];\n                const description = buildSensorDescription(context);\n                appendLiveLog(context, `Sending validation CMDs for sensor ${i}...`, \"incoming\");\n                showPopup([`Sending validation CMDs for sensor ${i}...`, \"warning\", 5]);\n                const cmdArray = [\n                    'WS+COMMAND_MODE=1',//Set CMD mode\n\n                    `WS+COMMAND=0`,//setMode 0\n                    `WS+COMMAND=1`,//setMode 1,\n\n                    `WS+COMMAND=1`,//setChannel\n                    `WS+COMMAND=${channelBoard}`,//setChannel\n\n                    `WS+COMMAND=2`,//setStroke\n                    `WS+COMMAND=${strokeBoard}00`,//setStroke\n                    \n                    `WS+COMMAND=3`,//setSensorID\n                    `WS+COMMAND=${sensorID}`,//setSensorID\n                    \n                    `WS+COMMAND=4`,//setType\n                    `WS+COMMAND=${calibrationProfileData['channels']}${type}`,//setType\n                    \n                    `WS+COMMAND=5`,//setDescrip\n                    `WS+COMMAND=${description}`,//setDescrip\n                    \n                    `WS+COMMAND=9`,//exit\n                ];\n                await sendBatchCommands(context, cmdArray);\n                appendLiveLog(context, `Done sending validation CMDs for sensor ${i}!`, \"incoming\");\n                showPopup([`Done sending validation CMDs for sensor ${i}!`, \"notification\", 5]);\n            }\n        }\n        updateCalibrationStatusModule(context, 590); //Ready to Start Calibration\n\n\n    }catch(err){\n        console.log(`Error in sendV2BatchCommands1: ${err.message}`);\n        console.log(err.stack);\n\n    }\n}\nexport async function sendV2BatchCommands2(context){\n    try{\n        const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n        //Notify\n        appendLiveLog(context, `Sending initial CMDs prior to lookup upload!`, \"incoming\");\n        showPopup([`Sending initial CMDs prior to lookup upload!`, \"warning\", 5]);\n        //Starting CMDs: setMode 1\n        const cmdArray1 = [\n            'WS+COMMAND_MODE=1',//Set CMD mode\n\n            `WS+COMMAND=0`,//setMode 0\n            `WS+COMMAND=0`,//setMode 0\n        ];\n        await sendBatchCommands(context, cmdArray1);\n        //Start Sending T1,T2,...\n        for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n            if(batchSensorData[i] != null){\n                const sensorObj = batchSensorData[i];\n                const sensorCalibrationData = sensorObj[\"calibrationData\"];\n                //Notify\n                appendLiveLog(context, `Uploading lookup data for sensor ${i}...`, \"incoming\");\n                showPopup([`Uploading lookup data for sensor ${i}...`, \"warning\", 5]);\n                for(let j=1; j<=sensorCalibrationData[\"lookupData\"].length; j ++){\n                    const lookupDataArray = sensorCalibrationData[\"lookupData\"][j-1];\n                    const cmdArray2 = [\n                        `WS+COMMAND=T${j}`,//set T1, T2,...,\n                        `WS+COMMAND=${lookupDataArray.toString()},`,//set T values\n                    ];\n                    await sendBatchCommands(context, cmdArray2);\n\n                }\n                //Notify\n                appendLiveLog(context, `Done uploading lookup data for sensor ${i}!`, \"incoming\");\n                showPopup([`Done uploading lookup data for sensor ${i}!`, \"warning\", 5]);\n            }\n        }\n        //Wrap Up CMDS\n        //Notify\n        appendLiveLog(context, `Sending concluding CMDs after lookup upload!`, \"incoming\");\n        showPopup([`Sending concluding CMDs after lookup upload!`, \"warning\", 5]);\n        const cmdArray2 = [\n            `WS+COMMAND=7`,//Table to ROM\n            `WS+COMMAND=9`,//Exit\n        ];\n        await sendBatchCommands(context, cmdArray2);\n\n\n    }catch(err){\n        console.log(`Error in sendV2BatchCommands2: ${err.message}`);\n        console.log(err.stack);\n\n    }\n}\nexport async function sendBatchCommands(context, cmdValueArray){\n    for (let cmdValueString of cmdValueArray) {\n        const [cmd, value] = cmdValueString.split(' ');\n        await outgoingMessageLibrary(\n            context,\n            cmd ? cmd : \"\",\n            value ? value : \"\"\n        );\n\n        // Wait 7 seconds before the next iteration\n        await new Promise(resolve => setTimeout(resolve, 8000));\n    }\n\n}\nexport function clearBatchSensorCalibrationData(context){\n    context.set(\"userInputtedData.batchSensorData\", {});\n}\nfunction transformLookUpDataObj(context, phase){\n    try{\n        const selectedCalibrationProfile = context.get('userInputtedData.selectedCalibrationProfile');\n        if(selectedCalibrationProfile == null){\n            console.warn(`transformLookUpDataObj(${phase}): selectedCalibrationProfile is null — returning []`);\n            return [];\n        }\n        const data = selectedCalibrationProfile['data'];\n        if(data == null){\n            console.warn(`transformLookUpDataObj(${phase}): selectedCalibrationProfile.data is null — returning []`, selectedCalibrationProfile);\n            return [];\n        }\n        let lookupData = null;\n        switch(phase){\n            case \"phaseI\":\n                lookupData = context.get('calibrationData')['phaseILookupData'];\n                break;\n            case \"phaseII\":\n                lookupData = context.get('calibrationData')['phaseIICalibrationDataValueData'];\n                break;\n        }\n        if(!Array.isArray(lookupData)){\n            console.warn(`transformLookUpDataObj(${phase}): source lookupData is not an array — returning []`, lookupData);\n            return [];\n        }\n        const channels = (data['channels'] || 0) - 1; //-1 to disregard the temperature channel\n        let transformedArray = Array.from({ length: channels }, () => []);\n        lookupData.forEach((value, i)=>{\n            value.forEach((value, index)=>{\n                const channelID=index;\n                transformedArray[channelID].push(value);\n            })\n        });\n        return transformedArray;\n    }catch(err){\n        console.warn(`transformLookUpDataObj(${phase}) threw: ${err.message}`, err.stack);\n        return [];\n    }\n}\nfunction transformLookUpV2(context, dataKey){\n    try{\n        const selectedCalibrationProfile = context.get('userInputtedData.selectedCalibrationProfile');\n        if(selectedCalibrationProfile != null){\n            const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n            const data = selectedCalibrationProfile['data'];\n            const channels = data['channels'] - 1; //-1 to disregard the temperature channel\n            for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n                if(batchSensorData[i] != null){\n                    const sensorObj = batchSensorData[i];\n                    let calibrationData = sensorObj[\"calibrationData\"];\n                    let transformedArray =  Array.from({ length: channels }, () => []);\n                    calibrationData[dataKey].forEach((value, i)=>{\n                        value.forEach((value, index)=>{\n                            const channelID=index;\n                            transformedArray[channelID].push(value);\n                        })\n                    });\n                    calibrationData[dataKey] = transformedArray;\n                }\n            }\n            context.set(\"userInputtedData.batchSensorData\", batchSensorData);\n            return true;\n        }\n        else{\n            return false;\n        }\n    }catch(err){\n        console.log(`Error in transformLookUpDataObjV2: ${err.message}`);\n        console.log(err.stack);\n        return false;\n    }\n}\nfunction getRandomNumber(min, max) {\n    // Generate a random number between 20 and 23\n    let randomNumber = Math.random() * (max - min) + 20;\n    // Round to two decimal places\n    return randomNumber.toFixed(2);\n}\nexport function roundToDecimalPlaces(value, decimalPlaces) {\n    const scale = Math.pow(10, decimalPlaces);\n    const roundedValue = Math.round(value * scale) / scale;\n\n    // Ensure the result has exactly the specified number of decimal places\n    return roundedValue.toFixed(decimalPlaces);\n}\n// Anchor values are enforced to a fixed 3 decimal places (\"X.XXX\") across the whole pipeline: input\n// (main calib form) → save (POST / Edit-from-Inv PATCH) → display (Report modal, certificate sheets,\n// Edit-from-Inv recall). Returns the formatted string; blanks pass through as '' so empty anchor cells\n// stay empty (and aren't turned into \"0.000\"). Non-numeric (shouldn't happen) also yields ''.\nexport function formatAnchor3dp(value){\n    if(value === '' || value === null || value === undefined){ return ''; }\n    const n = Number(value);\n    return Number.isFinite(n) ? n.toFixed(3) : '';\n}\nfunction parseMessage(context,message) {\n\n    if(context.get(\"settingsConfig.internalVersion\") === \"v1.0\"){\n        const data = message.split(',');\n        // Ensure the array has at least the first 5 elements\n        if (data.length < 5) {\n          throw new Error(\"Array must have at least 5 elements.\");\n        }\n      \n        // Extract the required fields\n        const instrumentID = data[1]?.trim(); // Second element\n        const instrumentType = data[3]?.trim(); // Fourth element\n      \n        // Extract the temperature value (5th element in the array)\n        let temperatureValue;\n        try {\n          temperatureValue = parseFloat(data[4].replace(\"+\", \"\").trim()); // Clean and convert to float\n        } catch (error) {\n          throw new Error(\"Temperature value is not valid.\");\n        }\n      \n        // Initialize array for displacement values\n        const displacementValues = [];\n      \n        // Process the remaining elements in pairs (displacementValue, displacementUnit)\n        for (let i = 6; i < data.length; i += 2) {\n          let displacementValue = data[i]?.trim()?.replace(/\\s+/g, \"0\") || null; // Remove spaces\n          try {\n            if(displacementValue != null){\n                // console.log('displacementValue')\n                // console.log(displacementValue)\n                displacementValues.push(parseFloat(displacementValue));\n            }\n          } catch (error) {\n            // Skip invalid displacement values\n            console.warn(`Invalid displacement value at index ${i}:`, data[i]);\n          }\n        }\n      \n        // Return as an array\n        const finalArr = [instrumentID, instrumentType, temperatureValue];\n        displacementValues.forEach((value)=>{\n            finalArr.push(value);\n        })\n        // console.log(finalArr);\n    \n        return finalArr;\n\n    }else if(context.get(\"settingsConfig.internalVersion\") === \"v2.0\"){\n\n        try {\n        \n            // Split by comma\n            const dataParts = message.split(',').map(part => part.trim());\n        \n            if (dataParts.length < 6) {\n              throw new Error('Input string does not have the minimum required fields.');\n            }\n        \n            // Extract fixed elements\n            const sensorID = dataParts[1];\n            const sensorTypeCombination = dataParts[3];\n        \n            const temperatureRaw = dataParts[4];\n            const temperatureValue = parseFloat(temperatureRaw.replace(/[^\\d.-]/g, ''));\n        \n            // Starting from index 6, collect displacement values\n            const displacementValues = [];\n            for (let i = 6; i < dataParts.length; i += 2) {\n              const value = parseFloat(dataParts[i]);\n              if (!isNaN(value)) {\n                displacementValues.push(value);\n              }\n            }\n        \n            // Return in desired format\n            return [sensorID, sensorTypeCombination, temperatureValue, ...displacementValues];\n          } catch (err) {\n            console.error(`Error in parseMessage: ${err.message}`);\n            console.error(err.stack);\n            return [];\n          }\n    }\n}\nexport function getDataSetColor(index) {\n    const colors = [\n        '#FF0000', // Red\n        '#00FF00', // Green\n        '#0000FF', // Blue\n        '#FFFF00', // Yellow\n        '#FF00FF', // Magenta\n        '#00FFFF', // Cyan\n        '#FF7F00', // Orange\n        '#7F00FF', // Violet\n        '#00FF7F', // Spring Green\n        '#7FFF00', // Chartreuse\n        '#FF007F', // Rose\n        '#007FFF', // Azure\n        '#7F7F7F', // Grey\n        '#FFAA00', // Amber\n        '#AAFF00', // Lime\n        '#00AAFF', // Cerulean\n        '#AA00FF', // Purple\n        '#FF00AA', // Fuchsia\n        '#00FFAA', // Aqua\n        '#AAFFAA', // Pastel Green\n        '#AAFF7F', // Light Green\n        '#7F7FFF', // Lavender\n        '#FF5555', // Soft Red\n        '#55FF55', // Soft Green\n        '#5555FF', // Soft Blue\n    ];\n\n    // Cycle through the colors if there are more datasets than predefined colors\n    return colors[index % colors.length];\n}\nexport function getCurrentDateTime () {\n    const now = new Date();\n\n    const year = now.getFullYear();\n    const month = String(now.getMonth() + 1).padStart(2, '0'); // Months are 0-based\n    const day = String(now.getDate()).padStart(2, '0');\n\n    const hours = String(now.getHours()).padStart(2, '0');\n    const minutes = String(now.getMinutes()).padStart(2, '0');\n    const seconds = String(now.getSeconds()).padStart(2, '0');\n    const milliseconds = String(now.getMilliseconds()).padStart(3, '0');\n\n    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n}\nfunction areNumbersEqual(num1, num2, epsilon = 0.005) {\n    return Math.abs(num1 - num2) < epsilon;\n}\nexport function formatDateTimeFromInputField(dateTimeString) {\n    // Convert the input datetime-local string to the desired format\n    const [date, time] = dateTimeString.split('T');\n    console.log(`date:${date} time:${time}`);\n    return `${date} ${time}:00`; // Append milliseconds as .000\n}\nexport function linearRegression(x, y) {\n    //x = array of x axis values (current)\n    //y = array of y axis values (calibrated)\n    x = x.map(Number);\n    y = y.map(Number);\n    try{\n        const n = x.length; // Number of points\n\n        // Calculate the sums needed for the formula\n        const sumX = x.reduce((a, b) => a + b, 0);\n        const sumY = y.reduce((a, b) => a + b, 0);\n        const sumXY = x.reduce((sum, xi, i) => sum + xi * y[i], 0);\n        const sumX2 = x.reduce((sum, xi) => sum + xi * xi, 0);\n\n        // Calculate slope (m) and offset (b)\n        const slope = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);\n        const offset = (sumY - slope * sumX) / n;\n\n        return { slope, offset };\n    }catch(err){\n        console.log(`Error in linearRegression: ${err.message}`);\n        console.log(err.stack);\n    } \n}\nexport function convertDBDateToTableDate(DBDate){\n    const date = new Date (DBDate);\n    let year = date.getFullYear();\n    let month = String(date.getMonth() + 1).padStart(2, '0');\n    let day = String(date.getDate()).padStart(2, '0');\n    let hours = String(date.getHours()).padStart(2, '0');\n    let minutes = String(date.getMinutes()).padStart(2, '0');\n    let seconds = String(date.getSeconds()).padStart(2, '0');\n    \n    return(`${year}-${month}-${day} ${hours}:${minutes}:${seconds}`) ;\n\n}\nexport function buildAndGetDataFormat1(context){\n    const userProfile = context.get('session').data.authenticated['userProfile'];\n\n    const selectedRigProfile = context.get('userInputtedData.selectedRigProfile');\n    const selectedCalibrationProfile = context.get('userInputtedData.selectedCalibrationProfile');\n    const selectedSensorData = context.get(\"userInputtedData.selectedSensorData\");\n    const selectedAnchorData = context.get(\"userInputtedData.selectedAnchorData\")\n    const calibrationData = context.get('calibrationData');\n    //For Inventory: the operator left Job # / Sensor Name / Anchor blank on screen on purpose. Here —\n    //and only here, at POST build time — we substitute the FOR_INVENTORY sentinel the BE recognizes as\n    //\"deliberately emptied because this calibration is for inventory\". See BE_SENTINEL at top of file.\n    const isForInventory = context.get(\"userInputtedData.isForInventory\") === true;\n    const INVENTORY_SENTINEL = BE_SENTINEL.FOR_INVENTORY;\n    //Build Data\n    let requestData = {};\n    //add rigProfile ID\n    requestData['selectedRigProfileID'] = Number.parseInt(selectedRigProfile['data']['rigID']);\n    //add calibProfile ID\n    requestData['selectedCalibrationProfileID'] = Number.parseInt(selectedCalibrationProfile['data']['id']);\n    //add sensorProfile \n    requestData['sensorProfileData'] = {};\n    requestData['sensorProfileData']['channels'] = selectedCalibrationProfile['data']['channels'] ? Number.parseInt(selectedCalibrationProfile['data']['channels']) : 0;\n    requestData['sensorProfileData']['validationID'] = selectedSensorData['selectedPackProfile'] &&  selectedSensorData['selectedPackProfile']['validationId'] != null ? selectedSensorData['selectedPackProfile']['validationId'] : null;\n    requestData['sensorProfileData']['sensorID'] = selectedSensorData['sensorID'] ? selectedSensorData['sensorID'] : '';\n    requestData['sensorProfileData']['rigID'] = selectedRigProfile['data']['rigID'] ? Number.parseInt(selectedRigProfile['data']['rigID']) : 0;\n    requestData['sensorProfileData']['rigIP'] = selectedRigProfile ? selectedRigProfile['data']['rigIP'] : \"\";\n    requestData['sensorProfileData']['rigName'] = selectedRigProfile ? selectedRigProfile['data']['rigName'] : \"\";\n    requestData['sensorProfileData']['unit'] = selectedCalibrationProfile ? selectedCalibrationProfile['data']['unit'] : \"\";\n    requestData['sensorProfileData']['typeID'] = selectedCalibrationProfile ? selectedCalibrationProfile['data']['typeID'] : \"\";\n    //Explicit flag so the BE knows the -175s below are intentional (for inventory), not bad data.\n    requestData['sensorProfileData']['isInventory'] = isForInventory;\n    requestData['sensorProfileData']['jobID'] = isForInventory ? INVENTORY_SENTINEL : (selectedSensorData['jobID'] ? selectedSensorData['jobID'] : \"\");\n    requestData['sensorProfileData']['sensorName'] = isForInventory ? `${INVENTORY_SENTINEL}` : (selectedSensorData['sensorName'] ? selectedSensorData['sensorName'] : \"\");\n    requestData['sensorProfileData']['calibrationDate'] = selectedSensorData['calibrationDate'] ? selectedSensorData['calibrationDate'] : \"\";\n    requestData['sensorProfileData']['employee'] = userProfile ?  `${userProfile['profile']['first_name']} ${userProfile['profile']['last_name']}` : \"\";\n    requestData['sensorProfileData']['sensorDescription'] = selectedSensorData['sensorDescription'] ? selectedSensorData['sensorDescription'] : \"\";\n    requestData['sensorProfileData']['memo'] = selectedSensorData['memo'] ? selectedSensorData['memo'] : \"\";\n    requestData['sensorProfileData']['checkpointPositions'] = selectedCalibrationProfile['data']['checkpointPositions'] ? selectedCalibrationProfile['data']['checkpointPositions'] : [];\n    requestData['sensorProfileData']['checkpointSpeed'] = selectedCalibrationProfile ? selectedCalibrationProfile['data']['checkpointSpeed'] : \"\";;\n    requestData['sensorProfileData']['checkpointDelay'] = selectedCalibrationProfile ? selectedCalibrationProfile['data']['checkpointDelay'] : \"\";;\n    requestData['sensorProfileData']['checkpointSampleSize'] = selectedCalibrationProfile ? selectedCalibrationProfile['data']['checkpointSampleSize'] : \"\";;\n    requestData['sensorProfileData']['checkpointCurrentTargetBuffer'] = selectedCalibrationProfile ? selectedCalibrationProfile['data']['checkpointCurrentTargetBuffer'] : \"\";\n    //add anchorProfile — for inventory, every anchor value is sent as the -175 sentinel.\n    requestData['anchorProfileData'] = {};\n    for (let key in selectedAnchorData){\n        requestData['anchorProfileData'][key] = isForInventory ? INVENTORY_SENTINEL : selectedAnchorData[key];\n    }\n    //add calibrationData — coalesce undefined to [] so JSON serialization never drops a key.\n    //If a real value is missing, BE will see [] and a separate validation will catch it.\n    requestData['calibrationData'] = {};\n    let calibrationRequestData = requestData['calibrationData'];\n    calibrationRequestData['phaseILookUpArray']            = calibrationData['phaseILookupData']                || [];\n    calibrationRequestData['phaseIICalibratedDataArray']   = calibrationData['phaseIICalibrationDataValueData'] || [];\n    calibrationRequestData['phaseIICalibratedCurrentArray']= calibrationData['phaseIICurrentData']              || [];\n    calibrationRequestData['phaseIICalibratedSlopeArray']  = calibrationData['phaseIISlopeData']                || [];\n    calibrationRequestData['phaseIICalibratedOffsetArray'] = calibrationData['phaseIIOffsetData']               || [];\n    if(!calibrationData['phaseILookupData']){\n        console.warn('buildAndGetDataFormat1: phaseILookupData was missing/undefined — sending [] (BE will reject as expected). Likely transformLookUpDataObj returned undefined.');\n    }\n    console.log(`requestData`);\n    console.log(requestData);\n    return requestData;\n}\n//For V2 ONLY\nexport function buildAndGetDataFormat2(context){\n    const userProfile = context.get('session').data.authenticated['userProfile'];\n\n    const selectedRigProfile = context.get('userInputtedData.selectedRigProfile');\n    const selectedCalibrationProfile = context.get('userInputtedData.selectedCalibrationProfile');\n    const selectedSensorData = context.get(\"userInputtedData.selectedSensorData\");\n    const selectedAnchorData = context.get(\"userInputtedData.selectedAnchorData\")\n    //Build Data\n    let requestArr = [];               \n    const batchSensorData = context.get(\"userInputtedData.batchSensorData\");\n\n    for(let i = 1; i <= context.get(\"settingsConfig.BATCH_SENSORS_COUNT\"); i ++){\n        const sensorObj = batchSensorData[i];\n        if(sensorObj != null){\n            let requestData = {}; \n            const sensorData = sensorObj['sensorData'];\n            const sensorCalibrationData = sensorObj['calibrationData'];\n            //add rigProfile ID\n            requestData['selectedRigProfileID'] = Number.parseInt(selectedRigProfile['data']['rigID']);\n            //add calibProfile ID\n            requestData['selectedCalibrationProfileID'] = Number.parseInt(selectedCalibrationProfile['data']['id']);\n            //add sensorProfile \n            requestData['sensorProfileData'] = {};\n            requestData['sensorProfileData']['sensorID'] = sensorData['sensorID'] ? sensorData['sensorID'] : '';    \n            requestData['sensorProfileData']['sensorName'] = sensorData['sensorName'] ? sensorData['sensorName'] : \"\";\n            requestData['sensorProfileData']['calibrationDate'] = sensorData['calibrationDate'] ? sensorData['calibrationDate'] : \"\";\n            requestData['sensorProfileData']['sensorDescription'] = sensorData['sensorDescription'] ? sensorData['sensorDescription'] : \"\";\n            requestData['sensorProfileData']['validationID'] = sensorData[\"packObj\"] ? sensorData[\"packObj\"]['validationId'] : null;\n\n\n            requestData['sensorProfileData']['channels'] = selectedCalibrationProfile['data']['channels'] ? Number.parseInt(selectedCalibrationProfile['data']['channels']) : 0;\n            requestData['sensorProfileData']['rigID'] = selectedRigProfile['data']['rigID'] ? Number.parseInt(selectedRigProfile['data']['rigID']) : 0;\n            requestData['sensorProfileData']['rigIP'] = selectedRigProfile ? selectedRigProfile['data']['rigIP'] : \"\";\n            requestData['sensorProfileData']['rigName'] = selectedRigProfile ? selectedRigProfile['data']['rigName'] : \"\";\n            requestData['sensorProfileData']['unit'] = selectedCalibrationProfile ? selectedCalibrationProfile['data']['unit'] : \"\";\n            requestData['sensorProfileData']['typeID'] = selectedCalibrationProfile ? selectedCalibrationProfile['data']['typeID'] : \"\";\n            requestData['sensorProfileData']['jobID'] = selectedSensorData['jobID'] ? selectedSensorData['jobID'] : \"\";\n            requestData['sensorProfileData']['employee'] = userProfile ?  `${userProfile['profile']['first_name']} ${userProfile['profile']['last_name']}` : \"\";\n            requestData['sensorProfileData']['memo'] = selectedSensorData['memo'] ? selectedSensorData['memo'] : \"\";\n            requestData['sensorProfileData']['checkpointPositions'] = selectedCalibrationProfile['data']['checkpointPositions'] ? selectedCalibrationProfile['data']['checkpointPositions'] : [];\n            requestData['sensorProfileData']['checkpointSpeed'] = selectedCalibrationProfile ? selectedCalibrationProfile['data']['checkpointSpeed'] : \"\";;\n            requestData['sensorProfileData']['checkpointDelay'] = selectedCalibrationProfile ? selectedCalibrationProfile['data']['checkpointDelay'] : \"\";;\n            requestData['sensorProfileData']['checkpointSampleSize'] = selectedCalibrationProfile ? selectedCalibrationProfile['data']['checkpointSampleSize'] : \"\";;\n            requestData['sensorProfileData']['checkpointCurrentTargetBuffer'] = selectedCalibrationProfile ? selectedCalibrationProfile['data']['checkpointCurrentTargetBuffer'] : \"\";\n            \n            //add anchorProfile\n            requestData['anchorProfileData'] = {};\n            for (let key in selectedAnchorData){\n                requestData['anchorProfileData'][key] = selectedAnchorData[key];\n            }\n            //add calibrationData \n            requestData['calibrationData'] = {};\n            let calibrationRequestData = requestData['calibrationData'];\n            //add calibrationData phaseILookUpArray\n            calibrationRequestData['phaseILookUpArray'] = sensorCalibrationData['lookupData'];\n            //add calibrationData phaseIICalibratedDataArray\n            calibrationRequestData['phaseIICalibratedDataArray'] = sensorCalibrationData['calibrationDataData'];\n            //add calibrationData phaseIICalibratedCurrentArray\n            calibrationRequestData['phaseIICalibratedCurrentArray'] = sensorCalibrationData['currentData'];\n            //add calibrationData phaseIICalibratedSlopeArray\n            calibrationRequestData['phaseIICalibratedSlopeArray'] = sensorCalibrationData['slopeData'];\n            //add calibrationData phaseIICalibratedOffsetArray\n            calibrationRequestData['phaseIICalibratedOffsetArray'] = sensorCalibrationData['offsetData'];\n            \n            requestArr.push(requestData)\n        }\n    }\n    console.log(`requestArr`);\n    console.log(requestArr);\n    return requestArr;\n}\nexport function hasPermission(context, permissionCodeArray){\n    const userProfile = context.get('session').data.authenticated['userProfile'];\n        if(userProfile){\n            let failedPermissions = []\n            if(userProfile['profile']['is_superuser']){\n                return true;\n            }else{\n                permissionCodeArray.forEach((value, index)=>{\n                    if(userProfile['permissions'].includes(value)){\n                        //Do Nothing\n                    }else{\n                        failedPermissions.push(`What you are trying to do requires ${value} permission`);\n                    }\n                });\n                if(failedPermissions.length > 0){\n                    scheduleOnce('afterRender', context, () => {\n                        showPopup(failedPermissions, 'error', 1);\n                        console.log(failedPermissions.toString())\n                    });\n                    return false;\n                }else{\n                    return true;\n                }\n            }\n        }else{\n            return false;\n        }\n}","export { default } from 'ember-concurrency/helpers/cancel-all';\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport default helper(function([refAnchor, anchorNumber]) {\n  let result = refAnchor.toString() === anchorNumber.toString();\n  console.log(`**************refAnchor: ${refAnchor}, anchorNumber: ${anchorNumber}, result: ${result}`);\n  return result;\n});\n","import { helper } from '@ember/component/helper';\nimport moment from 'moment';\n\nexport default helper(function currentDate(params/*, hash*/) {\n    return moment().format(params[0]);\n});\n","export { default } from 'ember-render-helpers/helpers/did-insert-helper';\n","export { default } from 'ember-render-helpers/helpers/did-insert';\n","export { default } from 'ember-render-helpers/helpers/did-update-helper';\n","export { default } from 'ember-render-helpers/helpers/did-update';\n","export { default, divIcon } from 'ember-leaflet/helpers/div-icon';\n","export { default } from \"ember-element-helper/helpers/element\";\n","export { default, emberLeafletAssignTo } from 'ember-leaflet/helpers/ember-leaflet-assign-to';\n","export { default, emberLeafletEq } from 'ember-leaflet/helpers/ember-leaflet-eq';\n","export { default, emberLeafletHash } from 'ember-leaflet/helpers/ember-leaflet-hash';\n","export { default, emberLeafletOr } from 'ember-leaflet/helpers/ember-leaflet-or';\n","export { EnsureSafeComponentHelper as default } from '@embroider/util';\n","export { default } from \"ember-truth-helpers/helpers/eq\";\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport function formatNumber(params) {\n    return parseFloat(params[0]).toFixed(params[1]);\n}\n\nexport default helper(formatNumber);\n","\nexport function textLibrary(key) {\n    \n    switch(key){\n        //General\n        case \"-\":\n            return \"-\";\n        //Discretion Texts\n        case \"red_warning_clipping_discretion_1\":\n            return \"Clipping has been detected in RAW data, thus FFT computation is invalid!\"\n        case \"red_warning_clipping_discretion_2\":\n            return \"If you still wish to use data in Acceleration/Velocity/Displacement, proceed with caution!\"\n        \n            //Graph Titles\n        case \"raw_raw_xyz_axis_focus_null_title\":\n            return \"RAW XYZ Points\";\n        case \"raw_x_axis_focus_null_title\":\n            return \"RAW X Points\";\n        case \"raw_y_axis_focus_null_title\":\n            return \"RAW Y Points\";\n        case \"raw_z_axis_focus_null_title\":\n            return \"RAW Z Points\";\n\n        case \"acceleration_sub_acceleration_linear_regression_sub_sub_xyz_axis_focus_title\":\n            return \"Acceleration XYZ Points (Linear Regression)\";\n        case \"acceleration_sub_acceleration_linear_regression_sub_sub_x_axis_focus_title\":\n            return \"Acceleration X Points (Linear Regression)\";\n        case \"acceleration_sub_acceleration_linear_regression_sub_sub_y_axis_focus_title\":\n            return \"Acceleration Y Points (Linear Regression)\";\n        case \"acceleration_sub_acceleration_linear_regression_sub_sub_z_axis_focus_title\":\n            return \"Acceleration Z Points (Linear Regression)\";\n\n        case \"acceleration_sub_acceleration_fft_sub_sub_x_axis_focus_title\":\n            return \"Acceleration X Points (FFT)\";\n        case \"acceleration_sub_acceleration_fft_sub_sub_y_axis_focus_title\":\n            return \"Acceleration Y Points (FFT)\";\n        case \"acceleration_sub_acceleration_fft_sub_sub_z_axis_focus_title\":\n            return \"Acceleration Z Points (FFT)\";\n\n        case \"velocity_sub_velocity_linear_regression_sub_sub_xyz_axis_focus_title\":\n            return \"Velocity XYZ Points (Linear Regression)\";\n        case \"velocity_sub_velocity_linear_regression_sub_sub_x_axis_focus_title\":\n            return \"Velocity X Points (Linear Regression)\";\n        case \"velocity_sub_velocity_linear_regression_sub_sub_y_axis_focus_title\":\n            return \"Velocity Y Points (Linear Regression)\";\n        case \"velocity_sub_velocity_linear_regression_sub_sub_z_axis_focus_title\":\n            return \"Velocity Z Points (Linear Regression)\";\n\n        case \"velocity_sub_velocity_fft_sub_sub_x_axis_focus_title\":\n            return \"Velocity X Points (FFT)\";\n        case \"velocity_sub_velocity_fft_sub_sub_y_axis_focus_title\":\n            return \"Velocity Y Points (FFT)\";\n        case \"velocity_sub_velocity_fft_sub_sub_z_axis_focus_title\":\n            return \"Velocity Z Points (FFT)\";\n\n        case \"displacement_sub_displacement_linear_regression_sub_sub_xyz_axis_focus_title\":\n            return \"Displacement XYZ Points (Linear Regression)\";\n        case \"displacement_sub_displacement_linear_regression_sub_sub_x_axis_focus_title\":\n            return \"Displacement X Points (Linear Regression)\";\n        case \"displacement_sub_displacement_linear_regression_sub_sub_y_axis_focus_title\":\n            return \"Displacement Y Points (Linear Regression)\";\n        case \"displacement_sub_displacement_linear_regression_sub_sub_z_axis_focus_title\":\n            return \"Displacement Z Points (Linear Regression)\";\n\n        case \"displacement_sub_displacement_fft_sub_sub_x_axis_focus_title\":\n            return \"Displacement X Points (FFT)\";\n        case \"displacement_sub_displacement_fft_sub_sub_y_axis_focus_title\":\n            return \"Displacement Y Points (FFT)\";\n        case \"displacement_sub_displacement_fft_sub_sub_z_axis_focus_title\":\n            return \"Displacement Z Points (FFT)\";\n\n        //Graph Control Guides\n        case \"controls_guide_1\":\n            return \"Right-click and drag to rotate. Left-click and drag to pan. Scroll to zoom in/out.\";\n        case \"controls_guide_2\":\n            return \"Left-click and drag to rotate. Scroll to zoom in/out.\";\n                        \n    }\n}","import { next, schedule, scheduleOnce } from '@ember/runloop';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\nimport * as echarts from 'echarts';\nimport 'echarts-gl';\nimport { textLibrary} from '../helpers/frequency-event-language-library';\n\n//notification COmponent\nexport async function  buildRedWarningNotificationBoard(context, profile_obj){\n    context.set(\"isShowConfig.isShowPopupNotification\", true);\n    const analytics = profile_obj['analytics']\n    scheduleOnce('afterRender', context, () => {\n        const masterPopupContent = document.getElementById('notificationPopupContentBody');\n        if(masterPopupContent){\n\n            masterPopupContent.innerHTML = '';\n\n            // Main Title\n            const mainTitle = document.createElement('div');\n            mainTitle.style.marginTop = '10px';\n            mainTitle.style.fontSize = 'larger';\n            mainTitle.style.color = 'red';\n            mainTitle.style.fontWeight = 'bold';\n            mainTitle.textContent = `Warning ${profile_obj['id']}`;\n            masterPopupContent.appendChild(mainTitle);\n            \n            const defaultTabIndex = 10;\n            if(analytics['clippingData'].length > 0){\n                //Clipping Data Title \n                const clippingDataSection = document.createElement('div');\n                clippingDataSection.style.marginLeft = `${defaultTabIndex}px`;\n                clippingDataSection.style.fontWeight = 'bold';\n                clippingDataSection.textContent = \"- Clipping Detected!\"\n                masterPopupContent.appendChild(clippingDataSection);\n\n                //Clipping Data Discretion 1\n                const clippingDiscretionSection1 = document.createElement('div');\n                clippingDiscretionSection1.style.marginLeft = `${2 * defaultTabIndex}px`;\n                clippingDiscretionSection1.textContent = `- ${textLibrary(\"red_warning_clipping_discretion_1\")}`\n                masterPopupContent.appendChild(clippingDiscretionSection1);\n\n                //Clipping Data Discretion 2\n                const clippingDiscretionSection2 = document.createElement('div');\n                clippingDiscretionSection2.style.marginLeft = `${2 * defaultTabIndex}px`;\n                clippingDiscretionSection2.textContent = `- ${textLibrary(\"red_warning_clipping_discretion_2\")}`\n                masterPopupContent.appendChild(clippingDiscretionSection2);\n\n                //Clipping Data Expand Breakdown button\n                const clippingBreakDownExandButton = document.createElement('div');\n                clippingBreakDownExandButton.style.alignSelf= 'center';\n                clippingBreakDownExandButton.style.textDecoration = `underline`;\n                clippingBreakDownExandButton.style.color = 'blue';\n                clippingBreakDownExandButton.style.cursor = `pointer`;\n                clippingBreakDownExandButton.textContent = `View Details`\n                masterPopupContent.appendChild(clippingBreakDownExandButton);\n\n                //Clipping Data Breakdown Section\n                const clippingBreakdownSection = document.createElement('div');\n                clippingBreakdownSection.style.display = 'none';\n                clippingBreakdownSection.style.marginLeft = `${4 * defaultTabIndex}px`;\n                masterPopupContent.appendChild(clippingBreakdownSection);\n\n                for(let i = 0; i < analytics['clippingData'].length - 1; i++ ){\n                    const clippingEvent = analytics['clippingData'][i];\n                    const clippingBreakdownRow2 = document.createElement('div');\n                    clippingBreakdownRow2.style.marginLeft = `${2 * defaultTabIndex}px`;\n                    clippingBreakdownRow2.textContent=`- Data: ${clippingEvent['category'].toUpperCase()} | Axis: ${clippingEvent['axis'].toUpperCase()} | Point: ${JSON.stringify(clippingEvent['value'], null, 2)}`\n                    clippingBreakdownSection.appendChild(clippingBreakdownRow2);\n\n                }\n\n                // Toggle Clipping Data Breakdown visibility\n                clippingBreakDownExandButton.addEventListener('click', () => {\n                    if (clippingBreakdownSection.style.display === 'none') {\n                        clippingBreakdownSection.style.display = 'block';\n                        clippingBreakDownExandButton.textContent = 'Hide Details';\n                    } else {\n                        clippingBreakdownSection.style.display = 'none';\n                        clippingBreakDownExandButton.textContent = 'View Details';\n                    }\n                });\n\n            }\n            \n            //Display and setup Ok Button notificationRefreshButton\n            const okButtonComponent = document.getElementById('notificationOkButton');\n            okButtonComponent.style.display = \"block\";\n            okButtonComponent.onclick = () => {\n                context.send('closeNotificationPopup'); \n            };\n        }\n    });\n}\n\n//ECharts Component\nexport function applyGraphScaling(context) {\n    const zGraphScaling = document.getElementById(\"zGraphScaling\");\n    const chartDom = document.getElementById('bluvibe_frequency_event_echarts');\n    if (!chartDom) return;\n\n    const chartInstance = echarts.getInstanceByDom(chartDom);\n    if (!chartInstance) return;\n\n    const { x, y, z } = context.graphScaling;\n    // console.log(`x min:${x.min}, x max:${x.max}, y min:${y.min}, y max:${y.max}, z min:${z.min}, z max:${z.max},`)\n    if(zGraphScaling.style.display === \"none\"){//Only for 2D Graphs\n        chartInstance.setOption({\n            xAxis: { min: x.min, max: x.max },\n            yAxis: { min: y.min, max: y.max },\n        });\n    }else{//Only for 3D graphs\n        chartInstance.setOption({\n            xAxis3D: { min: x.min, max: x.max },\n            yAxis3D: { min: y.min, max: y.max },\n            zAxis3D: { min: z.min, max: z.max },\n        });\n    }\n    // context.rebuildEChartsComponent();\n}\nexport async function buildECharts3DBarForBluVibe(context, data, decorationParameters = {}) {\n    const chartDom = document.getElementById('bluvibe_frequency_event_echarts');\n\n\n    if (chartDom != null) {\n        scheduleOnce('afterRender', context, () => {\n\n            const chartInstance = echarts.init(chartDom);\n\n            const { x, y, z } = context.graphScaling;\n            // Transform data into 3D coordinates: [x, dummy, z] eg. [frequency, dummy, amplitude]\n            const seriesData = data.y.map((yValue, i) => [\n                data.x[i],    // X-axis: Frequency\n                data.y[i],   // Y-axis: Dummy filled value, preset to 0\n                data.z[i]    // Z-axis: Amplitude\n            ]);\n            //seriesData = [[x,0,z],[x,0,z],[x,0,z]....]\n            const option = {\n                tooltip: {\n                    backgroundColor: 'rgba(50,50,50,0.7)',\n                    textStyle: {\n                        color: '#fff',\n                        fontSize: 12\n                    },\n                    formatter: function (params) {\n                        const [x, y, z] = params.value;\n                        return `\n                        ${decorationParameters[\"xAxisLabel\"] || \"X\"}: <b>${x}</b><br>\n                        ${decorationParameters[\"zAxisLabel\"] || \"Z\"}: <b>${z}</b><br>\n                        `;\n                    }\n                },\n\n                grid3D: {\n                    boxWidth: 500,\n                    boxHeight: 200,\n                    boxDepth: 200,\n                    viewControl: {\n                        projection: 'perspective',         // or 'orthographic'\n                        autoRotate: false,\n                        panSensitivity: 1,\n                        rotateSensitivity: 1,\n                        zoomSensitivity: 1,\n\n                        // Enable free movement\n                        damping: 0.8,                      // Smoother motion\n                        alpha: 30,                         // Default vertical angle\n                        beta: 60,                          // Default horizontal angle\n                        minAlpha: -90,\n                        maxAlpha: 90,\n                        minBeta: -180,\n                        maxBeta: 180,\n\n                        center: [0, 0, 0],                 // Pivot point\n                        distance: 300,                     // Default camera distance\n                        minDistance: 40,\n                        maxDistance: 500,\n\n                        panMouseButton: 'left',           // Enable pan with left-click\n                        rotateMouseButton: 'right',       // Right-click to rotate\n                        zoomMouseButton: 'middle'         // Middle button or scroll to zoom\n                    }\n                },\n                xAxis3D: {\n                    type: 'value',\n                    name: decorationParameters.xAxisLabel || 'Frequency (Hz)',\n                    data: data.x,\n                    min: x.min,\n                    max: x.max,\n                },\n                yAxis3D: {\n                    type: 'category',\n                    data: [''],\n                    name: decorationParameters.yAxisLabel || 'Y',\n                    min: y.min,\n                    max: y.max,\n                },\n                zAxis3D: {\n                    type: 'value',\n                    name: decorationParameters.zAxisLabel || 'Amplitude',\n                    min: z.min,\n                    max: z.max,\n                },\n                visualMap: {\n                    max: Math.max(...data.y),\n                    inRange: {\n                        color: ['#87CEFA', '#4169E1', '#000080'] // Blue gradient\n                    }\n                },\n                dataZoom: [\n                    {\n                        type: 'inside',\n                        start: 0,\n                        end: 100\n                    },\n                    {\n                        type: 'slider',\n                        start: 0,\n                        end: 100\n                    }\n                ],\n                series: [\n                    {\n                        type: 'bar3D',\n                        data: seriesData,\n                        shading: 'lambert',\n                        barSize: 1\n                    }\n                ]\n            };\n\n            chartInstance.setOption(option);\n            window.addEventListener('resize', () => chartInstance.resize());\n        });\n    }\n}\nexport async function buildECharts2DBarForBluVibe(context, data, decorationParameters = {}) {\n    const chartDom = document.getElementById('bluvibe_frequency_event_echarts');\n\n    if (chartDom != null) {\n\n        scheduleOnce('afterRender', context, () => {\n\n            const chartInstance = echarts.init(chartDom);\n\n            const { x, y } = context.graphScaling;\n\n            const option = {\n                tooltip: {\n                    backgroundColor: 'rgba(50,50,50,0.7)',\n                    textStyle: {\n                        color: '#fff',\n                        fontSize: 12\n                    },\n                    formatter: function (params) {\n                        return `\n                        ${decorationParameters[\"xAxisLabel\"] || \"X\"}: <b>${params.name}</b><br>\n                        ${decorationParameters[\"yAxisLabel\"] || \"Y\"}: <b>${params.value}</b><br>\n                        `;\n                    }\n                },\n                grid: {\n                    containLabel: true\n                },\n                legend: {\n                    data: ['X', 'Y', 'Z']\n                },\n                xAxis: [\n                    {\n                        type: 'category',\n                        name: decorationParameters.xAxisLabel || 'X',\n                        data: data[\"x\"],\n                        axisTick: {\n                            alignWithLabel: true\n                        },\n                        min: x.min,\n                        max: x.max,\n                    }\n                ],\n                yAxis: [\n                    {\n                        type: 'value',\n                        name: decorationParameters.yAxisLabel || 'Y',\n                        min: y.min,\n                        max: y.max,\n                    }\n                ],\n\n                dataZoom: [\n                    {\n                        type: 'inside',\n                        start: 0,\n                        end: 100\n                    },\n                    {\n                        type: 'slider',\n                        start: 0,\n                        end: 100\n                    }\n                ],\n                series: [\n                    {\n                        name: decorationParameters.xDataLabel || 'Y',\n                        type: 'bar',\n                        barWidth: '25%',\n                        data: data[\"y\"]\n                    },\n                ]\n            };\n\n            chartInstance.setOption(option);\n\n            window.addEventListener('resize', () => {\n                chartInstance.resize();\n            });\n        });\n    }\n}\nexport async function buildEChartsXFocusYFocusZFocus2DLineForBluVibe(context, data, decorationParameters = {}) {\n    const chartDom = document.getElementById('bluvibe_frequency_event_echarts');\n    if (!chartDom) return;\n\n    const chartInstance = echarts.init(chartDom);\n    const { x, y } = context.graphScaling;\n\n    const lineData = data.map(d => [d.x, d.y]);\n\n    // Collect clipping points for markPoint\n    const clippingPoints = data\n        .filter(d =>\n            (d.hasOwnProperty('isXClipping') && d.isXClipping === true) ||\n            (d.hasOwnProperty('isYClipping') && d.isYClipping === true) ||\n            (d.hasOwnProperty('isZClipping') && d.isZClipping === true)\n        )\n        .map(d => ({\n            name: 'Clipping Event',\n            coord: [d.x, d.y],\n            symbol: 'circle',      // Could be 'pin', 'diamond', etc.\n            symbolSize: 8,\n            itemStyle: {\n                color: 'red'\n            }\n        }));\n\n\n    const option = {\n        tooltip: {\n            backgroundColor: 'rgba(50,50,50,0.7)',\n            textStyle: {\n                color: '#fff',\n                fontSize: 12\n            },\n            formatter: function (params) {\n                let xVal, yVal;\n                let label = '';\n\n                if (Array.isArray(params.value)) {\n                    // Regular data point\n                    [xVal, yVal] = params.value;\n                } else if (params.data && Array.isArray(params.data.coord)) {\n                    // markPoint\n                    [xVal, yVal] = params.data.coord;\n                    label = params.data.name ? `<b>${params.data.name}</b><br>` : '';\n                } else {\n                    return ''; // Fallback\n                }\n\n                return `\n                    ${label}\n                    ${decorationParameters[\"xAxisLabel\"] || \"X\"}: <b>${xVal}</b><br>\n                    ${decorationParameters[\"yAxisLabel\"] || \"Y\"}: <b>${yVal}</b><br>\n                `;\n            }\n        },\n        xAxis: {\n            type: 'value',\n            name: decorationParameters[\"xAxisLabel\"] || \"X\",\n            axisLabel: { fontSize: 12 },\n            min: x.min,\n            max: x.max,\n        },\n        yAxis: {\n            type: 'value',\n            name: decorationParameters[\"yAxisLabel\"] || \"Y\",\n            axisLabel: { fontSize: 12 },\n            min: y.min,\n            max: y.max,\n        },\n        dataZoom: [\n            { type: 'inside', start: 0, end: 100 },\n            { type: 'slider', start: 0, end: 100 }\n        ],\n        series: [{\n            type: 'line',\n            symbol: 'circle',\n            sampling: 'lttb',\n            symbolSize: 4,\n            data: lineData,\n            smooth: true,\n            lineStyle: { width: 2 },\n            itemStyle: { color: '#4A6A9C' },\n            markPoint: {\n                symbolKeepAspect: true,\n                data: clippingPoints\n            }\n        }]\n    };\n\n    chartInstance.setOption(option);\n    window.addEventListener('resize', () => chartInstance.resize());\n}\nexport async function buildEChartsXFocusYFocusZFocus3DLineForBluVibe(context, data, decorationParameters = {}) {\n    const chartDom = document.getElementById('bluvibe_frequency_event_echarts');\n\n    if (chartDom != null) {\n        const chartInstance = echarts.init(chartDom);\n\n        const { x, y, z } = context.graphScaling;\n\n        // Surface requires a 2D array of rows (y-direction), each row being [x, y, z]\n        // We'll make 2 \"ribbons\" with small Y-offset to simulate thickness\n        const surfaceData = [];\n        const thickness = 1; // how much to offset in Y-axis\n\n        for (let yOffset = 0; yOffset <= thickness; yOffset += 0.1) {\n            const row = data.map(d => [d.x, yOffset, d.z]);\n            surfaceData.push(row);\n        }\n        const flatData = surfaceData.flat();\n\n        // Extract all Z values\n        const zValues = flatData.map(point => point[2]);\n\n        // Calculate min and max\n        const zMin = Math.min(...zValues);\n        const zMax = Math.max(...zValues);\n\n        const option = {\n            tooltip: {\n                backgroundColor: 'rgba(50,50,50,0.7)',\n                textStyle: {\n                    color: '#fff',\n                    fontSize: 12\n                },\n                formatter: function (params) {\n                    const [x, y, z] = params.value;\n                    return `\n                    Time (s): <b>${x}</b><br>\n                    ${decorationParameters.zAxisLabel || 'Z'}: <b>${z}</b>\n                    `;\n                }\n            },\n            visualMap: {\n                show: false,\n                dimension: 2,\n                min: zMin,\n                max: zMax,\n                inRange: {\n                    color: ['#87CEFA', '#4169E1', '#000080'] // Blue gradient\n                }\n            },\n            xAxis3D: {\n                type: 'value',\n                name: decorationParameters.xAxisLabel || 'X',\n                min: x.min,\n                max: x.max,\n            },\n            yAxis3D: {\n                type: 'value',\n                name: decorationParameters.yAxisLabel || 'Y',\n                min: y.min,\n                max: y.max,\n            },\n            zAxis3D: {\n                type: 'value',\n                name: decorationParameters.zAxisLabel || 'Z',\n                min: z.min,\n                max: z.max,\n            },\n            grid3D: {\n                boxWidth: 200,\n                boxHeight: 200,\n                boxDepth: 200,\n                viewControl: {\n                    projection: 'orthographic',\n                    autoRotate: false\n                }\n            },\n            series: [{\n                type: 'surface',\n                name: decorationParameters.dataName || '',\n                wireframe: {\n                    show: true\n                },\n                shading: 'color',\n                data: surfaceData.flat()\n            }]\n        };\n\n        chartInstance.setOption(option);\n        window.addEventListener('resize', () => chartInstance.resize());\n    }\n}\nexport async function buildEChartsXYZFocus3DLineForBluVibe(context, dataObj, decorationParameters = {}) {\n    const chartDom = document.getElementById('bluvibe_frequency_event_echarts');\n\n    if (!chartDom) return;\n\n    scheduleOnce('afterRender', context, () => {\n        const chartInstance = echarts.init(chartDom);\n\n        const { x, y, z } = context.graphScaling;\n        const { xData, yData, zData } = dataObj;\n\n        const xSeriesData = xData.map(p => [p.x, p.y, p.z]);\n        const ySeriesData = yData.map(p => [p.x, p.y, p.z]);\n        const zSeriesData = zData.map(p => [p.x, p.y, p.z]);\n\n        const getClippingPoints = (dataArr) =>\n            dataArr\n                .filter(d => d.isXClipping || d.isYClipping || d.isZClipping)\n                .map(d => [d.x, d.y, d.z]);\n\n        const xClippingPoints = getClippingPoints(xData);\n        const yClippingPoints = getClippingPoints(yData);\n        const zClippingPoints = getClippingPoints(zData);\n\n        const option = {\n            legend: {\n                orient: 'vertical',\n                left: 10,\n                top: 'middle',\n                textStyle: { color: '#000', fontSize: 12 },\n                data: [\n                    decorationParameters.xDataLabel || 'X',\n                    decorationParameters.yDataLabel || 'Y',\n                    decorationParameters.zDataLabel || 'Z',\n                    'X Clipping', 'Y Clipping', 'Z Clipping'\n                ]\n            },\n            tooltip: {\n                backgroundColor: 'rgba(50,50,50,0.7)',\n                textStyle: { color: '#fff', fontSize: 12 },\n                formatter: function (params) {\n                    const [time, axisIdx, accel] = params.value || [];\n                    return `\n                        <b>${params.seriesName}</b><br>\n                        Time (s): <b>${time}</b><br>\n                        Axis Index: <b>${axisIdx}</b><br>\n                        Value: <b>${accel}</b>\n                    `;\n                }\n            },\n            xAxis3D: { type: 'value', name: decorationParameters.xAxisLabel || 'Time (s)', min: x.min, max: x.max },\n            yAxis3D: { type: 'value', name: decorationParameters.yAxisLabel || 'Axis Index', min: y.min, max: y.max },\n            zAxis3D: { type: 'value', name: decorationParameters.zAxisLabel || 'Acceleration', min: z.min, max: z.max },\n            grid3D: {\n                boxWidth: 200,\n                boxHeight: 200,\n                boxDepth: 200,\n                viewControl: { projection: 'perspective', autoRotate: false }\n            },\n            series: [\n                { name: decorationParameters.xDataLabel || 'X', type: 'line3D', data: xSeriesData, itemStyle: { color: 'red' } },\n                { name: decorationParameters.yDataLabel || 'Y', type: 'line3D', data: ySeriesData, itemStyle: { color: 'green' } },\n                { name: decorationParameters.zDataLabel || 'Z', type: 'line3D', data: zSeriesData, itemStyle: { color: 'blue' } },\n\n                { name: `${decorationParameters.xDataLabel || 'X'} Clipping Event`, type: 'scatter3D', symbol: 'circle', symbolSize: 5, itemStyle: { color: 'red' }, data: xClippingPoints },\n                { name: `${decorationParameters.yDataLabel || 'Y'} Clipping Event`, type: 'scatter3D', symbol: 'circle', symbolSize: 5, itemStyle: { color: 'red' }, data: yClippingPoints },\n                { name: `${decorationParameters.zDataLabel || 'Z'} Clipping Event`, type: 'scatter3D', symbol: 'circle', symbolSize: 5, itemStyle: { color: 'red' }, data: zClippingPoints }\n            ]\n        };\n\n        chartInstance.setOption(option);\n        window.addEventListener('resize', () => chartInstance.resize());\n    });\n}\n// export async function buildEChartsBluVibeSimulation(context, data, decorationParameters = {}) {\n//     const chartDom = document.getElementById('bluvibe_frequency_event_echarts');\n//     if (!chartDom || !data || data.length === 0) return;\n//     console.log(data)\n//     const chartInstance = echarts.init(chartDom);\n\n//     const pathData = data.map(d => [d.x, d.y, d.z]);\n//     const xVals = pathData.map(p => p[0]);\n//     const yVals = pathData.map(p => p[1]);\n//     const zVals = pathData.map(p => p[2]);\n\n//     const xMin = Math.min(...xVals);\n//     const xMax = Math.max(...xVals);\n//     const yMin = Math.min(...yVals);\n//     const yMax = Math.max(...yVals);\n//     const zMin = Math.min(...zVals);\n//     const zMax = Math.max(...zVals);\n//     const xRange = xMax - xMin || 1;\n//     const yRange = yMax - yMin || 1;\n//     const zRange = zMax - zMin || 1;\n\n//     const xArrowLength = xRange * 0.15;\n//     const yArrowLength = yRange * 0.15;\n//     const zArrowLength = zRange * 0.15;\n\n//     let index = 0;\n\n//     function getOrientationArrows(point, pitchDeg, rollDeg, yawDeg, lengths) {\n//         const { lx, ly, lz } = lengths;\n//         const pitch = pitchDeg * Math.PI / 180;\n//         const roll  = rollDeg  * Math.PI / 180;\n//         const yaw   = yawDeg   * Math.PI / 180;\n\n//         let xVec = [lx, 0, 0];\n//         let yVec = [0, ly, 0];\n//         let zVec = [0, 0, lz];\n\n//         function rotate(vec, axis, angle) {\n//             const [x, y, z] = vec;\n//             if (axis === 'x') {\n//                 return [x, y * Math.cos(angle) - z * Math.sin(angle), y * Math.sin(angle) + z * Math.cos(angle)];\n//             } else if (axis === 'y') {\n//                 return [x * Math.cos(angle) + z * Math.sin(angle), y, -x * Math.sin(angle) + z * Math.cos(angle)];\n//             } else if (axis === 'z') {\n//                 return [x * Math.cos(angle) - y * Math.sin(angle), x * Math.sin(angle) + y * Math.cos(angle), z];\n//             }\n//             return vec;\n//         }\n\n//         // Apply yaw → pitch → roll\n//         xVec = rotate(rotate(rotate(xVec, 'z', yaw), 'y', pitch), 'x', roll);\n//         yVec = rotate(rotate(rotate(yVec, 'z', yaw), 'y', pitch), 'x', roll);\n//         zVec = rotate(rotate(rotate(zVec, 'z', yaw), 'y', pitch), 'x', roll);\n\n//         return [\n//             [point, [point[0] + xVec[0], point[1] + xVec[1], point[2] + xVec[2]]],\n//             [point, [point[0] + yVec[0], point[1] + yVec[1], point[2] + yVec[2]]],\n//             [point, [point[0] + zVec[0], point[1] + zVec[1], point[2] + zVec[2]]]\n//         ];\n//     }\n\n//     function getOrientationPanel(point, pitchDeg, rollDeg, yawDeg, lengths) {\n//         const { lx, ly } = lengths;\n//         const sizeX = lx * 0.7;\n//         const sizeY = ly * 0.7;\n\n//         const pitch = pitchDeg * Math.PI / 180;\n//         const roll  = rollDeg  * Math.PI / 180;\n//         const yaw   = yawDeg   * Math.PI / 180;\n\n//         let corners = [\n//             [-sizeX/2, -sizeY/2, 0],\n//             [ sizeX/2, -sizeY/2, 0],\n//             [ sizeX/2,  sizeY/2, 0],\n//             [-sizeX/2,  sizeY/2, 0],\n//             [-sizeX/2, -sizeY/2, 0]\n//         ];\n\n//         function rotate(vec, axis, angle) {\n//             const [x, y, z] = vec;\n//             if (axis === 'x') {\n//                 return [x, y * Math.cos(angle) - z * Math.sin(angle), y * Math.sin(angle) + z * Math.cos(angle)];\n//             } else if (axis === 'y') {\n//                 return [x * Math.cos(angle) + z * Math.sin(angle), y, -x * Math.sin(angle) + z * Math.cos(angle)];\n//             } else if (axis === 'z') {\n//                 return [x * Math.cos(angle) - y * Math.sin(angle), x * Math.sin(angle) + y * Math.cos(angle), z];\n//             }\n//             return vec;\n//         }\n\n//         let rotatedCorners = corners.map(v =>\n//             rotate(rotate(rotate(v, 'z', yaw), 'y', pitch), 'x', roll)\n//         );\n\n//         return rotatedCorners.map(([dx, dy, dz]) => [\n//             point[0] + dx,\n//             point[1] + dy,\n//             point[2] + dz\n//         ]);\n//     }\n\n//     function normalizeAngle(angle) {\n//         return ((angle + 180) % 360 + 360) % 360 - 180;\n//     }\n\n//     const initialPitch = data[0].pitch || 0;\n//     const initialRoll  = data[0].roll  || 0;\n//     const initialYaw   = data[0].yaw   || 0;\n\n//     function updatePosition(i) {\n//         const point = pathData[i];\n//         const pitch = normalizeAngle((data[i].pitch || 0) - initialPitch);\n//         const roll  = normalizeAngle((data[i].roll  || 0) - initialRoll);\n//         const yaw   = normalizeAngle((data[i].yaw   || 0) - initialYaw);\n\n//         const lengths = { lx: xArrowLength, ly: yArrowLength, lz: zArrowLength };\n\n//         const [xArrow, yArrow, zArrow] = getOrientationArrows(point, pitch, roll, yaw, lengths);\n//         const panel = getOrientationPanel(point, pitch, roll, yaw, lengths);\n\n//         chartInstance.setOption({\n//             series: [\n//                 { id: 'main-point', data: [point] },\n//                 { id: 'x-arrow', data: xArrow },\n//                 { id: 'y-arrow', data: yArrow },\n//                 { id: 'z-arrow', data: zArrow },\n//                 { id: 'orientation-panel', data: panel }\n//             ]\n//         });\n//     }\n\n//     const option = {\n//         tooltip: {\n//             formatter: (params) => {\n//                 const [x, y, z] = params.value;\n//                 return `X: <b>${Number(x).toPrecision(5)}</b><br>Y: <b>${Number(y).toPrecision(5)}</b><br>Z: <b>${Number(z).toPrecision(5)}</b><br>`;\n//             }\n//         },\n//         grid3D: {\n//             boxWidth: 200,\n//             boxHeight: 200,\n//             boxDepth: 200,\n//             viewControl: {\n//                 projection: 'perspective',\n//                 autoRotate: false,\n//                 damping: 0.8,\n//                 alpha: 30,\n//                 beta: 60,\n//                 center: [0, 0, 0],\n//                 distance: 400,\n//                 zoomSensitivity: 5\n//             }\n//         },\n//         xAxis3D: { type: 'value', name: decorationParameters.xAxisLabel, min: xMin, max: xMax },\n//         yAxis3D: { type: 'value', name: decorationParameters.yAxisLabel, min: yMin, max: yMax },\n//         zAxis3D: { type: 'value', name: decorationParameters.zAxisLabel, min: zMin, max: zMax },\n//         series: [\n//             { type: 'line3D', data: pathData, lineStyle: { width: 2, color: '#6c757d' } },\n//             { id: 'main-point', type: 'scatter3D', data: [pathData[0]], symbolSize: 12, itemStyle: { color: '#0056b3' } },\n//             { id: 'x-arrow', type: 'line3D', data: [], lineStyle: { width: 2, color: '#dc3545' } },\n//             { id: 'y-arrow', type: 'line3D', data: [], lineStyle: { width: 2, color: '#6610f2' } },\n//             { id: 'z-arrow', type: 'line3D', data: [], lineStyle: { width: 2, color: '#343a40' } },\n//             { id: 'orientation-panel', type: 'line3D', data: [], lineStyle: { width: 2, color: '#0056b3' } }\n//         ]\n//     };\n\n//     chartInstance.setOption(option);\n\n//     const scrubber = document.getElementById('playBackGraphSettings');\n//     if (!scrubber) return;\n\n//     scrubber.min = 0;\n//     scrubber.max = pathData.length - 1;\n//     scrubber.value = 0;\n\n//     let playing = false;\n//     let animationFrame;\n\n//     scrubber.addEventListener('input', (e) => {\n//         index = parseInt(e.target.value);\n//         updatePosition(index);\n//     });\n\n//     function animate(startTime) {\n//         if (!playing) return;\n//         const speed = context.get(\"playbackOptions.playbackSpeed\") || 1;\n//         const loop = context.get(\"playbackOptions.isPlayLoop\");\n//         const currentTime = performance.now();\n//         if (!startTime) startTime = currentTime;\n\n//         const elapsed = ((currentTime - startTime) / 1000) * speed;\n//         const frameTime = (data[1]?.time || 1) - (data[0]?.time || 0);\n//         index = Math.floor(elapsed / frameTime);\n\n//         if (index >= data.length) {\n//             if (loop) {\n//                 index = 0;\n//                 startTime = currentTime;\n//             } else {\n//                 playing = false;\n//                 return;\n//             }\n//         }\n//         scrubber.value = index;\n//         updatePosition(index);\n//         animationFrame = requestAnimationFrame(() => animate(startTime));\n//     }\n\n//     document.getElementById('playPauseSettings').onclick = () => {\n//         playing = !playing;\n//         if (playing) animate();\n//         else cancelAnimationFrame(animationFrame);\n//     };\n\n//     updatePosition(0);\n//     window.addEventListener('resize', () => chartInstance.resize());\n// }\nexport async function buildEChartsBluVibeSimulation(context, data, decorationParameters = {}) {\n    const chartDom = document.getElementById('bluvibe_frequency_event_echarts');\n    if (!chartDom) return;\n    const chartInstance = echarts.init(chartDom);\n\n    // Transform data into ECharts 3D format\n    const pathData = data.map(d => [d.x, d.y, d.z]);\n\n    const option = {\n        tooltip: {\n            backgroundColor: 'rgba(50,50,50,0.7)',\n            textStyle: {\n                color: '#fff',\n                fontSize: 12\n            },\n            formatter: function (params) {\n                const [x, y, z] = params.value;\n                return `\n                X: <b>${x}</b><br>\n                Y: <b>${y}</b><br>\n                Z: <b>${z}</b><br>\n                `;\n            }\n        },\n        grid3D: {\n            boxWidth: 200,\n            boxHeight: 200,\n            boxDepth: 200,\n            viewControl: {\n                projection: 'perspective',         // or 'orthographic'\n                autoRotate: false,\n                panSensitivity: 1,\n                rotateSensitivity: 1,\n                zoomSensitivity: 1,\n\n                // Enable free movement\n                damping: 0.8,                      // Smoother motion\n                alpha: 30,                         // Default vertical angle\n                beta: 60,                          // Default horizontal angle\n                minAlpha: -90,\n                maxAlpha: 90,\n                minBeta: -180,\n                maxBeta: 180,\n\n                center: [0, 0, 0],                 // Pivot point\n                distance: 400,                     // Default camera distance\n                minDistance: 40,\n                maxDistance: 500,\n\n                panMouseButton: 'left',           // Enable pan with left-click\n                rotateMouseButton: 'right',       // Right-click to rotate\n                zoomMouseButton: 'middle'         // Middle button or scroll to zoom\n            }\n        },\n        xAxis3D: { type: 'value', name: decorationParameters.xAxisLabel, },\n        yAxis3D: { type: 'value', name: decorationParameters.yAxisLabel, },\n        zAxis3D: { type: 'value', name: decorationParameters.zAxisLabel, },\n        series: [\n            {\n                type: 'line3D',\n                data: pathData,\n                lineStyle: {\n                    width: 2,\n                    color: '#007bff'\n                }\n            },\n            {\n                type: 'scatter3D',\n                data: [pathData[0]],\n                symbolSize: 12,\n                itemStyle: { color: '#ff0000' }\n            }\n        ]\n    };\n\n    chartInstance.setOption(option);\n\n    const scrubber = document.getElementById('playBackGraphSettings');\n    if (!scrubber) {\n        console.warn(\"Scrubber element not found!\");\n        return;\n    }\n\n    scrubber.min = 0;\n    scrubber.max = pathData.length - 1;\n    scrubber.value = 0;\n\n    let index = 0;\n    let playing = false;\n    let animationFrame;\n\n    // Update scatter position based on slider\n    function updatePosition(frameIndex) {\n        option.series[1].data = [pathData[frameIndex]];\n        chartInstance.setOption(option);\n    }\n\n    // Scrubber event listener\n    scrubber.addEventListener('input', (e) => {\n        index = parseInt(e.target.value);\n        updatePosition(index);\n    });\n\n    // Play animation function\n    function animate(startTime) {\n        if (!playing) return;\n\n        const playbackSpeed = context.get(\"playbackOptions.playbackSpeed\"); // 1, 0.75, 0.5, 0.25\n        const isInfPlayback = context.get(\"playbackOptions.isPlayLoop\");\n\n        const currentTime = performance.now();\n        if (!startTime) startTime = currentTime;\n\n        const elapsedSeconds = ((currentTime - startTime) / 1000) * playbackSpeed;\n\n        // Calculate index based on elapsed time and frame time step\n        const frameTime = data[1].time - data[0].time; // e.g. 0.002s\n        index = Math.floor(elapsedSeconds / frameTime);\n\n        if (index >= data.length) {\n            if (isInfPlayback) {\n                index = 0;\n                startTime = currentTime;\n            } else {\n                playing = false;\n                return;\n            }\n        }\n\n        scrubber.value = index;\n        updatePosition(index);\n\n        animationFrame = requestAnimationFrame(() => animate(startTime));\n    }\n\n    // Play/pause button\n    const playButton = document.getElementById('playPauseSettings');\n    playButton.onclick = () => {\n        playing = !playing;\n        if (playing) animate();\n        else cancelAnimationFrame(animationFrame);\n    };\n\n\n    window.addEventListener('resize', () => chartInstance.resize());\n}\n//Make POST & PATCH requests \nexport function sendGETRequest(endpoint, queryParams = {}) {\n    return new Promise(async (resolve, reject) => {\n        try {\n            let url = `${getApiBaseUrl()}/${endpoint}`;\n            const queryString = new URLSearchParams(queryParams).toString();\n            if (queryString) {\n                url += `?${queryString}`;\n            }\n\n            const response = await fetch(url, {\n                method: 'GET',\n                headers: {\n                    'Content-Type': 'application/json',\n                    Authorization: 'Bearer ' + localStorage.token\n                }\n            });\n\n            if (response.status === 401 || response.status === 403) {\n                showPopup([`${url}`, `${response.status}: ${response.statusText}`], 'error', 4);\n                return reject(new Error(`${response.status}: ${response.statusText}`));\n            }\n\n            if (response.ok) { // covers 200–299\n                const responseData = await response.json();\n                const newData = convertKeysToCamelCase(responseData);\n                return resolve(newData);\n            } else {\n                return reject(new Error(`${response.status}: ${response.statusText}`));\n            }\n        } catch (error) {\n            console.error('Error submitting data:', error);\n            reject(error);\n        }\n    });\n}\nfunction convertKeysToCamelCase(obj) {\n    /**\n        context helper function is a generic helper function used to convert kebab-case to camelCase, so that I can take the obj and see it as normal JSON object \n        const inputFrom = {\n            'sensor-name': 'Temperature Sensor',\n            'sensor-id': 12345,\n            'nested-data': {\n            'calibration-date': '2024-12-15',\n            'sensor-details': [\n                { 'sensor-value': 100, 'sensor-unit': 'C' },\n                { 'sensor-value': 200, 'sensor-unit': 'F' }\n            ]\n            }\n        };\n        const inputTo =  {\n            sensorName: 'Temperature Sensor',\n            sensorId: 12345,\n            nestedData: {\n            calibrationDate: '2024-12-15',\n            sensorDetails: [\n                { sensorValue: 100, sensorUnit: 'C' },\n                { sensorValue: 200, sensorUnit: 'F' }\n            ]\n            }\n        }\n    */\n\n    if (Array.isArray(obj)) {\n      return obj.map(v => convertKeysToCamelCase(v));\n    } else if (obj !== null && typeof obj === 'object') {\n      return Object.fromEntries(\n        Object.entries(obj).map(([key, value]) => [\n          key.replace(/-([a-z])/g, (_, char) => char.toUpperCase()), // Convert kebab-case to camelCase\n          convertKeysToCamelCase(value)\n        ])\n      );\n    }\n    return obj;\n}\nexport async function sendPOSTRequest(endpoint, data){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint + \"/\";\n        const response = await fetch(url, {\n          method: 'POST',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n          body: JSON.stringify(data),\n        });\n        if (response.status == 401 || response.status == 403) {\n            showPopup([`${url}`, `${response.status}: ${response.statusText}`], 'error', 4);\n        }\n        else if ((response.status == 200) || (response.status == 201)) {\n            const responseData = await response.json();\n            return true; // Return true if status code is 201\n        } \n         \n      } catch (error) {\n        console.error('Error submitting data:', error);\n      }\n      return false;\n}\nexport async function sendPOSTRequest2(endpoint, data){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint + \"/\";\n        const response = await fetch(url, {\n          method: 'POST',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n          body: JSON.stringify(data),\n        });\n        if (response.status == 401 || response.status == 403) {\n            showPopup([`${url}`, `${response.status}: ${response.statusText}`], 'error', 4);\n        }\n        else if ((response.status == 200) || (response.status == 201)) {\n            const responseData = await response.json();\n            return responseData; // Return true if status code is 201\n        } \n         \n      } catch (error) {\n        console.error('Error submitting data:', error);\n      }\n      return null;\n}\nexport async function sendPATCHRequest(endpoint, data){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint + \"/\";\n        const response = await fetch(url, {\n          method: 'PATCH',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n          body: JSON.stringify(data),\n        });\n        if (response.status == 401 || response.status == 403) {\n            showPopup([`${url}`, `${response.status}: ${response.statusText}`], 'error', 4);\n        }\n        else if ((response.status == 200) || (response.status == 201)) {\n            const responseData = await response.json();\n            return true; // Return true if status code is 201\n        } \n         \n      } catch (error) {\n        console.error('Error submitting data:', error);\n      }\n      return false;\n}\nexport async function sendDELETERequest(endpoint){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint + \"/\";\n        const response = await fetch(url, {\n          method: 'DELETE',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n        });\n  \n        if (response.status == 401 || response.status == 403) {\n            showPopup([`${url}`, `${response.status}: ${response.statusText}`], 'error', 4);\n        }\n        else if ((response.status == 200) || (response.status == 201)) {\n            const responseData = await response.json();\n            return true; // Return true if status code is 201\n        } \n         \n      } catch (error) {\n        console.error('Error submitting data:', error);\n      }\n      return false;\n}\n\n//General Utilities\nexport function get3DAnimationData(context, data, pitchRollYawData){\n    try {\n        let newData = []\n        console.log(pitchRollYawData)\n        data.forEach((dataObj, index)=>{\n            dataObj = dataObj[\"attributes\"];\n            let pitchRollYawDataObj = pitchRollYawData[index][\"attributes\"];\n            // console.log(dataObj);\n            newData.push({\n                time: dataObj['x']['time'],\n                x: dataObj['x']['displacement'],\n                y: dataObj['y']['displacement'],\n                z: dataObj['z']['displacement'],\n                pitch: pitchRollYawDataObj['x']['pitch'], //Data is hardcode secretly put in x:{} of the pitchRollYawDataObj\n                roll:  pitchRollYawDataObj['x']['roll'], //Data is hardcode secretly put in x:{} of the pitchRollYawDataObj\n                yaw:   pitchRollYawDataObj['x']['yaw'], //Data is hardcode secretly put in x:{} of the pitchRollYawDataObj\n\n            })\n        });\n        return newData;\n    } catch (error) {\n        console.error('Error in get3DAnimationData:', error.message);\n        console.error(error.stack);\n    }\n}\nexport function parseDataForEChartsXYZFocus3DLine(context, data,xAxisDataKey, yAxisDataKey){\n    /**\n     * Return data:\n     * xData:[\n     *  {\n     *      x: timeValue,\n     *      y: 0,\n     *      z: xValue,\n     *      isXClipping:     \n     *      isYClipping: \n     *      isZClipping: \n     *  },...\n     * ],\n     * yData:[\n     *  {\n     *      x: timeValue,\n     *      y: 1,\n     *      z: yValue,\n     *      isXClipping:     \n     *      isYClipping: \n     *      isZClipping: \n     *  },...\n     * ],\n     * zData:[\n     *  {\n     *      x: timeValue,\n     *      y: 2,\n     *      z: zValue,\n     *      isXClipping:     \n     *      isYClipping: \n     *      isZClipping: \n     *  },...\n     * ]\n     */\n    let dataCollection = {xData:[], yData:[],zData:[]};\n    data.forEach((dataObj, index)=>{\n        dataObj = dataObj[\"attributes\"];\n        // console.log(dataObj)\n        //BUILD DATA FOR GRAPH\n        //Handle x hard code y=0\n        dataCollection.xData.push({\n            x:dataObj[\"x\"][xAxisDataKey],\n            y:0,\n            z:dataObj[\"x\"][yAxisDataKey],\n            isXClipping:(dataObj[\"data\"].hasOwnProperty(`isXClipping`)) && (dataObj[\"data\"][\"isXClipping\"] == true) ? true : false,\n        })\n        //Handle y hard code y=1\n        dataCollection.yData.push({\n            x:dataObj[\"y\"][xAxisDataKey],\n            y:0.5,\n            z:dataObj[\"y\"][yAxisDataKey],\n            isYClipping:(dataObj[\"data\"].hasOwnProperty(`isYClipping`)) && (dataObj[\"data\"][\"isYClipping\"] == true) ? true : false,\n        })\n\n        //Handle z hard code y=2\n        dataCollection.zData.push({\n            x:dataObj[\"z\"][xAxisDataKey],\n            y:1,\n            z:dataObj[\"z\"][yAxisDataKey],\n            isZClipping:(dataObj[\"data\"].hasOwnProperty(`isZClipping`)) && (dataObj[\"data\"][\"isZClipping\"] == true) ? true : false,\n        })\n    });\n    return dataCollection;\n}\nexport function parseDataForEChartsXFocusYFocusZFocus2DLine(context, data, axisFocus, yAxisDataKey){\n    /**\n     * [\n     *  {\n     *  x: timeValue,\n     *  y: xValue,\n     *  isXClipping\n     *  },...\n     * or\n     *  {\n     *  x: timeValue,\n     *  y: yValue,\n     *  isYClipping\n     *  },...\n     * or\n     *  {\n     *  x: timeValue,\n     *  y: zValue,\n     *  isZClipping\n     *  },...\n     * ]\n     * axisFocus is either: x/y/z,\n     * yAxisDataKey: value/acceleration/velocty/displacement\n     */\n    let result = [];\n    data.forEach((dataObj, index)=>{\n        dataObj=dataObj[\"attributes\"];\n        let obj = {};\n        obj[\"x\"] = dataObj[axisFocus][\"time\"];\n        obj[\"y\"] = dataObj[axisFocus][yAxisDataKey];\n        if((dataObj[\"data\"].hasOwnProperty(`is${axisFocus.toUpperCase()}Clipping`)) && (dataObj[\"data\"][`is${axisFocus.toUpperCase()}Clipping`] == true)){\n            // console.log(`found one! is${axisFocus.toUpperCase()}Clipping: ${dataObj[\"data\"][`is${axisFocus.toUpperCase()}Clipping`]}`)\n            obj[`is${axisFocus.toUpperCase()}Clipping`] = dataObj[\"data\"][`is${axisFocus.toUpperCase()}Clipping`];\n        }\n        result.push(obj);\n    });\n    return result;\n}\nexport function parseDataForEChartsXFocusYFocusZFocus3DLine(context, data, axisFocus, yAxisDataKey){\n    /**\n     * axisFocus is either: x/y/z,\n     * yAxisDataKey: value/acceleration/velocty/displacement\n     */\n    let result = [];\n    data.forEach((dataObj, index)=>{\n        dataObj=dataObj[\"attributes\"];\n        let obj = {};\n        obj[\"x\"] = dataObj[axisFocus][\"time\"];\n        obj[\"y\"] = 0;\n        obj[\"z\"] = dataObj[axisFocus][yAxisDataKey];\n        result.push(obj);\n\n    });\n    return result;\n}\nexport function parseDataForEChartsXFocusYFocusZFocus2DBar(context, data, axisFocus, xAxisDataKey, yAxisDataKey){\n    let result = {x:[], y:[]};\n\n    data.forEach((dataObj, index)=>{\n        dataObj=dataObj[\"attributes\"];\n        result['x'].push(dataObj[axisFocus][xAxisDataKey]);\n        result['y'].push(dataObj[axisFocus][yAxisDataKey]);\n\n    });\n    return result;\n}\nexport function parseDataForEChartsXFocusYFocusZFocus3DBar(context, data, axisFocus, xAxisDataKey, yAxisDataKey){\n    /**\n     * [\n     *  {\n     *      x:xAxisDataKey,\n     *      y:0,\n     *      z: yAxisDataKey\n     *  },..\n     * ]\n     */\n    let result = {x:[], y:[],z:[]};\n    data.forEach((dataObj, index)=>{\n        dataObj=dataObj[\"attributes\"];\n        result[\"x\"].push(dataObj[axisFocus][xAxisDataKey]);\n        result[\"y\"].push(0);\n        result[\"z\"].push(dataObj[axisFocus][yAxisDataKey]);\n\n    });\n    return result;\n}\nexport function getGraphUnit(category){\n    switch(category){\n        case \"acceleration\":\n            return \"mm/s\\u00B2\";\n        case \"velocity\":\n            return \"mm/s\";\n        case \"time\":\n            return \"s\";\n        case \"distance\":\n            return \"mm\";\n        case \"displacement\":\n            return \"mm\";\n        case \"frequency\":\n            return \"Hz\";\n        default:\n            return \"Value\";\n    }\n}","import { next, schedule, scheduleOnce } from '@ember/runloop';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\nimport { textLibrary} from '../helpers/frequency-event-language-library';\n\n\n//Popup & Notification Section\nexport async function  buildFrequencyEventsOverviewBoard(context, profile_obj){\n    context.set(\"isShowConfig.isShowPopupNotification\", true);\n\n    let responseData = await sendGETRequest(`bluvibev2/`,{profileID:profile_obj.id});\n    const responseObj = responseData['data'][0];\n    const analytics = responseObj['analytics']\n    scheduleOnce('afterRender', context, () => {\n        const masterPopupContent = document.getElementById('notificationPopupContentBody');\n        if(masterPopupContent){\n\n            masterPopupContent.innerHTML = '';\n\n            // Main Title\n            const mainTitle = document.createElement('div');\n            mainTitle.style.marginTop = '10px';\n            mainTitle.style.fontSize = 'large';\n            mainTitle.style.textDecoration = 'underline';\n            mainTitle.style.fontWeight = 'bold';\n            mainTitle.textContent = `Event ${responseObj['id']}`;\n            masterPopupContent.appendChild(mainTitle);\n\n            //Row: Overview\n            const row1 = document.createElement('div');\n            row1.style.marginTop = '10px';\n            row1.style.marginLeft = '10px';\n            row1.style.fontWeight = 'bold';\n            row1.textContent = `Overview`;\n            masterPopupContent.appendChild(row1);\n\n            //Row: Timestamp, Sensor ID\n            const row2 = document.createElement('div');\n            row2.style.marginTop = '10px';\n            row2.style.marginLeft = '10px';\n            row2.style.fontSize = 'medium';\n            row2.style.fontWeight = 'bold';\n            row2.style.display = 'flex';\n            row2.style.flexDirection = 'row';\n            row2.style.justifyContent = 'space-evenly';\n            masterPopupContent.appendChild(row2);\n            //SensorID Section\n            const sensorIDSection = document.createElement('div');\n            sensorIDSection.style.fontWeight = 'normal';\n            sensorIDSection.style.fontSize= `small`;\n            sensorIDSection.textContent = `Sensor ID: ${responseObj['parent']['id']}`;\n            row2.appendChild(sensorIDSection);\n            //Timestamp Section\n            const timestampSection = document.createElement('div');\n            timestampSection.style.fontWeight = 'normal';\n            timestampSection.style.fontSize= `small`;\n            timestampSection.textContent = `Timestamp: ${responseObj['timestamp']}`;\n            row2.appendChild(timestampSection);\n\n\n            //Row: Technical Overview\n            const row3 = document.createElement('div');\n            row3.style.marginTop = '10px';\n            row3.style.marginLeft = '10px';\n            row3.style.fontWeight = 'bold';\n            row3.textContent = `Technical Overview`;\n            masterPopupContent.appendChild(row3);\n            //Row: Range, Sample, Trigger\n            const row4 = document.createElement('div');\n            row4.style.marginTop = '10px';\n            row4.style.marginLeft = '10px';\n            row4.style.fontSize = 'medium';\n            row4.style.fontWeight = 'bold';\n            row4.style.display = 'flex';\n            row4.style.flexDirection = 'row';\n            row4.style.justifyContent = 'space-evenly';\n            masterPopupContent.appendChild(row4);\n            //Range Section\n            const rangeSection = document.createElement('div');\n            rangeSection.style.fontWeight = 'normal';\n            rangeSection.style.fontSize= `small`;\n            rangeSection.textContent = `Range: ${responseObj['range']}`;\n            row4.appendChild(rangeSection);\n            //Duration Section\n            const durationSection = document.createElement('div');\n            durationSection.style.fontWeight = 'normal';\n            durationSection.style.fontSize= `small`;\n            durationSection.textContent = `Duration: ${responseObj['duration']}`;\n            row4.appendChild(durationSection);\n            //Sample Section\n            const sampleSection = document.createElement('div');\n            sampleSection.style.fontWeight = 'normal';\n            sampleSection.style.fontSize= `small`;\n            sampleSection.textContent = `Sample: ${responseObj['sample']}`;\n            row4.appendChild(sampleSection);\n            //Trigger Section\n            const triggerSection = document.createElement('div');\n            triggerSection.style.fontWeight = 'normal';\n            triggerSection.style.fontSize= `small`;\n            triggerSection.textContent = `Trigger: ${responseObj['trigger']}`;\n            row4.appendChild(triggerSection);\n\n            // XYZ & Freq/Amp/PPV/PPA Table\n            const table = document.createElement('table');\n            table.style.marginTop=\"10px\"\n            table.style.marginLeft = '20px';\n            \n            //Columns\n            const thead = document.createElement('thead');\n            thead.style.borderBottom= ``;\n            const trColumns = document.createElement('tr');\n\n            const  row1HeaderObject = [\n                {key:\"axis\",label:\"Axis\",},\n                {key:\"frequency\",label:\"Frequency\",},\n                {key:\"amplitude\",label:\"Amplitude\",},\n                {key:\"ppv\",label:\"PPV\",},\n                {key:\"ppa\",label:\"PPA\",},\n            ]\n            const axisArray = [\"X\", \"Y\", \"Z\"];\n            row1HeaderObject.forEach((columnObject, index)=>{\n                const thColumn = document.createElement('th');\n                thColumn.style.fontSize= `small`;\n                thColumn.style.border= `solid`;\n                thColumn.style.borderWidth= `1px`;\n                thColumn.style.borderColor= `black`;\n                thColumn.style.textAlign ='center';\n                thColumn.textContent= `${columnObject['label']}`;\n                trColumns.appendChild(thColumn);\n            });\n\n            thead.appendChild(trColumns);\n            table.appendChild(thead);\n            //Rows\n            const tbody = document.createElement('tbody');\n            for(let i=0;i < axisArray.length;i++){\n                const trRows = document.createElement('tr');\n                row1HeaderObject.forEach((columnObject, index)=>{\n                    const tdRowData = document.createElement('td');\n                    tdRowData.style.fontSize= `small`;\n                    tdRowData.style.border= `solid`;\n                    tdRowData.style.borderWidth= `1px`;\n                    tdRowData.style.textAlign ='center';\n                    switch(columnObject['key']){\n                        case \"axis\":\n                            tdRowData.textContent= `${axisArray[i]}`;\n                            break;\n                        default:\n                            tdRowData.textContent= `${responseObj[columnObject['key']] ? responseObj[columnObject['key']][i] : \"N/A\"}`;\n                            break;\n\n                    }\n\n                    trRows.appendChild(tdRowData);\n                });\n                tbody.appendChild(trRows);\n            }\n\n            table.appendChild(tbody);\n\n\n\n            //Row: Additional\n            const row5 = document.createElement('div');\n            row5.style.marginTop = '10px';\n            row5.style.marginLeft = '10px';\n            row5.style.fontWeight = 'bold';\n            row5.textContent = `Additonal`;\n            masterPopupContent.appendChild(row5);\n                        \n            const defaultTabIndex = 10;\n            if(analytics.hasOwnProperty(`clippingData`) && analytics['clippingData'].length > 0){\n                //Clipping Data Title \n                const clippingDataSection = document.createElement('div');\n                clippingDataSection.style.marginLeft = `${3 * defaultTabIndex}px`;\n                clippingDataSection.style.fontWeight = 'bold';\n                clippingDataSection.style.fontSize= `small`;\n                clippingDataSection.textContent = \"- Clipping Detected!\"\n                masterPopupContent.appendChild(clippingDataSection);\n            }\n\n\n            // masterPopupContent.appendChild(table);\n    \n            //Display and setup Ok Button notificationRefreshButton\n            const okButtonComponent = document.getElementById('notificationOkButton');\n            okButtonComponent.style.display = \"block\";\n            okButtonComponent.onclick = () => {\n                context.send('closeNotificationPopup'); \n            };\n        }\n    });\n}\nexport async function  buildDeleteWarningBoard(context, profile_obj){\n    context.set(\"isShowConfig.isShowPopupNotification\", true);\n\n    scheduleOnce('afterRender', context, () => {\n        const masterPopupContent = document.getElementById('notificationPopupContentBody');\n        if(masterPopupContent){\n\n            masterPopupContent.innerHTML = '';\n\n            // Main Title\n            const mainTitle = document.createElement('div');\n            mainTitle.style.marginTop = '10px';\n            mainTitle.style.fontSize = 'large';\n            mainTitle.style.textDecoration = 'underline';\n            mainTitle.style.fontWeight = 'bold';\n            mainTitle.textContent = `Delete ${profile_obj.id}`;\n            masterPopupContent.appendChild(mainTitle);\n            // Warning\n            const warning1Section = document.createElement('div');\n            warning1Section.style.alignSelf = \"center\";\n            warning1Section.textContent = `Are you sure you want to delete this event profile ${profile_obj.id}?`;\n            masterPopupContent.appendChild(warning1Section);\n            // Warning\n            const warning2Section = document.createElement('div');\n            warning2Section.style.alignSelf = \"center\";\n            warning2Section.style.fontWeight = 'bold';\n            warning2Section.textContent = `Deletion cannot be undone, you will lose all data associated with it!`;\n            masterPopupContent.appendChild(warning2Section);\n    \n            const yesButtonComponent = document.getElementById('notificationYesButton');\n            yesButtonComponent.style.display = \"block\";\n            yesButtonComponent.style.marginRight = \"10px\";\n            yesButtonComponent.onclick = async () => {\n                if (await sendDELETERequest(`bluvibev2/${profile_obj.id}`)){\n                    window.location.reload();\n\n                }else{\n                };\n                \n            };\n            const cancelButtonComponent = document.getElementById('notificationCancelButton');\n            cancelButtonComponent.style.display = \"block\";\n            cancelButtonComponent.onclick = () => {\n                context.send('closeNotificationPopup'); \n            };\n        }\n    });\n\n    \n}\nexport async function  buildFrequencyEventsEditBoard(context, profile_obj){\n    context.set(\"isShowConfig.isShowPopupNotification\", true);\n\n    let responseData = await sendGETRequest(`bluvibev2/`,{profileID:profile_obj.id});\n    const data = responseData['data'];\n    if(data.length == 1){\n        scheduleOnce('afterRender', context, () => {\n            let responseObj = data[0];\n            const masterPopupContent = document.getElementById('notificationPopupContentBody');\n            if(masterPopupContent){\n\n                masterPopupContent.innerHTML = '';\n\n                // Main Title\n                const mainTitle = document.createElement('div');\n                mainTitle.style.marginTop = '10px';\n                mainTitle.style.fontSize = 'large';\n                mainTitle.style.textDecoration = 'underline';\n                mainTitle.style.fontWeight = 'bold';\n                mainTitle.textContent = `Edit Event ${profile_obj.id}`;\n                masterPopupContent.appendChild(mainTitle);\n\n                //Row: Sample, Range, Trigger\n                const row1 = document.createElement('div');\n                row1.style.display = 'flex';\n                row1.style.flexDirection = 'row';\n                row1.style.justifyContent = 'space-evenly';\n                masterPopupContent.appendChild(row1);\n                //Sample Section\n                const sampleSection = document.createElement('div');\n                sampleSection.style.display=\"flex\";\n                sampleSection.style.alignItems=\"center\"\n                sampleSection.textContent = `Sample:`;\n                const sampleElement = document.createElement('td');\n                sampleElement.classList.add('input');\n                const inputSampleElement = document.createElement('input');\n                inputSampleElement.classList.add('form-control'); \n                inputSampleElement.setAttribute('type', 'number');\n                inputSampleElement.id=`frequency_events-sample`;\n                inputSampleElement.value = profile_obj.sample;\n\n                sampleElement.appendChild(inputSampleElement);\n                sampleSection.appendChild(sampleElement);\n                row1.appendChild(sampleSection);\n                //Range Section\n                const rangeSection = document.createElement('div');\n                rangeSection.style.display=\"flex\";\n                rangeSection.style.alignItems=\"center\"\n                rangeSection.textContent = `Range:`;\n                const rangeElement = document.createElement('td');\n                rangeElement.classList.add('input');\n                const inputRangeElement = document.createElement('input');\n                inputRangeElement.classList.add('form-control'); \n                inputRangeElement.setAttribute('type', 'number');\n                inputRangeElement.id=`frequency_events-range`;\n                inputRangeElement.value = profile_obj.range;\n\n                rangeElement.appendChild(inputRangeElement);\n                rangeSection.appendChild(rangeElement);\n                row1.appendChild(rangeSection);\n                //Trigger Section\n                const triggerSection = document.createElement('div');\n                triggerSection.style.display=\"flex\";\n                triggerSection.style.alignItems=\"center\"\n                triggerSection.textContent = `Trigger:`;\n                const triggerElement = document.createElement('td');\n                triggerElement.classList.add('input');\n                const inputTriggerElement = document.createElement('input');\n                inputTriggerElement.classList.add('form-control'); \n                inputTriggerElement.setAttribute('type', 'number');\n                inputTriggerElement.id=`frequency_events-trigger`;\n                inputTriggerElement.value = profile_obj.trigger;\n\n                triggerElement.appendChild(inputTriggerElement);\n                triggerSection.appendChild(triggerElement);\n                row1.appendChild(triggerSection);\n            \n        \n                const saveButtonComponent = document.getElementById('notificationSaveButton');\n                saveButtonComponent.style.display = \"block\";\n                saveButtonComponent.style.marginRight = \"10px\";\n                saveButtonComponent.onclick = async () => {\n                    try{\n                        const tbIDs = [\"frequency_events-sample\", \"frequency_events-range\", \"frequency_events-trigger\"];\n                        let objBody = {};\n                        tbIDs.forEach(id=>{\n                            objBody[id.split(\"-\")[1]] = parseInt(document.getElementById(id).value);\n                        })\n                        if (await sendPATCHRequest(`bluvibev2/${profile_obj.id}`, objBody)){\n                            context.send('closeNotificationPopup'); \n                            window.location.reload();\n    \n                        }else{\n                        };\n                                                    \n                    }catch(err){\n                        console.log(`Error in buildFrequencyEventsEditBoard Save button: ${err.message}`);\n                        \n                    }\n                };\n                const cancelButtonComponent = document.getElementById('notificationCancelButton');\n                cancelButtonComponent.style.display = \"block\";\n                cancelButtonComponent.onclick = () => {\n                    context.send('closeNotificationPopup'); \n                };\n            }\n        });\n\n    }\n}\n//Make POST & PATCH requests \nexport async function sendGETRequest(endpoint, queryParams = {}){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint;\n        const queryString = new URLSearchParams(queryParams).toString();\n        if (queryString) {\n          url += `?${queryString}`;\n        }\n        const response = await fetch(url, {\n          method: 'GET',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n        });\n        if (response.status == 401 || response.status == 403) {\n            showPopup([`${url}`, `${response.status}: ${response.statusText}`], 'error', 4);\n        }\n        else if ((response['status'] == 200) || (response['status'] == 201)) {\n            const responseData = await response.json();\n            const newData = convertKeysToCamelCase(responseData);\n            return newData; // Return true if status code is 201\n        } \n         \n    } \n    catch (error) {\n    console.error('Error submitting data:', error);\n    }\n    return false;\n}\nfunction convertKeysToCamelCase(obj) {\n    /**\n        This helper function is a generic helper function used to convert kebab-case to camelCase, so that I can take the obj and see it as normal JSON object \n        const inputFrom = {\n            'sensor-name': 'Temperature Sensor',\n            'sensor-id': 12345,\n            'nested-data': {\n            'calibration-date': '2024-12-15',\n            'sensor-details': [\n                { 'sensor-value': 100, 'sensor-unit': 'C' },\n                { 'sensor-value': 200, 'sensor-unit': 'F' }\n            ]\n            }\n        };\n        const inputTo =  {\n            sensorName: 'Temperature Sensor',\n            sensorId: 12345,\n            nestedData: {\n            calibrationDate: '2024-12-15',\n            sensorDetails: [\n                { sensorValue: 100, sensorUnit: 'C' },\n                { sensorValue: 200, sensorUnit: 'F' }\n            ]\n            }\n        }\n    */\n\n    if (Array.isArray(obj)) {\n      return obj.map(v => convertKeysToCamelCase(v));\n    } else if (obj !== null && typeof obj === 'object') {\n      return Object.fromEntries(\n        Object.entries(obj).map(([key, value]) => [\n          key.replace(/-([a-z])/g, (_, char) => char.toUpperCase()), // Convert kebab-case to camelCase\n          convertKeysToCamelCase(value)\n        ])\n      );\n    }\n    return obj;\n}\nexport async function sendPOSTRequest(endpoint, data){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint + \"/\";\n        const response = await fetch(url, {\n          method: 'POST',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n          body: JSON.stringify(data),\n        });\n        if (response.status == 401 || response.status == 403) {\n            showPopup([`${url}`, `${response.status}: ${response.statusText}`], 'error', 4);\n        }\n        else if ((response.status == 200) || (response.status == 201)) {\n            const responseData = await response.json();\n            return true; // Return true if status code is 201\n        } \n         \n      } catch (error) {\n        console.error('Error submitting data:', error);\n      }\n      return false;\n}\nexport async function sendPOSTRequest2(endpoint, data){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint + \"/\";\n        const response = await fetch(url, {\n          method: 'POST',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n          body: JSON.stringify(data),\n        });\n        if (response.status == 401 || response.status == 403) {\n            showPopup([`${url}`, `${response.status}: ${response.statusText}`], 'error', 4);\n        }\n        else if ((response.status == 200) || (response.status == 201)) {\n            const responseData = await response.json();\n            return responseData; // Return true if status code is 201\n        } \n         \n      } catch (error) {\n        console.error('Error submitting data:', error);\n      }\n      return null;\n}\nexport async function sendPATCHRequest(endpoint, data){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint + \"/\";\n        const response = await fetch(url, {\n          method: 'PATCH',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n          body: JSON.stringify(data),\n        });\n        if (response.status == 401 || response.status == 403) {\n            showPopup([`${url}`, `${response.status}: ${response.statusText}`], 'error', 4);\n        }\n        else if ((response.status == 200) || (response.status == 201)) {\n            const responseData = await response.json();\n            return true; // Return true if status code is 201\n        } \n         \n      } catch (error) {\n        console.error('Error submitting data:', error);\n      }\n      return false;\n}\nexport async function sendDELETERequest(endpoint){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint + \"/\";\n        const response = await fetch(url, {\n          method: 'DELETE',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n        });\n  \n        if (response.status == 401 || response.status == 403) {\n            showPopup([`${url}`, `${response.status}: ${response.statusText}`], 'error', 4);\n        }\n        else if ((response.status == 200) || (response.status == 201)) {\n            const responseData = await response.json();\n            return true; // Return true if status code is 201\n        } \n         \n      } catch (error) {\n        console.error('Error submitting data:', error);\n      }\n      return false;\n}\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport function freqEventsValidateForRedWarning(params) {\n    if(params[0] == null)\n        return false\n    const profileObj = params[0];\n    if(profileObj[\"analytics\"].hasOwnProperty(`clippingData`) && profileObj[\"analytics\"][\"clippingData\"].length > 0)\n        return true;\n    //For Future: Check for .... Data, immediately trigger red warning\n    return false;\n\n}\n\nexport default helper(freqEventsValidateForRedWarning\n    \n);\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport function getArrayElement(params/*, hash*/) {\n  if (params[0] && typeof params[1] !== undefined) {\n        let index = params[1];\n        return params[0][ index ];\n    }\n}\n\nexport default helper(getArrayElement);\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport function getArrayValue(array, idx) {\n  try {\n    // console.log(array);\n    // console.log(idx);\n    return array[idx];\n  } catch {\n    return false;\n  }\n}\n \n\nexport default helper(getArrayValue);\n","import { helper } from '@ember/component/helper';\nimport { htmlSafe } from '@ember/template';\n\n// Mirrors the BE's progression keys (see DATA_KEY_TO_PROGRESSION_STAGE in\n// packs-validation-library.js). Phase II keys carry a `s<N>_` step number that\n// follows operator execution order, so iterating in array order yields a\n// chronological \"completed N of 6\" rather than a scrambled count.\nconst STAGE_KEYS = [\n    'p1_unloadData', 'p1_loadData',\n    'p2_s1_unloadData', 'p2_s2_loadData', 'p2_s3_loadData', 'p2_s4_unloadData',\n];\nconst TOTAL = STAGE_KEYS.length;\n\nexport function getPacksValidationProgression([packProfile]) {\n    let completed = 0;\n    const progression = packProfile && packProfile['progression'];\n    if(progression){\n        for(const key of STAGE_KEYS){\n            if(progression[key] && progression[key]['is_complete']){\n                completed += 1;\n            }\n        }\n    }\n    const pct = Math.round((completed / TOTAL) * 100);\n    return htmlSafe(\n        `<div class=\"pv-table-progression-bar\" title=\"${completed}/${TOTAL} stages complete\">` +\n            `<div class=\"pv-table-progression-fill\" style=\"width:${pct}%;\"></div>` +\n            `<div class=\"pv-table-progression-label\">${completed}/${TOTAL}</div>` +\n        `</div>`\n    );\n}\n\nexport default helper(getPacksValidationProgression);\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport function getPacksValidationProgression(packProfile) {\n\n    let packData = packProfile[0]['validationData'];\n    // console.log(packData);\n    //P1 validity Row\n    let phase1VerdictString = \"\";\n    let phase2VerdictString = \"\";\n    const isAllDataProvided1 = packData != null && packData['phase1LoadData'] != null && packData['phase1LoadData'].length > 0 &&\n    packData['phase1UnloadData'] != null && packData['phase1UnloadData'].length > 0 \n\n    if(packData != null &&  isAllDataProvided1 && packData['phase1ValidityData'] != null){\n        phase1VerdictString = `${packData['phase1ValidityData']['final'] ? \"PASS\" : \"FAIL\"}`;\n    }else{\n        phase1VerdictString = \"N/A\"\n    }\n    const isAllDataProvided = packData != null &&  packData['phase2LoadData1'] != null && packData['phase2LoadData1'].length > 0 &&\n    packData['phase2LoadData2'] != null && packData['phase2LoadData2'].length > 0 &&\n    packData['phase2UnloadData1'] != null && packData['phase2UnloadData1'].length > 0 &&\n    packData['phase2UnloadData2'] != null && packData['phase2UnloadData2'].length > 0\n\n    if(packData != null &&  isAllDataProvided && packData['phase2ValidityData'] != null){\n        phase2VerdictString = `${packData['phase2ValidityData']['final'] ? \"PASS\" : \"FAIL\"}`;\n    }else{\n        phase2VerdictString = \"N/A\"\n    }\n    return `P1:${phase1VerdictString} P2:${phase2VerdictString}`;\n}\n\nexport default helper(getPacksValidationProgression);\n","export { default } from \"ember-truth-helpers/helpers/gt\";\n","export { default } from \"ember-truth-helpers/helpers/gte\";\n","export { default, icon } from 'ember-leaflet/helpers/icon';\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport function ifEmptyStringOrNull(params/*, hash*/) {\n    if (typeof params[0] !== undefined) {\n        if (params[0] === null || params[0] === '' || params[0] === ' ') {\n            return true;\n        }\n    }\n}\n\nexport default helper(ifEmptyStringOrNull);\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\n\nexport function ifMeetSubModelRequirement(params) {\n    if(params[0] == null || params[1] == null){\n        return false;\n    }\n    \n    let instr = params[0];\n    let actionType = params[1];\n\n    // console.log(\"instr\")\n    // console.log(instr)\n    // console.log(\"actionType\")\n    // console.log(actionType)\n\n    switch(instr[\"instrumentType\"][\"title\"]){\n        case \"BluVibe\":\n            let subModelA = [\"viewData\", \"tGraph\", \"fGraph\"];\n            let subModelB = [ \"fEvent\"];\n            switch(instr[\"subModel\"]){\n                case \"A\":\n                    return subModelA.includes(actionType);\n                case \"B\":\n                    return subModelB.includes(actionType);\n                default:\n                    return true;\n            }\n        default:\n            return true;\n    }\n    // return true;     \n}\n\nexport default helper(ifMeetSubModelRequirement);\n","export { default } from 'ember-modal-dialog/helpers/ignore-children';\n","export { default } from \"ember-moment/helpers/is-after\";\n","export { default } from \"ember-truth-helpers/helpers/is-array\";\n","export { default } from \"ember-moment/helpers/is-before\";\n","export { default } from \"ember-moment/helpers/is-between\";\n","export { default } from \"ember-truth-helpers/helpers/is-empty\";\n","export { default } from \"ember-truth-helpers/helpers/is-equal\";\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport function isGreaterThan(params) {\n    if (params[0] && params[1]) {\n        return params[0] > params[1];\n    }\n}\n\nexport default helper(isGreaterThan);\n","import { helper } from '@ember/component/helper';\n\nexport default helper(function ([array, value]) {\n    if (!array || !Array.isArray(array)) return false;\n    return array.includes(value);\n});\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport function isInstrumentAnchorsSet([instrumentAnchors]) {\n\n    const anchors = instrumentAnchors.content ?? instrumentAnchors;\n    let instrumentAnchorsDistances = anchors.map(function(obj){\n        return obj.get('distance') !== '' && obj.get('distance') !== null;\n    });\n\n    if (instrumentAnchorsDistances.indexOf(false) > -1 || instrumentAnchorsDistances.length === 0) {\n        return false;\n    } else {\n        return true;\n    }\n}\n\nexport default helper(isInstrumentAnchorsSet);\n","export { default } from \"ember-moment/helpers/is-same-or-after\";\n","export { default } from \"ember-moment/helpers/is-same-or-before\";\n","export { default } from \"ember-moment/helpers/is-same\";\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport function isStrokeLengthRequiredAndSet(instrument) {    \n\n    let type = instrument[0].get('instrumentTypeID');\n    let stroke = instrument[0].get('strokeLength');\n\n    //console.log(stroke);\n\n    switch(type) {\n        case 1:\n        case 2:\n        case 4:\n        case 5:\n            if (stroke === null || stroke === 0) {\n                return false;\n            } else {\n                return true;\n            }\n            break;\n        default:\n            return true;\n    }\n}\n\nexport default helper(isStrokeLengthRequiredAndSet);\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport function isAlertChecked(params) {\n    const alert = params[0];\n    const batchSelectedAlertsID = params[1];\n    return batchSelectedAlertsID.includes(alert[\"id\"]);\n}\n\nexport default helper(isAlertChecked);\n","export { default, latLngBounds } from 'ember-leaflet/helpers/lat-lng-bounds';\n","import { helper } from '@ember/component/helper';\n\nexport function logger([obj]) {\n    // console.log(\"LOGGING START::::::::::::::::::::::\")\n    // console.log(obj);\n    // console.log(\"LOGGING END ::::::::::::::::::::::\")\n    return ''; // Helpers must return a value to be rendered, but we don't want to render anything\n}\n\nexport default helper(logger);","export { default } from \"ember-truth-helpers/helpers/lt\";\n","export { default } from \"ember-truth-helpers/helpers/lte\";\n","import { helper } from '@ember/component/helper';\nimport moment from 'moment';\n\nexport function makeTimestampGlobalFormatAwareBluvibe(params) {\n    if(params[0] == null || params[1] == null){\n        return \"\";\n    }\n    let timestamp = params[0];\n    let globalDatetimeFormat = params[1];\n    const standardizedFormat = \"YYYY-MM-DD HH:mm:ss.SSS\";\n    const parsed = moment(timestamp, standardizedFormat, true);\n    let convertedTimestamp = globalDatetimeFormat ? parsed.format(`${globalDatetimeFormat}.SSS`) : parsed.format(standardizedFormat);\n    return convertedTimestamp;\n}\n\nexport default helper(makeTimestampGlobalFormatAwareBluvibe);\n","export { default } from \"ember-moment/helpers/moment-add\";\n","export { default } from \"ember-moment/helpers/moment-calendar\";\n","export { default } from \"ember-moment/helpers/moment-diff\";\n","export { default } from \"ember-moment/helpers/moment-duration\";\n","export { default } from \"ember-moment/helpers/moment-format\";\n","export { default } from \"ember-moment/helpers/moment-from-now\";\n","export { default } from \"ember-moment/helpers/moment-from\";\n","export { default } from \"ember-moment/helpers/moment-subtract\";\n","export { default } from \"ember-moment/helpers/moment-to-date\";\n","export { default } from \"ember-moment/helpers/moment-to-now\";\n","export { default } from \"ember-moment/helpers/moment-to\";\n","export { default } from \"ember-moment/helpers/moment\";\n","\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\nimport { getApiBaseUrl } from '../utils/api-config';\n\n\nexport async function sendGETRequest(endpoint){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint;\n        const response = await fetch(url, {\n          method: 'GET',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n        });\n        if(response){\n            const responseData = await response.json();\n            return responseData\n        }     \n    } catch (error) {\n    console.error('Error sendGETRequest:', error);\n    return false;\n    }\n}\nexport async function sendPOSTRequest(endpoint, data){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint;\n        const response = await fetch(url, {\n          method: 'POST',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n          body: JSON.stringify(data),\n        });\n        if(response){\n            const responseData = await response.json();\n            return responseData\n\n        }\n         \n    } catch (error) {\n        console.error('Error sendPOSTRequest:', error);\n        return false;\n    }\n}\nexport async function sendPATCHRequest(endpoint, data){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint;\n        const response = await fetch(url, {\n          method: 'PATCH',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n          body: JSON.stringify(data),\n        });\n        if(response){\n            const responseData = await response.json();\n            return responseData;\n        }\n        \n    } catch (error) {\n        console.error('Error sendPATCHRequest:', error);\n        return null;\n    }\n}\nexport async function sendDELETERequest(endpoint){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint;\n        const response = await fetch(url, {\n          method: 'DELETE',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n        });\n        \n        if(response){\n            const responseData = await response.json();\n            return responseData\n        }\n    } catch (error) {\n        console.error('Error in sendDELETERequest:', error);\n        return null;\n    }\n}","export { default } from \"ember-truth-helpers/helpers/not-eq\";\n","export { default } from \"ember-truth-helpers/helpers/not\";\n","export { default } from \"ember-moment/helpers/now\";\n","export { default } from 'ember-on-helper/helpers/on-document';\n","export { default } from 'ember-on-helper/helpers/on-window';\n","export { default } from 'ember-on-helper/helpers/on';\n","export { default } from \"ember-truth-helpers/helpers/or\";\n","import Chart from 'chart.js/auto';\nimport { sendGETRequest } from \"./network-library\";\nimport COLORS from '../utils/color-palette';\n\n// FE → BE contract (v2):\n//   GET /packs_validation_analytics/?main=<key>&secondary=<Date|Count>&phase=<I|II|both>&company=<code|all>\n// BE response (success 200):\n//   { data: { labels: [...], datasets: [{label, data}, ...], meta: { main, secondary, phase, company, xAxisLabel, yAxisLabel } } }\n// BE error (4xx/5xx):\n//   { error: \"human-readable message\" }\n//\n// FE does NO bucketing. It dumps `labels` and `datasets` straight into Chart.js\n// and applies a color palette (BE-supplied colors win if any).\n\n// Curated cycle drawn from app/utils/color-palette.js. Hues are alternated so\n// adjacent indices stay visually distinct in bar charts.\nconst COLOR_PALETTE = [\n    COLORS.vpBlue,\n    COLORS.orange2,\n    COLORS.green2,\n    COLORS.red1,\n    COLORS.purple7,\n    COLORS.teal6,\n    COLORS.pink6,\n    COLORS.yellow12,\n    COLORS.indigo6,\n    COLORS.cyan4,\n    COLORS.beige7,\n    COLORS.blue22,\n    COLORS.orange21,\n    COLORS.green14,\n    COLORS.purple17,\n    COLORS.red15,\n];\n\nexport async function refreshMainChartData(context){\n    const params = new URLSearchParams();\n    params.set('main',      context.get('mainDataKey'));\n    params.set('secondary', context.get('secondaryDataKey'));\n    params.set('phase',     context.get('phaseKey'));\n    const company = context.get('companyKey');\n    if(company != null) params.set('company', company);\n\n    const endpoint = `packs_validation_analytics/?${params.toString()}`;\n    const response = await sendGETRequest(endpoint);\n\n    // Guard: malformed / missing payload renders an empty chart instead of crashing.\n    const data = (response && response.data) ? response.data : null;\n    if(!data || !Array.isArray(data.labels) || !Array.isArray(data.datasets)){\n        context.set('mainChartData', { labels: [], datasets: [], meta: (data && data.meta) || {} });\n    } else {\n        context.set('mainChartData', data);\n    }\n    updateChart(context);\n}\n\nexport function renderChart(context){\n    const container = document.getElementById('mainChartSection');\n    if(!container){\n        console.error('mainChartSection not found in DOM');\n        return;\n    }\n    container.innerHTML = `<canvas id=\"mainChartCanvas\"></canvas>`;\n    const ctx = document.getElementById('mainChartCanvas').getContext('2d');\n\n    context.chart = new Chart(ctx, {\n        type: 'bar',\n        data: { labels: [], datasets: [] },\n        options: {\n            responsive: true,\n            maintainAspectRatio: false,\n            scales: {\n                x: { title: { display: true, text: '' }, stacked: false, barPercentage: 0.6, categoryPercentage: 0.8, maxBarThickness: 20 },\n                y: { title: { display: true, text: '' }, stacked: false, beginAtZero: true },\n            },\n            plugins: {\n                legend: {\n                    display: false,\n                    position: 'top',\n                    labels: { usePointStyle: true, font: { size: 10, family: 'Arial', weight: 'bold' }, color: 'black', boxWidth: 10, boxHeight: 10, padding: 5 },\n                },\n                tooltip: { enabled: true },\n            },\n            elements: { point: { radius: 0 } },\n        },\n    });\n    updateChart(context);\n}\n\nexport function updateChart(context){\n    try{\n        if(!context.chart) return;\n\n        const data = context.get('mainChartData') || { labels: [], datasets: [], meta: {} };\n        const rawLabels = Array.isArray(data.labels) ? data.labels : [];\n        // FE-side date formatting. BE always sends `YYYY-MM-DD`; the operator-chosen\n        // format string (FE-only) controls how those render on the X-axis. The 4\n        // time-bearing variants always render `00:00:00` since BE buckets by day.\n        const labels = (context.get('secondaryDataKey') === 'Date')\n            ? rawLabels.map(s => formatDateLabel(s, context.get('dateFormatKey')))\n            : rawLabels;\n        const datasets = Array.isArray(data.datasets) ? applyColors(data.datasets, labels) : [];\n        const meta     = data.meta || {};\n\n        // Pack-Type-Employee + Count is the one combo we render as stacked bars\n        // (X = employee, stack of pack-type contributions). Everything else is grouped.\n        const stack = context.get('mainDataKey') === 'validations_pack_type_employee'\n                   && context.get('secondaryDataKey') === 'Count';\n\n        context.chart.data.labels   = labels;\n        context.chart.data.datasets = datasets;\n        context.chart.options.scales.x.title   = { display: true, text: meta.xAxisLabel || '' };\n        context.chart.options.scales.y.title   = { display: true, text: meta.yAxisLabel || 'Count' };\n        context.chart.options.scales.x.stacked = stack;\n        context.chart.options.scales.y.stacked = stack;\n        context.chart.update();\n\n        // Sync the Y-axis-scale text box with the chart's natural max.\n        const yScaleMax = getYAxisScaleMax(context);\n        const yAxisComp = document.getElementById('yAxisScale');\n        if(yAxisComp && yScaleMax != null){\n            yAxisComp.value = yScaleMax;\n            yAxisComp.min   = `${yScaleMax}`;\n            context.set('options.chartYAxisOriginal', Number.parseInt(yScaleMax));\n        }\n    } catch(err){\n        console.error('Error updateChart:', err);\n    }\n}\n\n// Re-format a BE-supplied `YYYY-MM-DD` ISO date string into the operator's chosen format.\n// Supported tokens: YYYY, MM, DD, HH, mm, ss. BE buckets by day, so HH:mm:ss is always 00:00:00.\n// On any parse failure, returns the original string unchanged.\nfunction formatDateLabel(iso, format){\n    if(typeof iso !== 'string' || !format) return iso;\n    const m = iso.match(/^(\\d{4})-(\\d{2})-(\\d{2})/);\n    if(!m) return iso;\n    return format\n        .replace('YYYY', m[1])\n        .replace('MM',   m[2])\n        .replace('DD',   m[3])\n        .replace('HH',   '00')\n        .replace('mm',   '00')\n        .replace('ss',   '00');\n}\n\n// Single-series: color per bar. Multi-series: color per dataset.\n// BE-supplied backgroundColor/borderColor win (Object.assign order).\nfunction applyColors(datasets, labels){\n    if(datasets.length === 1){\n        const ds = datasets[0];\n        const colors = labels.map((_, i) => COLOR_PALETTE[i % COLOR_PALETTE.length]);\n        return [Object.assign({\n            maxBarThickness: 50,\n            backgroundColor: colors,\n            borderColor:     colors,\n            borderWidth:     1,\n        }, ds)];\n    }\n    return datasets.map((ds, i) => {\n        const color = COLOR_PALETTE[i % COLOR_PALETTE.length];\n        return Object.assign({\n            maxBarThickness: 50,\n            backgroundColor: color,\n            borderColor:     color,\n            borderWidth:     1,\n        }, ds);\n    });\n}\n\nexport function getYAxisScaleMax(context){\n    const chart = context.get && context.get('chart');\n    if(chart && chart.scales && chart.scales.y){\n        return chart.scales.y.max;\n    }\n    return null;\n}\n\nexport function disableEnableBarChartLengend(context, isShowLegend){\n    if(context.chart && context.chart.options && context.chart.options.plugins){\n        context.chart.options.plugins.legend.display = !!isShowLegend;\n        context.chart.update();\n    }\n}\n","\nexport function assistiveToolTipLibrary(key) {\n    switch(key){\n        case 'packIdStructureTooltip':\n            return \"Pack ID structure:\\nDate - # Sens. - Pk. Len. - Val. ID - Company\\nEnds with \\\"-X\\\" if the pack is a repair.\";\n        case 'packTypeFormChannelsTooltip':\n            return \"Total number of channels for the pack. Your value needs to include temperature channel.\\nThis is not number of coils!\\nNo need to consider units.\";\n        case 'packTypeFormMinLimitTooltip':\n            return \"Minimum limit for pack. In other words, minimum length for packs's stroke length.\\nNo need to consider units.\";\n        case 'packTypeFormMaxLimitTooltip':\n            return \"Maximum limit for pack. In other words, maximum length for pack's stroke length.\\nNo need to consider units.\";\n\n        case 'packTypeFormP1UnloadMin':\n            return \"Minimum value accepted directly from pack.\\nFor Phase 1 unload.\\nNo need to consider units.\";\n        case 'packTypeFormP1UnloadMax':\n            return \"Maximum value accepted directly from pack.\\nFor Phase 1 unload.\\nNo need to consider units.\";\n            \n        case 'packTypeFormP1LoadMin':\n            return \"Minimum value accepted directly from pack.\\nFor Phase 1 load.\\nNo need to consider units.\";\n        case 'packTypeFormP1LoadMax':\n            return \"Maximum value accepted directly from pack.\\nFor Phase 1 load.\\nNo need to consider units.\";\n\n        case 'packTypeFormP2Load2Min':\n            return \"Minimum value accepted directly from pack.\\nFor Phase 2 load 2.\\nNo need to consider units.\";\n        case 'packTypeFormP2Load2Max':\n            return \"Maximum value accepted directly from pack.\\nFor Phase 2 load 2.\\nNo need to consider units.\";\n\n        case 'packTypeFormP2Unload2Min':\n            return \"Minimum value accepted directly from pack.\\nFor Phase 2 unload 2.\\nNo need to consider units.\";\n        case 'packTypeFormP2Unload2Max':\n            return \"Maximum value accepted directly from pack.\\nFor Phase 2 unload 2.\\nNo need to consider units.\";\n        case 'packTypeFormUnloadAcceptedVariance':\n            return \"Boundary used to determine if unload step is successful or failure.\\nDefault value is 300.\\nFor all unload stages.\\nNo need to consider units.\";\n        case 'packTypeFormLoadAcceptedVariance':\n            return \"Boundary used to determine if load step is successful or failure.\\nDefault value is 850.\\nFor all load stages.\\nNo need to consider units.\";\n        case 'rigFormRigIPTooltip':\n            return \"It is the IP address associated with this and only this rig. When connecting to websocket, it will use this IP value.\";        \n        case 'rigFormRigNameTooltip':\n            return \"This is used for labeling this rig. At no point will the name be used in any areas of the calibration phases.\\nIt is purely for verbally identifying each rig.\";        \n        case 'rigFormRigCategoryTooltip':\n            return \"This is to identify the specific type of rig.\\nCurrently the only supported types are: PUMP & STEPPER.\";\n        case 'rigFormReferenceIDTooltip':\n            return \"This is the serial number associated with the attached sensor.\";\n        case 'rigFormReferenceCalibrationValueTooltip':\n            return \"This is the certificate ID or certificate serial number associated with the attached sensor.\";\n        case 'rigFormReferenceCalibrationDateTooltip':\n            return \"This is the date of certificate associated with the attached sensor.\";\n        case 'packTypeFormTotalCoilsCount':\n            return \"This is the total number of coils on the board.\\nIt does not refer to the total number of coils being used.\\nMaximum for current board is 8 coils.\";\n        case 'packTypeFormActiveCoilsCount':\n            return \"This is total number of coils being used on the board.\\nThere is a chance that not all coils on the board will be occupied.\\nThis is very important to know exactly what you will be inputting.\\nIf you are sure, please contact your superiors.\\nNo need to consider temperature.\"\n        case 'packTypeFormGeneralCoilsPositions':\n            return \"This is for the position of active coils.\\nThis is not index, so in laymen's terms, what is the position for each coil?\\nDo not consider coil(s) which is unfilled.\\n eg. If I have 8-Pack, then it will be 1,2,3,4,5,6,7 and 8 unfilled.\\nNo need to consider temperature.\";\n        case 'packTypeFormReferenceUnfilledCoilsPositions':\n            return \"This is for the position of unfilled coils.\\nThis is not index, so in laymen's terms, what is the position for unfilled coil(s)?\\nDo not consider coil(s) which is filled.\\nNo need to consider temperature.\"\n                                        \n    }\n}","import { next, schedule, scheduleOnce } from '@ember/runloop';\nimport { getApiBaseUrl } from '../utils/api-config';\n\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\nimport Chart from 'chart.js/auto';\nimport printJS from 'print-js';\nimport html2pdf from 'html2pdf.js';\n//Export helpers: tryPickExportDirectory (one-folder-for-all via showDirectoryPicker) with a per-file\n//Save dialog fallback (savePdfWithPicker → showSaveFilePicker, then plain download). One-way import —\n//calibration-library does not import from here.\nimport { tryPickExportDirectory, writeBlobToDirectory, savePdfWithPicker } from './calibration-library';\n\n//Status Code & Incoming & Outgoing Libraries\n//  Allocate 500-549\nexport function connectionStatusLibrary(code) {\n    let statusObject = {\n        key:code,\n        value:\"\",\n        color:\"\",\n    }\n    switch(code){\n        case 500:\n            statusObject[\"value\"] = \"Not Connected\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 501:\n            statusObject[\"value\"] = \"Connecting...\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 502:\n            statusObject[\"value\"] = \"Connected\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n    }\n}\n//  Allocate 550-599\nexport function packStatusLibrary(code) {\n    let statusObject = {\n        key:code,\n        value:\"\",\n        color:\"\",\n    }\n    switch(code){\n        case 550:\n            statusObject[\"value\"] = \"Error\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 551:\n            statusObject[\"value\"] = \"Idle\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 552:\n            statusObject[\"value\"] = \"Emergency Stopping...\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 553:\n            statusObject[\"value\"] = \"Phase I: Emergency Stopped\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 554:\n            statusObject[\"value\"] = \"Phase II: Emergency Stopped\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 555:\n            statusObject[\"value\"] = \"Phase I: Soft Resetting\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 559:\n            statusObject[\"value\"] = \"Phase II: Soft Resetting\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 560:\n            statusObject[\"value\"] = \"Delay\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 561:\n            statusObject[\"value\"] = \"Hard Resetting\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 562:\n            statusObject[\"value\"] = \"Phase I: Require Unload I!\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 563:\n            statusObject[\"value\"] = \"Phase I: Require Load I!\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 564:\n            statusObject[\"value\"] = \"Phase II: Require Unload I!\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 565:\n            statusObject[\"value\"] = \"Phase II: Require Load I!\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 566:\n            statusObject[\"value\"] = \"Phase II: Require Load II!\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 567:\n            statusObject[\"value\"] = \"Phase II: Require Unload II!\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 568:\n            statusObject[\"value\"] = \"Phase I: Sampling....\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 569:\n            statusObject[\"value\"] = \"Phase II: Sampling....\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 570:\n            statusObject[\"value\"] = \"Phase I: Validating....\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 572:\n            statusObject[\"value\"] = \"Phase I: Complete\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 573:\n            statusObject[\"value\"] = \"Phase II: Complete\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 574:\n            statusObject[\"value\"] = \"Phase II: Reflash!\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n        case 575:\n            statusObject[\"value\"] = \"Stage Delay\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 576:\n            statusObject[\"value\"] = \"Coils Stabilizing....\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 577:\n            statusObject[\"value\"] = \"Coils Stabilization Failed\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 578:\n            statusObject[\"value\"] = \"Phase I: Sending CMDs..\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 579:\n            statusObject[\"value\"] = \"Phase II: Sending CMDs..\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 580:\n            statusObject[\"value\"] = \"Validation Failed\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n    }\n}\n//  Allocate 600-649\nexport function generalStatusLibrary(code) {\n    let statusObject = {\n        key:code,\n        value:\"\",\n        color:\"\",\n    }\n    switch(code){\n        case 600:\n            statusObject[\"value\"] = \"-\",\n            statusObject[\"color\"] = \"black\"\n            return statusObject;\n        case 601:\n            statusObject[\"value\"] = \"Unavailable\",\n            statusObject[\"color\"] = \"orange\"\n            return statusObject;\n        case 602:\n            statusObject[\"value\"] = \"Need Validation\",\n            statusObject[\"color\"] = \"red\"\n            return statusObject;\n        case 603:\n            statusObject[\"value\"] = \"Validated\",\n            statusObject[\"color\"] = \"green\"\n            return statusObject;\n    }\n}\nexport function incomingMessageLibrary(context, key,value){\n    switch(key){\n        case \"notification\":\n            const rigProfile = context.get(\"userInputtedData.selectedRigProfile\");\n            if(rigProfile != null && context.get(\"frontendData.rigNotificationData\").hasOwnProperty(rigProfile['data']['rigID'])){\n                context.get(\"frontendData.rigNotificationData\")[rigProfile['data']['rigID']]['messages'].push(`(${getCurrentDateTime()})-${value}`);\n            }\n            break;\n        case \"sensorData\":\n            let parsedData = '';\n            if(value.includes(\"YP\")){\n                parsedData = parseMessage2(value);\n            }else{\n                parsedData = parseMessage1(value);\n            }\n            // console.log(parsedData);\n            // console.log(`parsedData1:${parsedData}`);\n            //Update Anchor Live View Section\n            updateAnchorBoardLiveViewData(parsedData);\n            //Update Anchor Live Chart\n            updateAnchorChartLiveViewData(parsedData);\n            //Handle sampling if it is on\n            if(context.get(\"packValidationIsSamplingData\")[\"isPhaseISampling\"]){\n                handleSampleValidityPhaseIModule(context, parsedData);\n            }\n            else if(context.get(\"packValidationIsSamplingData\")[\"isPhaseIISampling\"]){\n                handleSampleValidityPhaseIIModule(context, parsedData);\n            }\n            return;\n    }\n}\nexport async function outgoingMessageLibrary(context, cmd, value, type=null){\n    //Check if websocket is still alive, if so send the command, attach type of cmds if needed in the switch case\n    let msg = null;\n    console.log(`cmd:${cmd}, value:${value}`);\n    switch(cmd){\n        //For cmd not needing type such as \"setStepper 22.2\"\n        case \"setTarget\":\n            const calibProfile = context.get(\"userInputtedData.selectedPackType\");\n            if(calibProfile != null && calibProfile['data'] != null ){\n                const data = calibProfile['data'];\n                const checkpointSpeed = data['checkpointSpeed'];\n                const customStatusObj2 = {};\n                customStatusObj2[\"value\"] = value;\n                customStatusObj2[\"color\"] = \"black\";\n                context.set(\"dashboardStatusBarData.target\",customStatusObj2);\n                msg = `WS+MOV=${value},${checkpointSpeed}`;\n                break;\n            }\n        case \"manualStepper\":\n        // case \"manualPump\":\n            msg = `WS+JOG=${value},1`;\n            break;\n        case 'emergencyStop':\n            msg = 'WS+STOP=1';\n            break;\n        //For control panel hotkeys\n        case \"stepperInit\":\n            msg = `WS+SETHOME=1`;\n            break; \n        case \"stepper0\":\n            msg = `WS+MOVHOME=1`;\n            break; \n        case \"getRigActivity\":\n            console.log(`trigger easter egg`);\n            break;\n        case \"setMode\":\n            await sendBatchCommands(context, [\"WS+COMMAND_MODE=1\", \"WS+COMMAND=0\", `WS+COMMAND=${value}`, \"WS+COMMAND=9\"]);\n            break;\n        case \"getDetails\":\n            await sendBatchCommands(context, [\"WS+COMMAND_MODE=1\", \"WS+COMMAND=6\", `WS+COMMAND=${value}`, \"WS+COMMAND=9\"]);\n            break; \n        case \"setChannels\":\n            await sendBatchCommands(context, [\"WS+COMMAND_MODE=1\", \"WS+COMMAND=1\", `WS+COMMAND=${value}`, \"WS+COMMAND=9\"]);\n            break;\n        case \"setStroke\":  \n            await sendBatchCommands(context, [\"WS+COMMAND_MODE=1\", \"WS+COMMAND=2\", `WS+COMMAND=${value}00`, \"WS+COMMAND=9\"]);\n            break;\n        case \"setSensorID\":\n            await sendBatchCommands(context, [\"WS+COMMAND_MODE=1\", \"WS+COMMAND=3\", `WS+COMMAND=${value}`, \"WS+COMMAND=9\"]);\n            break;\n        case \"setType\":\n            await sendBatchCommands(context, [\"WS+COMMAND_MODE=1\", \"WS+COMMAND=4\", `WS+COMMAND=${value}`, \"WS+COMMAND=9\"]);\n            break;\n        case \"setDescription\":\n            await sendBatchCommands(context, [\"WS+COMMAND_MODE=1\", \"WS+COMMAND=5\", `WS+COMMAND=${value}`, \"WS+COMMAND=9\"]);\n            break;\n        case \"setExit\":\n            await sendBatchCommands(context, [\"WS+COMMAND=9\"]);\n            break;\n        default:\n            msg = `${type ? type : \"\"} ${cmd} ${value}`;\n            break;\n    }\n    if(context.ws != null){\n        if (msg){\n            appendLiveLog(context,msg, 'outgoing');\n            showPopup([`Message sent: ${msg}`],'success');\n            console.log(`Sending message:${msg}`);\n            context.ws.send(msg);\n        }\n    }else{\n        showPopup([`Cannot send command!`, `Please connect to a rig first!`],'error');\n\n    }\n    \n}\nexport function generalPermissionLibrary(code) {\n    switch(code){\n        case 'validateButton':\n            return ['add_calibrationinstrumentprofile', 'add_calibrationcalibratedinstrumentdata', 'add_calibrationcalibratedinstrumentlookupdata',\n                'view_calibrationinstrumentprofile','view_calibrationinstrumentdata','view_calibrationinstrumentlookup',\n                'change_calibrationinstrumentprofile','change_calibrationinstrumentdata','change_calibrationinstrumentlookup'\n            ];\n        case 'getRigsList':\n            return ['view_calibrationrigprofile'];\n        case 'saveRigButton':\n            return ['add_calibrationrigprofile'];\n        case 'deleteRigButton':\n            return ['delete_calibrationrigprofile'];\n        case 'editRigButton':\n            return ['change_calibrationrigprofile'];\n        case 'getCalibProfileList':\n            return ['view_calibrationcalibrationprofile'];\n        case 'saveCalibProfileButton':\n            return ['add_calibrationcalibrationprofile'];\n        case 'deleteCalibProfileButton':\n            return ['delete_calibrationcalibrationprofile'];\n        case 'editCalibProfileButton':\n            return ['change_calibrationcalibrationprofile'];\n        case 'calibratedInstrumentTable':\n            return ['view_calibrationinstrumentprofile','view_calibrationcalibratedinstrumentdata', 'view_calibrationcalibratedinstrumentlookupdata'];\n    }\n}\n//Popup & Notification Section\nexport async function showPopup(messageArray, mode = 'standard', seconds = 1) {\n    const popup = document.getElementById('popupMessageSection');\n    const popupBody = document.getElementById('popupMessageBody');\n\n    // Define color based on mode\n    let color = '';\n    switch (mode) {\n        case \"success\":\n            color = \"green\";\n            break;\n        case \"warning\":\n            color = \"orange\";\n            break;\n        case \"notification\":\n            color = \"#4A6A9C\";\n            break;\n        case \"error\":\n            color = \"red\";\n            break;\n        case \"standard\":\n            color = \"black\";\n            break;\n    }\n\n    // Remove existing animation styles\n    const existingStyles = document.querySelectorAll(\"[id^='pulse-border-']\");\n    existingStyles.forEach((styleElement) => styleElement.remove());\n\n    // Define new animation name and style\n    const animationName = `pulse-border-${color.replace(/[^a-zA-Z0-9]/g, '')}`;\n    const styleSheet = document.createElement('style');\n    styleSheet.type = 'text/css';\n    styleSheet.id = animationName;\n\n    styleSheet.innerHTML = `\n        @keyframes ${animationName} {\n            0% {\n                border-color: white;\n            }\n            5% {\n                border-color: ${color};\n            }\n            100% {\n                border-color: white;\n            }\n        }\n    `;\n    document.head.appendChild(styleSheet);\n\n    // Apply the new animation dynamically\n    popup.style.animation = 'none'; // Reset animation\n    popup.offsetHeight; // Trigger reflow\n    popup.style.animation = `${animationName} 1s infinite linear`;\n\n    // Reset border color explicitly\n    popup.style.borderColor = color;\n\n    // Display the popup\n    popup.style.visibility = 'visible';\n    popup.style.opacity = 1;\n\n    // Clear previous messages and populate new messages\n    popupBody.innerHTML = '';\n    messageArray.forEach((message) => {\n        const subtitleSection = document.createElement('div');\n        subtitleSection.style.fontSize = \"small\";\n        subtitleSection.style.textAlign = \"left\";\n        subtitleSection.textContent = message;\n        subtitleSection.style.overflowWrap = 'break-word'\n        popupBody.appendChild(subtitleSection);\n    });\n    let fadeOutTimeout;\n\n    const closeButton = document.createElement('div');\n    closeButton.style.fontSize = \"small\";\n    closeButton.style.textAlign = \"center\";\n    closeButton.style.cursor = \"pointer\";\n    closeButton.textContent = 'Close';\n    closeButton.style.color = 'darkgrey'\n    closeButton.style.textDecoration='underline'\n    closeButton.onclick = () => {\n        popup.style.visibility = 'hidden';\n        popup.style.animation = 'none'; // Stop the animation on hide\n        popup.style.borderColor = 'white'; // Reset border color\n        clearTimeout(fadeOutTimeout);\n\n    };\n    popupBody.appendChild(closeButton);\n\n    // Fade-out logic\n    fadeOutTimeout =  setTimeout(() => {\n        let opacity = 1;\n        const fadeOut = setInterval(() => {\n            opacity -= 0.25;\n            if (opacity <= 0) {\n                clearInterval(fadeOut);\n                popup.style.visibility = 'hidden';\n                popup.style.animation = 'none'; // Stop the animation on hide\n                popup.style.borderColor = 'white'; // Reset border color\n            }\n            popup.style.opacity = opacity;\n        }, 50);\n    }, seconds * 1000);\n}\nexport async function buildRigActivityNotificationBoard(context){\n    context.set(\"isShowConfig.isShowPopupNotification\", true);\n    // const rigProfileList = context.get('rigProfileList');\n    // console.log(rigProfileList);\n    let responseData = await sendGETRequest(`rig_profile_activity_view/`);\n    const data = responseData['data'];\n    scheduleOnce('afterRender', context, () => {\n\n        const masterPopupContent = document.getElementById('notificationPopupContentBody');\n        if(masterPopupContent){\n\n            masterPopupContent.innerHTML = '';\n\n            // Rigs Activity Label\n            const calibTableTitle = document.createElement('div');\n            calibTableTitle.style.marginTop = '10px';\n            calibTableTitle.style.fontSize = 'medium';\n            calibTableTitle.style.textDecoration = 'underline';\n            calibTableTitle.style.fontWeight = 'bold';\n            calibTableTitle.textContent = `Rig Activity Snapshots`;\n            masterPopupContent.appendChild(calibTableTitle);\n            const table = document.createElement('table');\n            table.style.marginTop=\"10px\"\n            // Rigs Activity Table\n            //Columns\n            const thead = document.createElement('thead');\n            thead.style.borderBottom= ``;\n            const trColumns = document.createElement('tr');\n\n            const  row1HeaderObject = [{key:\"rigID\",label:\"ID\",},{key:\"rigIP\",label:\"IP\",},\n                {key:\"rigName\",label:\"Name\",},\n                {key:\"rigCategory\",label:\"Category\",},\n                {key:\"latestDate\",label:\"Last Update\",},\n                {key:\"status\",label:\"Validation Status\",},\n                {key:\"connection\",label:\"Connection Status\",},\n                {key:\"activity\",label:\"Activity Status\",},\n                {key:\"activeUser\",label:\"User\",},\n                {key:\"company\",label:\"Company\",},\n                {key:\"connectedTo\",label:\"Sensor Connected\",},\n            ]\n            row1HeaderObject.forEach((columnObject, index)=>{\n                const thColumn = document.createElement('th');\n                thColumn.style.fontSize= `small`;\n                thColumn.style.border= `solid`;\n                thColumn.style.borderWidth= `1px`;\n                thColumn.style.borderColor= `black`;\n                thColumn.style.textAlign ='center';\n                thColumn.textContent= `${columnObject['label']}`;\n                trColumns.appendChild(thColumn);\n            });\n\n            thead.appendChild(trColumns);\n            table.appendChild(thead);\n            //Rows\n            const tbody = document.createElement('tbody');\n            for(let i=0;i< data.length;i++){\n                const rigProfile = data[i]\n                const rigID = rigProfile['rigID']\n                const activityJSON = rigProfile['activityJSON']\n                const trRows = document.createElement('tr');\n                row1HeaderObject.forEach((columnObject, index)=>{\n                    const tdRowData = document.createElement('td');\n                    tdRowData.style.fontSize= `small`;\n                    tdRowData.style.border= `solid`;\n                    tdRowData.style.borderWidth= `1px`;\n                    tdRowData.style.textAlign ='center';\n                    switch(columnObject['key']){\n                        case \"status\":\n                            tdRowData.textContent= `${generalStatusLibrary(activityJSON[columnObject['key']]) ? generalStatusLibrary(activityJSON[columnObject['key']]).value : \"\"}`;\n                            break;\n                        case \"connection\":\n                            tdRowData.textContent= `${connectionStatusLibrary(activityJSON[columnObject['key']]) ? connectionStatusLibrary(activityJSON[columnObject['key']]).value : \"\"}`;\n                            break;\n                        case \"activity\":\n                            tdRowData.textContent= `${packStatusLibrary(activityJSON[columnObject['key']]) ? packStatusLibrary(activityJSON[columnObject['key']]).value : \"\"}`;\n                            break;\n                        default:\n                            tdRowData.textContent= `${activityJSON[columnObject['key']] ? activityJSON[columnObject['key']] : \"N/A\"}`;\n                            break;\n\n                    }\n                    trRows.appendChild(tdRowData);\n                });\n                tbody.appendChild(trRows);\n            }\n\n            table.appendChild(tbody);\n            masterPopupContent.appendChild(table);\n\n    \n            //Display and setup Ok Button notificationRefreshButton\n            const refreshButtonComponent = document.getElementById('notificationRefreshButton');\n            refreshButtonComponent.style.display = \"block\";\n            refreshButtonComponent.style.marginRight = \"10px\";\n            refreshButtonComponent.onclick = () => {\n                context.send('closeNotificationPopup'); \n                buildRigActivityNotificationBoard(context);\n            };\n            const okButtonComponent = document.getElementById('notificationOkButton');\n            okButtonComponent.style.display = \"block\";\n            okButtonComponent.onclick = () => {\n                context.send('closeNotificationPopup'); \n            };\n        }\n    });\n}\nexport function buildRigNotificationNotificationBoard(context){\n    context.set(\"isShowConfig.isShowPopupNotification\", true);\n    scheduleOnce('afterRender', context, () => {\n\n        const popupContentSectionComponent = document.getElementById('notificationPopupContentBody');\n        if(popupContentSectionComponent){\n\n            popupContentSectionComponent.innerHTML = '';\n    \n            //Phase I label Section\n            Object.entries(context.get(\"frontendData.rigNotificationData\")).forEach(([key, rigObject]) => {\n                const messagesArray = rigObject['messages'];\n                const data = rigObject['data'];\n\n                const rigLabelSection = document.createElement('div');\n                rigLabelSection.id=`rigLabelSection${data['rigID']}`\n                rigLabelSection.style.fontSize = \"small\";\n                rigLabelSection.textContent = `${data['rigName']} Messages:`;\n                rigLabelSection.style.paddingLeft = \"15px\";\n\n                // Add a long press event listener\n                let pressTimer; // Variable to track the timer for each component\n            \n                // Listen for mouse down (start the timer)\n                rigLabelSection.addEventListener('mousedown', (event) => {\n                    pressTimer = setTimeout(() => {\n                        showPopup([`Notifications for Rig ${data['rigName']} has been cleared.`, 'standard'])\n                        context.set(\"frontendData.rigNotificationData\",{...context.get(\"frontendData.rigNotificationData\"), [data['rigID']]: {data:data, messages:[]} });\n                        context.send('closeNotificationPopup'); \n                        context.send('viewRigNotifications'); \n                        \n                    }, 1500); // 2.5 seconds\n                });\n            \n                // Listen for mouse up (cancel the timer if the user releases the mouse early)\n                rigLabelSection.addEventListener('mouseup', () => {\n                    clearTimeout(pressTimer);\n                });\n            \n                // Listen for mouse leave (cancel the timer if the user moves the mouse away early)\n                rigLabelSection.addEventListener('mouseleave', () => {\n                    clearTimeout(pressTimer);\n                });\n\n                popupContentSectionComponent.appendChild(rigLabelSection);\n\n                messagesArray.forEach((message, index)=>{\n                    const rigMessage = document.createElement('div');\n                    rigMessage.style.fontSize = \"small\";\n                    rigMessage.textContent = `${message}`;\n                    rigMessage.style.paddingLeft = \"30px\";\n                    rigLabelSection.appendChild(rigMessage);\n\n                });\n              });\n    \n            //Display and setup Ok Button\n            const okButtonComponent = document.getElementById('notificationOkButton');\n            okButtonComponent.style.display = \"block\";\n            okButtonComponent.onclick = () => {\n                context.send('closeNotificationPopup'); \n            };\n    \n            // if(context.get(\"packsValidationData\")['phase1UnloadData']\n        }\n    });\n}\nexport function reflashPopup(context){\n    /**\n     * Case sensitive\n     */\n    return new Promise((resolve) => {\n        try{\n            context.set(\"isShowConfig.isShowPopupNotification\", true);\n            //Lock backdrop dismissal — this is an active validation step; an accidental outside-click\n            //must not close it. Re-enabled by closeNotificationPopup when the step legitimately ends.\n            context.set(\"isShowConfig.isPopupDismissable\", false);\n            scheduleOnce('afterRender', context, () => {\n                const masterPopupContent = document.getElementById('notificationPopupContentBody');\n                if(masterPopupContent){\n                    //X Cloe Button \n                    const xButtonComponent = document.getElementById('closeXButton');\n                    xButtonComponent.style.display ='none';\n                    //Main Title\n                    const mainComponent = document.createElement('div');\n                    mainComponent.style.alignSelf = 'center';\n                    mainComponent.style.fontSize = ' x-large';\n                    mainComponent.style.fontWeight = 'bold';\n                    mainComponent.style.color = 'red';\n                    mainComponent.textContent = `Please reflash your pack!`;\n                    masterPopupContent.appendChild(mainComponent);\n                    //Timer Warning message 3\n                    const reflashWarningComponent1 = document.createElement('div');\n                    reflashWarningComponent1.style.alignSelf = 'center';\n                    reflashWarningComponent1.style.fontSize = 'medium';\n                    reflashWarningComponent1.textContent = `When you are done reflashing and ready, please click Ready!`;\n                    masterPopupContent.appendChild(reflashWarningComponent1);\n    \n                    const readyButtonComponent = document.getElementById('notificationReadyButton');\n                    readyButtonComponent.style.display = \"block\";\n                    readyButtonComponent.style.marginRight = \"10px\";\n                    const closePopupAndResolve = () => {\n                        xButtonComponent.style.display = 'block';\n                        context.send('closeNotificationPopup');\n                        resolve(true); \n                        document.removeEventListener('keydown', enterKeyHandler);\n                    };\n\n                    readyButtonComponent.onclick = closePopupAndResolve;\n                    const enterKeyHandler = (event) => {\n                        if (event.key === \"Enter\") {\n                            closePopupAndResolve();\n                        }\n                    };\n                    document.addEventListener('keydown', enterKeyHandler);\n                    const abortButtonComponent = document.getElementById('notificationAbortButton');\n                    abortButtonComponent.style.display = \"block\";\n                    abortButtonComponent.style.backgroundColor = \"red\"; \n                    abortButtonComponent.style.borderColor = \"red\"; \n                    const abortResolve = () => {\n                        xButtonComponent.style.display = 'block';\n                        context.send('closeNotificationPopup');\n                        document.removeEventListener('keydown', enterKeyHandler);\n                        context.get(\"emergencyController\").abort();\n                        resolve(false)\n                    };\n                    abortButtonComponent.onclick = abortResolve;\n    \n                }\n            });\n    \n        }catch (error) {\n            console.error('Error reflashPopup:', error);\n            resolve(false);\n            document.removeEventListener('keydown', enterKeyHandler);\n\n        }\n    });\n}\n// Operator load/unload prompt auto-advance timer, in seconds (\"...operation will continue regardless\").\n// Kept SEPARATE per phase so they can diverge later; both currently 30 minutes (1800s). Each phase's\n// callers pass the matching constant into unloadLoadPopup.\nconst PHASE_I_LOAD_UNLOAD_TIMER_SECONDS = 1800;\nconst PHASE_II_LOAD_UNLOAD_TIMER_SECONDS = 1800;\nexport function unloadLoadPopup(context, phaseText, timerSeconds = 1800){\n    /**\n     * phaseText is either 'unload' or 'load'.\n     * Case sensitive\n     * timerSeconds = auto-advance countdown length (defaults to 30 min if a caller omits it).\n     */\n    return new Promise((resolve) => {\n        try{\n            let timer = timerSeconds;\n            context.set(\"isShowConfig.isShowPopupNotification\", true);\n            //Lock backdrop dismissal — during the load/unload timer an accidental outside-click must\n            //not close the process. Re-enabled by closeNotificationPopup when the step ends.\n            context.set(\"isShowConfig.isPopupDismissable\", false);\n            scheduleOnce('afterRender', context, () => {\n                const masterPopupContent = document.getElementById('notificationPopupContentBody');\n                if(masterPopupContent){\n                    //X Cloe Button\n                    const xButtonComponent = document.getElementById('closeXButton');\n                    xButtonComponent.style.display ='none';\n                    //Main Title\n                    const mainComponent = document.createElement('div');\n                    mainComponent.style.alignSelf = 'center';\n                    mainComponent.style.fontSize = ' x-large';\n                    mainComponent.style.fontWeight = 'bold';\n                    mainComponent.textContent = `Please ${phaseText} your pack!`;\n                    masterPopupContent.appendChild(mainComponent);\n                    //Timer Warning message 1\n                    const timerWarningComponent1 = document.createElement('div');\n                    timerWarningComponent1.style.alignSelf = 'center';\n                    timerWarningComponent1.style.fontSize = 'medium';\n                    timerWarningComponent1.style.color = 'red';\n                    timerWarningComponent1.style.fontWeight = 'bold';\n                    const interval = setInterval(() => {\n                        const progressBarSection = document.getElementById('packsProgressionPopupViewSection');\n                        const progressBarFill = document.getElementById('packsProgressionPopupViewBar');\n                        //Defensive: if the popup was torn down (e.g. closed/navigated away) the progress\n                        //elements are gone. Stop this orphaned timer instead of throwing on a null .style\n                        //access, and resolve so the awaiting flow doesn't hang.\n                        if(!progressBarSection || !progressBarFill){\n                            clearInterval(interval);\n                            context._activeTimerCleanup = null;\n                            resolve(false);\n                            return;\n                        }\n                        //Format the countdown as mm:ss so long timers (e.g. 30:00) read cleanly.\n                        const timerMinutes = Math.floor(Math.max(timer, 0) / 60);\n                        const timerSecondsRemainder = String(Math.max(timer, 0) % 60).padStart(2, '0');\n                        timerWarningComponent1.textContent = `You have ${timerMinutes}:${timerSecondsRemainder} to ${phaseText} the pack!`;\n                        let progressPercentage = ((timerSeconds - timer) / timerSeconds) * 100;\n                        progressPercentage = Math.min(progressPercentage, 100); // Ensures max is 100%\n                        progressBarSection.style.display = \"flex\";\n\n                        progressBarFill.style.width = `${progressPercentage}%`;\n                        timer -= 1;\n                        if(timer < 0){\n                            const xButtonComponent = document.getElementById('closeXButton');\n                            xButtonComponent.style.display ='block';\n                            clearInterval(interval);\n                            context._activeTimerCleanup = null;\n                            context.send('closeNotificationPopup');\n                            resolve(true);\n                        }\n                    }, 1000);\n                    masterPopupContent.appendChild(timerWarningComponent1);\n                    //Timer Bar Section\n                    const timerBarSection = document.createElement('div');\n                    timerBarSection.id='packsProgressionPopupViewSection'\n                    timerBarSection.class='packsProgressionViewSection'\n                    //Timer Bar \n                    const timerBarBar = document.createElement('div');\n                    timerBarBar.id='packsProgressionPopupViewBar'\n                    timerBarBar.className='packsProgressionBar'\n                    //Timer Bar Value\n                    const timerBarValue = document.createElement('div');\n                    timerBarValue.id='packsProgressionPopupViewValue'\n                    timerBarValue.className='packsProgressionValue'\n    \n                    timerBarSection.appendChild(timerBarBar);\n                    masterPopupContent.appendChild(timerBarSection);\n                    //Timer Warning message 2\n                    const timerWarningComponent2 = document.createElement('div');\n                    timerWarningComponent2.style.alignSelf = 'center';\n                    timerWarningComponent2.style.fontSize = 'medium';\n                    timerWarningComponent2.textContent = `If you do not meet the time, operation will continue regardless.`;\n                    masterPopupContent.appendChild(timerWarningComponent2);\n                    //Timer Warning message 3\n                    const timerWarningComponent3 = document.createElement('div');\n                    timerWarningComponent3.style.alignSelf = 'center';\n                    timerWarningComponent3.style.fontSize = 'small';\n                    timerWarningComponent3.textContent = `If you are ready before the counter, please click the button below.`;\n                    masterPopupContent.appendChild(timerWarningComponent3);\n    \n                    const readyButtonComponent = document.getElementById('notificationReadyButton');\n                    readyButtonComponent.style.display = \"block\";\n                    readyButtonComponent.style.marginRight = \"10px\";\n                    const closePopupAndResolve = () => {\n                        clearInterval(interval);\n                        context._activeTimerCleanup = null;\n                        xButtonComponent.style.display = 'block';\n                        context.send('closeNotificationPopup');\n                        resolve(true);\n                        document.removeEventListener('keydown', enterKeyHandler);\n                    };\n\n                    readyButtonComponent.onclick = closePopupAndResolve;\n                    const enterKeyHandler = (event) => {\n                        if (event.key === \"Enter\") {\n                            closePopupAndResolve();\n                        }\n                    };\n                    document.addEventListener('keydown', enterKeyHandler);\n                    //Cleanup hook for an EXTERNAL close (clicking the backdrop calls closeNotificationPopup\n                    //directly). Without this the interval keeps running after the modal is gone — throwing\n                    //on the null progress bar, and double-running against the next timer (the \"progress bar\n                    //spams forward/backward on restart\" bug). Stops the timer, drops the key listener, and\n                    //resolves so the awaiting phase flow doesn't hang. The Ready/Abort/timer paths null this\n                    //out themselves so it isn't double-invoked.\n                    context._activeTimerCleanup = () => {\n                        clearInterval(interval);\n                        document.removeEventListener('keydown', enterKeyHandler);\n                        resolve(false);\n                    };\n                    const abortButtonComponent = document.getElementById('notificationAbortButton');\n                    abortButtonComponent.style.display = \"block\";\n                    abortButtonComponent.style.backgroundColor = \"red\"; \n                    abortButtonComponent.style.borderColor = \"red\"; \n                    const abortResolve = () => {\n                        clearInterval(interval);\n                        context._activeTimerCleanup = null;\n                        xButtonComponent.style.display = 'block';\n                        context.send('closeNotificationPopup');\n                        document.removeEventListener('keydown', enterKeyHandler);\n                        context.get(\"emergencyController\").abort();\n                        resolve(false)\n                    };\n                    abortButtonComponent.onclick = abortResolve;\n    \n                }\n            });\n    \n        }catch (error) {\n            console.error('Error unloadLoadPopup:', error);\n            resolve(false);\n            document.removeEventListener('keydown', enterKeyHandler);\n\n        }\n    });\n}\nexport function packValidationConclusion(context, phaseText, packID = null){\n    /**\n     * phaseText is either 'phaseI' or 'phaseII'. \n     * Case sensitive \n     */\n    try{\n        const title = phaseText === 'phaseI' ? \"Phase 1\" : \"Phase 2\";\n        let timer = 30;\n        context.set(\"isShowConfig.isShowPopupNotification\", true);\n        scheduleOnce('afterRender', context, () => {\n            const masterPopupContent = document.getElementById('notificationPopupContentBody');\n            if(masterPopupContent){\n                //X Close Button \n                const xButtonComponent = document.getElementById('closeXButton');\n                xButtonComponent.style.display ='none';\n                //Main Title\n                const mainComponent = document.createElement('div');\n                mainComponent.style.alignSelf = 'center';\n                mainComponent.style.fontSize = ' x-large';\n                mainComponent.style.fontWeight = 'bold';\n                mainComponent.textContent = `Did you pass ${title}?`;\n                masterPopupContent.appendChild(mainComponent);\n                //PackID Title\n                if(packID != null ){\n                    const packIDComponent = document.createElement('div');\n                packIDComponent.style.alignSelf = 'center';\n                packIDComponent.style.fontSize = 'large';\n                packIDComponent.textContent = `Pack ID: ${packID}`;\n                masterPopupContent.appendChild(packIDComponent);}\n                if(phaseText === 'phaseI'){\n                    //Row 1A\n                    const row1A = document.createElement('div');\n                    row1A.style.display='flex';\n                    row1A.style.flexDirection='row';\n                    row1A.style.alignItems='center';\n                    row1A.style.justifyContent='space-between';\n                    //Data Value for Unload\n                    const dataValueUnload = document.createElement('div');\n                    dataValueUnload.style.fontSize = 'medium';\n                    dataValueUnload.style.marginRight = '10px';\n                    dataValueUnload.textContent = `Unload Data: [${context.get('packsValidationData.phase1UnloadData')[0].toString()}]`;\n                    //Data Validity for Unload\n                    const dataValidityUnload = document.createElement('div');\n                    dataValidityUnload.style.fontSize = 'large';\n                    dataValidityUnload.style.fontWeight = 'bold';\n                    dataValidityUnload.style.color = context.get('packsValidationData.phase1ValidityData.unload') ? 'green' : 'red';\n                    dataValidityUnload.textContent = context.get('packsValidationData.phase1ValidityData.unload') ? 'PASS' : 'FAIL';\n                    //Append to Row 1A\n                    row1A.appendChild(dataValueUnload);\n                    row1A.appendChild(dataValidityUnload);\n                    masterPopupContent.appendChild(row1A);\n\n                    //Row 1B\n                    const row1B = document.createElement('div');\n                    row1B.style.display='flex';\n                    row1B.style.flexDirection='row';\n                    row1B.style.alignItems='center';\n                    row1B.style.justifyContent='space-between';\n                    //Data Value for Load\n                    const dataValueLoad = document.createElement('div');\n                    dataValueLoad.style.fontSize = 'medium';\n                    dataValueLoad.style.marginRight = '10px';\n                    dataValueLoad.textContent = `Load Data: [${context.get('packsValidationData.phase1LoadData')[0].toString()}]`;\n                    //Data Validity for Load\n                    const dataValidityLoad = document.createElement('div');\n                    dataValidityLoad.style.fontSize = 'large';\n                    dataValidityLoad.style.fontWeight = 'bold';\n                    dataValidityLoad.style.color = context.get('packsValidationData.phase1ValidityData.load') ? 'green' : 'red';\n                    dataValidityLoad.textContent = context.get('packsValidationData.phase1ValidityData.load') ? 'PASS' : 'FAIL';\n                    //Append to Row 1B\n                    row1B.appendChild(dataValueLoad);\n                    row1B.appendChild(dataValidityLoad);\n                    row1B.appendChild(dataValidityLoad);\n                    masterPopupContent.appendChild(row1B);\n\n                    //Conclusion Validity\n                    const conclusionValidity = document.createElement('div');\n                    conclusionValidity.style.alignSelf = 'center';\n                    conclusionValidity.style.fontSize = 'xx-large';\n                    conclusionValidity.style.fontWeight = 'bold';\n                    conclusionValidity.style.color = context.get('packsValidationData.phase1ValidityData.final') == null ? \"black\" : context.get('packsValidationData.phase1ValidityData.final') ? 'green' : 'red';\n                    conclusionValidity.textContent = context.get('packsValidationData.phase1ValidityData.final') == null ? \"N/A\" : context.get('packsValidationData.phase1ValidityData.final') ? 'PASS' : 'FAIL';\n                    masterPopupContent.appendChild(conclusionValidity);\n\n                    //Math breakdown — below the conclusion, smaller font. Shows the range + spread math\n                    //behind each step's PASS/FAIL so operators can see exactly why it passed or failed.\n                    try{\n                        const mathBreakdownSection = document.createElement('div');\n                        mathBreakdownSection.style.alignSelf = 'center';\n                        mathBreakdownSection.style.marginTop = '6px';\n                        mathBreakdownSection.style.display = 'flex';\n                        mathBreakdownSection.style.flexDirection = 'column';\n                        getPhaseIValidationMath(context).forEach((row)=>{\n                            const lineComp = document.createElement('div');\n                            lineComp.style.fontSize = 'small';\n                            lineComp.style.color = row.ok ? 'green' : 'red';\n                            lineComp.textContent = `${row.ok ? '✓' : '✗'} ${row.label}`;\n                            mathBreakdownSection.appendChild(lineComp);\n                        });\n                        masterPopupContent.appendChild(mathBreakdownSection);\n                    }catch(e){\n                        console.log(\"Error building Phase I math breakdown: \" + e);\n                    }\n                }else{\n                    //Row 2A\n                    const row2A = document.createElement('div');\n                    row2A.style.display='flex';\n                    row2A.style.flexDirection='row';\n                    row2A.style.alignItems='center';\n                    row2A.style.justifyContent='space-between';\n                    //Data Value for Unload1\n                    const dataValueUnload1 = document.createElement('div');\n                    dataValueUnload1.style.fontSize = 'medium';\n                    dataValueUnload1.style.marginRight = '10px';\n                    dataValueUnload1.textContent = `Unload Part 1 Data: [${context.get('packsValidationData.phase2UnloadData1')[0].toString()}]`;\n                    masterPopupContent.appendChild(dataValueUnload1);\n                    //Data Validity for Unload1\n                    const dataValidityUnload1 = document.createElement('div');\n                    dataValidityUnload1.style.fontSize = 'large';\n                    dataValidityUnload1.style.fontWeight = 'bold';\n                    dataValidityUnload1.style.color = context.get('packsValidationData.phase2ValidityData.unload1') ? 'green' : 'red';\n                    dataValidityUnload1.textContent = context.get('packsValidationData.phase2ValidityData.unload1') ? 'PASS' : 'FAIL';\n                    //Append to Row 2A\n                    row2A.appendChild(dataValueUnload1);\n                    row2A.appendChild(dataValidityUnload1);\n                    masterPopupContent.appendChild(row2A);\n                    \n                    //Row 2B\n                    const row2B = document.createElement('div');\n                    row2B.style.display='flex';\n                    row2B.style.flexDirection='row';\n                    row2B.style.alignItems='center';\n                    row2B.style.justifyContent='space-between';\n                    //Data Value for Load1\n                    const dataValueLoad1 = document.createElement('div');\n                    dataValueLoad1.style.fontSize = 'medium';\n                    dataValueLoad1.style.marginRight = '10px';\n                    dataValueLoad1.textContent = `Load Part 1 Data: [${context.get('packsValidationData.phase2LoadData1')[0].toString()}]`;\n                    masterPopupContent.appendChild(dataValueLoad1);\n                    //Data Validity for Load1\n                    const dataValidityLoad1 = document.createElement('div');\n                    dataValidityLoad1.style.fontSize = 'large';\n                    dataValidityLoad1.style.fontWeight = 'bold';\n                    dataValidityLoad1.style.color = context.get('packsValidationData.phase2ValidityData.load1') ? 'green' : 'red';\n                    dataValidityLoad1.textContent = context.get('packsValidationData.phase2ValidityData.load1') ? 'PASS' : 'FAIL';\n                    //Append to Row 2B\n                    row2B.appendChild(dataValueLoad1);\n                    row2B.appendChild(dataValidityLoad1);\n                    masterPopupContent.appendChild(row2B);\n                    \n                    //Row 2C\n                    const row2C = document.createElement('div');\n                    row2C.style.display='flex';\n                    row2C.style.flexDirection='row';\n                    row2C.style.alignItems='center';\n                    row2C.style.justifyContent='space-between';\n                    //Data Value for Load2\n                    const dataValueLoad2 = document.createElement('div');\n                    dataValueLoad2.style.fontSize = 'medium';\n                    dataValueLoad2.style.marginRight = '10px';\n                    dataValueLoad2.textContent = `Load Part 2 Data: [${context.get('packsValidationData.phase2LoadData2')[0].toString()}]`;\n                    //Data Validity for Load2\n                    const dataValidityLoad2 = document.createElement('div');\n                    dataValidityLoad2.style.fontSize = 'large';\n                    dataValidityLoad2.style.fontWeight = 'bold';\n                    dataValidityLoad2.style.color = context.get('packsValidationData.phase2ValidityData.load2') ? 'green' : 'red';\n                    dataValidityLoad2.textContent = context.get('packsValidationData.phase2ValidityData.load2') ? 'PASS' : 'FAIL';\n                    //Append to Row 2B\n                    row2C.appendChild(dataValueLoad2);\n                    row2C.appendChild(dataValidityLoad2);\n                    masterPopupContent.appendChild(row2C);\n                    \n                    //Row 2D\n                    const row2D = document.createElement('div');\n                    row2D.style.display='flex';\n                    row2D.style.flexDirection='row';\n                    row2D.style.alignItems='center';\n                    row2D.style.justifyContent='space-between';\n                    //Data Value for Unload2\n                    const dataValueUnload2 = document.createElement('div');\n                    dataValueUnload2.style.fontSize = 'medium';\n                    dataValueUnload2.style.marginRight = '10px';\n                    dataValueUnload2.textContent = `Unload Part 2 Data: [${context.get('packsValidationData.phase2UnloadData2')[0].toString()}]`;\n                    //Data Validity for Unload2\n                    const dataValidityUnload2 = document.createElement('div');\n                    dataValidityUnload2.style.fontSize = 'large';\n                    dataValidityUnload2.style.fontWeight = 'bold';\n                    dataValidityUnload2.style.color = context.get('packsValidationData.phase2ValidityData.unload2') ? 'green' : 'red';\n                    dataValidityUnload2.textContent = context.get('packsValidationData.phase2ValidityData.unload2') ? 'PASS' : 'FAIL';\n                    //Append to Row 2B\n                    row2D.appendChild(dataValueUnload2);\n                    row2D.appendChild(dataValidityUnload2);\n                    masterPopupContent.appendChild(row2D);\n                    \n                    //Conclusion Validity\n                    const conclusionValidity = document.createElement('div');\n                    conclusionValidity.style.alignSelf = 'center';\n                    conclusionValidity.style.fontSize = 'xx-large';\n                    conclusionValidity.style.fontWeight = 'bold';\n                    conclusionValidity.style.color = context.get('packsValidationData.phase2ValidityData.final') == null ? 'black' : context.get('packsValidationData.phase2ValidityData.final') ? 'green' : 'red';\n                    conclusionValidity.textContent = context.get('packsValidationData.phase2ValidityData.final') == null ? 'N/A' : context.get('packsValidationData.phase2ValidityData.final') ? 'PASS' : 'FAIL';\n                    masterPopupContent.appendChild(conclusionValidity);\n\n                    //Math breakdown — below the conclusion, smaller font. Unload 1 / Load 1 show spread only\n                    //(no range gate in the BE); Load 2 / Unload 2 show both range and spread.\n                    try{\n                        const mathBreakdownSection = document.createElement('div');\n                        mathBreakdownSection.style.alignSelf = 'center';\n                        mathBreakdownSection.style.marginTop = '6px';\n                        mathBreakdownSection.style.display = 'flex';\n                        mathBreakdownSection.style.flexDirection = 'column';\n                        getPhaseIIValidationMath(context).forEach((row)=>{\n                            const lineComp = document.createElement('div');\n                            lineComp.style.fontSize = 'small';\n                            lineComp.style.color = row.ok ? 'green' : 'red';\n                            lineComp.textContent = `${row.ok ? '✓' : '✗'} ${row.label}`;\n                            mathBreakdownSection.appendChild(lineComp);\n                        });\n                        masterPopupContent.appendChild(mathBreakdownSection);\n                    }catch(e){\n                        console.log(\"Error building Phase II math breakdown: \" + e);\n                    }\n\n                    if(phaseText === 'phaseII' && context.get('packsValidationData.phase2ValidityData.final') != null &&!context.get('packsValidationData.phase2ValidityData.final')){\n                        //Row 2E\n                        const row2E = document.createElement('div');\n                        row2E.style.display='flex';\n                        row2E.style.flexDirection='row';\n                        row2E.style.alignItems='center';\n                        row2E.style.marginTop='25px';\n                        //OVerrule Username Text\n                        const overruleUsernameText = document.createElement('div');\n                        overruleUsernameText.style.fontSize = 'medium';\n                        overruleUsernameText.style.marginRight = '10px';\n                        overruleUsernameText.textContent = `Username:`;\n                        //Overrule Username Textbox\n                        const tdUsernameElement = document.createElement('td');\n                        tdUsernameElement.classList.add('input');\n                        const inputUsernameElement = document.createElement('input');\n                        inputUsernameElement.classList.add('form-control'); \n                        inputUsernameElement.setAttribute('type', 'text');\n                        inputUsernameElement.id=`overruleEmployeeUserName`;\n                        inputUsernameElement.style.fontSize = \"medium\";\n                        inputUsernameElement.style.padding = \"0px\";\n                        tdUsernameElement.appendChild(inputUsernameElement);\n                        //Overrule Password Text\n                        const overrulePasswordText = document.createElement('div');\n                        overrulePasswordText.style.fontSize = 'medium';\n                        overrulePasswordText.style.marginRight = '10px';\n                        overrulePasswordText.textContent = `Password:`;\n                        //Overrule Password Textbox\n                        const tdPassowrdElement = document.createElement('td');\n                        tdPassowrdElement.classList.add('input');\n                        const inputPasswordElement = document.createElement('input');\n                        inputPasswordElement.classList.add('form-control'); \n                        inputPasswordElement.setAttribute('type', 'password');\n                        inputPasswordElement.id=`overruleEmployeePassword`;\n                        inputPasswordElement.style.fontSize = \"medium\";\n                        inputPasswordElement.style.padding = \"0px\";\n                        tdPassowrdElement.appendChild(inputPasswordElement);\n                        //Append to Row 2E\n                        row2E.appendChild(overruleUsernameText);\n                        row2E.appendChild(tdUsernameElement);\n                        row2E.appendChild(overrulePasswordText);\n                        row2E.appendChild(tdPassowrdElement);\n                        masterPopupContent.appendChild(row2E);\n                        //Row 2F\n                        const row2F = document.createElement('div');\n                        row2F.style.display='flex';\n                        row2F.style.flexDirection='row';\n                        row2F.style.alignItems='center';\n                        row2F.style.marginTop='25px';\n                        //Phase 2 Memo\n                        \n                        const phase2SectionLabel = document.createElement('div');\n                        phase2SectionLabel.style.fontSize = 'medium';\n                        phase2SectionLabel.style.marginRight = '10px';\n                        phase2SectionLabel.textContent = `Phase 2 Memo:`;\n                        const td = document.createElement('td');\n                        td.classList.add('input');\n                        const phase2SectionValue = document.createElement('textarea');\n                        phase2SectionValue.classList.add('form-control');\n                        phase2SectionValue.id = 'phase2Memo';\n                        phase2SectionValue.style.fontSize = 'small';\n                        phase2SectionValue.style.minHeight = '120px';\n                        phase2SectionValue.style.padding = '0px';\n                        phase2SectionValue.textContent=context.get(\"userInputtedData.selectedPackData.phase2Memo\")\n                        phase2SectionValue.addEventListener('input', function(event) {\n                            try{\n                                const key = event.target.id;\n                                const value = event.target.value;\n                                context.set(\"userInputtedData.selectedPackData.phase2Memo\", value)\n                            }catch(err){\n                                console.log(`Error in packValidationConclusion: ${err.message}`);\n                                \n                            }\n                        });\n                        \n                        td.appendChild(phase2SectionValue);\n                        row2F.appendChild(phase2SectionLabel);\n                        row2F.appendChild(td);\n                        masterPopupContent.appendChild(row2F);\n                    }\n                }\n\n                const okButtonComponent = document.getElementById('notificationOkButton');\n                okButtonComponent.style.display = \"block\";\n                okButtonComponent.style.marginRight = \"10px\";\n                okButtonComponent.onclick = () => {\n                    //X Close Button \n                    const xButtonComponent = document.getElementById('closeXButton');\n                    xButtonComponent.style.display ='none';\n                    context.send('closeNotificationPopup'); \n                };\n\n                if(phaseText === 'phaseII' && context.get('packsValidationData.phase2ValidityData.final') != null && !context.get('packsValidationData.phase2ValidityData.final')){\n                    const overrruleButtonComponent = document.getElementById('notificationOverruleButton');\n                    overrruleButtonComponent.style.display = \"block\";\n                    overrruleButtonComponent.style.marginRight = \"10px\";\n                    overrruleButtonComponent.onclick = async function () {\n                        if(document.getElementById('overruleEmployeeUserName') != null && document.getElementById('overruleEmployeeUserName').value.length > 0 &&\n                        document.getElementById('overruleEmployeePassword') != null && document.getElementById('overruleEmployeePassword').value.length > 0 ){\n                            let overruleResult = await overrulePhaseIIConclusion(context, document.getElementById('overruleEmployeeUserName').value, document.getElementById('overruleEmployeePassword').value)\n                            if(overruleResult){\n                                //X Close Button \n                                const xButtonComponent = document.getElementById('closeXButton');\n                                xButtonComponent.style.display ='block';\n                                context.send('closeNotificationPopup'); \n                                context.set('packsValidationData.phase2ValidityData.final', true);\n                                showPopup(['Overrule Successful!', 'Bear in mind, you have only overruled final decision.','Decision for each sample have not been overruled!'], 'success',5);\n                            }else{\n                                showPopup(['Overrule Failed!'], 'error',5);\n\n                            }\n                        }\n                    };\n\n                }\n\n            }\n        });\n\n    }catch (error) {\n        console.error('Error unloadLoadPopup:', error);\n    }\n}\n//`exportMode` (used by the batch export) skips wiring the Ok/Print buttons. `targetContainer`, when\n//given, renders the report INTO that element instead of the popup body (and leaves it uncleared) so\n//several reports can be stacked in one modal — safe because the report uses closure refs, not\n//getElementById, for its rows/toggles. Returns a Promise that resolves once rendering completes, so\n//the batch can await each render before snapshotting it.\nexport async function packProfileDetailBoard(context, allowPrint, packProfile, rigProfile, packType, packData, exportMode=false, targetContainer=null){\n    return new Promise((resolve)=>{\n    try{\n        context.set(\"isShowConfig.isShowPopupNotification\", true);\n        scheduleOnce('afterRender', context, () => {\n            console.log(packProfile);\n            console.log(rigProfile);\n            console.log(packType);\n            console.log(packData);\n            const popupContentSectionComponent = targetContainer || document.getElementById('notificationPopupContentBody');\n            if(popupContentSectionComponent){\n                if(!targetContainer){ popupContentSectionComponent.innerHTML = ''; }\n\n                //Report Title\n                const reportTitleSection = document.createElement('div');\n                reportTitleSection.style.fontSize = \"large\";\n                reportTitleSection.style.alignSelf = \"center\";\n                reportTitleSection.style.textDecoration = \"underline\";\n                reportTitleSection.textContent = `${packProfile['packName']} Report`;\n                reportTitleSection.style.fontWeight = \"bold\";\n\n                //Validity Title\n                let  finalVerdictSection = null\n                if(packData != null){\n                    let phase1VerdictString = \"\";\n                    let phase2VerdictString = \"\";\n                    const isAllDataProvided1 = packData['phase1LoadData'] != null && packData['phase1LoadData'].length > 0 &&\n                    packData['phase1UnloadData'] != null && packData['phase1UnloadData'].length > 0 \n                \n                    if(isAllDataProvided1 && packData['phase1ValidityData'] != null){\n                        phase1VerdictString = `${packData['phase1ValidityData']['final'] ? \"PASS\" : \"FAIL\"}`;\n                    }else{\n                        phase1VerdictString = \"N/A\"\n                    }\n                    const isAllDataProvided = packData['phase2LoadData1'] != null && packData['phase2LoadData1'].length > 0 &&\n                    packData['phase2LoadData2'] != null && packData['phase2LoadData2'].length > 0 &&\n                    packData['phase2UnloadData1'] != null && packData['phase2UnloadData1'].length > 0 &&\n                    packData['phase2UnloadData2'] != null && packData['phase2UnloadData2'].length > 0\n                \n                    if(isAllDataProvided && packData['phase2ValidityData'] != null){\n                        phase2VerdictString = `${packData['phase2ValidityData']['final'] ? \"PASS\" : \"FAIL\"}`;\n                    }else{\n                        phase2VerdictString = \"N/A\"\n                    }\n                    const finalVerdict1= `P1-${phase1VerdictString}`;\n                    const finalVerdict2= `P2-${phase2VerdictString}`;\n                    finalVerdictSection = document.createElement('div');\n                    finalVerdictSection.style.flexDirection = \"row\";\n                    finalVerdictSection.style.alignSelf = \"center\";\n                    finalVerdictSection.style.display = \"flex\";\n                    const p1VerdictSection = document.createElement('div');\n                    p1VerdictSection.style.fontSize = \"medium\";\n                    p1VerdictSection.style.fontWeight = \"bold\";\n                    p1VerdictSection.style.color = phase1VerdictString === \"PASS\" ? \"green\": phase1VerdictString === \"FAIL\" ? \"red\" : \"black\";\n                    p1VerdictSection.textContent = finalVerdict1;\n                    const verdictBufferSection = document.createElement('div');\n                    verdictBufferSection.style.width=\"10px\";\n                    const p2VerdictSection = document.createElement('div');\n                    p2VerdictSection.style.fontSize = \"medium\";\n                    p2VerdictSection.style.fontWeight = \"bold\";\n                    p2VerdictSection.style.color = phase2VerdictString === \"PASS\" ? \"green\": phase2VerdictString === \"FAIL\" ? \"red\" : \"black\";\n                    p2VerdictSection.textContent = finalVerdict2;\n\n                    finalVerdictSection.appendChild(p1VerdictSection);\n                    finalVerdictSection.appendChild(verdictBufferSection);\n                    finalVerdictSection.appendChild(p2VerdictSection);\n                    popupContentSectionComponent.appendChild(finalVerdictSection);\n                    \n                }\n                //Overruled Title\n                let  overruledWarningSection = null\n                if (packProfile['phase2OverruleEmployee'] != null && packProfile['phase2OverruleEmployee'] != \"\" && packProfile['phase2OverruleEmployee'] != \"N/A\") {\n                    overruledWarningSection = document.createElement('div');\n                    overruledWarningSection.style.fontSize = \"medium\";\n                    overruledWarningSection.style.color = \"red\";\n                    overruledWarningSection.style.alignSelf = \"center\";\n                    overruledWarningSection.style.textDecoration = \"underline\";\n                    overruledWarningSection.textContent = `*This pack has been overruled*`;\n                    overruledWarningSection.style.fontWeight = \"bold\";\n                    overruledWarningSection.style.cursor=\"pointer\";\n                    overruledWarningSection.addEventListener('click', () => {\n                        showPopup(['Bear in mind, you have only overruled final decision.','Decision for each sample have not been overruled!'], 'warning',5);\n\n                    });\n\n                } \n                //Quick Detail Title\n                const quickDetailTitleSection = document.createElement('div');\n                quickDetailTitleSection.style.fontSize = \"small\";\n                quickDetailTitleSection.textContent = \"Quick Detail:\";\n                quickDetailTitleSection.style.fontWeight = \"bold\";\n                quickDetailTitleSection.style.textDecoration = \"underline\";\n                //Row 1A==========================================================\n                const row1ASection = document.createElement('div');\n                row1ASection.style.display = \"flex\";\n                row1ASection.style.flexDirection = \"row\";\n                row1ASection.style.marginLeft = \"25px\";\n                //Validation ID\n                const validationIDSection = document.createElement('div');\n                validationIDSection.style.display = \"flex\";\n                validationIDSection.style.flexDirection = \"row\";\n                validationIDSection.style.alignItems = \"center\";\n                validationIDSection.style.width = \"33%\";\n                const validationIDLabelSection = document.createElement('div');\n                validationIDLabelSection.style.fontSize = \"small\";\n                validationIDLabelSection.textContent = \"Validation ID:\";\n                validationIDLabelSection.style.fontWeight = \"bold\";\n                const validationIDValueSection = document.createElement('div');\n                validationIDValueSection.style.fontSize = \"small\";\n                validationIDValueSection.textContent = `${packProfile['validationID']}`;\n                validationIDValueSection.style.paddingLeft = \"5px\";\n                validationIDSection.appendChild(validationIDLabelSection);\n                validationIDSection.appendChild(validationIDValueSection);\n                //Pack ID\n                const packIDSection = document.createElement('div');\n                packIDSection.style.display = \"flex\";\n                packIDSection.style.flexDirection = \"row\";\n                packIDSection.style.alignItems = \"center\";\n                packIDSection.style.width = \"33%\";\n                const packIDLabelSection = document.createElement('div');\n                packIDLabelSection.style.fontSize = \"small\";\n                packIDLabelSection.textContent = \"Pack ID:\";\n                packIDLabelSection.style.fontWeight = \"bold\";\n                const packIDValueSection = document.createElement('div');\n                packIDValueSection.style.fontSize = \"small\";\n                packIDValueSection.textContent = packProfile['packID'] ? `${packProfile['packID']}` : \"\";\n                packIDValueSection.style.paddingLeft = \"5px\";\n                packIDSection.appendChild(packIDLabelSection);\n                packIDSection.appendChild(packIDValueSection);\n                //Company\n                const companySection = document.createElement('div');\n                companySection.style.display = \"flex\";\n                companySection.style.flexDirection = \"row\";\n                companySection.style.alignItems = \"center\";\n                companySection.style.width = \"33%\";\n                const companyLabelSection = document.createElement('div');\n                companyLabelSection.style.fontSize = \"small\";\n                companyLabelSection.textContent = \"Company:\";\n                companyLabelSection.style.fontWeight = \"bold\";\n                const companyValueSection = document.createElement('div');\n                companyValueSection.style.fontSize = \"small\";\n                companyValueSection.textContent = packProfile['company'] ? `${packProfile['company']}` : \"\";\n                companyValueSection.style.paddingLeft = \"5px\";\n                companySection.appendChild(companyLabelSection);\n                companySection.appendChild(companyValueSection);\n\n                //Row 1B==========================================================\n                const row1BSection = document.createElement('div');\n                row1BSection.style.display = \"flex\";\n                row1BSection.style.flexDirection = \"row\";\n                row1BSection.style.marginLeft = \"25px\";\n                //phase1Employee\n                const phase1EmployeeSection = document.createElement('div');\n                phase1EmployeeSection.style.display = \"flex\";\n                phase1EmployeeSection.style.flexDirection = \"row\";\n                phase1EmployeeSection.style.alignItems = \"center\";\n                phase1EmployeeSection.style.width = \"33%\";\n                const phase1EmployeeLabelSection = document.createElement('div');\n                phase1EmployeeLabelSection.style.fontSize = \"small\";\n                phase1EmployeeLabelSection.textContent = \"P1 Employee:\";\n                phase1EmployeeLabelSection.style.fontWeight = \"bold\";\n                const phase1EmployeeValueSection = document.createElement('div');\n                phase1EmployeeValueSection.style.fontSize = \"small\";\n                phase1EmployeeValueSection.textContent = packProfile['phase1Employee'] ? `${packProfile['phase1Employee']}` : '';\n                phase1EmployeeValueSection.style.paddingLeft = \"5px\";\n                phase1EmployeeSection.appendChild(phase1EmployeeLabelSection);\n                phase1EmployeeSection.appendChild(phase1EmployeeValueSection);\n                //phase1ValidationDate\n                const phase1ValidationDateSection = document.createElement('div');\n                phase1ValidationDateSection.style.display = \"flex\";\n                phase1ValidationDateSection.style.flexDirection = \"row\";\n                phase1ValidationDateSection.style.alignItems = \"center\";\n                phase1ValidationDateSection.style.width = \"33%\";\n                const phase1ValidationDateLabelSection = document.createElement('div');\n                phase1ValidationDateLabelSection.style.fontSize = \"small\";\n                phase1ValidationDateLabelSection.textContent = \"P1 Date:\";\n                phase1ValidationDateLabelSection.style.fontWeight = \"bold\";\n                const phase1ValidationDateValueSection = document.createElement('div');\n                phase1ValidationDateValueSection.style.fontSize = \"small\";\n                phase1ValidationDateValueSection.textContent = packProfile['phase1ValidationDate'] ? `${packProfile['phase1ValidationDate']}` : \"\";\n                phase1ValidationDateValueSection.style.paddingLeft = \"5px\";\n                phase1ValidationDateSection.appendChild(phase1ValidationDateLabelSection);\n                phase1ValidationDateSection.appendChild(phase1ValidationDateValueSection);\n\n                //Row 1C==========================================================\n                const row1CSection = document.createElement('div');\n                row1CSection.style.display = \"flex\";\n                row1CSection.style.flexDirection = \"row\";\n                row1CSection.style.marginLeft = \"25px\";\n                //phase2Employee\n                const phase2EmployeeSection = document.createElement('div');\n                phase2EmployeeSection.style.display = \"flex\";\n                phase2EmployeeSection.style.flexDirection = \"row\";\n                phase2EmployeeSection.style.alignItems = \"center\";\n                phase2EmployeeSection.style.width = \"33%\";\n                const phase2EmployeeLabelSection = document.createElement('div');\n                phase2EmployeeLabelSection.style.fontSize = \"small\";\n                phase2EmployeeLabelSection.textContent = \"P2 Employee:\";\n                phase2EmployeeLabelSection.style.fontWeight = \"bold\";\n                const phase2EmployeeValueSection = document.createElement('div');\n                phase2EmployeeValueSection.style.fontSize = \"small\";\n                phase2EmployeeValueSection.textContent = packProfile['phase2Employee'] ? `${packProfile['phase2Employee']}` : \"\";\n                phase2EmployeeValueSection.style.paddingLeft = \"5px\";\n                phase2EmployeeSection.appendChild(phase2EmployeeLabelSection);\n                phase2EmployeeSection.appendChild(phase2EmployeeValueSection);\n                //phase2ValidationDate\n                const phase2ValidationDateSection = document.createElement('div');\n                phase2ValidationDateSection.style.display = \"flex\";\n                phase2ValidationDateSection.style.flexDirection = \"row\";\n                phase2ValidationDateSection.style.alignItems = \"center\";\n                phase2ValidationDateSection.style.width = \"33%\";\n                const phase2ValidationDateLabelSection = document.createElement('div');\n                phase2ValidationDateLabelSection.style.fontSize = \"small\";\n                phase2ValidationDateLabelSection.textContent = \"P2 Date:\";\n                phase2ValidationDateLabelSection.style.fontWeight = \"bold\";\n                const phase2ValidationDateValueSection = document.createElement('div');\n                phase2ValidationDateValueSection.style.fontSize = \"small\";\n                phase2ValidationDateValueSection.textContent = packProfile['phase2ValidationDate'] ? `${packProfile['phase2ValidationDate']}` : '';\n                phase2ValidationDateValueSection.style.paddingLeft = \"5px\";\n                phase2ValidationDateSection.appendChild(phase2ValidationDateLabelSection);\n                phase2ValidationDateSection.appendChild(phase2ValidationDateValueSection);\n                \n                //Appending to Row 1A==========================================================\n                popupContentSectionComponent.appendChild(reportTitleSection);\n                if(finalVerdictSection){\n                    popupContentSectionComponent.appendChild(finalVerdictSection);\n                }\n                if(overruledWarningSection){\n                    popupContentSectionComponent.appendChild(overruledWarningSection);\n                }\n                popupContentSectionComponent.appendChild(quickDetailTitleSection);\n                popupContentSectionComponent.appendChild(row1ASection);\n                row1ASection.appendChild(validationIDSection);\n                row1ASection.appendChild(packIDSection);\n                row1ASection.appendChild(companySection);\n                //Appending to Row 1B==========================================================\n                popupContentSectionComponent.appendChild(row1BSection);\n                row1BSection.appendChild(phase1EmployeeSection);\n                row1BSection.appendChild(phase1ValidationDateSection);\n                //Appending to Row 1C==========================================================\n                popupContentSectionComponent.appendChild(row1CSection);\n                row1CSection.appendChild(phase2EmployeeSection);\n                row1CSection.appendChild(phase2ValidationDateSection);\n                \n                if(rigProfile != null){\n                    //Row 2 IF THERE IS RIG DATA==========================================================\n                    const row2ASection = document.createElement('div');\n                    row2ASection.style.display = \"flex\";\n                    row2ASection.style.flexDirection = \"row\";\n                    row2ASection.style.marginLeft = \"25px\";\n                    //Rig Detail Title\n                    const rigTitleSection = document.createElement('div');\n                    rigTitleSection.style.fontSize = \"small\";\n                    rigTitleSection.textContent = \"Rig Detail:\";\n                    rigTitleSection.style.fontWeight = \"bold\";\n                    rigTitleSection.style.textDecoration = \"underline\";\n                    //Rig ID\n                    const rigIDSection = document.createElement('div');\n                    rigIDSection.style.display = \"flex\";\n                    rigIDSection.style.flexDirection = \"row\";\n                    rigIDSection.style.alignItems = \"center\";\n                    rigIDSection.style.width = \"33%\";\n                    const rigIDLabelSection = document.createElement('div');\n                    rigIDLabelSection.style.fontSize = \"small\";\n                    rigIDLabelSection.textContent = \"Rig ID:\";\n                    rigIDLabelSection.style.fontWeight = \"bold\";\n                    const rigIDValueSection = document.createElement('div');\n                    rigIDValueSection.style.fontSize = \"small\";\n                    rigIDValueSection.textContent = `${rigProfile['rigID']}`;\n                    rigIDValueSection.style.paddingLeft = \"5px\";\n                    rigIDSection.appendChild(rigIDLabelSection);\n                    rigIDSection.appendChild(rigIDValueSection);\n                    //Rig Name\n                    const rigNameSection = document.createElement('div');\n                    rigNameSection.style.display = \"flex\";\n                    rigNameSection.style.flexDirection = \"row\";\n                    rigNameSection.style.alignItems = \"center\";\n                    rigNameSection.style.width = \"33%\";\n                    const rigNameLabelSection = document.createElement('div');\n                    rigNameLabelSection.style.fontSize = \"small\";\n                    rigNameLabelSection.textContent = \"Name:\";\n                    rigNameLabelSection.style.fontWeight = \"bold\";\n                    const rigNameValueSection = document.createElement('div');\n                    rigNameValueSection.style.fontSize = \"small\";\n                    rigNameValueSection.textContent = `${rigProfile['rigName']}`;\n                    rigNameValueSection.style.paddingLeft = \"5px\";\n                    rigNameSection.appendChild(rigNameLabelSection);\n                    rigNameSection.appendChild(rigNameValueSection);\n                    //Rig IP\n                    const rigIPSection = document.createElement('div');\n                    rigIPSection.style.display = \"flex\";\n                    rigIPSection.style.flexDirection = \"row\";\n                    rigIPSection.style.alignItems = \"center\";\n                    rigIPSection.style.width = \"33%\";\n                    const rigIPLabelSection = document.createElement('div');\n                    rigIPLabelSection.style.fontSize = \"small\";\n                    rigIPLabelSection.textContent = \"IP:\";\n                    rigIPLabelSection.style.fontWeight = \"bold\";\n                    const rigIPValueSection = document.createElement('div');\n                    rigIPValueSection.style.fontSize = \"small\";\n                    rigIPValueSection.textContent = `${rigProfile['rigIP']}`;\n                    rigIPValueSection.style.paddingLeft = \"5px\";\n                    rigIPSection.appendChild(rigIPLabelSection);\n                    rigIPSection.appendChild(rigIPValueSection);\n\n                    //Appending to Row 2A==========================================================\n                    popupContentSectionComponent.appendChild(rigTitleSection);\n                    popupContentSectionComponent.appendChild(row2ASection);\n                    row2ASection.appendChild(rigIDSection);\n                    row2ASection.appendChild(rigNameSection);\n                    row2ASection.appendChild(rigIPSection);\n                    \n                }\n                //Row 3A==========================================================\n                const row3ASection = document.createElement('div');\n                row3ASection.style.display = \"flex\";\n                row3ASection.style.flexDirection = \"row\";\n                row3ASection.style.alignItems = \"center\";\n                row3ASection.style.marginLeft = \"25px\";\n                //Pack Detail Title\n                const packDetailTitleSection = document.createElement('div');\n                packDetailTitleSection.style.fontSize = \"small\";\n                packDetailTitleSection.textContent = \"Pack Detail:\";\n                packDetailTitleSection.style.fontWeight = \"bold\";\n                packDetailTitleSection.style.textDecoration = \"underline\";\n                popupContentSectionComponent.append(packDetailTitleSection);\n                if(packType != null){\n                    //Pack Name\n                    const packNameSection = document.createElement('div');\n                    packNameSection.style.display = \"flex\";\n                    packNameSection.style.flexDirection = \"row\";\n                    packNameSection.style.alignItems = \"center\";\n                    packNameSection.style.width = \"25%\";\n                    const packNameLabelSection = document.createElement('div');\n                    packNameLabelSection.style.fontSize = \"small\";\n                    packNameLabelSection.textContent = \"Name:\";\n                    packNameLabelSection.style.fontWeight = \"bold\";\n                    const packNameValueSection = document.createElement('div');\n                    packNameValueSection.style.fontSize = \"small\";\n                    packNameValueSection.textContent = packType['name'] ;\n                    packNameValueSection.style.paddingLeft = \"5px\";\n                    packNameSection.appendChild(packNameLabelSection);\n                    packNameSection.appendChild(packNameValueSection);\n                    row3ASection.appendChild(packNameSection);\n                }\n                //Pack Overruled\n                const overruleSection = document.createElement('div');\n                overruleSection.style.display = \"flex\";\n                overruleSection.style.flexDirection = \"row\";\n                overruleSection.style.alignItems = \"center\";\n                overruleSection.style.width = \"25%\";\n                const overruleLabelSection = document.createElement('div');\n                overruleLabelSection.style.fontSize = \"small\";\n                overruleLabelSection.textContent = \"Overruler:\";\n                overruleLabelSection.style.fontWeight = \"bold\";\n                const overruleValueSection = document.createElement('div');\n                overruleValueSection.style.fontSize = \"small\";\n                overruleValueSection.textContent = (packProfile['phase2OverruleEmployee'] != null && packProfile['phase2OverruleEmployee'] != '') ? `${packProfile['phase2OverruleEmployee']}` : \"No\";\n                overruleValueSection.style.paddingLeft = \"5px\";\n                overruleSection.appendChild(overruleLabelSection);\n                overruleSection.appendChild(overruleValueSection);\n                row3ASection.appendChild(overruleSection);\n\n                //Progression\n                const progressionSection = document.createElement('div');\n                progressionSection.style.display = \"flex\";\n                progressionSection.style.flexDirection = \"row\";\n                progressionSection.style.alignItems = \"center\";\n                progressionSection.style.width = \"25%\";\n                const progressionLabelSection = document.createElement('div');\n                progressionLabelSection.style.fontSize = \"small\";\n                progressionLabelSection.textContent = \"Progression:\";\n                progressionLabelSection.style.fontWeight = \"bold\";\n                const progressionValueSection = document.createElement('div');\n                progressionValueSection.style.fontSize = \"small\";\n                // Progression keys (must match DATA_KEY_TO_PROGRESSION_STAGE).\n                // Guarded with `?.` so a partially-populated `progression` block doesn't crash here.\n                const progression = packProfile['progression'] || {};\n                const isDone = (key) => !!(progression[key] && progression[key]['is_complete']);\n                const p1Progression = ['p1_unloadData','p1_loadData'].filter(isDone).length;\n                const p2Progression = ['p2_s1_unloadData','p2_s2_loadData','p2_s3_loadData','p2_s4_unloadData'].filter(isDone).length;\n                progressionValueSection.textContent = `P1:${p1Progression}/2 P2:${p2Progression}/4`;\n                progressionValueSection.style.paddingLeft = \"5px\";\n                progressionSection.appendChild(progressionLabelSection);\n                progressionSection.appendChild(progressionValueSection);\n                row3ASection.appendChild(progressionSection);\n\n                popupContentSectionComponent.appendChild(row3ASection );\n\n                //Row 3B==========================================================\n                const row3BSection = document.createElement('div');\n                row3BSection.style.display = \"flex\";\n                row3BSection.style.flexDirection = \"row\";\n                row3BSection.style.alignItems = \"center\";\n                row3BSection.style.marginLeft = \"25px\";\n                if(packType != null){\n                    //Active number of Coils \n                    let activeCoilsCountSection = document.createElement('div');\n                    activeCoilsCountSection.style.display = \"flex\";\n                    activeCoilsCountSection.style.flexDirection = \"row\";\n                    activeCoilsCountSection.style.alignItems = \"center\";\n                    activeCoilsCountSection.style.width = \"25%\";\n                    const activeCoilsCountLabelSection = document.createElement('div');\n                    activeCoilsCountLabelSection.style.fontSize = \"small\";\n                    activeCoilsCountLabelSection.textContent = \"Act. # Coils:\";\n                    activeCoilsCountLabelSection.style.fontWeight = \"bold\";\n                    const activeCoilsCountValueSection = document.createElement('div');\n                    activeCoilsCountValueSection.style.fontSize = \"small\";\n                    activeCoilsCountValueSection.textContent = `${packType['coilsProfile']['activeCoilsCount']}`;\n                    activeCoilsCountValueSection.style.paddingLeft = \"5px\";\n                    activeCoilsCountSection.appendChild(activeCoilsCountLabelSection);\n                    activeCoilsCountSection.appendChild(activeCoilsCountValueSection);\n\n                    row3BSection.appendChild(activeCoilsCountSection);\n\n\n                    //Total number Coils \n                    let totalCoilsCountSection = document.createElement('div');\n                    totalCoilsCountSection.style.display = \"flex\";\n                    totalCoilsCountSection.style.flexDirection = \"row\";\n                    totalCoilsCountSection.style.alignItems = \"center\";\n                    totalCoilsCountSection.style.width = \"25%\";\n                    const totalCoilsCountLabelSection = document.createElement('div');\n                    totalCoilsCountLabelSection.style.fontSize = \"small\";\n                    totalCoilsCountLabelSection.textContent = \"Total # Coils:\";\n                    totalCoilsCountLabelSection.style.fontWeight = \"bold\";\n                    const totalCoilsCountValueSection = document.createElement('div');\n                    totalCoilsCountValueSection.style.fontSize = \"small\";\n                    totalCoilsCountValueSection.textContent = `${packType['coilsProfile']['totalCoilsCount']}`;\n                    totalCoilsCountValueSection.style.paddingLeft = \"5px\";\n                    totalCoilsCountSection.appendChild(totalCoilsCountLabelSection);\n                    totalCoilsCountSection.appendChild(totalCoilsCountValueSection);\n\n                    row3BSection.appendChild(totalCoilsCountSection);\n\n                    //Active Coils Positions \n                    let activeCoilsPositionsSection = document.createElement('div');\n                    activeCoilsPositionsSection.style.display = \"flex\";\n                    activeCoilsPositionsSection.style.flexDirection = \"row\";\n                    activeCoilsPositionsSection.style.alignItems = \"center\";\n                    activeCoilsPositionsSection.style.width = \"25%\";\n                    const activeCoilsPositionsLabelSection = document.createElement('div');\n                    activeCoilsPositionsLabelSection.style.fontSize = \"small\";\n                    activeCoilsPositionsLabelSection.textContent = \"Act. Coils Pos.:\";\n                    activeCoilsPositionsLabelSection.style.fontWeight = \"bold\";\n                    const activeCoilsPositionsValueSection = document.createElement('div');\n                    activeCoilsPositionsValueSection.style.fontSize = \"small\";\n                    activeCoilsPositionsValueSection.textContent = `[${packType['coilsProfile']['generalCoilsPositions'].toString()}]`;\n                    activeCoilsPositionsValueSection.style.paddingLeft = \"5px\";\n                    activeCoilsPositionsSection.appendChild(activeCoilsPositionsLabelSection);\n                    activeCoilsPositionsSection.appendChild(activeCoilsPositionsValueSection);\n\n                    row3BSection.appendChild(activeCoilsPositionsSection);\n\n                    //Unfilled Coils Positions \n                    let unfilledCoilsPositionsSection = document.createElement('div');\n                    unfilledCoilsPositionsSection.style.display = \"flex\";\n                    unfilledCoilsPositionsSection.style.flexDirection = \"row\";\n                    unfilledCoilsPositionsSection.style.alignItems = \"center\";\n                    unfilledCoilsPositionsSection.style.width = \"25%\";\n                    const unfilledCoilsPositionsLabelSection = document.createElement('div');\n                    unfilledCoilsPositionsLabelSection.style.fontSize = \"small\";\n                    unfilledCoilsPositionsLabelSection.textContent = \"Unfilled Coils Pos.:\";\n                    unfilledCoilsPositionsLabelSection.style.fontWeight = \"bold\";\n                    const unfilledCoilsPositionsValueSection = document.createElement('div');\n                    unfilledCoilsPositionsValueSection.style.fontSize = \"small\";\n                    unfilledCoilsPositionsValueSection.textContent = `[${packType['coilsProfile']['referenceUnfilledCoilsPositions'].toString()}]`;\n                    unfilledCoilsPositionsValueSection.style.paddingLeft = \"5px\";\n                    unfilledCoilsPositionsSection.appendChild(unfilledCoilsPositionsLabelSection);\n                    unfilledCoilsPositionsSection.appendChild(unfilledCoilsPositionsValueSection);\n\n                    row3BSection.appendChild(unfilledCoilsPositionsSection);\n                    \n                }\n                popupContentSectionComponent.appendChild(row3BSection);\n\n                //Row 3C==========================================================\n                const row3CSection = document.createElement('div');\n                row3CSection.style.display = \"flex\";\n                row3CSection.style.flexDirection = \"row\";\n                row3CSection.style.alignItems = \"center\";\n                row3CSection.style.marginLeft = \"25px\";\n                if(packType != null){\n                    //Pack Type ID \n                    let typeIDSection = document.createElement('div');\n                    typeIDSection.style.display = \"flex\";\n                    typeIDSection.style.flexDirection = \"row\";\n                    typeIDSection.style.alignItems = \"center\";\n                    typeIDSection.style.width = \"25%\";\n                    const typeIDLabelSection = document.createElement('div');\n                    typeIDLabelSection.style.fontSize = \"small\";\n                    typeIDLabelSection.textContent = \"Type ID:\";\n                    typeIDLabelSection.style.fontWeight = \"bold\";\n                    const typeIDValueSection = document.createElement('div');\n                    typeIDValueSection.style.fontSize = \"small\";\n                    typeIDValueSection.textContent = `${packType['id']}`;\n                    typeIDValueSection.style.paddingLeft = \"5px\";\n                    typeIDSection.appendChild(typeIDLabelSection);\n                    typeIDSection.appendChild(typeIDValueSection);\n                    row3CSection.appendChild(typeIDSection);\n\n                    //Pack Type \n                    let typeSection = document.createElement('div');\n                    typeSection.style.display = \"flex\";\n                    typeSection.style.flexDirection = \"row\";\n                    typeSection.style.alignItems = \"center\";\n                    typeSection.style.width = \"25%\";\n                    const typeLabelSection = document.createElement('div');\n                    typeLabelSection.style.fontSize = \"small\";\n                    typeLabelSection.textContent = \"Type:\";\n                    typeLabelSection.style.fontWeight = \"bold\";\n                    const typeValueSection = document.createElement('div');\n                    typeValueSection.style.fontSize = \"small\";\n                    typeValueSection.textContent = `${packType['packType']}`;\n                    typeValueSection.style.paddingLeft = \"5px\";\n                    typeSection.appendChild(typeLabelSection);\n                    typeSection.appendChild(typeValueSection);\n                    row3CSection.appendChild(typeSection);\n                }\n                popupContentSectionComponent.appendChild(row3CSection);\n\n                //Row 3D==========================================================\n                const row3DSection = document.createElement('div');\n                row3DSection.style.display = \"flex\";\n                row3DSection.style.flexDirection = \"row\";\n                row3DSection.style.alignItems = \"center\";\n                row3DSection.style.marginLeft = \"25px\";\n\n                if(packType != null){\n                    //Limit Range\n                    let limitSection = document.createElement('div');\n                    limitSection.style.display = \"flex\";\n                    limitSection.style.flexDirection = \"row\";\n                    limitSection.style.alignItems = \"center\";\n                    limitSection.style.width = \"25%\";\n                    const limitLabelSection = document.createElement('div');\n                    limitLabelSection.style.fontSize = \"small\";\n                    limitLabelSection.textContent = \"Gen. Rng.(Inc.):\";\n                    limitLabelSection.style.fontWeight = \"bold\";\n                    const limitValueSection = document.createElement('div');\n                    limitValueSection.style.fontSize = \"small\";\n                    limitValueSection.textContent = `${packType['min']} to ${packType['max']}`;\n                    limitValueSection.style.paddingLeft = \"5px\";\n                    limitSection.appendChild(limitLabelSection);\n                    limitSection.appendChild(limitValueSection);\n                    row3DSection.appendChild(limitSection);\n                    //Accepted Load Variance\n                    let acceptedLoadVarianceSection = document.createElement('div');\n                    acceptedLoadVarianceSection.style.display = \"flex\";\n                    acceptedLoadVarianceSection.style.flexDirection = \"row\";\n                    acceptedLoadVarianceSection.style.alignItems = \"center\";\n                    acceptedLoadVarianceSection.style.width = \"25%\";\n                    const acceptedLoadVarianceLabelSection = document.createElement('div');\n                    acceptedLoadVarianceLabelSection.style.fontSize = \"small\";\n                    acceptedLoadVarianceLabelSection.textContent = \"Acct. Load Margin:\";\n                    acceptedLoadVarianceLabelSection.style.fontWeight = \"bold\";\n                    const acceptedLoadVarianceValueSection = document.createElement('div');\n                    acceptedLoadVarianceValueSection.style.fontSize = \"small\";\n                    acceptedLoadVarianceValueSection.textContent = packType['acceptedLoadVariance'];\n                    acceptedLoadVarianceValueSection.style.paddingLeft = \"5px\";\n                    acceptedLoadVarianceSection.appendChild(acceptedLoadVarianceLabelSection);\n                    acceptedLoadVarianceSection.appendChild(acceptedLoadVarianceValueSection);\n                    row3DSection.appendChild(acceptedLoadVarianceSection);\n                    //Accepted Unload Variance\n                    let acceptedUnloadVarianceSection = document.createElement('div');\n                    acceptedUnloadVarianceSection.style.display = \"flex\";\n                    acceptedUnloadVarianceSection.style.flexDirection = \"row\";\n                    acceptedUnloadVarianceSection.style.alignItems = \"center\";\n                    acceptedUnloadVarianceSection.style.width = \"25%\";\n                    const acceptedUnloadVarianceLabelSection = document.createElement('div');\n                    acceptedUnloadVarianceLabelSection.style.fontSize = \"small\";\n                    acceptedUnloadVarianceLabelSection.textContent = \"Acct. Unload Margin:\";\n                    acceptedUnloadVarianceLabelSection.style.fontWeight = \"bold\";\n                    const acceptedUnloadVarianceValueSection = document.createElement('div');\n                    acceptedUnloadVarianceValueSection.style.fontSize = \"small\";\n                    acceptedUnloadVarianceValueSection.textContent = `${packType['min']} to ${packType['max']}`;\n                    acceptedUnloadVarianceValueSection.style.paddingLeft = \"5px\";\n                    acceptedUnloadVarianceSection.appendChild(acceptedUnloadVarianceLabelSection);\n                    acceptedUnloadVarianceSection.appendChild(acceptedUnloadVarianceValueSection);\n                    row3DSection.appendChild(acceptedUnloadVarianceSection);\n\n                }\n\n                popupContentSectionComponent.appendChild(row3DSection);\n\n                //Row 3E==========================================================\n                const row3ESection = document.createElement('div');\n                row3ESection.style.display = \"flex\";\n                row3ESection.style.flexDirection = \"row\";\n                row3ESection.style.alignItems = \"center\";\n                row3ESection.style.marginLeft = \"25px\";\n                if(packType != null){\n                    //Phase 1 Load Range\n                    let phase1LoadSection = document.createElement('div');\n                    phase1LoadSection.style.display = \"flex\";\n                    phase1LoadSection.style.flexDirection = \"row\";\n                    phase1LoadSection.style.alignItems = \"center\";\n                    phase1LoadSection.style.width = \"25%\";\n                    const phase1LoadLabelSection = document.createElement('div');\n                    phase1LoadLabelSection.style.fontSize = \"small\";\n                    phase1LoadLabelSection.textContent = \"P1 Load Rng.(Inc.):\";\n                    phase1LoadLabelSection.style.fontWeight = \"bold\";\n                    const phase1LoadValueSection = document.createElement('div');\n                    phase1LoadValueSection.style.fontSize = \"small\";\n                    phase1LoadValueSection.textContent = `${packType['phase1LoadMinRange']} to ${packType['phase1LoadMaxRange']}`;\n                    phase1LoadValueSection.style.paddingLeft = \"5px\";\n                    phase1LoadSection.appendChild(phase1LoadLabelSection);\n                    phase1LoadSection.appendChild(phase1LoadValueSection);\n                    row3ESection.appendChild(phase1LoadSection);\n                    //Phase 1 Unload Range\n                    let phase1UnloadSection = document.createElement('div');\n                    phase1UnloadSection.style.display = \"flex\";\n                    phase1UnloadSection.style.flexDirection = \"row\";\n                    phase1UnloadSection.style.alignItems = \"center\";\n                    phase1UnloadSection.style.width = \"25%\";\n                    const phase1UnloadLabelSection = document.createElement('div');\n                    phase1UnloadLabelSection.style.fontSize = \"small\";\n                    phase1UnloadLabelSection.textContent = \"P1 Unload Rng.(Inc.):\";\n                    phase1UnloadLabelSection.style.fontWeight = \"bold\";\n                    const phase1UnloadValueSection = document.createElement('div');\n                    phase1UnloadValueSection.style.fontSize = \"small\";\n                    phase1UnloadValueSection.textContent = `${packType['phase1UnloadMaxRange']} to ${packType['phase1UnloadMinRange']}`;\n                    phase1UnloadValueSection.style.paddingLeft = \"5px\";\n                    phase1UnloadSection.appendChild(phase1UnloadLabelSection);\n                    phase1UnloadSection.appendChild(phase1UnloadValueSection);\n                    row3ESection.appendChild(phase1UnloadSection);\n                    //Phase 2 Load 2 Range\n                    let phase2Load2Section = document.createElement('div');\n                    phase2Load2Section.style.display = \"flex\";\n                    phase2Load2Section.style.flexDirection = \"row\";\n                    phase2Load2Section.style.alignItems = \"center\";\n                    phase2Load2Section.style.width = \"25%\";\n                    const phase2Load2LabelSection = document.createElement('div');\n                    phase2Load2LabelSection.style.fontSize = \"small\";\n                    phase2Load2LabelSection.textContent = \"P1 Unload Rng.(Inc.):\";\n                    phase2Load2LabelSection.style.fontWeight = \"bold\";\n                    const phase2Load2ValueSection = document.createElement('div');\n                    phase2Load2ValueSection.style.fontSize = \"small\";\n                    phase2Load2ValueSection.textContent = `${packType['phase2LoadMinRange2']} to ${packType['phase2LoadMaxRange2']}`;\n                    phase2Load2ValueSection.style.paddingLeft = \"5px\";\n                    phase2Load2Section.appendChild(phase2Load2LabelSection);\n                    phase2Load2Section.appendChild(phase2Load2ValueSection);\n                    row3ESection.appendChild(phase2Load2Section);\n                    //Phase 2 Unload 2 Range\n                    let phase2Unload2Section = document.createElement('div');\n                    phase2Unload2Section.style.display = \"flex\";\n                    phase2Unload2Section.style.flexDirection = \"row\";\n                    phase2Unload2Section.style.alignItems = \"center\";\n                    phase2Unload2Section.style.width = \"25%\";\n                    const phase2Unload2LabelSection = document.createElement('div');\n                    phase2Unload2LabelSection.style.fontSize = \"small\";\n                    phase2Unload2LabelSection.textContent = \"P1 Unload Rng.(Inc.):\";\n                    phase2Unload2LabelSection.style.fontWeight = \"bold\";\n                    const phase2Unload2ValueSection = document.createElement('div');\n                    phase2Unload2ValueSection.style.fontSize = \"small\";\n                    phase2Unload2ValueSection.textContent = `${packType['phase2UnloadMinRange2']} to ${packType['phase2UnloadMaxRange2']}`;\n                    phase2Unload2ValueSection.style.paddingLeft = \"5px\";\n                    phase2Unload2Section.appendChild(phase2Unload2LabelSection);\n                    phase2Unload2Section.appendChild(phase2Unload2ValueSection);\n                    row3ESection.appendChild(phase2Unload2Section);\n\n                }\n                popupContentSectionComponent.appendChild(row3ESection);\n\n                //Watermark==========================================================\n                const watermark = document.createElement('div');\n                watermark.textContent = \"UNOFFICIAL DOCUMENT\";\n                watermark.style.cssText = `\n                    position: fixed; /* Fixed instead of absolute */\n                    top: 50%; /* Centered vertically */\n                    left: 50%; /* Centered horizontally */\n                    transform: translate(-50%, -50%) rotate(-45deg); /* Center and rotate */\n                    color: rgba(255, 0, 0, 0.6); /* Semi-transparent red */\n                    font-size: 100px;\n                    font-weight: bold;\n                    width: 100%;\n                    text-align: center;\n                    pointer-events: none; /* Click through */\n                    z-index: 1000;\n                `;\n                // Adjust position to ensure it covers the entire content area\n                watermark.style.top = '50%';\n                watermark.style.left = '50%';\n                popupContentSectionComponent.style.position = 'relative';\n                // popupContentSectionComponent.appendChild(watermark);\n\n                if(packData != null){\n                    //Phase I TitlepackData\n                    const phaseITitleSection = document.createElement('div');\n                    phaseITitleSection.style.fontSize = \"small\";\n                    phaseITitleSection.textContent = \"Phase 1 Detail:\";\n                    phaseITitleSection.style.fontWeight = \"bold\";\n                    phaseITitleSection.style.cursor = \"pointer\";\n                    phaseITitleSection.style.color = \"blue\";\n                    phaseITitleSection.style.textDecoration = \"underline\";\n                    phaseITitleSection.addEventListener('click', () => {\n                        row4ASection.style.display = row4ASection.style.display === \"none\" ? \"flex\" : \"none\";\n                        row4BSection.style.display = row4BSection.style.display === \"none\" ? \"flex\" : \"none\";\n                        row4B2Section.style.display = row4B2Section.style.display === \"none\" ? \"flex\" : \"none\";\n                        row4CSection.style.display = row4CSection.style.display === \"none\" ? \"flex\" : \"none\";\n                        row4DSection.style.display = row4DSection.style.display === \"none\" ? \"flex\" : \"none\";\n                    });\n                    \n                    //Row 4A==========================================================\n                    const row4ASection = document.createElement('div');\n                    row4ASection.id = 'row4ASection';\n                    row4ASection.style.display = \"none\";\n                    row4ASection.style.flexDirection = \"column\";\n                    row4ASection.style.alignItems = \"center\";\n                    row4ASection.style.marginLeft = \"25px\";\n                    //phase1UnloadData Row\n                    const phase1UnloadDataSection = document.createElement('div');\n                    phase1UnloadDataSection.style.display = \"flex\";\n                    phase1UnloadDataSection.style.flexDirection = \"row\";\n                    phase1UnloadDataSection.style.alignItems = \"center\";\n                    phase1UnloadDataSection.style.width = \"100%\";\n                    const phase1UnloadDataLabelSection = document.createElement('div');\n                    phase1UnloadDataLabelSection.style.fontSize = \"small\";\n                    phase1UnloadDataLabelSection.textContent = \"Unload Data:\";\n                    phase1UnloadDataLabelSection.style.fontWeight = \"bold\";\n                    const phase1UnloadDataValueSection = document.createElement('div');\n                    phase1UnloadDataValueSection.style.fontSize = \"small\";\n                    phase1UnloadDataValueSection.textContent = packData['phase1UnloadData'] ? `${packData['phase1UnloadData'].toString()}` : \"\";\n                    phase1UnloadDataValueSection.style.paddingLeft = \"5px\";\n                    phase1UnloadDataSection.appendChild(phase1UnloadDataLabelSection);\n                    phase1UnloadDataSection.appendChild(phase1UnloadDataValueSection);\n\n                    //Row 4B==========================================================\n                    const row4BSection = document.createElement('div');\n                    row4BSection.id='row4BSection';\n                    row4BSection.style.display = \"none\";\n                    row4BSection.style.flexDirection = \"column\";\n                    row4BSection.style.alignItems = \"center\";\n                    row4BSection.style.marginLeft = \"25px\";\n                    //phase1LoadData Row\n                    const phase1LoadDataSection = document.createElement('div');\n                    phase1LoadDataSection.style.display = \"flex\";\n                    phase1LoadDataSection.style.flexDirection = \"row\";\n                    phase1LoadDataSection.style.alignItems = \"center\";\n                    phase1LoadDataSection.style.width = \"100%\";\n                    const phase1LoadDataLabelSection = document.createElement('div');\n                    phase1LoadDataLabelSection.style.fontSize = \"small\";\n                    phase1LoadDataLabelSection.textContent = \"Load Data:\";\n                    phase1LoadDataLabelSection.style.fontWeight = \"bold\";\n                    const phase1LoadDataValueSection = document.createElement('div');\n                    phase1LoadDataValueSection.style.fontSize = \"small\";\n                    phase1LoadDataValueSection.textContent = packData['phase1LoadData'] ? `${packData['phase1LoadData'].toString()}` : \"\";\n                    phase1LoadDataValueSection.style.paddingLeft = \"5px\";\n                    phase1LoadDataSection.appendChild(phase1LoadDataLabelSection);\n                    phase1LoadDataSection.appendChild(phase1LoadDataValueSection);\n\n                    //Row 4B2 (Math Breakdown) ==========================================================\n                    const row4B2Section = document.createElement('div');\n                    row4B2Section.id = 'row4B2Section';\n                    row4B2Section.style.display = \"none\";\n                    row4B2Section.style.flexDirection = \"column\";\n                    row4B2Section.style.alignItems = \"center\";\n                    row4B2Section.style.marginLeft = \"25px\";\n                    const phase1MathSection = document.createElement('div');\n                    phase1MathSection.style.display = \"flex\";\n                    phase1MathSection.style.flexDirection = \"row\";\n                    phase1MathSection.style.alignItems = \"flex-start\";\n                    phase1MathSection.style.width = \"100%\";\n                    const phase1MathLabelSection = document.createElement('div');\n                    phase1MathLabelSection.style.fontSize = \"small\";\n                    phase1MathLabelSection.textContent = \"Math Breakdown:\";\n                    phase1MathLabelSection.style.fontWeight = \"bold\";\n                    phase1MathLabelSection.style.whiteSpace = \"nowrap\";\n                    const phase1MathValueSection = document.createElement('div');\n                    phase1MathValueSection.style.fontSize = \"small\";\n                    phase1MathValueSection.style.paddingLeft = \"5px\";\n                    phase1MathValueSection.style.display = \"flex\";\n                    phase1MathValueSection.style.flexDirection = \"column\";\n                    try{\n                        const phase1MathRows = buildPhaseIMathRows(context, packType, packData['phase1UnloadData'], packData['phase1LoadData']);\n                        if(phase1MathRows.length === 0){\n                            phase1MathValueSection.textContent = \"N/A\";\n                        }else{\n                            phase1MathRows.forEach((r)=>{\n                                const lineComp = document.createElement('div');\n                                lineComp.style.color = r.ok ? 'green' : 'red';\n                                lineComp.textContent = `${r.ok ? '✓' : '✗'} ${r.label}`;\n                                phase1MathValueSection.appendChild(lineComp);\n                            });\n                        }\n                    }catch(e){\n                        phase1MathValueSection.textContent = \"N/A\";\n                        console.log(\"Error building Phase 1 profile math breakdown: \" + e);\n                    }\n                    phase1MathSection.appendChild(phase1MathLabelSection);\n                    phase1MathSection.appendChild(phase1MathValueSection);\n\n                    //Row 4C==========================================================\n                    const row4CSection = document.createElement('div');\n                    row4CSection.id='row4CSection';\n                    row4CSection.style.display = \"none\";\n                    row4CSection.style.flexDirection = \"column\";\n                    row4CSection.style.alignItems = \"center\";\n                    row4CSection.style.marginLeft = \"25px\";\n                    //P1 validity Row\n                    let p1ValidityString = \"\";\n                    let phase1VerdictString = \"\";\n                    const isAllDataProvided1 = packData['phase1LoadData'] != null && packData['phase1LoadData'].length > 0 &&\n                    packData['phase1UnloadData'] != null && packData['phase1UnloadData'].length > 0 \n\n                    if(isAllDataProvided1 && packData['phase1ValidityData'] != null){\n                        p1ValidityString += `Unload: ${packData['phase1ValidityData']['unload'] ? \"PASS\" : \"FAIL\"} | `;\n                        p1ValidityString += `Load: ${packData['phase1ValidityData']['load'] ? \"PASS\" : \"FAIL\"}`;\n                        phase1VerdictString = `${packData['phase1ValidityData']['final'] ? \"PASS\" : \"FAIL\"}`;\n                    }else{\n                        p1ValidityString = \"N/A\";\n                        phase1VerdictString = \"N/A\"\n                    }\n\n                    const phase1LoadValiditySection = document.createElement('div');\n                    phase1LoadValiditySection.style.display = \"flex\";\n                    phase1LoadValiditySection.style.flexDirection = \"row\";\n                    phase1LoadValiditySection.style.alignItems = \"center\";\n                    phase1LoadValiditySection.style.width = \"100%\";\n                    const phase1LoadValidityLabelSection = document.createElement('div');\n                    phase1LoadValidityLabelSection.style.fontSize = \"small\";\n                    phase1LoadValidityLabelSection.textContent = \"Validity:\";\n                    phase1LoadValidityLabelSection.style.fontWeight = \"bold\";\n                    const phase1LoadValidityValueSection = document.createElement('div');\n                    phase1LoadValidityValueSection.style.fontSize = \"small\";\n                    phase1LoadValidityValueSection.textContent = p1ValidityString;\n                    phase1LoadValidityValueSection.style.paddingLeft = \"5px\";\n                    phase1LoadValiditySection.appendChild(phase1LoadValidityLabelSection);\n                    phase1LoadValiditySection.appendChild(phase1LoadValidityValueSection);\n\n                    //Row 4D==========================================================\n                    const row4DSection = document.createElement('div');\n                    row4DSection.id='row4DSection';\n                    row4DSection.style.display = \"none\";\n                    row4DSection.style.flexDirection = \"column\";\n                    row4DSection.style.alignItems = \"center\";\n                    row4DSection.style.marginLeft = \"25px\";\n                    //P1 Final validity Row\n                    \n                    const phase1FinalValiditySection = document.createElement('div');\n                    phase1FinalValiditySection.style.display = \"flex\";\n                    phase1FinalValiditySection.style.flexDirection = \"row\";\n                    phase1FinalValiditySection.style.alignItems = \"center\";\n                    phase1FinalValiditySection.style.width = \"100%\";\n                    const phase1FinalValidityLabelSection = document.createElement('div');\n                    phase1FinalValidityLabelSection.style.fontSize = \"small\";\n                    phase1FinalValidityLabelSection.textContent = \"Verdict:\";\n                    phase1FinalValidityLabelSection.style.fontWeight = \"bold\";\n                    const phase1FinalValidityValueSection = document.createElement('div');\n                    phase1FinalValidityValueSection.style.fontSize = \"large\";\n                    phase1FinalValidityValueSection.textContent = phase1VerdictString;\n                    phase1FinalValidityValueSection.style.paddingLeft = \"5px\";\n                    phase1FinalValiditySection.appendChild(phase1FinalValidityLabelSection);\n                    phase1FinalValiditySection.appendChild(phase1FinalValidityValueSection);\n\n                    //Appending to Row 4==========================================================\n                    popupContentSectionComponent.appendChild(phaseITitleSection);\n                    popupContentSectionComponent.appendChild(row4ASection);\n                    popupContentSectionComponent.appendChild(row4BSection);\n                    popupContentSectionComponent.appendChild(row4B2Section);\n                    popupContentSectionComponent.appendChild(row4CSection);\n                    popupContentSectionComponent.appendChild(row4DSection);\n                    row4ASection.appendChild(phase1UnloadDataSection);\n                    row4BSection.appendChild(phase1LoadDataSection);\n                    row4B2Section.appendChild(phase1MathSection);\n                    row4CSection.appendChild(phase1LoadValiditySection);\n                    row4DSection.appendChild(phase1FinalValiditySection);\n\n                    //Phase II Title\n                    const phaseIITitleSection = document.createElement('div');\n                    phaseIITitleSection.style.fontSize = \"small\";\n                    phaseIITitleSection.textContent = \"Phase 2 Detail:\";\n                    phaseIITitleSection.style.fontWeight = \"bold\";\n                    phaseIITitleSection.style.cursor = \"pointer\";\n                    phaseIITitleSection.style.color = \"blue\";\n                    phaseIITitleSection.style.textDecoration = \"underline\";\n                    phaseIITitleSection.addEventListener('click', () => {\n                        row5ASection.style.display = row5ASection.style.display === \"none\" ? \"flex\" : \"none\";\n                        row5BSection.style.display = row5BSection.style.display === \"none\" ? \"flex\" : \"none\";\n                        row5CSection.style.display = row5CSection.style.display === \"none\" ? \"flex\" : \"none\";\n                        row5DSection.style.display = row5DSection.style.display === \"none\" ? \"flex\" : \"none\";\n                        row5D2Section.style.display = row5D2Section.style.display === \"none\" ? \"flex\" : \"none\";\n                        row5ESection.style.display = row5ESection.style.display === \"none\" ? \"flex\" : \"none\";\n                        row5FSection.style.display = row5FSection.style.display === \"none\" ? \"flex\" : \"none\";\n                    });\n\n                    //Row 5A==========================================================\n                    const row5ASection = document.createElement('div');\n                    row5ASection.id='row5ASection';\n                    row5ASection.style.display = \"none\";\n                    row5ASection.style.flexDirection = \"column\";\n                    row5ASection.style.alignItems = \"center\";\n                    row5ASection.style.marginLeft = \"25px\";\n                    \n                    //phase2UnloadData1 Row\n                    const phase2UnloadData1Section = document.createElement('div');\n                    phase2UnloadData1Section.style.display = \"flex\";\n                    phase2UnloadData1Section.style.flexDirection = \"row\";\n                    phase2UnloadData1Section.style.alignItems = \"center\";\n                    phase2UnloadData1Section.style.width = \"100%\";\n                    const phase2UnloadData1LabelSection = document.createElement('div');\n                    phase2UnloadData1LabelSection.style.fontSize = \"small\";\n                    phase2UnloadData1LabelSection.textContent = \"Unload 1 Data:\";\n                    phase2UnloadData1LabelSection.style.fontWeight = \"bold\";\n                    const phase2UnloadData1ValueSection = document.createElement('div');\n                    phase2UnloadData1ValueSection.style.fontSize = \"small\";\n                    phase2UnloadData1ValueSection.textContent = packData['phase2UnloadData1'] ? `${packData['phase2UnloadData1'].toString()}` : \"\";\n                    phase2UnloadData1ValueSection.style.paddingLeft = \"5px\";\n                    phase2UnloadData1Section.appendChild(phase2UnloadData1LabelSection);\n                    phase2UnloadData1Section.appendChild(phase2UnloadData1ValueSection);\n                    \n                    //Row 5B==========================================================\n                    const row5BSection = document.createElement('div');\n                    row5BSection.id='row5BSection';\n                    row5BSection.style.display = \"none\";\n                    row5BSection.style.flexDirection = \"column\";\n                    row5BSection.style.alignItems = \"center\";\n                    row5BSection.style.marginLeft = \"25px\";\n                    //phase2LoadData1 Row\n                    const phase2LoadData1Section = document.createElement('div');\n                    phase2LoadData1Section.style.display = \"flex\";\n                    phase2LoadData1Section.style.flexDirection = \"row\";\n                    phase2LoadData1Section.style.alignItems = \"center\";\n                    phase2LoadData1Section.style.width = \"100%\";\n                    const phase2LoadData1LabelSection = document.createElement('div');\n                    phase2LoadData1LabelSection.style.fontSize = \"small\";\n                    phase2LoadData1LabelSection.textContent = \"Load 1 Data:\";\n                    phase2LoadData1LabelSection.style.fontWeight = \"bold\";\n                    const phase2LoadData1ValueSection = document.createElement('div');\n                    phase2LoadData1ValueSection.style.fontSize = \"small\";\n                    phase2LoadData1ValueSection.textContent = packData['phase2LoadData1'] ? `${packData['phase2LoadData1'].toString()}` : \"\";\n                    phase2LoadData1ValueSection.style.paddingLeft = \"5px\";\n                    phase2LoadData1Section.appendChild(phase2LoadData1LabelSection);\n                    phase2LoadData1Section.appendChild(phase2LoadData1ValueSection);\n\n                    //Row 5C==========================================================\n                    const row5CSection = document.createElement('div');\n                    row5CSection.id='row5CSection';\n                    row5CSection.style.display = \"none\";\n                    row5CSection.style.flexDirection = \"column\";\n                    row5CSection.style.alignItems = \"center\";\n                    row5CSection.style.marginLeft = \"25px\";\n                    //phase2LoadData2 Row\n                    const phase2LoadData2Section = document.createElement('div');\n                    phase2LoadData2Section.style.display = \"flex\";\n                    phase2LoadData2Section.style.flexDirection = \"row\";\n                    phase2LoadData2Section.style.alignItems = \"center\";\n                    phase2LoadData2Section.style.width = \"100%\";\n                    const phase2LoadData2LabelSection = document.createElement('div');\n                    phase2LoadData2LabelSection.style.fontSize = \"small\";\n                    phase2LoadData2LabelSection.textContent = \"Load 2 Data:\";\n                    phase2LoadData2LabelSection.style.fontWeight = \"bold\";\n                    const phase2LoadData2ValueSection = document.createElement('div');\n                    phase2LoadData2ValueSection.style.fontSize = \"small\";\n                    phase2LoadData2ValueSection.textContent = packData['phase2LoadData2'] ? `${packData['phase2LoadData2'].toString()}` : \"\";\n                    phase2LoadData2ValueSection.style.paddingLeft = \"5px\";\n                    phase2LoadData2Section.appendChild(phase2LoadData2LabelSection);\n                    phase2LoadData2Section.appendChild(phase2LoadData2ValueSection);\n\n                    //Row 5D==========================================================\n                    const row5DSection = document.createElement('div');\n                    row5DSection.id='row5DSection';\n                    row5DSection.style.display = \"none\";\n                    row5DSection.style.flexDirection = \"column\";\n                    row5DSection.style.alignItems = \"center\";\n                    row5DSection.style.marginLeft = \"25px\";\n                    //phase2UnloadData2 Row\n                    const phase2UnloadData2Section = document.createElement('div');\n                    phase2UnloadData2Section.style.display = \"flex\";\n                    phase2UnloadData2Section.style.flexDirection = \"row\";\n                    phase2UnloadData2Section.style.alignItems = \"center\";\n                    phase2UnloadData2Section.style.width = \"100%\";\n                    const phase2UnloadData2LabelSection = document.createElement('div');\n                    phase2UnloadData2LabelSection.style.fontSize = \"small\";\n                    phase2UnloadData2LabelSection.textContent = \"Unload 2 Data:\";\n                    phase2UnloadData2LabelSection.style.fontWeight = \"bold\";\n                    const phase2UnloadData2ValueSection = document.createElement('div');\n                    phase2UnloadData2ValueSection.style.fontSize = \"small\";\n                    phase2UnloadData2ValueSection.textContent = packData['phase2UnloadData2'] ? `${packData['phase2UnloadData2'].toString()}` : \"\";\n                    phase2UnloadData2ValueSection.style.paddingLeft = \"5px\";\n                    phase2UnloadData2Section.appendChild(phase2UnloadData2LabelSection);\n                    phase2UnloadData2Section.appendChild(phase2UnloadData2ValueSection);\n\n                    //Row 5D2 (Math Breakdown) ==========================================================\n                    const row5D2Section = document.createElement('div');\n                    row5D2Section.id = 'row5D2Section';\n                    row5D2Section.style.display = \"none\";\n                    row5D2Section.style.flexDirection = \"column\";\n                    row5D2Section.style.alignItems = \"center\";\n                    row5D2Section.style.marginLeft = \"25px\";\n                    const phase2MathSection = document.createElement('div');\n                    phase2MathSection.style.display = \"flex\";\n                    phase2MathSection.style.flexDirection = \"row\";\n                    phase2MathSection.style.alignItems = \"flex-start\";\n                    phase2MathSection.style.width = \"100%\";\n                    const phase2MathLabelSection = document.createElement('div');\n                    phase2MathLabelSection.style.fontSize = \"small\";\n                    phase2MathLabelSection.textContent = \"Math Breakdown:\";\n                    phase2MathLabelSection.style.fontWeight = \"bold\";\n                    phase2MathLabelSection.style.whiteSpace = \"nowrap\";\n                    const phase2MathValueSection = document.createElement('div');\n                    phase2MathValueSection.style.fontSize = \"small\";\n                    phase2MathValueSection.style.paddingLeft = \"5px\";\n                    phase2MathValueSection.style.display = \"flex\";\n                    phase2MathValueSection.style.flexDirection = \"column\";\n                    try{\n                        const phase2MathRows = buildPhaseIIMathRows(context, packType, packData['phase2UnloadData1'], packData['phase2LoadData1'], packData['phase2LoadData2'], packData['phase2UnloadData2']);\n                        if(phase2MathRows.length === 0){\n                            phase2MathValueSection.textContent = \"N/A\";\n                        }else{\n                            phase2MathRows.forEach((r)=>{\n                                const lineComp = document.createElement('div');\n                                lineComp.style.color = r.ok ? 'green' : 'red';\n                                lineComp.textContent = `${r.ok ? '✓' : '✗'} ${r.label}`;\n                                phase2MathValueSection.appendChild(lineComp);\n                            });\n                        }\n                    }catch(e){\n                        phase2MathValueSection.textContent = \"N/A\";\n                        console.log(\"Error building Phase 2 profile math breakdown: \" + e);\n                    }\n                    phase2MathSection.appendChild(phase2MathLabelSection);\n                    phase2MathSection.appendChild(phase2MathValueSection);\n\n                    //Row 5E==========================================================\n                    const row5ESection = document.createElement('div');\n                    row5ESection.id='row5ESection';\n                    row5ESection.style.display = \"none\";\n                    row5ESection.style.flexDirection = \"column\";\n                    row5ESection.style.alignItems = \"center\";\n                    row5ESection.style.marginLeft = \"25px\";\n                    //P2 validity Row\n                    let phase2ValidityString = \"\";\n                    let phase2VerdictString = \"\";\n                    const isAllDataProvided = packData['phase2LoadData1'] != null && packData['phase2LoadData1'].length > 0 &&\n                    packData['phase2LoadData2'] != null && packData['phase2LoadData2'].length > 0 &&\n                    packData['phase2UnloadData1'] != null && packData['phase2UnloadData1'].length > 0 &&\n                    packData['phase2UnloadData2'] != null && packData['phase2UnloadData2'].length > 0\n\n                    if(isAllDataProvided && packData['phase2ValidityData'] != null){\n                        phase2ValidityString += `Load 1: ${packData['phase2ValidityData']['load1'] ? \"PASS\" : \"FAIL\"} | `;\n                        phase2ValidityString += `Unload 1: ${packData['phase2ValidityData']['unload1'] ? \"PASS\" : \"FAIL\"} | `;\n                        phase2ValidityString += `Load 2: ${packData['phase2ValidityData']['load2'] ? \"PASS\" : \"FAIL\"} | `;\n                        phase2ValidityString += `Unload 2: ${packData['phase2ValidityData']['unload2'] ? \"PASS\" : \"FAIL\"}`;\n                        phase2VerdictString = `${packData['phase2ValidityData']['final'] ? \"PASS\" : \"FAIL\"}`;\n                    }else{\n                        phase2ValidityString = \"N/A\";\n                        phase2VerdictString = \"N/A\"\n                    }\n                    const phase2ValiditySection = document.createElement('div');\n                    phase2ValiditySection.style.display = \"flex\";\n                    phase2ValiditySection.style.flexDirection = \"row\";\n                    phase2ValiditySection.style.alignItems = \"center\";\n                    phase2ValiditySection.style.width = \"100%\";\n                    const phase2ValidityLabelSection = document.createElement('div');\n                    phase2ValidityLabelSection.style.fontSize = \"small\";\n                    phase2ValidityLabelSection.textContent = \"Validity:\";\n                    phase2ValidityLabelSection.style.fontWeight = \"bold\";\n                    const phase2ValidityValueSection = document.createElement('div');\n                    phase2ValidityValueSection.style.fontSize = \"small\";\n                    phase2ValidityValueSection.textContent = phase2ValidityString;\n                    phase2ValidityValueSection.style.paddingLeft = \"5px\";\n                    phase2ValiditySection.appendChild(phase2ValidityLabelSection);\n                    phase2ValiditySection.appendChild(phase2ValidityValueSection);\n\n                    //Row 5F==========================================================\n                    const row5FSection = document.createElement('div');\n                    row5FSection.id='row5FSection';\n                    row5FSection.style.display = \"none\";\n                    row5FSection.style.flexDirection = \"column\";\n                    row5FSection.style.alignItems = \"center\";\n                    row5FSection.style.marginLeft = \"25px\";\n                    //P2 Final validity Row\n                    const phase2FinalValiditySection = document.createElement('div');\n                    phase2FinalValiditySection.style.display = \"flex\";\n                    phase2FinalValiditySection.style.flexDirection = \"row\";\n                    phase2FinalValiditySection.style.alignItems = \"center\";\n                    phase2FinalValiditySection.style.width = \"100%\";\n                    const phase2FinalValidityLabelSection = document.createElement('div');\n                    phase2FinalValidityLabelSection.style.fontSize = \"small\";\n                    phase2FinalValidityLabelSection.textContent = \"Verdict:\";\n                    phase2FinalValidityLabelSection.style.fontWeight = \"bold\";\n                    const phase2FinalValidityValueSection = document.createElement('div');\n                    phase2FinalValidityValueSection.style.fontSize = \"large\";\n                    phase2FinalValidityValueSection.textContent = phase2VerdictString;\n                    phase2FinalValidityValueSection.style.paddingLeft = \"5px\";\n                    phase2FinalValiditySection.appendChild(phase2FinalValidityLabelSection);\n                    phase2FinalValiditySection.appendChild(phase2FinalValidityValueSection);\n                    \n                    //Appending to Row 5==========================================================\n                    popupContentSectionComponent.appendChild(phaseIITitleSection);\n                    popupContentSectionComponent.appendChild(row5ASection);\n                    popupContentSectionComponent.appendChild(row5BSection);\n                    popupContentSectionComponent.appendChild(row5CSection);\n                    popupContentSectionComponent.appendChild(row5DSection);\n                    popupContentSectionComponent.appendChild(row5D2Section);\n                    popupContentSectionComponent.appendChild(row5ESection);\n                    popupContentSectionComponent.appendChild(row5FSection);\n                    row5ASection.appendChild(phase2UnloadData1Section);\n                    row5BSection.appendChild(phase2LoadData1Section);\n                    row5CSection.appendChild(phase2LoadData2Section);\n                    row5DSection.appendChild(phase2UnloadData2Section);\n                    row5D2Section.appendChild(phase2MathSection);\n                    row5ESection.appendChild(phase2ValiditySection);\n                    row5FSection.appendChild(phase2FinalValiditySection);\n                }\n\n                // phase1Memo Row==========================================================\n                const phase1MemoLabelSection = document.createElement('div');\n                phase1MemoLabelSection.style.fontSize = \"small\";\n                phase1MemoLabelSection.textContent = \"P1 Memo:\";\n                phase1MemoLabelSection.style.fontWeight = \"bold\";\n                phase1MemoLabelSection.style.textDecoration = \"underline\";\n                const phase1MemoValueSection = document.createElement('div');\n                phase1MemoValueSection.style.fontSize = \"small\";\n                phase1MemoValueSection.style.width = \"100%\";\n                phase1MemoValueSection.textContent = `${packProfile['phase1Memo'] ? packProfile['phase1Memo'] : \"\"}`;\n                phase1MemoValueSection.style.paddingLeft = \"25px\";\n                phase1MemoValueSection.style.whiteSpace = \"pre\"; \n\n                // phase2Memo Row==========================================================\n                const phase2MemoLabelSection = document.createElement('div');\n                phase2MemoLabelSection.style.fontSize = \"small\";\n                phase2MemoLabelSection.textContent = \"P2 Memo:\";\n                phase2MemoLabelSection.style.fontWeight = \"bold\";\n                phase2MemoLabelSection.style.textDecoration = \"underline\";\n                const phase2MemoValueSection = document.createElement('div');\n                phase2MemoValueSection.style.fontSize = \"small\";\n                phase2MemoValueSection.style.width = \"100%\";\n                phase2MemoValueSection.textContent = `${packProfile['phase2Memo'] ? packProfile['phase2Memo'] : \"\"}`;\n                phase2MemoValueSection.style.paddingLeft = \"25px\";\n                phase2MemoValueSection.style.whiteSpace = \"pre\"; \n\n                //Appending Memos==========================================================\n                popupContentSectionComponent.appendChild(phase1MemoLabelSection);\n                popupContentSectionComponent.appendChild(phase1MemoValueSection);\n                popupContentSectionComponent.appendChild(phase2MemoLabelSection);\n                popupContentSectionComponent.appendChild(phase2MemoValueSection);\n\n                if(!exportMode){\n                //Display and setup Ok Button\n                const okButtonComponent = document.getElementById('notificationOkButton');\n                okButtonComponent.style.display = \"block\";\n                okButtonComponent.style.marginRight = \"10px\";\n                okButtonComponent.onclick = () => {\n                    context.send('closeNotificationPopup'); \n                };\n                if(allowPrint){\n                    const printButtonComponent = document.getElementById('notificationPrintButton');\n                    printButtonComponent.style.display = \"block\";\n                    printButtonComponent.onclick = () => {\n                        const popupContent = document.getElementById('notificationPopupContentBody');\n                        if (!popupContent) {\n                            console.error(\"Popup content body not found\");\n                            return;\n                        }\n    \n                        popupContent.style.overflowX = \"visible\";\n                        popupContent.style.overflowY = \"visible\";\n                        const row4ASection = document.getElementById('row4ASection');\n                        const row4BSection = document.getElementById('row4BSection');\n                        const row4B2Section = document.getElementById('row4B2Section');\n                        const row4CSection = document.getElementById('row4CSection');\n                        const row4DSection = document.getElementById('row4DSection');\n                        const row5ASection = document.getElementById('row5ASection');\n                        const row5BSection = document.getElementById('row5BSection');\n                        const row5CSection = document.getElementById('row5CSection');\n                        const row5DSection = document.getElementById('row5DSection');\n                        const row5D2Section = document.getElementById('row5D2Section');\n                        const row5ESection = document.getElementById('row5ESection');\n                        const row5FSection = document.getElementById('row5FSection');\n                        row4ASection.style.display = \"flex\";\n                        row4BSection.style.display = \"flex\";\n                        row4B2Section.style.display = \"flex\";\n                        row4CSection.style.display = \"flex\";\n                        row4DSection.style.display = \"flex\";\n                        row5ASection.style.display = \"flex\";\n                        row5BSection.style.display = \"flex\";\n                        row5CSection.style.display = \"flex\";\n                        row5DSection.style.display = \"flex\";\n                        row5D2Section.style.display = \"flex\";\n                        row5ESection.style.display = \"flex\";\n                        row5FSection.style.display = \"flex\";\n                        const inlineStyles = `\n                        @media print {\n                            .pagebreak { page-break-before: always; } /* page-break-after works, as well */\n                            body {\n                                -webkit-print-color-adjust: exact;\n                                -moz-print-color-adjust: exact;\n                                -ms-print-color-adjust: exact;\n                                print-color-adjust: exact;\n                            }\n                        }\n                        #notificationPopupContentBody {\n                            overflow: visible !important;\n                            padding-bottom: 10px;\n                            padding-left: 20px;\n                            display: flex;\n                            flex-direction: column;\n                            justify-content: space-between;\n                            width: 100%;\n                            padding-right: 20px;\n                        }\n                        /* Force every descendant's overflow visible too, so an always-on scrollbar\n                           track (overflow:scroll) never renders as a gray bar in the printout.\n                           !important is required because the element carries an inline overflow style. */\n                        #notificationPopupContentBody * {\n                            overflow: visible !important;\n                        }\n                        `;\n                        printJS({ \n                            printable: popupContent,\n                            type: 'html',\n                            style: inlineStyles,\n                            scanStyles: false,\n                        });\n                        row4ASection.style.display = \"none\";\n                        row4BSection.style.display = \"none\";\n                        row4B2Section.style.display = \"none\";\n                        row4CSection.style.display = \"none\";\n                        row4DSection.style.display = \"none\";\n                        row5ASection.style.display = \"none\";\n                        row5BSection.style.display = \"none\";\n                        row5CSection.style.display = \"none\";\n                        row5DSection.style.display = \"none\";\n                        row5D2Section.style.display = \"none\";\n                        row5ESection.style.display = \"none\";\n                        row5FSection.style.display = \"none\";\n                        //Restore the modal's normal scroll behaviour after printing.\n                        popupContent.style.overflowX = \"scroll\";\n                        popupContent.style.overflowY = \"scroll\";\n\n                    };\n                }\n                }\n\n                // if(context.get(\"packsValidationData\")['phase1UnloadData']\n            }\n            resolve(true);\n        });\n    }catch (error) {\n        console.error('Error buildSensorProfileNotificationBoard:', error);\n        resolve(false);\n    }\n    });\n}\n//Batch handler for the Profile Manager. Fetches every ticked profile, renders each report into its\n//own container STACKED inside one modal (safe — the report uses closure refs, not getElementById),\n//then:\n//  • View & Export (isVisiblePopup=true): show the stacked modal with Export + Ok buttons so the\n//    operator reviews everything first; Export produces one PDF per profile.\n//  • Direct Export (isVisiblePopup=false): export immediately without the review step.\n//Each PDF is captured from its own container (no scrollbar leak) and written to a picked folder\n//(Chromium) or bundled into a zip download (fallback). One PDF per profile, named by Pack ID.\nexport async function buildBatchProfileSheet(context, isVisiblePopup){\n    const DETAIL_ROW_IDS = ['row4ASection','row4BSection','row4B2Section','row4CSection','row4DSection','row5ASection','row5BSection','row5CSection','row5DSection','row5D2Section','row5ESection','row5FSection'];\n    try{\n        const batchCBData = context.get(\"userInputtedData.batchCheckboxData\");\n        const validationIds = Object.keys(batchCBData || {}).map((k)=> batchCBData[k]['validationID']);\n        if(validationIds.length === 0){\n            showPopup(['No profiles selected. Tick at least one row first.'], 'warning', 4);\n            return;\n        }\n\n        // Fetch every selected profile up front.\n        showPopup([\"Loading selected profiles...\"], \"notification\");\n        const profiles = [];\n        for(const validationID of validationIds){\n            try{\n                const responseData = await sendGETRequest(`validation_pack_profile/${validationID}/`);\n                if(responseData && responseData !== false){\n                    const d = responseData['data'];\n                    profiles.push({ validationID, packProfile: d['pack_profile'], rigProfile: d['rig_profile'], packType: d['pack_type'], packData: d['pack_data'] });\n                }\n            }catch(e){\n                console.log(`Error loading pack profile ${validationID}: ${e}`);\n            }\n        }\n        if(profiles.length === 0){\n            showPopup(['Could not load any of the selected profiles.'], 'error', 4);\n            return;\n        }\n\n        // Shared export. Default: try to pick ONE folder for all PDFs (showDirectoryPicker). If that's\n        // unsupported / blocked / cancelled it returns null, and we fall back to a per-profile native\n        // Save dialog (which also falls back to a plain download). No zip either way.\n        const exportAll = async () => {\n            const directoryHandle = await tryPickExportDirectory(); // null ⇒ fall back to per-file Save dialog\n            showPopup([\"Exporting profiles...\"], \"notification\");\n            let exported = 0;\n            for(let i = 0; i < profiles.length; i++){\n                const container = document.getElementById(`pack-profile-${i}`);\n                if(!container){ continue; }\n                // Expand this profile's collapsible rows (scoped to its own container).\n                DETAIL_ROW_IDS.forEach((id)=>{ const el = container.querySelector(`#${id}`); if(el){ el.style.display = \"flex\"; } });\n                const filename = `${profiles[i].packProfile['packId'] || profiles[i].packProfile['packName'] || `profile-${profiles[i].validationID}`}.pdf`;\n                const opt = {\n                    margin: 0, filename,\n                    image: { type: 'jpeg', quality: 0.98 },\n                    html2canvas: { scale: 2, useCORS: true, allowTaint: true },\n                    jsPDF: { unit: 'in', format: 'a4', orientation: 'portrait' },\n                    pagebreak: { mode: ['css', 'legacy'], avoid: ['.no-break'] },\n                };\n                try{\n                    const pdfBlob = await html2pdf().set(opt).from(container).outputPdf('blob');\n                    if(directoryHandle){\n                        // One-folder-for-all: write straight into the chosen directory.\n                        await writeBlobToDirectory(directoryHandle, filename, pdfBlob);\n                        exported++;\n                    }else{\n                        // Fallback: per-profile Save dialog (or plain download).\n                        const res = await savePdfWithPicker(pdfBlob, filename);\n                        if(res && res.saved){ exported++; }\n                    }\n                }catch(e){ console.log(`Error exporting ${filename}: ${e}`); }\n            }\n            if(typeof context.clearBatchCBData === 'function'){ context.clearBatchCBData(); }\n            context.send('closeNotificationPopup');\n            showPopup([`Exported ${exported} of ${profiles.length} profile${profiles.length === 1 ? '' : 's'}.`], 'success', 5);\n        };\n\n        // Render all selected profiles stacked into one modal.\n        context.set(\"isShowConfig.isShowPopupNotification\", true);\n        scheduleOnce('afterRender', context, async () => {\n            const popupBody = document.getElementById('notificationPopupContentBody');\n            if(!popupBody){ return; }\n            popupBody.innerHTML = '';\n            for(let i = 0; i < profiles.length; i++){\n                const container = document.createElement('div');\n                container.id = `pack-profile-${i}`;\n                //Match the popup body's layout so the exported PDF looks like the on-screen report:\n                //horizontal padding + an explicit sans-serif font (html2canvas otherwise falls back to a\n                //serif default), and flex-column so the rows stack the same way.\n                Object.assign(container.style, {\n                    width: '100%',\n                    paddingLeft: '20px',\n                    paddingRight: '20px',\n                    display: 'flex',\n                    flexDirection: 'column',\n                    fontFamily: 'sans-serif',\n                });\n                if(i > 0){\n                    //Visual divider between stacked profiles.\n                    container.style.borderTop = '2px dashed gray';\n                    container.style.marginTop = '20px';\n                    container.style.paddingTop = '20px';\n                }\n                popupBody.appendChild(container);\n                // Render this profile's report into its own container (exportMode = no per-report buttons).\n                await packProfileDetailBoard(context, false, profiles[i].packProfile, profiles[i].rigProfile, profiles[i].packType, profiles[i].packData, true, container);\n            }\n\n            if(isVisiblePopup){\n                // View & Export: let the operator review the stacked profiles, then Export on click.\n                const exportBtn = document.getElementById('notificationExportButton');\n                if(exportBtn){ exportBtn.style.display = \"block\"; exportBtn.onclick = () => exportAll(); }\n                const okBtn = document.getElementById('notificationOkButton');\n                if(okBtn){ okBtn.style.display = \"block\"; okBtn.style.marginRight = \"10px\"; okBtn.onclick = () => context.send('closeNotificationPopup'); }\n            }else{\n                // Direct Export: skip the review step.\n                await exportAll();\n            }\n        });\n    }catch(err){\n        console.error('Error buildBatchProfileSheet:', err);\n        showPopup(['Profile export failed.'], 'error', 4);\n    }\n}\nexport function showHelpNotificationBoard(context){\n    /**\n     * Case sensitive \n     */\n    return new Promise((resolve) => {\n        try{\n            context.set(\"isShowConfig.isShowPopupNotification\", true);\n            scheduleOnce('afterRender', context, () => {\n                const masterPopupContent = document.getElementById('notificationPopupContentBody');\n                if(masterPopupContent){\n                    //Main Title\n                    const mainComponent = document.createElement('div');\n                    mainComponent.style.alignSelf = 'center';\n                    mainComponent.style.fontSize = 'x-large';\n                    mainComponent.style.fontWeight = 'bold';\n                    mainComponent.textContent = `Help`;\n                    masterPopupContent.appendChild(mainComponent);\n                    // Title 1\n                    const rawCodeSubTitleComponent = document.createElement('div');\n                    rawCodeSubTitleComponent.style.fontSize = 'medium';\n                    rawCodeSubTitleComponent.style.fontWeight = 'bold';\n                    rawCodeSubTitleComponent.textContent = `Configure Board's Settings:`;\n                    masterPopupContent.appendChild(rawCodeSubTitleComponent);\n                    //Subtitle 1\n                    const subsection1Component = document.createElement('div');\n                    subsection1Component.style.marginLeft = \"15px\";\n                    //SubCode 1\n                    const subRawCode1 = document.createElement('div');\n                    subRawCode1.style.fontSize = 'smaller';\n                    subRawCode1.style.fontWeight = 'bold';\n                    subRawCode1.textContent = `1) Set Command Mode`;\n                    subsection1Component.appendChild(subRawCode1);\n                    //Subsubtitle 1\n                    const subsubsection1Component = document.createElement('div');\n                    subsubsection1Component.style.marginLeft = \"30px\";\n                    //Command Mode\n                    const commandMode = document.createElement('div');\n                    commandMode.style.fontSize = 'smaller';\n                    commandMode.textContent = `- Set to Command Mode: WS+COMMAND_MODE=1`;\n                    subsubsection1Component.appendChild(commandMode);\n\n                    subsection1Component.appendChild(subsubsection1Component);\n                    //SubCode 2\n                    const subRawCode2 = document.createElement('div');\n                    subRawCode2.style.fontSize = 'smaller';\n                    subRawCode2.style.fontWeight = 'bold';\n                    subRawCode2.textContent = `2) Set Desired Setting`;\n                    subsection1Component.appendChild(subRawCode2);\n                    //Subsubtitle 2\n                    const subsubsection2Component = document.createElement('div');\n                    subsubsection2Component.style.marginLeft = \"30px\";\n                    //Mode Setting \n                    const modeSettingComponent = document.createElement('div');\n                    modeSettingComponent.style.fontSize = 'smaller';\n                    modeSettingComponent.textContent = `- Mode Setting: WS+COMMAND=0`;\n                    subsubsection2Component.appendChild(modeSettingComponent);\n                    //Channels Setting\n                    const channelsSettingComponent = document.createElement('div');\n                    channelsSettingComponent.style.fontSize = 'smaller';\n                    channelsSettingComponent.textContent = `- Channels Setting: WS+COMMAND=1`;\n                    subsubsection2Component.appendChild(channelsSettingComponent);\n                    //Stroke Setting\n                    const strokeSettingComponent = document.createElement('div');\n                    strokeSettingComponent.style.fontSize = 'smaller';\n                    strokeSettingComponent.textContent = `- Stroke Setting: WS+COMMAND=2`;\n                    subsubsection2Component.appendChild(strokeSettingComponent);\n                    //ID Setting\n                    const idSettingComponent = document.createElement('div');\n                    idSettingComponent.style.fontSize = 'smaller';\n                    idSettingComponent.textContent = `- ID Setting: WS+COMMAND=3`;\n                    subsubsection2Component.appendChild(idSettingComponent);\n                    //Type Setting\n                    const typeSettingComponent = document.createElement('div');\n                    typeSettingComponent.style.fontSize = 'smaller';\n                    typeSettingComponent.textContent = `- Type Setting: WS+COMMAND=4`;\n                    subsubsection2Component.appendChild(typeSettingComponent);\n                    //Description Setting\n                    const descriptionSettingComponent = document.createElement('div');\n                    descriptionSettingComponent.style.fontSize = 'smaller';\n                    descriptionSettingComponent.textContent = `- Description Setting: WS+COMMAND=5`;\n                    subsubsection2Component.appendChild(descriptionSettingComponent);\n                    //Table to ROM Setting\n                    const tableToROMSettingComponent = document.createElement('div');\n                    tableToROMSettingComponent.style.fontSize = 'smaller';\n                    tableToROMSettingComponent.textContent = `- Table to ROM Setting: WS+COMMAND=7`;\n                    subsubsection2Component.appendChild(tableToROMSettingComponent);\n                    //ROM to Table\n                    const romToTableSettingComponent = document.createElement('div');\n                    romToTableSettingComponent.style.fontSize = 'smaller';\n                    romToTableSettingComponent.textContent = `- ROM to Table Setting: WS+COMMAND=8`;\n                    subsubsection2Component.appendChild(romToTableSettingComponent);\n                    //Exit Setting\n                    const exitSettingComponent = document.createElement('div');\n                    exitSettingComponent.style.fontSize = 'smaller';\n                    exitSettingComponent.textContent = `- Exit Setting: WS+COMMAND=9`;\n                    subsubsection2Component.appendChild(exitSettingComponent);\n\n                    subsection1Component.appendChild(subsubsection2Component);\n                    //SubCode 3\n                    const subRawCode3 = document.createElement('div');\n                    subRawCode3.style.fontSize = 'smaller';\n                    subRawCode3.style.fontWeight = 'bold';\n                    subRawCode3.textContent = `3) Set Desired Value for Setting`;\n                    subsection1Component.appendChild(subRawCode3);\n                    //Subsubtitle 3\n                    const subsubsection3Component = document.createElement('div');\n                    subsubsection3Component.style.marginLeft = \"30px\";\n                    //Command Mode\n                    const setValueComponent = document.createElement('div');\n                    setValueComponent.style.fontSize = 'smaller';\n                    setValueComponent.textContent = `- Set Value: WS+COMMAND_MODE=XXXX`;\n                    subsubsection3Component.appendChild(setValueComponent);\n\n                    subsection1Component.appendChild(subsubsection3Component);\n                    masterPopupContent.appendChild(subsection1Component);\n\n    \n                }\n            });\n    \n        }catch (error) {\n            console.error('Error reflashPopup:', error);\n            resolve(false);\n            document.removeEventListener('keydown', enterKeyHandler);\n\n        }\n    });\n}\n//Make POST & PATCH requests \n//Shared error popup for ANY failed request. Three cases, in priority:\n// 1) Structured permission_denied 403 (body.data.error) → list the missing permissions, indented.\n// 2) Legacy error shape { message, status } (400 / 582 / 500 / cross-company 403, etc.) → surface the\n//    BE's actual message so the operator sees the real reason instead of a generic toast.\n// 3) Anything else → generic \"<url> <status>\" fallback.\n//Reads the raw (snake_case) body the BE sent.\nasync function showRequestErrorPopup(url, response){\n    let rawBody = null;\n    try { rawBody = await response.clone().json(); } catch(e){ /* empty / non-JSON body */ }\n    const err = rawBody && rawBody.data;\n    if(err && err.error === 'permission_denied'){\n        const lines = [ err.message || 'You do not have the required permissions for this action.' ];\n        const missing = Array.isArray(err.missing_permissions) ? err.missing_permissions : [];\n        if(missing.length){\n            lines.push(`Missing permission${missing.length === 1 ? '' : 's'}:`);\n            missing.forEach((p) => lines.push(`   - ${p}`));\n        }\n        showPopup(lines, 'error', 8);\n        return;\n    }\n    //Legacy { message, status } — message may be top-level or (defensively) under data.\n    const legacyMessage = (rawBody && rawBody.message) || (err && err.message);\n    if(legacyMessage){\n        showPopup([legacyMessage, `(${response.status})`], 'error', 6);\n        return;\n    }\n    showPopup([`${url}`, `${response.status}: ${response.statusText}`], 'error', 4);\n}\nexport async function sendGETRequest(endpoint, queryParams = {}){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint;\n        const queryString = new URLSearchParams(queryParams).toString();\n        if (queryString) {\n          url += `?${queryString}`;\n        }\n        const response = await fetch(url, {\n          method: 'GET',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n        });\n        if (response.status != 200 && response.status != 201) {\n            if(response.status == 401 || response.status == 403){ console.log(response); }\n            await showRequestErrorPopup(url, response);\n        }\n        else if ((response['status'] == 200) || (response['status'] == 201)) {\n            const responseData = await response.json();\n            const newData = convertKeysToCamelCase(responseData);\n            return newData; // Return true if status code is 201\n        } \n         \n    } \n    catch (error) {\n    console.error('Error submitting data:', error);\n    }\n    return false;\n}\nfunction convertKeysToCamelCase(obj) {\n    /**\n        This helper function is a generic helper function used to convert kebab-case to camelCase, so that I can take the obj and see it as normal JSON object \n        const inputFrom = {\n            'sensor-name': 'Temperature Sensor',\n            'sensor-id': 12345,\n            'nested-data': {\n            'calibration-date': '2024-12-15',\n            'sensor-details': [\n                { 'sensor-value': 100, 'sensor-unit': 'C' },\n                { 'sensor-value': 200, 'sensor-unit': 'F' }\n            ]\n            }\n        };\n        const inputTo =  {\n            sensorName: 'Temperature Sensor',\n            sensorId: 12345,\n            nestedData: {\n            calibrationDate: '2024-12-15',\n            sensorDetails: [\n                { sensorValue: 100, sensorUnit: 'C' },\n                { sensorValue: 200, sensorUnit: 'F' }\n            ]\n            }\n        }\n    */\n\n    if (Array.isArray(obj)) {\n      return obj.map(v => convertKeysToCamelCase(v));\n    } else if (obj !== null && typeof obj === 'object') {\n      return Object.fromEntries(\n        Object.entries(obj).map(([key, value]) => [\n          key.replace(/-([a-z])/g, (_, char) => char.toUpperCase()), // Convert kebab-case to camelCase\n          convertKeysToCamelCase(value)\n        ])\n      );\n    }\n    return obj;\n}\nexport async function sendPOSTRequest(endpoint, data, queryParams = {}){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint + \"/\";\n        const queryString = new URLSearchParams(queryParams).toString();\n        if(queryString){\n            url += `?${queryString}`;\n        }\n        const response = await fetch(url, {\n          method: 'POST',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token\n          },\n          body: JSON.stringify(data),\n        });\n        if (response.status != 200 && response.status != 201) {\n            if(response.status == 401 || response.status == 403){ console.log(response); }\n            await showRequestErrorPopup(url, response);\n        }\n        else if ((response.status == 200) || (response.status == 201)) {\n            const responseData = await response.json();\n            // console.log('Data submitted successfully:', responseData);\n            return true; // Return true if status code is 201\n        }\n\n      } catch (error) {\n        console.error('Error submitting data:', error);\n      }\n      return false;\n}\nexport async function sendPOSTRequest2(endpoint, data){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint + \"/\";\n        const response = await fetch(url, {\n          method: 'POST',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n          body: JSON.stringify(data),\n        });\n        if (response.status != 200 && response.status != 201) {\n            if(response.status == 401 || response.status == 403){ console.log(response); }\n            await showRequestErrorPopup(url, response);\n        }\n        else if ((response.status == 200) || (response.status == 201)) {\n            const responseData = await response.json();\n            // console.log('Data submitted successfully:', responseData);\n            return responseData; // Return true if status code is 201\n        } \n         \n      } catch (error) {\n        console.error('Error submitting data:', error);\n      }\n      return null;\n}\n// returnDetails: pass `true` to get back `{ ok, status, message, data }` instead of a boolean.\n// Useful when the BE returns a 400 with a specific error reason in the body that the caller\n// wants to surface to the user. Default (false) keeps the original boolean contract so existing\n// callers are unaffected.\nexport async function sendPATCHRequest(endpoint, data, returnDetails = false){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint + \"/\";\n        const response = await fetch(url, {\n          method: 'PATCH',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token\n          },\n          body: JSON.stringify(data),\n        });\n        if (response.status != 200 && response.status != 201) {\n            if(response.status == 401 || response.status == 403){ console.log(response); }\n            await showRequestErrorPopup(url, response);\n        }\n        else if ((response.status == 200) || (response.status == 201)) {\n            const responseData = await response.json();\n            // console.log('Data submitted successfully:', responseData);\n            if(returnDetails){ return { ok: true, status: response.status, data: responseData }; }\n            return true; // Return true if status code is 201\n        }\n        if(returnDetails){\n            // Try to extract the BE's reason from the response body.\n            let message = '';\n            try{\n                const errBody = await response.json();\n                message = errBody.detail || errBody.message || JSON.stringify(errBody);\n            }catch(_){ /* body wasn't JSON */ }\n            return { ok: false, status: response.status, message };\n        }\n      } catch (error) {\n        console.error('Error submitting data:', error);\n        if(returnDetails){ return { ok: false, status: 0, message: error.message || 'Network error' }; }\n      }\n      return false;\n}\nexport async function sendDELETERequest(endpoint){\n    try {\n        let url = getApiBaseUrl() + \"/\" + endpoint + \"/\";\n        const response = await fetch(url, {\n          method: 'DELETE',\n          headers: {\n              'Content-Type': 'application/json',\n              Authorization: 'Bearer ' + localStorage.token  \n          },\n        });\n  \n        if (response.status != 200 && response.status != 201) {\n            if(response.status == 401 || response.status == 403){ console.log(response); }\n            await showRequestErrorPopup(url, response);\n        }\n        else if ((response.status == 200) || (response.status == 201)) {\n            const responseData = await response.json();\n            // console.log('Data submitted successfully:', responseData);\n            return true; // Return true if status code is 201\n        } \n         \n      } catch (error) {\n        console.error('Error submitting data:', error);\n      }\n      return false;\n}\n\n//Profile & Form & Data Section\nexport function resetProfile(context, mode){\n    switch (mode){\n        case \"rig\":\n            resetProfileForm(mode);\n            context.set(\"formRigData\",{});\n        case \"packType\":\n            resetProfileForm(mode);\n            context.set(\"formPackTypeData\",{});\n    }\n\n}\nexport function resetProfileForm(mode){\n    switch(mode){\n        case \"rig\":\n            const rigIPComponent = document.getElementById(\"rigIP\");\n            if(rigIPComponent){\n                rigIPComponent.value = null;\n            }\n            const rigNameComponent = document.getElementById(\"rigName\");\n            if(rigNameComponent){\n                rigNameComponent.value = null;\n            }\n            const rigCategoryComponent = document.getElementById(\"rigCategory\");\n            if(rigCategoryComponent){\n                rigCategoryComponent.value = '';\n            }\n        case \"packType\":\n            const comp1 = document.getElementById(\"calibType\");\n            if(comp1){\n                comp1.value = \"\";\n            }\n            const comp2 = document.getElementById(\"channels\");\n            if(comp2){\n                comp2.value = null;\n            }\n            const comp3 = document.getElementById(\"minLimit\");\n            if(comp3){\n                comp3.value = null;\n            }\n            const comp4 = document.getElementById(\"maxLimit\");\n            if(comp4){\n                comp4.value = null;\n            }\n            const comp5 = document.getElementById(\"checkpointSampleSize\");\n            if(comp5){\n                comp5.value = null;\n            }\n            const comp6 = document.getElementById(\"checkpointSpeed\");\n            if(comp6){\n                comp6.value = null;\n            }\n            const comp7 = document.getElementById(\"checkpointDelay\");\n            if(comp7){\n                comp7.value = null;\n            }\n            const comp8 = document.getElementById(\"checkpointPositions\");\n            if(comp8){\n                comp8.value = null;\n            }\n            const comp9 = document.getElementById(\"packTypeCreationEmployee\");\n            if(comp9){\n                comp9.value = null;\n            }\n\n    }\n}\nexport function resetDataRigProfile(context){\n    console.log(\"resetDataRigProfile\");\n    //Clear live log console\n    const chatBox = document.getElementById('streamingTextBox');\n    if(chatBox){\n        chatBox.innerHTML = \"\";\n    }\n    // //Reset Calib Profile Selection\n    // const calibProfile = document.getElementById(\"selectedPackType\");\n    // calibProfile.value=\"0\";\n    // context.set(\"userInputtedData.selectedPackType\", 0);\n    //Disable Stepper motor & pump sections\n    const stepperComponent = document.getElementById('stepperMotorSection');\n    stepperComponent.style.pointerEvents=\"none\";\n    stepperComponent.style.opacity=\"0.5\";\n    const pumpComponent = document.getElementById('pressurePumpSection');\n    pumpComponent.style.pointerEvents=\"none\";\n    pumpComponent.style.opacity=\"0.5\";\n    //Reset Rig Profile Selection\n    context.set(\"userInputtedData.selectedRigProfile\", null);\n}\nexport function resetDataSelectedPackTypeProfile(context){\n    //Reset to Require Validation\n    context.set(\"dashboardStatusBarData.status\",generalStatusLibrary(602));\n    destroyAndClearAnchorLiveView(context);\n    //Clear Selected Calib Profile\n    context.set(\"userInputtedData.selectedPackType\", null);\n    context.set(\"completedPackProfile\", null);\n    \n}\nexport function resetDataCompletedPackTypeProfile(context){\n    //Reset to Require Validation\n    context.set(\"dashboardStatusBarData.status\",generalStatusLibrary(602));\n    destroyAndClearAnchorLiveView(context);\n    //Clear Selected Calib Profile\n    context.set(\"manufacturedPackType\", null);\n    \n}\nfunction updateAnchorBoardLiveViewData(data){\n    const parsedData = data; // Parse your incoming message\n    // console.log(`parsedData2:${parsedData}`);\n    const chart = Chart.getChart('myChart'); // Get the Chart instance\n    if (chart && chart.data && chart.data.datasets.length > 0) {\n\n        for(let i=0;i<chart.data.datasets.length; i++){\n            if(i == 0){\n                const tempLabel = document.getElementById('T0');\n                if(tempLabel){\n                    tempLabel.textContent=`T:${parsedData[i]}`\n                }\n            }else{\n                const dispLabel = document.getElementById(`CH${i}`);\n                if(dispLabel){\n                    dispLabel.textContent=`CH${i}:${parsedData[i]}`\n                }\n            }\n        }\n    }\n\n}\nfunction updateAnchorChartLiveViewData (data) {\n    const parsedData = data; // Parse your incoming message\n    const chart = Chart.getChart('myChart'); // Get the Chart instance\n    if (chart && chart.data && chart.data.datasets.length > 0) {\n        const currentIndex = chart.data.labels.length;\n\n        // Add the new x-axis label (counter value)\n        chart.data.labels.push(currentIndex);\n\n        // Add the new y-axis data (parsed displacement value)\n        for(let i=0;i<chart.data.datasets.length; i++){\n            chart.data.datasets[i].data.push(parsedData[i]);\n        }\n\n        const maxDataPoints = 60; // max\n        if (chart.data.labels.length > maxDataPoints) {\n            chart.data.labels.shift(); // Remove the oldest x-axis label\n            for(let i=0;i<chart.data.datasets.length; i++){\n                chart.data.datasets[i].data.shift();\n            }\n        }\n\n        chart.update('none'); // Update the chart to reflect the new data\n\n    }\n}\nexport async function validateAllForms(context){\n    //When Building a validator, there are only 3 types validation state:\n    //Missing-Red Neutral-Orange Passed-Green\n    const failedState = \"Missing-Red\";\n    const neutralState = \"Neutral-Orange\";\n    const labelState = \"Label-Black\";\n    const passedState = \"Passed-Green\"\n    //When Building a validator, there are only 3 levels of indentation:\n    const indent = 12; //supposed to represent 10px, setting numbers here because I can use it for multiples\n\n    //What is the structure for failedObjects? \n    //Label Text-Value Text-Value Text Color-# of indents\n    let failedObjects={};\n\n    //Check Permissions\n    // The phase being run (phaseI/phaseII) is driven by the page's current phase — toggled by the\n    // \"Cycle Phase\" button (settingsConfig.phaseENV.phase). Send it to the BE as ?phase=<mode> so the\n    // BE checks permission for that specific phase. Response still carries the per-phase flag we gate on.\n    const phase = context.get('settingsConfig.phaseENV.phase');\n    const requiredFlag = phase === 1 ? 'phaseI' : 'phaseII';\n    const permissionLabel = phase === 1 ? 'Phase I Permissions' : 'Phase II Permissions';\n    const responseData = await sendGETRequest(`validation_pack_validate/?phase=${requiredFlag}`);\n    // BE now wraps everything under data:{} — { data: { mode, phaseI, phaseII, detail: { phaseI:\n    // {assigned, perms_ok, required_permissions, missing_permissions}, phaseII: {...} } } }.\n    // NOTE: convertKeysToCamelCase (in sendGETRequest) only converts kebab-case, NOT snake_case — so\n    // these keys stay snake_case (required_permissions / missing_permissions). Read them as-is.\n    const permData = responseData && responseData['data'];\n    const hasPermission = permData && permData[requiredFlag] === true;\n    if(!hasPermission){\n        failedObjects[\"validation_pack_validate\"] = `${permissionLabel}-${failedState}-${0 * indent}px`;\n        // List the REQUIRED permissions for the current phase, line by line in RED, indented under the\n        // permission line, so the operator sees exactly which permissions this phase needs. (perm names\n        // have no \"-\" so the dash-delimited row format is safe; \"Label\" state colors the label itself.)\n        // Prefer the nested per-phase detail; fall back to a flat permission_denied body (detail is then\n        // the string \"permission_denied\" and the list sits directly under data{}).\n        const detail = permData && permData['detail'] && permData['detail'][requiredFlag];\n        let required = (detail && Array.isArray(detail['required_permissions'])) ? detail['required_permissions'] : [];\n        if(!required.length && permData && Array.isArray(permData['required_permissions'])){\n            required = permData['required_permissions'];\n        }\n        required.forEach((perm, idx)=>{\n            failedObjects[`requiredPerm_${idx}`] = `${perm}-Label-red-${1 * indent}px`;\n        });\n    }else{\n        failedObjects[\"validation_pack_validate\"] = `${permissionLabel}-${passedState}-${0 * indent}px`;\n    }\n    //Check for selected pack type(Phase I only) & completed pack type(Phase II only)\n    if(context.get('settingsConfig.phaseENV.phase') === 1){\n        if(context.get('isRepairing')){\n            if(context.get(\"userInputtedData.selectedPackType\") == '0' || context.get(\"userInputtedData.selectedPackType\") == '' || context.get(\"userInputtedData.selectedPackType\") == null){\n                failedObjects[\"selectedPackType\"] = `Repair Pack-${failedState}-${0 * indent}px`;\n            }else{\n                failedObjects[\"selectedPackType\"] = `Repair Pack-${passedState}-${0 * indent}px`;\n            }\n        }else{\n            if(context.get(\"userInputtedData.selectedPackType\") == '0' || context.get(\"userInputtedData.selectedPackType\") == '' || context.get(\"userInputtedData.selectedPackType\") == null){\n                failedObjects[\"selectedPackType\"] = `Pack Type-${failedState}-${0 * indent}px`;\n            }else{\n                failedObjects[\"selectedPackType\"] = `Pack Type-${passedState}-${0 * indent}px`;\n            }\n\n        }\n    }else{\n        if(context.get(\"manufacturedPackType\") == '0' || context.get(\"manufacturedPackType\") == '' || context.get(\"manufacturedPackType\") == null){\n            failedObjects[\"manufacturedPackType\"] = `Completed Pack-${failedState}-${0 * indent}px`;\n        }else{\n            failedObjects[\"manufacturedPackType\"] = `Completed Pack-${passedState}-${0 * indent}px`;\n        }\n    }\n    //Final Check\n    for (const key in failedObjects) {\n        \n        const value = failedObjects[key];\n\n        // Check if the value contains the keyword (case-insensitive)\n        if (typeof value === 'string' && (value.includes(failedState))) {\n            //When it contains at least one \"Missing\" key word, it fails the check, needs to show notification popup\n            context.set(\"dashboardStatusBarData.status\",generalStatusLibrary(602));\n\n            return context.buildValidationPopupContent(failedObjects);\n        }else{\n        }\n        \n    }\n    //When it passes, don't need to show notification popup. Directly jump to Calibration Daashboard \n    const element = document.getElementById(\"dashboardTitle\");\n    if (element) {\n        element.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n        console.log(context.get(\"userInputtedData.selectedRigProfile\"));\n        console.log(context.get(\"userInputtedData.selectedPackType\"));\n        console.log(context.get(\"userInputtedData.selectedPackData\"));\n        context.set(\"dashboardStatusBarData.status\",generalStatusLibrary(603));\n    }\n\n}\n\n//Web Socket Section\n/**\n * FOR DEV: USE WS. FOR PRODUCTION: USE WSS\n */\nexport function initializeConnection(context, ip){\n    // console.log(\"called initializeConnection\");\n    //initialize websock component\n    if (context.ws && context.ws.readyState !== WebSocket.CLOSED) {\n        console.warn(\"WebSocket already exists. Disconnecting...\");\n        webSocketDisconnect(context);\n    }\n    resetLog(context, 'live');\n    context.ws = new WebSocket(`wss://${ip}:888`);\n\n    if(context.ws.readyState === WebSocket.CONNECTING){\n        context.set(\"dashboardStatusBarData.connection\",connectionStatusLibrary(501));\n        showPopup(['Connecting... Please wait until connection has been updated!'], 'warning', 4)\n    }\n    context.ws.onopen = () => {\n        // console.log(\"opened wss\");\n        // console.log(context.ws);\n        context.set(\"dashboardStatusBarData.connection\",connectionStatusLibrary(502));\n\n    };\n\n    context.ws.onmessage = event => {\n        if(event.data != null){\n            // console.log(event.data.trim());\n            appendLiveLog(context,event.data.trim(), 'incoming');\n        }\n    };\n\n    context.ws.onerror = error => {\n        console.log(\"error\");\n        console.log(error);\n        context.set(\"dashboardStatusBarData.connection\", connectionStatusLibrary(500));\n    };\n\n    context.ws.onclose = () => {\n        context.set(\"dashboardStatusBarData.connection\", connectionStatusLibrary(500));\n        resetDataRigProfile(context);\n    };    \n    window.addEventListener('beforeunload', function () {\n        const component = document.getElementById('selectedRigIP');\n        component.value = \"0\";\n        context.set(\"selectedRigDP\", \"0\");\n    });\n}\nexport function webSocketDisconnect(context){\n    if(context.ws){\n        context.set(\"dashboardStatusBarData.connection\",connectionStatusLibrary(500));\n        resetLog(context, 'live');\n        context.ws.onopen = null;\n        context.ws.onmessage = null;\n        context.ws.onerror = null;\n        context.ws.onclose = null;\n        context.ws.close();\n        context.ws = null;\n        console.log(\"Disconnected to websocket\")\n    }\n}\nexport function websocketReconnect(context){\n    if(context.ws){\n        webSocketDisconnect(context);\n    }\n    if(context.get(\"userInputtedData.selectedRigProfile\")){\n        initializeConnection(context, context.get(\"userInputtedData.selectedRigProfile\")['data']['rigIP']);\n        showPopup(['Successfully reconnected Websocket'], 'success');\n    }\n}\n\n//Live & Phase I Log & Phase II Log & Control Panel Section  \nexport function updateRigActivity(context){\n    /**\n     * {\n            \"activityJSON\": {\n                \"status\": 602,\n                \"connection\": 500,\n                \"activity\": 551,\n                \"activeUser\": \"Steven Fu\",\n                \"connectedTo\": \"240471999\",\n                \"company\": \"YieldPoint Epiroc\",\n                \"latestDate\": \"2024-01-8 01:00:00\"\n            }\n        }\n     */\n    const dashboardStatusObj    = context.get(\"dashboardStatusBarData\");\n    const formSensorData    = context.get(\"userInputtedData.selectedPackData\");\n    const formRigData    = context.get(\"userInputtedData.selectedRigProfile\");\n    const calibrationObj        = dashboardStatusObj['calibration'];\n    const connectionObj         = dashboardStatusObj['connection'];\n    const currentObj            = dashboardStatusObj['current'];\n    const statusObj             = dashboardStatusObj['status'];\n    const targetObj             = dashboardStatusObj['target'];\n    const latestDateTime        = getCurrentDateTime();\n    const userProfile = context.get('session').data.authenticated['userProfile'];\n\n    if(userProfile != null && formRigData){\n        let activityLog = {};\n        activityLog['status'] = statusObj['key'];\n        activityLog['connection'] = connectionObj['key'];\n        activityLog['activity'] = calibrationObj['key'];\n        activityLog['activeUser'] = `${userProfile['profile']['first_name']} ${userProfile['profile']['last_name']}`;\n        activityLog['connectedTo'] = formSensorData['sensorID'] ? formSensorData['sensorID'] : null;\n        activityLog['company'] = `${userProfile['profile']['company']}`;\n        activityLog['latestDate'] = latestDateTime;\n        // console.log(activityLog);\n        sendPATCHRequest(`rig_profile_activity_view/${formRigData['data']['rigID']}`, {'activityJSON':activityLog});\n    }\n}\nexport function appendLiveLog(context, newMessage, direction) {\n    //Update Live Log TB\n    const chatBox = document.getElementById('streamingTextBox');\n    if (chatBox) {\n        if(newMessage.includes(\"current\") || newMessage.includes('target')){\n        }else{\n            chatBox.textContent += `${direction == \"incoming\" ? \">>\" : \"<<\"}${newMessage}\\n`;\n            const lines = chatBox.textContent.split('\\n');\n            const maxNumLines = 300;\n            if (lines.length > maxNumLines) {\n                chatBox.textContent = lines.slice(lines.length - maxNumLines).join('\\n');\n            }\n        }\n\n        // Scroll to the bottom if chat is locked\n        if (context.get('settingsConfig.chatLocked.streamingTextBox')) {\n            chatBox.scrollTop = chatBox.scrollHeight;\n        }\n    }\n    //Used for when the message is in standard structure\n\n    //This is for v1.0 only. \n    //Why this manual add of sensorData? \n    //it is because during phaseI, with blank boards, the readings coming in from rigs do not container sensorData= tags and the software will not work if it does not have the tag\n    //It is not cared for in phaseII, because by then the blank board would be flashed and the reading coming in, it will contain the tag\n    if(context.get(\"settingsConfig.internalVersion\") === \"v1.0\" &&\n        ((newMessage[0] === \"+\") || (newMessage[0] === \"-\"))\n    ){\n        newMessage = `sensorData=${newMessage}`\n    }\n    // console.log(`raw message:${newMessage}`);\n    if(newMessage.includes(\"=\") && newMessage.split(\"=\").length == 2){\n        // console.log(`${newMessage}`);\n        incomingMessageLibrary(context, newMessage.split(\"=\")[0], newMessage.split(\"=\")[1]);\n    }\n    \n}\n/**\n * Write a structured failure line to the Live Log (streamingTextBox) so an\n * operator can see *why* a phase aborted instead of it disappearing silently.\n * Uses a `!!` prefix to distinguish from `>>` (rig→FE) and `<<` (FE→rig).\n * Bypasses appendLiveLog's `=` incoming-message decoder.\n */\nexport function logPhaseLiveError(context, phase, step, reason){\n    const chatBox = document.getElementById('streamingTextBox');\n    if (chatBox) {\n        const ts = new Date().toLocaleTimeString();\n        chatBox.textContent += `!! [${ts}] [${phase}] [Step: ${step}] FAILED -- ${reason}\\n`;\n        const lines = chatBox.textContent.split('\\n');\n        const maxNumLines = 300;\n        if (lines.length > maxNumLines) {\n            chatBox.textContent = lines.slice(lines.length - maxNumLines).join('\\n');\n        }\n        if (context.get('settingsConfig.chatLocked.streamingTextBox')) {\n            chatBox.scrollTop = chatBox.scrollHeight;\n        }\n    }\n    console.warn(`[${phase}] [Step: ${step}] FAILED -- ${reason}`);\n}\n//Dedicated \"Validation Failed\" modal shown when a reading is caught outside the accepted range. It\n//explains WHICH step/range/channels failed so operators & contractors understand why. Non-dismissable\n//(no backdrop close, no X) — they must read it and click Ok. Reads context._lastValidationFailReason\n//(set by verifyAcceptedRange) for the detail.\nexport function buildValidationFailedBoard(context){\n    context.set(\"isShowConfig.isShowPopupNotification\", true);\n    //Lock backdrop dismissal — the operator must acknowledge the failure with Ok.\n    context.set(\"isShowConfig.isPopupDismissable\", false);\n    scheduleOnce('afterRender', context, () => {\n        const masterPopupContent = document.getElementById('notificationPopupContentBody');\n        if(!masterPopupContent){ return; }\n        masterPopupContent.innerHTML = '';\n        const failInfo = context._lastValidationFailReason || {};\n\n        //Hide the X so the only way out is the Ok button.\n        const xButtonComponent = document.getElementById('closeXButton');\n        if(xButtonComponent){ xButtonComponent.style.display = 'none'; }\n\n        //Title\n        const titleSection = document.createElement('div');\n        titleSection.style.alignSelf = 'center';\n        titleSection.style.fontSize = 'x-large';\n        titleSection.style.fontWeight = 'bold';\n        titleSection.style.color = 'red';\n        titleSection.textContent = 'Validation Failed';\n        masterPopupContent.appendChild(titleSection);\n\n        //Which phase/step\n        if(failInfo.phase || failInfo.step){\n            const stepSection = document.createElement('div');\n            stepSection.style.alignSelf = 'center';\n            stepSection.style.fontSize = 'medium';\n            stepSection.style.fontWeight = 'bold';\n            stepSection.style.marginTop = '8px';\n            stepSection.textContent = [failInfo.phase, failInfo.step].filter(Boolean).join(' — ');\n            masterPopupContent.appendChild(stepSection);\n        }\n\n        //Explanation of why it failed\n        const reasonSection = document.createElement('div');\n        reasonSection.style.alignSelf = 'center';\n        reasonSection.style.fontSize = 'small';\n        reasonSection.style.marginTop = '12px';\n        reasonSection.style.textAlign = 'center';\n        reasonSection.style.maxWidth = '85%';\n        reasonSection.style.whiteSpace = 'pre-line';\n        reasonSection.textContent = failInfo.reason\n            ? `A reading was outside the accepted range, so the validation was stopped:\\n\\n${failInfo.reason}`\n            : 'A reading was outside the accepted range, so the validation was stopped.';\n        masterPopupContent.appendChild(reasonSection);\n\n        //Next-step note\n        const noteSection = document.createElement('div');\n        noteSection.style.alignSelf = 'center';\n        noteSection.style.fontSize = 'small';\n        noteSection.style.color = 'gray';\n        noteSection.style.marginTop = '12px';\n        noteSection.textContent = 'Please check the pack/coils and restart the validation.';\n        masterPopupContent.appendChild(noteSection);\n\n        //Ok button (the only way to dismiss)\n        const okButtonComponent = document.getElementById('notificationOkButton');\n        if(okButtonComponent){\n            okButtonComponent.style.display = 'block';\n            okButtonComponent.onclick = () => {\n                if(xButtonComponent){ xButtonComponent.style.display = 'block'; }\n                context.send('closeNotificationPopup');\n            };\n        }\n    });\n}\nexport function updateStepperPressureControlPanel(context,value){\n    console.log(context.get(\"userInputtedData.selectedRigProfile\")['data']);\n    const stepperPanelComponent = document.getElementById(\"stepperMotorSection\");\n    const pumpPanelComponent = document.getElementById(\"pressurePumpSection\");\n    if(value == null){\n        stepperPanelComponent.style.pointerEvents=\"none\";\n        stepperPanelComponent.style.opacity=\"0.5\";\n        pumpPanelComponent.style.pointerEvents=\"none\";\n        pumpPanelComponent.style.opacity=\"0.5\";\n    }else if (value == \"STEPPER\"){\n        stepperPanelComponent.style.pointerEvents=\"visible\";\n        stepperPanelComponent.style.opacity=\"1\";\n        pumpPanelComponent.style.pointerEvents=\"none\";\n        pumpPanelComponent.style.opacity=\"0.5\";\n\n    }else if (value == \"PUMP\"){\n        stepperPanelComponent.style.pointerEvents=\"none\";\n        stepperPanelComponent.style.opacity=\"0.5\";\n        pumpPanelComponent.style.pointerEvents=\"visible\";\n        pumpPanelComponent.style.opacity=\"1\";\n\n    }\n}\nexport function resetLog(context, typeOfLog){\n    switch(typeOfLog){\n        case \"live\":\n            const liveChatBox = document.getElementById('streamingTextBox');\n            if(liveChatBox){\n                liveChatBox.innerHTML=\"\";\n            }\n    }\n}\n//Phase I && II Schematics\n//Phase I && II Schematics\nexport async function getPacksValidationPhaseISchematics(context, type){\n    const packTypeProfile = context.get(\"userInputtedData.selectedPackType\");\n    // console.log(packTypeProfile);\n    const websocket = context.ws;\n    try{\n        if(websocket != null && packTypeProfile != null && packTypeProfile['data'] != null){\n            const phase1Steps = ['phase1UnloadData','phase1LoadData'];\n            const checkpointDelay = packTypeProfile['data']['checkpointDelay'];\n            switch(type){\n                default:\n                    //Soft Reset\n                    console.log(\"Soft Resetting\");\n                    softResetPhaseIModule(context);\n\n                    //Start to send unique batch of commands to prior to start calibration FOR V2.0 ONLY \n                    if(context.get(\"settingsConfig.internalVersion\") === \"v2.0\"){\n                        updatePacksValidationStatusModule(context, 578);\n                        await outgoingMessageLibrary(context, \"setMode\", \"2\");\n                    }\n\n                    //Stopwatch: fresh per Phase I run — clear any values left from a prior attempt.\n                    context.set('packsValidationData.p1StopwatchValues', {});\n                    for (let i=0;i<phase1Steps.length; i ++) {\n                        const stepIndexValue = phase1Steps[i]\n                        //Stopwatch: mark this step's start (measures the operator's per-step duration).\n                        const stepStartMs = Date.now();\n                        emergencyCheckOrThrow(context, \"Phase I emergency triggered.For loop, section 1\");\n                        //Prompt user based off of step label & Start to Sample\n                        if (stepIndexValue === \"phase1UnloadData\"){\n                            emergencyCheckOrThrow(context, \"Phase I emergency triggered. For loop, section 2\");\n                            //Unload Popup\n                            updatePacksValidationStatusModule(context, 562);//Require Unload I Status\n                            let popupResult = await unloadLoadPopup(context, \"unload\", PHASE_I_LOAD_UNLOAD_TIMER_SECONDS);\n                            if(!popupResult){\n                                updatePacksValidationStatusModule(context, 553);\n                                logPhaseLiveError(context, 'Phase I', 'Step 1 of 2 -- Unload (Operator Prompt)', 'Operator did not confirm the unload prompt before the 30-minute timer expired (or popup was closed/cancelled).');\n                                return;\n                            }\n\n                            //CheckPoint Delay\n                            updatePacksValidationStatusModule(context, 575);\n                            await delayTimeModule(context,checkpointDelay)\n\n                            updatePacksValidationStatusModule(context, 568);//Sampling Status\n                            emergencyCheckOrThrow(context, \"Phase I emergency triggered. For loop, section 3\");\n                            const phaseISampleResultUnload = await phaseISampleModule(context, stepIndexValue,  \"unload\");\n                            if(!phaseISampleResultUnload){\n                                updatePacksValidationStatusModule(context, 553);\n                                logPhaseLiveError(context, 'Phase I', 'Step 1 of 2 -- Unload (Sampling)', 'Sampling did not complete -- see the sampling error logged just above for the specific cause (e.g. MAX_TIMEOUT_AWAITING_SAMPLING exceeded, emergency, or websocket drop).');\n                                return;\n                            }\n\n                            //Verify Coils within range\n                            updatePacksValidationStatusModule(context, 575);\n                            const isCoilsWithinRange = verifyAcceptedRange(context, stepIndexValue);\n                            if(!isCoilsWithinRange){\n                                //Range catch = validation failed. Show \"Validation Failed\" status + a\n                                //dedicated explanation modal, then stop.\n                                updatePacksValidationStatusModule(context, 580);\n                                buildValidationFailedBoard(context);\n                                return;\n                            }\n                            await tickProgressionBreadcrumb(context, stepIndexValue);\n                        }\n                        else if (stepIndexValue === \"phase1LoadData\"){\n                            emergencyCheckOrThrow(context, \"Phase I emergency triggered. For loop, section 4\");\n                            //Load Popup\n                            updatePacksValidationStatusModule(context, 563); //Require Load I Status\n                            let popupResult = await unloadLoadPopup(context, \"load\", PHASE_I_LOAD_UNLOAD_TIMER_SECONDS);\n                            if(!popupResult){\n                                updatePacksValidationStatusModule(context, 553);\n                                logPhaseLiveError(context, 'Phase I', 'Step 2 of 2 -- Load (Operator Prompt)', 'Operator did not confirm the load prompt before the 30-minute timer expired (or popup was closed/cancelled).');\n                                return;\n                            }\n\n                            //CheckPoint Delay\n                            updatePacksValidationStatusModule(context, 575);\n                            await delayTimeModule(context,checkpointDelay)\n\n                            updatePacksValidationStatusModule(context, 568);//Sampling Status\n                            emergencyCheckOrThrow(context, \"Phase I emergency triggered. For loop, section 5\");\n                            const phaseISampleResultUnload = await phaseISampleModule(context, stepIndexValue,  \"load\");\n                            if(!phaseISampleResultUnload){\n                                updatePacksValidationStatusModule(context, 553);\n                                logPhaseLiveError(context, 'Phase I', 'Step 2 of 2 -- Load (Sampling)', 'Sampling did not complete -- see the sampling error logged just above for the specific cause (e.g. MAX_TIMEOUT_AWAITING_SAMPLING exceeded, emergency, or websocket drop).');\n                                return;\n                            }\n\n                            //Verify Coils within range\n                            updatePacksValidationStatusModule(context, 575);\n                            const isCoilsWithinRange = verifyAcceptedRange(context, stepIndexValue);\n                            if(!isCoilsWithinRange){\n                                //Range catch = validation failed. Show \"Validation Failed\" status + a\n                                //dedicated explanation modal, then stop.\n                                updatePacksValidationStatusModule(context, 580);\n                                buildValidationFailedBoard(context);\n                                return;\n                            }\n                            await tickProgressionBreadcrumb(context, stepIndexValue);\n                        }\n                        //Stopwatch: step completed successfully (failures return before here) — record\n                        //its duration in seconds into p1StopwatchValues under p1s<step#>Stopwatch.\n                        const p1StepStopwatches = context.get('packsValidationData.p1StopwatchValues') || {};\n                        p1StepStopwatches[`p1s${i + 1}Stopwatch`] = Math.round((Date.now() - stepStartMs) / 1000);\n                        context.set('packsValidationData.p1StopwatchValues', p1StepStopwatches);\n                        emergencyCheckOrThrow(context, \"Phase I emergency triggered. For loop, section 6\");\n                    }\n                    console.log(context.get(\"packsValidationData\")[\"phase1UnloadData\"]);\n                    emergencyCheckOrThrow(context, \"Phase I emergency triggered. For loop, section 7\");\n\n                    //Post Phase I\n                    postPhaseProceduralModule(context, 'phaseI');\n                    break;\n            }\n        }else{\n            const missing = [];\n            if(websocket == null) missing.push('websocket (rig not connected)');\n            if(packTypeProfile == null || packTypeProfile['data'] == null) missing.push('pack type profile (Step 1 selection)');\n            logPhaseLiveError(context, 'Phase I', 'Pre-check', `Cannot start -- missing: ${missing.join(', ') || 'unknown precondition'}.`);\n            showPopup(['Missing pack profile!'], 'warning', 2);\n        }\n    }catch(err){\n        const stage = context.get('packValidationIsSamplingData.currentStage');\n        const stepLabel = stage && stage.stepIndexValue\n            ? `${stage.stepIndexValue === 'phase1UnloadData' ? 'Step 1 of 2 -- Unload' : 'Step 2 of 2 -- Load'} (${stage.stepUnloadOrLoad || '?'})`\n            : 'Aborted';\n        if (err.name === \"AbortError\") {\n            updatePacksValidationStatusModule(context, 553);\n            logPhaseLiveError(context, 'Phase I', stepLabel, `Operator emergency / abort: ${err.message}`);\n            showPopup([`Error in getPacksValidationPhaseISchematics: ${err.message}`], 'error', 15);\n        } else {\n            logPhaseLiveError(context, 'Phase I', stepLabel, `Unexpected error: ${err.message}`);\n            showPopup([`Error in getPacksValidationPhaseISchematics: ${err.message}`], 'error', 15);\n        }\n        return;\n    }\n}\nexport async function getPacksValidationPhaseIISchematics(context, type){\n    const packTypeProfile = context.get(\"manufacturedPackType\");\n    const websocket = context.ws;\n    try{\n        if(websocket != null && packTypeProfile != null && packTypeProfile['data'] != null){\n            const phase2Steps = ['phase2UnloadData1','phase2LoadData1','phase2LoadData2','phase2UnloadData2'];\n            const checkpointDelay = packTypeProfile['data']['packTypeObj']['checkpointDelay'];\n            console.log(`checkpoint delay:${checkpointDelay}`)\n            console.log(packTypeProfile)\n            switch(type){\n                default:\n                    //Soft Reset\n                    console.log(\"Soft Resetting\");\n                    softResetPhaseIIModule(context);\n\n                    //Stopwatch: fresh per Phase II run — clear any values left from a prior attempt.\n                    context.set('packsValidationData.p2StopwatchValues', {});\n                    for (let i=0;i<phase2Steps.length; i ++) {\n                        const stepIndexValue = phase2Steps[i]\n                        const stepIndexValueID = stepIndexValue.slice(-1)\n                        //Stopwatch: mark this step's start (measures the operator's per-step duration).\n                        const stepStartMs = Date.now();\n                        emergencyCheckOrThrow(context, \"Phase II emergency triggered.For loop, section 1\");\n\n                        //Prompt user based off of step label & Start to Sample\n                        if ((stepIndexValue === \"phase2UnloadData1\")){\n                            //Start to send unique batch of commands to prior to start calibration FOR V2.0 ONLY\n                            if(context.get(\"settingsConfig.internalVersion\") === \"v2.0\"){\n                                updatePacksValidationStatusModule(context, 579);\n                                await outgoingMessageLibrary(context, \"setMode\", \"2\");\n                            }\n\n                            emergencyCheckOrThrow(context, \"Phase II emergency triggered. For loop, section 2\");\n                            //Unload Popup\n                            updatePacksValidationStatusModule(context, 564);//Require Phase II Unload I Status\n                            let popupResult = await unloadLoadPopup(context, \"unload 1\", PHASE_II_LOAD_UNLOAD_TIMER_SECONDS);\n                            if(!popupResult){\n                                updatePacksValidationStatusModule(context, 554);\n                                logPhaseLiveError(context, 'Phase II', 'Step 1 of 4 -- Unload 1 (Operator Prompt)', 'Operator did not confirm the unload-1 prompt before the 30-minute timer expired (or popup was closed/cancelled).');\n                                return;\n                            }\n\n                            //CheckPoint Delay\n                            updatePacksValidationStatusModule(context, 575);\n                            await delayTimeModule(context,checkpointDelay)\n\n                            updatePacksValidationStatusModule(context, 569);//Phase II Sampling Status\n                            emergencyCheckOrThrow(context, \"Phase II emergency triggered. For loop, section 3\");\n                            const phaseIISampleResultUnload = await phaseIISampleModule(context, stepIndexValue, `unload${stepIndexValueID}`);\n                            if(!phaseIISampleResultUnload){\n                                updatePacksValidationStatusModule(context, 554);\n                                logPhaseLiveError(context, 'Phase II', 'Step 1 of 4 -- Unload 1 (Sampling)', 'Sampling did not complete -- see the sampling error logged just above for the specific cause (e.g. MAX_TIMEOUT_AWAITING_SAMPLING exceeded, emergency, or websocket drop).');\n                                return;\n                            }\n\n                            //Verify Coils within range\n                            updatePacksValidationStatusModule(context, 575);\n                            const isCoilsWithinRange = verifyAcceptedRange(context, stepIndexValue);\n                            if(!isCoilsWithinRange){\n                                //Range catch = validation failed. Show \"Validation Failed\" status + a\n                                //dedicated explanation modal, then stop. (Was wrongly running the Phase I\n                                //save/conclusion via postPhaseProceduralModule('phaseI').)\n                                updatePacksValidationStatusModule(context, 580);\n                                buildValidationFailedBoard(context);\n                                return;\n                            }\n                            await tickProgressionBreadcrumb(context, stepIndexValue);\n                        }else if ((stepIndexValue === \"phase2LoadData1\")){\n                            emergencyCheckOrThrow(context, \"Phase II emergency triggered. For loop, section 4\");\n                            //Load Popup\n                            updatePacksValidationStatusModule(context, 565);//Require Phase II Load I Status\n                            let popupResult = await unloadLoadPopup(context, \"load 1\", PHASE_II_LOAD_UNLOAD_TIMER_SECONDS);\n                            if(!popupResult){\n                                updatePacksValidationStatusModule(context, 554);\n                                logPhaseLiveError(context, 'Phase II', 'Step 2 of 4 -- Load 1 (Operator Prompt)', 'Operator did not confirm the load-1 prompt before the 30-minute timer expired (or popup was closed/cancelled).');\n                                return;\n                            }\n\n                            //CheckPoint Delay\n                            updatePacksValidationStatusModule(context, 575);\n                            await delayTimeModule(context,checkpointDelay)\n\n                            updatePacksValidationStatusModule(context, 569);//Sampling Status\n                            emergencyCheckOrThrow(context, \"Phase II emergency triggered. For loop, section 5\");\n                            const phaseISampleResultUnload = await phaseIISampleModule(context, stepIndexValue, `load${stepIndexValueID}`);\n                            if(!phaseISampleResultUnload){\n                                updatePacksValidationStatusModule(context, 554);\n                                logPhaseLiveError(context, 'Phase II', 'Step 2 of 4 -- Load 1 (Sampling)', 'Sampling did not complete -- see the sampling error logged just above for the specific cause (e.g. MAX_TIMEOUT_AWAITING_SAMPLING exceeded, emergency, or websocket drop).');\n                                return;\n                            }\n\n                            //Verify Coils within range\n                            updatePacksValidationStatusModule(context, 575);\n                            const isCoilsWithinRange = verifyAcceptedRange(context, stepIndexValue);\n                            if(!isCoilsWithinRange){\n                                //Range catch = validation failed. Show \"Validation Failed\" status + a\n                                //dedicated explanation modal, then stop. (Was wrongly running the Phase I\n                                //save/conclusion via postPhaseProceduralModule('phaseI').)\n                                updatePacksValidationStatusModule(context, 580);\n                                buildValidationFailedBoard(context);\n                                return;\n                            }\n                            await tickProgressionBreadcrumb(context, stepIndexValue);\n                        }else if ((stepIndexValue === \"phase2LoadData2\")){\n                            emergencyCheckOrThrow(context, \"Phase II emergency triggered. For loop, section 4\");\n\n                            //  clear & rebuild anchor live view\n                            const manufacturedPackTypeData = packTypeProfile['data'];\n                            const channels = manufacturedPackTypeData['packTypeObj']['coilsProfile']['totalCoilsCount'] + 1;\n                            destroyAndClearAnchorLiveView(context);\n                            initializeAndCreateAnchorLiveView(context, channels);\n\n                            //Start to send unique batch of commands to prior to start calibration FOR V2.0 ONLY\n                            if(context.get(\"settingsConfig.internalVersion\") === \"v2.0\"){\n                                updatePacksValidationStatusModule(context, 579);\n                                await outgoingMessageLibrary(context, \"setMode\", \"1\");\n                            }else{\n                                // FOR V1.0 Show the reflash popup\n                                //Special Case. Transition Environ because the sensorData is different after the user flashed the boards\n                                updatePacksValidationStatusModule(context, 574); //Reflash! Status\n                                let reflashResult = await reflashPopup(context);\n                                if(!reflashResult){\n                                    updatePacksValidationStatusModule(context, 554);\n                                    logPhaseLiveError(context, 'Phase II', 'Step 3 of 4 -- Load 2 (Reflash Boards)', 'Operator did not confirm the reflash-boards popup (v1.0 requires flashed boards before Load 2 sampling).');\n                                    return;\n                                }\n                            }\n\n                            //Load Popup\n                            updatePacksValidationStatusModule(context, 566);//Require Phase II Load II Status\n                            let popupResult = await unloadLoadPopup(context, \"load 2\", PHASE_II_LOAD_UNLOAD_TIMER_SECONDS);\n                            if(!popupResult){\n                                updatePacksValidationStatusModule(context, 554);\n                                logPhaseLiveError(context, 'Phase II', 'Step 3 of 4 -- Load 2 (Operator Prompt)', 'Operator did not confirm the load-2 prompt before the 30-minute timer expired (or popup was closed/cancelled).');\n                                return;\n                            }\n\n                            //CheckPoint Delay\n                            updatePacksValidationStatusModule(context, 575);\n                            await delayTimeModule(context,checkpointDelay)\n\n                            updatePacksValidationStatusModule(context, 569);//Sampling Status\n                            emergencyCheckOrThrow(context, \"Phase II emergency triggered. For loop, section 5\");\n                            const phaseISampleResultUnload = await phaseIISampleModule(context, stepIndexValue, `load${stepIndexValueID}`);\n                            if(!phaseISampleResultUnload){\n                                updatePacksValidationStatusModule(context, 554);\n                                logPhaseLiveError(context, 'Phase II', 'Step 3 of 4 -- Load 2 (Sampling)', 'Sampling did not complete -- see the sampling error logged just above for the specific cause (e.g. MAX_TIMEOUT_AWAITING_SAMPLING exceeded, emergency, or websocket drop).');\n                                return;\n                            }\n\n                            //Verify Coils within range\n                            updatePacksValidationStatusModule(context, 575);\n                            const isCoilsWithinRange = verifyAcceptedRange(context, stepIndexValue);\n                            if(!isCoilsWithinRange){\n                                //Range catch = validation failed. Show \"Validation Failed\" status + a\n                                //dedicated explanation modal, then stop. (Was wrongly running the Phase I\n                                //save/conclusion via postPhaseProceduralModule('phaseI').)\n                                updatePacksValidationStatusModule(context, 580);\n                                buildValidationFailedBoard(context);\n                                return;\n                            }\n                            await tickProgressionBreadcrumb(context, stepIndexValue);\n\n                        }else if ((stepIndexValue === \"phase2UnloadData2\")){\n                            emergencyCheckOrThrow(context, \"Phase II emergency triggered. For loop, section 2\");\n                            //Unload Popup\n                            updatePacksValidationStatusModule(context, 567);//Require Phase II Unload II Status\n                            let popupResult = await unloadLoadPopup(context, \"unload 2\", PHASE_II_LOAD_UNLOAD_TIMER_SECONDS);\n                            if(!popupResult){\n                                updatePacksValidationStatusModule(context, 554);\n                                logPhaseLiveError(context, 'Phase II', 'Step 4 of 4 -- Unload 2 (Operator Prompt)', 'Operator did not confirm the unload-2 prompt before the 30-minute timer expired (or popup was closed/cancelled).');\n                                return;\n                            }\n\n                            //CheckPoint Delay\n                            updatePacksValidationStatusModule(context, 575);\n                            await delayTimeModule(context,checkpointDelay)\n\n                            updatePacksValidationStatusModule(context, 569);//Sampling Status\n                            emergencyCheckOrThrow(context, \"Phase II emergency triggered. For loop, section 3\");\n                            const phaseISampleResultUnload = await phaseIISampleModule(context, stepIndexValue, `unload${stepIndexValueID}`);\n                            if(!phaseISampleResultUnload){\n                                updatePacksValidationStatusModule(context, 554);\n                                logPhaseLiveError(context, 'Phase II', 'Step 4 of 4 -- Unload 2 (Sampling)', 'Sampling did not complete -- see the sampling error logged just above for the specific cause (e.g. MAX_TIMEOUT_AWAITING_SAMPLING exceeded, emergency, or websocket drop).');\n                                return;\n                            }\n\n                            //Verify Coils within range\n                            updatePacksValidationStatusModule(context, 576);\n                            const isCoilsWithinRange = verifyAcceptedRange(context, stepIndexValue);\n                            if(!isCoilsWithinRange){\n                                //Range catch = validation failed. Show \"Validation Failed\" status + a\n                                //dedicated explanation modal, then stop.\n                                updatePacksValidationStatusModule(context, 580);\n                                buildValidationFailedBoard(context);\n                                return;\n                            }\n                            await tickProgressionBreadcrumb(context, stepIndexValue);\n                        }\n                        //Stopwatch: step completed successfully (failures return before here) — record\n                        //its duration in seconds into p2StopwatchValues under p2s<step#>Stopwatch.\n                        const p2StepStopwatches = context.get('packsValidationData.p2StopwatchValues') || {};\n                        p2StepStopwatches[`p2s${i + 1}Stopwatch`] = Math.round((Date.now() - stepStartMs) / 1000);\n                        context.set('packsValidationData.p2StopwatchValues', p2StepStopwatches);\n                        emergencyCheckOrThrow(context, \"Phase II emergency triggered. For loop, section 6\");\n                    }\n                    // console.log(context.get(\"packsValidationData\")[\"phase1UnloadData\"]);\n                    emergencyCheckOrThrow(context, \"Phase II emergency triggered. For loop, section 7\");\n\n                    //Post Phase II\n                    postPhaseProceduralModule(context, 'phaseII');\n                    break;\n            }\n        }else{\n            const missing = [];\n            if(websocket == null) missing.push('websocket (rig not connected)');\n            if(packTypeProfile == null || packTypeProfile['data'] == null) missing.push('manufactured pack profile (Step 2 selection -- a Phase I-complete pack)');\n            logPhaseLiveError(context, 'Phase II', 'Pre-check', `Cannot start -- missing: ${missing.join(', ') || 'unknown precondition'}.`);\n            showPopup(['Missing pack profile!'], 'warning', 2);\n        }\n    }catch(err){\n        const stage = context.get('packValidationIsSamplingData.currentStage');\n        const stepLabel = stage && stage.stepIndexValue\n            ? (stage.stepIndexValue === 'phase2UnloadData1' ? 'Step 1 of 4 -- Unload 1'\n                : stage.stepIndexValue === 'phase2LoadData1' ? 'Step 2 of 4 -- Load 1'\n                : stage.stepIndexValue === 'phase2LoadData2' ? 'Step 3 of 4 -- Load 2'\n                : stage.stepIndexValue === 'phase2UnloadData2' ? 'Step 4 of 4 -- Unload 2'\n                : stage.stepIndexValue) + ` (${stage.stepUnloadOrLoad || '?'})`\n            : 'Aborted';\n        if (err.name === \"AbortError\") {\n            updatePacksValidationStatusModule(context, 553);\n            logPhaseLiveError(context, 'Phase II', stepLabel, `Operator emergency / abort: ${err.message}`);\n            showPopup([`Error in getPacksValidationPhaseIISchematics: ${err.message}`], 'error', 15);\n        } else {\n            logPhaseLiveError(context, 'Phase II', stepLabel, `Unexpected error: ${err.message}`);\n            showPopup([`Error in getPacksValidationPhaseIISchematics: ${err.message}`], 'error', 15);\n        }\n        return;\n    }\n}\n//Phase Modules\nfunction verifyAcceptedRange(context, stepIndexValue){\n    try{\n        let data = null;\n    \n        if(context.get('settingsConfig.phaseENV.phase') == 1){\n            const selectedPackType = context.get('userInputtedData.selectedPackType');\n            data = selectedPackType['data'];\n        }else{\n            const manufacturedPackType = context.get('manufacturedPackType');\n            data = manufacturedPackType['data']['packTypeObj'];\n        }\n\n        const phase1UnloadDataArray = context.get('packsValidationData.phase1UnloadData')[0];\n        const phase1LoadDataArray = context.get('packsValidationData.phase1LoadData')[0];\n        const phase2UnloadData1Array = context.get('packsValidationData.phase2UnloadData1')[0];\n        const phase2LoadData1Array = context.get('packsValidationData.phase2LoadData1')[0];\n        const phase2UnloadData2Array = context.get('packsValidationData.phase2UnloadData2')[0];\n        const phase2LoadData2Array = context.get('packsValidationData.phase2LoadData2')[0];\n\n        const activeCoilsCount = data['coilsProfile']['activeCoilsCount']\n        const totalCoilsCount = data['coilsProfile']['totalCoilsCount']\n        const referenceUnfilledCoilsPositions = data['coilsProfile']['referenceUnfilledCoilsPositions']\n        const generalCoilsPositions = data['coilsProfile']['generalCoilsPositions']\n\n\n        let referenceUnfilledCoilsIndices = [];\n        let generalCoilsIndices = [];\n\n\n        referenceUnfilledCoilsPositions.forEach((value, index)=>{\n            if((value - 1) >= 0){\n                referenceUnfilledCoilsIndices.push(value-1);\n            }\n        })\n        generalCoilsPositions.forEach((value, index)=>{\n            if((value - 1) >= 0){\n                generalCoilsIndices.push(value-1);\n            }\n        })\n\n        const phase1UnloadMaxRange = data['phase1UnloadMaxRange'];\n        const phase1UnloadMinRange = data['phase1UnloadMinRange'];\n        const phase1LoadMaxRange = data['phase1LoadMaxRange']; \n        const phase1LoadMinRange = data['phase1LoadMinRange'];\n        const phase2LoadMaxRange2 = data['phase2LoadMaxRange2'];\n        const phase2LoadMinRange2 = data['phase2LoadMinRange2'];\n        const phase2UnloadMaxRange2 = data['phase2UnloadMaxRange2'];\n        const phase2UnloadMinRange2 = data['phase2UnloadMinRange2'];\n        console.log(`stepIndexValue:${stepIndexValue}, \n            phase1Unload Range:[${phase1UnloadMinRange},${phase1UnloadMaxRange}],\n            phase1Load Range:[${phase1LoadMinRange},${phase1LoadMaxRange}],\n            phase2Unload2 Range:[${phase2UnloadMinRange2},${phase2UnloadMaxRange2}],\n            phase2Load2 Range:[${phase2LoadMinRange2},${phase2LoadMaxRange2}]\n            `)\n        console.log(\"in verifyAcceptedRange\");\n        console.log(\"packsValidationData\");\n        console.log(context.get('packsValidationData'));\n        console.log(\"selectedPackType\");\n        console.log(data);\n\n        switch(stepIndexValue){\n            case \"phase1UnloadData\":\n                //Do include the unfilled coil\n                const indices1 = [...generalCoilsIndices, ...referenceUnfilledCoilsIndices];\n                let isValid1 = true;\n                const failed1 = [];\n                indices1.forEach((coilIndex, i)=>{\n                    const reading = phase1UnloadDataArray[coilIndex];\n                    if(!(phase1UnloadMinRange <= reading && reading <= phase1UnloadMaxRange)){\n                        isValid1 = false;\n                        failed1.push(`coil#${coilIndex + 1}=${reading}`);\n                    }\n                })\n                console.log(`${stepIndexValue} is in range ? ${isValid1}`)\n                if(!isValid1){\n                    const reason1 = `${failed1.length} coil(s) outside accepted unload range [${phase1UnloadMinRange}, ${phase1UnloadMaxRange}]: ${failed1.join(', ')}.`;\n                    context._lastValidationFailReason = { phase: 'Phase I', step: 'Step 1 of 2 -- Unload', reason: reason1 };\n                    logPhaseLiveError(context, 'Phase I', 'Step 1 of 2 -- Unload (Range Check)', reason1);\n                }\n                return isValid1;\n            case \"phase1LoadData\":\n                //Do not include the unfilled coil\n                const indices2 = [...generalCoilsIndices];\n                let isValid2 = true;\n                const failed2 = [];\n                indices2.forEach((coilIndex, i)=>{\n                    const reading = phase1LoadDataArray[coilIndex];\n                    if(!(phase1LoadMinRange <= reading && reading <= phase1LoadMaxRange)){\n                        isValid2 = false;\n                        failed2.push(`coil#${coilIndex + 1}=${reading}`);\n                    }\n                })\n                console.log(`${stepIndexValue} is in range ? ${isValid2}`)\n                if(!isValid2){\n                    const reason2 = `${failed2.length} coil(s) outside accepted load range [${phase1LoadMinRange}, ${phase1LoadMaxRange}]: ${failed2.join(', ')}.`;\n                    context._lastValidationFailReason = { phase: 'Phase I', step: 'Step 2 of 2 -- Load', reason: reason2 };\n                    logPhaseLiveError(context, 'Phase I', 'Step 2 of 2 -- Load (Range Check)', reason2);\n                }\n                return isValid2;\n            case \"phase2LoadData2\":\n                const failed3 = [];\n                phase2LoadData2Array.forEach((value, idx) => {\n                    if(!(phase2LoadMinRange2 <= value && value <= phase2LoadMaxRange2)){\n                        failed3.push(`ch#${idx + 1}=${value}`);\n                    }\n                });\n                const isOutOfRange3 = failed3.length > 0;\n                console.log(`${stepIndexValue} is in range ? ${!isOutOfRange3}`)\n                if(isOutOfRange3){\n                    const reason3 = `${failed3.length} channel(s) outside accepted load-2 range [${phase2LoadMinRange2}, ${phase2LoadMaxRange2}]: ${failed3.join(', ')}.`;\n                    context._lastValidationFailReason = { phase: 'Phase II', step: 'Step 3 of 4 -- Load 2', reason: reason3 };\n                    logPhaseLiveError(context, 'Phase II', 'Step 3 of 4 -- Load 2 (Range Check)', reason3);\n                }\n                return !isOutOfRange3;\n            case \"phase2UnloadData2\":\n                const failed4 = [];\n                phase2UnloadData2Array.forEach((value, idx) => {\n                    if(!(phase2UnloadMinRange2 <= value && value <= phase2UnloadMaxRange2)){\n                        failed4.push(`ch#${idx + 1}=${value}`);\n                    }\n                });\n                const isOutOfRange4 = failed4.length > 0;\n                console.log(`${stepIndexValue} is in range ? ${!isOutOfRange4}`)\n                if(isOutOfRange4){\n                    const reason4 = `${failed4.length} channel(s) outside accepted unload-2 range [${phase2UnloadMinRange2}, ${phase2UnloadMaxRange2}]: ${failed4.join(', ')}.`;\n                    context._lastValidationFailReason = { phase: 'Phase II', step: 'Step 4 of 4 -- Unload 2', reason: reason4 };\n                    logPhaseLiveError(context, 'Phase II', 'Step 4 of 4 -- Unload 2 (Range Check)', reason4);\n                }\n                return !isOutOfRange4;\n            case \"phase2UnloadData1\":\n                //Phase II Unload 1 has no dedicated range field — reuse the Phase I UNLOAD range (it's the\n                //same physical unload state). General coils only, matching checkFinalValidity's requireTrim=true.\n                let isValid5 = true;\n                const failed5 = [];\n                generalCoilsIndices.forEach((coilIndex)=>{\n                    const reading = phase2UnloadData1Array[coilIndex];\n                    if(!(phase1UnloadMinRange <= reading && reading <= phase1UnloadMaxRange)){\n                        isValid5 = false;\n                        failed5.push(`coil#${coilIndex + 1}=${reading}`);\n                    }\n                });\n                console.log(`${stepIndexValue} is in range ? ${isValid5}`)\n                if(!isValid5){\n                    const reason5 = `${failed5.length} coil(s) outside accepted unload range [${phase1UnloadMinRange}, ${phase1UnloadMaxRange}]: ${failed5.join(', ')}.`;\n                    context._lastValidationFailReason = { phase: 'Phase II', step: 'Step 1 of 4 -- Unload 1', reason: reason5 };\n                    logPhaseLiveError(context, 'Phase II', 'Step 1 of 4 -- Unload 1 (Range Check)', reason5);\n                }\n                return isValid5;\n            case \"phase2LoadData1\":\n                //Phase II Load 1 — reuse the Phase I LOAD range. General coils only.\n                let isValid6 = true;\n                const failed6 = [];\n                generalCoilsIndices.forEach((coilIndex)=>{\n                    const reading = phase2LoadData1Array[coilIndex];\n                    if(!(phase1LoadMinRange <= reading && reading <= phase1LoadMaxRange)){\n                        isValid6 = false;\n                        failed6.push(`coil#${coilIndex + 1}=${reading}`);\n                    }\n                });\n                console.log(`${stepIndexValue} is in range ? ${isValid6}`)\n                if(!isValid6){\n                    const reason6 = `${failed6.length} coil(s) outside accepted load range [${phase1LoadMinRange}, ${phase1LoadMaxRange}]: ${failed6.join(', ')}.`;\n                    context._lastValidationFailReason = { phase: 'Phase II', step: 'Step 2 of 4 -- Load 1', reason: reason6 };\n                    logPhaseLiveError(context, 'Phase II', 'Step 2 of 4 -- Load 1 (Range Check)', reason6);\n                }\n                return isValid6;\n            default:\n                return true;\n        }\n\n    }catch(err){\n        console.log(`Error in verifyAcceptedRange: ${err.message}`);\n        const phaseLabel = stepIndexValue && stepIndexValue.startsWith('phase1') ? 'Phase I' : 'Phase II';\n        logPhaseLiveError(context, phaseLabel, `Range Check (${stepIndexValue})`, `Range verification threw an exception: ${err.message}. Likely cause: missing pack-type config field (min/max range, coil positions, or coilsProfile).`);\n        return;\n    }\n}\nasync function postPhaseProceduralModule(context, phase){\n    try{\n        switch(phase){\n            case \"phaseI\":                            \n                updatePacksValidationStatusModule(context, 572); //Phase Load I Complete Status\n                console.log('Final Data')\n                console.log('phase1UnloadData')\n                console.log(context.get('packsValidationData.phase1UnloadData').toString())\n                console.log('phase1LoadData')\n                console.log(context.get('packsValidationData.phase1LoadData').toString())\n                //ADDITIONAL CALC & DATA MODIFICATIONS\n                checkFinalValidity(context, 'phaseI');\n                const response = await saveAndSendPhaseIData(context);\n                if(response == null){\n                    showPopup(['Error in saveAndSendPhaseIData'], 'error', 20);\n                    break;\n                }\n                const newPackID = response['packID'] || response['data']['new_pack_id'];\n                packValidationConclusion(context, phase, newPackID)\n                //RESET and CLEAR\n                context.set(\"packValidationIsSamplingData.isPhaseISampling\",false);\n                context.set(\"packValidationIsSamplingData.currentStage\",null);\n                // outgoingMessageLibrary(context, rigResetCMD, '');\n                updatePacksValidationStatusModule(context, 551); //Idle \n                showPopup(['Phase I is complete and tidied up.'], 'success', 20);\n                break;\n    \n            case \"phaseII\":\n                updatePacksValidationStatusModule(context, 573); //Phase Load II Complete Status\n                console.log('Final Data')\n                console.log('phase2UnloadData1')\n                console.log(context.get('packsValidationData.phase2UnloadData1').toString())\n                console.log('phase2LoadData1')\n                console.log(context.get('packsValidationData.phase2LoadData1').toString())\n                console.log('phase2UnloadData2')\n                console.log(context.get('packsValidationData.phase2UnloadData2').toString())\n                console.log('phase2LoadData2')\n                console.log(context.get('packsValidationData.phase2LoadData2').toString())\n                //ADDITIONAL CALC & DATA MODIFICATIONS\n                checkFinalValidity(context, 'phaseII');\n                const response2 = await saveAndPatchPhaseIIData(context);\n                if(response2 == null){\n                    showPopup(['Error in saveAndSendPhaseIData'], 'error', 20);\n                    break;\n                }\n                const newPackID2 = context.get('manufacturedPackType.data.packID');\n                packValidationConclusion(context, phase, newPackID2)\n                //RESET and CLEAR\n                context.set(\"packValidationIsSamplingData.isPhaseIISampling\",false); \n                context.set(\"packValidationIsSamplingData.currentStage\",null);\n                // outgoingMessageLibrary(context, rigResetCMD, '');\n                updatePacksValidationStatusModule(context, 551); //Idle \n                showPopup(['Phase 2 is complete is tidied up.'], 'success', 20);\n                break;\n        }\n\n    }catch(err){\n        console.log(`Error in postPhaseProceduralModule: ${err.message}`);\n        return;\n    }\n} \n// Maps the data column being filled to the BE's progression stage key.\n// Phase I has 2 steps, Phase II has 4. Phase II keys carry a `s<N>_` step number\n// that reflects operator execution order (step 1 = the first thing done), so the\n// BE log reads chronologically rather than via the old scrambled stage numbering.\nconst DATA_KEY_TO_PROGRESSION_STAGE = {\n    phase1UnloadData:  'p1_unloadData',\n    phase1LoadData:    'p1_loadData',\n    phase2UnloadData1: 'p2_s1_unloadData',\n    phase2LoadData1:   'p2_s2_loadData',\n    phase2LoadData2:   'p2_s3_loadData',\n    phase2UnloadData2: 'p2_s4_unloadData',\n};\n\n/**\n * Silently flip a progression breadcrumb on the BE so a crashed/refreshed\n * session can resume from the last completed stage. The PATCH body MUST\n * contain only the progression key — bundling anything else routes through\n * the Phase II metadata gate and 403s for Phase-I-only users.\n *\n * Never sends false: a redo that fails creates a new session row, not a\n * downgrade of an existing breadcrumb (per Steven's call).\n */\nexport async function tickProgressionBreadcrumb(context, dataKey){\n    const stageKey = DATA_KEY_TO_PROGRESSION_STAGE[dataKey];\n    if(!stageKey){\n        console.warn(`tickProgressionBreadcrumb: unknown dataKey ${dataKey}`);\n        return;\n    }\n    const isPhase1 = stageKey.startsWith('phase1_');\n    const validationID = isPhase1\n        ? context.get('phaseISessionPackProfile.new_validation_id')\n        : context.get('manufacturedPackType.data.validationID');\n    if(validationID == null){\n        console.warn(`tickProgressionBreadcrumb: no validationID for ${stageKey}`);\n        return;\n    }\n    await sendPATCHRequest(`validation_pack_profile/${validationID}`, {\n        progression: { [stageKey]: true },\n    });\n}\n\n/**\n * Phase I session start. Creates the pack profile row up front (fresh Phase I\n * or repair) and stashes the response in `phaseISessionPackProfile` so the\n * per-stage breadcrumb PATCHes and the final data PATCH can target the row\n * that already exists. Returns the BE response on success, null on failure.\n */\nexport async function createPhaseIPackProfile(context){\n    const selectedRigProfile = context.get('userInputtedData.selectedRigProfile');\n    const selectedPackType = context.get('userInputtedData.selectedPackType');\n    const completedPackProfile = context.get('completedPackProfile');\n    const isRepairing = context.get('settingsConfig.phaseENV.isRepairing');\n\n    if(selectedRigProfile == null) return null;\n    if(!isRepairing && selectedPackType == null) return null;\n    if(isRepairing && completedPackProfile == null) return null;\n\n    const requestData = isRepairing ? buildAndGetDataFormat5(context) : buildAndGetDataFormat1(context);\n    const response = await sendPOSTRequest2(\"validation_pack_profile\", requestData);\n    if(response == null){\n        showPopup([\"Pack Profile Creation Failed!\"], 'error', 3);\n        return null;\n    }\n    context.set(\"phaseISessionPackProfile\", response['data']);\n    return response;\n}\n\nasync function saveAndSendPhaseIData(context){\n    const phaseISessionPackProfile = context.get('phaseISessionPackProfile');\n    if(phaseISessionPackProfile == null){\n        showPopup([\"No active Phase I session — pack profile was never created.\"], 'error', 3);\n        return null;\n    }\n    const validationID = phaseISessionPackProfile['new_validation_id'];\n    const requestData = buildAndGetDataFormat4(context);\n    const patchResult = await sendPATCHRequest(`validation_pack_data/${validationID}`, requestData, true);\n    if(patchResult && patchResult.ok){\n        showPopup([\"Pack Profile Updated Successfully!\"], 'success', 3);\n        // BE echoes the authoritative canonical packID on this PATCH (safety net per the BE\n        // pack-ID contract), now nested under data:{} → patchResult.data.data.pack_id. Prefer it;\n        // fall back to the POST-session new_pack_id.\n        const authoritativePackID = (patchResult.data && patchResult.data.data && patchResult.data.data.pack_id) || phaseISessionPackProfile['new_pack_id'] || null;\n        return { data: phaseISessionPackProfile, packID: authoritativePackID };\n    }\n    return null;\n}\nasync function saveAndPatchPhaseIIData(context){\n    const selectedRigProfile = context.get('userInputtedData.selectedRigProfile');\n    const manufacturedPackType = context.get('manufacturedPackType');\n    if(selectedRigProfile != null && manufacturedPackType != null){\n        //First Update Pack Profile for Phase II related columns\n        const requestData = buildAndGetDataFormat3(context); \n        const response = await sendPATCHRequest(`validation_pack_profile/${manufacturedPackType['data']['validationID']}`, requestData)\n        //send request\n        if (response != null){\n            const requestData2 = buildAndGetDataFormat2(context); \n            const response2 = await sendPATCHRequest(`validation_pack_data/${manufacturedPackType['data']['validationID']}`, requestData2);\n            if (response2 != null){\n                showPopup([\"Pack Profile Created Successfully!\"],'success',3);\n                // window.location.reload();\n                return response;\n            }\n        }else{\n            showPopup([\"Pack Profile Creation Failed!\"],'error', 3);\n            return null;\n        };\n    \n    }\n\n}\n// NOTE (permissions scope): Overrule is intentionally OUTSIDE the standard Validate/phase permission\n// gate (validation_pack_validate phaseI/phaseII). It is its own dedicated, separately-permissioned\n// action — it re-authenticates the overruling employee against /api/token/ (username + password) and\n// hits its own endpoint (validation_pack_request_overrule). Not all users who can run Phase II can\n// overrule. So do NOT fold overrule into the validateAllForms permission check or the phase capability\n// probe; its authorization is enforced here by the credential check + the BE's overrule endpoint.\nasync function overrulePhaseIIConclusion(context, username, password){\n    const selectedRigProfile = context.get('userInputtedData.selectedRigProfile');\n    const manufacturedPackType = context.get('manufacturedPackType');\n    if(selectedRigProfile != null && manufacturedPackType != null){\n        //First get unique token to verify overrule employee\n        //use the token + username/pwd creds + unique overrule endpoint \n        //if overrule is successful, the backend will update the pack profile overrudeEmployee column + send 200 \n        //if overrule has failed, return 400\n\n        try {\n            let packProfileData = manufacturedPackType['data'];\n            let url = getApiBaseUrl()  + \"/api/token/\";\n            const credentials = btoa(`${username}:${password}`);\n\n            const response1 = await fetch(url, {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application/json',\n                Authorization: `Basic ${credentials}`  \n            },\n            });\n            if (response1.status == 400) {\n                console.log(response1)\n                showPopup([`Overrule Attempt with: ${username} Step 1}`,`FAILED`], 'error', 5);\n            }\n            else if ((response1['status'] == 200)) {\n                try {\n                    const data = {\n                        'phase2OverruleEmployee':username,\n                        'phase2OverruleDate':getCurrentDateTime(),\n                    }\n                    const response1Data = await response1.json(); //contains access and reload token\n                    let url = getApiBaseUrl() + `/validation_pack_request_overrule/${packProfileData['validationID']}`;\n                    const response2 = await fetch(url, {\n                    method: 'PATCH',\n                    headers: {\n                        'Content-Type': 'application/json',\n                        Authorization: 'Bearer ' + response1Data['access']  \n                    },\n                    body: JSON.stringify(data),\n                    });\n                    if (response2.status == 400) {\n                        console.log(response2)\n                        showPopup([`Overrule Attempt with: ${username} Step 2}`,`FAILED`], 'error', 5);\n                    }\n                    else if ((response2.status == 200)) {\n                        let requestData = {};\n                        requestData['phase2Memo'] = context.get(\"userInputtedData.selectedPackData.phase2Memo\");\n\n                        let url =  getApiBaseUrl() + `/validation_pack_profile/${packProfileData['validationID']}`;\n                        const response2 = await fetch(url, {\n                        method: 'PATCH',\n                        headers: {\n                            'Content-Type': 'application/json',\n                            Authorization: 'Bearer ' + response1Data['access']  \n                        },\n                        body: JSON.stringify(requestData),\n                        });\n                        if (response2.status == 400) {\n                            console.log(response2)\n                            showPopup([`Overrule Attempt with: ${username} Step 2}`,`FAILED`], 'error', 5);\n                        }\n                        else if ((response2.status == 200)) {\n                            return true; // Return true if status code is 201\n                        } \n                    } \n                    \n                } catch (error) {\n                    console.error('Error submitting data:', error);\n                }\n                \n            } \n            \n        } \n        catch (error) {\n            console.error('Error submitting data:', error);\n        }\n    }\n    return false;\n\n}\nexport function updatePacksValidationStatusModule(context, statusCode){\n    context.set(\"dashboardStatusBarData.calibration\",packStatusLibrary(statusCode));\n}\nasync function phaseISampleModule(context,stepIndexValue,stepUnloadOrLoad){\n    //Turn on Sampling\n    let stepENV = {};\n    stepENV['stepIndexValue'] = stepIndexValue;\n    stepENV['stepUnloadOrLoad'] = stepUnloadOrLoad;\n    context.set(\"packValidationIsSamplingData.isPhaseISampling\", true);\n    context.set(\"packValidationIsSamplingData.currentStage\", stepENV);\n    let timeoutCounter = 0;\n    try{\n        while (true){\n            emergencyCheckOrThrow(context,`Emergency triggered at phaseISampleModule`);\n\n            if(timeoutCounter % 20 == 0){\n                console.log(`Waiting on sampling. Waiting...${timeoutCounter}/${context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')}. `);\n            }\n            if(!context.get(\"packValidationIsSamplingData\")[\"isPhaseISampling\"]){\n                return true;\n            }else if (timeoutCounter > context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')){\n                throw new Error(\"In phaseISampleModule: Exceed MAX_TIMEOUT_AWAITING_SAMPLING, ABORTING phase I\");\n            }\n            timeoutCounter+= 1;\n            await delayTimeModule(context, 0.1);\n        }\n    }catch(err){\n        const stepLabel = stepIndexValue === 'phase1UnloadData'\n            ? `Step 1 of 2 -- Unload (Sampling)`\n            : stepIndexValue === 'phase1LoadData'\n                ? `Step 2 of 2 -- Load (Sampling)`\n                : `${stepIndexValue} (${stepUnloadOrLoad}) Sampling`;\n        if (err.name === \"AbortError\") {\n            logPhaseLiveError(context, 'Phase I', stepLabel, `Operator emergency / abort during sampling: ${err.message}`);\n            showPopup([`${err.message}`], 'error', 15);\n        } else {\n            updatePacksValidationStatusModule(context, 553);\n            logPhaseLiveError(context, 'Phase I', stepLabel, `Sampling timed out or errored: ${err.message}`);\n            showPopup([`${err.message}`], 'error', 15);\n        }\n        context.set(\"packValidationIsSamplingData.isPhaseISampling\", false);\n        return false;\n    }\n}\nasync function phaseIISampleModule(context,stepIndexValue,stepUnloadOrLoad){\n    //Turn on Sampling\n    let stepENV = {};\n    stepENV['stepIndexValue'] = stepIndexValue;\n    stepENV['stepUnloadOrLoad'] = stepUnloadOrLoad;\n    context.set(\"packValidationIsSamplingData.isPhaseIISampling\", true);\n    context.set(\"packValidationIsSamplingData.currentStage\", stepENV);\n    let timeoutCounter = 0;\n    try{\n        while (true){\n            emergencyCheckOrThrow(context,`Emergency triggered at phaseIISampleModule`);\n\n            if(timeoutCounter % 20 == 0){\n                console.log(`Waiting on sampling. Waiting...${timeoutCounter}/${context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')}. `);\n            }\n            if(!context.get(\"packValidationIsSamplingData\")[\"isPhaseIISampling\"]){\n                return true;\n            }else if (timeoutCounter > context.get('settingsConfig.MAX_TIMEOUT_AWAITING_SAMPLING')){\n                throw new Error(\"In phaseIISampleModule: Exceed MAX_TIMEOUT_AWAITING_SAMPLING, ABORTING phase II\");\n            }\n            timeoutCounter+= 1;\n            await delayTimeModule(context, 0.1);\n        }\n    }catch(err){\n        const stepLabel = stepIndexValue === 'phase2UnloadData1' ? 'Step 1 of 4 -- Unload 1 (Sampling)'\n            : stepIndexValue === 'phase2LoadData1' ? 'Step 2 of 4 -- Load 1 (Sampling)'\n            : stepIndexValue === 'phase2LoadData2' ? 'Step 3 of 4 -- Load 2 (Sampling)'\n            : stepIndexValue === 'phase2UnloadData2' ? 'Step 4 of 4 -- Unload 2 (Sampling)'\n            : `${stepIndexValue} (${stepUnloadOrLoad}) Sampling`;\n        if (err.name === \"AbortError\") {\n            logPhaseLiveError(context, 'Phase II', stepLabel, `Operator emergency / abort during sampling: ${err.message}`);\n            showPopup([`${err.message}`], 'error', 15);\n        } else {\n            updatePacksValidationStatusModule(context, 554);\n            logPhaseLiveError(context, 'Phase II', stepLabel, `Sampling timed out or errored: ${err.message}`);\n            showPopup([`${err.message}`], 'error', 15);\n        }\n        context.set(\"packValidationIsSamplingData.isPhaseIISampling\", false);\n        return false;\n    }\n}\nfunction handleSampleValidityPhaseIModule(context, sensorData){\n    try{\n        /***\n         * // first three values from sensor data: \n         * 25.0,19.67,19.60,19.41,19.41,19.01,19.83 -> 19.67,19.60,19.41,19.41,19.01,19.83\n         */\n        const trimmedSensorData = sensorData.slice(1); \n        const currentStage = context.get('packValidationIsSamplingData.currentStage');\n        const stepIndexValue = currentStage['stepIndexValue'];\n        if(context.get(\"packsValidationData\")[stepIndexValue].length < 2){\n            const updatedSampleArr = context.get(\"packsValidationData\")[stepIndexValue];\n            updatedSampleArr.push(trimmedSensorData)\n            context.set(\"packsValidationData\",{...context.get(\"packsValidationData\"), [stepIndexValue]: updatedSampleArr}); \n            updatePackProgressionBar(context);\n        }\n        if(context.get(\"packsValidationData\")[stepIndexValue].length === 1){\n            updatePacksValidationStatusModule(context, 570); //P1 Validating Status\n            // console.log(context.get(\"packsValidationData\")[stepIndexValue]);\n            console.log(`Phase I: Sampled & Validation Complete`);\n            //Stop sampling, move on\n            context.set(\"packValidationIsSamplingData.isPhaseISampling\", false);\n            context.set(\"packValidationIsSamplingData.currentStage\", null);\n        }\n        \n    }catch(err){\n        console.log(`Error in handleSampleValidityPhaseIModule: ${err.message}`);\n        context.set(\"packValidationIsSamplingData.isPhaseISampling\", false);\n        context.set(\"packValidationIsSamplingData.currentStage\", null);\n    }\n}\nfunction handleSampleValidityPhaseIIModule(context, sensorData){\n    try{\n        /***\n         * // first three values from sensor data: \n         * 25.0,19.67,19.60,19.41,19.41,19.01,19.83 -> 19.67,19.60,19.41,19.41,19.01,19.83\n         */\n        const trimmedSensorData = sensorData.slice(1); \n        const currentStage = context.get('packValidationIsSamplingData.currentStage');\n        const stepIndexValue = currentStage['stepIndexValue'];\n\n        if(context.get(\"packsValidationData\")[stepIndexValue].length < 2){\n            updatePacksValidationStatusModule(context, 568); //P2 Sampling Status\n            const updatedSampleArr = context.get(\"packsValidationData\")[stepIndexValue];\n            updatedSampleArr.push(trimmedSensorData)\n            context.set(\"packsValidationData\",{...context.get(\"packsValidationData\"), [stepIndexValue]: updatedSampleArr}); \n            updatePackProgressionBar(context);\n        }\n        if(context.get(\"packsValidationData\")[stepIndexValue].length === 1){\n            updatePacksValidationStatusModule(context, 570); //P2 Validating Status\n            console.log(context.get(\"packsValidationData\")[stepIndexValue]);\n            //Handle Validation\n            console.log(`Phase II: Sampled & Validation Complete`);\n            //Stop sampling, move on\n            context.set(\"packValidationIsSamplingData.isPhaseIISampling\", false);\n            context.set(\"packValidationIsSamplingData.currentStage\", null);\n        }\n        \n    }catch(err){\n        console.log(`Error in handleSampleValidityPhaseIModule: ${err.message}`);\n        context.set(\"packValidationIsSamplingData.isPhaseIISampling\", false);\n        context.set(\"packValidationIsSamplingData.currentStage\", null);\n    }\n}\n//Core: builds the Phase I PASS/FAIL math rows — the two gates per step: (1) Range: min & max of the\n//relevant coils inside [rangeMin, rangeMax]; (2) Spread: max-min < variance. Takes the pack-type def\n//(`data`: coilsProfile, phase1*Range, acceptedUnload/LoadVariance) and the two sampled arrays, so the\n//live conclusion board and the stored profile report share one implementation and can't diverge.\n//Mirrors checkFinalValidity (same buildArrayForValidation coil filtering). Returns [{label, ok}].\nfunction buildPhaseIMathRows(context, data, unloadArr, loadArr){\n    const rows = [];\n    if(!data){ return rows; }\n    const generalCoilsIndices = [];\n    (data['coilsProfile']['generalCoilsPositions'] || []).forEach((v)=>{ if((v - 1) >= 0){ generalCoilsIndices.push(v - 1); } });\n    const referenceUnfilledCoilsIndices = [];\n    (data['coilsProfile']['referenceUnfilledCoilsPositions'] || []).forEach((v)=>{ if((v - 1) >= 0){ referenceUnfilledCoilsIndices.push(v - 1); } });\n\n    const round2 = (n)=> Math.round(n * 100) / 100;\n    const pushStep = (label, arr, rangeMin, rangeMax, variance)=>{\n        if(!arr || arr.length === 0){ return; }\n        const min = round2(Math.min(...arr));\n        const max = round2(Math.max(...arr));\n        const spread = round2(max - min);\n        rows.push({ label: `${label} — Range: min ${min}, max ${max} must be within [${rangeMin}, ${rangeMax}]`, ok: (rangeMin <= min) && (max <= rangeMax) });\n        rows.push({ label: `${label} — Spread: ${max} − ${min} = ${spread} must be < ${variance}`, ok: spread < variance });\n    };\n\n    if(unloadArr && unloadArr.length > 0){\n        //Unload includes the unfilled reference coils (requireTrim=false), matching checkFinalValidity.\n        pushStep('Unload', buildArrayForValidation(context, false, unloadArr, generalCoilsIndices, referenceUnfilledCoilsIndices), data['phase1UnloadMinRange'], data['phase1UnloadMaxRange'], data['acceptedUnloadVariance']);\n    }\n    if(loadArr && loadArr.length > 0){\n        //Load excludes the unfilled reference coils (requireTrim=true).\n        pushStep('Load', buildArrayForValidation(context, true, loadArr, generalCoilsIndices, referenceUnfilledCoilsIndices), data['phase1LoadMinRange'], data['phase1LoadMaxRange'], data['acceptedLoadVariance']);\n    }\n    return rows;\n}\n//Core: Phase II math rows. Asymmetry preserved — Unload 1 / Load 1 are SPREAD-ONLY (general coils via\n//buildArrayForValidation(true)); Unload 2 / Load 2 check BOTH range and spread on the raw channel array.\nfunction buildPhaseIIMathRows(context, data, unload1Arr, load1Arr, load2Arr, unload2Arr){\n    const rows = [];\n    if(!data){ return rows; }\n    const generalCoilsIndices = [];\n    (data['coilsProfile']['generalCoilsPositions'] || []).forEach((v)=>{ if((v - 1) >= 0){ generalCoilsIndices.push(v - 1); } });\n    const referenceUnfilledCoilsIndices = [];\n    (data['coilsProfile']['referenceUnfilledCoilsPositions'] || []).forEach((v)=>{ if((v - 1) >= 0){ referenceUnfilledCoilsIndices.push(v - 1); } });\n\n    const round2 = (n)=> Math.round(n * 100) / 100;\n    const pushRangeAndSpread = (label, arr, rangeMin, rangeMax, variance)=>{\n        if(!arr || arr.length === 0){ return; }\n        const min = round2(Math.min(...arr));\n        const max = round2(Math.max(...arr));\n        const spread = round2(max - min);\n        rows.push({ label: `${label} — Range: min ${min}, max ${max} must be within [${rangeMin}, ${rangeMax}]`, ok: (rangeMin <= min) && (max <= rangeMax) });\n        rows.push({ label: `${label} — Spread: ${max} − ${min} = ${spread} must be < ${variance}`, ok: spread < variance });\n    };\n\n    //Order follows the step execution order: Unload 1, Load 1, Load 2, Unload 2.\n    //Unload 1 / Load 1 reuse the Phase I unload/load ranges (no dedicated …Range1 fields) → range + spread.\n    if(unload1Arr && unload1Arr.length > 0){\n        pushRangeAndSpread('Unload 1', buildArrayForValidation(context, true, unload1Arr, generalCoilsIndices, referenceUnfilledCoilsIndices), data['phase1UnloadMinRange'], data['phase1UnloadMaxRange'], data['acceptedUnloadVariance']);\n    }\n    if(load1Arr && load1Arr.length > 0){\n        pushRangeAndSpread('Load 1', buildArrayForValidation(context, true, load1Arr, generalCoilsIndices, referenceUnfilledCoilsIndices), data['phase1LoadMinRange'], data['phase1LoadMaxRange'], data['acceptedLoadVariance']);\n    }\n    if(load2Arr && load2Arr.length > 0){\n        pushRangeAndSpread('Load 2', load2Arr, data['phase2LoadMinRange2'], data['phase2LoadMaxRange2'], data['acceptedLoadVariance']);\n    }\n    if(unload2Arr && unload2Arr.length > 0){\n        pushRangeAndSpread('Unload 2', unload2Arr, data['phase2UnloadMinRange2'], data['phase2UnloadMaxRange2'], data['acceptedUnloadVariance']);\n    }\n    return rows;\n}\n//Live conclusion-board entry points — read the in-progress validation context (arrays wrapped in [0]).\nfunction getPhaseIValidationMath(context){\n    const data = context.get('settingsConfig.phaseENV.phase') == 1\n        ? context.get('userInputtedData.selectedPackType')['data']\n        : context.get('manufacturedPackType')['data']['packTypeObj'];\n    return buildPhaseIMathRows(context, data, context.get('packsValidationData.phase1UnloadData')[0], context.get('packsValidationData.phase1LoadData')[0]);\n}\nfunction getPhaseIIValidationMath(context){\n    const data = context.get('settingsConfig.phaseENV.phase') == 1\n        ? context.get('userInputtedData.selectedPackType')['data']\n        : context.get('manufacturedPackType')['data']['packTypeObj'];\n    return buildPhaseIIMathRows(context, data,\n        context.get('packsValidationData.phase2UnloadData1')[0],\n        context.get('packsValidationData.phase2LoadData1')[0],\n        context.get('packsValidationData.phase2LoadData2')[0],\n        context.get('packsValidationData.phase2UnloadData2')[0]);\n}\nexport function checkFinalValidity(context, phase){\n    let data = null;\n\n    if(context.get('settingsConfig.phaseENV.phase') == 1){\n        const selectedPackType = context.get('userInputtedData.selectedPackType');\n        data = selectedPackType['data'];\n    }else{\n        const manufacturedPackType = context.get('manufacturedPackType');\n        data = manufacturedPackType['data']['packTypeObj'];\n\n    }\n    let phase1LoadMinRange= data['phase1LoadMinRange'];\n    let phase1LoadMaxRange = data['phase1LoadMaxRange'] ;\n    let phase1UnloadMinRange = data['phase1UnloadMinRange'] ;\n    let phase1UnloadMaxRange = data['phase1UnloadMaxRange'] ;\n    let phase2LoadMinRange2 = data['phase2LoadMinRange2'] ;\n    let phase2LoadMaxRange2 = data['phase2LoadMaxRange2'] ;\n    let phase2UnloadMinRange2 = data['phase2UnloadMinRange2'] ;\n    let phase2UnloadMaxRange2 = data['phase2UnloadMaxRange2'] ;\n\n    let activeCoilsCount = data['coilsProfile']['activeCoilsCount'] ;\n    let totalCoilsCount = data['coilsProfile']['totalCoilsCount'] ;\n    let referenceUnfilledCoilsPositions = data['coilsProfile']['referenceUnfilledCoilsPositions'] ;\n    let generalCoilsPositions = data['coilsProfile']['generalCoilsPositions'] ;\n\n    let referenceUnfilledCoilsIndices = [];\n    referenceUnfilledCoilsPositions.forEach((value, index)=>{\n        if((value - 1) >= 0){\n            referenceUnfilledCoilsIndices.push(value-1);\n        }\n    })\n    // console.log(\"referenceUnfilledCoilsIndices:\");\n    // console.log(referenceUnfilledCoilsIndices);\n\n    let generalCoilsIndices = [];\n    generalCoilsPositions.forEach((value, index)=>{\n        if((value - 1) >= 0){\n            generalCoilsIndices.push(value-1);\n        }\n    })\n    // console.log(\"generalCoilsIndices:\");\n    // console.log(generalCoilsIndices);\n\n    let unloadCONST = data['acceptedUnloadVariance'] ;\n    let loadCONST = data['acceptedLoadVariance'] ;\n    switch(phase){\n        case \"phaseI\":\n            console.log(\"Check for UNLOAD Validity\")\n            //Check for UNLOAD Validity\n            const phase1UnloadData = context.get('packsValidationData.phase1UnloadData')[0];//[45562,45549,44924,45050,45021,44975,45779,60349]\n            if(phase1UnloadData.length > 0){\n                //  Find Max(Include last value) & Find Min(Include last value) & Get Spread\n                const minValue1 = Math.min(...buildArrayForValidation(context,false,phase1UnloadData, generalCoilsIndices, referenceUnfilledCoilsIndices));\n                const maxValue1 = Math.max(...buildArrayForValidation(context,false,phase1UnloadData, generalCoilsIndices, referenceUnfilledCoilsIndices));\n                const spread1 = maxValue1 - minValue1;\n                const check1 = (phase1UnloadMinRange <= minValue1) && (maxValue1 <= phase1UnloadMaxRange)\n                //Check if min and max are within accepted rng\n                if(!check1){\n                    console.log(`Either max:${maxValue1} or min:${minValue1} are NOT within the ranges between ${phase1UnloadMinRange} and ${phase1UnloadMaxRange}`);\n                    context.set(\"packsValidationData.phase1ValidityData.unload\", false); \n                }else{\n                    const result = check1 && (spread1 < unloadCONST);\n                    console.log(`UNLOAD max:${maxValue1} min:${minValue1} spread:${spread1} unloadCONST:${unloadCONST}. Final Result:${result.toString()}`);\n                    //  Store Results\n                    context.set(\"packsValidationData.phase1ValidityData.unload\", result); \n                }\n            }else{\n                context.set(\"packsValidationData.phase1ValidityData.unload\", false); \n            }\n\n            console.log(\"Check for LOAD Validity\")\n            //Check for LOAD Validity\n            const phase1LoadData = context.get('packsValidationData.phase1LoadData')[0];//[45562,45549,44924,45050,45021,44975,45779,60349]\n            if(phase1UnloadData.length > 0){\n                //  Find Max(Include last value) & Find Min(Include last value) & Get Spread\n                const minValue2 = Math.min(...buildArrayForValidation(context,true,phase1LoadData, generalCoilsIndices, referenceUnfilledCoilsIndices));\n                const maxValue2 = Math.max(...buildArrayForValidation(context,true,phase1LoadData, generalCoilsIndices, referenceUnfilledCoilsIndices)); \n                const spread2 = maxValue2 - minValue2;\n                const check2 = (phase1LoadMinRange <= minValue2) && (maxValue2 <= phase1LoadMaxRange)\n                //Check if min and max are within accepted rng\n                if(!check2){\n                    console.log(`Either max:${maxValue2} or min:${minValue2} are NOT within the ranges between ${phase1LoadMinRange} and ${phase1LoadMaxRange}`);\n                    context.set(\"packsValidationData.phase1ValidityData.load\", false); \n                }else{\n                    const result2 = check2 && (spread2 < loadCONST);\n                    //  Store Results\n                    console.log(`LOAD max:${maxValue2} min:${minValue2} spread:${spread2} loadCONST:${loadCONST}. Final Result:${result2.toString()}`);\n                    context.set(\"packsValidationData.phase1ValidityData.load\", result2); \n                }\n            }else{\n                context.set(\"packsValidationData.phase1ValidityData.load\", false); \n            }\n\n            //Check for final Validity\n            context.set(\"packsValidationData.phase1ValidityData.final\", context.get(\"packsValidationData.phase1ValidityData.unload\") && context.get(\"packsValidationData.phase1ValidityData.load\")); \n            break;\n        case \"phaseII\":\n            //Check for UNLOAD 1 Validity\n            const phase2UnloadData1 = context.get('packsValidationData.phase2UnloadData1')[0];//[45562,45549,44924,45050,45021,44975,45779,60349]\n            if(phase2UnloadData1.length > 0){\n                const minValue3 = Math.min(...buildArrayForValidation(context,true,phase2UnloadData1, generalCoilsIndices, referenceUnfilledCoilsIndices));\n                const maxValue3 = Math.max(...buildArrayForValidation(context,true,phase2UnloadData1, generalCoilsIndices, referenceUnfilledCoilsIndices)); \n                const spread3 = maxValue3 - minValue3;\n                //Unload 1 reuses the Phase I unload range (no dedicated …Range1 field). Range + spread.\n                const check3 = (phase1UnloadMinRange <= minValue3) && (maxValue3 <= phase1UnloadMaxRange);\n                const result3 = check3 && (spread3 < unloadCONST);\n                console.log(`UNLOAD 1 max:${maxValue3} min:${minValue3} spread:${spread3} unloadCONST${unloadCONST}. Final Result:${result3.toString()}`);\n                context.set(\"packsValidationData.phase2ValidityData.unload1\", result3); \n            }else{\n                context.set(\"packsValidationData.phase2ValidityData.unload1\", false); \n            }\n            //Check for LOAD 1 Validity\n            const phase2LoadData1 = context.get('packsValidationData.phase2LoadData1')[0];//[45562,45549,44924,45050,45021,44975,45779,60349]\n            if(phase2LoadData1.length > 0){\n                const minValue4 = Math.min(...buildArrayForValidation(context,true,phase2LoadData1, generalCoilsIndices, referenceUnfilledCoilsIndices));\n                const maxValue4 = Math.max(...buildArrayForValidation(context,true,phase2LoadData1, generalCoilsIndices, referenceUnfilledCoilsIndices)); \n                const spread4 = maxValue4 - minValue4;\n                //Load 1 reuses the Phase I load range. Range + spread.\n                const check4 = (phase1LoadMinRange <= minValue4) && (maxValue4 <= phase1LoadMaxRange);\n                const result4 = check4 && (spread4 < loadCONST);\n\n                console.log(`LOAD 1 max:${maxValue4} min:${minValue4} spread:${spread4} loadCONST${loadCONST}. Final Result:${result4.toString()}`);\n                context.set(\"packsValidationData.phase2ValidityData.load1\", result4); \n            }else{\n                context.set(\"packsValidationData.phase2ValidityData.load1\", false); \n\n            }\n            //Check for UNLOAD 2 Validity\n            const phase2UnloadData2 = context.get('packsValidationData.phase2UnloadData2')[0];//[45562,45549,44924,45050,45021,44975,45779,60349]\n            if(phase2UnloadData2.length > 0){\n                const minValue6 = Math.min(...phase2UnloadData2);\n                const maxValue6 = Math.max(...phase2UnloadData2); \n                const spread6 = maxValue6 - minValue6;\n                const check6 = (phase2UnloadMinRange2 <= minValue6) && (maxValue6 <= phase2UnloadMaxRange2)\n                const result6 = check6 && (spread6 < unloadCONST);\n                console.log(`UNLOAD 2 max:${maxValue6} min:${minValue6} spread:${spread6} unloadCONST${unloadCONST}. Final Result:${result6.toString()}`);\n                context.set(\"packsValidationData.phase2ValidityData.unload2\", result6); \n            }else{\n                context.set(\"packsValidationData.phase2ValidityData.unload2\", false); \n\n            }\n            //Check for LOAD 2 Validity\n            const phase2LoadData2 = context.get('packsValidationData.phase2LoadData2')[0];//[45562,45549,44924,45050,45021,44975](NO REF VALUES)\n            if(phase2LoadData2.length > 0){\n                const minValue5 = Math.min(...phase2LoadData2);\n                const maxValue5 = Math.max(...phase2LoadData2); \n                const spread5 = maxValue5 - minValue5;\n                const check5 = (phase2LoadMinRange2 <= minValue5) && (maxValue5 <= phase2LoadMaxRange2)\n                const result5 = check5 && (spread5 < loadCONST);\n                console.log(`LOAD 2 max:${maxValue5} min:${minValue5} spread:${spread5} loadCONST${loadCONST}. Final Result:${result5.toString()}`);\n                context.set(\"packsValidationData.phase2ValidityData.load2\", result5); \n            }else{\n                context.set(\"packsValidationData.phase2ValidityData.load2\", false); \n\n            }\n            //Check for final Validity\n            context.set(\"packsValidationData.phase2ValidityData.final\", context.get(\"packsValidationData.phase2ValidityData.unload1\") && context.get(\"packsValidationData.phase2ValidityData.load1\") && context.get(\"packsValidationData.phase2ValidityData.unload2\") && context.get(\"packsValidationData.phase2ValidityData.load2\")); \n            break;\n    }\n\n}\nfunction delayTimeModule(context, numberSeconds){\n    /***\n     * Call delay by \"await delayTimeModule(2);\"\n     */\n    return new Promise((resolve) => {\n        setTimeout(resolve, numberSeconds * 1000);\n      });\n}\nfunction softResetPhaseIModule(context){\n\n    updatePacksValidationStatusModule(context, 555);\n    resetPackProgressionBar(context);\n    const chatBox = document.getElementById('phaseITextbox');\n    if(chatBox){\n        chatBox.innerHTML=\"\";\n    }\n    context.set(\"packsValidationData.phase1LoadData\", []);\n    context.set(\"packsValidationData.phase1UnloadData\", []);\n    context.set(\"packsValidationData.phase1ValidityData\", {unload:false,load:false,final:false});\n    context.set(\"packValidationIsSamplingData.isPhaseISampling\",false);\n    context.set(\"packValidationIsSamplingData.currentStage\",null);\n}\nfunction softResetPhaseIIModule(context){\n\n    updatePacksValidationStatusModule(context, 559);\n\n    resetPackProgressionBar(context);\n    const chatBox = document.getElementById('phaseIITextbox');\n    if(chatBox){\n        chatBox.innerHTML=\"\";\n    }\n    context.set(\"packsValidationData.phase2UnloadData1\", []);\n    context.set(\"packsValidationData.phase2LoadData1\", []);\n    context.set(\"packsValidationData.phase2LoadData2\", []);\n    context.set(\"packsValidationData.phase2UnloadData2\", []);\n    context.set(\"packsValidationData.phase2ValidityData\", {unload1:false, load1:false, load2:false,unload2:false, final:false});\n    context.set(\"packValidationIsSamplingData.isPhaseIISampling\",false);\n}\nexport function hardResetModule(context){\n\n    context.set(\"packsValidationData\",{phase1LoadDataSampleData:[],\n        phase1LoadData:[],\n        phase1UnloadDataSampleData:[],\n        phase1UnloadData:[],\n        phase2LoadData1SampleData:[],\n        phase2LoadData1:[],\n        phase2UnloadData1SampleData:[],\n        phase2UnloadData1:[],\n        phase2UnloadData2SampleData:[],\n        phase2UnloadData2:[],\n        phase2LoadData2SampleData:[],\n        phase2LoadData2:[],\n        phase1ValidityData:{unload:false,load:false,final:false, },\n        phase2ValidityData:{load1:false, unload1:false, unload2:false, load2:false,final:false}\n    });\n    context.set(\"packValidationIsSamplingData\",{currentStage:null,isPhaseISampling:false, isPhaseIISampling:false});\n    const rigProfile = document.getElementById(\"selectedRigIP\");\n    rigProfile.value=\"0\";\n    context.set(\"selectedRigDP\", \"0\");\n    const calibProfile = document.getElementById(\"selectedPackType\");\n    calibProfile.value=\"0\";\n    context.set(\"selectedCalibDP\", \"0\");\n\n}\nfunction emergencyCheckOrThrow(context, message, errCategory=null){\n    if (context.get(\"emergencyController\")['signal']['aborted']) {\n        throw new DOMException(message, errCategory == null ? \"AbortError\" : errCategory);\n    }\n\n}\n//General utilities and Tools Section\nexport async function sendBatchCommands(context, cmdValueArray){\n    for (let cmdValueString of cmdValueArray) {\n        const [cmd, value] = cmdValueString.split(' ');\n        await outgoingMessageLibrary(\n            context,\n            cmd ? cmd : \"\",\n            value ? value : \"\"\n        );\n\n        // Wait 4 seconds before the next iteration\n        await new Promise(resolve => setTimeout(resolve, 5000));\n    }\n\n}\nfunction buildArrayForValidation(context,requireTrim, sampledArray, generalCoilsIndices, referenceUnfilledCoilsIndices){\n    /**\n     * sampledArray: assume it does not have temeprature \n     * eg: generalCoilsIndices:[0,1,2,3,4,5,6,8] \n     * eg: referenceUnfilledCoilsIndices:[7]\n     */\n    let finalArray = [];\n    console.log('in buildArrayForValidation')\n    console.log('in requireTrim')\n    console.log(requireTrim)\n    console.log('in sampledArray')\n    console.log(sampledArray)\n    console.log('in generalCoilsIndices')\n    console.log(generalCoilsIndices)\n    console.log('in referenceUnfilledCoilsIndices')\n    console.log(referenceUnfilledCoilsIndices)\n    if(requireTrim){\n        generalCoilsIndices.forEach((indexValue, index)=>{\n            finalArray.push(sampledArray[indexValue]);\n        });\n    }else{\n        generalCoilsIndices.forEach((indexValue, index)=>{\n            finalArray.push(sampledArray[indexValue]);\n        });\n        referenceUnfilledCoilsIndices.forEach((indexValue, index)=>{\n            finalArray.push(sampledArray[indexValue]);\n        });\n    }\n    console.log('in finalArray')\n    console.log(finalArray)\n    return finalArray;\n    \n}\nexport function destroyAndClearAnchorLiveView(context){\n    //Clear Anchor Live Section\n    if(document.getElementById('anchorLiveViewSections')){\n        document.getElementById('anchorLiveViewSections').innerHTML = '';\n    }\n    //Clear Live Log Charts Dataset\n    if (context.chart) {\n        context.chart.data.datasets = [];\n        context.chart.data.labels = []\n        context.chart.update();\n    }\n}\nexport function initializeAndCreateAnchorLiveView(context, numberOfSections){\n    //Build TBs for Anchor Live View \n    context.buildAnchorLiveViews(numberOfSections);\n    console.log(numberOfSections)\n    //First clear the inital dataset\n    if (context.chart) {\n        context.chart.data.labels = [];\n        context.chart.data.datasets = [];\n        context.chart.update();\n    }\n\n    let datasetArr = [];\n    for(let i=0; i<numberOfSections;i++){\n        datasetArr.push({\n            label:`CH${i}`,\n            borderColor : getDataSetColor(i),\n            borderWidth: 0.5,\n            fill: false,\n            tension: 0.1,\n        })\n    }        \n    \n    if (context.chart) {\n        context.chart.data.datasets = datasetArr;\n        context.chart.update();\n    }\n}\nexport function resetPackProgressionBar(context) {\n    const progressBarSection = document.getElementById('packsProgressionViewSection');\n    const progressBarFill = document.getElementById('packsProgressionBar');\n    const progressValueText = document.getElementById('packsProgressionValue');\n    progressBarFill.style.width = \"0%\";\n    progressValueText.textContent = ``;\n    progressBarSection.style.display = \"none\";\n\n}\nexport function updatePackProgressionBar(context) {\n    const progressBarSection = document.getElementById('packsProgressionViewSection');\n    const progressBarFill = document.getElementById('packsProgressionBar');\n    const progressValueText = document.getElementById('packsProgressionValue');\n\n    if (!progressBarSection || !progressBarFill || !progressValueText) {\n        console.error(\"Progress bar elements not found in DOM.\");\n        return;\n    }\n\n    let maxProgress = 0; // Total number of steps\n    let currentProgress = 0\n    if(context.get('settingsConfig.phaseENV.phase') == 1){\n        maxProgress = 2;\n        if(context.get(\"packsValidationData.phase1LoadData\").length > 0){\n            currentProgress += 1;\n        }\n        if(context.get(\"packsValidationData.phase1UnloadData\").length > 0){\n            currentProgress += 1;\n        }\n    }else{\n        maxProgress = 4;\n        if(context.get(\"packsValidationData.phase2UnloadData1\").length > 0){\n            currentProgress += 1;\n        }\n        if(context.get(\"packsValidationData.phase2LoadData1\").length > 0){\n            currentProgress += 1;\n        }\n        if(context.get(\"packsValidationData.phase2LoadData2\").length > 0){\n            currentProgress += 1;\n        }\n        if(context.get(\"packsValidationData.phase2UnloadData2\").length > 0){\n            currentProgress += 1;\n        }\n    }\n\n    let progressPercentage = (currentProgress / maxProgress) * 100;\n    progressPercentage = Math.min(progressPercentage, 100); // Ensures max is 100%\n\n    // Make the progress bar visible\n    progressBarSection.style.display = \"flex\";\n\n    // Smooth animation effect: update the width of the progress bar with a delay\n    setTimeout(() => {\n        progressBarFill.style.width = `${progressPercentage}%`;\n    }, 100); // Small delay to allow transition effect\n    progressValueText.textContent = `${progressPercentage}%`;\n}\nfunction getRandomNumber(min, max) {\n    // Generate a random number between 20 and 23\n    let randomNumber = Math.random() * (max - min) + min;\n    // Round to two decimal places\n    return randomNumber.toFixed(0);\n}\nexport function phase1TestMessage(context) {\n    const interval = setInterval(() => {\n        appendLiveLog(context, `sensorData=+ 22.5,${getRandomNumber(27600,27700)},${getRandomNumber(27600,27700)},${getRandomNumber(27600,27700)},${getRandomNumber(27600,27700)},${getRandomNumber(27600,27700)},${getRandomNumber(27600,27700)},${getRandomNumber(27600,27700)},${getRandomNumber(27600,27700)}`, 'incoming')\n    }, 2000); // Logs \"test\" every 2 seconds\n    \n    // Stop after 30 seconds (optional)\n    setTimeout(() => clearInterval(interval), 1200000);\n\n}\nexport function roundToDecimalPlaces(value, decimalPlaces) {\n    const scale = Math.pow(10, decimalPlaces);\n    const roundedValue = Math.round(value * scale) / scale;\n\n    // Ensure the result has exactly the specified number of decimal places\n    return roundedValue.toFixed(decimalPlaces);\n}\nfunction parseMessage1(message) {\n    /**\n     * Used for processing message structure of:\n     * + 22.5,27606,27620,27633,27613,27680,27635,27579,27651 ---> [ 22.5,27606,27620,27633,27613,27680,27635,27579,27651]\n     */\n    const data = message.split(',');\n    // Ensure the array has at least the first 2 elements\n    if (data.length < 2) {\n      throw new Error(\"Array must have at least 2 elements.\");\n    }\n  \n    // Extract the temperature value (1st element in the array)\n    let temperatureValue;\n    try {\n      temperatureValue = parseFloat(data[0].replace(\"+\", \"\").trim()); // Clean and convert to float\n    } catch (error) {\n      throw new Error(\"Temperature value is not valid.\");\n    }\n  \n    // Initialize array for displacement values\n    const displacementValues = [];\n  \n    // Process the remaining elements in pairs (displacementValue, displacementUnit)\n    for (let i = 1; i < data.length; i += 1) {\n      let displacementValue = data[i]?.trim()?.replace(/\\s+/g, \"0\") || null; // Remove spaces\n      try {\n        if(displacementValue != null){\n            displacementValues.push(parseFloat(displacementValue));\n        }\n      } catch (error) {\n        // Skip invalid displacement values\n        console.warn(`Invalid displacement value at index ${i}:`, data[i]);\n      }\n    }\n  \n    // Return as an array\n    const finalArr = [temperatureValue];\n    displacementValues.forEach((value)=>{\n        finalArr.push(value);\n    })\n    // console.log(finalArr);\n    return finalArr;\n}\nfunction parseMessage2(message) {\n    /**\n     * Used for processing message structure of:\n     * YP,240571999,6EXTO,71, + 22.0,0,29980,ms, 29923,ms, 29992, ms,29988,ms, 29970, ms, 29936,ms, --->  [22.5,27606,27620,27633,27613,27680,27635,27579,27651]\n     */\n    const data = message.split(',');\n    // Ensure the array has at least the first 5 elements\n    if (data.length < 5) {\n      throw new Error(\"Array must have at least 5 elements.\");\n    }\n  \n  \n    // Extract the temperature value (5th element in the array)\n    let temperatureValue;\n    try {\n      temperatureValue = parseFloat(data[4].replace(\"+\", \"\").trim()); // Clean and convert to float\n    } catch (error) {\n      throw new Error(\"Temperature value is not valid.\");\n    }\n  \n    // Initialize array for displacement values\n    const displacementValues = [];\n  \n    // Process the remaining elements in pairs (displacementValue, displacementUnit)\n    for (let i = 6; i < data.length; i += 2) {\n      let displacementValue = data[i]?.trim()?.replace(/\\s+/g, \"0\") || null; // Remove spaces\n      try {\n        if(displacementValue != null){\n            // console.log('displacementValue')\n            // console.log(displacementValue)\n            displacementValues.push(parseFloat(displacementValue));\n        }\n      } catch (error) {\n        // Skip invalid displacement values\n        console.warn(`Invalid displacement value at index ${i}:`, data[i]);\n      }\n    }\n  \n    // Return as an array\n    const finalArr = [ temperatureValue];\n    displacementValues.forEach((value)=>{\n        finalArr.push(value);\n    })\n    // console.log(finalArr);\n\n    return finalArr;\n}\nexport function getDataSetColor(index) {\n    const colors = [\n        '#FF0000', // Red\n        '#00FF00', // Green\n        '#0000FF', // Blue\n        '#FFFF00', // Yellow\n        '#FF00FF', // Magenta\n        '#00FFFF', // Cyan\n        '#FF7F00', // Orange\n        '#7F00FF', // Violet\n        '#00FF7F', // Spring Green\n        '#7FFF00', // Chartreuse\n        '#FF007F', // Rose\n        '#007FFF', // Azure\n        '#7F7F7F', // Grey\n        '#FFAA00', // Amber\n        '#AAFF00', // Lime\n        '#00AAFF', // Cerulean\n        '#AA00FF', // Purple\n        '#FF00AA', // Fuchsia\n        '#00FFAA', // Aqua\n        '#AAFFAA', // Pastel Green\n        '#AAFF7F', // Light Green\n        '#7F7FFF', // Lavender\n        '#FF5555', // Soft Red\n        '#55FF55', // Soft Green\n        '#5555FF', // Soft Blue\n    ];\n\n    // Cycle through the colors if there are more datasets than predefined colors\n    return colors[index % colors.length];\n}\nexport function getCurrentDateTime () {\n    const now = new Date();\n\n    const year = now.getFullYear();\n    const month = String(now.getMonth() + 1).padStart(2, '0'); // Months are 0-based\n    const day = String(now.getDate()).padStart(2, '0');\n\n    const hours = String(now.getHours()).padStart(2, '0');\n    const minutes = String(now.getMinutes()).padStart(2, '0');\n    const seconds = String(now.getSeconds()).padStart(2, '0');\n    const milliseconds = String(now.getMilliseconds()).padStart(3, '0');\n\n    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n}\nfunction areNumbersEqual(num1, num2, epsilon = 0.005) {\n    return Math.abs(num1 - num2) < epsilon;\n}\nexport function formatDateTimeFromInputField(dateTimeString) {\n    // Convert the input datetime-local string to the desired format\n    const [date, time] = dateTimeString.split('T');\n    console.log(`date:${date} time:${time}`);\n    return `${date} ${time}:00`; // Append milliseconds as .000\n}\nexport function convertDBDateToTableDate(DBDate){\n    const date = new Date (DBDate);\n    let year = date.getFullYear();\n    let month = String(date.getMonth() + 1).padStart(2, '0');\n    let day = String(date.getDate()).padStart(2, '0');\n    let hours = String(date.getHours()).padStart(2, '0');\n    let minutes = String(date.getMinutes()).padStart(2, '0');\n    let seconds = String(date.getSeconds()).padStart(2, '0');\n    \n    return(`${year}-${month}-${day} ${hours}:${minutes}:${seconds}`) ;\n\n}\n/**\n * Build request data for end of phase I for pack profile table\n */\nexport function buildAndGetDataFormat1(context){\n    const selectedRigProfile = context.get('userInputtedData.selectedRigProfile');\n    const selectedPackType = context.get('userInputtedData.selectedPackType'); \n    const selectedPackData = context.get(\"userInputtedData.selectedPackData\"); //User inputted meta data of the pack such as packname and memo\n    const packsValidationData = context.get('packsValidationData');\n    const userProfile = context.get('session').data.authenticated['userProfile'];\n    console.log(\"in buildAndGetDataFormat1\")\n    console.log(selectedRigProfile)\n    console.log(selectedPackType)\n    console.log(selectedPackData)\n    console.log(packsValidationData)\n    console.log(userProfile)\n    //Build Data\n    let requestData = {};\n    //add sensorProfile \n    requestData['rigID'] = selectedRigProfile['data']['rigID'] ? Number.parseInt(selectedRigProfile['data']['rigID']) : 0;\n    requestData['company'] = `${userProfile['profile']['company']}`;\n    requestData['phase1Employee'] = `${userProfile['profile']['first_name']} ${userProfile['profile']['last_name']}`;\n    requestData['packName'] = selectedPackData != null && selectedPackData['packName'] ? selectedPackData['packName'] : null;\n    requestData['phase1Memo'] = selectedPackData != null && selectedPackData['phase1Memo'] ? selectedPackData['phase1Memo'] : null;\n    requestData['max'] = `${selectedPackType != null && selectedPackType['data']['max'] ? selectedPackType['data']['max'] : \"\"}`;\n    requestData['min'] = `${selectedPackType != null && selectedPackType['data']['min'] ? selectedPackType['data']['min'] : \"\"}`;\n    requestData['channels'] = `${selectedPackType != null && selectedPackType['data']['channels'] ? selectedPackType['data']['channels'] : \"\"}`;\n    requestData['packType'] = `${selectedPackType != null && selectedPackType['dbID'] ? Number.parseInt(selectedPackType['dbID']): \"\"}`;\n    // Fresh Phase I: explicit `isRepair=false` so BE can compose the new pack ID with\n    // the right encoding (BE needs this at POST time, not at the later PATCH).\n    requestData['isRepair'] = false;\n    // phase1ValidationDate intentionally omitted — BE auto-stamps it when both phase1 stage flags transition true.\n\n    // console.log(`requestData`);\n    // console.log(requestData);\n    return requestData;\n}\n/**\n * Build request data for end of phase II for pack profile data table\n */\nexport function buildAndGetDataFormat2(context){\n    const packsValidationData = context.get('packsValidationData');\n    const userProfile = context.get('session').data.authenticated['userProfile'];\n    console.log(packsValidationData)\n    //Build Data\n    let requestData = {};\n    //add sensorProfile \n    requestData['phase2UnloadData1'] = packsValidationData['phase2UnloadData1'][0];\n    requestData['phase2LoadData1']   = packsValidationData['phase2LoadData1'][0];\n    requestData['phase2UnloadData2'] = packsValidationData['phase2UnloadData2'][0];\n    requestData['phase2LoadData2']   = packsValidationData['phase2LoadData2'][0];\n    requestData['phase2ValidityData']   = packsValidationData['phase2ValidityData'];\n    //Per-step stopwatch durations (seconds): { p2s1Stopwatch..p2s4Stopwatch }. Only sent here, at\n    //end of Phase II — never in the per-step progression PATCHes.\n    //Omit the key entirely when no step was recorded: BE treats a NULL column as \"phase never\n    //completed\", and sending {} would overwrite that signal with a meaningless empty object.\n    const p2StopwatchValues = packsValidationData['p2StopwatchValues'];\n    if(p2StopwatchValues != null && Object.keys(p2StopwatchValues).length > 0){\n        requestData['p2StopwatchValues'] = p2StopwatchValues;\n    }\n\n    // console.log(`requestData`);\n    // console.log(requestData);\n    return requestData;\n}\n/**\n * Build request data for end of phase II for pack profile table\n */\nexport function buildAndGetDataFormat3(context){\n    const selectedPackData = context.get(\"userInputtedData.selectedPackData\"); //User inputted meta data of the pack such as packname and memo\n    const userProfile = context.get('session').data.authenticated['userProfile'];\n    //Build Data\n    let requestData = {};\n    requestData['phase2Employee'] = `${userProfile['profile']['first_name']} ${userProfile['profile']['last_name']}`;\n    requestData['phase2Memo'] = selectedPackData != null && selectedPackData['phase2Memo'] ? selectedPackData['phase2Memo'] : null;\n    requestData['phase2ValidationDate'] = getCurrentDateTime();\n\n    // console.log(`requestData`);\n    // console.log(requestData);\n    return requestData;\n}\n/**\n * Build request data for end of phase I for pack profile data table\n */\nexport function buildAndGetDataFormat4(context){\n    const packsValidationData = context.get('packsValidationData');\n    const userProfile = context.get('session').data.authenticated['userProfile'];\n    console.log(packsValidationData)\n    //Build Data\n    let requestData = {};\n    //add sensorProfile\n    requestData['phase1UnloadData'] = packsValidationData['phase1UnloadData'][0];\n    requestData['phase1LoadData']   = packsValidationData['phase1LoadData'][0];\n    requestData['phase1ValidityData']   = packsValidationData['phase1ValidityData'];\n    //Per-step stopwatch durations (seconds): { p1s1Stopwatch, p1s2Stopwatch }. Only sent here, at\n    //end of Phase I — never in the per-step progression PATCHes.\n    //Omit the key entirely when no step was recorded: BE treats a NULL column as \"phase never\n    //completed\", and sending {} would overwrite that signal with a meaningless empty object.\n    const p1StopwatchValues = packsValidationData['p1StopwatchValues'];\n    if(p1StopwatchValues != null && Object.keys(p1StopwatchValues).length > 0){\n        requestData['p1StopwatchValues'] = p1StopwatchValues;\n    }\n    // `isRepair` is sent at the START-of-Phase-I POST (formats 1 and 5), NOT here.\n    // BE needs it at row creation so the new pack ID can encode it.\n    // console.log(`requestData`);\n    // console.log(requestData);\n    return requestData;\n}\n/**\n * Build request data for end of phase I ONLY IFF ISREPAIRING\n */\nexport function buildAndGetDataFormat5(context){\n    // Repair POST body — a fresh Phase I row that carries forward only the source\n    // pack's identity. The BE auto-stamps phase1ValidationDate and reconciles\n    // progression from the data PATCH, so we deliberately omit those.\n    const completedPackProfile = context.get('completedPackProfile');\n    const selectedRigProfile = context.get('userInputtedData.selectedRigProfile');\n    const userProfile = context.get('session').data.authenticated['userProfile'];\n    const source = completedPackProfile != null ? completedPackProfile['data'] : {};\n\n    let requestData = {};\n    requestData['rigID'] = selectedRigProfile != null && selectedRigProfile['data']['rigID'] ? Number.parseInt(selectedRigProfile['data']['rigID']) : 0;\n    requestData['company'] = `${userProfile['profile']['company']}`;\n    requestData['phase1Employee'] = `${userProfile['profile']['first_name']} ${userProfile['profile']['last_name']}`;\n    // packID intentionally NOT sent — the BE is the source of truth and composes the canonical\n    // repair ID (…-X) from this row's own validationID. (Per the BE pack-ID contract: a non-canonical\n    // packID would be ignored/regenerated, and echoing the source pack's canonical ID would embed\n    // the wrong validationID.)\n    requestData['packName'] = source['packName'] || null;\n    requestData['min'] = source['min'] || null;\n    requestData['max'] = source['max'] || null;\n    requestData['channels'] = source['channels'] || null;\n    requestData['packType'] = source['packType'] || null;\n    // Repair Phase I: explicit `isRepair=true` so BE can compose the new pack ID with\n    // the right encoding (BE needs this at POST time, not at the later PATCH).\n    requestData['isRepair'] = true;\n    return requestData;\n}","export { default } from \"ember-page-title/helpers/page-title\";\n","import { helper } from '@ember/component/helper';\n\nexport function parseint(params/*, hash*/) {\n  return parseInt(params[0]);\n}\n\nexport default helper(parseint);\n\n","export { default } from 'ember-concurrency/helpers/perform';\n","import pluralize from 'ember-inflector/lib/helpers/pluralize';\nexport default pluralize;\n","export { default, point } from 'ember-leaflet/helpers/point';\n","export {\n  default,\n  buildPopperModifier,\n} from \"ember-popper-modifier/helpers/popper-modifier\";\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport function dispRadioGroupIsChecked(params) {\n    const selectedRadioValue = params[0];\n    const refValue = params[1];\n    return selectedRadioValue === refValue;\n}\n\nexport default helper(dispRadioGroupIsChecked);","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport function range(values) {\n    var start = values[0];\n    var count = values[1];\n  \n    var ret = [];\n    for(var i = 0; i < count; i++) {\n      ret.push(i+start);\n    }\n    return ret;\n}\n\nexport default helper(range);\n","export { default, default as refTo } from 'ember-ref-bucket/helpers/ref-to';\n","export { default, searchableSelectGet } from 'ember-searchable-select/helpers/searchable-select-get';\n","export { default, searchableSelectHighlightMatch } from 'ember-searchable-select/helpers/searchable-select-highlight-match';\n","\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\nimport Chart from 'chart.js/auto';\nimport printJS from 'print-js';\nimport {sendGETRequest} from \"../helpers/network-library\"\n\nexport async function refreshMainChartData(context){\n    let endpoint = \"sensor_calibration_analytics/?\"\n    console.log('request params')\n    console.log(context.get(\"requestParams\"))\n\n    Object.entries(context.get(\"requestParams\")).forEach(([key, value], index) => {\n        if(value != null){\n            endpoint += `${key}=${value}&`;\n        }\n      });\n    endpoint = endpoint.slice(0, -1); //Remove the last& symbol\n    const requestData = await sendGETRequest(endpoint);\n    context.set(\"mainChartData\", requestData['data']);\n    updateChart(context);\n}\n\nexport function resetDataAndSearch(context){\n    // Reset filter fields only — preserve the current Main Data selection so the user\n    // stays on the metric they picked.\n    const dateDataSelectComp = document.getElementById(\"dateDataSelect\");\n    if(dateDataSelectComp){ dateDataSelectComp.value = \"-1\"; }\n    const startRangeDateComponent = document.getElementById(\"startRangeDateComponent\");\n    if(startRangeDateComponent){ startRangeDateComponent.value = null; }\n    const endRangeDateComponent = document.getElementById(\"endRangeDateComponent\");\n    if(endRangeDateComponent){ endRangeDateComponent.value = null; }\n    const employeeGroupDataSelectComp = document.getElementById(\"employeeGroupDataSelect\");\n    if(employeeGroupDataSelectComp){ employeeGroupDataSelectComp.value = \"0\"; }\n    // Sync Ember-bound props so the combined observer rebuilds requestParams from the cleared state.\n    context.set('updateDateDataSelectDropDown', \"-1\");\n    context.set('startRangeDateComponent', null);\n    context.set('endRangeDateComponent', null);\n    context.set('updateEmployeeDataSelectDropDown', \"0\");\n\n    // Build requestParams keyed off whatever Main Data is currently selected.\n    const mainDataComp = document.getElementById(\"mainDataSelect\");\n    const labels = context.get('mainDataSelectionLabels') || [];\n    const currentMainObj = mainDataComp ? labels[mainDataComp.value] : null;\n    const currentKey = currentMainObj ? currentMainObj['key'] : 'jobID';\n    context.set(\"requestParams\",{\n        y:currentKey,\n        x:null,\n        is_distinct:\"false\",\n        secondary:\"all\",\n        date_min:null,\n        date_max:null\n    })\n    context.set(\"mainChartData\",[])\n    refreshMainChartData(context)\n}\n\nexport function renderChart(context) {\n    let chartContainer = document.getElementById(\"mainChartSection\");\n\n    if (!chartContainer) {\n        console.error(\"mainChartSection not found in the DOM\");\n        return;\n    }\n\n    // Clear previous chart if it exists\n    chartContainer.innerHTML = `<canvas id=\"mainChartCanvas\"></canvas>`;\n\n    const ctx = document.getElementById(\"mainChartCanvas\").getContext(\"2d\");\n\n    if (!ctx) {\n        console.error(\"mainChartCanvas not found in the DOM\");\n        return;\n    }\n\n    // Initialize the chart\n    context.chart = new Chart(ctx, {\n        type: \"bar\",\n        data: {\n            labels: [],\n            datasets: []\n        },\n        options: {\n            responsive: true,\n            maintainAspectRatio: false,\n            scales: {\n                x: {\n                    title: { display: true, text: \"\" },\n                    barPercentage: 0.6,  \n                    categoryPercentage: 0.8,  \n                    maxBarThickness: 20, \n                },\n                y: {\n                    title: { display: true, text: \"\" },\n                    beginAtZero: true\n                }\n            },\n            plugins: {\n                legend: {\n                    display: false, \n                    position: \"top\",\n                    labels: {\n                        usePointStyle: true,\n                        font: { size: 10, family: \"Arial\", weight: \"bold\" },\n                        color: \"black\",\n                        boxWidth: 10,\n                        boxHeight: 10,\n                        padding: 5,\n                    }\n                },\n                tooltip: {\n                    enabled: true\n                }\n            },\n            elements: {\n                point: { radius: 0 }\n            }\n        }\n    });\n\n    // Populate chart with initial data\n    updateChart(context);\n}\n\nexport function buildChartDataSet(context, dataArray) {\n    console.log('buildChartDataSet request params')\n    console.log(context.get('requestParams'))\n    const type = context.get('requestParams.y');\n    const xParam = context.get('requestParams.x');\n    const colorPalette = [\n        \"#AEC6CF\", \"#FFB7C5\", \"#B39EB5\", \"#FFDAC1\", \"#E2F0CB\", \"#C9C9FF\", \"#FDFD96\",\n        \"#FFABAB\", \"#B5EAD7\", \"#C7CEEA\", \"#E8DFF5\", \"#FF9AA2\", \"#FFAAA6\", \"#FFD3B6\",\n        \"#D4A5A5\", \"#FFC3A0\", \"#FF677D\", \"#DFF8EB\", \"#D9BF77\", \"#B0E0E6\", \"#D291BC\",\n        \"#FFDFD3\", \"#F6EAC2\", \"#E0BBE4\", \"#C2EABD\", \"#C2F0FC\", \"#FFDEE9\", \"#B3DEE2\",\n        \"#F9CB9C\", \"#F2D7D9\", \"#C0DED9\", \"#FAC8CD\", \"#E7F0C3\", \"#C8E6C9\", \"#F1CBFF\",\n        \"#ECCEF5\", \"#CDF0EA\", \"#FAD0C4\", \"#CDE4F2\", \"#FCE1E4\", \"#EAE4C5\", \"#F7E1D7\",\n        \"#D9EEE1\", \"#FFD6E0\", \"#D8E2DC\", \"#FFEFD3\", \"#F3EAC2\", \"#DFD3C3\", \"#C7F0DB\",\n        \"#F6D6AD\"\n    ];\n\n    let datasets = [];\n    let labels = [];\n    let xAxisLabel=\"\";\n    context.get(\"mainDataSelectionLabels\").forEach((dataObj, index)=>{\n        if(dataObj['key'] == type){\n            xAxisLabel = dataObj['value'];\n        }\n    })\n    switch (type) {\n        case \"rigID\":\n        case \"type\":\n        case \"employee\":\n            if (xParam == null) {\n                labels = dataArray.map(entry => entry[type]);\n                datasets.push({\n                    label: 'Count',\n                    maxBarThickness: 50,\n                    data: dataArray.map(entry => entry.count),\n                    backgroundColor: labels.map((_, index) => colorPalette[index % colorPalette.length]),\n                    borderColor: labels.map((_, index) => colorPalette[index % colorPalette.length]),\n                    borderWidth: 1\n                });\n                context.chart.options.scales.y.title ={ display: true, text: `Count` };\n                context.chart.options.scales.x.title ={ display: true, text: `${xAxisLabel}` };\n            } else {\n                labels = [...new Set(dataArray.map(entry => entry.date))].sort();\n                const groupedData = {};\n                dataArray.forEach(entry => {\n                    const groupValue = entry[type] || \"Unknown\";\n                    if (!groupedData[groupValue]) groupedData[groupValue] = {};\n                    groupedData[groupValue][entry.date] = (groupedData[groupValue][entry.date] || 0) + entry.count;\n                });\n\n                datasets = Object.keys(groupedData).map((groupValue, index) => ({\n                    label: groupValue,\n                    maxBarThickness: 50,\n                    data: labels.map(date => groupedData[groupValue][date] || 0),\n                    backgroundColor: colorPalette[index % colorPalette.length],\n                    borderColor: colorPalette[index % colorPalette.length],\n                    borderWidth: 1\n                }));\n                context.chart.options.scales.y.title ={ display: true, text: `Count` };\n                context.chart.options.scales.x.title ={ display: true, text: `Date` }\n            }\n            break;\n\n        case \"calibrationID\":\n        case \"jobID\":\n        case \"sensorID\":\n            labels = dataArray.map(entry => entry.date);\n            datasets.push({\n                label: \"Count\",\n                maxBarThickness: 50,\n                data: dataArray.map(entry => entry.count),\n                backgroundColor: \"#4A6A9C\",\n                borderColor: \"#4A6A9C\",\n                borderWidth: 1\n            });\n            context.chart.options.scales.y.title ={ display: true, text: `Count` };\n            context.chart.options.scales.x.title ={ display: true, text: `Date` }\n\n            break;\n        case \"completionRate\":\n            // Each row: {employee: string, completed: int, started: int, rate: float (0-1)}\n            labels = dataArray.map(entry => entry.employee);\n            datasets.push({\n                label: \"Completion Rate (%)\",\n                maxBarThickness: 50,\n                data: dataArray.map(entry => Math.round((entry.rate || 0) * 100)),\n                backgroundColor: dataArray.map(entry => (entry.rate || 0) < 0.7 ? \"#b00020\" : \"#4A6A9C\"),\n                borderColor: dataArray.map(entry => (entry.rate || 0) < 0.7 ? \"#b00020\" : \"#4A6A9C\"),\n                borderWidth: 1\n            });\n            context.chart.options.scales.y.title ={ display: true, text: `Completion Rate (%)` };\n            context.chart.options.scales.y.max = 100;\n            context.chart.options.scales.x.title ={ display: true, text: `Employee` };\n            break;\n        case \"abandonedPhaseI\":\n            // Each row: {employee: string, count: int}\n            labels = dataArray.map(entry => entry.employee);\n            datasets.push({\n                label: \"Abandoned Phase I\",\n                maxBarThickness: 50,\n                data: dataArray.map(entry => entry.count),\n                backgroundColor: \"#b00020\",\n                borderColor: \"#b00020\",\n                borderWidth: 1\n            });\n            context.chart.options.scales.y.title ={ display: true, text: `Abandoned Count` };\n            context.chart.options.scales.x.title ={ display: true, text: `Employee` };\n            break;\n        case \"abandonedPhaseISensor\":\n            // Each row: {sensorID: string, abandonCount: int, distinctEmployeeCount: int}\n            // Backend should only return sensors with abandonCount >= 2.\n            // Red bars = likely hardware issue (3+ different operators all abandoned it).\n            labels = dataArray.map(entry => entry.sensorID);\n            datasets.push({\n                label: \"Abandon Count\",\n                maxBarThickness: 50,\n                data: dataArray.map(entry => entry.abandonCount),\n                backgroundColor: dataArray.map(entry => (entry.distinctEmployeeCount || 0) >= 3 ? \"#b00020\" : \"#4A6A9C\"),\n                borderColor: dataArray.map(entry => (entry.distinctEmployeeCount || 0) >= 3 ? \"#b00020\" : \"#4A6A9C\"),\n                borderWidth: 1\n            });\n            context.chart.options.scales.y.title ={ display: true, text: `Abandon Count` };\n            context.chart.options.scales.x.title ={ display: true, text: `Sensor ID` };\n            break;\n        case \"recalibrationRateEmployee\":\n            // Each row: {employee: string, recalibrationCount: int, distinctSensorCount: int}\n            // Backend should only return employees with recalibrationCount >= 2.\n            // Red bars = high redo workload; supervisor decides if it's assignment vs. quality.\n            labels = dataArray.map(entry => entry.employee);\n            datasets.push({\n                label: \"Re-Calibration Count\",\n                maxBarThickness: 50,\n                data: dataArray.map(entry => entry.recalibrationCount),\n                backgroundColor: dataArray.map(entry => (entry.recalibrationCount || 0) >= 4 ? \"#b00020\" : \"#4A6A9C\"),\n                borderColor: dataArray.map(entry => (entry.recalibrationCount || 0) >= 4 ? \"#b00020\" : \"#4A6A9C\"),\n                borderWidth: 1\n            });\n            context.chart.options.scales.y.title ={ display: true, text: `Re-Calibration Count` };\n            context.chart.options.scales.x.title ={ display: true, text: `Employee` };\n            break;\n        case \"recalibrationRate\":\n            // Each row: {sensorID: string, calibrationCount: int}\n            // Backend should only return sensors with calibrationCount >= 2.\n            labels = dataArray.map(entry => entry.sensorID);\n            datasets.push({\n                label: \"Calibration Count\",\n                maxBarThickness: 50,\n                data: dataArray.map(entry => entry.calibrationCount),\n                backgroundColor: dataArray.map(entry => (entry.calibrationCount || 0) >= 4 ? \"#b00020\" : \"#4A6A9C\"),\n                borderColor: dataArray.map(entry => (entry.calibrationCount || 0) >= 4 ? \"#b00020\" : \"#4A6A9C\"),\n                borderWidth: 1\n            });\n            context.chart.options.scales.y.title ={ display: true, text: `Calibration Count` };\n            context.chart.options.scales.x.title ={ display: true, text: `Sensor ID` };\n            break;\n        default:\n            console.warn(\"Unhandled type:\", type);\n            break;\n    }\n    return { datasets, labels };\n}\n\nexport function getYAxisScaleMax(context){\n    // setTimeout(() => {\n        const chartInstance = context.get('chart'); // Get the chart instance\n        if (chartInstance) {\n            const yAxisScale = chartInstance.scales[\"y\"].max;\n            return yAxisScale;\n        } else {\n            console.log(\"Chart instance not available yet.\");\n        }\n    // }, 750);\n}\n\nexport function updateChart(context) {\n    try{\n        if (!context.chart) return;\n    \n        let dataArray = context.get(\"mainChartData\") || [];\n    \n        // Extract labels (x-axis: Dates) and data points (y-axis: Counts)\n        const { datasets, labels } = buildChartDataSet(context, dataArray);\n        // Update chart data\n        context.chart.data.labels = labels;\n        context.chart.data.datasets = datasets  ; \n        console.log(datasets)\n        console.log(`datasets length :${datasets.length}`)\n    \n        context.chart.update(); // Refresh the chart with new data\n    \n        const yScaleMax = getYAxisScaleMax(context);\n        //Update the Max Y Axis Value text box \n        const yAxisMaxComponent = document.getElementById('yAxisScale');\n        yAxisMaxComponent.value = yScaleMax;\n        yAxisMaxComponent.min=`${yScaleMax}`\n        context.set(\"options.chartYAxisOriginal\", Number.parseInt(yScaleMax));\n\n    }\n\n    catch (error) {\n        console.error('Error updateChart:', error);\n      }\n}\n\nexport function manageCustomUIDateData(context, mainDataObj,  dateDataObj, employeeDataObj, isDistinctBooleanComp, startDateRng, endDateRng){\n    const dateDataSelectComp = document.getElementById('dateDataSelect');\n    const dateDataSectionComp = document.getElementById('dateDataSection');\n    let y = null;\n    let x = null;\n    switch(mainDataObj['key']){\n        case \"jobID\":\n        case \"calibrationID\":\n        case \"sensorID\":\n        // Supervisor metrics: no x-axis date dimension — backend aggregates and returns\n        // one row per group (employee or sensor). Date Data dropdown is meaningless here.\n        case \"completionRate\":\n        case \"abandonedPhaseI\":\n        case \"abandonedPhaseISensor\":\n        case \"recalibrationRateEmployee\":\n        case \"recalibrationRate\":\n            dateDataSelectComp.value=\"-1\";\n            dateDataSectionComp.style.display='none';\n            x = null;\n            y = mainDataObj['key'];\n            break;\n        default:\n            dateDataSectionComp.style.display='flex';\n            x = dateDataObj ? dateDataObj['key'] : null;\n            y = mainDataObj['key'];\n\n            break;\n\n    }\n\n    //Update Date Range visibilty depending on certain Main Data and Date Data\n    const dateRangeSection = document.getElementById('dateRangeSection');\n    switch(mainDataObj['key']){\n        case \"type\":\n        case \"rigID\":\n        case \"employee\":\n            if(dateDataObj == null){\n                dateRangeSection.style.display=\"none\";\n            }else{\n                dateRangeSection.style.display=\"flex\";\n            }\n            break;\n        case \"jobID\":\n        case \"calibrationID\":\n        case \"sensorID\":\n        // Supervisor metrics always honor a date range filter (Phase I attempt date)\n        case \"completionRate\":\n        case \"abandonedPhaseI\":\n        case \"abandonedPhaseISensor\":\n        case \"recalibrationRateEmployee\":\n        case \"recalibrationRate\":\n            dateRangeSection.style.display=\"flex\";\n            break;\n        default:\n            dateRangeSection.style.display=\"none\";\n            break;\n\n    }\n    \n    let isDistinctCheckbox = false;\n    //Update is_distinct\n    if(isDistinctBooleanComp != null){\n        isDistinctCheckbox = isDistinctBooleanComp.target.checked;\n    }\n    context.set(\"requestParams\",{\n        y:y, \n        x:x, \n        is_distinct:isDistinctCheckbox, \n        secondary:employeeDataObj.key, \n        date_min:startDateRng, \n        date_max:endDateRng\n    })\n}\n//bar Chart Helper functions\nexport function disableEnableBarChartLengend(context, isShowLegend){\n    if(context.chart && context.chart.options && context.chart.options.plugins){\n        // Update the legend visibility\n        context.chart.options.plugins.legend.display = isShowLegend;\n\n        // Trigger chart update to reflect changes\n        context.chart.update();\n    } else {\n        console.error(\"Chart instance or options.plugins is not defined\");\n    }\n}","import singularize from 'ember-inflector/lib/helpers/singularize';\nexport default singularize;\n","export function sum(params) {\n    return params.reduce((a, b) => {\n      return a + b;\n    });\n  };\n  \n  export default helper(sum);\n  ","export { default } from 'ember-concurrency/helpers/task';\n","export { default } from \"ember-moment/helpers/unix\";\n","export { default } from \"ember-moment/helpers/utc\";\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\nimport { getChannelsFromId } from '../utils/instrument-id';\n\nexport function validateDExto(params) {\n    /**\n     * key value displacementObj.values instr @instrument displacementObj structure\n     */\n    let key = params[0];\n    let value = params[1];\n    let displacementObj = params[5];\n    let data = params[2];\n    let tempData = data;\n    data = data.slice(1);\n    let refInstrument = params[3]; //This is each children exto \n    let masterInstrument = params[4]; //This is the multiDExto Insstrument Obj\n    // console.log(\"displacementObj::::\", displacementObj);\n    // console.log(\"refInstrument::::\", refInstrument);\n    // console.log(\"masterInstrument::::\", masterInstrument);\n    let masterDataArray = [];\n    let channels = \"\"\n    let currentInstrIndex = -1\n    let i =0\n    for(const instr_position_index of ['1', '2', '3', '4', '5']){\n        // console.log(\"instr_position_index::::\", instr_position_index)\n\n\n        let instrumenPositionObj = masterInstrument['instrumentPosition'+instr_position_index]\n        if(instrumenPositionObj != null){\n\n            if(instrumenPositionObj.id == refInstrument.instrumentID){\n                currentInstrIndex = Number(instr_position_index);\n            }\n\n            let subExtoID = refInstrument.instrumentID\n\n            //extract the number of channels — format-aware so the new 11-char grouped ID\n            //(with letter at position 6) is parsed correctly.\n            channels = getChannelsFromId(subExtoID);\n            // console.log(\"This instrument has \", channels, \" channels\");\n            //With the number of channels, build the data array for each instrumentPositionObj\n            let slaveDataArray = [];\n            slaveDataArray.push(0.0);\n            while(i < data.length){\n                if(slaveDataArray.length == channels){\n                    break;\n                }else{\n                    slaveDataArray.push(data[i]);\n                }\n                i++;\n            }\n            masterDataArray.push(slaveDataArray)\n\n            // console.log(\"data array for ::::\", refInstrument.instrumentID, \" with \", channels, \" number of channels. it's data array is:::::\", slaveDataArray)\n\n        }        \n        // console.log(\"masterDataArray::::\", masterDataArray);\n\n        \n    }\n\n    if(key < channels){\n        // console.log(\"currentInstrIndex::::\", currentInstrIndex,\" key::::\", key);\n        // console.log(\"masterDataArray::::\", masterDataArray);\n        return masterDataArray[currentInstrIndex - 1][key];\n    }\n    \n}\n\nexport default helper(validateDExto);\n","import { computed } from '@ember/object';\nimport { helper } from '@ember/component/helper';\nimport EmberObject from '@ember/object';\n\nexport function validateInitialChannels(params) {\n    const channelString = 'ch' + params[0];\n    \n    const referenceAnchorObj = params[1];\n    // console.log(\"channelString:\");\n    // console.log(channelString);\n    console.log(\"params:\");\n    console.log(params);\n    console.log(\"referenceAnchorObj:\");\n    console.log(referenceAnchorObj);\n    \n    if (channelString in referenceAnchorObj){\n        return true;\n    }else{\n        return false;\n    }\n}\n\nexport default helper(validateInitialChannels);\n","export { default } from 'ember-render-helpers/helpers/will-destroy-helper';\n","export { default } from 'ember-render-helpers/helpers/will-destroy';\n","export { default } from \"ember-truth-helpers/helpers/xor\";\n","import initializerFactory from 'ember-cli-app-version/initializer-factory';\nimport config from '../config/environment';\n\nlet name, version;\nif (config.APP) {\n  name = config.APP.name;\n  version = config.APP.version;\n}\n\nexport default {\n  name: 'App Version',\n  initialize: initializerFactory(name, version),\n};\n","import '@ember-data/request-utils/deprecation-support';\n\n/*\n  This code initializes EmberData in an Ember application.\n*/\nexport default {\n  name: 'ember-data',\n  initialize(application) {\n    application.registerOptionsForType('serializer', { singleton: false });\n    application.registerOptionsForType('adapter', { singleton: false });\n  },\n};\n","export { default } from \"ember-simple-auth/initializers/ember-simple-auth\";\n","import config from '../config/environment';\nimport RedirectHandler from 'torii/redirect-handler';\n\nexport default {\n  name: 'torii-callback',\n  before: 'torii',\n  initialize(application) {\n    if (arguments[1]) {\n      // Ember < 2.1\n      application = arguments[1];\n    }\n\n    if (config.torii && config.torii.disableRedirectInitializer) {\n      return;\n    }\n\n    application.deferReadiness();\n    RedirectHandler.handle(window).catch(function () {\n      application.advanceReadiness();\n    });\n  },\n};\n","import bootstrapSession from 'torii/bootstrap/session';\nimport { getConfiguration } from 'torii/configuration';\n\nexport default {\n  name: 'torii-session',\n  after: 'torii',\n\n  initialize(application) {\n    if (arguments[1]) {\n      // Ember < 2.1\n      application = arguments[1];\n    }\n\n    const configuration = getConfiguration();\n    if (!configuration.sessionServiceName) {\n      return;\n    }\n\n    bootstrapSession(application, configuration.sessionServiceName);\n  },\n};\n","import bootstrapTorii from 'torii/bootstrap/torii';\nimport { configure } from 'torii/configuration';\nimport config from '../config/environment';\n\nvar initializer = {\n  name: 'torii',\n\n  initialize(application) {\n    if (arguments[1]) {\n      // Ember < 2.1\n      application = arguments[1];\n    }\n\n    configure(config.torii || {});\n    bootstrapTorii(application);\n  },\n};\n\nexport default initializer;\n","export { default, initialize } from 'ember-leaflet/initializers/leaflet-assets';\n","import ENV from '../config/environment';\nimport Config from 'ember-bootstrap/config';\nimport { registerLibrary } from 'ember-bootstrap/version';\n\nexport function initialize(/* container, application */) {\n  Config.load(ENV['ember-bootstrap'] || {});\n  registerLibrary();\n}\n\nexport default {\n  name: 'load-bootstrap-config',\n  initialize,\n};\n","import initialize from 'ember-modal-dialog/instance-initializers/add-modals-container';\n\nexport default {\n  name: 'add-modals-container',\n  initialize,\n};\n","/* eslint-disable ember/new-module-imports */\n\nimport Ember from 'ember';\nimport bootstrapRouting from 'torii/bootstrap/routing';\nimport { getConfiguration } from 'torii/configuration';\nimport getRouterInstance from 'torii/compat/get-router-instance';\nimport getRouterLib from 'torii/compat/get-router-lib';\nimport 'torii/router-dsl-ext';\n\nexport default {\n  name: 'torii-setup-routes',\n  initialize(applicationInstance /*, registry */) {\n    const configuration = getConfiguration();\n\n    if (!configuration.sessionServiceName) {\n      return;\n    }\n\n    let _router = getRouterInstance(applicationInstance);\n    const router = applicationInstance.lookup('service:router');\n\n    var setupRoutes = function () {\n      let routerLib = getRouterLib(_router);\n      var authenticatedRoutes = routerLib.authenticatedRoutes;\n      var hasAuthenticatedRoutes = !Ember.isEmpty(authenticatedRoutes);\n      if (hasAuthenticatedRoutes) {\n        bootstrapRouting(applicationInstance, authenticatedRoutes);\n      }\n\n      router.off('routeWillChange', setupRoutes);\n    };\n\n    router.on('routeWillChange', setupRoutes);\n  },\n};\n","/* eslint-disable no-prototype-builtins */\nimport { lookup } from 'torii/lib/container-utils';\nimport { getConfiguration } from 'torii/configuration';\n\nexport default {\n  name: 'torii-walk-providers',\n  initialize(applicationInstance) {\n    let configuration = getConfiguration();\n    // Walk all configured providers and eagerly instantiate\n    // them. This gives providers with initialization side effects\n    // like facebook-connect a chance to load up assets.\n    for (var key in configuration.providers) {\n      if (configuration.providers.hasOwnProperty(key)) {\n        lookup(applicationInstance, 'torii-provider:' + key);\n      }\n    }\n  },\n};\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","// app/models/log-viewer.js\nimport Model, { attr, belongsTo } from '@ember-data/model';\n\nexport default class AlertEventModel extends Model {\n  @belongsTo('alert', { async: false, inverse: null }) alert;\n\n  @attr('number') level;\n  @attr('string') message;\n  @attr('date') triggeredAt;\n  @attr('boolean') isMuted;\n}","// app/models/log-viewer.js\nimport Model, { attr, belongsTo } from '@ember-data/model';\n\nexport default class AlertProfileModel extends Model {\n  @attr('string') name;\n  @attr('string') note;\n  @attr('string') evaluationType;\n  @attr('string') instrumentId;\n  @attr('boolean') isActive;\n  @attr('boolean') isMuted;\n  @attr('date') createdAt;\n  @attr('number') level;\n  @attr('number') counter;\n  @attr('date') lastTriggeredAt;\n}\n","// app/models/log-viewer.js\nimport Model, { attr, belongsTo } from '@ember-data/model';\n\nexport default class AlertModel extends Model {\n  @attr('number') counter;\n  @attr('date') createdAt;\n  @attr('string') evaluationType;\n  @attr('string') instrumentId;\n  @attr('boolean') isAcknowledged;\n  @attr('boolean') isActive;\n  @attr('boolean') isMuted;\n  @attr('date') lastDataReceivedAt;\n  @attr('date') lastEvaluatedAt;\n  @attr('date') lastTriggeredAt;\n  @attr('number') level;\n  @attr('string') name;\n  @attr() channels;\n  @attr('string') note;\n  @attr() deliveryMethod;\n  @attr('string') phone;\n  @attr('string') email;\n  // new delivery contract (used to prefill the edit form when the BE returns them)\n  @attr() isDeliveryMethod;\n  @attr() deliveryMethodData;\n  @attr() recipients;\n  @attr('object') parameters;\n  @attr('number') softResetCounter;\n}\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    number: DS.attr('number'),\n    distance: DS.attr('number'),\n    instrument: DS.belongsTo('instrument', { async: true, inverse: 'anchors' })\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    timestamp: DS.attr('string', {defaultValue: \"\"}),\n    location: DS.attr('string', {defaultValue: \"\"}),\n    east: DS.attr('number', {defaultValue: null}),\n    north: DS.attr('number', {defaultValue: null}),\n    depth: DS.attr('number', {defaultValue: null}),\n    comments: DS.attr('string', {defaultValue: \"\"}),\n    isVisible: DS.attr('boolean', {defaultValue: true}),\n    delay: DS.attr('string', {defaultValue: 0}),\n    \n    // level: DS.attr('string', {defaultValue: \"\"}),\n    level: DS.belongsTo('lookup', {async: true, inverse: null}),\n    project: DS.belongsTo('lookup', {async: true, inverse: null}),\n    \n    stope: DS.attr('string', {defaultValue: \"\"}),\n    tonnes: DS.attr('number', {defaultValue: 0}),\n    size: DS.attr('number', null),\n    blastType: DS.belongsTo('blast-type', { async: false, inverse: 'blastEvent' })\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    title: DS.attr(),\n    blastEvent: DS.hasMany('blast-event', { async: true, inverse: 'blastType' })\n});\n","import Model, { attr, belongsTo } from '@ember-data/model';\n\nexport default class BluVibeV2DataModel2 extends Model {\n  @attr() x;\n  @attr() y;\n  @attr() z;\n  @attr() data;\n  @belongsTo('blu-vibe-v2-profile-model', { async: false, inverse: null }) parent;\n\n}","import Model, { attr, belongsTo } from '@ember-data/model';\n\nexport default class BluVibev2ProfileModel extends Model {\n  @attr('number') sample;\n  @attr('number') range;\n  @attr('number') trigger;\n  @attr('number') duration;\n  @attr('string') timestamp;\n  @attr() analytics;\n  @attr() offset; // This is an array\n  @attr() frequency; // This is an array\n  @attr() amplitude; // This is an array\n  @attr() ppv; // This is an array\n  @attr() ppa; // This is an array\n  @belongsTo('instrument', { async: false, inverse: null }) parent;\n\n}","import Model, { attr, belongsTo } from '@ember-data/model';\n\nexport default class BluVibeV2DataModel extends Model {\n  @attr() x;\n  @attr() y;\n  @attr() z;\n  @belongsTo('blu-vibe-v2-profile-model', { async: false, inverse: null }) parent;\n\n}","// app/models/log-viewer.js\nimport Model, { attr, belongsTo } from '@ember-data/model';\n\nexport default class CalibrationCalibrationProfile extends Model {\n  @attr('string') type;\n  @attr('string') typeID;\n  @attr('string') unit;\n  @attr('string') minLimit;\n  @attr('string') maxLimit;\n  @attr() checkpointPositions; \n  @attr('string') creationEmployee;\n  @attr('number') checkpointSpeed;\n  @attr('number') checkpointDelay;\n  @attr('number') checkpointSampleSize;\n  @attr('number') checkpointCurrentTargetBuffer;\n  @attr('number') channels;\n}\n","// app/models/log-viewer.js\nimport Model, { attr, belongsTo } from '@ember-data/model';\n\nexport default class CalibrationInstrumentDataModel extends Model {\n  @belongsTo('calibration-instrument-profile', { async: true, inverse: null }) calibrationID;\n  @attr('string') value;\n}\n","// app/models/log-viewer.js\nimport Model, { attr, belongsTo } from '@ember-data/model';\n\nexport default class CalibrationInstrumentLookupModel extends Model {\n  @belongsTo('calibration-instrument-profile', { async: true, inverse: null }) calibrationID;\n  @attr('string') value;\n}\n","// app/models/log-viewer.js\nimport Model, { attr, belongsTo } from '@ember-data/model';\n\nexport default class CalibrationInstrumentProfileModel extends Model {\n  @attr('string') sensorID;\n  @attr('string') sensorName;\n  @attr('string') sensorType;\n  @attr('string') calibrationID;\n  @attr('date') calibrationDate;\n  @attr('string') employee;\n  @attr('number') minLimit;\n  @attr('number') maxLimit;\n  @attr('string') jobID;\n  @attr('number') channels;\n  @attr('string') rigReferenceID;\n  @attr('string') rigReferenceCalibrationValue;\n  @attr('string') rigReferenceCalibrationDate;\n  @attr('string') type;\n  @attr('string') sensorDescription;\n  @attr('string') anchorDataValue;\n  @attr('string') checkpointPositions;\n}\n","// app/models/log-viewer.js\nimport Model, { attr, belongsTo } from '@ember-data/model';\n\nexport default class CalibrationTypeModel extends Model {\n  @attr('number') typeID;\n  @attr('string') typeValue;\n  @attr('string') typeCategory;\n}\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    instrument: DS.attr('string'),\n    hasTemp: DS.attr('boolean'),\n    units: DS.attr('string'),\n    temporalDisplacementName: DS.attr('string'),\n    temporalVelocityName: DS.attr(),\n    temporalAccelerationName: DS.attr(),\n    temporalStrainName: DS.attr(),\n    temporalStrainRateName: DS.attr(),\n    temporalLoadName: DS.attr(),\n    spatialDisplacementName: DS.attr(),\n    spatialVelocityName: DS.attr(),\n    spatialAccelerationName: DS.attr(),\n    spatialStrainName: DS.attr(),\n    spatialStrainRateName: DS.attr(),\n    spatialLoadName: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    frequency: DS.attr(),\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    frequency: DS.attr(),\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\n\nexport default DS.Model.extend({\n  parentGateway: DS.belongsTo('gateway', { async: true, inverse: null}),\n  childGateway: DS.belongsTo('gateway', { async: true, inverse: null }),\n  isCurrent: DS.attr('boolean'),\n});","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    intervalValue: DS.attr('number'),\n    intervalName: DS.attr('string'),\n    intervalGroupName: DS.attr('string'),\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    active: DS.attr('number'),\n    inactive: DS.attr('number'),\n    total: DS.attr('number')\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    title: DS.attr('string'),\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend( {\n\n  // Add other attributes that match your Django model fields\n  parentGateway: DS.belongsTo('gateway', { inverse: 'children', async: false }),\n  children: DS.hasMany('gateway', { inverse: 'parentGateway', async: true }),\n\n  name: DS.attr('text'),\n  gatewayType: DS.belongsTo('gateway-type', {async: false, inverse: null}),\n  project: DS.attr('text'),\n  location: DS.attr('text'),\n  depth: DS.attr('number'),\n  level: DS.attr('text'),\n  installDate: DS.attr(),\n  installedBy: DS.attr('text'),\n  purpose: DS.attr('text'),\n  notes: DS.attr('text'),\n  gatewayTypeID: DS.attr(),\n  active: DS.attr('boolean'),\n\n  // childRelations: DS.hasMany('gateway-child-relation', { async: true, inverse: null }),\n  // parentRelations: DS.hasMany('gateway-child-relation', { async: true, inverse: null }),\n  \n  gatewayReadInterval: DS.belongsTo('gateway-interval', {async: false, inverse: null}),\n  gatewayUploadInterval: DS.belongsTo('gateway-interval', {async: false, inverse: null}),\n  gatewayMeshCycleInterval: DS.belongsTo('gateway-interval', {async: false, inverse: null}),\n  gatewayTransmissionPowerInterval: DS.belongsTo('gateway-interval', {async: false, inverse: null}),\n  \n  currentParent: DS.attr('string'),\n\n  targetUrl: DS.attr('text'),\n  lteBand: DS.attr('text'), \n  uploadStatus: DS.attr('boolean'),\n  apn: DS.attr('text'),\n  parentGatewayId: DS.attr(),\n  meshID: DS.attr('number'),\n  hasChildren: DS.attr('boolean'),\n  childrenDetails: DS.attr(),\n  \n})\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    title: DS.attr('string')\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    active: DS.attr('number'),\n    inactive: DS.attr('number'),\n    total: DS.attr('number')\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    title: DS.attr('string'),\n    base_unit: DS.attr('string'),\n    vendor: DS.belongsTo('vendor', {async: false, inverse: null}),\n});\n","import { computed } from '@ember/object';\nimport DS from 'ember-data';\n\nexport default DS.Model.extend({\n    channelsNum: DS.attr(),\n    subModel: DS.attr('text'),\n    portsNum: DS.attr(),\n    name: DS.attr('text'),\n    zeroTimestamp: DS.attr(),\n    location: DS.attr('text'),\n    east: DS.attr('number'),\n    north: DS.attr('number'),\n    depth: DS.attr('number'),\n    azimuth: DS.attr('text'),\n    dip: DS.attr('text'),\n    project: DS.attr('text'),\n    level: DS.attr('text'),\n    borehole: DS.attr('text'),\n    installDate: DS.attr(),\n    installedBy: DS.attr('text'),\n    purpose: DS.attr('text'),\n    notes: DS.attr('text'),\n    anchorCount: DS.attr('digits'),\n    anchors: DS.hasMany('anchor', {async: true, inverse: 'instrument'}),\n    vwproperty: DS.hasMany('vwproperty', {async: false, inverse: 'instrument'}),\n    headAt: DS.belongsTo('head-at', {async: false, inverse: null}),\n    instrumentType: DS.belongsTo('instrument-type', {async: false, inverse: null}),\n    instrumentTypeID: DS.attr(),\n    instrumentStiffness: DS.attr('digits'),\n    instrumentLength: DS.attr('digits'),\n    strokeLength: DS.attr('digits'),\n    baseLength: DS.attr('digits'),\n    headExclusionLength: DS.attr('digits'),\n    gaugeLength: DS.attr('digits'),\n    referenceAnchor: DS.attr('text'),\n    bulbed: DS.attr('boolean'),\n    plated: DS.attr('boolean'),\n    stacked: DS.attr('boolean'),\n    active: DS.attr('boolean'),\n    elasticLimitPct: DS.attr('digits'),\n    plasticLimitPct: DS.attr('digits'),\n    ultimateLimitPct: DS.attr('digits'),\n    elasticLimitFce: DS.attr('digits'),\n    plasticLimitFce: DS.attr('digits'),\n    ultimateLimitFce: DS.attr('digits'),\n    youngsModulus: DS.attr('digits'),\n    crossSectionalArea: DS.attr('digits'),\n    boltDiameter: DS.attr('digits'),\n    selectedAnchor: DS.attr('number'),\n    calculatedElasticLimitForce: computed('elasticLimitPct', 'instrumentStiffness', function() {\n        let elf = 0; //this.get('elasticLimitFce');\n        elf = this.axialStiffness * this.elasticLimitPct;  \n        this.elasticLimitFce = elf.toFixed(2);\n        console.log(\"axialStiffness::: \" + this.axialStiffness);\n        console.log(\"elasticLimitPct::: \" + this.elasticLimitPct);\n        this.elasticLimitFce = elf.toFixed(2);\n                \n        return elf.toFixed(2)\n    }),\n    vendor: DS.belongsTo('vendor', {async: false, inverse: null}),\n\n    axialStiffness: computed('youngsModulus', 'crossSectionalArea', function() {\n        if(this.crossSectionalArea == null || this.crossSectionalArea == undefined || this.crossSectionalArea == 0){\n            return 0.0;\n        }\n        // Avoid mutating youngsModulus during the getter — Ember 5 disallows\n        // consume + update of the same property in one computation.\n        let ym = this.youngsModulus;\n        if(ym == null || ym == undefined || ym == 0){\n            ym = 200.00;\n        }\n        let stiffness = ((ym * this.crossSectionalArea) / 100).toFixed(2);\n\n        console.log(\"stiffness Youngs Modulus::: \" + ym);\n        console.log(\"stiffness CrossSection::: \" + this.crossSectionalArea);\n        console.log(\"stiffness: \" + stiffness);\n        return stiffness;\n    }),\n    //This bullcrap, why? check Vlok email. \n    instrumentPosition1: DS.belongsTo('instrument', { async: false, inverse: null }),\n    instrumentPosition2: DS.belongsTo('instrument', { async: false, inverse: null }),\n    instrumentPosition3: DS.belongsTo('instrument', { async: false, inverse: null }),\n    instrumentPosition4: DS.belongsTo('instrument', { async: false, inverse: null }),\n    instrumentPosition5: DS.belongsTo('instrument', { async: false, inverse: null }),\n    \n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    isValidKey: DS.attr('boolean'),\n    startDate: DS.attr('string'),\n    endDate: DS.attr('string'),\n    numInst: DS.attr('number'),\n    softwareVersion: DS.attr('string'),\n    companyName: DS.attr('string'),\n    modules: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    isValid: DS.attr('boolean'),\n    withinLimit: DS.attr('boolean'),\n    companyName: DS.attr('string'),\n    modules: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","// app/models/log-viewer.js\nimport Model, { attr, belongsTo } from '@ember-data/model';\n\nexport default class LogViewerModel extends Model {\n  @attr('date') creationDatetime;\n  @belongsTo('lookup', { async: false, inverse: null }) errorType;\n  @attr('string') deviceType;\n  @attr('string') deviceId;\n  @attr('string') message;\n}\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n  name: DS.attr('string'),\n  type: DS.attr('string'),\n  value: DS.attr('string')\n\n});","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    title: DS.attr('string'),\n    symbol: DS.attr('string'),\n    unit: DS.attr('string')\n});\n","// app/models/oauth-provider.js\nimport DS from 'ember-data';\n\nexport default DS.Model.extend({\n  providerName: DS.attr('string'),\n  apiKey: DS.attr('string'),\n  clientId: DS.attr('string'),\n  clientSecret: DS.attr('string'),\n  authorizationBaseUrl: DS.attr('string'),\n  tokenUrl: DS.attr('string'),\n  redirectUri: DS.attr('string'),\n  // Add more attributes as necessary\n});\n","// app/models/log-viewer.js\nimport Model, { attr, belongsTo } from '@ember-data/model';\n\nexport default class ValidationPacksProfileModel extends Model {\n  @attr('string') packType;\n  @attr('string') name;\n  @attr('string') min;\n  @attr('string') max;\n  @attr('string') creationEmployee;\n  @attr('number') checkpointDelay;\n  @attr('date') creationDate;\n  @attr('number') channels;\n  @attr('number') phase1LoadMinRange;\n  @attr('number') phase1LoadMaxRange;\n  @attr('number') phase1UnloadMinRange;\n  @attr('number') phase1UnloadMaxRange;\n  @attr('number') phase2LoadMinRange2;\n  @attr('number') phase2LoadMaxRange2;\n  @attr('number') phase2UnloadMinRange2;\n  @attr('number') phase2UnloadMaxRange2;\n  @attr('number') acceptedUnloadVariance;\n  @attr('number') acceptedLoadVariance;\n  @attr('object') coilsProfile;\n}\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    title: DS.attr('string'),\n    isRequired: DS.attr('boolean'),\n    defaultValue: DS.attr('string'),\n    value: DS.attr('string'),\n    valueType: DS.attr('string')\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","// app/models/log-viewer.js\nimport Model, { attr, belongsTo } from '@ember-data/model';\n\nexport default class CalibrationRigModel extends Model {\n  @attr('string') rigID;\n  @attr('string') rigName;\n  @attr('string') rigIP;\n  @attr('string') rigCategory;\n  @attr('string') creationEmployee;\n  @attr('string') creationDate;\n  @attr('string') rigReferenceID;\n  @attr('string') rigReferenceCalibrationValue;\n  @attr('string') rigReferenceCalibrationDate;\n  @attr('object') activityJSON;\n  @attr('string') company;\n}\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    timestamp: DS.attr('string', {defaultValue: \"\"}),\n    location: DS.attr('string', {defaultValue: \"\"}),\n    east: DS.attr('number', {defaultValue: null}),\n    north: DS.attr('number', {defaultValue: null}),\n    depth: DS.attr('number', {defaultValue: null}),\n    comments: DS.attr('string', {defaultValue: \"\"}),\n    isVisible: DS.attr('boolean', {defaultValue: true}),\n    momentMagnitude: DS.attr('number', {defaultValue: 0}),\n    seismicMoment: DS.attr('number', {defaultValue: 0}),\n    sourceRadius: DS.attr('number', {defaultValue: 0}),\n    peakParticleVelocity: DS.attr('number', {defaultValue: 0}),\n    peakParticleAcceleration: DS.attr('number', {defaultValue: 0}),\n    energy: DS.attr('number', {defaultValue: 0}),\n    size: DS.attr('number', null),\n    seismicType: DS.belongsTo('seismic-type', { async: false, inverse: null })\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    title: DS.attr(),\n    seismicEvent: DS.hasMany('seismic-event', { async: true, inverse: null })\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\n//for temperature in gateway health readings.\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","// app/models/log-viewer.js\nimport Model, { attr, belongsTo } from '@ember-data/model';\n\nexport default class ValidationPacksProfileModel extends Model {\n  @attr('number') validationID;\n  @attr('string') packID;\n  @attr('string') company;\n  @attr('string') packName;\n  @attr('string') packType;\n  @attr('string') min;\n  @attr('string') max;\n  @attr('number') channels;\n  @attr('string') manufactureDate;\n  @attr('string') employee;\n}\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","// app/models/vendor.js\nimport Model, { attr } from '@ember-data/model';\n\nexport default class VendorModel extends Model {\n  @attr('string') name;\n  @attr('string') instrumentTitle;\n  @attr() instrumentType;\n  @attr('string') vendorType;\n  @attr('boolean') selected;\n}\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    timestamp: DS.attr('string', {defaultValue: \"\"}),\n    instrument: DS.attr('string', {defaultValue: \"\"}),\n    ch1: DS.attr('number', {defaultValue: null}),\n    trigger01: DS.attr('number', {defaultValue: null}),    \n    frequency01: DS.attr('number', {defaultValue: null}),\n    amplitude01: DS.attr('number', {defaultValue: null}),\n    ppv01: DS.attr('number', {defaultValue: null}),\n    ppa01: DS.attr('number', {defaultValue: null}),\n    duration01: DS.attr('number', {defaultValue: null}),\n    ch2: DS.attr('number', {defaultValue: null}),\n    trigger02: DS.attr('number', {defaultValue: null}),    \n    frequency02: DS.attr('number', {defaultValue: null}),\n    amplitude02: DS.attr('number', {defaultValue: null}),\n    ppv02: DS.attr('number', {defaultValue: null}),\n    ppa02: DS.attr('number', {defaultValue: null}),\n    duration02: DS.attr('number', {defaultValue: null}),\n    ch3: DS.attr('number', {defaultValue: null}),\n    trigger03: DS.attr('number', {defaultValue: null}),    \n    frequency03: DS.attr('number', {defaultValue: null}),\n    amplitude03: DS.attr('number', {defaultValue: null}),\n    ppv03: DS.attr('number', {defaultValue: null}),\n    ppa03: DS.attr('number', {defaultValue: null}),\n    duration03: DS.attr('number', {defaultValue: null}),\n    ch4: DS.attr('number', {defaultValue: null}),\n    trigger04: DS.attr('number', {defaultValue: null}),    \n    frequency04: DS.attr('number', {defaultValue: null}),\n    amplitude04: DS.attr('number', {defaultValue: null}),\n    ppv04: DS.attr('number', {defaultValue: null}),\n    ppa04: DS.attr('number', {defaultValue: null}),\n    duration04: DS.attr('number', {defaultValue: null}),\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    values: DS.attr()\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    modelName: DS.attr(),\n    vwproperty: DS.hasMany('vwproperty', {async: false, inverse: 'vwmodel'}),\n    vwvendor: DS.belongsTo('vwvendor', {async: false, inverse: 'vwmodel'})\n});\n","import { tracked } from '@glimmer/tracking';\nimport DS from 'ember-data';\n\nexport default DS.Model.extend({\n    port: DS.attr('number'),\n    tempChan: DS.attr(),\n    serial: DS.attr(),\n    calcCoef1: DS.attr('number'),\n    calcCoef2: DS.attr('number'),\n    calcCoef3: DS.attr('number'),\n    calcCoef4: DS.attr('number'),\n    calcCoef5: DS.attr('number'),\n    calcCoef6: DS.attr('number'),\n    calcCoef7: DS.attr('number'),\n    calcCoef8: DS.attr('number'),\n    instrument: DS.belongsTo('instrument', {async: false, inverse: 'vwproperty'}),\n    vwmodel: DS.belongsTo('vwmodel', {async: true, inverse: 'vwproperty'}),\n\n    // Non-persistent properties\n    vendor: tracked({}),\n    modelTypes: tracked([]),\n});\n","import DS from 'ember-data';\n\nexport default DS.Model.extend({\n    vendorName: DS.attr(),\n    vwmodel: DS.hasMany('vwmodel', {async: true, inverse: 'vwvendor'})\n});\n","export { default } from \"ember-basic-dropdown/modifiers/basic-dropdown-trigger\";\n","export { default } from 'ember-ref-bucket/modifiers/create-ref';\n","export { default } from '@ember/render-modifiers/modifiers/did-insert';\n","export { default } from '@ember/render-modifiers/modifiers/did-update';\n","export { default } from \"ember-focus-trap/modifiers/focus-trap\";\n","export { default } from \"ember-popper-modifier/modifiers/popper-tooltip\";\n","export { default } from \"ember-popper-modifier/modifiers/popper\";\n","export { default } from \"ember-style-modifier/modifiers/style\";\n","export { default } from '@ember/render-modifiers/modifiers/will-destroy';\n","import EmberRouter from '@ember/routing/router';\nimport config from './config/environment';\n\nexport default class Router extends EmberRouter {\n  location = config.locationType;\n  rootURL = config.rootURL;\n}\n\nRouter.map(function () {\n  this.route('login');\n  this.route('register');\n  this.route('my-profile');\n  this.route('forgot-password');\n  this.route('reset-password', { path: '/reset-password/:token' });\n  this.route('index', { path: '/' });\n  this.route('instruments');\n  this.route('create-instrument');\n  this.route('edit-instrument', { path: '/instrument/:instrument_id' });\n  this.route('gateway');\n  this.route('create-gateway');\n  this.route('edit-gateway', { path: '/gateway/:gateway_id' });\n  \n  this.route('log-viewer');\n\n  this.route('raw-gateway-data', { path: '/gateway/:gateway_id/raw-gateway-data' });\n  this.route('settings');\n  this.route('seismic-events');\n  this.route('blast-events');\n  this.route('vibration-events');\n  this.route('keys');\n  this.route('list-lookups');\n  this.route('create-lookup');\n  this.route('sensor-calibration');\n  this.route('packs-validation');\n  this.route('sensor-calibration-analytics');\n  this.route('packs-validation-analytics');\n  this.route('alerts');\n  this.route('contact-us');\n  this.route('have-an-issue');\n  this.route('create-alert-profile');\n  this.route('edit-alert-profile', { path: '/alert/:id' });\n\n  this.route('raw-data', { path: '/instrument/:instrument_id/raw-data' });\n\n  this.route('temporal-gateway-graphs', { path: '/gateway/:gateway_id/temporal-gateway-graph'}, function() {\n    this.route('temporal-gateway-graph', { path: '/:model_name' });\n  });\n\n  this.route('temporal-graphs', { path: '/instrument/:instrument_id/temporal-graph'}, function() {\n    this.route('temporal-graph', { path: '/:model_name' });\n  });\n\n  this.route('spatial-graphs', { path: '/instrument/:instrument_id/spatial-graph'}, function() {\n    this.route('spatial-graph', { path: '/:model_name' });\n  });\n\n  this.route('frequency-graphs', { path: '/instrument/:instrument_id/frequency-graph'}, function() {\n    this.route('frequency-graph', { path: '/:model_name' });\n  });\n  //raw-data = frequency-events\n  this.route('frequency-events', { path: '/instrument/:instrument_id/frequency-events' });\n  this.route('frequency-events.frequency-event', { path: '/instrument/:instrument_id/frequency-events/:profile_id/frequency-event' });\n  this.route('raw-frequency-events-data', { path: '/instrument/:instrument_id/raw-frequency-events-data' });\n});\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class AuthenticatedRoute extends Route {\n  @service session;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class AlertsRoute extends Route.extend({\n\n  queryParams: {\n    page: {\n        refreshModel: true\n    },\n    page_size: {\n        refreshModel: true\n    },\n    ordering: {\n        refreshModel: true\n    },\n    search: {\n        refreshModel: true\n    },\n    instrumentId: {\n        refreshModel: true\n    },\n    startCreationDate: {\n        refreshModel: true\n    },\n    endCreationDate: {\n        refreshModel: true\n    },\n    startTriggerDate: {\n        refreshModel: true\n    },\n    endTriggerDate: {\n        refreshModel: true\n    },\n    level: {\n        refreshModel: true\n    },\n  },\n      \n  actions: {\n    refreshModel() {\n      this.refresh();\n    }\n  },\n\n  afterModel: function(resolvedModel, transition) {\n    if (!resolvedModel || !resolvedModel.alerts) return;\n    \n    let pageSize = resolvedModel.alerts.query.page_size,\n        alertsMeta = resolvedModel.alerts.meta,\n        alertsController = this.controllerFor('alerts')\n    ;\n\n    this.session.store.refreshLicence();\n\n    alertsController.send('updateProperty', 'pageSize', pageSize);\n    alertsController.send('updateProperty', 'alertsMeta', alertsMeta);\n},\n\n}) {\n  @service session;\n  @service store;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  };\n\n  model(params) {\n    const _this = this;\n \n    return new Promise(function(resolve,reject){\n        \n      let alertsArr = _this.store.query('alert', params);\n      let globalDatetimeFormatProjectSetting = _this.store.query('project-setting', {}).then((settings) => {\n          return settings.find(setting => setting.title === 'GLOBAL_DATETIME_FORMAT');\n      });  \n      globalDatetimeFormatProjectSetting.then(function(globalDatetimeFormat){\n        alertsArr.then(function(alerts){\n          resolve({\n              alerts: alerts,\n              globalDatetimeFormat:globalDatetimeFormat,\n          });\n        });\n      });\n    });\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class ApplicationRoute extends Route {\n  @service session;\n\n  async beforeModel() {\n    await this.session.setup();\n  }\n}","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class BlastEventRoute extends Route {\n  @service session;\n  @service store;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  };\n\n  model(params) {\n    const _this = this;\n    return new Promise(function(resolve, reject){\n        let blast = _this.store.findAll('blast', params);\n\n        blast.then(function(blast){\n            resolve({\n              blast:blast,\n            });\n        });\n    });\n  }\n}\n","import { hash } from 'rsvp';\nimport { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class BlastsRoute extends Route.extend({\n    queryParams: {\n        page: {\n            refreshModel: true\n        },\n        page_size: {\n            refreshModel: true\n        },\n        ordering: {\n            refreshModel: true\n        },\n        search: {\n            refreshModel: true\n        }\n    },\n    model(params) {\n        // let levelLookupList = _this.store.query('lookup', { name: 'level' });\n        // let projectLookupList = _this.store.query('lookup', { name: 'project' });\n  \n        return hash({\n            blastEvents: this.store.query('blast-event', params),\n            blastTypes: this.store.findAll('blast-type'),\n            levelLookupList: this.store.query('lookup', { name: 'level' }),\n            projectLookupList: this.store.query('lookup', { name: 'project' })\n          \n            //licence: this.get('store').findAll('licence')\n        });\n    },\n    afterModel: function(resolvedModel) {\n        let pageSize = resolvedModel.blastEvents.query.page_size,\n            eventsMeta = resolvedModel.blastEvents.meta,\n            blastEventsController = this.controllerFor('blast-events')\n        ;\n\n        blastEventsController.send('updateProperty', 'pageSize', pageSize);\n        blastEventsController.send('updateProperty', 'eventsMeta', eventsMeta);\n    }\n}) {\n    @service session;\n    @service store;\n\n    beforeModel(transition) {\n      this.session.requireAuthentication(transition, 'login');\n    };\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class ContactUsRoute extends Route {\n  @service session;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  }\n\n  async model() {\n    return {};\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { hash } from 'rsvp';\n\nexport default class CreateAlertProfileRoute extends Route {\n  @service session;\n  @service store;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  };\n\n  model(params) {\n    const store = this.store;\n\n    return hash({\n\n      globalDatetimeFormat: store.query('project-setting', {}).then(settings =>\n        settings.find(setting => setting.title === 'GLOBAL_DATETIME_FORMAT')\n      ),\n\n      dispUnits: store.query('project-setting', {}).then(settings =>\n        settings.find(setting => setting.title === 'DISP_UNITS')\n      ),\n\n      timeUnits: store.query('project-setting', {}).then(settings =>\n        settings.find(setting => setting.title === 'TIME_UNITS')\n      ),\n\n      tempUnits: store.query('project-setting', {}).then(settings =>\n        settings.find(setting => setting.title === 'TEMP_UNITS')\n      ),\n\n    });\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class CreateGatewayRoute extends Route {\n  @service session;\n  @service router;\n  @service store;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  };\n  afterModel(model) {\n    model.gatewayTypes = Array.from(model.gatewayTypes).sort(compare);\n  };\n  getPerms = function() {\n    let perms = null;\n    try{\n      perms = this.session.data.authenticated.modules;\n    } catch {}\n    return perms;\n  };\n  model(params) {\n    const _this = this;\n    return new Promise(function(resolve, reject){\n      let gateways = _this.store.query('gateway', {small: 'false'})\n      let gatewayTypes = _this.store.findAll('gateway-type');\n      \n      gateways.then(function(gateways){\n        gatewayTypes.then(function(gatewayTypes){\n          resolve({\n            gateways:gateways,\n            gatewayTypes:gatewayTypes\n          });\n        });\n      });\n    });\n  }\n}\n\nfunction compare( a, b ) {\n  // String compare — IDs may contain an uppercase letter in the new 11-char grouped format.\n  // parseInt would drop everything from the letter onward and collapse distinct IDs.\n  return String(a.id).localeCompare(String(b.id));\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class CreateInstrumentRoute extends Route {\n  @service session;\n  @service router;\n  @service store;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  };\n  afterModel(model) {\n    model.instrumentTypes = Array.from(model.instrumentTypes).sort(compare);\n  };\n  getPerms = function() {\n    let perms = null;\n    try{\n      perms = this.session.data.authenticated.modules;\n    console.log(\"this.session.data.authenticated data modules\")\n    console.log(this.session.data.authenticated)\n    console.log(\"create-instrument perms\")\n    console.log(perms)\n    } catch {}\n    return perms;\n  };\n  model(params) {\n    const _this = this;\n    return new Promise( function(resolve, reject){\n      let instrument = {};\n      let vendors = _this.store.findAll('vendor');\n      let instrumentTypes = _this.store.findAll('instrument-type');\n      let vwVendors = _this.store.findAll('vwvendor')\n      let vwModels = _this.store.findAll('vwmodel');\n      let headAts = _this.store.findAll('head-at');\n      let levelLookupList = _this.store.query('lookup', { name: 'level' });\n      let projectLookupList = _this.store.query('lookup', { name: 'project' });\n\n      // let instruments = await _this.store.query('instrument', {small: 'false', search: 'dExto'}) //Exclude BluVibe from device list\n      // let projectLookupList = _this.store.query('lookup', {filter:{type:'project'}});\n      // let levelLookupList = _this.store.query('lookup', {filter:{type:'level'}});\n\n      \n      instrumentTypes.then(function(instrumentTypes){\n        vendors.then(function(vendors){\n          headAts.then(function(headAts){\n            vwVendors.then(function(vwVendors){\n              vwModels.then(function(vwModels){\n                projectLookupList.then(function(projectLookupList){\n                  levelLookupList.then(function(levelLookupList){\n\n                    console.log(\"vendors in route/: \")\n                    console.log(vendors)\n                    resolve({\n                      instrumentTypes:instrumentTypes,\n                      vendors:vendors,\n                      headAts:headAts,\n                      vwVendors:vwVendors,\n                      vwModels:vwModels,\n                      projectLookupList: projectLookupList,\n                      levelLookupList: levelLookupList\n                    });\n                  })\n                })\n              })\n            })\n          })\n        });\n      });\n    });\n  }\n}\n\nfunction compare( a, b ) {\n  // String compare — instrument IDs may contain an uppercase letter at position 7 in the\n  // new 11-char grouped format (e.g. \"260121B1001\"); parseInt would silently drop everything\n  // from the letter onward, collapsing distinct IDs to the same numeric prefix.\n  return String(a.id).localeCompare(String(b.id));\n}","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class CreateLookupRoute extends Route {\n  @service session;\n  @service router;\n  @service store;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  };\n\n  afterModel(model) {};\n  \n  getPerms = function() {\n    let perms = null;\n    try{\n      perms = this.session.data.authenticated.modules;\n    } catch {}\n    return perms;\n  };\n  \n  async model(params) {\n    const _this = this;\n\n    const lookups = await _this.store.findAll('lookup');\n    // Extract all the names\n    let counter = 1;\n \n    const allNamesWithIds = [];\n    const seenNames = new Set();\n    \n    lookups.forEach(lookup => {\n      const name = lookup.get('name');\n      if (!seenNames.has(name)) {\n        seenNames.add(name);\n        allNamesWithIds.push({\n          id: counter++,\n          name: name\n        });\n      }\n    });\n \n    \n    // Filter unique names\n    const uniqueNames = [...new Set(allNamesWithIds)];\n\n    console.log(\"UniqueNames:::: \" + JSON.stringify(uniqueNames))\n    return {\n      uniqueNames\n    };\n  \n  } //end of model\n\n  \n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { hash } from 'rsvp';\n\nexport default class EditAlertProfileRoute extends Route {\n  @service session;\n  @service store;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  };\n\n  model(params) {\n    const store = this.store;\n\n    return hash({\n\n      alert: store.findRecord('alert', params.id),\n\n      globalDatetimeFormat: store.query('project-setting', {}).then(settings =>\n        settings.find(setting => setting.title === 'GLOBAL_DATETIME_FORMAT')\n      ),\n\n      dispUnits: store.query('project-setting', {}).then(settings =>\n        settings.find(setting => setting.title === 'DISP_UNITS')\n      ),\n\n      timeUnits: store.query('project-setting', {}).then(settings =>\n        settings.find(setting => setting.title === 'TIME_UNITS')\n      ),\n\n      tempUnits: store.query('project-setting', {}).then(settings =>\n        settings.find(setting => setting.title === 'TEMP_UNITS')\n      ),\n\n    });\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default Route.extend({\n  session: service(),\n  store: service(),\n\n  queryParams: {\n    parentGateway: { refreshModel: true }\n  },\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  },\n\n  model(params) {\n    if (params.parentGateway) {\n      localStorage.setItem('parentGateway', params.parentGateway);\n    }\n    const _this = this;\n    return new Promise(function(resolve){\n      let gateway = _this.store.findRecord('gateway', params.gateway_id);\n      let gatewayTypes = _this.store.findAll('gateway-type');\n      let allIntervals = _this.store.findAll('gateway-interval');\n\n      Promise.all([gateway, gatewayTypes, allIntervals])\n        .then(function([gateway, gatewayTypes, intervalResult]) {\n          var intervals = [];\n          intervalResult.forEach(function(interval) { intervals.push(interval); });\n          var gatewayReadingIntervals = intervals.filter(function(i) { return i.get('intervalGroupName') === 'instrument_reading_interval'; });\n          var gatewayUploadIntervals = intervals.filter(function(i) { return i.get('intervalGroupName') === 'upload_interval'; });\n          var gatewayMeshCycleIntervals = intervals.filter(function(i) { return i.get('intervalGroupName') === 'mesh_cycle'; });\n          var gatewayRadioPowerLevelIntervals = intervals.filter(function(i) { return i.get('intervalGroupName') === 'radio_transmission_power_level'; });\n          resolve({\n            gateways: [],\n            gateway: gateway,\n            gatewayTypes: gatewayTypes,\n            gatewayReadingIntervals: gatewayReadingIntervals,\n            gatewayUploadIntervals: gatewayUploadIntervals,\n            gatewayMeshCycleIntervals: gatewayMeshCycleIntervals,\n            gatewayRadioPowerLevelIntervals: gatewayRadioPowerLevelIntervals\n          });\n        });\n    });\n  },\n\n  setupController(controller, model) {\n    this._super(controller, model);\n    if (!controller.parentGateway || controller.parentGateway === 'undefined') {\n      const parentId = model.gateway.get('currentParent') || model.gateway.get('parentGatewayId');\n      if (parentId) {\n        controller.set('parentGateway', parentId);\n      }\n    }\n  },\n});\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class EditInstrumentRoute extends Route.extend({\n  queryParams: {\n  }\n}) {\n  @service session;\n  @service store;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  };\n\n  model(params) {\n    const _this = this;\n    return new Promise(function(resolve, reject){\n      let instrument = _this.store.findRecord('instrument', params.instrument_id);\n      let globalDatetimeFormatProjectSetting = _this.store.query('project-setting', {}).then((settings) => {\n        return settings.find(setting => setting.title === 'GLOBAL_DATETIME_FORMAT');\n      });      \n      let instrumentTypes = _this.store.findAll('instrument-type'),\n      vendors = _this.store.findAll('vendor'),\n      headAts = _this.store.findAll('head-at');\n      \n      let vwVendors = _this.store.findAll('vwvendor');\n      let vwModels = _this.store.findAll('vwmodel');\n      // let vwProperties = _this.store.findAll('vwproperty');\n\n      let levelLookupList = _this.store.query('lookup', { name: 'level' });\n      let projectLookupList = _this.store.query('lookup', { name: 'project' });\n      globalDatetimeFormatProjectSetting.then(function(globalDatetimeFormat){\n        instrument.then(function(instrument){\n          instrument.anchors.then(function(anchors){\n            headAts.then(function(headAts){\n              vwModels.then(function(vwModels){\n                vwVendors.then(function(vwVendors){\n                  instrumentTypes.then(function(instrumentTypes){\n                    vendors.then(function(vendors){\n                      projectLookupList.then(function(projectLookupList){\n                        levelLookupList.then(function(levelLookupList){\n                          resolve({\n                            instrument:instrument,\n                            anchors:anchors,\n                            globalDatetimeFormat:globalDatetimeFormat,\n                            instrumentTypes:instrumentTypes,\n                            headAts:headAts,\n                            vwVendors:vwVendors,\n                            vwModels:vwModels,\n                            vendors:vendors,\n                            projectLookupList: projectLookupList,\n                            levelLookupList: levelLookupList\n                          });\n                        });\n                      });\n                    });\n                  });\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n  }\n}\n","import { inject as service } from '@ember/service';\n// app/routes/login.js\nimport Route from '@ember/routing/route';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default class ForgotPasswordRoute extends Route {\n  @service session;\n  beforeModel(transition) {\n    // if(transition.from == null)\n    //   transition = \"/\"\n    // this.session.prohibitAuthentication(transition);\n  }\n  model() {\n    // console.log(\"ENV:\");\n    // console.log(ENV);\n    // return {\n    //   loginAPI:ENV.API_LOGIN\n    // };\n  }\n}","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default Route.extend({\n    session: service(),\n    store: service(),\n\n    resetController(controller, isExiting) {\n        if (isExiting) {\n            controller.set('page', 1);\n            controller.set('page_size', 20);\n        }\n    },\n\n    queryParams: {\n        page: { refreshModel: true },\n        page_size: { refreshModel: true },\n        advancedStartDate: { refreshModel: true },\n        advancedEndDate: { refreshModel: true },\n    },\n\n    beforeModel(transition) {\n        this.session.requireAuthentication(transition, 'login');\n    },\n\n    model(params) {\n        const _this = this;\n        return new Promise(function(resolve){\n            let globalDatetimeFormatProjectSetting = _this.store.query('project-setting', {}).then((settings) => {\n                return settings.find(setting => setting.title === 'GLOBAL_DATETIME_FORMAT');\n            });\n            let instrument = _this.store.findRecord('instrument', params.instrument_id);\n            if (!params.page) { params.page = 1; }\n            if (!params.page_size) { params.page_size = 20; }\n            let bluvibeV2Profiles = _this.store.query('blu-vibe-v2-profile-model', params);\n\n            globalDatetimeFormatProjectSetting.then(function(globalDatetimeFormat){\n                bluvibeV2Profiles.then(function(bluvibeV2Profiles){\n                    instrument.then(function(instrument){\n                        resolve({\n                            globalDatetimeFormat: globalDatetimeFormat,\n                            bluvibeV2Profiles: bluvibeV2Profiles,\n                            instrument: instrument,\n                        });\n                    });\n                });\n            });\n        });\n    },\n\n    setupController(controller, model) {\n        this._super(controller, model);\n        controller.setProperties({\n            model: model,\n            content: model,\n            instrument: model.instrument,\n            instrumentId: model.instrument.get('id'),\n            subModel: model.instrument.get('subModel'),\n            project: model.instrument.get('project'),\n            location: model.instrument.get('location'),\n            level: model.instrument.get('level'),\n            borehole: model.instrument.get('borehole'),\n            instrumentType: model.instrument.get('instrumentType').get(\"title\"),\n            bluvibeV2Profiles: model.bluvibeV2Profiles,\n            globalDatetimeFormat: model.globalDatetimeFormat\n        });\n    },\n\n    afterModel() {\n    },\n});\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default Route.extend({\n    session: service(),\n    store: service(),\n\n    resetController(controller, isExiting) {\n        if (isExiting) {\n            controller.set('page', 1);\n            controller.set('page_size', 20);\n        }\n    },\n\n    queryParams: {\n        page: { refreshModel: true },\n        page_size: { refreshModel: true },\n        selectedFreqEventDate: { refreshModel: true },\n        analysis_category: { refreshModel: true },\n        method: { refreshModel: true },\n    },\n\n    beforeModel(transition) {\n        this.session.requireAuthentication(transition, 'login');\n    },\n\n    model(params) {\n        const _this = this;\n        return new Promise(function(resolve){\n            if (!params.page && params.page != -1) {\n                params.page = 1;\n                if (!params.page_size) { params.page_size = 20; }\n            } else {\n                params.page = undefined;\n                params.page_size = undefined;\n            }\n            let globalDatetimeFormatProjectSetting = _this.store.query('project-setting', {}).then((settings) => {\n                return settings.find(setting => setting.title === 'GLOBAL_DATETIME_FORMAT');\n            });\n            let instrument = _this.store.findRecord('instrument', params.instrument_id);\n            let bluvibeV2ModelProfiles = _this.store.query('blu-vibe-v2-profile-model', params);\n\n            globalDatetimeFormatProjectSetting.then(function(globalDatetimeFormat){\n                instrument.then(function(instrument){\n                    bluvibeV2ModelProfiles.then(function(bluvibeV2ModelProfiles){\n                        resolve({\n                            instrument: instrument,\n                            profileId: params.profile_id,\n                            bluvibeV2ModelProfiles: bluvibeV2ModelProfiles,\n                            globalDatetimeFormat: globalDatetimeFormat,\n                        });\n                    });\n                });\n            });\n        });\n    },\n\n    setupController(controller, model) {\n        this._super(controller, model);\n        controller.setProperties({\n            model: model,\n            content: model,\n            instrument: model.instrument,\n            profileId: model.profileId,\n            instrumentId: model.instrument.get('id'),\n            instrumentType: model.instrument.get('instrumentType').get(\"title\"),\n            subModel: model.instrument.get('subModel'),\n            bluvibeV2ModelProfiles: model.bluvibeV2ModelProfiles,\n            globalDatetimeFormat: model.globalDatetimeFormat,\n        });\n    },\n\n    afterModel() {\n    },\n});\n","import { hash } from 'rsvp';\nimport { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class FrequencyGraphsRoute extends Route.extend({\n    model(params) {\n        let a = this.store;\n\n        return hash({\n            instrument: this.store.queryRecord('instrument', {instrument_id: params.instrument_id}),\n        });\n    },\n    setupController: function(controller, model) {\n        //in this case the model is an instrument\n        this.controllerFor('frequency-graphs').set(\"content\",model);\n        this.controllerFor('frequency-graphs').activate();\n    }\n}) {\n    @service session;\n    @service router;\n    @service store;\n\n    beforeModel(transition) {\n        this.session.requireAuthentication(transition, 'login');\n        let perms = this.getPerms();\n        if (!('graphing' in perms) || perms['graphing']==false) {\n          this.get('router').transitionTo('instruments');\n        }\n      };\n    \n      getPerms = function() {\n        let perms = null;\n        try{\n          perms = this.session.data.authenticated.modules;\n        } catch {}\n        return perms;\n      };\n  }\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { copy } from 'ember-copy';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport Route from '@ember/routing/route';\n\nexport default Route.extend({\n    store: service(),\n    queryParams: {\n        start_timestamp: {\n            refreshModel: true\n        },\n        end_timestamp: {\n            refreshModel: true\n        },\n        num_points_requested: {\n            refreshModel: true\n        },\n        ref_head_position: {\n            refreshModel: true\n        },\n        ref_anchor: {\n            refreshModel: true\n        },\n        zeroed: {\n            refreshModel: true\n        },\n        raw: {\n            refreshModel: true\n        },\n        flip_signs: {\n            refreshModel: true\n        },\n        event_type: {\n            refreshModel: true\n        },\n        blast_type: {\n            refreshModel: true\n        },\n        seismic_type: {\n            refreshModel: true\n        },\n        frequency: {\n            refreshModel: true\n        },\n        display_records: {\n          refreshModel: true\n        },\n        chart_type: {\n            refreshModel: true\n        },\n        advancedYAxisUnit:{\n            refreshModel: true\n        },\n        advancedStartDate: {\n            refreshModel: true\n        },\n        advancedEndDate: {\n            refreshModel: true\n        },\n        advancedYLeftMax:{\n            refreshModel: true\n        },\n        advancedYLeftMin:{\n            refreshModel: true\n        },\n        advancedYRightMax:{\n            refreshModel: true\n        },\n        advancedYRightMin:{\n            refreshModel: true\n        },\n        advancedXMax:{\n            refreshModel: true\n        },\n        advancedXMin:{\n            refreshModel: true\n        }\n    },\n    model(params) {\n        const _this = this;\n        let page_size = (params.event_type)? 80 : 40;\n        let routeParams = this.paramsFor('frequency-graphs');\n        params.instrument_id = routeParams.instrument_id;\n        \n        \n        // declare default empty promises in case if blase of seismic events are disabled\n        let seismicEvents = new Promise(function(resolve, reject){\n          // succeed\n          resolve(false);\n          // or reject\n          reject();\n        });\n\n        let blastEvents = new Promise(function(resolve, reject){\n          // succeed\n          resolve(false);\n          // or reject\n          reject();\n        });\n\n        return new Promise(function(resolve, reject){    \n            // Resolve zoomData model first, get start_timestamp and end_timestap values to be able to limit events to these boundaries\n            let zoomDataQueryParams = copy(params);\n            zoomDataQueryParams.num_points_requested = 1;\n            _this.store.query(singularize(zoomDataQueryParams.model_name),  zoomDataQueryParams).then(function(zoomData){\n                // let closestZeroTimestamp = \"\";\n                let closestZeroTimestamp = zoomData.meta['closest-zero-timestamp'];\n                let zoomDataStartTimestamp = zoomData.meta['start-timestamp'];\n                let zoomDataEndTimestamp = zoomData.meta['end-timestamp'];\n\n                // get closest_zero_timestamp (the date when an instrument was initialized) of zoomData query and use it as start_timestamp if no other start_timestamp query parameter is specified\n                if (!zoomData.query.start_timestamp) {\n                    params.start_timestamp = zoomData.meta['closest-zero-timestamp'];\n                }\n               \n                let typeID = params.instrument_id.substr(params.instrument_id.length === 9 ? 5 : 6, 1);\n                let prevModel = params.model_name;\n\n                // second call to the same endpoint required because I can only fetch closest_zero_timestamp value from the previous API call\n                // let zoomDataSecondCall = _this.store.query(singularize(params.model_name),  params);\n\n                //let zoomTempData = _this.store.query(Ember.String.singularize('temperature-value'),  params);\n                let temperatureParams = copy(params);\n                temperatureParams.ref_anchor = \"0\";\n                temperatureParams.flip_signs = null;\n                temperatureParams.model_name = \"displacement-values\";\n\n                // let zoomTempData = _this.store.query(\"temperature-value\", temperatureParams);\n\n                // third call should only be called after the first find is completed\n                // let fullRangeData = _this.get('store').query(Ember.String.singularize(params.model_name), {model_name: params.model_name, instrument_id: params.instrument_id, num_points_requested: 300, ref_head_position: params.ref_head_position, ref_anchor: params.ref_anchor, zeroed: params.zeroed, flip_signs: params.flip_signs});\n                // let fullRangeData = _this.get('store').query(singularize(params.model_name), {model_name: params.model_name, instrument_id: params.instrument_id, start_timestamp: closestZeroTimestamp, num_points_requested: 300, ref_head_position: params.ref_head_position, ref_anchor: params.ref_anchor, zeroed: params.zeroed, raw: params.raw, flip_signs: params.flip_signs});\n\n                //let fullRangeTempData = _this.get('store').query(\"temperature-value\", {model_name: params.model_name, instrument_id: params.instrument_id, start_timestamp: closestZeroTimestamp, num_points_requested: 300, ref_head_position: params.ref_head_position, ref_anchor: params.ref_anchor, zeroed: false});\n                // fetch an instrument to be able to get anchor distances and other useful info from the instrument\n                //let instrument = _this.get('store').findRecord('instrument', params.instrument_id, { include: 'anchors' } );\n                console.log(\"Instrument: \" + params.instrument_id);\n                let instrument = _this.store.queryRecord('instrument', { instrument_id: params.instrument_id } );\n\n                let graphs = _this.store.findAll('chart');\n/* \n                // if blast events are requested\n                if (!params.event_type || params.event_type === \"blast\") {\n                    blastEvents = _this.store.query('blast-event', {page_size: page_size, ordering: \"-tonnes\", is_visible: true, blast_type: params.blast_type, start_timestamp: zoomDataStartTimestamp, end_timestamp: zoomDataEndTimestamp});\n                }\n                // if promise events are requested\n                if (!params.event_type || params.event_type === \"seismic\") {\n                    seismicEvents = _this.store.query('seismic-event', {page_size: page_size, ordering: \"-moment_magnitude\", is_visible: true, seismic_type: params.seismic_type, start_timestamp: zoomDataStartTimestamp, end_timestamp: zoomDataEndTimestamp});\n                } */\n\n                //wait for all promises to fulfil and then return resolved promis\n                graphs.then(function(graphs) {\n                    instrument.then(function(instrument){\n                        // zoomDataSecondCall.then(function(zoomDataSecondCall){\n                            // fullRangeData.then(function(fullRangeData){\n                                //seismicEvents.then(function(seismicEvents){\n                                    //blastEvents.then(function(blastEvents){\n                                        // zoomTempData.then(function(zoomTempData){\n                                            //fullRangeTempData.then(function(fullRangeTempData) {\n                                                resolve({\n                                                    graphs:graphs,\n                                                    instrument:instrument,\n                                                    zoomData:zoomData,\n                                                    //fullRangeData:fullRangeData,\n                                                    //seismicEvents:seismicEvents,\n                                                    //blastEvents:blastEvents,\n                                                    // zoomTempData:zoomTempData,\n                                                    //fullRangeTempData:fullRangeTempData\n                                                //});        \n                                            });\n                                        // });\n                                    //});\n                                //});\n                            // });\n                        // });\n                    });\n                });\n            });\n        });\n    },\n    afterModel: function(resolvedModel) {\n        // console.log(\"in afterModel - routes/frequency-graphs/frequency-graph.js\")\n        let frequencyGraphsController = this.controllerFor('frequency-graphs');\n\n        frequencyGraphsController.send('updateProperties', ['instrumentId'], [resolvedModel.zoomData.query.instrument_id]);\n        frequencyGraphsController.send('updateProperties', ['instrumentType'], [resolvedModel.instrument.get('instrumentType').get('title')]);\n        frequencyGraphsController.send('updateProperties', ['name'], [resolvedModel.instrument.get('name')]);\n        frequencyGraphsController.send('updateProperties', ['location'], [resolvedModel.instrument.get('location')]);\n        frequencyGraphsController.send('updateProperties', ['level'], [resolvedModel.instrument.get('level')]);\n        frequencyGraphsController.send('updateProperties', ['borehole'], [resolvedModel.instrument.get('borehole')]);\n        frequencyGraphsController.send('updateProperties', ['project'], [resolvedModel.instrument.get('project')]);\n        frequencyGraphsController.send('updateProperties', ['model_name'], [resolvedModel.zoomData.query.model_name]);\n        frequencyGraphsController.send('updateProperties', ['activeInstrumentMeta'], [resolvedModel.zoomData.meta]);\n        //frequencyGraphsController.send('updateProperties', ['eventType'], [resolvedModel.zoomData.query.event_type]);\n        //frequencyGraphsController.send('updateProperties', ['blastType'], [resolvedModel.zoomData.query.blast_type]);\n        //frequencyGraphsController.send('updateProperties', ['seismicType'], [resolvedModel.zoomData.query.seismic_type]);\n        frequencyGraphsController.send('updateProperties', ['frequency'], [resolvedModel.zoomData.query.frequency]);\n        //TODO::: check to see if this property is the same as in the temporal route file. \n        //frequencyGraphsController.send('updateProperties', ['chart_type'], [resolvedModel.zoomData.query.chart_type]);\n        //console.log(\"modelName::: \" + resolvedModel.zoomData.query.chart_type);\n        \n        //get pretty chart name if chart has multiple parts to it\n        let obj = resolvedModel.graphs;\n        let type = resolvedModel.instrument.get('instrumentTypeID').toString();\n        //get the chart data for the instrument\n        obj.forEach(function(item) {\n            if(item.id === type) {\n                obj = item;\n                return;\n            }\n        });\n        \n        let name = '';\n        name = resolvedModel.zoomData.query.model_name;\n        // console.log(\"chartName:::: \" + name);\n        switch(name) {\n            case 'vibration-event':\n                name = \"PPV vs Frequency\";\n                break;\n            case 'vibration-ppa':\n                name = \"PPA vs Frequency\";\n                break;\n            default:\n                break;\n        }\n\n        let chartName = name;\n        // let chartNameL = chartName.substring(0, chartName.indexOf('-')).capitalize();\n        // let chartNameR = chartName.substring(chartName.indexOf('-') + 1).capitalize();\n        // if(chartNameL !== \"\") {\n        //     chartName = chartNameL + \" \" + chartNameR;\n        // }\n        frequencyGraphsController.send('updateProperties', ['modelName'], [resolvedModel.zoomData.query.model_name]);\n        frequencyGraphsController.send('updateProperties', ['chartData'], [obj]);\n        frequencyGraphsController.send('updateProperties', ['chartDataValueName'], [chartName]);\n        resolvedModel.instrument.get('anchors').then(function(anchors) {\n            frequencyGraphsController.send('updateProperties', ['instrumentAnchors'], [anchors.content ?? anchors]);\n        });\n        frequencyGraphsController.send('updateProperties', ['chart_type'], [resolvedModel.zoomData.query.chart_type]);\n        frequencyGraphsController.send('updateProperties', ['display_records'], [resolvedModel.zoomData.query.display_records]);\n    },\n    actions: {\n        setDataR(data) {\n            let frequencyGraphsController = this.controllerFor('frequency-graphs');\n\n            frequencyGraphsController.send('setData',data);\n        },\n        setChartR(chart) {\n            let frequencyGraphsController = this.controllerFor('frequency-graphs');\n\n            frequencyGraphsController.send('setChart',chart);\n        },\n        willTransition() {\n            let frequencyGraphsController = this.controllerFor('frequency-graphs');\n            frequencyGraphsController.send('updateProperties', ['instrumentId'], [null]);\n            //frequencyGraphsController.send('updateProperties', ['eventType'], [null]);\n            //frequencyGraphsController.send('updateProperties', ['blastType'], [null]);\n            //frequencyGraphsController.send('updateProperties', ['seismicType'], [null]);\n        }\n    }\n});\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class GatewayRoute extends Route.extend({\n  queryParams: {\n    page: {\n        refreshModel: true\n    },\n    page_size: {\n        refreshModel: true\n    },\n    ordering: {\n        refreshModel: true\n    },\n    search: {\n        refreshModel: true\n    }\n  },\n\n  actions: {\n    refreshModel() {\n      this.refresh();\n    }\n  },\n\n  afterModel: function(resolvedModel, transition) {\n    if (!resolvedModel || !resolvedModel.gateway) return;\n    let pageSize = resolvedModel.gateway.query.page_size,\n        gatewayMeta = resolvedModel.gateway.meta,\n        gatewayController = this.controllerFor('gateway')\n    ;\n\n    this.session.store.refreshLicence();\n\n    gatewayController.send('updateProperty', 'pageSize', pageSize);\n    gatewayController.send('updateProperty', 'gatewayMeta', gatewayMeta);\n},\n\n}) {\n  @service session;\n  @service store;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n    // Clear the parentGateway from localStorage\n    window.localStorage.removeItem('parentGateway');\n  };\n\nasync model(params) {\n  try {\n    let queryParams = {\n      ...params,\n      parent_gateway: 'null'\n    };\n\n    let [\n      gateway,\n      gatewayStats\n    ] = await Promise.all([\n      this.store.query('gateway', queryParams),\n      this.store.queryRecord('gateway-stat', {})\n    ]);\n\n    return {\n      gateway,\n      gatewayStats\n    };\n\n  } catch (error) {\n    if (error?.errors?.[0]?.status === '401') {\n      await this.session.invalidate();\n    }\n      console.log(\"Error in gatway.js in routes: \" + error)\n  }\n}\n\n  // model(params) {\n  //   const _this = this;\n  //   return new Promise(function(resolve, reject){\n  //     params.parent_gateway = 'null';\n\n  //     // let gateway = _this.get('store').query('gateway', { gateway_id: params.gateway_id, parent_gateway: 'null' });\n  //     console.log(params)\n  //     let gateway = _this.get('store').query('gateway', params);\n  //     let gatewayStats = _this.get('store').queryRecord('gateway-stat',{});\n\n  //     gateway.then(function(gateway){\n  //       resolve({\n  //         gateway:gateway,\n  //         gatewayStats:gatewayStats,\n  //       });\n  //     });\n  //   });\n  // };\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class HaveAnIssueRoute extends Route {\n  @service session;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  }\n\n  async model() {\n    return {};\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default Route.extend({\n    session: service(),\n    store: service(),\n\n    queryParams: {\n        page: { refreshModel: true },\n        page_size: { refreshModel: true },\n        ordering: { refreshModel: true },\n        search: { refreshModel: true },\n        searchTgt: { refreshModel: true },\n    },\n\n    beforeModel(transition) {\n        this.session.requireAuthentication(transition, 'login');\n    },\n\n    model(params) {\n        const _this = this;\n        return new Promise(function(resolve){\n            if (params.ordering != null) {\n                let test = params.ordering.slice(1,2);\n                if (test == \":\") {\n                    let opt = params.ordering.slice(0,1);\n                    params.ordering = params.ordering.slice(2);\n                    if (opt == 'a') {\n                        params.ordering = null;\n                    } else if (opt == 'i') {\n                        console.log(params.ordering);\n                    }\n                }\n            }\n            params.page_size = 20;\n            if (params.ordering == null) params.ordering = 'id';\n            if (params.searchTgt != \"inst\" && params.searchTgt != \"gateway\") params.search = \"\";\n\n            let instruments = _this.store.query('instrument', params);\n            let instrumentStats = _this.store.queryRecord('instrument-stat', {});\n            let gateway = _this.store.query('gateway', params);\n            let gatewayStats = _this.store.queryRecord('gateway-stat', {});\n            let levelLookupList = _this.store.query('lookup', { name: 'level' });\n            let projectLookupList = _this.store.query('lookup', { name: 'project' });\n\n            if (params.searchTgt != null) {\n                if (params.searchTgt == \"inst\") {\n                    instruments = _this.store.query('instrument', params);\n                    gateway = _this.store.query('gateway', params);\n                } else if (params.searchTgt == \"gateway\") {\n                    instruments = _this.store.query('instrument', params);\n                    gateway = _this.store.query('gateway', params);\n                }\n            }\n\n            instruments.then(function(instruments){\n                gateway.then(function(gateway){\n                    gatewayStats.then(function(gatewayStats){\n                        levelLookupList.then(function(levelLookupList){\n                            projectLookupList.then(function(projectLookupList){\n                                resolve({\n                                    instruments: instruments,\n                                    instrumentStats: instrumentStats,\n                                    gateway: gateway,\n                                    gatewayStats: gatewayStats,\n                                    levelLookupList: levelLookupList,\n                                    projectLookupList: projectLookupList\n                                });\n                            });\n                        });\n                    });\n                });\n            });\n        });\n    },\n\n    afterModel() {\n        this.session.store.refreshLicence();\n    },\n});\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class InstrumentsRoute extends Route.extend({\n  queryParams: {\n    page: {\n        refreshModel: true\n    },\n    page_size: {\n        refreshModel: true\n    },\n    ordering: {\n        refreshModel: true\n    },\n    search: {\n        refreshModel: true\n    }\n  },\n  \n  afterModel: function(resolvedModel, transition) {\n    if (!resolvedModel || !resolvedModel.instruments) return;\n    let pageSize = resolvedModel.instruments.query.page_size,\n      instrumentMeta = resolvedModel.instruments.meta,\n      instrumentsController = this.controllerFor('instruments')\n    ;\n\n    this.session.store.refreshLicence();\n\n    instrumentsController.send('updateProperty', 'pageSize', pageSize);\n    instrumentsController.send('updateProperty', 'instrumentMeta', instrumentMeta);\n    //instrumentsController.send('updateTypeList',resolvedModel);\n},\n\n}) {\n  @service session;\n  @service store; \n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  };\n\n    async model(params) {\n    try {\n      let [\n        instruments,\n        instrumentStats,\n        levelLookupList,\n        projectLookupList\n      ] = await Promise.all([\n        this.store.query('instrument', params),\n        this.store.queryRecord('instrument-stat', {}),\n        this.store.query('lookup', { name: 'level' }),\n        this.store.query('lookup', { name: 'project' })\n      ]);\n\n      return {\n        instruments,\n        instrumentStats,\n        levelLookupList,\n        projectLookupList\n      };\n    } catch (error) {\n      console.log(\"Errors: \");\n      console.log(error)\n      if (error?.errors?.[0]?.status === '401') {\n        \n        await this.session.invalidate();\n      }\n      console.log(\"Error in instruments.js in routes: \" + error)\n    }\n  }\n\n  // model(params) {\n  //   const _this = this;\n  //   return new Promise(function(resolve, reject){\n  //       let instruments = _this.get('store').query('instrument', params);\n  //       let instrumentStats = _this.get('store').queryRecord('instrument-stat',{});\n  //       let levelLookupList = _this.store.query('lookup', { name: 'level' });\n  //       let projectLookupList = _this.store.query('lookup', { name: 'project' });\n\n  //       instruments.then(function(instruments){\n  //         levelLookupList.then(function(levelLookupList){\n  //           projectLookupList.then(function(projectLookupList){\n  //             resolve({\n  //               instruments:instruments,\n  //               instrumentStats:instrumentStats,\n  //               levelLookupList:levelLookupList,\n  //               projectLookupList:projectLookupList,\n  //             });\n  //           });\n  //         });      \n  //       });\n  //   });\n  // };\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class KeysRoute extends Route {\n    @service session;\n    @service store;\n\n    beforeModel(transition) {\n        this.session.requireAuthentication(transition, 'login');\n    };\n\n    model(params) {\n        const _this = this;\n        return new Promise(function(resolve,reject){\n            let licenceKeys = _this.store.query('licence-key', params);\n\n            licenceKeys.then(function(licenceKeys){\n                resolve({\n                    licenceKeys:licenceKeys,\n                });\n            });\n        });\n    };\n\n    afterModel(resolvedModel, transition) {\n        this.controllerFor('keys').send('updateActive', resolvedModel);\n        this.session.store.refreshLicence();\n    };\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class KeysRoute extends Route {\n    @service session;\n    @service store;\n\n    beforeModel(transition) {\n        this.session.requireAuthentication(transition, 'login');\n    };\n\n    model(params) {\n        const _this = this;\n        return new Promise(function(resolve,reject){\n            \n            let lookups = _this.store.findAll('lookup');  // fetch all records \n        \n            \n\n            lookups.then(function(lookups){\n                resolve({\n                    lookups:lookups,\n                });\n            });\n        });\n    };\n\n    afterModel(resolvedModel, transition) {\n        this.controllerFor('list-lookups').send('updateActive', resolvedModel);\n        this.session.store.refreshLicence();\n    };\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class LogViewerRoute extends Route.extend({\n\n  queryParams: {\n    page: {\n        refreshModel: true\n    },\n    page_size: {\n        refreshModel: true\n    },\n    ordering: {\n        refreshModel: true\n    },\n    search: {\n        refreshModel: true\n    },\n    startDate: {\n      refreshModel: true\n    },\n    endDate: {\n      refreshModel: true\n    }\n  },\n      \n  actions: {\n    refreshModel() {\n      this.refresh();\n    }\n  },\n\n  afterModel: function(resolvedModel, transition) {\n    \n    let pageSize = resolvedModel.logViewer.query.page_size,\n        logViewerMeta = resolvedModel.logViewer.meta,\n        logViewerController = this.controllerFor('log-viewer')\n    ;\n\n    this.session.store.refreshLicence();\n\n    logViewerController.send('updateProperty', 'pageSize', pageSize);\n    logViewerController.send('updateProperty', 'logViewerMeta', logViewerMeta);\n},\n\n}) {\n  @service session;\n  @service store;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  };\n\n  model(params) {\n    const _this = this;\n \n    return new Promise(function(resolve,reject){\n            \n      let errorTypeLookups = _this.store.query('lookup', { name: 'error_type' });\n      let logViewer = _this.store.query('log-viewer', params);\n\n      let logViewerStats = _this.store.queryRecord('gateway-stat',{});\n\n      logViewer.then(function(logViewer){        \n        errorTypeLookups.then(function(errorTypeLookups){\n          logViewerStats.then(function(logViewerStats){\n            resolve({\n              logViewer: logViewer,\n              errorTypeLookups:errorTypeLookups,\n              logViewerStats: logViewerStats,\n            });\n          })\n        })\n      });\n    });\n  }\n}\n","import { inject as service } from '@ember/service';\n// app/routes/login.js\nimport Route from '@ember/routing/route';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default class LoginRoute extends Route {\n  @service session;\n  beforeModel(transition) {\n    if(transition.from == null)\n      transition = \"/\"\n    this.session.prohibitAuthentication(transition);\n  }\n  model() {\n    // console.log(\"ENV:\");\n    // console.log(ENV);\n    return {\n      loginAPI:ENV.API_LOGIN\n    };\n  }\n}","import { inject as service } from '@ember/service';\n// app/routes/login.js\nimport Route from '@ember/routing/route';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default class MyProfileRoute extends Route {\n  @service session;\n  beforeModel(transition) {\n    // if(transition.from == null)\n    //   transition = \"/\"\n    // this.session.prohibitAuthentication(transition);\n  }\n  model() {\n    // console.log(\"ENV:\");\n    // console.log(ENV);\n    // return {\n    //   loginAPI:ENV.API_LOGIN\n    // };\n  }\n}","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport RSVP from 'rsvp';\n\nexport default class CalibrationRoute extends Route.extend({\n\n  queryParams: {\n  },\n      \n  actions: {\n    refreshModel() {\n      this.refresh();\n    }\n  },\n\n\n\n  afterModel: function(resolvedModel, transition) {\n    // console.log(resolvedModel);\n    // let pageSize = resolvedModel.instrumentProfileList.query.page_size,\n    //     logViewerMeta = resolvedModel.instrumentProfileList.meta,\n    //     logViewerController = this.controllerFor('calibration')\n    // ;\n\n    // this.session.store.refreshLicence();\n\n    // logViewerController.send('updateProperty', 'pageSize', pageSize);\n    // logViewerController.send('updateProperty', 'logViewerMeta', logViewerMeta);\n},\n}) {\n  @service session;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  };\n  activate() {\n    window.addEventListener('beforeunload', this.handleBeforeUnload);\n  };\n\n  // Remove the event listener when the route is deactivated\n  deactivate() {\n    window.removeEventListener('beforeunload', this.handleBeforeUnload);\n  };\n\n  // This function will be called before the user leaves the page\n  handleBeforeUnload(event) {\n    // Display a confirmation dialog when the user tries to leave or refresh the page\n    event.preventDefault();\n    event.returnValue = ''; // This line is required for some browsers to show the confirmation dialog\n  };\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  };\n\n   async model(params) {\n    const query = {\n      page: params.page || 1,\n      page_size: 10,\n    };\n\n    if (params.calibrationID) {\n      query.calibrationID = params.searchCalibrationID;\n      query.jobID = params.searchJobID;\n      query.sensorID = params.searchSensorID;\n    }\n\n    try {\n\n      return {};\n    } catch (error) {\n      if (error.isAdapterError && error.errors[0].status === '403') {\n        // // Optionally redirect or handle the error in the frontend\n        // this.transitionTo('forbidden'); // Ensure you have a route for 'forbidden'\n      } else {\n        console.error('An error occurred:', error);\n      }\n    }\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport RSVP from 'rsvp';\n\nexport default class CalibrationRoute extends Route.extend({\n\n  queryParams: {\n  },\n      \n  actions: {\n    refreshModel() {\n      this.refresh();\n    }\n  },\n\n\n\n  afterModel: function(resolvedModel, transition) {\n    // console.log(resolvedModel);\n    // let pageSize = resolvedModel.instrumentProfileList.query.page_size,\n    //     logViewerMeta = resolvedModel.instrumentProfileList.meta,\n    //     logViewerController = this.controllerFor('calibration')\n    // ;\n\n    // this.session.store.refreshLicence();\n\n    // logViewerController.send('updateProperty', 'pageSize', pageSize);\n    // logViewerController.send('updateProperty', 'logViewerMeta', logViewerMeta);\n},\n}) {\n  @service session;\n  @service store;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  };\n  activate() {\n    window.addEventListener('beforeunload', this.handleBeforeUnload);\n  };\n\n  // Remove the event listener when the route is deactivated\n  deactivate() {\n    window.removeEventListener('beforeunload', this.handleBeforeUnload);\n  };\n\n  // This function will be called before the user leaves the page\n  handleBeforeUnload(event) {\n    // Display a confirmation dialog when the user tries to leave or refresh the page\n    event.preventDefault();\n    event.returnValue = ''; // This line is required for some browsers to show the confirmation dialog\n  };\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  };\n\n   async model(params) {\n    const query = {\n      page: params.page || 1,\n      page_size: 10,\n    };\n\n    if (params.calibrationID) {\n      query.calibrationID = params.searchCalibrationID;\n      query.jobID = params.searchJobID;\n      query.sensorID = params.searchSensorID;\n    }\n\n    try {\n      // Concurrently fetch data\n      const rigProfileListQuery = this.store.query('rig-profile', {});\n      const packTypesListQuery = this.store.query('packs-validation-type', {});\n\n      const [rigProfiles, packTypesList] = await RSVP.all([\n        rigProfileListQuery,\n        packTypesListQuery\n      ]);\n\n      return {\n        rigProfileList: rigProfiles,\n        packTypeList: packTypesList\n      };\n    } catch (error) {\n      if (error.isAdapterError && error.errors[0].status === '403') {\n        // // Optionally redirect or handle the error in the frontend\n        // this.transitionTo('forbidden'); // Ensure you have a route for 'forbidden'\n      } else {\n        console.error('An error occurred:', error);\n      }\n    }\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport {copy} from 'ember-copy'\n\nexport default Route.extend({\n  session: service(),\n  store: service(),\n\n  resetController(controller, isExiting) {\n    if (isExiting) {\n      controller.set('page', 1);\n      controller.set('page_size', 20);\n      controller.set('paginate_from_zero', false);\n      controller.set('port', 1);\n      controller.set('linear', false);\n      controller.set('calib', false);\n      controller.set('depth', false);\n      controller.set('port_number', 1);\n    }\n  },\n\n  queryParams: {\n    page: { refreshModel: true },\n    page_size: { refreshModel: true },\n    paginate_from_zero: { refreshModel: true },\n    port: { refreshModel: true },\n    linear: { refreshModel: true },\n    calib: { refreshModel: true },\n    depth: { refreshModel: true },\n    port_number: { refreshModel: true },\n    advancedYAxisUnit: { refreshModel: true },\n    advancedStartDate: { refreshModel: true },\n    advancedEndDate: { refreshModel: true },\n    advancedYLeftMax: { refreshModel: true },\n    advancedYLeftMin: { refreshModel: true },\n    advancedYRightMax: { refreshModel: true },\n    advancedYRightMin: { refreshModel: true },\n    advancedXMax: { refreshModel: true },\n    advancedXMin: { refreshModel: true },\n  },\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  },\n\n  model(params) {\n    const _this = this;\n    return new Promise(function(resolve){\n      let instrument = _this.store.findRecord('instrument', params.instrument_id);\n      if (!params.page_size) {\n        params.page_size = 20;\n      }\n\n      let displacementValuesParams = copy(params);\n      displacementValuesParams.model_name = 'displacement-values';\n      displacementValuesParams.originator = 'raw-data';\n      displacementValuesParams.port = params.port;\n\n      if (!displacementValuesParams.port_number) {\n        displacementValuesParams.port_number = 1;\n      }\n      if (!displacementValuesParams.port) {\n        displacementValuesParams.port = 1;\n        params.port = 1;\n      }\n\n      let globalDatetimeFormatProjectSetting = _this.store.query('project-setting', {}).then((settings) => {\n        return settings.find(setting => setting.title === 'GLOBAL_DATETIME_FORMAT');\n      });\n      let temperatureValuesParams = copy(params);\n      temperatureValuesParams.model_name = 'temperature-values';\n\n      let displacementValues = _this.store.query('displacement-value', displacementValuesParams);\n      let temperatureValues = _this.store.query('temperature-value', temperatureValuesParams);\n      let instrumentTypes = _this.store.findAll('instrument-type');\n\n      globalDatetimeFormatProjectSetting.then(function(globalDatetimeFormat){\n        instrument.then(function(instrument){\n          instrumentTypes.then(function(instrumentTypes){\n            displacementValues.then(function(displacementValues){\n              temperatureValues.then(function(temperatureValues){\n                resolve({\n                  globalDatetimeFormat: globalDatetimeFormat,\n                  instrument: instrument,\n                  instrumentTypes: instrumentTypes,\n                  displacementValues: displacementValues,\n                  temperatureValues: temperatureValues,\n                });\n              });\n            });\n          });\n        });\n      });\n    });\n  },\n\n  afterModel(resolvedModel) {\n    let rawDataValuesController = this.controllerFor('raw-data');\n    rawDataValuesController.send('updateProperty', 'instrumentId', resolvedModel.instrument.id);\n    rawDataValuesController.send('updateProperty', 'instrumentType', resolvedModel.instrument.get('instrumentType').get('title'));\n    rawDataValuesController.send('updateProperty', 'pageSize', resolvedModel.displacementValues.query.page_size);\n    rawDataValuesController.send('updateProperty', 'displacementValuesMeta', resolvedModel.displacementValues.meta);\n    rawDataValuesController.send('updateProperty', 'port_number', resolvedModel.port_number);\n    rawDataValuesController.send('updateProperty', 'port', resolvedModel.port);\n  },\n});\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default Route.extend({\n    session: service(),\n    store: service(),\n\n    resetController(controller, isExiting) {\n        if (isExiting) {\n            controller.set('page', 1);\n            controller.set('page_size', 20);\n        }\n    },\n\n    queryParams: {\n        page: { refreshModel: true },\n        page_size: { refreshModel: true },\n        profile_id: { refreshModel: true },\n        selectedFreqEventDate: { refreshModel: true },\n        advancedStartDate: { refreshModel: true },\n        advancedEndDate: { refreshModel: true },\n        advancedYAxisUnit: { refreshModel: true },\n        analysis_category: { refreshModel: true },\n        method: { refreshModel: true },\n    },\n\n    beforeModel(transition) {\n        this.session.requireAuthentication(transition, 'login');\n    },\n\n    model(params) {\n        const _this = this;\n        return new Promise(function(resolve){\n            if (!params.page) { params.page = 1; }\n            if (!params.page_size) { params.page_size = 20; }\n\n            let bluvibeV2ProfileData = _this.store.query('blu-vibe-v2-data-model2', params);\n            let instrument = _this.store.findRecord('instrument', params.instrument_id);\n            let bluvibeV2Profile = _this.store.query('blu-vibe-v2-profile-model', {instrument_id: params.instrument_id});\n            let globalDatetimeFormatProjectSetting = _this.store.query('project-setting', {}).then((settings) => {\n                return settings.find(setting => setting.title === 'GLOBAL_DATETIME_FORMAT');\n            });\n\n            bluvibeV2ProfileData.then(function(data){\n                instrument.then(function(instrument){\n                    bluvibeV2Profile.then(function(bluvibeV2Profile){\n                        globalDatetimeFormatProjectSetting.then(function(globalDatetimeFormat){\n                            resolve({\n                                instrument: instrument,\n                                globalDatetimeFormat: globalDatetimeFormat,\n                                instrumentFreqEventProfiles: bluvibeV2Profile,\n                                instrumentFreqEventData: data,\n                            });\n                        });\n                    });\n                });\n            });\n        });\n    },\n\n    setupController(controller, model) {\n        this._super(controller, model);\n        controller.setProperties({\n            model: model,\n            content: model,\n            instrument: model.instrument,\n            instrumentFreqEventData: model.instrumentFreqEventData,\n            instrumentFreqEventProfiles: model.instrumentFreqEventProfiles,\n            globalDatetimeFormat: model.globalDatetimeFormat\n        });\n    },\n\n    afterModel(resolvedModel) {\n        let ctrl = this.controllerFor('raw-frequency-events-data');\n        ctrl.send('updateProperty', 'pageSize', resolvedModel.instrumentFreqEventData.query.page_size);\n    },\n});\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport {copy} from 'ember-copy'\n\nexport default Route.extend({\n  session: service(),\n  store: service(),\n\n  queryParams: {\n    page: { refreshModel: true },\n    page_size: { refreshModel: true },\n    paginate_from_zero: { refreshModel: true },\n    raw_parent_gateway: { refreshModel: true },\n  },\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  },\n\n  model(params) {\n    const _this = this;\n    return new Promise(function(resolve){\n      let gateway = _this.store.findRecord('gateway', params.gateway_id);\n      if (!params.page_size) { params.page_size = 20; }\n\n      let gatewayValuesParams = copy(params);\n      gatewayValuesParams.model_name = 'gateway-value';\n\n      let gatewayValues = _this.store.query('gateway-value', gatewayValuesParams);\n      let gatewayTypes = _this.store.findAll('gateway-type');\n\n      gateway.then(function(gateway){\n        gatewayTypes.then(function(gatewayTypes){\n          gatewayValues.then(function(gatewayValues){\n            resolve({\n              gateway: gateway,\n              gatewayTypes: gatewayTypes,\n              gatewayValues: gatewayValues,\n            });\n          });\n        });\n      });\n    });\n  },\n\n  afterModel(resolvedModel) {\n    let rawDataValuesController = this.controllerFor('raw-gateway-data');\n    rawDataValuesController.send('updateProperty', 'gatewayId', resolvedModel.gateway.id);\n    rawDataValuesController.send('updateProperty', 'gatewayType', resolvedModel.gateway.get('gatewayType').get('title'));\n    rawDataValuesController.send('updateProperty', 'pageSize', resolvedModel.gatewayValues.query.page_size);\n    rawDataValuesController.send('updateProperty', 'gatewayValuesMeta', resolvedModel.gatewayValues.meta);\n  },\n});\n","import { inject as service } from '@ember/service';\n// app/routes/login.js\nimport Route from '@ember/routing/route';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default class RegisterRoute extends Route {\n  @service session;\n  beforeModel(transition) {\n    // if(transition.from == null)\n    //   transition = \"/\"\n    // this.session.prohibitAuthentication(transition);\n  }\n  model() {\n    // console.log(\"ENV:\");\n    // console.log(ENV);\n    // return {\n    //   loginAPI:ENV.API_LOGIN\n    // };\n  }\n}","// app/routes/login.js\nimport Route from '@ember/routing/route';\n\nexport default class ResetPasswordRoute extends Route {\n  model(params) {\n    return { token: params.token };\n  }\n}","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class SeismicEventRoute extends Route {\n  @service session;\n  @service store;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  };\n\n  model(params) {\n    const _this = this;\n    return new Promise(function(resolve, reject){\n        let seismic = _this.store.findAll('seismic', params);\n\n        seismic.then(function(seismic){\n            resolve({\n                seismic:seismic,\n            });\n        });\n    });\n  }\n}\n","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { hash } from 'rsvp';\n\nexport default class SeismicsRoute extends Route.extend({\n    queryParams: {\n        page: {\n            refreshModel: true\n        },\n        page_size: {\n            refreshModel: true\n        },\n        ordering: {\n            refreshModel: true\n        },\n        search: {\n            refreshModel: true\n        }\n    },\n    model(params) {\n        return hash({\n            seismicEvents: this.get('store').query('seismic-event', params),\n            seismicTypes: this.get('store').findAll('seismic-type'),\n            //licence: this.get('store').findAll('licence'),\n        });\n    },\n    afterModel: function(resolvedModel) {\n        let pageSize = resolvedModel.seismicEvents.query.page_size,\n            eventsMeta = resolvedModel.seismicEvents.meta,\n            seismicEventsController = this.controllerFor('seismic-events')\n        ;\n\n        seismicEventsController.send('updateProperty', 'pageSize', pageSize);\n        seismicEventsController.send('updateProperty', 'eventsMeta', eventsMeta);\n    }\n}) {\n    @service session;\n  @service store;\n\n    beforeModel(transition) {\n      this.session.requireAuthentication(transition, 'login');\n    };\n}","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport RSVP from 'rsvp';\n\nexport default class CalibrationRoute extends Route.extend({\n  queryParams: {},\n  actions: {\n    refreshModel() {\n      this.refresh();\n    },\n  },\n  afterModel(resolvedModel, transition) {\n    // Add any necessary logic here for afterModel\n  },\n}) {\n  @service session;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  }\n\n  activate() {\n    window.addEventListener('beforeunload', this.handleBeforeUnload);\n  }\n\n  deactivate() {\n    window.removeEventListener('beforeunload', this.handleBeforeUnload);\n  }\n\n  handleBeforeUnload(event) {\n    event.preventDefault();\n    event.returnValue = '';\n  }\n\n   async model(params) {\n  }\n}","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport RSVP from 'rsvp';\n\nexport default class CalibrationRoute extends Route.extend({\n  queryParams: {},\n  actions: {\n    refreshModel() {\n      this.refresh();\n    },\n  },\n  afterModel(resolvedModel, transition) {\n    // Add any necessary logic here for afterModel\n  },\n}) {\n  @service session;\n  @service store;\n\n  beforeModel(transition) {\n    this.session.requireAuthentication(transition, 'login');\n  }\n\n  activate() {\n    window.addEventListener('beforeunload', this.handleBeforeUnload);\n  }\n\n  deactivate() {\n    window.removeEventListener('beforeunload', this.handleBeforeUnload);\n  }\n\n  handleBeforeUnload(event) {\n    event.preventDefault();\n    event.returnValue = '';\n  }\n\n   async model(params) {\n    const query = {\n      page: params.page || 1,\n      page_size: 10,\n    };\n\n    if (params.calibrationID) {\n      query.calibrationID = params.searchCalibrationID;\n      query.jobID = params.searchJobID;\n      query.sensorID = params.searchSensorID;\n    }\n\n    try {\n      // Concurrently fetch data\n      const rigProfileList = this.store.query('rig-profile', {});\n      const sensorTypesList = this.store.query('calibration-type-profile', {});\n      const calibrationProfileList = this.store.query('calibration-calibration-profile', {});\n      \n      const [rigProfiles, sensorTypes, calibrationProfiles] = await RSVP.all([\n        rigProfileList,\n        sensorTypesList,\n        calibrationProfileList,\n      ]);\n\n      return {\n        rigProfileList: rigProfiles,\n        calibrationProfileList: calibrationProfiles,\n        sensorTypeList: sensorTypes\n      };\n    } catch (error) {\n      if (error.isAdapterError && error.errors[0].status === '403') {\n        // // Optionally redirect or handle the error in the frontend\n        // this.transitionTo('forbidden'); // Ensure you have a route for 'forbidden'\n      } else {\n        console.error('An error occurred:', error);\n      }\n    }\n  }\n}","import { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\n//import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';\n\n//export default class InstrumentsRoute extends Route.extend(AuthenticatedRouteMixin, {\nexport default class SettingsRoute extends Route.extend({\n    model(params) {\n      return this.store.query('project-setting', params);\n    }\n  }) {\n    \n    @service session;\n    @service store;\n\n    beforeModel(transition) {\n      this.controllerFor('settings').resetLoading();\n      this.session.requireAuthentication(transition, 'login');\n    };\n}\n","import { hash } from 'rsvp';\nimport { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class FrequencyGraphsRoute extends Route.extend({\n    model(params) {\n        return hash({\n            //licence: this.get('store').findAll('licence'),\n            //instruments: this.get('store').query('instrument', {small: 'true', exclude: 15})\n            //instruments: this.get('store').query('instrument', {exclude: 15})\n            instrument: this.store.queryRecord('instrument', {instrument_id: params.instrument_id}),\n        });\n    },\n    setupController: function(controller, model) {\n        this.controllerFor('spatial-graphs').set(\"content\",model);\n        this.controllerFor('spatial-graphs').activate();\n    }\n}) {\n    @service session;\n    @service store;\n\n    beforeModel(transition) {\n        this.session.requireAuthentication(transition, 'login');\n        let perms = this.getPerms();\n        if (!('graphing' in perms) || perms['graphing']==false) {\n          this.get('router').transitionTo('instruments');\n        }\n      };\n    \n      getPerms = function() {\n        let perms = null;\n        try{\n          perms = this.session.data.authenticated.modules;\n        } catch {}\n        return perms;\n      };\n  }\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { copy } from 'ember-copy';\nimport { pluralize, singularize } from 'ember-inflector';\nimport EmberObject from '@ember/object';\nimport Route from '@ember/routing/route';\n\nexport default Route.extend({\n    store: service(),\n    queryParams: {\n        start_timestamp: {\n            refreshModel: true\n        },\n        end_timestamp: {\n            refreshModel: true\n        },\n        num_points_requested: {\n            refreshModel: true\n        },\n        ref_head_position: {\n            refreshModel: true\n        },\n        ref_anchor: {\n            refreshModel: true\n        },\n        zeroed: {\n            refreshModel: true\n        },\n        flip_signs: {\n            refreshModel: true\n        },\n        event_type: {\n            refreshModel: true\n        },\n        blast_type: {\n            refreshModel: true\n        },\n        seismic_type: {\n            refreshModel: true\n        },\n        frequency: {\n            refreshModel: true\n        },\n        frequency_num: {\n            refreshModel: true\n        },\n        events_only: {\n            refreshModel: true\n        },\n        group_time: {\n            refreshModel: true\n        },\n        group_window: {\n            refreshModel: true\n        },\n        progress_timestamps: {\n            refreshModel: true\n        },\n        side: {\n            refreshModel: true\n        }\n    },\n    model(params) {\n        const _this = this\n        const page_size = (params.event_type)? 80 : 40;\n        let routeParams = this.paramsFor('spatial-graphs');\n        params.instrument_id = routeParams.instrument_id;\n\n\n        // declare default empty promises in case if blase of seismic events are disabled\n        let seismicEvents = new Promise(function(resolve, reject){\n          // succeed\n          resolve(false);\n          // or reject\n          reject();\n        });\n\n        let blastEvents = new Promise(function(resolve, reject){\n          // succeed\n          resolve(false);\n          // or reject\n          reject();\n        });\n\n        return new Promise(function(resolve, reject){\n\n            // Resolve zoomData model first, get start_timestamp and end_timestap values to be able to limit events to these boundaries\n            let zoomDataQueryParams = copy(params);\n                zoomDataQueryParams.num_points_requested = 1;\n            _this.store.query(singularize(zoomDataQueryParams.model_name),  zoomDataQueryParams).then(function(zoomData){\n\n                // let closestZeroTimestamp = \"\";\n                let closestZeroTimestamp = zoomData.meta['closest-zero-timestamp'];\n                let zoomDataStartTimestamp = zoomData.meta['start-timestamp'];\n                let zoomDataEndTimestamp = zoomData.meta['end-timestamp'];\n\n                // get closest_zero_timestamp (the date when an instrument was initialized) of zoomData query and use it as start_timestamp if no other start_timestamp query parameter is specified\n                if (!zoomData.query.start_timestamp) {\n                    params.start_timestamp = zoomData.meta['closest-zero-timestamp'];\n                }\n\n\n                let typeID = params.instrument_id.substr(params.instrument_id.length === 9 ? 5 : 6, 1);\n                let prevModel = params.model_name;\n                let isRebarGraph = (params.model_name === 'axial-strain-values' || params.model_name === 'bending-strain-values' || params.model_name === 'axial-displacement-values');\n                if (typeID === \"3\") { //if is rebar\n                    if (!isRebarGraph && params.model_name !== 'load-values') {\n                        params.model_name = 'axial-displacement-values';\n                        window.history.replaceState({}, prevModel, '/spatial-graph/' + params.instrument_id + '/axial-displacement-values');\n                    }\n                } else { //if is not rebar\n                    if (isRebarGraph) {\n                            params.model_name = 'displacement-values';\n                            window.history.replaceState({}, prevModel, '/spatial-graph/' + params.instrument_id + '/displacement-values');\n                    }\n                }\n\n                // second call to the same endpoint required because I can only fetch closest_zero_timestamp value from the previous API call\n                let zoomDataSecondCall = _this.store.query(singularize(params.model_name),  params);\n\n                // third call should only be called after the first find is completed\n                // let fullRangeData = _this.get('store').query(Ember.String.singularize(params.model_name), {model_name: params.model_name, instrument_id: params.instrument_id, num_points_requested: 300, ref_head_position: params.ref_head_position, ref_anchor: params.ref_anchor, zeroed: params.zeroed, flip_signs: params.flip_signs});\n                //console.log(\"params.model_name:::: \" + params.model_name);\n                let fullRangeData = _this.store.query(singularize(params.model_name), {model_name: params.model_name, instrument_id: params.instrument_id, start_timestamp: closestZeroTimestamp, num_points_requested: 300, ref_head_position: params.ref_head_position, ref_anchor: params.ref_anchor, zeroed: params.zeroed, flip_signs: params.flip_signs});\n\n                // fetch an instrument to be able to get anchor distances and other useful info from the instrument\n                //let instrument = _this.get('store').findRecord('instrument', params.instrument_id, { include: 'anchors' } );\n                let instrument = _this.store.findRecord('instrument', params.instrument_id);\n\n                let graphs = _this.store.findAll('chart');\n\n                // if blast events are requested\n                if (!params.event_type || params.event_type === \"blast\") {\n                    blastEvents = _this.store.query('blast-event', {page_size: page_size, is_visible: true, blast_type: params.blast_type, start_timestamp: zoomDataStartTimestamp, end_timestamp: zoomDataEndTimestamp});\n                }\n                // if promise events are requested\n                if (!params.event_type || params.event_type === \"seismic\") {\n                    seismicEvents = _this.store.query('seismic-event', {page_size: page_size, is_visible: true, seismic_type: params.seismic_type, start_timestamp: zoomDataStartTimestamp, end_timestamp: zoomDataEndTimestamp});\n                }\n\n                //wait for all promises to fulfil and then return resolved promis\n                graphs.then(function(graphs) {\n                    instrument.then(function(instrument){\n                        zoomDataSecondCall.then(function(zoomDataSecondCall){\n                            fullRangeData.then(function(fullRangeData){\n                                seismicEvents.then(function(seismicEvents){\n                                    blastEvents.then(function(blastEvents){\n                                        resolve({\n                                            graphs:graphs,\n                                            instrument:instrument,\n                                            zoomData:zoomDataSecondCall,\n                                            fullRangeData:fullRangeData,\n                                            seismicEvents:seismicEvents,\n                                            blastEvents:blastEvents\n                                        });\n                                    });\n                                });\n                            });\n                        });\n                    });\n                });\n            });\n        });\n\n    },\n    afterModel: function(resolvedModel) {\n        let spatialGraphsController = this.controllerFor('spatial-graphs');\n\n        spatialGraphsController.send('updateProperties', ['instrumentId'], [resolvedModel.zoomData.query.instrument_id]);\n        spatialGraphsController.send('updateProperties', ['instrumentType'], [resolvedModel.instrument.get('instrumentType').get('title')]);\n        spatialGraphsController.send('updateProperties', ['instrumentTypeId'], [resolvedModel.instrument.get('instrumentType').get('id')]);\n        spatialGraphsController.send('updateProperties', ['name'], [resolvedModel.instrument.get('name')]);\n        spatialGraphsController.send('updateProperties', ['location'], [resolvedModel.instrument.get('location')]);\n        spatialGraphsController.send('updateProperties', ['level'], [resolvedModel.instrument.get('level')]);\n        spatialGraphsController.send('updateProperties', ['borehole'], [resolvedModel.instrument.get('borehole')]);\n        spatialGraphsController.send('updateProperties', ['project'], [resolvedModel.instrument.get('project')]);\n\n        let mName = resolvedModel.zoomData.query.model_name;\n        let iName = resolvedModel.instrument.get('instrumentType').get('title');\n        //let isRebarGraph = (mName === 'axial-strain-values' || mName === 'bending-strain-values' || mName === 'axial-displacement-values');\n        // if(iName === 'dRebar') {\n        //     if(!isRebarGraph && mName !== 'load-values') {\n        //         resolvedModel.zoomData.query.model_name = 'axial-displacement-values';\n        //         window.history.replaceState({}, mName, '/spatial-graph/' + resolvedModel.instrument.get('id') + '/axial-displacement-values');\n        //     }\n        // } else {\n        //     if(isRebarGraph) {\n        //             resolvedModel.zoomData.query.model_name = 'displacement-values';\n        //             window.history.replaceState({}, mName, '/spatial-graph/' + resolvedModel.instrument.get('id') + '/displacement-values');\n        //     }\n        // }\n        \n        spatialGraphsController.send('updateProperties', ['modelName'], [resolvedModel.zoomData.query.model_name]);\n        spatialGraphsController.send('updateActivefrequency', resolvedModel.zoomData.query);\n        spatialGraphsController.send('updateGroupMode', resolvedModel.zoomData.query);\n        spatialGraphsController.send('updateProperties', ['activeInstrumentMeta'], [resolvedModel.zoomData.meta]);\n        spatialGraphsController.send('updateProperties', ['eventType'], [resolvedModel.zoomData.query.event_type]);\n        spatialGraphsController.send('updateProperties', ['blastType'], [resolvedModel.zoomData.query.blast_type]);\n        spatialGraphsController.send('updateProperties', ['seismicType'], [resolvedModel.zoomData.query.seismic_type]);\n\n        //get pretty chart name if chart has multiple parts to it\n        let obj = resolvedModel.graphs;\n        let type = resolvedModel.instrument.get('instrumentTypeID').toString();\n        //get the chart data for the instrument\n        obj.forEach(function(item) {\n            if(item.id === type) {\n                obj = item;\n                return;\n            }\n        });\n        \n        let name = '';\n        try {\n            name = resolvedModel.zoomData.query.model_name.substr(0, resolvedModel.zoomData.query.model_name.lastIndexOf('-'));\n        } catch (exception){\n            \n        }\n        console.log(\"NAME:::\" + name);\n        console.log(\"obj:::\");\n        console.log(obj);\n\n        switch(name) {\n            case 'displacement':\n                name = obj.spatialDisplacementName;\n                break;\n            case 'velocity':\n                name = obj.spatialVelocityName;\n                break;\n            case 'acceleration':\n                name = obj.spatialAccelerationName;\n                break;\n            case 'strain':\n                name = obj.spatialStrainName;\n                break;\n            case 'strain_rate':\n                name = obj.spatialStrainRateName;\n                break;\n            case 'load':\n                name = obj.spatialLoadName;\n                break;\n            case 'axial_strain':\n                name = \"Axial-strain\";\n                break;\n            case 'bending_strain':\n                name = \"Bending-strain\";\n                break;\n            case 'temperature':\n                name = \"Temperature\";\n                break;\n            case 'axial_displacement':\n                name = \"Axial-displacement\";\n                break;\n            default:\n                break;\n        }\n        let chartName = name;\n        try {\n            let _cap = (s) => s.charAt(0).toUpperCase() + s.slice(1);\n            let chartNameL = _cap(chartName.substr(0, chartName.indexOf('-')));\n            let chartNameR = _cap(chartName.substr(chartName.indexOf('-') + 1));\n            if(chartNameL !== \"\") {\n                chartName = chartNameL + \" \" + chartNameR;\n            }\n        } catch (exception) {}\n    \n        \n        spatialGraphsController.send('updateProperties', ['chartData'], [obj]);\n        spatialGraphsController.send('updateProperties', ['chartDataValueName'], [chartName]);\n        resolvedModel.instrument.get('anchors').then(function(anchors) {\n            spatialGraphsController.send('updateProperties', ['instrumentAnchors'], [anchors.content ?? anchors]);\n        });\n    },\n    actions: {\n        setDataR(data) {\n            let temporalGraphsController = this.controllerFor('spatial-graphs');\n\n            temporalGraphsController.send('setData',data);\n        },\n        setChartR(chart) {\n            let temporalGraphsController = this.controllerFor('spatial-graphs');\n\n            temporalGraphsController.send('setChart',chart);\n        },\n        willTransition() {\n            let spatialGraphsController = this.controllerFor('spatial-graphs');\n\n            spatialGraphsController.send('updateProperties', ['instrumentId'], [null]);\n            spatialGraphsController.send('updateProperties', ['eventType'], [null]);\n            spatialGraphsController.send('updateProperties', ['blastType'], [null]);\n            spatialGraphsController.send('updateProperties', ['seismicType'], [null]);\n        }\n    }\n});\n","import { hash } from 'rsvp';\nimport { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class TemporalGatewayGraphsRoute extends Route.extend({\n    model(params) {\n        let a = this.store;\n        // console.log(\"\");\n        // console.log(\"temporal-gateway-graphs router: \" + JSON.stringify(params));\n        // console.log(\"\");\n\n        return hash({\n          gateway: this.store.queryRecord('gateway', {gateway_id: params.gateway_id}),\n        });\n    },\n      setupController: function(controller, model) {\n      //console.log(\"setupController::: \" + model);\n      this.controllerFor('temporal-gateway-graphs').set(\"content\",model);\n      this.controllerFor('temporal-gateway-graphs').activate();\n    }\n}) {\n    @service session;\n    @service router;\n    @service store;\n\n    beforeModel(transition) {\n      this.session.requireAuthentication(transition, 'login');\n      let perms = this.getPerms();\n      if (!('graphing' in perms) || perms['graphing']==false) {\n        this.get('router').transitionTo('gateway');\n      }\n    };\n\n    getPerms = function() {\n      let perms = null;\n      try{\n        perms = this.session.data.authenticated.modules;\n      } catch {}\n      return perms;\n    };\n}\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { pluralize, singularize } from 'ember-inflector';\nimport { capitalize } from '@ember/string';\nimport EmberObject from '@ember/object';\nimport Route from '@ember/routing/route';\nimport {copy, Copyable} from 'ember-copy'\n\n\nexport default Route.extend({\n    store: service(),\n    queryParams: {\n        start_timestamp: {\n            refreshModel: true\n        },\n        end_timestamp: {\n            refreshModel: true\n        },\n        num_points_requested: {\n            refreshModel: true\n        },\n        ref_head_position: {\n            refreshModel: true\n        },\n        ref_anchor: {\n            refreshModel: true\n        },\n        zeroed: {\n            refreshModel: true\n        },\n        linear: {\n            refreshModel: true\n        },\n        calib: {\n            refreshModel: true\n        },\n        depth: {\n            refreshModel: true\n        },\n        flip_signs: {\n            refreshModel: true\n        },\n        event_type: {\n            refreshModel: true\n        },\n        blast_type: {\n            refreshModel: true\n        },\n        seismic_type: {\n            refreshModel: true\n        },\n        frequency: {\n            refreshModel: true\n        },\n        chart_parent_gateway: {\n            refreshModel: true\n        },\n        chart_type:{\n            refreshModel: true\n        },\n        window: {\n            refreshModel: true\n        },\n        display_records: {\n            refreshModel: true\n        },\n        // left_axis_field: {\n        //     refreshModel: true\n        // },\n        // right_axis_field: {\n        //     refreshModel: true\n        // },\n        // modelName:{\n        //   replace: true\n        // },\n    },\n    tiltMode: null,\n    tiltZUp: null,\n    model(params) {\n        const _this = this\n        let page_size = (params.event_type)? 80 : 40;\n        let routeParams = this.paramsFor('temporal-gateway-graphs');\n        params.gateway_id = routeParams.gateway_id;\n        // routeParams.chart_parent_gateway = params.chart_parent_gateway;\n\n        // console.log(\"routeParams:::\" + JSON.stringify(routeParams));\n        // console.log(\"Params:::\" + JSON.stringify(params));\n\n        return new Promise(function(resolve, reject){\n            // Resolve zoomData model first, get start_timestamp and end_timestap values to be able to limit events to these boundaries\n            \n            let zoomDataQueryParams = copy(params);\n            zoomDataQueryParams.num_points_requested = 1;\n            \n            if(zoomDataQueryParams.left_axis_field == null){\n                zoomDataQueryParams.left_axis_field = \"Voltage\";\n            }\n            if(zoomDataQueryParams.right_axis_field == null){\n                zoomDataQueryParams.right_axis_field = \"RSSI\";\n            }\n            if(zoomDataQueryParams.chart_parent_gateway == null){\n\n                // console.log(\"SETTING chart_parent_gateway in temporal-gateway-graph.js routes\")\n                zoomDataQueryParams.chart_parent_gateway = routeParams.parentGateway;\n                // console.log('zoomDataQueryParams::: ' + JSON.stringify(zoomDataQueryParams));\n            }\n            // console.log(\"zoomDataQueryParams:::\" + JSON.stringify(zoomDataQueryParams));\n    \n            params.left_axis_field = zoomDataQueryParams.left_axis_field;\n            params.right_axis_field = zoomDataQueryParams.right_axis_field;\n            _this.set('left_axis_field', zoomDataQueryParams.left_axis_field);\n            _this.set('right_axis_field', zoomDataQueryParams.right_axis_field);\n            _this.set('chart_parent_gateway', zoomDataQueryParams.chart_parent_gateway);\n                        \n            _this.store.query(singularize(zoomDataQueryParams.model_name),  zoomDataQueryParams).then(function(zoomData){\n\n                // let closestZeroTimestamp = \"\";\n                let closestZeroTimestamp = zoomData.meta['closest-zero-timestamp'];\n                let zoomDataStartTimestamp = zoomData.meta['start-timestamp'];\n                let zoomDataEndTimestamp = zoomData.meta['end-timestamp'];\n\n                // get closest_zero_timestamp (the date when an gateway was initialized) of zoomData query and use it as start_timestamp if no other start_timestamp query parameter is specified\n                if (!zoomData.query.start_timestamp) {\n                    params.start_timestamp = zoomData.meta['closest-zero-timestamp'];\n                }\n                // let mName = params.model_name;\n                let gatewayID = params.gateway_id;\n                // second call to the same endpoint required because I can only fetch closest_zero_timestamp value from the previous API call\n               //console.log(\"1\");\n                let zoomDataSecondCall = _this.store.query(singularize(params.model_name),  params);\n\n                //let zoomTempData = _this.store.query(Ember.String.singularize('temperature-value'),  params);\n                let temperatureParams = copy(params);\n                temperatureParams.ref_anchor = \"0\";\n                temperatureParams.flip_signs = params.flip_signs;\n                temperatureParams.model_name = \"gateway-values\";\n\n                let zoomTempData = _this.store.query(\"temperature-gateway-value\", temperatureParams);\n\n                // third call should only be called after the first find is completed\n                // let fullRangeData = _this.get('store').query(Ember.String.singularize(params.model_name), {model_name: params.model_name, gateway_id: params.gateway_id, num_points_requested: 300, ref_head_position: params.ref_head_position, ref_anchor: params.ref_anchor, zeroed: params.zeroed, flip_signs: params.flip_signs});\n                let fullRangeData;\n                fullRangeData = _this.store.query(singularize(params.model_name), {model_name: params.model_name, gateway_id: params.gateway_id, start_timestamp: closestZeroTimestamp, num_points_requested: 300, ref_head_position: params.ref_head_position, ref_anchor: params.ref_anchor, zeroed: params.zeroed, raw: params.raw, flip_signs: params.flip_signs, calib: true});\n                \n                // let fullRangeTempData = _this.get('store').query(\"temperature-value\", {model_name: params.model_name, gateway_id: params.gateway_id, start_timestamp: closestZeroTimestamp, num_points_requested: 300, ref_head_position: params.ref_head_position, ref_anchor: params.ref_anchor, zeroed: false});\n                // fetch an gateway to be able to get anchor distances and other useful info from the gateway\n                let gateway = _this.store.queryRecord('gateway', { gateway_id: params.gateway_id } );\n               //console.log(\"count 2\");\n               //console.log(\"Gateway: \" + params.gateway_id);\n                //let gateway = _this.store.queryRecord('gateway', { gateway_id: params.gateway_id } );\n\n                let graphs = _this.store.findAll('chart');\n\n\n                //wait for all promises to fulfil and then return resolved promise\n                graphs.then(function(graphs) {\n                    gateway.then(function(gateway){\n                        zoomDataSecondCall.then(function(zoomDataSecondCall){\n                            fullRangeData.then(function(fullRangeData){\n                                zoomTempData.then(function(zoomTempData){\n                                    resolve({\n                                        graphs:graphs,\n                                        gateway:gateway,\n                                        zoomData:zoomDataSecondCall,\n                                        fullRangeData:fullRangeData,\n                                        zoomTempData:zoomTempData,\n                                    });\n                                });\n                            });\n                        });\n                    });\n                });\n            });\n        });\n    },\n    afterModel: function(resolvedModel) {\n       //console.log(\"in afterModel - routes/temporal-gateway-graphs/temporal-gateway-graph.js\")\n        let temporalGraphsController = this.controllerFor('temporal-gateway-graphs');\n\n        //temporalGraphsController.send('updateProperties', ['model_name'], [resolvedModel.zoomData.query.model_name]);\n\n        temporalGraphsController.send('updateProperties', ['gatewayId'], [resolvedModel.zoomData.query.gateway_id]);\n        temporalGraphsController.send('updateProperties', ['gatewayType'], [resolvedModel.gateway.get('gatewayType').get('title')]);\n        temporalGraphsController.send('updateProperties', ['gatewayTypeId'], [resolvedModel.gateway.get('gatewayType').get('id')]);\n        temporalGraphsController.send('updateProperties', ['name'], [resolvedModel.gateway.get('name')]);\n        temporalGraphsController.send('updateProperties', ['location'], [resolvedModel.gateway.get('location')]);\n        temporalGraphsController.send('updateProperties', ['level'], [resolvedModel.gateway.level]);//get('level')]);\n        temporalGraphsController.send('updateProperties', ['borehole'], [resolvedModel.gateway.get('borehole')]);\n        temporalGraphsController.send('updateProperties', ['project'], [resolvedModel.gateway.get('project')]);\n        //temporalGraphsController.send('updateProperties', ['tiltMode'], [this.get('tiltMode')]);\n        temporalGraphsController.send('updateProperties', ['tiltZUp'], [this.get('tiltZUp')]);\n        \n        temporalGraphsController.send('updateProperties', ['left_axis_field'], [this.get('left_axis_field')]);\n        temporalGraphsController.send('updateProperties', ['right_axis_field'], [this.get('right_axis_field')]);\n        temporalGraphsController.send('updateProperties', ['chart_parent_gateway'], [this.get('chart_parent_gateway')]);\n        \n       //console.log(\"ModelName::: \" + resolvedModel.zoomData.query.model_name);\n        temporalGraphsController.send('updateProperties', ['modelName'], [resolvedModel.zoomData.query.model_name]);\n        temporalGraphsController.send('updateProperties', ['activeGatewayMeta'], [resolvedModel.zoomData.meta]);\n        temporalGraphsController.send('updateLocalProperty', 'activeGatewayMeta', resolvedModel.zoomData.meta);\n        temporalGraphsController.send('updateProperties', ['eventType'], [resolvedModel.zoomData.query.event_type]);\n        temporalGraphsController.send('updateProperties', ['blastType'], [resolvedModel.zoomData.query.blast_type]);\n        temporalGraphsController.send('updateProperties', ['display_records'], [resolvedModel.zoomData.query.display_records]);\n        temporalGraphsController.send('updateProperties', ['chart_type'], [resolvedModel.zoomData.query.chart_type]);\n\n        temporalGraphsController.send('updateProperties', ['seismicType'], [resolvedModel.zoomData.query.seismic_type]);\n        temporalGraphsController.send('updateProperties', ['frequency'], [resolvedModel.zoomData.query.frequency]);\n        temporalGraphsController.send('updateProperties', ['window'], [resolvedModel.zoomData.query.window]);\n        \n        //get pretty chart name if chart has multiple parts to it\n        let obj = resolvedModel.graphs;\n        let type = 18;//resolvedModel.gateway.get('gatewayTypeID').toString();\n        //get the chart data for the gateway\n        let newObj = [];\n        obj.forEach(function(item) {\n            if(item.id == type) {\n                newObj = item;\n                return;\n            }\n        });\n        //let graphs = resolvedModel.get('graphs');\n        \n        let name = '';\n        try {\n            name = resolvedModel.zoomData.query.model_name.substr(0, resolvedModel.zoomData.query.model_name.lastIndexOf('-'));\n           //console.log(\"name:::: \" + name);\n        } catch (exception) {\n\n        }\n        // console.log(\"chartName:::: \" + name);\n        switch(name) {\n            case 'voltage':\n                name = 'Voltage'; //newObj.temporalDisplacementName;\n                break;\n            case 'rssi':\n                name = 'RSSI';//newObj.temporalVelocityName;\n                break;\n            case 'readings':\n                name = 'Readings';\n                break;\n            case 'uptime':\n                name = 'Uptime';\n                break;\n            case 'reconnection':\n                name = \"Reconnections\";\n                break;\n            case 'uploads':\n                name = 'Uploads';\n                break;\n            case 'temp':\n                name = 'Temperature';\n                break;\n            case 'firmware':\n                name = 'Firmware';\n                break;\n\n            default:\n                name = 'Unknown';\n                break;\n        }\n\n        let chartName = capitalize(name);\n        let chartNameL = capitalize(chartName.substr(0, chartName.indexOf('-')));\n        let chartNameR = capitalize(chartName.substr(chartName.indexOf('-') + 1));\n        if(chartNameL !== \"\") {\n            chartName = chartNameL + \" \" + chartNameR;\n        }\n        // console.log(\"ChartName::::: \" + chartName);\n        \n        temporalGraphsController.send('updateProperties', ['chartData'], [newObj]);\n        temporalGraphsController.send('updateProperties', ['chartDataValueName'], [chartName]);\n        temporalGraphsController.send('updateProperties', ['gatewayAnchors'], [resolvedModel.gateway.get('anchors')]);\n    },\n    actions: {\n        setDataR(data) {\n            let temporalGraphsController = this.controllerFor('temporal-gateway-graphs');\n\n            temporalGraphsController.send('setData',data);\n        },\n        setChartR(chart) {\n            let temporalGraphsController = this.controllerFor('temporal-gateway-graphs');\n\n            temporalGraphsController.send('setChart',chart);\n        },\n        willTransition() {\n            let temporalGraphsController = this.controllerFor('temporal-gateway-graphs');\n\n            temporalGraphsController.send('updateProperties', ['gatewayId'], [null]);\n            temporalGraphsController.send('updateProperties', ['eventType'], [null]);\n            temporalGraphsController.send('updateProperties', ['blastType'], [null]);\n            temporalGraphsController.send('updateProperties', ['seismicType'], [null]);\n            temporalGraphsController.send('updateProperties', ['vibe_id'], [null]);\n            temporalGraphsController.send('updateProperties', ['chart_type'], [null]);\n            temporalGraphsController.send('updateProperties', ['display_records'], [null]);\n            temporalGraphsController.send('updateProperties', ['left_axis_field'], [null]);\n            temporalGraphsController.send('updateProperties', ['right_axis_field'], [null]);\n            temporalGraphsController.send('updateProperties', ['ref_anchor'], [null]);\n            temporalGraphsController.send('updateProperties', ['flip_signs'], [null]);     \n            temporalGraphsController.send('updateProperties', ['chart_parent_gateway'], [null]);     \n\n        }\n    }\n});\n\n","import { hash } from 'rsvp';\nimport { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class TemporalGraphsRoute extends Route.extend({\n\n    model(params) {\n        let a = this.store;\n        return hash({\n          instrument: this.store.queryRecord('instrument', {instrument_id: params.instrument_id}),\n        });\n    },\n    setupController: function(controller, model) {\n      this.controllerFor('temporal-graphs').set(\"content\",model);\n      this.controllerFor('temporal-graphs').activate();\n      // console.log(\"setupController::: \" + model)\n    },\n    async resetController(controller, isExiting, transition) {\n      if (isExiting) {\n        try{\n          let instrument = controller.content.instrument;\n          // instrument.set('selectedAnchor', 0);\n          await instrument.save();\n\n        } catch(e) {\n          console.log(\"routes:::temporal-graphs:::resetController: Error: \" + e );\n        }\n      }\n    }\n}) {\n    @service session;\n    @service router;\n    @service store;\n    \n    beforeModel(transition) {\n      this.session.requireAuthentication(transition, 'login');\n      let perms = this.getPerms();\n      if (!('graphing' in perms) || perms['graphing']==false) {\n        this.get('router').transitionTo('instruments');\n      }\n    };\n\n    getPerms = function() {\n      let perms = null;\n      try{\n        perms = this.session.data.authenticated.modules;\n      } catch {}\n      return perms;\n    };\n}\n","import { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { copy } from 'ember-copy';\nimport { pluralize, singularize } from 'ember-inflector';\nimport { capitalize } from '@ember/string';\nimport EmberObject from '@ember/object';\nimport Route from '@ember/routing/route';\n\nexport default Route.extend({\n    store: service(),\n\n\n    afterModel(model, transition) {\n        this._super(...arguments);\n        this.controller.set('selectedAnchor', model.instrument.selectedAnchor);        \n    },\n\n    queryParams: {\n        start_timestamp: {\n            refreshModel: true\n        },\n        end_timestamp: {\n            refreshModel: true\n        },\n        num_points_requested: {\n            refreshModel: true\n        },\n        ref_head_position: {\n            refreshModel: true\n        },\n        ref_anchor: {\n            refreshModel: true\n        },\n        zeroed: {\n            refreshModel: true\n        },\n        linear: {\n            refreshModel: true\n        },\n        calib: {\n            refreshModel: true\n        },\n        depth: {\n            refreshModel: true\n        },\n        flip_signs: {\n            refreshModel: true\n        },\n        event_type: {\n            refreshModel: true\n        },\n        blast_type: {\n            refreshModel: true\n        },\n        seismic_type: {\n            refreshModel: true\n        },\n        frequency: {\n            refreshModel: true\n        },\n        // vibe_id: {\n        //     refreshModel: true\n        // },\n        chart_type:{\n            refreshModel: true\n        },\n        window: {\n            refreshModel: true\n        },\n        display_records: {\n            refreshModel: true\n        },\n        port:{            \n            refreshModel: true,\n        },\n        selectedAnchor: {\n            refreshModel: true\n        },\n        advancedYAxisUnit:{\n            refreshModel: true\n        },\n        advancedStartDate: {\n            refreshModel: true\n        },\n        advancedEndDate: {\n            refreshModel: true\n        },\n        advancedYLeftMax:{\n            refreshModel: true\n        },\n        advancedYLeftMin:{\n            refreshModel: true\n        },\n        advancedYRightMax:{\n            refreshModel: true\n        },\n        advancedYRightMin:{\n            refreshModel: true\n        },\n        advancedXMax:{\n            refreshModel: true\n        },\n        advancedXMin:{\n            refreshModel: true\n        }\n    },\n    tiltMode: null,\n    tiltZUp: null,\n    selectedAnchor: 0,\n\n    resetController(controller, isExiting, transition) {\n        if (isExiting) {\n            // isExiting would be false if only the route's model was changing\n            controller.set('start_timestamp', null);\n            controller.set('end_timestamp', null);\n            controller.set('chart_type', null);\n            controller.set('display_records', null);   \n            controller.set('port', 1); \n            // controller.set('selectedAnchor', selectedAnchor);\n        }\n    },\n\n        \n    model(params) {\n        \n        // If port is not defined, default to 1\n        if (params.port) {\n            // Destructure the 'port' query parameter\n            const { port } = params;\n            // Now 'port' contains the value of the 'port' query parameter\n            \n            params.port = port;\n            \n        } else {\n            // Handle the case where 'port' query parameter is not defined\n            // You can set a default value or take other appropriate action\n            params.port = 1 // Default value if 'port' is not in the URL\n        }\n        // console.log(\"model(params):  Params: \" + JSON.stringify(params));\n\n        const _this = this\n        let page_size = (params.event_type)? 80 : 40;\n        let routeParams = this.paramsFor('temporal-graphs');\n        params.instrument_id = routeParams.instrument_id;\n        routeParams.port = params.port;\n        \n        // declare default empty promises in case if blase of seismic events are disabled\n        let seismicEvents = new Promise(function(resolve, reject){\n          // succeed\n          resolve(false);\n          // or reject\n          reject();\n        });\n\n        let blastEvents = new Promise(function(resolve, reject){\n          // succeed\n          resolve(false);\n          // or reject\n          reject();\n        });\n\n        let vibeEvents = new Promise(function(resolve, reject){\n            resolve(false);\n            reject();\n        });\n\n        return new Promise(function(resolve, reject){            \n            // Resolve zoomData model first, get start_timestamp and end_timestap values to be able to limit events to these boundaries\n            let zoomDataQueryParams = copy(params);\n            // console.log(\"zoomDataQueryParams::: \" + JSON.stringify(zoomDataQueryParams));\n            zoomDataQueryParams.num_points_requested = 1;\n            zoomDataQueryParams.SINGLE_QUERY = 'SINGLE_QUERY'\n            let zoomDataSecondCall;\n            let fullRangeData;\n            \n            _this.store.query(singularize(zoomDataQueryParams.model_name),  zoomDataQueryParams).then(function(zoomData){\n                \n                // let closestZeroTimestamp = \"\";\n                let closestZeroTimestamp = zoomData.meta['closest-zero-timestamp'];\n                let zoomDataStartTimestamp = zoomData.meta['start-timestamp'];\n                let zoomDataEndTimestamp = zoomData.meta['end-timestamp'];\n                \n                advancedYAxisUnit: params.advancedYAxisUnit\n                // get closest_zero_timestamp (the date when an instrument was initialized) of zoomData query and use it as start_timestamp if no other start_timestamp query parameter is specified\n                if (!zoomData.query.start_timestamp) {\n                    params.start_timestamp = zoomData.meta['closest-zero-timestamp'];\n                }\n                let mName = params.model_name;\n                // let instrumentID = params.instrument_id;\n                let isVibeGraph = (mName === 'event-ppv' || mName === 'event-ppa' || mName === 'event-frequency' || mName === 'cumulative-event-ppv' || mName === 'cumulative-event-ppa' || mName === 'cumulative-event-frequency');\n                \n\n                // second call to the same endpoint required because I can only fetch closest_zero_timestamp value from the previous API call\n                // console.log(\"zoomDataSecondCall::::::::::::::::::::: \");\n                // console.log(JSON.stringify(params))\n                // zoomDataQueryParams.SINGLE_QUERY = null;\n                params.SECOND_QUERY = 'SECOND_QUERY';\n\n                zoomDataSecondCall = _this.store.query(singularize(params.model_name),  params);\n                // let finalVal = _this.store.query(singularize('displacement-values'),  { page_size: -1, instrument_id: params.instrument_id }, null, params.instrument_id,  null).then(function(result) {\n                //     //record looks like this: [2.351,0,-2.256,1,2]\n                //     //shows tiltMode = 2 and tilt_z_up = 1\n                //     //_this.set('tiltMode', result.get('firstObject').values[4]);\n                //     _this.set('tiltZUp', result.get('firstObject').values[3]);\n                // }) //end of finalVal\n\n                \n                //let zoomTempData = _this.store.query(Ember.String.singularize('temperature-value'),  params);\n                // params.SECOND_QUERY = null;\n\n                fullRangeData = _this.store.query(singularize(params.model_name), {model_name: params.model_name, \n                    instrument_id: params.instrument_id, \n                    start_timestamp: closestZeroTimestamp, \n                    num_points_requested: 300,\n                    ref_head_position: params.ref_head_position, \n                    selectedAnchor: params.selectedAnchor, \n                    ref_anchor: params.ref_anchor, \n                    zeroed: params.zeroed, \n                    raw: params.raw, \n                    flip_signs: params.flip_signs, \n                    calib: params.calib, \n                    linear: params.linear, \n                    depth: params.depth, \n                    port: params.port, \n                    FULLRANGE_DATA: true, \n                    advancedYAxisUnit: params.advancedYAxisUnit, \n                    advancedStartDate: params.advancedStartDate, \n                    advancedEndDate: params.advancedEndDate, \n                    advancedXMax: params.advancedXMax, \n                    advancedXMin: params.advancedXMin, \n                    advancedYLeftMax: params.advancedYLeftMax, \n                    advancedYLeftMin: params.advancedYLeftMin, \n                    advancedYRightMax: params.advancedYRightMax, \n                    advancedYRightMin: params.advancedYRightMin\n                });\n\n                let temperatureParams = copy(params);\n                temperatureParams.ref_anchor = \"0\";\n                temperatureParams.flip_signs = null;\n                temperatureParams.model_name = \"displacement-values\";\n\n                let zoomTempData = _this.store.query(\"temperature-value\", temperatureParams);\n                \n                //     fullRangeData = _this.store.query(singularize(params.model_name), {model_name: params.model_name, instrument_id: params.instrument_id, start_timestamp: closestZeroTimestamp, num_points_requested: 300, ref_head_position: params.ref_head_position, ref_anchor: params.ref_anchor, zeroed: params.zeroed, raw: params.raw, flip_signs: params.flip_signs, calib: params.calib, linear: params.linear, depth: params.depth, port: params.port, FULLRANGE_DATA: true, isFirst: params.isFirst});\n                \n                let instrument = _this.store.queryRecord('instrument', { instrument_id: params.instrument_id } );\n                // console.log(\"count 2\");\n                // console.log(\"Instrument: \" + params.instrument_id);\n                \n                let graphs = _this.store.findAll('chart');\n\n                // if blast events are requested\n                if (!params.event_type || params.event_type === \"blast\") {\n                    blastEvents = _this.store.query('blast-event', {page_size: page_size, is_visible: true, blast_type: params.blast_type, start_timestamp: zoomDataStartTimestamp, end_timestamp: zoomDataEndTimestamp, query_name: \"BLAST_EVENTS\"});\n                }\n                // if promise events are requested\n                if (!params.event_type || params.event_type === \"seismic\") {\n                    seismicEvents = _this.store.query('seismic-event', {page_size: page_size, is_visible: true, seismic_type: params.seismic_type, start_timestamp: zoomDataStartTimestamp, end_timestamp: zoomDataEndTimestamp});\n                }\n                let vibeEventParams = copy(params);\n                    \n                if (isVibeGraph) {\n                    // console.log(\"IN: isVibeGraph: \" + isVibeGraph);\n                    vibeEventParams.ref_anchor = \"0\";\n                    vibeEventParams.flip_signs = null;\n                    vibeEventParams.model_name = \"vibration-event\";\n                    vibeEventParams.event_type === \"bluvibe\"\n                    vibeEventParams.instrument_id = params.instrument_id;\n                    vibeEventParams.chart_type=\"frequency\";\n                    vibeEvents = _this.store.query('vibration-event', { page_size: page_size, is_visible: true, start_timestamp: zoomDataStartTimestamp, end_timestamp: zoomDataEndTimestamp});\n                }\n\n                if (!params.event_type || params.event_type === \"bluvibe\") {\n                    if (params.vibe_id) {\n                        let vibeEventParams = copy(params);\n                        vibeEventParams.ref_anchor = \"0\";\n                        vibeEventParams.flip_signs = null;\n                        vibeEventParams.model_name = \"displacement-values\";\n                        vibeEventParams.event_type === \"bluvibe\"\n                        vibeEventParams.instrument_id = params.instrument_id;\n                        vibeEventParams.chart_type=\"frequency\";\n                        // console.log(\"count 3\"); \n                        vibeEvents = _this.store.query(singularize(params.model_name), { page_size: page_size, is_visible: true, start_timestamp: zoomDataStartTimestamp, end_timestamp: zoomDataEndTimestamp});\n                        // console.log(\"count 4\"); \n                    }\n                }\n\n                //wait for all promises to fulfil and then return resolved promise\n                graphs.then(function(graphs) {\n                    instrument.then(function(instrument){\n                        zoomDataSecondCall.then(function(zoomDataSecondCall){\n                            fullRangeData.then(function(fullRangeData){\n                                seismicEvents.then(function(seismicEvents){\n                                    blastEvents.then(function(blastEvents){\n                                        vibeEvents.then(function(vibeEvents){\n                                            zoomTempData.then(function(zoomTempData){\n                                                //fullRangeTempData.then(function(fullRangeTempData) {\n                                                    resolve({\n                                                        graphs:graphs,\n                                                        instrument:instrument,\n                                                        zoomData:zoomDataSecondCall,\n                                                        fullRangeData:fullRangeData,\n                                                        seismicEvents:seismicEvents,\n                                                        blastEvents:blastEvents,\n                                                        zoomTempData:zoomTempData,\n                                                        vibeEvents:vibeEvents,\n                                                        //fullRangeTempData:fullRangeTempData,\n                                                        //tiltMode:_this.get('tiltMode'),\n                                                    // });\n                                                });\n                                            });\n                                        });\n                                    });\n                                });\n                            });\n                        });\n                    });\n                });\n            });\n        });\n    },\n    afterModel: function(resolvedModel) {\n        // console.log(\"in afterModel - routes/temporal-graphs/temporal-graph.js\")\n        let temporalGraphsController = this.controllerFor('temporal-graphs');\n\n        //temporalGraphsController.send('updateProperties', ['model_name'], [resolvedModel.zoomData.query.model_name]);\n\n        temporalGraphsController.send('updateProperties', ['instrumentId'], [resolvedModel.zoomData.query.instrument_id]);\n        temporalGraphsController.send('updateProperties', ['instrumentType'], [resolvedModel.instrument.get('instrumentType').get('title')]);\n        temporalGraphsController.send('updateProperties', ['instrumentTypeId'], [resolvedModel.instrument.get('instrumentType').get('id')]);\n        temporalGraphsController.send('updateProperties', ['name'], [resolvedModel.instrument.get('name')]);\n        temporalGraphsController.send('updateProperties', ['location'], [resolvedModel.instrument.get('location')]);\n        temporalGraphsController.send('updateProperties', ['level'], [resolvedModel.instrument.level]);//get('level')]);\n        temporalGraphsController.send('updateProperties', ['borehole'], [resolvedModel.instrument.get('borehole')]);\n        temporalGraphsController.send('updateProperties', ['project'], [resolvedModel.instrument.get('project')]);\n        //temporalGraphsController.send('updateProperties', ['tiltMode'], [this.get('tiltMode')]);\n        temporalGraphsController.send('updateProperties', ['tiltZUp'], [this.get('tiltZUp')]);\n\n        let mName = resolvedModel.zoomData.query.model_name;\n        //let iName = resolvedModel.instrument.get('instrumentType').get('title');\n        // console.log(\"routes:temporal-graphs:temporal-graph: mName::: \" + mName);\n        // let isVibeGraph = (mName === 'event-ppv' || mName === 'event-ppa' || mName === 'event-frequency' || mName === 'cumulative-event-ppv' || mName === 'cumulative-event-ppa' || mName === 'cumulative-event-frequency');\n        // if(iName === 'BluVibe') {\n        //     if(!isVibeGraph) {\n        //         resolvedModel.zoomData.query.model_name = 'event-ppv';\n        //         window.history.replaceState({}, mName, '/temporal-graphs/' + resolvedModel.instrument.get('id') + '/event-ppv');\n        //     }\n        // } else {\n        //     if(isVibeGraph) {\n        //             resolvedModel.zoomData.query.model_name = 'displacement-values';\n        //             window.history.replaceState({}, mName, '/temporal-graphs/' + resolvedModel.instrument.get('id') + '/displacement-values');\n        //     }\n        // }\n\n        temporalGraphsController.send('updateProperties', ['modelName'], [resolvedModel.zoomData.query.model_name]);\n        temporalGraphsController.send('updateProperties', ['activeInstrumentMeta'], [resolvedModel.zoomData.meta]);\n        temporalGraphsController.send('updateLocalProperty', 'activeInstrumentMeta', resolvedModel.zoomData.meta);\n        temporalGraphsController.send('updateProperties', ['eventType'], [resolvedModel.zoomData.query.event_type]);\n        temporalGraphsController.send('updateProperties', ['blastType'], [resolvedModel.zoomData.query.blast_type]);\n        temporalGraphsController.send('updateProperties', ['display_records'], [resolvedModel.zoomData.query.display_records]);\n        temporalGraphsController.send('updateProperties', ['chart_type'], [resolvedModel.zoomData.query.chart_type]);\n        temporalGraphsController.send('updateProperties', ['port'], [resolvedModel.zoomData.query.port]);\n\n        if (resolvedModel.vibeEvents) {\n            temporalGraphsController.send('updateProperties', ['vibeId'], [resolvedModel.vibeEvents.query.vibe_id]);\n        }\n        temporalGraphsController.send('updateProperties', ['seismicType'], [resolvedModel.zoomData.query.seismic_type]);\n        temporalGraphsController.send('updateProperties', ['frequency'], [resolvedModel.zoomData.query.frequency]);\n        temporalGraphsController.send('updateProperties', ['window'], [resolvedModel.zoomData.query.window]);\n        \n        //get pretty chart name if chart has multiple parts to it\n        let obj = resolvedModel.graphs;\n        let type = resolvedModel.instrument.get('instrumentTypeID').toString();\n        //get the chart data for the instrument\n        obj.forEach(function(item) {\n            if(item.id === type) {\n                obj = item;\n                return;\n            }\n        });\n        //let graphs = resolvedModel.get('graphs');\n        \n        let name = '';\n        try {\n            name = resolvedModel.zoomData.query.model_name.substr(0, resolvedModel.zoomData.query.model_name.lastIndexOf('-'));\n        } catch (exception) {\n\n        }\n        if (name===\"event\" || name === \"cumulative-event\") {\n            name = resolvedModel.zoomData.query.model_name;\n        }\n        // console.log(\"chartName:::: \" + name);\n        switch(name) {\n            case 'displacement':\n                name = obj.temporalDisplacementName;\n                if(name == null || name == undefined || name == \"\"){\n                    name = \"Displacement\";\n                }            \n                break;\n            case 'axial_displacement':\n                name = \"Axial-displacement\";\n                break;\n            case 'velocity':\n                name = obj.temporalVelocityName;\n                if(name == null || name == undefined || name == \"\")\n                    name = \"Velocity\";\n                break;\n            case 'acceleration':\n                // console.log(\"Name:::: \" + name);\n                if(name == null || name == undefined || name == \"\"){\n                    name = \"Acceleration\";\n                }else {\n                    if(name === 'acceleration') {\n                        name = \"Acceleration\";\n                    } else {\n                        name = \"mmH2O\"; //obj.temporalAccelerationName;\n                    }\n                }\n                break;\n            case 'strain':\n                name = obj.temporalStrainName;\n                if(name == null || name == undefined || name == \"\"){\n                    name = \"Strain\";\n                }            \n                break;\n            case 'strain_rate':\n                name = obj.temporalStrainRateName;\n                if(name == null || name == undefined || name == \"\"){\n                    name = \"Strain Rate\";\n                }            \n                break;\n            case 'load':\n                name = obj.temporalLoadName;\n                if(name == null || name == undefined || name == \"\"){\n                    name = \"Load\";\n                }            \n\n                break;\n            case 'axial_strain':\n                name = \"Axial-strain\";\n                break;\n            case 'bending_strain':\n                name = \"Bending-strain\";\n                break;\n            case 'temperature':\n                name = \"Temperature\";\n                break;\n            case 'event-frequency':\n                name = \"Event Frequency\";\n                break;\n            case 'event-ppv':\n                name = \"Event PPV\";\n                break;\n            case 'event-ppa':\n                name = \"Event PPA\";\n                break;\n            case 'cumulative-event-frequency':\n                name = \"Cumulative Frequency\";\n                break;\n            case 'cumulative-event-ppv':\n                name = \"Cumulative PPV\";\n                break;\n            case 'cumulative-event-ppa':\n                name = \"Cumulative PPA\";\n                break;\n            case 'vibration':\n                name = \"Frequency\"\n            default:\n                break;\n        }\n\n        //console.log(obj);\n        let chartName = name;\n        // console.log(\"chartName:::: \" + chartName);\n        let chartNameL = capitalize(chartName.substring(0, chartName.indexOf('-')));\n        let chartNameR = capitalize(chartName.substring(chartName.indexOf('-') + 1));\n        if(chartNameL !== \"\") {\n            chartName = chartNameL + \" \" + chartNameR;\n        }\n        \n        temporalGraphsController.send('updateProperties', ['chartData'], [obj]);\n        temporalGraphsController.send('updateProperties', ['finalVal'], resolvedModel.finalVal);\n        temporalGraphsController.send('updateProperties', ['chartDataValueName'], [chartName]);\n        resolvedModel.instrument.get('anchors').then(function(anchors) {\n            const anchorList = anchors.content ?? anchors;\n            temporalGraphsController.send('updateProperties', ['instrumentAnchors'], [anchorList]);\n            // Default the \"Select Reference Anchor\" highlight to the first anchor when no\n            // explicit selection exists. Reads from instrumentAnchorsSorted (which honors\n            // the multi-instrument synthesis for subModel B) instead of raw anchorList,\n            // because that's what the template iterates.\n            const current = temporalGraphsController.get('selectedAnchor');\n            if(current == null || current === 0 || current === '0'){\n                const sorted = temporalGraphsController.get('instrumentAnchorsSorted') || [];\n                const first = sorted[0];\n                const firstNumber = first && (first.number != null ? first.number : (first.get && first.get('number')));\n                if(firstNumber != null){\n                    temporalGraphsController.set('selectedAnchor', firstNumber);\n                }\n            }\n        });\n    },\n    actions: {\n        setDataR(data) {\n            let temporalGraphsController = this.controllerFor('temporal-graphs');\n\n            temporalGraphsController.send('setData',data);\n        },\n        setChartR(chart) {\n            let temporalGraphsController = this.controllerFor('temporal-graphs');\n\n            temporalGraphsController.send('setChart',chart);\n        },\n        willTransition() {\n            let temporalGraphsController = this.controllerFor('temporal-graphs');\n\n            temporalGraphsController.send('updateProperties', ['instrumentId'], [null]);\n            temporalGraphsController.send('updateProperties', ['eventType'], [null]);\n            temporalGraphsController.send('updateProperties', ['blastType'], [null]);\n            temporalGraphsController.send('updateProperties', ['seismicType'], [null]);\n            temporalGraphsController.send('updateProperties', ['vibe_id'], [null]);\n            temporalGraphsController.send('updateProperties', ['chart_type'], [null]);\n            temporalGraphsController.send('updateProperties', ['display_records'], [null]);\n            temporalGraphsController.send('updateProperties', ['ref_anchor'], [null]);\n            temporalGraphsController.send('updateProperties', ['start_timestamp'], [null]);\n            temporalGraphsController.send('updateProperties', ['end_timestamp'], [null]);\n            temporalGraphsController.send('updateProperties', ['port'], [1]);\n            \n            \n        }\n    }\n});\n\n","import { hash } from 'rsvp';\nimport { inject as service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class VibrationsRoute extends Route.extend({\n    queryParams: {\n        page: {\n            refreshModel: true\n        },\n        page_size: {\n            refreshModel: true\n        },\n        ordering: {\n            refreshModel: true\n        },\n        search: {\n            refreshModel: true\n        }\n    },\n    model(params) {\n        return hash({\n            vibrationEvents: this.store.query('vibration-event', params),\n            //licence: this.get('store').findAll('licence')\n        });\n    },\n    afterModel: function(resolvedModel) {\n        let pageSize = resolvedModel.vibrationEvents.query.page_size,\n            eventsMeta = resolvedModel.vibrationEvents.meta,\n            vibeEventsController = this.controllerFor('vibration-events')\n        ;\n\n        vibeEventsController.send('updateProperty', 'pageSize', pageSize);\n        vibeEventsController.send('updateProperty', 'eventsMeta', eventsMeta);\n    }\n}) {\n    @service session;\n    @service store;\n\n    beforeModel(transition) {\n      this.session.requireAuthentication(transition, 'login');\n    };\n}\n","import JSONAPISerializer from '@ember-data/serializer/json-api';\n\nexport default class ApplicationSerializer extends JSONAPISerializer {\n}\n","export { default } from '@embroider/util/services/ensure-registered';\n","import { computed } from '@ember/object';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Service, { inject as service } from '@ember/service';\n\nexport default class CustomAjaxService extends Service {\n  @service session;\n\n  host = `${getApiBaseUrl()}`;\n\n  @computed('session.authToken')\n  get headers() {\n    let headers = {\n      'Authorization': `Basic ${this.session.data.authenticated['login']}`,\n    };\n    return headers;\n  }\n}\n","import { inject as service } from '@ember/service';\nimport { getApiBaseUrl } from '../utils/api-config';\nimport Service from '@ember/service';\nimport fetch from 'fetch';\n\nexport default class AlertsBatchService extends Service {\n    @service session;\n\n    async batchEdit(mode, profileIds = []) {\n        if (!mode || profileIds.length === 0) {\n            throw new Error('Invalid batch edit request');\n        }\n\n        if (!this.session.isAuthenticated) {\n            throw new Error('User not authenticated');\n        }\n\n        const accessToken = this.session.data.authenticated.access;\n\n        const payload = {\n            mode, // activate | deactivate | mute | unmute | acknowledge | unacknowledge\n            profile_ids: profileIds,\n        };\n\n        const response = await fetch(\n            `${getApiBaseUrl()}/alerts/batch/edit/`,\n            {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application/json',\n                Authorization: `Bearer ${accessToken}`,\n            },\n            body: JSON.stringify(payload),\n            }\n        );\n\n        if (!response.ok) {\n            const errorText = await response.text();\n            throw new Error(errorText || 'Batch edit failed');\n        }\n\n        return response.json();\n    }\n\n    async batchDelete(profileIds = []) {\n        if (profileIds.length === 0) {\n            throw new Error('Invalid batch edit request');\n        }\n\n        if (!this.session.isAuthenticated) {\n            throw new Error('User not authenticated');\n        }\n\n        const accessToken = this.session.data.authenticated.access;\n\n        const payload = {\n            profile_ids: profileIds,\n        };\n\n        const response = await fetch(\n            `${getApiBaseUrl()}/alerts/batch/delete/`,\n            {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application/json',\n                Authorization: `Bearer ${accessToken}`,\n            },\n            body: JSON.stringify(payload),\n            }\n        );\n\n        if (!response.ok) {\n            const errorText = await response.text();\n            throw new Error(errorText || 'Batch edit failed');\n        }\n\n        return response.json();\n    }\n}\n","import { inject as service } from '@ember/service';\nimport Service from '@ember/service';\n\nexport default class ApiService extends Service {\n  @service session;\n  @service router;\n\n  async fetch(url, options = {}) {\n    let response;\n\n    try {\n      response = await fetch(url, options);\n    } catch (e) {\n      // Network error, server down, etc.\n      throw e;\n    }\n\n    // GLOBAL 401 HANDLER — skip for logout/licence to avoid infinite loop\n    if (response.status === 401 && !url.includes('/logout') && !url.includes('/licence')) {\n        if (!this._isLoggingOut) {\n            this._isLoggingOut = true;\n            console.warn(\"API returned 401 — logging out\");\n\n            localStorage.clear();\n\n            try {\n                await this.session.invalidate();\n            } catch (e) {\n                // Ignore errors during invalidation\n            }\n\n            this._isLoggingOut = false;\n            this.router.transitionTo('login');\n        }\n\n        throw new Error(\"Unauthorized\");\n    }\n\n    return response;\n  }\n}\n","import { getApiBaseUrl } from '../utils/api-config';\n// app/services/configuration.js\nimport Service from '@ember/service';\nimport ENV from '../config/environment';\n\n\nexport default Service.extend({\n  async loadConfigurations() {\n    let url = `${getApiBaseUrl()}/api/oauth-providers`;\n  \n    return fetch(url).then(response => response.json())\n      .then(data => {\n        data.forEach(providerConfig => {\n          // Adjusting for the presence of both apiKey and clientId\n          let providerDetails = {\n            redirectUri: providerConfig.redirect_uri,\n          };\n\n          if (providerConfig.api_key) {\n            providerDetails.apiKey = providerConfig.api_key;\n          }\n\n          if (providerConfig.client_id) {\n            providerDetails.clientId = providerConfig.client_id;\n          }\n\n          // Including authorizationBaseURL and tokenURL if they are part of the OAuth flow\n          if (providerConfig.authorization_base_url) {\n            providerDetails.authorizationBaseURL = providerConfig.authorization_base_url;\n          }\n\n          if (providerConfig.token_url) {\n            providerDetails.tokenURL = providerConfig.token_url;\n          }\n\n          // Now, set the provider details in ENV\n          ENV.torii.providers[providerConfig.provider_name] = providerDetails;\n        });\n      }).catch(error => console.error(\"Error loading configurations:\", error));\n  }\n});\n","export { default } from \"ember-cookies/services/cookies\";\n","export { default } from 'ember-leaflet/services/ember-leaflet';\n","import { computed } from '@ember/object';\nimport Service from '@ember/service';\nimport ENV from '../config/environment';\nimport { getDestinationElementIdFromConfig } from 'ember-modal-dialog/utils/config-utils';\n\nfunction computedFromConfig(prop) {\n  return computed(function () {\n    return ENV['ember-modal-dialog'] && ENV['ember-modal-dialog'][prop];\n  });\n}\n\nexport default Service.extend({\n  hasEmberTether: computedFromConfig('hasEmberTether'),\n  hasLiquidWormhole: computedFromConfig('hasLiquidWormhole'),\n  hasLiquidTether: computedFromConfig('hasLiquidTether'),\n  destinationElementId: computed(function () {\n    return getDestinationElementIdFromConfig(ENV);\n  }),\n});\n","export { default } from \"ember-moment/services/moment\";\n","import { getApiBaseUrl } from '../utils/api-config';\nimport Service from '@ember/service';\nimport fetch from 'fetch';\nimport ENV from 'geotechnical-data-platform-new/config/environment';\n\nexport default class OauthConfigService extends Service {\n\n  async loadProviderConfig(providerName) {\n    const url = `${getApiBaseUrl()}/api/oauth-providers/config/${providerName}/`;\n\n    let response = await fetch(url);\n    if (!response.ok) {\n      throw new Error(\"Failed to load provider configuration\");\n    }\n\n    return await response.json();  // { clientId, tenantId, redirectUri, tokenUrl }\n  }\n}\n","export { default } from \"ember-page-title/services/page-title\";\n","export { default } from 'torii/services/popup';\n","export { default } from \"ember-simple-auth/services/session\";\n","import { deprecate } from '@ember/debug';\n\nimport DataStore from 'ember-data/store';\n\nexport default class Store extends DataStore {\n  constructor(...args) {\n    super(...args);\n\n    deprecate(\n      \"You are relying on ember-data auto-magically installing the store service. Use `export { default } from 'ember-data/store';` in app/services/store.js instead\",\n      false,\n      {\n        id: 'ember-data:deprecate-legacy-imports',\n        for: 'ember-data',\n        until: '6.0',\n        since: {\n          enabled: '5.2',\n          available: '4.13',\n        },\n      }\n    );\n  }\n}\n","export { default } from 'torii/services/torii-session';\n","export { default } from 'torii/services/torii';\n","import { tracked } from '@glimmer/tracking';\nimport Service from '@ember/service';\n\nexport default class UserProfileService extends Service {\n  @tracked userProfileService = null;\n\n  constructor() {\n    super(...arguments);\n    let stored = localStorage.getItem(\"userProfileService\");\n    if (stored) {\n      try{\n        this.userProfileService = JSON.parse(stored);\n      }\n      catch(e){\n\n      }\n    }\n  }\n\n  loadFromServer(serverPayload) {\n    // console.log(\"loadFromServer: \");\n    // console.log(serverPayload);\n    this.userProfileService = serverPayload;\n    localStorage.setItem(\"userProfileService\", JSON.stringify(serverPayload));\n  }\n\n  updateField(key, value) {\n    this.userProfileService = {\n      ...this.userProfileService,\n      profile: {\n        ...this.userProfileService.profile,\n        [key]: value\n      }\n    };\n    localStorage.setItem(\"userProfileService\", JSON.stringify(this.userProfileService));\n  }\n}\n","import { getApiBaseUrl } from '../utils/api-config';\nimport CookieStore from 'ember-simple-auth/session-stores/cookie';\nimport ENV from \"geotechnical-data-platform-new/config/environment\";\n\nexport default class ApplicationSessionStore extends CookieStore {\n\n    async refreshLicence() {\n        //console.log('refresh');\n        \n        let cookie = await this.restore();\n        \n        let url = getApiBaseUrl();\n        url += url.endsWith(\"/\") ? \"\" : \"/\"\n        url += \"licences/\"\n    \n        let response = await fetch(url, {\n            method: 'GET',\n            headers: {\n                'Origin': getApiBaseUrl(),\n                'Content-Type': 'application/json',\n                'Authorization': 'Bearer ' + localStorage.token\n            },\n        });\n        //console.log('auth');\n        if (response.ok) {\n            try {\n                let licence = await response.json();\n                licence = licence.data[0]\n                cookie.authenticated.isValid = licence.attributes['is-valid'];\n                cookie.authenticated.limit =  licence.attributes['within-limit'];\n                cookie.authenticated.modules = licence.attributes['modules'];\n                await this.persist(cookie);\n            } catch {}\n        } else if (response.status === 401) {\n            // Token expired — clear auth silently, don't loop\n            localStorage.clear();\n        }\n    }\n}","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Alerts\\\"}}<div class=\\\"container-fluid\\\">{{bread-crumbs}}<div><h4>Alerts</h4></div>{{#if this.isShowBatchConfirmationModal}}{{batch-confirmation-modal typeBatch=this.typeBatch warningMessage=this.batchWarningMessage closeModal=(action \\\"close\\\") confirmModal=(action \\\"confirm\\\")}}{{/if}}{{#if this.licenceIsValid}}<div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content: space-between;\\\"><div class=\\\"action-bar-section\\\"><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"table-legend\\\"}} class=\\\"action-bar-head-body\\\">Table Legend</div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"advaned-filters\\\"}} class=\\\"action-bar-head-body\\\">Advance Filters</div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"actions\\\"}} class=\\\"action-bar-head-body\\\">Actions</div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"batch-actions\\\"}} class=\\\"action-bar-tail\\\">Batch Actions</div></div></div>{{/if}}<div style=\\\"margin:15px\\\">{{#if (is-equal this.activeActionTab \\\"table-legend\\\")}}{{table-legend-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"advaned-filters\\\")}}{{advanced-filter-alerts searchValue=this.search page_size=this.page_size page=this.page}}{{/if}}{{#if (is-equal this.activeActionTab \\\"actions\\\")}}{{actions-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"batch-actions\\\")}}{{batch-actions-alerts batchSelectedAlertsID=this.batchSelectedAlertsID alerts=this.model.alerts isShowBatchConfirmationModal=this.isShowBatchConfirmationModal typeBatch=this.typeBatch batchWarningMessage=this.batchWarningMessage}}{{/if}}</div><div>{{alerts-list licenceIsValid=this.licenceIsValid allowBatchSelect=true batchSelectedAlertsID=this.batchSelectedAlertsID alerts=this.model.alerts globalDatetimeFormat=this.model.globalDatetimeFormat ordering=this.ordering sortBy=(action \\'sortBy\\')}}</div><div style=\\\"justify-content: flex-end;display: flex;\\\">{{pagination-links meta=this.model.alerts.meta routeLink=\\'alerts\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/alerts.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"VantagePoint\\\"}}{{navbar}}{{outlet}}<footer class=\\\"footer\\\"><div style=\\\"display: flex;flex-direction: row;justify-content: space-between;\\\"><div>©{{current-date \\'Y\\'}} YieldPoint powered by Epiroc</div><div style=\\\"display:flex; flex-direction:row; align-items:center\\\">{{#if this.session.isAuthenticated}}<LinkTo @route=\\\"contact-us\\\" style=\\\"margin-right:10px; cursor:pointer; text-decoration:underline;font-size: small; color: gray;\\\">Contact Us</LinkTo><LinkTo @route=\\\"have-an-issue\\\" style=\\\"margin-right:10px; cursor:pointer; text-decoration:underline;font-size: small; color: gray;\\\">Have an issue?</LinkTo>{{/if}}</div></div></footer>', { moduleName: 'geotechnical-data-platform-new/templates/application.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{outlet}}<div style=\\\"padding-top: 1rem;\\\" class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"mt-1\\\">{{#if this.permissionError}}<table style=\\\"width: 100%; margin-bottom: 1rem;\\\" id=\\\"instrumentEditError\\\"><tr class=\\\"details\\\"><td colspan=\\\"6\\\" style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"td_details error\\\"><label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You do not have sufficent permissions.</label></td></tr></table>{{/if}}<table style=\\\"width: 100%; margin-bottom: 1rem;\\\" hidden id=\\\"instrumentEditError\\\"><tr class=\\\"details\\\"><td colspan=\\\"6\\\" style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"td_details error\\\"><label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You do not have sufficent permissions.</label></td></tr></table><h4>Events</h4></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\">{{filter-text-input-events searchValue=this.search}}</div><div class=\\\"col-sm-2\\\"><div class=\\\"form-group\\\"><label>Rows</label><div class=\\\"dropdown\\\">{{page-item-count page_size=this.page_size page_type=\\'blast-events\\' model=@model.blastEvents}}</div></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@model.blastEvents.meta routeLink=\\'blast-events\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{create-new-blast-event-form blastEvents=@model.blastEvents blastTypesSelectOptions=@model.blastTypes blastTypesSelectOptionsKyes=\\\"id,title\\\" projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList vewRowDetails=(action \\'vewRowDetails\\') isVisibleCreateNewForm=this.isVisibleCreateNewForm dateFormat=\\'YYYY-MM-DD HH:mm:ss\\' setProp=(action \\'updateProperty\\')}}<table class=\\\"table table-striped responsive-table\\\"><thead><tr>{{sortable-table-header title=\\'Timestamp\\' sortProperty=\\'timestamp\\' selectedSortProperty=this.ordering sort=(action \\'sortBy\\')}}{{sortable-table-header title=\\'Location\\' sortProperty=\\'location\\' selectedSortProperty=this.ordering sort=(action \\'sortBy\\')}}{{sortable-table-header title=\\'Delay\\' sortProperty=\\'delay\\' selectedSortProperty=this.ordering sort=(action \\'sortBy\\')}}{{sortable-table-header title=\\'Level\\' sortProperty=\\'level\\' selectedSortProperty=this.ordering sort=(action \\'sortBy\\')}}{{sortable-table-header title=\\'Project\\' sortProperty=\\'project\\' selectedSortProperty=this.ordering sort=(action \\'sortBy\\')}}{{sortable-table-header title=\\'Stope\\' sortProperty=\\'stope\\' selectedSortProperty=this.ordering sort=(action \\'sortBy\\')}}{{sortable-table-header title=\\'Tonnes\\' sortProperty=\\'tonnes\\' selectedSortProperty=this.ordering sort=(action \\'sortBy\\')}}<th id=\\\"add-new\\\" class=\\\"add-new-item\\\"><span {{action \\'updateProperty\\' \\'isVisibleCreateNewForm\\' \\'true\\' on=\\\"click\\\"}} class=\\\"add-new\\\"><FaIcon @icon=\\\"plus\\\" /> New</span></th></tr></thead><tbody>{{#each @model.blastEvents as |tableRow|}}<tr class=\\\"{{active-class (get this.isVisibleRowDetails tableRow.id)}}\\\"><td>{{tableRow.timestamp}}</td><td>{{tableRow.location}}</td><td>{{tableRow.delay}}</td><td>{{single-save-lookup selectOptions=@model.levelLookupList selectOptionsKyes=\\\"id,value\\\" object=tableRow.level parentObject=tableRow field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'id\\' inputFieldId=\\'level\\' isEditable=true width=150}}</td><td>{{single-save-lookup selectOptions=@model.projectLookupList selectOptionsKyes=\\\"id,value\\\" object=tableRow.project parentObject=tableRow field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'id\\' inputFieldId=\\'project\\' isEditable=true width=150}}</td><td>{{tableRow.stope}}</td><td>{{tableRow.tonnes}}</td><td class=\\\"crud-td\\\"><span {{action \\'toggleRowDeleteConfirmationDialog\\' tableRow.id on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\'vewRowDetails\\' tableRow.id on=\\\"click\\\"}} class=\\\"crud view\\\"><FaIcon @icon=\\\"eye\\\" /></span><div class=\\\"delete-confirmation {{active-class (get this.isRowDeleteConfirmationDialog tableRow.id)}}\\\"><span class=\\\"crud-delete-message\\\"><span><small>Delete it?</small><small>Are you sure?</small></span></span><span {{action \\'remove\\' @model.blastEvents tableRow on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-confirm\\\">Yes</span><span {{action \\'toggleRowDeleteConfirmationDialog\\' tableRow.id on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-cancel\\\">No</span></div></td></tr>{{#if (get this.isVisibleRowDetails tableRow.id)}}<tr class=\\\"details\\\"><td></td><td></td><td></td><td colspan=\\\"4\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"{{tableRow.timestamp}}\\\" class=\\\"col-12 col-form-label\\\">Timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=tableRow field=\\'timestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.location}}\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=tableRow inputType=\\'text\\' field=\\'location\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.coordinates}}\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=tableRow east=tableRow.east north=tableRow.north depth=tableRow.depth}}</td></tr><tr><td><label for=\\\"{{tableRow.comments}}\\\" class=\\\"col-12 col-form-label\\\">Comments:</label></td><td class=\\\"input\\\">{{single-save-input object=tableRow inputType=\\'textarea\\' field=\\'comments\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.isVisible}}\\\" class=\\\"col-12 col-form-label\\\">Is visible:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=tableRow field=\\'isVisible\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.delay}}\\\" class=\\\"col-12 col-form-label\\\">Delay:</label></td><td class=\\\"input\\\">{{single-save-time-picker object=tableRow field=\\'delay\\' format=\\'HH:mm:ss\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.level}}\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-lookup selectOptions=@model.levelLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" object=tableRow.level parentObject=tableRow field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'id\\' inputFieldId=\\'level\\' isEditable=true}}</td></tr><tr><td><label for=\\\"{{tableRow.project}}\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-lookup selectOptions=@model.projectLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" object=tableRow.project parentObject=tableRow field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'id\\' inputFieldId=\\'project\\' isEditable=true}}</td></tr><tr><td><label for=\\\"{{tableRow.stope}}\\\" class=\\\"col-12 col-form-label\\\">Stope:</label></td><td class=\\\"input\\\">{{single-save-input object=tableRow inputType=\\'text\\' field=\\'stope\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.tonnes}}\\\" class=\\\"col-12 col-form-label\\\">Tonnes:</label></td><td class=\\\"input\\\">{{single-save-input object=tableRow inputType=\\'text\\' field=\\'tonnes\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.blastType.title}}\\\" class=\\\"col-12 col-form-label\\\">Blast type:</label></td><td class=\\\"input\\\">{{single-save-select selectOptions=@model.blastTypes selectOptionsKyes=\\\"id,title\\\" object=tableRow.blastType parentObject=tableRow field=\\'title\\' valueSource=\\'id\\'}}</td></tr></tbody></table></td></tr>{{/if}}{{/each}}</tbody></table><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@model.blastEvents.meta routeLink=\\'blast-events\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div class=\\\"pb-1\\\"></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/blast-events.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"display:flex;flex-direction:column;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:15px\\\"><button type=\\\"button\\\" {{action \\\"createAlert\\\" on=\\\"click\\\"}} style=\\\"font-size:small;margin-right: 5px;\\\" class=\\\"btn btn-primary\\\">Create Alert</button></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/actions-alerts.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"margin-top: 10px;\\\"><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:450px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-spatial\\\"></canvas></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;margin-top:4px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Hover over the chart to see values in the panel below\\\">Hover to see values</div><div title=\\\"Colored dots on x-axis show anchor positions\\\">Dots = anchor positions</div><div title=\\\"Scroll up to zoom out centered around cursor\\\">Scroll up to zoom out</div><div title=\\\"Scroll down to zoom in towards cursor\\\">Scroll down to zoom in</div><div title=\\\"Click and drag left or right\\\">Drag to pan</div><div title=\\\"Double-click anywhere on the chart\\\">Double-click to reset</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/adict/chartjs-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/adict/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectVendor\\\" class=\\\"col-12 col-form-label\\\">Vendor Type:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"newInstrumentObjectVendor\\\" onchange={{action \\\"vendorTypeChanged\\\" value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"\\\">Select a Vendor Type</option>{{#each this.vendors as |selectOption|}}{{#if selectOption.selected}}<option selected value={{selectOption.id}}>{{selectOption.instrumentTitle}}</option>{{/if}}{{#unless selectOption.selected}}<option value={{selectOption.id}}>{{selectOption.instrumentTitle}}</option>{{/unless}}{{/each}}</select></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectPotentiometer\\\" class=\\\"col-12 col-form-label bold\\\">Stroke Length:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"newInstrumentObjectPotentiometer\\\" value={{this.newInstrumentObject.strokeLength}} onchange={{action \\'strokeLengthChanged\\' value=\\\"target.value\\\"}} disabled={{this.formDisabled}} required><option value={{null}}>Select a Stroke Length</option><option value=\\\"31.75\\\">31.75 mm (1.25 in)</option><option value=\\\"63.5\\\">63.5 mm (2.5 in)</option><option value=\\\"127\\\">127 mm (5 in)</option><option value=\\\"190.5\\\">190.5 mm (7.5 in)</option><option value=\\\"254\\\">254 mm (10 in)</option><option value=\\\"508\\\">508 mm (20 in)</option></select></div></div></td></tr></tbody></table></td></tr><tr><td colspan=\\\"5\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><span class=\\\"separator\\\"></span></td></tr><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" disabled={{this.formDisabled}} class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=this.projectLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'newInstrumentObjectProject\\' onSelectionChange=(action \\'setProject\\') inputFieldId=\\'project\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.location}} oninput={{action (mut this.newInstrumentObject.location) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLocation\\\" disabled={{this.formDisabled}} class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCoordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.east}} oninput={{action (mut this.newInstrumentObject.east) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectEast\\\" disabled={{this.formDisabled}} class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.north}} oninput={{action (mut this.newInstrumentObject.north) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNorth\\\" disabled={{this.formDisabled}} class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.depth}} oninput={{action (mut this.newInstrumentObject.depth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDepth\\\" disabled={{this.formDisabled}} class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectAzimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.azimuth}} oninput={{action (mut this.newInstrumentObject.azimuth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAzimuth\\\" disabled={{this.formDisabled}} class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectDip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.dip}} oninput={{action (mut this.newInstrumentObject.dip) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDip\\\" disabled={{this.formDisabled}} class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=this.levelLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'newInstrumentObjectLevel\\' onSelectionChange=(action \\'setLevel\\') inputFieldId=\\'level\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectBorehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.borehole}} oninput={{action (mut this.newInstrumentObject.borehole) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectBorehole\\\" disabled={{this.formDisabled}} class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\" disabled={{this.formDisabled}}></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\" disabled={{this.formDisabled}}></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.installedBy}} oninput={{action (mut this.newInstrumentObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstalledBy\\\" disabled={{this.formDisabled}} class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.purpose}} oninput={{action (mut this.newInstrumentObject.purpose) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPurpose\\\" disabled={{this.formDisabled}} class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newInstrumentObject.notes}} oninput={{action (mut this.newInstrumentObject.notes) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNotes\\\" disabled={{this.formDisabled}} class=\\\"form-control\\\"></textarea></div></div></td></tr><tr><td><br /></td></tr>{{#if this.fieldVisible}}<tr><td><label for=\\\"newInstrumentObjectElasticLimitPct\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit strain (%):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.elasticLimitPct}} oninput={{action (mut this.newInstrumentObject.elasticLimitPct) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectElasticLimitPct\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectUltimateLimitPct\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit strain (%):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.ultimateLimitPct}} oninput={{action (mut this.newInstrumentObject.ultimateLimitPct) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectUltimateLimitPct\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjEctelasticLimitFce\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit force (kN):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.elasticLimitFce}} oninput={{action (mut this.newInstrumentObject.elasticLimitFce) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjEctelasticLimitFce\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectUltimateLimitFce\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit force (kN):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.ultimateLimitFce}} oninput={{action (mut this.newInstrumentObject.ultimateLimitFce) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectUltimateLimitFce\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><br /></td></tr>{{/if}}</tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px; text-align:right;\\\" class=\\\"add-new-item\\\"><button {{action \\\"createInstrument\\\" on=\\\"click\\\"}} disabled={{this.formDisabled}} class=\\\"add-new\\\"> Create</button></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/adict/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{this.instrumentAnchorsLength}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\'cancelNew\\' this.instruments on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\'saveNew\\' this.instruments on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each this.instrumentAnchors as |anchor|}}<td>{{anchor.label}} (mm)</td>{{/each}}<td>Temperature (°C)</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.newTimestampValue) value=\\\"target.value\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action (mut (get this.newDisplacementValueObjectValues key)) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} id=\\\"dftemp\\\" oninput={{action (mut this.temperatureObjectValue) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/adict/create-new-raw-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"width: 100%;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:10px\\\"><div style=\\\"margin-right:10px\\\"><div class=\\\"inst-buttons\\\"><span {{action \\\"viewData\\\" this.instrument.id on=\\\"click\\\"}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div></div><div style=\\\"margin-right:10px\\\">{{#if this.hasGraphs}}<div class=\\\"inst-buttons\\\"><span {{action \\\"tGraph\\\" this.instrument.id on=\\\"click\\\"}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div><div style=\\\"\\\">{{#if this.hasGraphs}}{{#if (gt this.instrument.channelsNum 2)}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"sGraph\\\" this.instrument.id on=\\\"click\\\"}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-area\\\" /> Spatial Graph</span></div>{{/if}}{{/if}}</div></div><div style=\\\"text-decoration:underline;margin-bottom:10px; cursor:pointer;\\\" onClick={{action \\\"cycleAlertsListVisibility\\\"}}><h5>Alerts:</h5></div>{{#if this.isAlertsListVisible}}{{#if this.licenceIsValid}}<div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content: space-between;\\\"><div class=\\\"action-bar-section\\\"><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"table-legend\\\"}} class=\\\"action-bar-head-body\\\">Table Legend</div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"actions\\\"}} class=\\\"action-bar-head-body\\\">Actions</div></div></div>{{/if}}<div style=\\\"margin:15px\\\">{{#if (is-equal this.activeActionTab \\\"table-legend\\\")}}{{table-legend-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"actions\\\")}}{{actions-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"batch-actions\\\")}}{{batch-actions-alerts batchSelectedAlertsID=this.batchSelectedAlertsID alerts=this.model.alerts isShowBatchConfirmationModal=this.isShowBatchConfirmationModal typeBatch=this.typeBatch batchWarningMessage=this.batchWarningMessage}}{{/if}}</div><div style=\\\"margin-bottom:10px\\\">{{alerts-list licenceIsValid=this.licenceIsValid allowBatchSelect=false batchSelectedAlertsID=this.batchSelectedAlertsID alerts=this.alertsList globalDatetimeFormat=this.globalDatetimeFormat ordering=this.ordering sortBy=(action \\'sortBy\\')}}</div><div style=\\\"display:flex;justify-content: flex-end;\\\">{{#each this.paginationSearchConfig.alertProfilePaginationList as |page|}}<button type=\\\"button\\\" {{action \\'jumpToPage\\' page on=\\\"click\\\"}} style=\\\"border-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}};color: {{if (eq page \\'...\\') \\'black\\' \\'white\\'}};margin-right: 10px;font-size:small;padding: 5px;background-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}}\\\" class=\\\"btn btn-primary\\\">{{page}}</button>{{/each}}</div>{{/if}}<div style=\\\"width: 100%;\\\"><div><h5>Properties:</h5></div><div style=\\\"width: 100%;display:flex;flex-direction:row;\\\"><table style=\\\"width: 100%;\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align: top; margin-bottom: 1rem; width: 50%;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Vendor Type:</label></td><td class=\\\"input\\\">{{single-save-select selectOptions=this.vendors selectOptionsKyes=\\\"id,instrumentTitle\\\" object=this.instrument.vendor parentObject=this.instrument field=\\'instrumentTitle\\' valueSource=\\'id\\' inputFieldId=\\'instrumentTitle\\' isEditable=true onSelectionChange=(action \\\"vendorTypeChanged\\\")}}</td></tr></tbody></table></td><td colspan=\\\"2\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"strokeLength\\\" class=\\\"col-12 col-form-label bold\\\">Stroke Length:</label></td><td class=\\\"input\\\">{{single-save-select-non-model selectOptions=this.strokeLengthArray selectOptionKey=\\\"options\\\" selectOptionsKyes=\\\"id,value\\\" object=this.instrument parentObject=this.instrument field=\\'strokeLength\\' valueSource=\\'id\\' inputFieldId=\\'strokeLength\\' isEditable=true}}</td></tr></tbody></table></td></tr></table></div><div style=\\\"width: 100%;display:flex;flex-direction:row;\\\"><div style=\\\"width: 50%;display:flex;flex-direction:column;\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"channelsNum\\\" class=\\\"col-12 col-form-label\\\">Channels:</label></td><td class=\\\"input\\\">{{single-save-input object=this.instrument inputType=\\'text\\' field=\\'channelsNum\\' isEditable=false}}</td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=this.instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=this.instrument inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"coordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=this.instrument east=this.instrument.east north=this.instrument.north depth=this.instrument.depth stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"azimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\">{{single-save-input object=this.instrument inputType=\\'text\\' field=\\'azimuth\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"dip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\">{{single-save-input object=this.instrument inputType=\\'text\\' field=\\'dip\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"borehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\">{{single-save-input object=this.instrument inputType=\\'text\\' field=\\'borehole\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></div><div style=\\\"width: 50%;display:flex;flex-direction:column;\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Active:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=this.instrument field=\\'active\\'}}</td></tr><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=this.instrument field=\\'zeroTimestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=this.instrument field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=this.instrument inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=this.instrument inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=this.instrument inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><br /></td></tr>{{#if this.fieldVisible}}<tr><td><label for=\\\"elasticLimitPct\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit strain (%):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=this.instrument inputType=\\'text\\' field=\\'elasticLimitPct\\' update=(action \\'updatePage\\') stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"ultimateLimitPct\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit strain (%):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=this.instrument inputType=\\'text\\' field=\\'ultimateLimitPct\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"elasticLimitFce\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit force (kN):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=this.instrument inputType=\\'text\\' field=\\'elasticLimitFce\\' update=(action \\'updatePage\\') stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"ultimateLimitFce\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit force (kN):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=this.instrument inputType=\\'text\\' field=\\'ultimateLimitFce\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"instrumentStiffness\\\" class=\\\"col-12 col-form-label\\\">Stiffness (kN/%):</label></td><td class=\\\"input\\\">{{single-save-input object=this.instrument inputType=\\'text\\' field=\\'instrumentStiffness\\' isEditable=false}}</td></tr>{{/if}}</tbody></table></div></div><div style=\\\"padding: 0.2rem;font-weight:bold;\\\">Anchor Diagram:</div><div style=\\\"padding:10px;width: 100%;\\\">{{#if this.isEditAnchorDiagram}}<div style=\\\"display:flex;flex-direction:row;align-items:center\\\"><div style=\\\"width: 100%;\\\">{{instrument-anchors-diagram showHATHACLabels=true style=\\\"width: 100%;\\\" inputMode=\\\"input\\\" initialValues=this.anchorDiagramInputInitalValue instrumentID=this.instrument.id headAt=this.instrument.headAt.id instrumentTypeText=this.instrument.instrumentType.title channels=this.instrument.channelsNum onCustomNumberInput=(action \\\"updateChannelInput\\\")}}</div><div style=\\\"margin-right:10px;margin-left:10px;cursor:pointer;\\\" onClick={{action \\\"saveAnchors\\\"}}><FaIcon @icon=\\\"check\\\" /></div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleEditAnchorDiagram\\\"}}><FaIcon @icon=\\\"times\\\" /></div></div>{{else}}<div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleEditAnchorDiagram\\\"}}>{{instrument-anchors-diagram showHATHACLabels=true style=\\\"width: 100%;\\\" inputMode=\\\"label\\\" initialValues=this.anchorDiagramLabelInitalValue instrumentID=this.instrument.id headAt=this.instrument.headAt.id instrumentTypeText=this.instrument.instrumentType.title channels=this.instrument.channelsNum}}</div>{{/if}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/adict/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-spatial-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-spatial-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/adict/nvd3-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/adict/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{this.displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=this.displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"table-responsive\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th>{{#each this.columnSpecs as |spec|}}<th>{{spec.tableLabel}}</th>{{/each}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th></tr></thead><tbody>{{#each this.tableRows as |row|}}<tr><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td>{{#each row.cells as |cell|}}<td>{{cell.value}}</td>{{/each}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td></tr>{{/each}}</tbody></table></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=this.displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/adict/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/adict/spatial-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n      <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n      <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Velocity</LinkTo>\\n      <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain</LinkTo>\\n      <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n      <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'load-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Load</LinkTo>\\n  </dd.menu>\\n</BsDropdown>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/adict/temporal-CABLE-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Velocity</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'acceleration-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Acceleration</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n  </dd.menu>\\n</BsDropdown>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/adict/temporal-MPBX-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Velocity</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'acceleration-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Acceleration</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n  </dd.menu>\\n</BsDropdown>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/adict/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:15px\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"font-size: small;\\\">Search: </div><div style=\\\"font-size: small;margin-left: 15px;\\\"><input style=\\\"max-width: 120px;\\\" type=\\\"text\\\" value={{this.search}} oninput={{action (mut this.search) value=\\\"target.value\\\"}} id=\\\"search\\\" class=\\\"form-control\\\"></div></div><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-left: 15px;\\\"><div style=\\\"font-size: small;\\\">Level: </div><div style=\\\"font-size: small;margin-left: 15px;\\\"><input style=\\\"max-width: 100px;\\\" type=\\\"number\\\" min=0 max=4 value={{this.level}} oninput={{action (mut this.level) value=\\\"target.value\\\"}} id=\\\"level\\\" class=\\\"form-control\\\"></div></div></div><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:15px\\\"><div style=\\\"display:flex;flex-direction:column;\\\"><div style=\\\"font-size: small;\\\">Trigger Date Range: </div><div style=\\\"font-size: small;margin-left: 15px;\\\"><div style=\\\"margin-left: 15px;\\\" class=\\\"input-group\\\"><div class=\\\"datetime-picker-component\\\"><label style=\\\"margin-right: 5px;\\\">From:</label><input style=\\\"margin-right: 15px;\\\" type=\\\"datetime-local\\\" value={{this.startTriggerDate}} oninput={{action (mut this.startTriggerDate) value=\\\"target.value\\\"}}></div><div class=\\\"datetime-picker-component\\\"><label style=\\\"margin-right: 5px;\\\">To:</label><input style=\\\"margin-right: 15px;\\\" type=\\\"datetime-local\\\" value={{this.endTriggerDate}} oninput={{action (mut this.endTriggerDate) value=\\\"target.value\\\"}}></div></div></div></div></div><div style=\\\"display:flex; flex-direction:row;\\\"><span class=\\\"input-group-btn\\\"><button type=\\\"button\\\" {{action \\\"apply\\\" on=\\\"click\\\"}} style=\\\"font-size: small;margin-right: 5px;\\\" class=\\\"btn btn-primary\\\">Apply</button><button type=\\\"button\\\" {{action \\\"reset\\\" on=\\\"click\\\"}} style=\\\"font-size: small;margin-right: 5px;\\\" class=\\\"btn btn-primary\\\">Reset</button></span>{{#if this.advancedSearchLoading}}<div style=\\\"width: auto; margin-left: 10px;\\\" class=\\\"pulse_loader\\\"></div>{{/if}}</div>', { moduleName: 'geotechnical-data-platform-new/templates/components/advanced-filter-alert-events.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:15px\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"\\\">Search: </div><div style=\\\"margin-left: 15px;\\\"><input style=\\\"max-width: 120px;\\\" type=\\\"text\\\" value={{this.search}} oninput={{action (mut this.search) value=\\\"target.value\\\"}} id=\\\"search\\\" class=\\\"form-control\\\"></div></div><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-left: 15px;\\\"><div style=\\\"\\\">Instrument ID: </div><div style=\\\"margin-left: 15px;\\\"><input style=\\\"max-width: 120px;\\\" type=\\\"text\\\" value={{this.instrumentId}} oninput={{action (mut this.instrumentId) value=\\\"target.value\\\"}} id=\\\"instrumentId\\\" class=\\\"form-control\\\"></div></div><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-left: 15px;\\\"><div style=\\\"\\\">Level: </div><div style=\\\"margin-left: 15px;\\\"><input style=\\\"max-width: 100px;\\\" type=\\\"number\\\" min=0 max=4 value={{this.level}} oninput={{action (mut this.level) value=\\\"target.value\\\"}} id=\\\"level\\\" class=\\\"form-control\\\"></div></div></div><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:15px\\\"><div style=\\\"display:flex;flex-direction:column;\\\"><div style=\\\"\\\">Creation Date Range: </div><div style=\\\"margin-left: 15px;\\\"><div style=\\\"margin-left: 15px;\\\" class=\\\"input-group\\\"><div class=\\\"datetime-picker-component\\\"><label style=\\\"margin-right: 5px;\\\">From:</label><input style=\\\"margin-right: 15px;\\\" type=\\\"datetime-local\\\" value={{this.startCreationDate}} oninput={{action (mut this.startCreationDate) value=\\\"target.value\\\"}}></div><div class=\\\"datetime-picker-component\\\"><label style=\\\"margin-right: 5px;\\\">To:</label><input style=\\\"margin-right: 15px;\\\" type=\\\"datetime-local\\\" value={{this.endCreationDate}} oninput={{action (mut this.endCreationDate) value=\\\"target.value\\\"}}></div></div></div></div></div><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:15px\\\"><div style=\\\"display:flex;flex-direction:column;\\\"><div style=\\\"\\\">Trigger Date Range: </div><div style=\\\"margin-left: 15px;\\\"><div style=\\\"margin-left: 15px;\\\" class=\\\"input-group\\\"><div class=\\\"datetime-picker-component\\\"><label style=\\\"margin-right: 5px;\\\">From:</label><input style=\\\"margin-right: 15px;\\\" type=\\\"datetime-local\\\" value={{this.startTriggerDate}} oninput={{action (mut this.startTriggerDate) value=\\\"target.value\\\"}}></div><div class=\\\"datetime-picker-component\\\"><label style=\\\"margin-right: 5px;\\\">To:</label><input style=\\\"margin-right: 15px;\\\" type=\\\"datetime-local\\\" value={{this.endTriggerDate}} oninput={{action (mut this.endTriggerDate) value=\\\"target.value\\\"}}></div></div></div></div></div><div style=\\\"display:flex; flex-direction:row;\\\"><span class=\\\"input-group-btn\\\"><button type=\\\"button\\\" {{action \\\"apply\\\" on=\\\"click\\\"}} style=\\\"margin-right: 5px;\\\" class=\\\"btn btn-primary\\\">Apply</button><button type=\\\"button\\\" {{action \\\"reset\\\" on=\\\"click\\\"}} style=\\\"margin-right: 5px;\\\" class=\\\"btn btn-primary\\\">Reset</button></span>{{#if this.advancedSearchLoading}}<div style=\\\"width: auto; margin-left: 10px;\\\" class=\\\"pulse_loader\\\"></div>{{/if}}</div>', { moduleName: 'geotechnical-data-platform-new/templates/components/advanced-filter-alerts.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><label onClick={{action \\\"toggleVisibility\\\"}} style=\\\"font-size: medium; color: #007bff; cursor: pointer; text-decoration: underline;\\\">Advanced Filters</label></div>{{#if this.visibleAdvancedFilter}}{{#if this.displayDateTimeFormat}}<div style=\\\"margin-bottom: 15px;\\\"><label>Date:</label><div style=\\\"margin-left: 15px;\\\" class=\\\"input-group\\\"><div class=\\\"datetime-picker-component\\\"><label style=\\\"margin-right: 5px;\\\">From:</label><input style=\\\"margin-right: 15px;\\\" type=\\\"datetime-local\\\" value={{this.startDate}} onchange={{action \\'updateDateProperty\\' \\'startDate\\'}} id=\\\"startRangeDateComponent\\\"></div><div class=\\\"datetime-picker-component\\\"><label style=\\\"margin-right: 5px;\\\">To:</label><input style=\\\"margin-right: 15px;\\\" type=\\\"datetime-local\\\" value={{this.endDate}} onchange={{action \\'updateDateProperty\\' \\'endDate\\'}} id=\\\"endRangeDateComponent\\\"></div></div></div>{{/if}}{{#if this.displayYAxistUnit}}{{#if this.isInstrumentApproved}}<div style=\\\"margin-bottom: 15px; \\\"><label>Unit Converter:</label><div style=\\\"display:flex; flex-direction:row; margin-left: 15px;\\\">{{radio-buttons id=\\\"m\\\" setValue=(action \\'toggleYAxisUnit\\' \\'m\\') type=\\'m\\' checked=this.meterValue}}<div style=\\\"width: 10px\\\"></div>{{radio-buttons id=\\\"mm\\\" setValue=(action \\'toggleYAxisUnit\\' \\'mm\\') type=\\'mm\\' checked=this.millimeterValue}}<div style=\\\"width: 10px\\\"></div>{{radio-buttons id=\\\"μm\\\" setValue=(action \\'toggleYAxisUnit\\' \\'μm\\') type=\\'μm\\' checked=this.microValue}}<div style=\\\"width: 10px\\\"></div>{{radio-buttons id=\\\"ft\\\" setValue=(action \\'toggleYAxisUnit\\' \\'ft\\') type=\\'ft\\' checked=this.footValue}}<div style=\\\"width: 10px\\\"></div>{{radio-buttons id=\\\"in\\\" setValue=(action \\'toggleYAxisUnit\\' \\'in\\') type=\\'in\\' checked=this.inchValue}}<div style=\\\"width: 10px\\\"></div><div><BsTooltip @title=\\\"RAW is untouched and not modified.\\\" @placement=\\\"top\\\" />{{radio-buttons id=\\\"RAW\\\" setValue=(action \\'toggleYAxisUnit\\' \\'RAW\\') type=\\'RAW\\' checked=this.RAWValue}}</div></div></div>{{/if}}{{/if}}<div style=\\\"margin-bottom: 15px;\\\"><div style=\\\"display:flex; flex-direction:row; margin-left: 15px;\\\">{{#if this.requireXMaxMin}}<div style=\\\"display:flex; flex-direction:column; margin-right:15px\\\"><div style=\\\"display:flex; flex-direction:row\\\"><label style=\\\"min-width: 90px; margin:0px; align-self: center; margin-right: 10px\\\">X-Min:</label><input style=\\\"max-width: 100px;\\\" type=\\\"text\\\" oninput={{action (mut this.xMin) value=\\\"target.value\\\"}} value={{this.xMin}} id=\\\"x_min\\\" class=\\\"form-control\\\"></div><div style=\\\"display:flex; flex-direction:row\\\"><label style=\\\"min-width: 90px; margin:0px; align-self: center; margin-right: 10px\\\">X-Max:</label><input style=\\\"max-width: 100px;\\\" type=\\\"text\\\" oninput={{action (mut this.xMax) value=\\\"target.value\\\"}} value={{this.xMax}} id=\\\"x_max\\\" class=\\\"form-control\\\"></div></div>{{/if}}<div style=\\\"display:flex; flex-direction:column; margin-right:15px\\\"></div>{{#if this.requireYLeftMaxMin}}<div style=\\\"display:flex; flex-direction:column\\\"><div style=\\\"display:flex; flex-direction:row\\\"><label style=\\\"min-width: 90px; margin:0px; align-self: center; margin-right: 10px\\\">Y-Left-Min:</label><input style=\\\"max-width: 100px;\\\" type=\\\"text\\\" oninput={{action (mut this.yLeftMin) value=\\\"target.value\\\"}} value={{this.yLeftMin}} id=\\\"y_left_min\\\" class=\\\"form-control\\\"></div><div style=\\\"display:flex; flex-direction:row\\\"><label style=\\\"min-width: 90px; margin:0px; align-self: center; margin-right: 10px\\\">Y-Left-Max:</label><input style=\\\"max-width: 100px;\\\" type=\\\"text\\\" oninput={{action (mut this.yLeftMax) value=\\\"target.value\\\"}} value={{this.yLeftMax}} id=\\\"y_left_max\\\" class=\\\"form-control\\\"></div></div>{{/if}}{{#if this.requireYRightMaxMin}}<div style=\\\"display:flex; flex-direction:column\\\"><div style=\\\"display:flex; flex-direction:row\\\"><label style=\\\"min-width: 90px; margin:0px; align-self: center; margin-right: 10px\\\">Y-Right-Min:</label><input style=\\\"max-width: 100px;\\\" type=\\\"text\\\" oninput={{action (mut this.yRightMin) value=\\\"target.value\\\"}} value={{this.yRightMin}} id=\\\"y_right_min\\\" class=\\\"form-control\\\"></div><div style=\\\"display:flex; flex-direction:row\\\"><label style=\\\"min-width: 90px; margin:0px; align-self: center; margin-right: 10px\\\">Y-Right-Max:</label><input style=\\\"max-width: 100px;\\\" type=\\\"text\\\" oninput={{action (mut this.yRightMax) value=\\\"target.value\\\"}} value={{this.yRightMax}} id=\\\"y_right_max\\\" class=\\\"form-control\\\"></div></div>{{/if}}</div></div><div style=\\\"display:flex; flex-direction:row\\\"><span class=\\\"input-group-btn\\\"><button type=\\\"button\\\" {{action \\\"search\\\" on=\\\"click\\\"}} style=\\\"margin-right: 5px;\\\" class=\\\"btn btn-primary\\\">Apply</button><button type=\\\"button\\\" {{action \\\"reset\\\" on=\\\"click\\\"}} style=\\\"margin-right: 5px;\\\" class=\\\"btn btn-primary\\\">Reset</button></span>{{#if this.advancedSearchLoading}}<div style=\\\"width: auto; margin-left: 10px; margin-bottom: 10px;\\\" class=\\\"pulse_loader \\\"></div>{{/if}}</div>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/advanced-filter.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"profile-body-title-with-loading\\\">Events{{#if this.isLoading}}<div style=\\\"margin-left:10px\\\" class=\\\"pulse_loader\\\"></div>{{/if}}</div><div style=\\\"padding:10px\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content: space-between;\\\"><div class=\\\"action-bar-section\\\"><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"advaned-filters\\\"}} class=\\\"action-bar-tail\\\">Advance Filters</div></div><div style=\\\"justify-content: flex-end;display: flex;\\\">{{#if this.alertEventRecord}}{{#each this.alertEventsPaginationList as |page|}}<button type=\\\"button\\\" {{action \\'jumpToPage\\' page on=\\\"click\\\"}} style=\\\"border-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}};color: {{if (eq page \\'...\\') \\'black\\' \\'white\\'}};margin-right: 10px;font-size:small;padding: 5px;background-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}}\\\" class=\\\"btn btn-primary\\\">{{page}}</button>{{/each}}{{/if}}</div></div><div style=\\\"margin:15px\\\">{{#if (is-equal this.activeActionTab \\\"advaned-filters\\\")}}{{advanced-filter-alert-events refreshAlertEvents=(action this.getAlertEvents) paginationSearchConfig=this.paginationSearchConfig searchValue=this.search page_size=this.paginationSearchConfig.pagination.page_size page=this.paginationSearchConfig.pagination.page}}{{/if}}</div><table style=\\\"border-width: 0px;margin-top:10px\\\" class=\\\"table table-striped table-bordered\\\"><thead><th id=\\\"id\\\" {{action \\'columnCycleOrdering\\' \\'id\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">ID</th><th id=\\\"level\\\" {{action \\'columnCycleOrdering\\' \\'level\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Level</th><th style=\\\"font-size: small;font-weight: normal;\\\">Message</th><th id=\\\"triggered_at\\\" {{action \\'columnCycleOrdering\\' \\'triggered_at\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Triggered At</th></thead><tbody>{{#each this.alertEventList as |alert|}}<tr><td style=\\\"font-size: small;\\\">{{alert.id}}</td><td style=\\\"padding: 0;display: flex;justify-content: center;\\\"><div style=\\\"width:40px;height:40px\\\" class=\\\"alert-ripple-container level-{{alert.level}} is-muted-{{alert.isMuted}}\\\"><div class=\\\"ripple-ring\\\"></div><span style=\\\"font-size:medium;\\\" class=\\\"alert-bell-icon\\\"><FaIcon @icon=\\\"bell\\\" /></span></div></td><td style=\\\"font-size: small;\\\">{{alert.message}}</td><td style=\\\"font-size: small;\\\">{{alert.triggeredAtember}}</td></tr>{{/each}}</tbody></table></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/alert-profile-sidebar-alert-events.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"profile-body-title-with-loading\\\">More{{#if this.isLoading}}<div style=\\\"margin-left:10px\\\" class=\\\"pulse_loader\\\"></div>{{/if}}</div><div style=\\\"padding:10px\\\"><div style=\\\"display: flex;flex-direction: row;justify-content: space-between;\\\"><div class=\\\"profile-sidebar-home-subtitle\\\">Alert Parameters</div>{{#if this.licenceIsValid}}<div onClick={{action \\'updateIsEditingProperty\\'}} class=\\\"my-profile-sidebar-home-row-edit\\\">Edit</div>{{/if}}</div>{{#each this.alertParameter as |paramObj|}}<div class=\\\"profile-body-row-section\\\"><div class=\\\"my-profile-sidebar-home-row-label-section\\\"><div class=\\\"my-profile-sidebar-home-row-label\\\">{{paramObj.keyText}}</div></div>{{#if this.isEditing}}<div style=\\\"margin-top:10px;width:50%;display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"margin-right:10px\\\">{{#if (is-equal paramObj.category this.TEXTCATEGORYCONST)}}<input id={{concat paramObj.key \\\"_Textbox\\\"}} type=\\\"text\\\" value={{paramObj.value}} oninput={{action \\\"updateInput\\\" paramObj.key (concat paramObj.key \\\"_Textbox\\\")}} class=\\\"form-control\\\">{{else if (is-equal paramObj.category this.NUMBERCATEGORYCONST)}}<input id={{concat paramObj.key \\\"_Textbox\\\"}} type=\\\"number\\\" min=0 value={{paramObj.value}} oninput={{action \\\"updateInput\\\" paramObj.key (concat paramObj.key \\\"_Textbox\\\")}}>{{else if (is-equal paramObj.category this.DISPCATEGORYCONST)}}{{displacement-units-group dispUnits=this.dispUnits initValue=paramObj.value allowRAW=false allowBits=false onChange=(action \\\"updateDispDropdownUnit\\\" paramObj.key)}}{{else if (is-equal paramObj.category this.TEMPCATEGORYCONST)}}{{temperature-units-group tempUnits=this.tempUnits initValue=paramObj.value onChange=(action \\\"updateTempDropdownUnit\\\" paramObj.key)}}{{else if (is-equal paramObj.category this.TIMECATEGORYCONST)}}{{time-units-group timeUnits=this.timeUnits initValue=paramObj.value onChange=(action \\\"updateTimeDropdownUnit\\\" paramObj.key)}}{{else if (is-equal paramObj.category this.RATECATEGORYCONST)}}{{rate-velocity-units-group dispUnits=this.dispUnits timeUnits=this.timeUnits allowRAW=false allowBits=false initValue=paramObj.value onChange=(action \\\"updateRateDropdownUnit\\\" paramObj.key)}}{{else if (is-equal paramObj.category this.BOOLEANCATEGORYCONST)}}<input id={{concat paramObj.key \\\"_CheckBox\\\"}} type=\\\"checkbox\\\" checked={{paramObj.value}} oninput={{action \\\"updateCheckbox\\\" paramObj.key (concat paramObj.key \\\"_CheckBox\\\")}}>{{else}}{{paramObj.value}}{{/if}}</div></div>{{#if (get this (concat \\\"ERROR_TIME_\\\" paramObj.key))}}<div style=\\\"text-align: center;\\\" class=\\\"profile-body-row-label-section-error-value\\\">{{this.outOfTimeMatchError}}</div>{{/if}}{{#if (get this (concat \\\"ERROR_DISP_\\\" paramObj.key))}}<div style=\\\"text-align: center;\\\" class=\\\"profile-body-row-label-section-error-value\\\">{{this.outOfDispDistMatchError}}</div>{{/if}}{{else}}<div class=\\\"profile-body-row-label-section-value\\\">{{#if (is-equal paramObj.category this.BOOLEANCATEGORYCONST)}}{{#if paramObj.value}}<FaIcon style=\\\"color:green\\\" @icon=\\\"check\\\" />       {{else}}<FaIcon style=\\\"color:red\\\" @icon=\\\"times\\\" />{{/if}}{{else}}{{paramObj.value}}{{/if}}</div>{{/if}}<div class=\\\"profile-body-row-label-section-divider\\\"></div></div>{{/each}}{{#if this.isEditing}}<div style=\\\"width:100%;display:flex;flex-direction:row;justify-content: space-evenly;align-items: center;\\\"><div onClick={{action \\\"applyChanges\\\"}} class=\\\"profile-body-row-label-section-edit\\\">Apply Changes</div><div onClick={{action \\\"revertChanges\\\"}} class=\\\"profile-body-row-label-section-edit\\\">Cancel</div></div>{{/if}}</div>', { moduleName: 'geotechnical-data-platform-new/templates/components/alert-profile-sidebar-alert-more.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"profile-body-title-with-loading\\\">Profile{{#if this.isLoading}}<div style=\\\"margin-left:10px\\\" class=\\\"pulse_loader\\\"></div>{{/if}}</div><div style=\\\"padding:10px\\\"><div class=\\\"profile-body-subtitle\\\">Overview</div><div class=\\\"profile-body-row-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Type</div><div class=\\\"profile-body-row-label-section-value\\\">{{this.getEvaluationType}}</div><div class=\\\"profile-body-row-label-section-divider\\\"></div></div><div class=\\\"profile-body-row-section\\\"><div class=\\\"profile-body-row-label-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Channels</div>{{#if this.licenceIsValid}}<div onClick={{action \\'updateIsEditingProperty\\' \\'channels\\'}} class=\\\"profile-body-row-label-section-edit\\\">Edit</div>{{/if}}</div>{{#if (is-equal this.isEditingChannels true)}}<div style=\\\"padding:10px;width: 100%;flex-direction: column;\\\">{{instrument-anchors-diagram showHATHACLabels=true style=\\\"width: 100%;\\\" inputMode=\\\"checkbox\\\" initialValues=this.anchorDiagramCheckboxInitalValue instrumentID=this.instr.id headAt=this.instr.headAt.id instrumentTypeText=this.instr.instrumentType.title channels=this.instr.channelsNum onCustomCheckBoxInput=(action \\\"updateChannelCheckboxInput\\\") triggerDiagramReset=(action \\\"triggerDiagramReset\\\")}}<div style=\\\"text-align: center;\\\" onClick={{action \\\"updateChannelProperty\\\" \\\"channels\\\"}} class=\\\"profile-body-row-label-section-edit\\\">Save</div></div>{{else}}<div style=\\\"padding:10px;\\\">{{instrument-anchors-diagram showHATHACLabels=true style=\\\"width: 100%;\\\" inputMode=\\\"label\\\" initialValues=this.anchorDiagramLabelInitalValue instrumentID=this.instr.id headAt=this.instr.headAt.id instrumentTypeText=this.instr.instrumentType.title channels=this.instr.channelsNum onCustomCheckBoxInput=(action \\\"updateChannelCheckboxInput\\\") triggerDiagramReset=(action \\\"triggerDiagramReset\\\")}}</div>{{/if}}<div class=\\\"profile-body-row-label-section-divider\\\"></div></div><div class=\\\"profile-body-row-section\\\"><div class=\\\"profile-body-row-label-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Statuses</div>{{#if this.licenceIsValid}}<div onClick={{action \\'updateIsEditingProperty\\' \\'statuses\\'}} class=\\\"profile-body-row-label-section-edit\\\">Edit</div>{{/if}}</div>{{#if (is-equal this.isEditingStatuses true)}}<div class=\\\"profile-body-row-is-and-is-not-edit-section\\\"><div class=\\\"profile-body-row-is-and-is-not-edit-field-section\\\"><div style=\\\"margin-right:15px\\\">Active:</div><div>{{#if (is-equal this.getIsActive true)}}<button type=\\\"button\\\" {{action \\\"statusButton\\\" \\\"deactivate\\\" on=\\\"click\\\"}} style=\\\"font-size:small;\\\" class=\\\"btn btn-primary\\\">Deactivate</button>{{else}}<button type=\\\"button\\\" {{action \\\"statusButton\\\" \\\"activate\\\" on=\\\"click\\\"}} style=\\\"font-size:small;\\\" class=\\\"btn btn-primary\\\">Activate</button>{{/if}}</div></div><div class=\\\"profile-body-row-is-and-is-not-edit-field-section\\\"><div style=\\\"margin-right:15px\\\">Muted:</div><div>{{#if (is-equal this.getIsMuted true)}}<button type=\\\"button\\\" {{action \\\"statusButton\\\" \\\"unmute\\\" on=\\\"click\\\"}} style=\\\"font-size:small;\\\" class=\\\"btn btn-primary\\\">Unmute</button>{{else}}<button type=\\\"button\\\" {{action \\\"statusButton\\\" \\\"mute\\\" on=\\\"click\\\"}} style=\\\"font-size:small;\\\" class=\\\"btn btn-primary\\\">Mute</button>{{/if}}</div></div><div class=\\\"profile-body-row-is-and-is-not-edit-field-section\\\"><div style=\\\"margin-right:15px\\\">Acknowledged:</div><div>{{#if (is-equal this.getIsAcknowledged true)}}<button type=\\\"button\\\" {{action \\\"statusButton\\\" \\\"unacknowledge\\\" on=\\\"click\\\"}} style=\\\"font-size:small;\\\" class=\\\"btn btn-primary\\\">Unacknowledge</button>{{else}}<button type=\\\"button\\\" {{action \\\"statusButton\\\" \\\"acknowledge\\\" on=\\\"click\\\"}} style=\\\"font-size:small;\\\" class=\\\"btn btn-primary\\\">Acknowledge</button>{{/if}}</div></div></div>{{else}}<div class=\\\"profile-body-row-is-and-is-not-edit-section\\\"><div class=\\\"profile-body-row-is-and-is-not-edit-field-section\\\"><div style=\\\"margin-right:15px\\\">Active:</div><div>{{#if (is-equal this.getIsActive true)}}<FaIcon style=\\\"color:green\\\" @icon=\\\"check\\\" />       {{else}}<FaIcon style=\\\"color:red\\\" @icon=\\\"times\\\" />{{/if}}</div></div><div class=\\\"profile-body-row-is-and-is-not-edit-field-section\\\"><div style=\\\"margin-right:15px\\\">Muted:</div><div>{{#if (is-equal this.getIsMuted true)}}<FaIcon style=\\\"color:green\\\" @icon=\\\"check\\\" />       {{else}}<FaIcon style=\\\"color:red\\\" @icon=\\\"times\\\" />{{/if}}</div></div><div class=\\\"profile-body-row-is-and-is-not-edit-field-section\\\"><div style=\\\"margin-right:15px\\\">Acknowledged:</div><div>{{#if (is-equal this.getIsAcknowledged true)}}<FaIcon style=\\\"color:green\\\" @icon=\\\"check\\\" />       {{else}}<FaIcon style=\\\"color:red\\\" @icon=\\\"times\\\" />{{/if}}</div></div></div>{{/if}}<div class=\\\"profile-body-row-label-section-divider\\\"></div></div><div class=\\\"profile-body-row-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Triggered At</div><div class=\\\"profile-body-row-label-section-value\\\">{{this.getTriggeredAt}}</div><div class=\\\"profile-body-row-label-section-divider\\\"></div></div><div class=\\\"profile-body-row-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Created At</div><div class=\\\"profile-body-row-label-section-value\\\">{{this.getCreatedAt}}</div><div class=\\\"profile-body-row-label-section-divider\\\"></div></div><div class=\\\"profile-body-row-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Last Data Received At</div><div class=\\\"profile-body-row-label-section-value\\\">{{this.getLastDataReceivedAt}}</div><div class=\\\"profile-body-row-label-section-divider\\\"></div></div><div class=\\\"profile-body-row-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Last Evaluation At</div><div class=\\\"profile-body-row-label-section-value\\\">{{this.getLastEvaluatedAt}}</div><div class=\\\"profile-body-row-label-section-divider\\\"></div></div><div class=\\\"profile-body-subtitle\\\">Delivery Info</div><div class=\\\"profile-body-row-section\\\"><div class=\\\"profile-body-row-label-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Method</div>{{#if this.licenceIsValid}}<div onClick={{action \\'updateIsEditingProperty\\' \\'deliveryMethod\\'}} class=\\\"profile-body-row-label-section-edit\\\">Edit</div>{{/if}}</div>{{#if (is-equal this.isEditingDeliveryMethod true)}}<div style=\\\"display: flex;flex-direction: row;gap: 15px;margin-top: 5px;\\\">{{#each this.getMethodDeliveryList as |delivery|}}<div style=\\\"display: flex;align-items: center;gap: 5px;cursor: pointer;\\\"><div>{{delivery.value}}</div><input id={{concat delivery.id \\\"_checkbox\\\"}} type=\\\"checkbox\\\" checked={{is-in this.getDeliveryMethod delivery.id}} onchange={{action \\\"toggleDeliveryMethod\\\" delivery.id}}></div>{{/each}}</div>{{else}}<div class=\\\"profile-body-row-label-section-value\\\">{{this.getMethodTypesLabel}}</div>{{/if}}</div><div class=\\\"profile-body-row-section\\\"><div class=\\\"profile-body-row-label-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Email</div></div>{{#if (is-equal this.isEditingDeliveryMethod true)}}<div style=\\\"display:flex;flex-wrap:wrap;align-items:center;gap:5px;border:1px solid #ccc;border-radius:4px;padding:5px;min-width:300px;min-height:36px;margin-right:10px;\\\">{{#each this.emailTags as |tag|}}<div style=\\\"display:flex;align-items:center;background:#4A6A9C;color:white;border-radius:3px;padding:2px 8px;font-size:small;\\\">{{tag}}<div style=\\\"margin-left:5px;cursor:pointer;font-weight:bold;\\\" {{action \\\"removeEmailTag\\\" tag on=\\\"click\\\"}}>x</div></div>{{/each}}<input id=\\\"emailTagInput\\\" type=\\\"text\\\" style=\\\"border:none;outline:none;flex:1;min-width:150px;\\\" placeholder=\\\"Type email + Enter\\\" onkeydown={{action \\\"onEmailTagKeydown\\\"}} disabled={{this.isDisabledEmailTextbox}}></div>{{else}}<div class=\\\"profile-body-row-label-section-value\\\">{{this.getEmailMethod}}</div>{{/if}}</div><div class=\\\"profile-body-row-section\\\"><div class=\\\"profile-body-row-label-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Phone</div></div>{{#if (is-equal this.isEditingDeliveryMethod true)}}<div style=\\\"display:flex;flex-wrap:wrap;align-items:center;gap:5px;border:1px solid #ccc;border-radius:4px;padding:5px;min-width:300px;min-height:36px;margin-right:10px;\\\">{{#each this.phoneTags as |tag|}}<div style=\\\"display:flex;align-items:center;background:#4A6A9C;color:white;border-radius:3px;padding:2px 8px;font-size:small;\\\">{{tag}}<div style=\\\"margin-left:5px;cursor:pointer;font-weight:bold;\\\" {{action \\\"removePhoneTag\\\" tag on=\\\"click\\\"}}>x</div></div>{{/each}}<input id=\\\"phone-input\\\" type=\\\"tel\\\" style=\\\"border:none;outline:none;flex:1;min-width:150px;\\\" placeholder=\\\"Type number + Enter\\\" disabled={{this.isDisabledPhoneTextbox}}></div>{{else}}<div class=\\\"profile-body-row-label-section-value\\\">{{this.getPhoneMethod}}</div>{{/if}}</div><div class=\\\"profile-body-row-section\\\"><div class=\\\"profile-body-row-label-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Contacts</div></div>{{#if (is-equal this.isEditingDeliveryMethod true)}}<div style={{this.recipientsDisabledStyle}}><select onchange={{action \\\"addContactRecipient\\\"}} style=\\\"font-size:small;padding:3px 6px;min-width:260px;\\\"><option value=\\\"\\\">Add a contact…</option>{{#each this.contactList as |c|}}<option value={{c.id}}>{{c.label}}</option>{{/each}}</select>{{#each this.displaySelectedContacts as |contact|}}<div style=\\\"display:flex;align-items:center;flex-wrap:wrap;gap:10px;border:1px solid #d6e0ff;background:#f4f7ff;border-radius:4px;padding:4px 8px;margin-top:4px;font-size:small;\\\"><div style=\\\"font-weight:600;\\\">{{contact.label}}</div><label style=\\\"display:flex;align-items:center;gap:3px;cursor:pointer;margin:0;\\\"><input type=\\\"checkbox\\\" checked={{contact.use_email}} disabled={{contact.emailDisabled}} {{action \\\"toggleContactChannel\\\" contact \\\"email\\\" on=\\\"change\\\"}}>Email</label><label style=\\\"display:flex;align-items:center;gap:3px;cursor:pointer;margin:0;\\\"><input type=\\\"checkbox\\\" checked={{contact.use_phone}} disabled={{contact.phoneDisabled}} {{action \\\"toggleContactChannel\\\" contact \\\"phone\\\" on=\\\"change\\\"}}>Phone</label><div style=\\\"cursor:pointer;color:red;font-weight:bold;margin-left:auto;\\\" {{action \\\"removeContactRecipient\\\" contact on=\\\"click\\\"}}>x</div></div>{{/each}}</div>{{else}}<div class=\\\"profile-body-row-label-section-value\\\">{{#if this.displayViewContacts.length}}{{#each this.displayViewContacts as |c|}}<div>{{c.summary}}</div>{{/each}}{{else}}-{{/if}}</div>{{/if}}</div><div class=\\\"profile-body-row-section\\\"><div class=\\\"profile-body-row-label-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Contact Groups</div></div>{{#if (is-equal this.isEditingDeliveryMethod true)}}<div style={{this.recipientsDisabledStyle}}><select onchange={{action \\\"addGroupRecipient\\\"}} style=\\\"font-size:small;padding:3px 6px;min-width:260px;\\\"><option value=\\\"\\\">Add a group…</option>{{#each this.groupList as |g|}}<option value={{g.id}}>{{g.label}}</option>{{/each}}</select>{{#each this.displaySelectedGroups as |group|}}<div style=\\\"margin-top:4px;\\\"><div style=\\\"display:flex;align-items:center;flex-wrap:wrap;gap:10px;border:1px solid #d6e0ff;background:#f4f7ff;border-radius:4px;padding:4px 8px;font-size:small;\\\"><div style=\\\"font-weight:600;\\\">{{group.label}}</div><label style=\\\"display:flex;align-items:center;gap:3px;cursor:pointer;margin:0;\\\"><input type=\\\"checkbox\\\" checked={{group.use_email}} disabled={{group.emailDisabled}} {{action \\\"toggleGroupChannel\\\" group \\\"email\\\" on=\\\"change\\\"}}>Email</label><label style=\\\"display:flex;align-items:center;gap:3px;cursor:pointer;margin:0;\\\"><input type=\\\"checkbox\\\" checked={{group.use_phone}} disabled={{group.phoneDisabled}} {{action \\\"toggleGroupChannel\\\" group \\\"phone\\\" on=\\\"change\\\"}}>Phone</label><div style=\\\"cursor:pointer;color:red;font-weight:bold;margin-left:auto;\\\" {{action \\\"removeGroupRecipient\\\" group on=\\\"click\\\"}}>x</div></div><div style=\\\"font-size:11px;color:#777;font-style:italic;margin-left:4px;\\\">This choice applies to all members of the group.</div></div>{{/each}}</div>{{else}}<div class=\\\"profile-body-row-label-section-value\\\">{{#if this.displayViewGroups.length}}{{#each this.displayViewGroups as |group|}}<div>{{group.summary}}</div>{{/each}}{{else}}-{{/if}}</div>{{/if}}</div>{{#if (is-equal this.isEditingDeliveryMethod true)}}<div style=\\\"flex-direction: row;justify-content: center;\\\" class=\\\"profile-body-row-section\\\"><div onClick={{action \\\"updateDeliveryMethodProperties\\\"}} class=\\\"profile-body-row-label-section-edit\\\">Save</div></div>{{/if}}<div class=\\\"profile-body-row-label-section-divider\\\"></div><div class=\\\"profile-body-subtitle\\\">Primary Info</div><div class=\\\"profile-body-row-section\\\"><div class=\\\"profile-body-row-label-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">ID</div></div><div class=\\\"profile-body-row-label-section-value\\\">{{this.getID}}</div><div class=\\\"profile-body-row-label-section-divider\\\"></div></div><div class=\\\"profile-body-row-section\\\"><div class=\\\"profile-body-row-label-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Name</div>{{#if this.licenceIsValid}}<div onClick={{action \\'updateIsEditingProperty\\' \\'name\\'}} class=\\\"profile-body-row-label-section-edit\\\">Edit</div>{{/if}}</div>{{#if (is-equal this.isEditingName true)}}<div class=\\\"profile-body-row-label-section-edit-textbox-section\\\"><td style=\\\"margin-right:10px\\\" class=\\\"input\\\"><input id=\\\"nameTextbox\\\" type=\\\"text\\\" value={{this.getName}} class=\\\"form-control\\\"></td><div onClick={{action \\\"updateProperty\\\" \\\"nameTextbox\\\" \\\"name\\\"}} class=\\\"profile-body-row-label-section-edit\\\">Save</div></div>{{else}}<div class=\\\"profile-body-row-label-section-value\\\">{{this.getName}}</div>{{/if}}<div class=\\\"profile-body-row-label-section-divider\\\"></div></div><div class=\\\"profile-body-row-section\\\"><div class=\\\"profile-body-row-label-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Note</div>{{#if this.licenceIsValid}}<div onClick={{action \\'updateIsEditingProperty\\' \\'note\\'}} class=\\\"profile-body-row-label-section-edit\\\">Edit</div>{{/if}}</div>{{#if (is-equal this.isEditingNote true)}}<div class=\\\"profile-body-row-label-section-edit-textbox-section\\\"><td style=\\\"margin-right:10px;\\\" class=\\\"input\\\"><textarea id=\\\"noteTextbox\\\" rows=\\\"10\\\" type=\\\"text\\\" value={{this.getNote}} style=\\\"resize: both;\\\" class=\\\"form-control\\\"></textarea></td><div onClick={{action \\\"updateProperty\\\" \\\"noteTextbox\\\" \\\"note\\\"}} class=\\\"profile-body-row-label-section-edit\\\">Save</div></div>{{else}}<div class=\\\"profile-body-row-label-section-value\\\">{{this.getNote}}</div>{{/if}}<div class=\\\"profile-body-row-label-section-divider\\\"></div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/alert-profile-sidebar-home.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"profile-sidebar-section\\\"><div style=\\\"font-size:unset;cursor:none;\\\" class=\\\"profile-sidebar-section-profile-photo-section\\\"><div class={{this.rippleClass}}><div class=\\\"ripple-ring\\\"></div><span style=\\\"font-size:3em;\\\" class=\\\"alert-bell-icon\\\"><FaIcon @icon=\\\"bell\\\" /></span></div></div><div class=\\\"profile-sidebar-section-title-section\\\">{{this.getAlertName}}</div></div><div class=\\\"profile-sidebar-section-divider\\\"></div><div class=\\\"profile-sidebar-rows-body\\\">{{#if this.licenceIsValid}}<div style=\\\"cursor:pointer\\\" class=\\\"profile-sidebar-rows-section\\\"><div style=\\\"margin-right:5px\\\">{{fa-icon icon=\\\"home\\\" size=\\\"1x\\\"}}</div><div onClick={{action \\\"updateTab\\\" \\\"HOME\\\"}}>Home</div></div><div style=\\\"cursor:pointer\\\" class=\\\"profile-sidebar-rows-section\\\"><div style=\\\"margin-right:5px\\\">{{fa-icon icon=\\\"list\\\" size=\\\"1x\\\"}}</div><div onClick={{action \\\"updateTab\\\" \\\"ALERT_EVENTS\\\"}}>Events</div></div><div style=\\\"cursor:pointer\\\" class=\\\"profile-sidebar-rows-section\\\"><div style=\\\"margin-right:5px\\\">{{fa-icon icon=\\\"ellipsis-h\\\" size=\\\"1x\\\"}}</div><div onClick={{action \\\"updateTab\\\" \\\"ALERT_MORE\\\"}}>More</div></div>{{/if}}</div>', { moduleName: 'geotechnical-data-platform-new/templates/components/alert-profile-sidebar.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"table table-striped responsive-table\\\"><thead><tr><th></th>{{sortable-table-header title=\\'ID\\' sortProperty=\\'id\\' selectedSortProperty=this.ordering sort=this.sortBy}}{{sortable-table-header title=\\'Active\\' sortProperty=\\'is_active\\' selectedSortProperty=this.ordering sort=this.sortBy}}<th>Name</th>{{sortable-table-header title=\\'Instrument ID\\' sortProperty=\\'instrumentId\\' selectedSortProperty=this.ordering sort=this.sortBy}}{{sortable-table-header title=\\'Level\\' sortProperty=\\'state__level\\' selectedSortProperty=this.ordering sort=this.sortBy}}{{sortable-table-header title=\\'Created At\\' sortProperty=\\'created_at\\' selectedSortProperty=this.ordering sort=this.sortBy}}{{sortable-table-header title=\\'Triggered At\\' sortProperty=\\'state__last_triggered_at\\' selectedSortProperty=this.ordering sort=this.sortBy}}<th>Shortcuts</th></tr></thead><tbody>{{#each this.getAlertsList as |alert|}}<tr><td style=\\\"vertical-align: middle;text-align: center;\\\">{{#if this.licenceIsValid}}{{#if this.allowBatchSelect}}<input type=\\\"checkbox\\\" checked={{isAlertChecked alert this.batchSelectedAlertsID}} oninput={{action \\'onCheckedAlertsRow\\' alert.id}}>{{/if}}{{/if}}</td><td style=\\\"vertical-align: middle;text-align: center;\\\"><LinkTo @route=\\\"edit-alert-profile\\\" @model={{alert.id}}>{{alert.id}}</LinkTo></td><td style=\\\"display:flex;justify-content: center;\\\">{{#if alert.isActive}}<div class=\\\"active-bell-deco\\\"><FaIcon @icon=\\\"bell\\\" /></div>{{else}}<div class=\\\"inactive-bell-deco\\\"><FaIcon @icon=\\\"bell-slash\\\" /></div>{{/if}}</td><td>{{alert.name}}</td><td><LinkTo @route=\\\"edit-instrument\\\" @model={{alert.instrumentId}}>{{alert.instrumentId}}</LinkTo></td><td style=\\\"vertical-align: middle;text-align: center;\\\"><div style=\\\"width:48px;height:48px\\\" class=\\\"alert-ripple-container level-{{alert.level}} is-muted-{{alert.isMuted}}\\\"><div class=\\\"ripple-ring\\\"></div><span style=\\\"font-size:medium;\\\" class=\\\"alert-bell-icon\\\"><FaIcon @icon=\\\"bell\\\" /></span></div></td><td>{{alert.createdAt}}</td><td>{{alert.lastTriggeredAt}}</td><td>{{#if this.licenceIsValid}}<div style=\\\"display: flex;flex-direction: row;justify-content: space-around;font-size: 18px;\\\"><div style=\\\"cursor:pointer;color: #F90;\\\" onClick={{action \\\"jumpToInstrumentProfile\\\" alert.id}}><FaIcon @icon=\\\"pencil-alt\\\" /></div><div style=\\\"cursor:pointer;color: #F20600;\\\" onClick={{action \\\"deleteAlertProfile\\\" alert.id}}><FaIcon @icon=\\\"trash\\\" /></div></div>{{/if}}</td></tr>{{/each}}</tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/alerts-list.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"container-fluid\\\"><div style=\\\"\\\"><h3>Packs Validation Analytics</h3></div><div style=\\\"padding-left:15px;width:100%\\\"><div style=\\\"margin-bottom:10px;width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"min-width:130px;\\\">Main Data:</div><td class=\\\"input\\\"><select id=\\\"mainDataSelect\\\" style=\\\"padding:0px;min-width:240px;\\\" onchange={{action \\\"mainChanged\\\"}} class=\\\"form-control\\\">{{#each this.mainDataOptions as |opt|}}<option value={{opt.key}}>{{opt.value}}</option>{{/each}}</select></td></div><div style=\\\"margin-bottom:10px;width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"min-width:130px;\\\">Secondary Data:</div><td class=\\\"input\\\"><select id=\\\"secondaryDataSelect\\\" style=\\\"padding:0px;min-width:240px;\\\" onchange={{action \\\"secondaryChanged\\\"}} class=\\\"form-control\\\">{{#each this.secondaryDataOptions as |opt|}}<option value={{opt.key}} disabled={{opt.disabled}}>{{opt.value}}</option>{{/each}}</select></td>{{#if this.showDateFormat}}<div style=\\\"margin-left:20px;min-width:90px;\\\">Date Format:</div><td class=\\\"input\\\"><select id=\\\"dateFormatSelect\\\" style=\\\"padding:0px;min-width:220px;\\\" onchange={{action \\\"dateFormatChanged\\\"}} class=\\\"form-control\\\">{{#each this.dateFormatOptions as |opt|}}<option value={{opt.key}}>{{opt.value}}</option>{{/each}}</select></td>{{/if}}</div><div style=\\\"margin-bottom:10px;width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"min-width:130px;\\\">Phase:</div>{{#each this.phaseOptions as |opt|}}<label style=\\\"margin-right:20px;display:flex;flex-direction:row-reverse;justify-content:flex-end;align-items:center;cursor:pointer;\\\"><label style=\\\"margin-left:5px;\\\">{{opt.value}}</label><input type=\\\"radio\\\" name=\\\"phaseRadio\\\" value={{opt.key}} style=\\\"margin-right:4px;\\\" checked={{if (eq this.phaseKey opt.key) true}} onchange={{action \\'phaseChanged\\'}}></label>{{/each}}</div><div style=\\\"margin-bottom:10px;width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"min-width:130px;\\\">Company:</div><td class=\\\"input\\\">{{#if this.isYieldPointSupervisor}}<select id=\\\"companySelect\\\" style=\\\"padding:0px;min-width:240px;\\\" onchange={{action \\\"companyChanged\\\"}} class=\\\"form-control\\\">{{#each this.companyOptions as |opt|}}<option value={{opt.key}}>{{opt.value}}</option>{{/each}}</select>{{else}}<select id=\\\"companySelect\\\" style=\\\"padding:0px;min-width:240px;\\\" disabled class=\\\"form-control\\\">{{#each this.companyOptions as |opt|}}<option value={{opt.key}}>{{opt.value}}</option>{{/each}}</select>{{/if}}</td></div><div style=\\\"width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"margin-bottom:10px;width:100%;display:flex;flex-direction:row;align-items:center;\\\"><button id=\\\"applyButton\\\" type=\\\"button\\\" style=\\\"margin-right:15px;\\\" {{action \\\"applyButton\\\" on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Apply</button><button id=\\\"resetButton\\\" type=\\\"button\\\" {{action \\\"resetButton\\\" on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Reset</button></div></div><div class=\\\"controlPanelSection\\\"><div>Control Panel:</div><div style=\\\"margin-left:15px;width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"width:50%;display:flex;flex-direction:column;align-items:center;\\\"><div style=\\\"width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"margin-right:10px;\\\">Show Legend:</div><td class=\\\"input\\\"><input id=\\\"showLegendCheckBox\\\" type=\\\"checkbox\\\" onchange={{action \\\"toggleLegend\\\"}} class=\\\"form-control\\\"></td></div></div><div style=\\\"width:50%;display:flex;flex-direction:column;align-items:center;\\\"><div style=\\\"width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div id=\\\"yAxisScaleLabel\\\" style=\\\"cursor:pointer;margin-right:10px;\\\" {{action \\\"resetScaleForm\\\" \\\"yAxisScaleLabel\\\" on=\\\"click\\\"}}>Y-Axis Scale:</div><td class=\\\"input\\\"><input id=\\\"yAxisScale\\\" type=\\\"number\\\" style=\\\"padding:0px;\\\" oninput={{action \\\"updateScaleForm\\\" event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div></div></div></div>{{#if this.options.isEmptyData}}<div style=\\\"margin-top:15px;text-align:center;color:#666;\\\" class=\\\"emptyDataWarningSection\\\">No data for the current filter.</div>{{/if}}<div id=\\\"mainChartSection\\\" class=\\\"mainChartSection\\\"></div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/analytics/packsValidationAnalyticsMainPage.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"container-fluid\\\"><div style=\\\"\\\"><h4>Sensor Calibration Analytics</h4></div><div style=\\\"padding-left:15px;width:100%\\\"><div style=\\\"width:100%;display:flex;flex-direction:row;\\\"><div style=\\\"width:50%;display:flex;flex-direction:column;align-items:center;\\\"><div id=\\\"mainDataSection\\\" style=\\\"margin-bottom:10px;width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div id=\\\"\\\" style=\\\"min-width:100px;\\\">Main Data:</div><td class=\\\"input\\\"><select id=\\\"mainDataSelect\\\" style=\\\"padding: 0px;min-width:180px;\\\" onchange={{action (mut this.updateMainDataSelectDropDown) value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each this.getMainDataSelections as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div><div id=\\\"dateDataSection\\\" style=\\\"margin-bottom:10px;width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div id=\\\"\\\" style=\\\"min-width:100px;\\\">Date Data:</div><td class=\\\"input\\\"><select id=\\\"dateDataSelect\\\" style=\\\"padding: 0px;min-width:180px;\\\" onchange={{action (mut this.updateDateDataSelectDropDown) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"-1\\\">-</option>{{#each this.getDateDataSelections as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div><div id=\\\"dateRangeSection\\\" style=\\\"margin-bottom:10px;width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div id=\\\"\\\" style=\\\"min-width:100px;\\\">Date Range: </div><div style=\\\"width:100%;display:flex;flex-direction:row;align-items:center;\\\" class=\\\"input-group\\\"><div class=\\\"datetime-picker-component\\\"><input id=\\\"startRangeDateComponent\\\" style=\\\"color:#495057;border:1px solid #ced4da;\\\" type=\\\"date\\\" value={{this.startDate}} onchange={{action (mut this.startRangeDateComponent) value=\\\"target.value\\\"}}></div><div>-</div><div class=\\\"datetime-picker-component\\\"><input id=\\\"endRangeDateComponent\\\" style=\\\"color:#495057;border:1px solid #ced4da;\\\" type=\\\"date\\\" value={{this.endDate}} onchange={{action (mut this.endRangeDateComponent) value=\\\"target.value\\\"}}></div></div></div></div><div style=\\\"width:50%;display:flex;flex-direction:column;\\\"><div id=\\\"isDistinctSection\\\" style=\\\"margin-bottom:10px;width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div id=\\\"isDistinctCheckBoxLabel\\\" style=\\\"min-width:130px;\\\">Is Distinct:</div><td class=\\\"input\\\"><input id=\\\"isDistinctCheckBox\\\" disabled type=\\\"checkbox\\\" onchange={{action (mut this.updateIsDistinctCheckBox) checked=\\\"target.value\\\"}} class=\\\"form-control\\\"></td></div><div id=\\\"usersSection\\\" style=\\\"margin-bottom:10px;width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div id=\\\"\\\" style=\\\"min-width:130px;\\\">Employee Group:</div><td class=\\\"input\\\"><select id=\\\"employeeGroupDataSelect\\\" style=\\\"padding: 0px;min-width:180px;\\\" onchange={{action (mut this.updateEmployeeDataSelectDropDown) value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each this.getEmployeeGroupDataSelections as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div></div></div><div style=\\\"width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div id=\\\"buttonsSection\\\" style=\\\"margin-bottom:10px;width:100%;display:flex;flex-direction:row;align-items:center;\\\"><button id=\\\"applyButton\\\" type=\\\"button\\\" style=\\\"margin-right:15px\\\" {{action \\\"applyButton\\\" on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Apply</button><button id=\\\"resetButton\\\" type=\\\"button\\\" {{action \\\"resetButton\\\" on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Reset</button></div></div><div class=\\\"controlPanelSection\\\"><div>Control Panel:</div><div style=\\\"margin-left:15px;width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"width:50%;display:flex;flex-direction:column;align-items:center;\\\"><div id=\\\"showLegendSection\\\" style=\\\"width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"margin-right:10px;\\\">Show Legend: </div><td class=\\\"input\\\"><input id=\\\"showLegendCheckBox\\\" disabled type=\\\"checkbox\\\" onchange={{action (mut this.updateShowLegendCheckbox) checked=\\\"target.value\\\"}} class=\\\"form-control\\\"></td></div></div><div style=\\\"width:50%;display:flex;flex-direction:column;align-items:center;\\\"><div style=\\\"width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div id=\\\"yAxisScaleLabel\\\" style=\\\"cursor:pointer;margin-right:10px;\\\" {{action \\'resetScaleForm\\' \\\"yAxisScaleLabel\\\" on=\\\"click\\\"}}>Y-Axis Scale: </div><td class=\\\"input\\\"><input id=\\\"yAxisScale\\\" type=\\\"number\\\" style=\\\"padding:0px;\\\" oninput={{action \\'updateScaleForm\\' event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div><div style=\\\"width:100%;display:flex;flex-direction:row;align-items:center;\\\"><div id=\\\"xAxisScaleLabel\\\" style=\\\"margin-right:10px;\\\">X-Axis Scale: </div><td class=\\\"input\\\"><input id=\\\"xAxisScale\\\" disabled type=\\\"text\\\" style=\\\"padding:0px;\\\" oninput={{action \\'updateScaleForm\\' event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div></div></div></div><div id=\\\"mainChartSection\\\" class=\\\"mainChartSection\\\"></div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/analytics/sensorCalibrationAnalyticsMainPage.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:15px\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"\\\">Currently Selected: </div><div style=\\\"margin-left: 15px;\\\">{{this.getSelectedAlertsCount}}</div></div></div><div style=\\\"display:flex;flex-direction:column;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:15px\\\"><button type=\\\"button\\\" {{action \\\"selectAll\\\" on=\\\"click\\\"}} style=\\\"font-size:small;margin-right: 5px;\\\" class=\\\"btn btn-primary\\\">Select All</button><button type=\\\"button\\\" {{action \\\"deselectAll\\\" on=\\\"click\\\"}} style=\\\"font-size:small;margin-right: 5px;\\\" class=\\\"btn btn-primary\\\">Deselect All</button></div><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:15px\\\"><button type=\\\"button\\\" {{action \\\"batchButton\\\" \\\"activate\\\" on=\\\"click\\\"}} style=\\\"font-size:small;margin-right: 5px;\\\" class=\\\"btn btn-primary\\\">Activate</button><button type=\\\"button\\\" {{action \\\"batchButton\\\" \\\"deactivate\\\" on=\\\"click\\\"}} style=\\\"font-size:small;margin-right: 5px;\\\" class=\\\"btn btn-primary\\\">Deactivate</button></div><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:15px\\\"><button type=\\\"button\\\" {{action \\\"batchButton\\\" \\\"mute\\\" on=\\\"click\\\"}} style=\\\"font-size:small;margin-right: 5px;\\\" class=\\\"btn btn-primary\\\">Mute</button><button type=\\\"button\\\" {{action \\\"batchButton\\\" \\\"unmute\\\" on=\\\"click\\\"}} style=\\\"font-size:small;margin-right: 5px;\\\" class=\\\"btn btn-primary\\\">Unmute</button></div><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><button type=\\\"button\\\" {{action \\\"batchButton\\\" \\\"delete\\\" on=\\\"click\\\"}} style=\\\"font-size:small;background-color: red;margin-right: 5px;\\\" class=\\\"btn btn-primary\\\">Delete</button></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/batch-actions-alerts.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#modal-dialog translucentOverlay=true}}<div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content:space-between\\\"><h4>Warning</h4></div><div class=\\\"modal-body\\\"><div style=\\\"white-space: pre-line;display: flex;flex-direction: column;align-items: center;min-width: 350px;\\\" class=\\\"edit-modal\\\"><div></div>{{this.warningMessage}}</div></div><div class=\\\"modal-footer\\\"><button {{action \\\"close\\\" on=\\\"click\\\"}} class=\\\"btn btn-secondary\\\">Cancel</button><button {{action \\\"confirm\\\" on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Confirm</button></div>{{/modal-dialog}}', { moduleName: 'geotechnical-data-platform-new/templates/components/batch-confirmation-modal.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900gw/chartjs-temporal-gateway-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newGatewayObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.Name}} oninput={{action (mut this.newGatewayObject.name) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.project}} oninput={{action (mut this.newGatewayObject.project) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectProject\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.location}} oninput={{action (mut this.newGatewayObject.location) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.level}} oninput={{action (mut this.newGatewayObject.level) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectLevel\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newGatewayObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.installedBy}} oninput={{action (mut this.newGatewayObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.purpose}} oninput={{action (mut this.newGatewayObject.purpose) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newGatewayObject.notes}} oninput={{action (mut this.newGatewayObject.notes) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createGateway\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900gw/create-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{@anchorDistances.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" @gateway on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" @gateway on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each @anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}<td>Temp.</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.newTimestampValue) value=\\\"target.value\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.gatewayValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action (mut (get this.newGatewayValueObjectValues key)) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temp.\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} id=\\\"df{{key}}\\\" oninput={{action (mut this.temperatureObjectValue) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900gw/create-new-raw-gateway-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @gateway.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div>{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @gateway.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div></td></tr><tr class=\\\"details\\\"><td colspan=\\\"7\\\"><hr></td></tr><tr class=\\\"details\\\"><td colspan=\\\"3\\\" style=\\\"vertical-align: top; margin-bottom: 1rem;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><h5>Properties:</h5></td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@gateway field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"></td><td><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><h5>Settings:</h5></td></tr><tr><td><label for=\\\"meshID\\\" class=\\\"col-12 col-form-label\\\">Mesh ID:</label></td><td><input size=6 type=\\\"text\\\" value={{@gateway.meshID}} disabled class=\\\"form-control\\\"></td></tr><tr><td><label for=\\\"gatewayMeshCycleInterval\\\" class=\\\"col-12 col-form-label\\\">Mesh Cycle:</label></td><td class=\\\"input\\\"><select id=\\\"gatewayMeshCycleInterval\\\" onclick={{action \\'setGatewayInterval\\'}}>{{#if (eq this.getMeshCycleIntervalID \\\"\\\")}}<option selected value=\\\"-1\\\">= \\\"Select a Mesh Cycle Interval\\\"</option>{{/if}}{{#each @gatewayMeshCycleIntervals as |selectOption|}}{{#if (eq this.getMeshCycleIntervalID selectOption.id)}}<option selected value=\\\"{{selectOption.id}}\\\">{{selectOption.intervalName}}</option>{{else}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.intervalName}}</option>{{/if}}{{/each}}</select></td></tr><tr><td><label for=\\\"gatewayTransmissionPowerInterval\\\" class=\\\"col-12 col-form-label\\\">Radio Tx Power:</label></td><td class=\\\"input\\\"><select id=\\\"gatewayTransmissionPowerInterval\\\" onclick={{action \\'setGatewayInterval\\'}}>{{#each @gatewayTransmissionPowerIntervals as |selectOption|}}{{#if (eq this.getTransmissionPowerIntervalsID selectOption.id)}}<option selected value=\\\"{{selectOption.id}}\\\">{{selectOption.intervalName}}</option>{{else}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.intervalName}}</option>{{/if}}{{/each}}</select></td></tr><tr><td><span class=\\\"separator\\\"></span></td></tr><tr><td><span class=\\\"separator\\\"></span></td></tr><tr><td><span class=\\\"separator\\\"></span></td></tr><tr><td><span class=\\\"separator\\\"></span></td></tr></tbody></table></td></tr></tbody><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"7\\\" class=\\\"td_details\\\"></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"7\\\" class=\\\"add-new-item\\\"><span {{action \\\"saveGateway\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr>{{#if (eq @gateway.hasChildren true)}}<tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"7\\\" class=\\\"td_details\\\"><h5>Blu900 Nodes:</h5>{{#if this.childrenLoading}}<div style=\\\"width: 55px;height: 50px;\\\" class=\\\"center pulse_loader\\\"></div>{{else}}{{gateway-list-children gatewayChildren=this.childrenData gateway=@gateway}}{{/if}}</td></tr>{{else}}<tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"7\\\" class=\\\"td_details\\\"><span class=\\\"no-children\\\">No Nodes Found</span></td></tr>{{/if}}</table>', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900gw/edit-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg></div><div class=\\\"mb-1\\\"></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900gw/nvd3-temporal-gateway-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@gatewayData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@gatewayData.meta routeLink=\\'raw-gateway-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{#if this.isVisibleCreateNewForm}}<div class=\\\"row\\\"><div class=\\\"col details newRecordDetails\\\">{{blu900gw/create-new-raw-gateway-data-value-form isVisibleCreateNewForm=this.isVisibleCreateNewForm isVisibleReadingCreated=this.isVisibleReadingCreated gatewayId=@gateway.id gatewayType=@gateway.gatewayType anchorDistances=this.anchorDistances dateFormat=\\'YYYY-MM-DD HH:mm:ss\\' setProp=@setProp}}</div></div>{{/if}}{{#if this.isVisibleReadingCreated}}<div class=\\\"row\\\"><div class=\\\"col\\\">Reading Added!</div></div>{{/if}}<div class=\\\"row\\\"><div class=\\\"col\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th>Date</th>{{#each this.anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}<th><span class=\\\"separator\\\"></span></th></tr></thead><tbody>{{#each this.getGatewayData as |gatewayValue index|}}{{single-save-gateway-inputs-array-table-row-cells gatewayId=@gateway.id gateway=@gateway gatewayType=@gateway.gatewayType gatewayValueObject=gatewayValue gatewayValuesModel=@gatewayData temperatureValuesModel=@temperatureData inputType=\\'text\\' fields=\\'values\\' tableRowIndex=index setProp=@setProp omitTemperature=true}}{{/each}}</tbody></table></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@gatewayData.meta routeLink=\\'raw-gateway-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900gw/raw-gateway-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @left_axis_field \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @left_axis_field \\'Firmware\\')}}\\n      Firmware Version\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Voltage\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Firmware\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Firmware Version</LinkTo>\\n  </dd.menu>\\n</BsDropdown>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900gw/temporal-gateway-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{!-- <BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal selected \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal selected \\'Firmware\\')}}\\n      Firmware Version\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        {{#link-to \\'temporal-gateway-graphs.temporal-gateway-graph\\' gatewayId \\'voltage-values\\' (query-params start_timestamp=null end_timestamp=null left_axis_field=\\\"Voltage\\\" right_axis_field=right_axis_field) class=\\\"dropdown-item\\\"}}Voltage{{/link-to}}\\n        {{#link-to \\'temporal-gateway-graphs.temporal-gateway-graph\\' gatewayId \\'firmware-values\\' (query-params start_timestamp=null end_timestamp=null left_axis_field=\\\"Firmware\\\" right_axis_field=right_axis_field) class=\\\"dropdown-item\\\"}}Firmware{{/link-to}}\\n  </dd.menu>\\n</BsDropdown> --}}', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900gw/temporal-gateway-left-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @right_axis_field \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @right_axis_field \\'Firmware\\')}}\\n      Firmware Version\\n    {{else if (is-equal @right_axis_field \\'Temperature\\')}}\\n      Temperature\\n    {{else}}\\n      Temperature\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Voltage\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Firmware\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Firmware Version</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'temp-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Temperature\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Temperature</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900gw/temporal-gateway-right-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900node/chartjs-temporal-gateway-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label style=\\\"font-weight:bold !important;\\\" for=\\\"newGatewayObjectParent\\\">Parent Gateway: </label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"gatewaySelect\\\" onchange={{action \\\"setID\\\" value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"\\\">Gateway ID</option>{{#each this.gateways as |gw|}}<option value={{gw.value}}>{{gw.title}}</option>{{/each}}</select></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.Name}} oninput={{action (mut this.newGatewayObject.name) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.project}} oninput={{action (mut this.newGatewayObject.project) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectProject\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.location}} oninput={{action (mut this.newGatewayObject.location) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.level}} oninput={{action (mut this.newGatewayObject.level) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectLevel\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><span>&nbsp;</span></td><td><span>&nbsp;</span></td></tr><tr><td><span>&nbsp;</span></td><td><span>&nbsp;</span></td></tr><tr><td><label for=\\\"newGatewayObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.installedBy}} oninput={{action (mut this.newGatewayObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.purpose}} oninput={{action (mut this.newGatewayObject.purpose) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newGatewayObject.notes}} oninput={{action (mut this.newGatewayObject.notes) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td><span class=\\\"separator\\\"></span></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createGateway\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900node/create-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{@anchorDistances.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" @gateway on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" @gateway on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each @anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}<td>Temp.</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.newTimestampValue) value=\\\"target.value\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.gatewayValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action (mut (get this.newGatewayValueObjectValues key)) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temp.\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} id=\\\"df{{key}}\\\" oninput={{action (mut this.temperatureObjectValue) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900node/create-new-raw-gateway-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"7\\\" class=\\\"td_details\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @gateway.id @parentGateway}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div>{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @gateway.id @parentGateway}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div></td></tr><tr class=\\\"details\\\"><td colspan=\\\"7\\\"><hr></td></tr><tr class=\\\"details\\\"><td colspan=\\\"3\\\" style=\\\"vertical-align: top; margin-bottom: 1rem;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td class=\\\"h5\\\"><label>Selected Gateway: {{this.parentGateway}}</label></td></tr><tr><td><span class=\\\"cospan separator\\\"></span></td></tr><tr><td><h5>Properties:</h5></td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@gateway field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\"><table style=\\\"justify-content: left; vertical-align: top;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><span class=\\\"cospan separator\\\"></span></td></tr><tr><td><span class=\\\"cospan separator\\\"></span></td><td><span class=\\\"cospan separator\\\"></span></td></tr><tr><td><h5>Settings:</h5></td></tr><tr><td><label for=\\\"meshID\\\" class=\\\"col-12 col-form-label\\\">Mesh ID:</label></td><td><input size=6 type=\\\"text\\\" value={{@gateway.meshID}} disabled class=\\\"form-control\\\"></td></tr><tr><td><label for=\\\"gatewayReadInterval\\\" class=\\\"col-12 col-form-label\\\">Read Interval:</label></td><td class=\\\"input\\\"><select id=\\\"gatewayReadInterval\\\" onchange={{action \\'setGatewayInterval\\'}} class=\\\"form-control\\\"><option value=\\\"\\\">Select an Interval</option>{{#each this.gatewayReadingIntervals as |selectOption|}}{{#if (eq this.getGatewayReadIntervalID selectOption.id)}}<option selected value={{selectOption.id}}>{{selectOption.intervalName}}</option>{{else}}<option value={{selectOption.id}}>{{selectOption.intervalName}}</option>{{/if}}{{/each}}</select></td></tr></tbody></table></td></tr></tbody><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"7\\\" class=\\\"td_details\\\"></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"6\\\" class=\\\"add-new-item\\\"></td><td class=\\\"add-new-item\\\"><span {{action \\\"saveGateway\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr>{{#if (eq @gateway.hasChildren true)}}<tr class=\\\"details newRecordDetails\\\">{{gateway-list gateway=@gateway.children sortBy=(action \\'sortBy\\') ordering=this.ordering}}</tr>{{/if}}</table>', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900node/edit-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg></div><div class=\\\"mb-1\\\"></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900node/nvd3-temporal-gateway-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@gatewayData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@gatewayData.meta routeLink=\\'raw-gateway-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{#if this.isVisibleCreateNewForm}}<div class=\\\"row\\\"><div class=\\\"col details newRecordDetails\\\">{{blu900node/create-new-raw-gateway-data-value-form isVisibleCreateNewForm=this.isVisibleCreateNewForm isVisibleReadingCreated=this.isVisibleReadingCreated gatewayId=@gateway.id gatewayType=@gateway.gatewayType anchorDistances=this.anchorDistances dateFormat=\\'YYYY-MM-DD HH:mm:ss\\' setProp=@setProp}}</div></div>{{/if}}{{#if this.isVisibleReadingCreated}}<div class=\\\"row\\\"><div class=\\\"col\\\">Reading Added!</div></div>{{/if}}<div class=\\\"row\\\"><div class=\\\"col\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th>Date</th>{{#each this.anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}<th>Temp.</th><th id=\\\"add-new\\\" class=\\\"add-new-item\\\"><span class=\\\"separator\\\"></span></th></tr></thead><tbody>{{#each this.getGatewayData as |gatewayValue index|}}{{single-save-gateway-inputs-array-table-row-cells gatewayId=@gateway.id gateway=@gateway gatewayType=@gateway.gatewayType gatewayValueObject=gatewayValue gatewayValuesModel=@gatewayData temperatureValuesModel=this.filteredTemperatureData inputType=\\'text\\' fields=\\'values\\' tableRowIndex=index setProp=@setProp omitTemperature=true}}{{/each}}</tbody></table></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@gatewayData.meta routeLink=\\'raw-gateway-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900node/raw-gateway-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @left_axis_field \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @left_axis_field \\'Firmware\\')}}\\n      Firmware Version\\n    {{else if (is-equal @left_axis_field \\'RSSI\\')}}\\n      RSSI\\n    {{else if (is-equal @left_axis_field \\'Temperature\\')}}\\n      Temperature\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Voltage\\\" right_axis_field=@right_axis_field chart_parent_gateway=@chart_parent_gateway}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"RSSI\\\" right_axis_field=@right_axis_field chart_parent_gateway=@chart_parent_gateway}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Firmware\\\" right_axis_field=@right_axis_field chart_parent_gateway=@chart_parent_gateway}} class=\\\"dropdown-item\\\">Firmware Version</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'temperature-gateway-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Temperature\\\" right_axis_field=@right_axis_field chart_parent_gateway=@chart_parent_gateway}} class=\\\"dropdown-item\\\">Temperature</LinkTo>\\n  </dd.menu>\\n</BsDropdown>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900node/temporal-gateway-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('left\\n<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @selected \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @selected \\'RSSI\\')}}\\n      RSSI\\n    {{else if (is-equal @selected \\'Readings\\')}}\\n      Number of Readings\\n    {{else if (is-equal @selected \\'Uptime\\')}}\\n      Uptime in Seconds\\n    {{else if (is-equal @selected \\'Reconnection\\')}}\\n      Reconnection Attempts\\n    {{else if (is-equal @selected \\'Uploads\\')}}\\n      Number of Uploads\\n    {{else if (is-equal @selected \\'Firmware\\')}}\\n      Firmware Version\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Voltage\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"RSSI\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'readings-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Readings\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Number of Readings</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uptime-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Uptime\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Uptime in Seconds</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'reconnection-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Reconnection\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Reconnection Attempts</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uploads-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Uploads\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Number of Uploads</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Firmware\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Firmware</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900node/temporal-gateway-left-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @right_axis_field \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @right_axis_field \\'Firmware\\')}}\\n      Firmware\\n    {{else if (is-equal @right_axis_field \\'Temperature\\')}}\\n      Temperature\\n    {{else if (is-equal @right_axis_field \\'RSSI\\')}}\\n      RSSI\\n    {{else}}\\n      Temperature\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Voltage\\\" left_axis_field=@left_axis_field chart_parent_gateway=@chart_parent_gateway}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"RSSI\\\" left_axis_field=@left_axis_field chart_parent_gateway=@chart_parent_gateway}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'temperature-gateway-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Temperature\\\" left_axis_field=@left_axis_field chart_parent_gateway=@chart_parent_gateway}} class=\\\"dropdown-item\\\">Temperature</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Firmware\\\" left_axis_field=@left_axis_field chart_parent_gateway=@chart_parent_gateway}} class=\\\"dropdown-item\\\">Firmware Version</LinkTo>\\n  </dd.menu>\\n</BsDropdown>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/blu900node/temporal-gateway-right-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/blucell/chartjs-temporal-gateway-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newGatewayObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.Name}} oninput={{action (mut this.newGatewayObject.name) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.project}} oninput={{action (mut this.newGatewayObject.project) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectProject\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.location}} oninput={{action (mut this.newGatewayObject.location) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.level}} oninput={{action (mut this.newGatewayObject.level) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectLevel\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newGatewayObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.installedBy}} oninput={{action (mut this.newGatewayObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.purpose}} oninput={{action (mut this.newGatewayObject.purpose) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newGatewayObject.notes}} oninput={{action (mut this.newGatewayObject.notes) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createGateway\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/blucell/create-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{@anchorDistances.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" @gateway on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" @gateway on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each @anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}<td>Temp.</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.newTimestampValue) value=\\\"target.value\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.gatewayValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action (mut (get this.newGatewayValueObjectValues key)) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temp.\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} id=\\\"df{{key}}\\\" oninput={{action (mut this.temperatureObjectValue) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/blucell/create-new-raw-gateway-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"7\\\" class=\\\"td_details\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @gateway.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div>{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @gateway.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div></td></tr><tr class=\\\"details\\\"><td colspan=\\\"3\\\" style=\\\"vertical-align: top; margin-bottom: 1rem;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><h5>Properties:</h5></td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@gateway field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"></td></tr></tbody><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"td_details\\\"></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"6\\\" class=\\\"add-new-item\\\"></td><td class=\\\"add-new-item\\\"><span {{action \\\"saveGateway\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr>{{#if (eq @gateway.hasChildren true)}}<tr class=\\\"details newRecordDetails\\\">{{gateway-list gateway=@gateway.children sortBy=(action \\'sortBy\\') ordering=this.ordering}}</tr>{{/if}}</table>', { moduleName: 'geotechnical-data-platform-new/templates/components/blucell/edit-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg></div><div class=\\\"mb-1\\\"></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/blucell/nvd3-temporal-gateway-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@gatewayData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@gatewayData.meta routeLink=\\'raw-gateway-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{#if this.isVisibleCreateNewForm}}<div class=\\\"row\\\"><div class=\\\"col details newRecordDetails\\\">{{blucell/create-new-raw-gateway-data-value-form isVisibleCreateNewForm=this.isVisibleCreateNewForm isVisibleReadingCreated=this.isVisibleReadingCreated gatewayId=@gateway.id gatewayType=@gateway.gatewayType anchorDistances=this.anchorDistances dateFormat=\\'YYYY-MM-DD HH:mm:ss\\' setProp=@setProp}}</div></div>{{/if}}{{#if this.isVisibleReadingCreated}}<div class=\\\"row\\\"><div class=\\\"col\\\">Reading Added!</div></div>{{/if}}<div class=\\\"row\\\"><div class=\\\"col\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th>Date</th>{{#each this.anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}<th>Temp.</th><th id=\\\"add-new\\\" class=\\\"add-new-item\\\"></th></tr></thead><tbody>{{#each this.getGatewayData as |gatewayValue index|}}{{single-save-gateway-inputs-array-table-row-cells gatewayId=@gateway.id gateway=@gateway gatewayType=@gateway.gatewayType gatewayValueObject=gatewayValue gatewayValuesModel=@gatewayData temperatureValuesModel=@temperatureData inputType=\\'text\\' fields=\\'values\\' tableRowIndex=index setProp=@setProp omitTemperature=false}}{{/each}}</tbody></table></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@gatewayData.meta routeLink=\\'raw-gateway-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/blucell/raw-gateway-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @left_axis_field \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @left_axis_field \\'RSSI\\')}}\\n      RSSI\\n    {{else if (is-equal @left_axis_field \\'Readings\\')}}\\n      Number of Readings\\n    {{else if (is-equal @left_axis_field \\'Uptime\\')}}\\n      Uptime in Seconds\\n    {{else if (is-equal @left_axis_field \\'Reconnection\\')}}\\n      Reconnection Attempts\\n    {{else if (is-equal @left_axis_field \\'Uploads\\')}}\\n      Number of Uploads\\n    {{else if (is-equal @left_axis_field \\'Firmware\\')}}\\n      Firmware Version\\n    {{else if (is-equal @left_axis_field \\'Temperature\\')}}\\n      Temperature\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Voltage\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null  left_axis_field=\\\"RSSI\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'readings-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Readings\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Number of Readings</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uptime-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Uptime\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Uptime in Seconds</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'reconnection-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Reconnection\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Reconnection</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Firmware\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Firmware Version</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'temperature-gateway-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Temperature\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Temperature</LinkTo>\\n  </dd.menu>\\n</BsDropdown>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/blucell/temporal-gateway-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('blucell\\n<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @selected \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @selected \\'RSSI\\')}}\\n      RSSI\\n    {{else if (is-equal @selected \\'Readings\\')}}\\n      Number of Readings\\n    {{else if (is-equal @selected \\'Uptime\\')}}\\n      Uptime in Seconds\\n    {{else if (is-equal @selected \\'Reconnection\\')}}\\n      Reconnection Attempts\\n    {{else if (is-equal @selected \\'Uploads\\')}}\\n      Number of Uploads\\n    {{else if (is-equal @selected \\'Firmware\\')}}\\n      Firmware Version\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Voltage\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"RSSI\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'readings-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Readings\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Number of Readings</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uptime-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Uptime\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Uptime in Seconds</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'reconnection-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Reconnection\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Reconnection Attempts</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uploads-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Uploads\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Number of Uploads</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Firmware\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Firmware</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/blucell/temporal-gateway-left-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @right_axis_field \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @right_axis_field \\'RSSI\\')}}\\n      RSSI\\n    {{else if (is-equal @right_axis_field \\'Readings\\')}}\\n      Number of Readings\\n    {{else if (is-equal @right_axis_field \\'Uptime\\')}}\\n      Uptime in Seconds\\n    {{else if (is-equal @right_axis_field \\'Reconnection\\')}}\\n      Reconnection Attempts\\n    {{else if (is-equal @right_axis_field \\'Uploads\\')}}\\n      Number of Uploads\\n    {{else if (is-equal @right_axis_field \\'Firmware\\')}}\\n      Firmware Version\\n    {{else if (is-equal @right_axis_field \\'Temperature\\')}}\\n      Temperature\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Voltage\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"RSSI\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'readings-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Readings\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Number of Readings</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uptime-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Uptime\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Uptime in Seconds</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'reconnection-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Reconnection\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Reconnection Attempts</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uploads-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Uploads\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Number of Uploads</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Firmware\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Firmware</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'temp-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Temperature\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Temperature</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/blucell/temporal-gateway-right-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/blugate/chartjs-temporal-gateway-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newGatewayObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.Name}} oninput={{action (mut this.newGatewayObject.name) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.project}} oninput={{action (mut this.newGatewayObject.project) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectProject\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.location}} oninput={{action (mut this.newGatewayObject.location) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.level}} oninput={{action (mut this.newGatewayObject.level) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectLevel\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newGatewayObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.installedBy}} oninput={{action (mut this.newGatewayObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.purpose}} oninput={{action (mut this.newGatewayObject.purpose) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newGatewayObject.notes}} oninput={{action (mut this.newGatewayObject.notes) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createGateway\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/blugate/create-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{@anchorDistances.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" @gateway on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" @gateway on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each @anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}<td>Temp.</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.newTimestampValue) value=\\\"target.value\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.gatewayValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action (mut (get this.newGatewayValueObjectValues key)) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temp.\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} id=\\\"df{{key}}\\\" oninput={{action (mut this.temperatureObjectValue) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/blugate/create-new-raw-gateway-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @gateway.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div>{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @gateway.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div></td></tr><tr class=\\\"details\\\"><td colspan=\\\"7\\\"><hr></td></tr><tr class=\\\"details\\\"><td colspan=\\\"3\\\" style=\\\"vertical-align: top; margin-bottom: 1rem;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><h5>Properties:</h5></td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@gateway field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"></td></tr></tbody><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"td_details\\\"></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"6\\\" class=\\\"add-new-item\\\"></td><td class=\\\"add-new-item\\\"><span {{action \\\"saveGateway\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr>{{#if (eq @gateway.hasChildren true)}}<tr class=\\\"details newRecordDetails\\\">{{gateway-list gateway=@gateway.children sortBy=(action \\'sortBy\\') ordering=this.ordering}}</tr>{{/if}}</table>', { moduleName: 'geotechnical-data-platform-new/templates/components/blugate/edit-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg></div><div class=\\\"mb-1\\\"></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/blugate/nvd3-temporal-gateway-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@gatewayData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@gatewayData.meta routeLink=\\'raw-gateway-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{#if this.isVisibleCreateNewForm}}<div class=\\\"row\\\"><div class=\\\"col details newRecordDetails\\\">{{blucell/create-new-raw-gateway-data-value-form isVisibleCreateNewForm=this.isVisibleCreateNewForm isVisibleReadingCreated=this.isVisibleReadingCreated gatewayId=@gateway.id gatewayType=@gateway.gatewayType anchorDistances=this.anchorDistances dateFormat=\\'YYYY-MM-DD HH:mm:ss\\' setProp=@setProp}}</div></div>{{/if}}{{#if this.isVisibleReadingCreated}}<div class=\\\"row\\\"><div class=\\\"col\\\">Reading Added!</div></div>{{/if}}<div class=\\\"row\\\"><div class=\\\"col\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th>Date</th>{{#each this.anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}<th>Temp.</th><th id=\\\"add-new\\\" class=\\\"add-new-item\\\"></th></tr></thead><tbody>{{#each this.getGatewayData as |gatewayValue index|}}{{single-save-gateway-inputs-array-table-row-cells gatewayId=@gateway.id gateway=@gateway gatewayType=@gateway.gatewayType gatewayValueObject=gatewayValue gatewayValuesModel=@gatewayData temperatureValuesModel=@temperatureData inputType=\\'text\\' fields=\\'values\\' tableRowIndex=index setProp=@setProp omitTemperature=false}}{{/each}}</tbody></table></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@gatewayData.meta routeLink=\\'raw-gateway-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/blugate/raw-gateway-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>    \\n    {{#if (is-equal @selected \\\"frequency\\\")}}\\n      Frequency\\n    {{else if (is-equal @selected \\\"ppv\\\")}}\\n      PPV\\n    {{else if (is-equal @selected \\\"ppa\\\")}}\\n      PPA\\n    {{else}}\\n      Frequency\\n    {{/if}}\\n\\n    <span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"frequency\\\"}} class=\\\"dropdown-item\\\">Frequency</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"ppv\\\"}} class=\\\"dropdown-item\\\">PPV</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"ppa\\\"}} class=\\\"dropdown-item\\\">PPA</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/blugate/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @left_axis_field \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @left_axis_field \\'Firmware\\')}}\\n      Firmware Version\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Voltage\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Firmware\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Firmware Version</LinkTo>\\n  </dd.menu>\\n</BsDropdown>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/blugate/temporal-gateway-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @selected \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @selected \\'RSSI\\')}}\\n      RSSI\\n    {{else if (is-equal @selected \\'Readings\\')}}\\n      Number of Readings\\n    {{else if (is-equal @selected \\'Uptime\\')}}\\n      Uptime in Seconds\\n    {{else if (is-equal @selected \\'Reconnection\\')}}\\n      Reconnection Attempts\\n    {{else if (is-equal @selected \\'Uploads\\')}}\\n      Number of Uploads\\n    {{else if (is-equal @selected \\'Firmware\\')}}\\n      Firmware Version\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Voltage\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"RSSI\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'readings-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Readings\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Number of Readings</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uptime-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Uptime\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Uptime in Seconds</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'reconnection-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Reconnection\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Reconnection Attempts</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uploads-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Uploads\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Number of Uploads</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Firmware\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Firmware</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/blugate/temporal-gateway-left-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @right_axis_field \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @right_axis_field \\'RSSI\\')}}\\n      RSSI\\n    {{else if (is-equal @right_axis_field \\'Readings\\')}}\\n      Number of Readings\\n    {{else if (is-equal @right_axis_field \\'Uptime\\')}}\\n      Uptime in Seconds\\n    {{else if (is-equal @right_axis_field \\'Reconnection\\')}}\\n      Reconnection Attempts\\n    {{else if (is-equal @right_axis_field \\'Uploads\\')}}\\n      Number of Uploads\\n    {{else if (is-equal @right_axis_field \\'Firmware\\')}}\\n      Firmware Version\\n    {{else if (is-equal @right_axis_field \\'Temperature\\')}}\\n      Temperature\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Voltage\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"RSSI\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'readings-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Readings\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Number of Readings</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uptime-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Uptime\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Uptime in Seconds</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'reconnection-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Reconnection\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Reconnection Attempts</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uploads-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Uploads\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Number of Uploads</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Firmware\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Firmware</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'temp-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Temperature\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Temperature</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/blugate/temporal-gateway-right-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newGatewayObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.Name}} oninput={{action (mut this.newGatewayObject.name) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.project}} oninput={{action (mut this.newGatewayObject.project) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectProject\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.location}} oninput={{action (mut this.newGatewayObject.location) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.level}} oninput={{action (mut this.newGatewayObject.level) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectLevel\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newGatewayObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.installedBy}} oninput={{action (mut this.newGatewayObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.purpose}} oninput={{action (mut this.newGatewayObject.purpose) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newGatewayObject.notes}} oninput={{action (mut this.newGatewayObject.notes) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createGateway\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/bluvibe/create-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{@anchorDistances.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" @gateway on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" @gateway on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each @anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}<td>Temp.</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.newTimestampValue) value=\\\"target.value\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.gatewayValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action (mut (get this.newGatewayValueObjectValues key)) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temp.\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} id=\\\"df{{key}}\\\" oninput={{action (mut this.temperatureObjectValue) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/bluvibe/create-new-raw-gateway-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"7\\\" class=\\\"td_details\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @gateway.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div>{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @gateway.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div></td></tr><tr class=\\\"details\\\"><td colspan=\\\"3\\\" style=\\\"vertical-align: top; margin-bottom: 1rem;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><h5>Properties:</h5></td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@gateway field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"></td></tr></tbody><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"td_details\\\"></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"6\\\" class=\\\"add-new-item\\\"></td><td class=\\\"add-new-item\\\"><span {{action \\\"saveGateway\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr>{{#if (eq @gateway.hasChildren true)}}<tr class=\\\"details newRecordDetails\\\">{{gateway-list gateway=@gateway.children sortBy=(action \\'sortBy\\') ordering=this.ordering}}</tr>{{/if}}</table>', { moduleName: 'geotechnical-data-platform-new/templates/components/bluvibe/edit-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg></div><div class=\\\"mb-1\\\"></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/bluvibe/nvd3-temporal-gateway-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@gatewayData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@gatewayData.meta routeLink=\\'raw-gateway-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{#if this.isVisibleCreateNewForm}}<div class=\\\"row\\\"><div class=\\\"col details newRecordDetails\\\">{{blucell/create-new-raw-gateway-data-value-form isVisibleCreateNewForm=this.isVisibleCreateNewForm isVisibleReadingCreated=this.isVisibleReadingCreated gatewayId=@gateway.id gatewayType=@gateway.gatewayType anchorDistances=this.anchorDistances dateFormat=\\'YYYY-MM-DD HH:mm:ss\\' setProp=@setProp}}</div></div>{{/if}}{{#if this.isVisibleReadingCreated}}<div class=\\\"row\\\"><div class=\\\"col\\\">Reading Added!</div></div>{{/if}}<div class=\\\"row\\\"><div class=\\\"col\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th>Date</th>{{#each this.anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}<th>Temp.</th><th id=\\\"add-new\\\" class=\\\"add-new-item\\\"></th></tr></thead><tbody>{{#each this.getGatewayData as |gatewayValue index|}}{{single-save-gateway-inputs-array-table-row-cells gatewayId=@gateway.id gateway=@gateway gatewayType=@gateway.gatewayType gatewayValueObject=gatewayValue gatewayValuesModel=@gatewayData temperatureValuesModel=@temperatureData inputType=\\'text\\' fields=\\'values\\' tableRowIndex=index setProp=@setProp omitTemperature=false}}{{/each}}</tbody></table></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@gatewayData.meta routeLink=\\'raw-gateway-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/bluvibe/raw-gateway-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @left_axis_field \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @left_axis_field \\'RSSI\\')}}\\n      RSSI\\n    {{else if (is-equal @left_axis_field \\'Readings\\')}}\\n      Number of Readings\\n    {{else if (is-equal @left_axis_field \\'Uptime\\')}}\\n      Uptime in Seconds\\n    {{else if (is-equal @left_axis_field \\'Reconnection\\')}}\\n      Reconnection Attempts\\n    {{else if (is-equal @left_axis_field \\'Uploads\\')}}\\n      Number of Uploads\\n    {{else if (is-equal @left_axis_field \\'Firmware\\')}}\\n      Firmware Version\\n    {{else if (is-equal @left_axis_field \\'Temperature\\')}}\\n      Temperature\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Voltage\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null  left_axis_field=\\\"RSSI\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'readings-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Readings\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Number of Readings</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uptime-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Uptime\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Uptime in Seconds</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'reconnection-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Reconnection\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Reconnection</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Firmware\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Firmware Version</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'temperature-gateway-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Temperature\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Temperature</LinkTo>\\n  </dd.menu>\\n</BsDropdown>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/bluvibe/temporal-gateway-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('blucell\\n<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @selected \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @selected \\'RSSI\\')}}\\n      RSSI\\n    {{else if (is-equal @selected \\'Readings\\')}}\\n      Number of Readings\\n    {{else if (is-equal @selected \\'Uptime\\')}}\\n      Uptime in Seconds\\n    {{else if (is-equal @selected \\'Reconnection\\')}}\\n      Reconnection Attempts\\n    {{else if (is-equal @selected \\'Uploads\\')}}\\n      Number of Uploads\\n    {{else if (is-equal @selected \\'Firmware\\')}}\\n      Firmware Version\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Voltage\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"RSSI\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'readings-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Readings\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Number of Readings</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uptime-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Uptime\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Uptime in Seconds</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'reconnection-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Reconnection\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Reconnection Attempts</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uploads-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Uploads\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Number of Uploads</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Firmware\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Firmware</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/bluvibe/temporal-gateway-left-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @right_axis_field \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @right_axis_field \\'RSSI\\')}}\\n      RSSI\\n    {{else if (is-equal @right_axis_field \\'Readings\\')}}\\n      Number of Readings\\n    {{else if (is-equal @right_axis_field \\'Uptime\\')}}\\n      Uptime in Seconds\\n    {{else if (is-equal @right_axis_field \\'Reconnection\\')}}\\n      Reconnection Attempts\\n    {{else if (is-equal @right_axis_field \\'Uploads\\')}}\\n      Number of Uploads\\n    {{else if (is-equal @right_axis_field \\'Firmware\\')}}\\n      Firmware Version\\n    {{else if (is-equal @right_axis_field \\'Temperature\\')}}\\n      Temperature\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Voltage\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"RSSI\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'readings-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Readings\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Number of Readings</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uptime-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Uptime\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Uptime in Seconds</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'reconnection-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Reconnection\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Reconnection Attempts</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uploads-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Uploads\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Number of Uploads</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Firmware\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Firmware</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'temp-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Temperature\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Temperature</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/bluvibe/temporal-gateway-right-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<ul class=\\\"breadcrumbs\\\">\\n  {{#each this.breadCrumbs as |crumb|}}\\n    <li class={{if crumb.isCurrent \\'current\\'}}>\\n      {{#if crumb.linkable}}\\n        {{#if crumb.model}}\\n          <LinkTo @route={{crumb.path}} @model={{crumb.model}}>{{crumb.label}}</LinkTo>\\n        {{else}}\\n          <LinkTo @route={{crumb.path}}>{{crumb.label}}</LinkTo>\\n        {{/if}}\\n      {{else}}\\n        {{crumb.label}}\\n      {{/if}}\\n    </li>\\n  {{/each}}\\n</ul>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/bread-crumbs.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"margin-top: 10px;\\\"><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:450px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-spatial\\\"></canvas></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;margin-top:4px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Hover over the chart to see values in the panel below\\\">Hover to see values</div><div title=\\\"Colored dots on x-axis show anchor positions\\\">Dots = anchor positions</div><div title=\\\"Scroll up to zoom out centered around cursor\\\">Scroll up to zoom out</div><div title=\\\"Scroll down to zoom in towards cursor\\\">Scroll down to zoom in</div><div title=\\\"Click and drag left or right\\\">Drag to pan</div><div title=\\\"Double-click anywhere on the chart\\\">Double-click to reset</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/cable/chartjs-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/cable/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@projectLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'newInstrumentObjectProject\\' onSelectionChange=(action \\'setProject\\' value=\\\"target.value\\\") inputFieldId=\\'project\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.location}} oninput={{action (mut this.newInstrumentObject.location) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCoordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.east}} oninput={{action (mut this.newInstrumentObject.east) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.north}} oninput={{action (mut this.newInstrumentObject.north) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.depth}} oninput={{action (mut this.newInstrumentObject.depth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectAzimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.azimuth}} oninput={{action (mut this.newInstrumentObject.azimuth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAzimuth\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectDip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.dip}} oninput={{action (mut this.newInstrumentObject.dip) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDip\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@levelLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'newInstrumentObjectLevel\\' onSelectionChange=(action \\'setLevel\\' value=\\\"target.value\\\") inputFieldId=\\'level\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectBorehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.borehole}} oninput={{action (mut this.newInstrumentObject.borehole) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectBorehole\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstrument_length\\\" class=\\\"col-12 col-form-label\\\">Length (m):\t</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.instrumentLength}} oninput={{action (mut this.newInstrumentObject.instrumentLength) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstrumentLength\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectStrokeLength\\\" class=\\\"col-12 col-form-label bold\\\">Stroke Length (mm):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.strokeLength}} oninput={{action (mut this.newInstrumentObject.strokeLength) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectStrokeLength\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newSensorObjectBulbed\\\" class=\\\"col-12 col-form-label\\\">Bulbed:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><label data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" data-offset=\\\"0 -7\\\" class=\\\"custom-control custom-checkbox empty-checkbox-title mr-sm-2 has-tooltip-info\\\"><input type=\\\"checkbox\\\" {{action \\\"bulbChanged\\\" on=\\\"change\\\"}} id=\\\"newInstrumentObjectBulbed\\\" class=\\\"custom-control-input\\\"><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\"></span></label></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPlated\\\" class=\\\"col-12 col-form-label\\\">Plated:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><label data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" data-offset=\\\"0 -7\\\" class=\\\"custom-control custom-checkbox empty-checkbox-title mr-sm-2 has-tooltip-info\\\"><input type=\\\"checkbox\\\" {{action \\\"plateChanged\\\" on=\\\"change\\\"}} id=\\\"newInstrumentObjectPlated\\\" class=\\\"custom-control-input\\\"><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\"></span></label></div></div></td></tr></tbody></table></td><td style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.installedBy}} oninput={{action (mut this.newInstrumentObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.purpose}} oninput={{action (mut this.newInstrumentObject.purpose) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newInstrumentObject.notes}} oninput={{action (mut this.newInstrumentObject.notes) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectHeadAt\\\" class=\\\"col-12 col-form-label bold\\\">Head at:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"newInstrumentObjectHeadAt\\\" onchange={{action (mut this.headAt) value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each @headAts as |selectOption|}}<option selected={{is-equal selectOption.key this.headAt}} value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></div></div></td></tr><tr><td><br /></td></tr><tr><td><label for=\\\"newInstrumentObjectElasticLimitPct\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit strain (%):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.elasticLimitPct}} oninput={{action (mut this.newInstrumentObject.elasticLimitPct) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectElasticLimitPct\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectUltimateLimitPct\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit strain (%):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.ultimateLimitPct}} oninput={{action (mut this.newInstrumentObject.ultimateLimitPct) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectUltimateLimitPct\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjEctelasticLimitFce\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit force (kN):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.elasticLimitFce}} oninput={{action (mut this.newInstrumentObject.elasticLimitFce) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjEctelasticLimitFce\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectUltimateLimitFce\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit force (kN):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.ultimateLimitFce}} oninput={{action (mut this.newInstrumentObject.ultimateLimitFce) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectUltimateLimitFce\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/cable/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{this.instrumentAnchors.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each this.instrumentAnchors as |anchor|}}<td>{{anchor}}</td>{{/each}}<td>Temperature</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action \\\"setNewTimestampValue\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action \\\"setNewDisplacementValue\\\" key}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} oninput={{action \\\"setTemperatureValue\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/cable/create-new-raw-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"width: 100%;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:10px\\\"><div style=\\\"margin-right:10px\\\"><div class=\\\"inst-buttons\\\"><span {{action \\\"viewData\\\" @instrument.id }} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div></div><div style=\\\"margin-right:10px\\\">{{#if @hasGraphs}}<div class=\\\"inst-buttons\\\"><span {{action \\\"tGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div><div style=\\\"\\\">{{#if @hasGraphs}}{{#if (gt @instrument.channelsNum 2)}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"sGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-area\\\" /> Spatial Graph</span></div>{{/if}}{{/if}}</div></div><div style=\\\"text-decoration:underline;margin-bottom:10px; cursor:pointer;\\\" onClick={{action \\\"cycleAlertsListVisibility\\\"}}><h5>Alerts:</h5></div>{{#if this.isAlertsListVisible}}{{#if this.licenceIsValid}}<div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content: space-between;\\\"><div class=\\\"action-bar-section\\\"><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"table-legend\\\"}} class=\\\"action-bar-head-body\\\">Table Legend</div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"actions\\\"}} class=\\\"action-bar-head-body\\\">Actions</div></div></div>{{/if}}<div style=\\\"margin:15px\\\">{{#if (is-equal this.activeActionTab \\\"table-legend\\\")}}{{table-legend-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"actions\\\")}}{{actions-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"batch-actions\\\")}}{{batch-actions-alerts batchSelectedAlertsID=this.batchSelectedAlertsID alerts=@model.alerts isShowBatchConfirmationModal=this.isShowBatchConfirmationModal typeBatch=this.typeBatch batchWarningMessage=this.batchWarningMessage}}{{/if}}</div><div style=\\\"margin-bottom:10px\\\">{{alerts-list licenceIsValid=this.licenceIsValid allowBatchSelect=false batchSelectedAlertsID=this.batchSelectedAlertsID alerts=this.alertsList globalDatetimeFormat=@globalDatetimeFormat ordering=this.ordering sortBy=(action \\'sortBy\\')}}</div><div style=\\\"display:flex;justify-content: flex-end;\\\">{{#each this.paginationSearchConfig.alertProfilePaginationList as |page|}}<button type=\\\"button\\\" {{action \\'jumpToPage\\' page on=\\\"click\\\"}} style=\\\"border-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}};color: {{if (eq page \\'...\\') \\'black\\' \\'white\\'}};margin-right: 10px;font-size:small;padding: 5px;background-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}}\\\" class=\\\"btn btn-primary\\\">{{page}}</button>{{/each}}</div>{{/if}}<div style=\\\"width: 100%;\\\"><div><h5>Properties:</h5></div><div style=\\\"width: 100%;display:flex;flex-direction:row;\\\"><div style=\\\"width: 50%;display:flex;flex-direction:column;\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"channelsNum\\\" class=\\\"col-12 col-form-label\\\">Channels:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'channelsNum\\' isEditable=false}}</td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"coordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=@instrument east=@instrument.east north=@instrument.north depth=@instrument.depth stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"azimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'azimuth\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"dip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'dip\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"borehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'borehole\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'zeroTimestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></div><div style=\\\"width: 50%;display:flex;flex-direction:column;\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"headAt\\\" class=\\\"col-12 col-form-label\\\">Head at:</label></td><td class=\\\"input\\\">{{single-save-select selectOptions=@headAts id=\\\"headAt\\\" selectOptionsKyes=\\\"id,title\\\" object=@instrument.headAt parentObject=@instrument field=\\'title\\' valueSource=\\'id\\' inputFieldId=\\'headAt\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"instrumentLength\\\" class=\\\"col-12 col-form-label\\\">Length (m):</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'instrumentLength\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"strokeLength\\\" class=\\\"col-12 col-form-label\\\">Stroke Length (mm):</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'strokeLength\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"referenceAnchor\\\" class=\\\"col-12 col-form-label\\\">Reference Anchor:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'referenceAnchor\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"bulbed\\\" class=\\\"col-12 col-form-label\\\">Bulbed:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument field=\\'bulbed\\'}}</td></tr><tr><td><label for=\\\"plated\\\" class=\\\"col-12 col-form-label\\\">Plated:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument field=\\'plated\\'}}</td></tr><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Active:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument id=\\\"activeCheck\\\" field=\\'active\\'}}</td></tr><tr><td><br /></td></tr><tr><td><label for=\\\"elasticLimitPct\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit strain (%):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'elasticLimitPct\\' update=(action \\'updatePage\\') stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"ultimateLimitPct\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit strain (%):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'ultimateLimitPct\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"elasticLimitFce\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit force (kN):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'elasticLimitFce\\' update=(action \\'updatePage\\') stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"ultimateLimitFce\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit force (kN):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'ultimateLimitFce\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"instrumentStiffness\\\" class=\\\"col-12 col-form-label\\\">Stiffness (kN/%):</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'instrumentStiffness\\' isEditable=false}}</td></tr></tbody></table></div></div><div style=\\\"padding: 0.2rem;font-weight:bold;\\\">Anchor Diagram:</div><div style=\\\"padding:10px;width: 100%;\\\">{{#if this.isEditAnchorDiagram}}<div style=\\\"display:flex;flex-direction:row;align-items:center\\\"><div style=\\\"width: 100%;\\\">{{instrument-anchors-diagram showHATHACLabels=true style=\\\"width: 100%;\\\" inputMode=\\\"input\\\" initialValues=this.anchorDiagramInputInitalValue instrumentID=@instrument.id headAt=@instrument.headAt.id instrumentTypeText=@instrument.instrumentType.title channels=@instrument.channelsNum onCustomNumberInput=(action \\\"updateChannelInput\\\")}}</div><div style=\\\"margin-right:10px;margin-left:10px;cursor:pointer;\\\" onClick={{action \\\"saveAnchors\\\"}}><FaIcon @icon=\\\"check\\\" /></div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleEditAnchorDiagram\\\"}}><FaIcon @icon=\\\"times\\\" /></div></div>{{else}}<div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleEditAnchorDiagram\\\"}}>{{instrument-anchors-diagram showHATHACLabels=true style=\\\"width: 100%;\\\" inputMode=\\\"label\\\" initialValues=this.anchorDiagramLabelInitalValue instrumentID=@instrument.id headAt=@instrument.headAt.id instrumentTypeText=@instrument.instrumentType.title channels=@instrument.channelsNum}}</div>{{/if}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/cable/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-spatial-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-spatial-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/cable/nvd3-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/cable/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"table-responsive\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th>{{#each this.columnSpecs as |spec|}}<th>{{spec.tableLabel}}</th>{{/each}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th></tr></thead><tbody>{{#each this.tableRows as |row|}}<tr><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td>{{#each row.cells as |cell|}}<td>{{cell.value}}</td>{{/each}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td></tr>{{/each}}</tbody></table></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/cable/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Velocity</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'load-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Load</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/cable/spatial-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Velocity</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'acceleration-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Acceleration</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'load-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Load</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/cable/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"profile-body-subtitle\\\">Evaluation Info</div><div class=\\\"profile-form-eval-types-tabs-section\\\">{{#each this.EVALUATION_TYPE_OBJECTS as |typeObject|}}<div style=\\\"border-bottom-color: {{if (is-equal typeObject.id this.selectedEvaluationObj.id) \\'black;\\' \\'lightgray;\\'}};\\\" onClick={{action \\\"onSelectedEvaluationTypeObj\\\" typeObject}} class=\\\"profile-form-eval-type-tab-label\\\">{{typeObject.label}}</div>{{/each}}</div><div style=\\\"padding:20px\\\">{{#if (is-equal this.selectedEvaluationObj.id \\\"OOR_ARBITRARY\\\")}}{{create-alert-profile-subforms/oor-arbitrary selectedEvaluationObj=this.selectedEvaluationObj isLoading=this.isLoading selectedInstrument=this.selectedInstrument MANDATORY_BODY=this.MANDATORY_BODY alertProfileFormFinalData=this.alertProfileFormFinalData alertProfileFormChannelsData=this.alertProfileFormChannelsData alertProfileFormParametersData=this.alertProfileFormParametersData dispUnits=this.dispUnits tempUnits=this.tempUnits timeUnits=this.timeUnits}}{{/if}}{{#if (is-equal this.selectedEvaluationObj.id \\\"OOR_REFERENCE\\\")}}{{create-alert-profile-subforms/oor-reference selectedEvaluationObj=this.selectedEvaluationObj isLoading=this.isLoading selectedInstrument=this.selectedInstrument MANDATORY_BODY=this.MANDATORY_BODY alertProfileFormFinalData=this.alertProfileFormFinalData alertProfileFormChannelsData=this.alertProfileFormChannelsData alertProfileFormParametersData=this.alertProfileFormParametersData dispUnits=this.dispUnits tempUnits=this.tempUnits timeUnits=this.timeUnits}}{{/if}}{{#if (is-equal this.selectedEvaluationObj.id \\\"DHQ_NO_DATA\\\")}}{{create-alert-profile-subforms/dhq-no-data selectedEvaluationObj=this.selectedEvaluationObj isLoading=this.isLoading selectedInstrument=this.selectedInstrument MANDATORY_BODY=this.MANDATORY_BODY alertProfileFormFinalData=this.alertProfileFormFinalData alertProfileFormChannelsData=this.alertProfileFormChannelsData alertProfileFormParametersData=this.alertProfileFormParametersData dispUnits=this.dispUnits tempUnits=this.tempUnits timeUnits=this.timeUnits}}{{/if}}{{#if (is-equal this.selectedEvaluationObj.id \\\"DHQ_FLATLINE\\\")}}{{create-alert-profile-subforms/dhq-flatline selectedEvaluationObj=this.selectedEvaluationObj isLoading=this.isLoading selectedInstrument=this.selectedInstrument MANDATORY_BODY=this.MANDATORY_BODY alertProfileFormFinalData=this.alertProfileFormFinalData alertProfileFormChannelsData=this.alertProfileFormChannelsData alertProfileFormParametersData=this.alertProfileFormParametersData dispUnits=this.dispUnits tempUnits=this.tempUnits timeUnits=this.timeUnits}}{{/if}}{{#if (is-equal this.selectedEvaluationObj.id \\\"DHQ_SPIKE\\\")}}{{create-alert-profile-subforms/dhq-spike selectedEvaluationObj=this.selectedEvaluationObj isLoading=this.isLoading selectedInstrument=this.selectedInstrument MANDATORY_BODY=this.MANDATORY_BODY alertProfileFormFinalData=this.alertProfileFormFinalData alertProfileFormChannelsData=this.alertProfileFormChannelsData alertProfileFormParametersData=this.alertProfileFormParametersData dispUnits=this.dispUnits tempUnits=this.tempUnits timeUnits=this.timeUnits}}{{/if}}{{#if (is-equal this.selectedEvaluationObj.id \\\"ROC_ROLLING\\\")}}{{create-alert-profile-subforms/roc-rolling selectedEvaluationObj=this.selectedEvaluationObj isLoading=this.isLoading selectedInstrument=this.selectedInstrument MANDATORY_BODY=this.MANDATORY_BODY alertProfileFormFinalData=this.alertProfileFormFinalData alertProfileFormChannelsData=this.alertProfileFormChannelsData alertProfileFormParametersData=this.alertProfileFormParametersData dispUnits=this.dispUnits tempUnits=this.tempUnits timeUnits=this.timeUnits}}{{/if}}{{#if (is-equal this.selectedEvaluationObj.id \\\"DISP_TEMP_CORRELATION\\\")}}{{create-alert-profile-subforms/disp-temp-correlation selectedEvaluationObj=this.selectedEvaluationObj isLoading=this.isLoading selectedInstrument=this.selectedInstrument MANDATORY_BODY=this.MANDATORY_BODY alertProfileFormFinalData=this.alertProfileFormFinalData alertProfileFormChannelsData=this.alertProfileFormChannelsData alertProfileFormParametersData=this.alertProfileFormParametersData dispUnits=this.dispUnits tempUnits=this.tempUnits timeUnits=this.timeUnits}}{{/if}}</div>', { moduleName: 'geotechnical-data-platform-new/templates/components/create-alert-profile-form-alert-types.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"profile-body-title-with-loading\\\">Form{{#if this.isLoading}}<div style=\\\"margin-left:10px\\\" class=\\\"pulse_loader\\\"></div>{{/if}}</div><div style=\\\"padding:10px\\\"><div class=\\\"profile-body-subtitle\\\">Primary Info</div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Name<span id=\\\"name_required_label\\\" class=\\\"required-label\\\">*</span></div><input type=\\\"text\\\" value={{this.getName}} oninput={{action \\\"updateNameInput\\\"}}></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Note</div><textarea style=\\\"width:100%;resize: both;\\\" value={{this.getNote}} id=\\\"noteTextbox\\\" type=\\\"text\\\" oninput={{action \\\"updateNoteInput\\\"}}></textarea></div><div style=\\\"margin:10px;\\\" class=\\\"profile-sidebar-section-divider\\\"></div></div><div style=\\\"padding:10px\\\"><div class=\\\"profile-body-subtitle\\\">Delivery Info</div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Method<span id=\\\"delivery_method_required_label\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"display: flex;flex-direction: row;gap: 15px;margin-top: 5px;\\\">{{#each this.METHOD_DELIVERY as |delivery|}}<div style=\\\"display: flex;align-items: center;gap: 5px;cursor: pointer;\\\"><div>{{delivery.value}}</div><input type=\\\"checkbox\\\" checked={{is-in this.selectedMethodDelivery delivery.id}} onchange={{action \\\"toggleDeliveryMethod\\\" delivery.id}}></div>{{/each}}</div></div><div style={{this.recipientsDisabledStyle}} class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Recipients<span id=\\\"email_required_label\\\" class=\\\"required-label\\\">*</span><span id=\\\"phone_required_label\\\" class=\\\"required-label\\\">*</span></div><div style={{this.directEmailDisabledStyle}}><div style=\\\"font-size:small;font-weight:600;margin:8px 0 3px;\\\">Direct Emails</div><div style=\\\"display:flex;flex-wrap:wrap;align-items:center;gap:5px;border:1px solid #ccc;border-radius:4px;padding:5px;min-width:400px;min-height:36px;\\\">{{#each this.emailTags as |tag|}}<div style=\\\"display:flex;align-items:center;background:#4A6A9C;color:white;border-radius:3px;padding:2px 8px;font-size:small;\\\">{{tag}}<div style=\\\"margin-left:5px;cursor:pointer;font-weight:bold;\\\" {{action \\\"removeEmailTag\\\" tag on=\\\"click\\\"}}>x</div></div>{{/each}}<input id=\\\"emailTagInput\\\" type=\\\"text\\\" disabled={{this.emailDisabledBool}} style=\\\"border:none;outline:none;flex:1;min-width:150px;\\\" placeholder=\\\"Type email and press Enter\\\" onkeydown={{action \\\"onEmailTagKeydown\\\"}}></div><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-top:5px;\\\"><button type=\\\"button\\\" disabled={{this.emailDisabledBool}} {{action \\\"testEmailAlert\\\" on=\\\"click\\\"}} style=\\\"margin-right:10px;font-size: small;height: 30px;\\\" class=\\\"btn btn-primary\\\">Test</button>{{#if this.isEmailTestLoading}}<div class=\\\"pulse_loader\\\"></div>{{/if}}</div>{{#if this.emailErrorMessage}}<div style=\\\"padding-bottom:0px;padding-top:0px;color:{{this.emailErrorColor}}\\\">{{this.emailErrorMessage}}</div>{{/if}}</div><div style={{this.directPhoneDisabledStyle}}><div style=\\\"font-size:small;font-weight:600;margin:8px 0 3px;\\\">Direct Phones</div><div style=\\\"display:flex;flex-wrap:wrap;align-items:center;gap:5px;border:1px solid #ccc;border-radius:4px;padding:5px;min-width:400px;min-height:36px;\\\">{{#each this.phoneTags as |tag|}}<div style=\\\"display:flex;align-items:center;background:#4A6A9C;color:white;border-radius:3px;padding:2px 8px;font-size:small;\\\">{{tag}}<div style=\\\"margin-left:5px;cursor:pointer;font-weight:bold;\\\" {{action \\\"removePhoneTag\\\" tag on=\\\"click\\\"}}>x</div></div>{{/each}}<input id=\\\"phone-input\\\" type=\\\"tel\\\" disabled={{this.phoneDisabledBool}} style=\\\"border:none;outline:none;flex:1;min-width:150px;\\\" placeholder=\\\"Type number and press Enter\\\"></div><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-top:5px;\\\"><button type=\\\"button\\\" disabled={{this.phoneDisabledBool}} {{action \\\"testPhoneAlert\\\" on=\\\"click\\\"}} style=\\\"margin-right:10px;font-size: small;height: 30px;\\\" class=\\\"btn btn-primary\\\">Test</button>{{#if this.isPhoneTestLoading}}<div class=\\\"pulse_loader\\\"></div>{{/if}}</div>{{#if this.phoneErrorMessage}}<div style=\\\"padding-bottom:0px;padding-top:0px;color:{{this.phoneErrorColor}}\\\">{{this.phoneErrorMessage}}</div>{{/if}}</div><div style=\\\"margin-top:12px;\\\"><div style=\\\"font-size:small;font-weight:600;margin-bottom:3px;\\\">Contacts</div><select onchange={{action \\\"addContactRecipient\\\"}} style=\\\"font-size:small;padding:3px 6px;min-width:260px;\\\"><option value=\\\"\\\">Add a contact…</option>{{#each this.contactList as |c|}}<option value={{c.id}}>{{c.label}}</option>{{/each}}</select>{{#each this.displaySelectedContacts as |contact|}}<div style=\\\"display:flex;align-items:center;flex-wrap:wrap;gap:10px;border:1px solid #d6e0ff;background:#f4f7ff;border-radius:4px;padding:4px 8px;margin-top:4px;font-size:small;\\\"><div style=\\\"font-weight:600;\\\">{{contact.label}}</div><label style=\\\"display:flex;align-items:center;gap:3px;cursor:pointer;margin:0;\\\"><input type=\\\"checkbox\\\" checked={{contact.use_email}} disabled={{contact.emailDisabled}} {{action \\\"toggleContactChannel\\\" contact \\\"email\\\" on=\\\"change\\\"}}>Email</label><label style=\\\"display:flex;align-items:center;gap:3px;cursor:pointer;margin:0;\\\"><input type=\\\"checkbox\\\" checked={{contact.use_phone}} disabled={{contact.phoneDisabled}} {{action \\\"toggleContactChannel\\\" contact \\\"phone\\\" on=\\\"change\\\"}}>Phone</label><div style=\\\"cursor:pointer;color:red;font-weight:bold;margin-left:auto;\\\" {{action \\\"removeContactRecipient\\\" contact on=\\\"click\\\"}}>x</div></div>{{/each}}</div><div style=\\\"margin-top:12px;\\\"><div style=\\\"font-size:small;font-weight:600;margin-bottom:3px;\\\">Contact Groups</div><select onchange={{action \\\"addGroupRecipient\\\"}} style=\\\"font-size:small;padding:3px 6px;min-width:260px;\\\"><option value=\\\"\\\">Add a group…</option>{{#each this.groupList as |g|}}<option value={{g.id}}>{{g.label}}</option>{{/each}}</select>{{#each this.displaySelectedGroups as |group|}}<div style=\\\"margin-top:4px;\\\"><div style=\\\"display:flex;align-items:center;flex-wrap:wrap;gap:10px;border:1px solid #d6e0ff;background:#f4f7ff;border-radius:4px;padding:4px 8px;font-size:small;\\\"><div style=\\\"font-weight:600;\\\">{{group.label}}</div><label style=\\\"display:flex;align-items:center;gap:3px;cursor:pointer;margin:0;\\\"><input type=\\\"checkbox\\\" checked={{group.use_email}} disabled={{group.emailDisabled}} {{action \\\"toggleGroupChannel\\\" group \\\"email\\\" on=\\\"change\\\"}}>Email</label><label style=\\\"display:flex;align-items:center;gap:3px;cursor:pointer;margin:0;\\\"><input type=\\\"checkbox\\\" checked={{group.use_phone}} disabled={{group.phoneDisabled}} {{action \\\"toggleGroupChannel\\\" group \\\"phone\\\" on=\\\"change\\\"}}>Phone</label><div style=\\\"cursor:pointer;color:red;font-weight:bold;margin-left:auto;\\\" {{action \\\"removeGroupRecipient\\\" group on=\\\"click\\\"}}>x</div></div><div style=\\\"font-size:11px;color:#777;font-style:italic;margin-left:4px;\\\">This choice applies to all members of the group.</div></div>{{/each}}</div></div><div class=\\\"profile-body-subtitle\\\">Instrument Info</div><div style=\\\"max-width:25%;\\\" class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">ID<span id=\\\"instrument_id_required_label\\\" class=\\\"required-label\\\">*</span></div><select id=\\\"instrument-id-search\\\"></select></div><div style=\\\"display:flex;flex-direction:row;\\\" class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-form-label-value-sub-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Supported</div><div class=\\\"profile-body-row-label-section-value\\\">{{#if this.isSupportedInstrument}}<FaIcon style=\\\"color:green\\\" @icon=\\\"check\\\" />{{else}}<FaIcon style=\\\"color:red\\\" @icon=\\\"times\\\" />{{/if}}</div></div><div class=\\\"profile-form-label-value-sub-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Type</div><div class=\\\"profile-body-row-label-section-value\\\">{{this.selectedInstrument.instrumentType.title}}</div></div><div class=\\\"profile-form-label-value-sub-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Channels</div><div class=\\\"profile-body-row-label-section-value\\\">{{this.selectedInstrument.channelsNum}}</div></div><div class=\\\"profile-form-label-value-sub-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Head At</div><div class=\\\"profile-body-row-label-section-value\\\">{{this.selectedInstrument.headAt.id}}</div></div></div><div style=\\\"display:flex;flex-direction:column;\\\" class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Anchor Diagram<span id=\\\"channels_required_label\\\" class=\\\"required-label\\\">*</span></div>{{#if this.selectedInstrument}}{{instrument-anchors-diagram showHATHACLabels=true initialValues=this.getAnchorDiagramInitalValue inputMode=\\\"checkbox\\\" instrumentID=this.selectedInstrument.id headAt=this.selectedInstrument.headAt.id instrumentTypeText=this.selectedInstrument.instrumentType.title channels=this.selectedInstrument.channelsNum onCustomCheckBoxInput=(action \\\"updateChannelCheckboxInput\\\") triggerDiagramReset=(action \\\"triggerDiagramReset\\\")}}{{/if}}</div><div style=\\\"margin:10px\\\" class=\\\"profile-sidebar-section-divider\\\"></div>{{create-alert-profile-form-alert-types isLoading=this.isLoading licenceIsValid=this.licenceIsValid selectedInstrument=this.selectedInstrument MANDATORY_BODY=this.MANDATORY_BODY alertProfileFormFinalData=this.alertProfileFormFinalData alertProfileFormChannelsData=this.alertProfileFormChannelsData alertProfileFormParametersData=this.alertProfileFormParametersData dispUnits=this.dispUnits tempUnits=this.tempUnits timeUnits=this.timeUnits}}</div>', { moduleName: 'geotechnical-data-platform-new/templates/components/create-alert-profile-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"profile-sidebar-section\\\"><div style=\\\"font-size:unset;cursor:none;\\\" class=\\\"profile-sidebar-section-profile-photo-section\\\"><span style=\\\"font-size:3em;\\\" class=\\\"alert-bell-icon\\\"><FaIcon @icon=\\\"bell\\\" /></span></div><div style=\\\"overflow-x: unset;width: unset;\\\" class=\\\"profile-sidebar-section-title-section\\\">Create Alert Profile</div></div><div class=\\\"profile-sidebar-section-divider\\\"></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/create-alert-profile-sidebar.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Description</div><div class=\\\"profile-form-description-label\\\">{{this.getTypeDescription}}</div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Visualizer</div><div class=\\\"profile-form-description-label\\\"><video src=\\\"/assets/videos/alert-types/Flatline-Demonstration.mp4\\\" loop=\\\"loop\\\" muted=\\\"muted\\\" autoplay=\\\"autoplay\\\" playsinline=\\\"playsinline\\\" disablepictureinpicture=\\\"true\\\" preload=\\\"metadata\\\" style=\\\"width:100%;max-width:350px;border:1px solid #ddd;border-radius:4px;pointer-events:none;\\\"></video></div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Parameters</div><div style=\\\"display:flex;flex-direction:row;\\\" class=\\\"profile-form-label-value-section\\\"><div style=\\\"margin-right:10px;\\\"><div class=\\\"profile-body-row-label-section-label\\\">Flatline Threshold Value<span id=\\\"flatline_threshold_value_required_label_4\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"flatline_threshold_value_Textbox\\\" type=\\\"number\\\" min=0 oninput={{action \\\"updateFlatlineThresholdValueInput\\\"}}></div></div><div><div class=\\\"profile-body-row-label-section-label\\\">Flatline Threshold Unit<span id=\\\"flatline_threshold_unit_required_label_4\\\" class=\\\"required-label\\\">*</span></div>{{displacement-units-group initValue=\\\"\\\" dispUnits=this.dispUnits allowRAW=false allowBits=false onChange=(action \\\"updateDispDropdownUnit\\\" \\\"flatline_threshold_unit\\\")}}</div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Allowed Occurrences<span id=\\\"allowed_occurrences_required_label_4\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"allowed_occurrences_Textbox\\\" type=\\\"number\\\" min=0 oninput={{action \\\"updateOccurrencesValueInput\\\"}}></div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Soft Reset</div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"can_soft_reset_checkbox\\\" checked={{this.isSoftReset}} type=\\\"checkbox\\\" oninput={{action \\\"updateSoftResetCheckbox\\\"}}></div><div style=\\\"font-size: x-small;margin:0px;\\\" class=\\\"profile-body-row-label-section-value\\\">When enabled, the system will automatically reset the alert counter after reaching the configured soft reset threshold, allowing continued monitoring without manual intervention.</div></div>{{#if this.isSoftReset}}<div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Soft Reset Occurrences<span id=\\\"allowed_soft_reset_occurrences_required_label_4\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"allowed_soft_reset_occurrences_input\\\" value={{this.softResetOccurrences}} min={{-1}} type=\\\"number\\\" oninput={{action \\\"updateSoftResetOccurrences\\\"}}></div><div style=\\\"font-size: x-small;margin:0px;\\\" class=\\\"profile-body-row-label-section-value\\\">Specifies how many times the alert engine may perform an automatic soft reset. Once this limit is reached, the alert will no longer auto-reset and must be manually acknowledged or resolved. A value of -1 represents unlimited soft reset occurrences.</div></div>{{/if}}<button type=\\\"button\\\" {{action \\\"createAlert\\\" on=\\\"click\\\"}} style=\\\"font-size: small;width: 100px;height: 30px;flex-shrink: 0;\\\" class=\\\"btn btn-primary\\\">Create Alert</button></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/create-alert-profile-subforms/dhq-flatline.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Description</div><div class=\\\"profile-form-description-label\\\">{{this.getTypeDescription}}</div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Visualizer</div><div class=\\\"profile-form-description-label\\\"><video src=\\\"/assets/videos/alert-types/No-Data-Demonstration.mp4\\\" loop=\\\"loop\\\" muted=\\\"muted\\\" autoplay=\\\"autoplay\\\" playsinline=\\\"playsinline\\\" disablepictureinpicture=\\\"true\\\" preload=\\\"metadata\\\" style=\\\"width:100%;max-width:350px;border:1px solid #ddd;border-radius:4px;pointer-events:none;\\\"></video></div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Parameters</div><div style=\\\"display:flex;flex-direction:row;\\\" class=\\\"profile-form-label-value-section\\\"><div style=\\\"margin-right:10px;\\\"><div class=\\\"profile-body-row-label-section-label\\\">Max Duration Value<span id=\\\"max_duration_value_required_label_3\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"max_duration_value_Textbox\\\" type=\\\"number\\\" min=0 oninput={{action \\\"updateMaxDurationValueInput\\\"}}></div></div><div><div class=\\\"profile-body-row-label-section-label\\\">Max Duration Unit<span id=\\\"max_duration_unit_required_label_3\\\" class=\\\"required-label\\\">*</span></div>{{time-units-group initValue=\\\"\\\" timeUnits=this.timeUnits onChange=(action \\\"updateTimeDropdownUnit\\\" \\\"max_duration_unit\\\")}}</div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Soft Reset</div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"can_soft_reset_checkbox\\\" checked={{this.isSoftReset}} type=\\\"checkbox\\\" oninput={{action \\\"updateSoftResetCheckbox\\\"}}></div><div style=\\\"font-size: x-small;margin:0px;\\\" class=\\\"profile-body-row-label-section-value\\\">When enabled, the system will automatically reset the alert counter after reaching the configured soft reset threshold, allowing continued monitoring without manual intervention.</div></div>{{#if this.isSoftReset}}<div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Soft Reset Occurrences<span id=\\\"allowed_soft_reset_occurrences_required_label_3\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"allowed_soft_reset_occurrences_input\\\" value={{this.softResetOccurrences}} min={{-1}} type=\\\"number\\\" oninput={{action \\\"updateSoftResetOccurrences\\\"}}></div><div style=\\\"font-size: x-small;margin:0px;\\\" class=\\\"profile-body-row-label-section-value\\\">Specifies how many times the alert engine may perform an automatic soft reset. Once this limit is reached, the alert will no longer auto-reset and must be manually acknowledged or resolved. A value of -1 represents unlimited soft reset occurrences.</div></div>{{/if}}<button type=\\\"button\\\" {{action \\\"createAlert\\\" on=\\\"click\\\"}} style=\\\"font-size: small;width: 100px;height: 30px;flex-shrink: 0;\\\" class=\\\"btn btn-primary\\\">Create Alert</button></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/create-alert-profile-subforms/dhq-no-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Description</div><div class=\\\"profile-form-description-label\\\">{{this.getTypeDescription}}</div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Visualizer</div><div class=\\\"profile-form-description-label\\\"><video src=\\\"/assets/videos/alert-types/Spike-Demonstration.mp4\\\" loop=\\\"loop\\\" muted=\\\"muted\\\" autoplay=\\\"autoplay\\\" playsinline=\\\"playsinline\\\" disablepictureinpicture=\\\"true\\\" preload=\\\"metadata\\\" style=\\\"width:100%;max-width:700px;border:1px solid #ddd;border-radius:4px;pointer-events:none;\\\"></video></div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Parameters</div><div style=\\\"display:flex;flex-direction:row;\\\" class=\\\"profile-form-label-value-section\\\"><div style=\\\"margin-right:10px;\\\"><div class=\\\"profile-body-row-label-section-label\\\">Spike Threshold Value<span id=\\\"spike_threshold_value_required_label_5\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"spike_threshold_value_Textbox\\\" type=\\\"number\\\" min=0 oninput={{action \\\"updateSpikeThresholdValueInput\\\"}}></div></div><div><div class=\\\"profile-body-row-label-section-label\\\">Spike Threshold Unit<span id=\\\"spike_threshold_unit_required_label_5\\\" class=\\\"required-label\\\">*</span></div>{{displacement-units-group style=\\\"font-size: large;\\\" initValue=\\\"\\\" dispUnits=this.dispUnits allowRAW=false allowBits=false onChange=(action \\\"updateDispDropdownUnit\\\" \\\"spike_threshold_unit\\\")}}</div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Soft Reset</div><input id=\\\"can_soft_reset_checkbox\\\" checked={{this.isSoftReset}} type=\\\"checkbox\\\" oninput={{action \\\"updateSoftResetCheckbox\\\"}}><div style=\\\"font-size: x-small;margin:0px;\\\" class=\\\"profile-body-row-label-section-value\\\">When enabled, the system will automatically reset the alert counter after reaching the configured soft reset threshold, allowing continued monitoring without manual intervention.</div></div>{{#if this.isSoftReset}}<div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Soft Reset Occurrences<span id=\\\"allowed_soft_reset_occurrences_required_label_5\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"allowed_soft_reset_occurrences_input\\\" value={{this.softResetOccurrences}} min={{-1}} type=\\\"number\\\" oninput={{action \\\"updateSoftResetOccurrences\\\"}}></div><div style=\\\"font-size: x-small;margin:0px;\\\" class=\\\"profile-body-row-label-section-value\\\">Specifies how many times the alert engine may perform an automatic soft reset. Once this limit is reached, the alert will no longer auto-reset and must be manually acknowledged or resolved. A value of -1 represents unlimited soft reset occurrences.</div></div>{{/if}}<button type=\\\"button\\\" {{action \\\"createAlert\\\" on=\\\"click\\\"}} style=\\\"font-size: small;width: 100px;height: 30px;flex-shrink: 0;\\\" class=\\\"btn btn-primary\\\">Create Alert</button></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/create-alert-profile-subforms/dhq-spike.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Description</div><div class=\\\"profile-form-description-label\\\">{{this.getTypeDescription}}</div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Visualizer</div><div class=\\\"profile-form-description-label\\\"><video src=\\\"/assets/videos/alert-types/Disp-Temp-Demonstration.mp4\\\" loop=\\\"loop\\\" muted=\\\"muted\\\" autoplay=\\\"autoplay\\\" playsinline=\\\"playsinline\\\" disablepictureinpicture=\\\"true\\\" preload=\\\"metadata\\\" style=\\\"width:100%;max-width:700px;border:1px solid #ddd;border-radius:4px;pointer-events:none;\\\"></video></div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Parameters</div><div style=\\\"display:flex;flex-direction:row;\\\" class=\\\"profile-form-label-value-section\\\"><div style=\\\"margin-right:10px;\\\"><div class=\\\"profile-body-row-label-section-label\\\">Period Window Value<span id=\\\"period_window_value_required_label_7\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"period_window_value_Textbox\\\" type=\\\"number\\\" min=0 oninput={{action \\\"updatePeriodWindowValueInput\\\"}}></div></div><div><div class=\\\"profile-body-row-label-section-label\\\">Period Window Unit<span id=\\\"period_window_unit_required_label_7\\\" class=\\\"required-label\\\">*</span></div>{{time-units-group style=\\\"font-size: large;\\\" initValue=\\\"\\\" timeUnits=this.timeUnits onChange=(action \\\"updateTimeDropdownUnit\\\" \\\"period_window_unit\\\")}}</div></div><div style=\\\"display:flex;flex-direction:row;\\\" class=\\\"profile-form-label-value-section\\\"><div style=\\\"margin-right:10px;\\\"><div class=\\\"profile-body-row-label-section-label\\\">Disp. Threshold Value<span id=\\\"disp_threshold_value_required_label_7\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"disp_threshold_value_Textbox\\\" type=\\\"number\\\" min=0 oninput={{action \\\"updateDispThresholdValueInput\\\"}}></div></div><div><div class=\\\"profile-body-row-label-section-label\\\">Disp. Threshold Unit<span id=\\\"disp_threshold_unit_required_label_7\\\" class=\\\"required-label\\\">*</span></div>{{displacement-units-group style=\\\"font-size: large;\\\" initValue=\\\"\\\" dispUnits=this.dispUnits allowRAW=false allowBits=false onChange=(action \\\"updateDispDropdownUnit\\\" \\\"disp_threshold_unit\\\")}}</div></div><div style=\\\"display:flex;flex-direction:row;\\\" class=\\\"profile-form-label-value-section\\\"><div style=\\\"margin-right:10px;\\\"><div class=\\\"profile-body-row-label-section-label\\\">Temp. Threshold Value<span id=\\\"temp_threshold_value_required_label_7\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"temp_threshold_value_Textbox\\\" type=\\\"number\\\" min=0 oninput={{action \\\"updateTempThresholdValueInput\\\"}}></div></div><div><div class=\\\"profile-body-row-label-section-label\\\">Temp. Threshold Unit<span id=\\\"temp_threshold_unit_required_label_7\\\" class=\\\"required-label\\\">*</span></div>{{temperature-units-group style=\\\"font-size: large;\\\" initValue=\\\"\\\" tempUnits=this.tempUnits onChange=(action \\\"updateTempDropdownUnit\\\" \\\"temp_threshold_unit\\\")}}</div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Allowed Occurrences<span id=\\\"allowed_occurrences_required_label_7\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"allowed_occurrences_Textbox\\\" type=\\\"number\\\" min=0 oninput={{action \\\"updateOccurrencesValueInput\\\"}}></div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Soft Reset</div><input id=\\\"can_soft_reset_checkbox\\\" checked={{this.isSoftReset}} type=\\\"checkbox\\\" oninput={{action \\\"updateSoftResetCheckbox\\\"}}><div style=\\\"font-size: x-small;margin:0px;\\\" class=\\\"profile-body-row-label-section-value\\\">When enabled, the system will automatically reset the alert counter after reaching the configured soft reset threshold, allowing continued monitoring without manual intervention.</div></div>{{#if this.isSoftReset}}<div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Soft Reset Occurrences<span id=\\\"allowed_soft_reset_occurrences_required_label_7\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"allowed_soft_reset_occurrences_input\\\" value={{this.softResetOccurrences}} min={{-1}} type=\\\"number\\\" oninput={{action \\\"updateSoftResetOccurrences\\\"}}></div><div style=\\\"font-size: x-small;margin:0px;\\\" class=\\\"profile-body-row-label-section-value\\\">Specifies how many times the alert engine may perform an automatic soft reset. Once this limit is reached, the alert will no longer auto-reset and must be manually acknowledged or resolved. A value of -1 represents unlimited soft reset occurrences.</div></div>{{/if}}<button type=\\\"button\\\" {{action \\\"createAlert\\\" on=\\\"click\\\"}} style=\\\"font-size: small;width: 100px;height: 30px;flex-shrink: 0;\\\" class=\\\"btn btn-primary\\\">Create Alert</button></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/create-alert-profile-subforms/disp-temp-correlation.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Description</div><div class=\\\"profile-form-description-label\\\">{{this.getTypeDescription}}</div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Visualizer</div><div class=\\\"profile-form-description-label\\\"><video src=\\\"/assets/videos/alert-types/OOR-Arb-Demonstration.mp4\\\" loop=\\\"loop\\\" muted=\\\"muted\\\" autoplay=\\\"autoplay\\\" playsinline=\\\"playsinline\\\" disablepictureinpicture=\\\"true\\\" preload=\\\"metadata\\\" style=\\\"width:100%;max-width:700px;border:1px solid #ddd;border-radius:4px;pointer-events:none;\\\"></video></div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Parameters</div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Comparison Operator<span id=\\\"operator_required_label_1\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><div style=\\\"width: 10px\\\"></div>{{radio-buttons id=\\\"gt\\\" setValue=(action \\'toggleOperatorRadioGroup\\' \\'gt\\') type=\\'>\\'}}<div style=\\\"width: 10px\\\"></div>{{radio-buttons id=\\\"gte\\\" setValue=(action \\'toggleOperatorRadioGroup\\' \\'gte\\') type=\\'> or =\\'}}<div style=\\\"width: 10px\\\"></div>{{radio-buttons id=\\\"lt\\\" setValue=(action \\'toggleOperatorRadioGroup\\' \\'lt\\') type=\\'<\\'}}<div style=\\\"width: 10px\\\"></div>{{radio-buttons id=\\\"lte\\\" setValue=(action \\'toggleOperatorRadioGroup\\' \\'lte\\') type=\\'< or =\\'}}</div></div><div style=\\\"display:flex;flex-direction:row;\\\" class=\\\"profile-form-label-value-section\\\"><div style=\\\"margin-right:10px;\\\"><div class=\\\"profile-body-row-label-section-label\\\">Threshold Value<span id=\\\"threshold_value_required_label_1\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"threshold_value_Textbox\\\" type=\\\"number\\\" min=0 oninput={{action \\\"updateThresholdValueInput\\\"}}></div></div><div><div class=\\\"profile-body-row-label-section-label\\\">Threshold Unit<span id=\\\"threshold_unit_required_label_1\\\" class=\\\"required-label\\\">*</span></div>{{displacement-units-group initValue=\\\"\\\" dispUnits=this.dispUnits allowRAW=false allowBits=false onChange=(action \\\"updateDispDropdownUnit\\\" \\\"threshold_unit\\\")}}</div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Allowed Occurrences<span id=\\\"allowed_occurrences_required_label_1\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"allowed_occurrences_Textbox\\\" type=\\\"number\\\" min=0 oninput={{action \\\"updateOccurrencesValueInput\\\"}}></div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Soft Reset</div><input id=\\\"can_soft_reset_checkbox\\\" checked={{this.isSoftReset}} type=\\\"checkbox\\\" oninput={{action \\\"updateSoftResetCheckbox\\\"}}><div style=\\\"font-size: x-small;margin:0px;\\\" class=\\\"profile-body-row-label-section-value\\\">When enabled, the system will automatically reset the alert counter after reaching the configured soft reset threshold, allowing continued monitoring without manual intervention.</div></div>{{#if this.isSoftReset}}<div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Soft Reset Occurrences<span id=\\\"allowed_soft_reset_occurrences_required_label_1\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"allowed_soft_reset_occurrences_input\\\" value={{this.softResetOccurrences}} min={{-1}} type=\\\"number\\\" oninput={{action \\\"updateSoftResetOccurrences\\\"}}></div><div style=\\\"font-size: x-small;margin:0px;\\\" class=\\\"profile-body-row-label-section-value\\\">Specifies how many times the alert engine may perform an automatic soft reset. Once this limit is reached, the alert will no longer auto-reset and must be manually acknowledged or resolved. A value of -1 represents unlimited soft reset occurrences.</div></div>{{/if}}<button type=\\\"button\\\" {{action \\\"createAlert\\\" on=\\\"click\\\"}} style=\\\"font-size: small;width: 100px;height: 30px;flex-shrink: 0;\\\" class=\\\"btn btn-primary\\\">Create Alert</button></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/create-alert-profile-subforms/oor-arbitrary.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Description</div><div class=\\\"profile-form-description-label\\\">{{this.getTypeDescription}}</div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Visualizer</div><div class=\\\"profile-form-description-label\\\"><video src=\\\"/assets/videos/alert-types/OOR-Ref-Demonstration.mp4\\\" loop=\\\"loop\\\" muted=\\\"muted\\\" autoplay=\\\"autoplay\\\" playsinline=\\\"playsinline\\\" disablepictureinpicture=\\\"true\\\" preload=\\\"metadata\\\" style=\\\"width:100%;max-width:350px;border:1px solid #ddd;border-radius:4px;pointer-events:none;\\\"></video></div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Parameters</div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Reference Reading<span id=\\\"reference_reading_id_required_label_2\\\" class=\\\"required-label\\\">*</span></div>{{influx-readings-with-instrument-id-with-datetime selectedDatetime=this.getSelectedDatetime instrumentID=this.selectedInstrument.id onSelectedReadingObject=(action \\\"onSelectedReadingObject\\\")}}</div><div style=\\\"display:flex;flex-direction:row;\\\" class=\\\"profile-form-label-value-section\\\"><div style=\\\"margin-right:10px;\\\"><div class=\\\"profile-body-row-label-section-label\\\">∆ Value<span id=\\\"delta_value_required_label_2\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"delta_value_Textbox\\\" type=\\\"number\\\" min=0 oninput={{action \\\"updateDeltaValueInput\\\"}}></div></div><div><div class=\\\"profile-body-row-label-section-label\\\">∆ Unit<span id=\\\"delta_unit_required_label_2\\\" class=\\\"required-label\\\">*</span></div>{{displacement-units-group style=\\\"font-size: large;\\\" initValue=\\\"\\\" dispUnits=this.dispUnits allowRAW=false allowBits=false onChange=(action \\\"updateDispDropdownUnit\\\" \\\"delta_unit\\\")}}</div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Allowed Occurrences<span id=\\\"allowed_occurrences_required_label_2\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"allowed_occurrences_Textbox\\\" type=\\\"number\\\" min=0 oninput={{action \\\"updateOccurrencesValueInput\\\"}}></div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Soft Reset</div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"can_soft_reset_checkbox\\\" checked={{this.isSoftReset}} type=\\\"checkbox\\\" oninput={{action \\\"updateSoftResetCheckbox\\\"}}></div><div style=\\\"font-size: x-small;margin:0px;\\\" class=\\\"profile-body-row-label-section-value\\\">When enabled, the system will automatically reset the alert counter after reaching the configured soft reset threshold, allowing continued monitoring without manual intervention.</div></div>{{#if this.isSoftReset}}<div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Soft Reset Occurrences<span id=\\\"allowed_soft_reset_occurrences_required_label_2\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"allowed_soft_reset_occurrences_input\\\" value={{this.softResetOccurrences}} min={{-1}} type=\\\"number\\\" oninput={{action \\\"updateSoftResetOccurrences\\\"}}></div><div style=\\\"font-size: x-small;margin:0px;\\\" class=\\\"profile-body-row-label-section-value\\\">Specifies how many times the alert engine may perform an automatic soft reset. Once this limit is reached, the alert will no longer auto-reset and must be manually acknowledged or resolved. A value of -1 represents unlimited soft reset occurrences.</div></div>{{/if}}<button type=\\\"button\\\" {{action \\\"createAlert\\\" on=\\\"click\\\"}} style=\\\"font-size: small;width: 100px;height: 30px;flex-shrink: 0;\\\" class=\\\"btn btn-primary\\\">Create Alert</button></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/create-alert-profile-subforms/oor-reference.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Description</div><div class=\\\"profile-form-description-label\\\">{{this.getTypeDescription}}</div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Visualizer</div><div class=\\\"profile-form-description-label\\\"><video src=\\\"/assets/videos/alert-types/ROC-Rolling-Demonstration.mp4\\\" loop=\\\"loop\\\" muted=\\\"muted\\\" autoplay=\\\"autoplay\\\" playsinline=\\\"playsinline\\\" disablepictureinpicture=\\\"true\\\" preload=\\\"metadata\\\" style=\\\"width:100%;max-width:350px;border:1px solid #ddd;border-radius:4px;pointer-events:none;\\\"></video></div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Parameters</div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Rate of Change Threshold Value<span id=\\\"roc_threshold_value_required_label_6\\\" class=\\\"required-label\\\">*</span></div><input id=\\\"roc_threshold_value_Textbox\\\" type=\\\"number\\\" min=0 oninput={{action \\\"updateROCThresholdValueInput\\\"}}></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Rate of Change Threshold Unit<span id=\\\"roc_threshold_unit_required_label_6\\\" class=\\\"required-label\\\">*</span></div>{{rate-velocity-units-group initValue=this.initRateValue dispUnits=this.dispUnits timeUnits=this.timeUnits allowRAW=false allowBits=false onChange=(action \\\"updateRateDropdownUnit\\\")}}</div><div style=\\\"display:flex;flex-direction:row;\\\" class=\\\"profile-form-label-value-section\\\"><div style=\\\"margin-right:10px;\\\"><div class=\\\"profile-body-row-label-section-label\\\">Period Window Value<span id=\\\"period_window_value_required_label_6\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"period_window_value_Textbox\\\" type=\\\"number\\\" min=0 oninput={{action \\\"updatePeriodWindowValueInput\\\"}}></div></div><div><div class=\\\"profile-body-row-label-section-label\\\">Period Window Unit<span id=\\\"period_window_unit_required_label_6\\\" class=\\\"required-label\\\">*</span></div>{{time-units-group style=\\\"font-size: large;\\\" initValue=this.initTimePartRateValue timeUnits=this.timeUnits onChange=(action \\\"updateTimeDropdownUnit\\\" \\\"period_window_unit\\\")}}</div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Allowed Occurrences<span id=\\\"allowed_occurrences_required_label_6\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"allowed_occurrences_Textbox\\\" type=\\\"number\\\" min=0 oninput={{action \\\"updateOccurrencesValueInput\\\"}}></div></div><div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Soft Reset</div><input id=\\\"can_soft_reset_checkbox\\\" checked={{this.isSoftReset}} type=\\\"checkbox\\\" oninput={{action \\\"updateSoftResetCheckbox\\\"}}><div style=\\\"font-size: x-small;margin:0px;\\\" class=\\\"profile-body-row-label-section-value\\\">When enabled, the system will automatically reset the alert counter after reaching the configured soft reset threshold, allowing continued monitoring without manual intervention.</div></div>{{#if this.isSoftReset}}<div class=\\\"profile-form-label-value-section\\\"><div class=\\\"profile-body-row-label-section-label\\\">Soft Reset Occurrences<span id=\\\"allowed_soft_reset_occurrences_required_label_6\\\" class=\\\"required-label\\\">*</span></div><div style=\\\"margin: 0px\\\" class=\\\"profile-body-row-label-section-value\\\"><input id=\\\"allowed_soft_reset_occurrences_input\\\" value={{this.softResetOccurrences}} min={{-1}} type=\\\"number\\\" oninput={{action \\\"updateSoftResetOccurrences\\\"}}></div><div style=\\\"font-size: x-small;margin:0px;\\\" class=\\\"profile-body-row-label-section-value\\\">Specifies how many times the alert engine may perform an automatic soft reset. Once this limit is reached, the alert will no longer auto-reset and must be manually acknowledged or resolved. A value of -1 represents unlimited soft reset occurrences.</div></div>{{/if}}<button type=\\\"button\\\" {{action \\\"createAlert\\\" on=\\\"click\\\"}} style=\\\"font-size: small;width: 100px;height: 30px;flex-shrink: 0;\\\" class=\\\"btn btn-primary\\\">Create Alert</button></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/create-alert-profile-subforms/roc-rolling.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New blast event</td><td></td><td></td><td></td><th class=\\\"add-new-item\\\"><span {{action \\'cancelNew\\' this.blastEvents on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\'saveNew\\' this.blastEvents on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></th></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"2\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"timestamp\\\" class=\\\"col-12 col-form-label bold\\\">Timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.timestamp) value=\\\"target.value\\\"}} id=\\\"timestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newBlastEventObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newBlastEventObject.location}} oninput={{action (mut this.newBlastEventObject.location) value=\\\"target.value\\\"}} id=\\\"newBlastEventObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newBlastEventObjectCoordinatesX\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.east}} oninput={{action (mut this.east) value=\\\"target.value\\\"}} id=\\\"newBlastEventObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.north}} oninput={{action (mut this.north) value=\\\"target.value\\\"}} id=\\\"newBlastEventObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.depth}} oninput={{action (mut this.depth) value=\\\"target.value\\\"}} id=\\\"newBlastEventObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newBlastEventObjectComments\\\" class=\\\"col-12 col-form-label\\\">Comments:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newBlastEventObject.comments}} oninput={{action (mut this.newBlastEventObject.comments) value=\\\"target.value\\\"}} id=\\\"newBlastEventObjectComments\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr><tr><td><label for=\\\"newBlastEventObjectIsVisible\\\" class=\\\"col-12 col-form-label\\\">Is visible:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><label class=\\\"custom-control custom-checkbox empty-checkbox-title mr-sm-2\\\"><input type=\\\"checkbox\\\" name=\\\"isVisible\\\" checked {{action (mut this.newBlastEventObject.isVisible) value=\\\"target.value\\\" on=\\\"change\\\"}} id=\\\"newBlastEventObjectIsVisible\\\" class=\\\"custom-control-input\\\"><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\"></span></label></div></div></td></tr><tr><td><label for=\\\"newBlastEventObjectDelay\\\" class=\\\"col-12 col-form-label\\\">Delay:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"time\\\" step=\\\"1\\\" value={{this.newBlastEventObject.delay}} oninput={{action (mut this.newBlastEventObject.delay) value=\\\"target.value\\\"}} id=\\\"delay\\\" class=\\\"form-control datepicker-input\\\"></div></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select onchange={{action \\'setLevel\\' value=\\\"target.value\\\"}} id=\\\"newBlastEventObject.level\\\" class=\\\"form-control\\\"><option value=\\\"-1\\\" default selected disabled>Select a Level.</option>{{#each this.levelLookupList as |levelOption|}}<option value=\\\"{{levelOption.id}}\\\">{{levelOption.value}}</option>{{/each}}</select></div></div></td></tr><tr><td><label for=\\\"newInstrumentObject.project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select onchange={{action \\'setProject\\' value=\\\"target.value\\\"}} id=\\\"newBlastEventObject.project\\\" class=\\\"form-control\\\"><option disabled selected value=\\\"\\\">Please choose a Project.</option><option value=\\\"-1\\\" default selected disabled>Select a project.</option>{{#each this.projectLookupList as |projectOption|}}<option value=\\\"{{projectOption.id}}\\\">{{projectOption.value}}</option>{{/each}}</select></div></div></td></tr><tr><td><label for=\\\"newBlastEventObjectStope\\\" class=\\\"col-12 col-form-label\\\">Stope:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newBlastEventObject.stope}} oninput={{action (mut this.newBlastEventObject.stope) value=\\\"target.value\\\"}} id=\\\"newBlastEventObjectStope\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newBlastEventObjectTonnes\\\" class=\\\"col-12 col-form-label bold\\\">Tonnes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newBlastEventObject.tonnes}} oninput={{action (mut this.newBlastEventObject.tonnes) value=\\\"target.value\\\"}} id=\\\"newBlastEventObjectTonnes\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newBlastEventObjectBlastType\\\" class=\\\"col-12 col-form-label bold\\\">Blast type:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"newBlastEventObjectBlastType\\\" onchange={{action (mut this.blastType) value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each this.selectOptionsArray as |selectOption|}}<option selected={{is-equal selectOption.key this.blastType}} value=\\\"{{selectOption.key}}\\\">{{selectOption.value}}</option>{{/each}}</select></div></div></td></tr></tbody></table></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/create-new-blast-event-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New seismic event</td><td></td><td></td><td></td><th class=\\\"add-new-item\\\"><span {{action \\'cancelNew\\' this.seismicEvents on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\'saveNew\\' this.seismicEvents on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></th></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"2\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"timestamp\\\" class=\\\"col-12 col-form-label bold\\\">Timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.timestamp) value=\\\"target.value\\\"}} id=\\\"timestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newSeismicEventObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newSeismicEventObject.location}} oninput={{action (mut this.newSeismicEventObject.location) value=\\\"target.value\\\"}} id=\\\"newSeismicEventObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newSeismicEventObjectCoordinatesX\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.east}} oninput={{action (mut this.east) value=\\\"target.value\\\"}} id=\\\"newSeismicEventObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.north}} oninput={{action (mut this.north) value=\\\"target.value\\\"}} id=\\\"newSeismicEventObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.depth}} oninput={{action (mut this.depth) value=\\\"target.value\\\"}} id=\\\"newSeismicEventObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newSeismicEventObjectComments\\\" class=\\\"col-12 col-form-label\\\">Comments:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newSeismicEventObject.comments}} oninput={{action (mut this.newSeismicEventObject.comments) value=\\\"target.value\\\"}} id=\\\"newSeismicEventObjectComments\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr><tr><td><label for=\\\"newSeismicEventObjectIsVisible\\\" class=\\\"col-12 col-form-label\\\">Is visible:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><label class=\\\"custom-control custom-checkbox empty-checkbox-title mr-sm-2\\\"><input type=\\\"checkbox\\\" name={{field}} checked {{action (mut this.newSeismicEventObject.isVisible) value=\\\"target.value\\\" on=\\\"change\\\"}} id=\\\"newSeismicEventObjectIsVisible\\\" class=\\\"custom-control-input\\\"><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\"></span></label></div></div></td></tr><tr><td><label for=\\\"newSeismicEventObjectMomentMagnitude\\\" class=\\\"col-12 col-form-label bold\\\">Moment magnitude:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newSeismicEventObject.momentMagnitude}} oninput={{action (mut this.newSeismicEventObject.momentMagnitude) value=\\\"target.value\\\"}} id=\\\"newSeismicEventObjectMomentMagnitude\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newSeismicEventObjectSeismicMoment\\\" class=\\\"col-12 col-form-label\\\">Seismic moment:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newSeismicEventObject.seismicMoment}} oninput={{action (mut this.newSeismicEventObject.seismicMoment) value=\\\"target.value\\\"}} id=\\\"newSeismicEventObjectSeismicMoment\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newSeismicEventObjectSourceRadius\\\" class=\\\"col-12 col-form-label\\\">Source radius:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newSeismicEventObject.sourceRadius}} oninput={{action (mut this.newSeismicEventObject.sourceRadius) value=\\\"target.value\\\"}} id=\\\"newSeismicEventObjectSourceRadius\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newSeismicEventObjectPeakParticleVelocity\\\" class=\\\"col-12 col-form-label\\\">Peak particle velocity:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newSeismicEventObject.peakParticleVelocity}} oninput={{action (mut this.newSeismicEventObject.peakParticleVelocity) value=\\\"target.value\\\"}} id=\\\"newSeismicEventObjectPeakParticleVelocity\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newSeismicEventObjectPeakParticleAcceleration\\\" class=\\\"col-12 col-form-label\\\">Peak particle acceleration:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newSeismicEventObject.peakParticleAcceleration}} oninput={{action (mut this.newSeismicEventObject.peakParticleAcceleration) value=\\\"target.value\\\"}} id=\\\"newSeismicEventObjectPeakParticleAcceleration\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newSeismicEventObjectEnergy\\\" class=\\\"col-12 col-form-label\\\">Energy:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newSeismicEventObject.energy}} oninput={{action (mut this.newSeismicEventObject.energy) value=\\\"target.value\\\"}} id=\\\"newSeismicEventObjectEnergy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newSeismicEventObjectSeismicType\\\" class=\\\"col-12 col-form-label bold\\\">Seismic type:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"newSeismicEventObjectSeismicType\\\" onchange={{action (mut this.seismicType) value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each this.selectOptionsArray as |selectOption|}}<option selected={{is-equal selectOption.key this.seismicType}} value=\\\"{{selectOption.key}}\\\">{{selectOption.value}}</option>{{/each}}</select></div></div></td></tr></tbody></table></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/create-new-seismic-event-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleExportDataForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td><div style=\\\"height:20px;display:flex;flex-direction:row;padding:0\\\"><label>Export instrument data to file</label><div style=\\\"margin-left:5px;width:20px\\\"><BsTooltip @title=\\\"Advanced Search settings affect export data\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"exclamation-circle\\\" /></div></div></td><td></td><td></td><td></td><th class=\\\"add-new-item\\\"><span {{action \\\"cancel\\\" on=\\\"click\\\"}} class=\\\"cancel-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span></th></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"1\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"file_format\\\" class=\\\"col-12 col-form-label bold\\\">File format:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"file_format\\\" onchange={{action (mut this.fileFormat) value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each this.fileFormats as |fileFormat|}}<option selected={{is-equal fileFormat.key this.fileFormat}} value=\\\"{{fileFormat.key}}\\\">{{fileFormat.value}}</option>{{/each}}</select></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newBlastEventObjectDelay\\\" class=\\\"col-12 col-form-label\\\">File link:</label></td><td><p class=\\\"mb-0\\\"><a {{action \\\"downloadFile\\\" on=\\\"click\\\"}} style=\\\"cursor: pointer\\\" class=\\\"exportDataFileLink\\\">{{this.fileName}}</a></p></td></tr></tbody></table></td><td width=\\\"50px\\\" colspan=\\\"1\\\">{{#if this.loading}}<div class=\\\"pulse_loader\\\"></div>{{/if}}</td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/data-export-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleExportDataForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>Export gateway data to file</td><td></td><td></td><td></td><th class=\\\"add-new-item\\\"><span {{action \\\"cancel\\\" on=\\\"click\\\"}} class=\\\"cancel-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span></th></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"1\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"file_format\\\" class=\\\"col-12 col-form-label bold\\\">File format:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"file_format\\\" onchange={{action (mut this.fileFormat) value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each this.fileFormats as |fileFormat|}}<option selected={{is-equal fileFormat.key this.fileFormat}} value=\\\"{{fileFormat.key}}\\\">{{fileFormat.value}}</option>{{/each}}</select></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newBlastEventObjectDelay\\\" class=\\\"col-12 col-form-label\\\">File link:</label></td><td><p class=\\\"mb-0\\\"><a {{action \\\"downloadFile\\\" on=\\\"click\\\"}} style=\\\"cursor: pointer\\\" class=\\\"exportDataFileLink\\\">{{this.fileName}}</a></p></td></tr></tbody></table></td><td width=\\\"50px\\\" colspan=\\\"1\\\">{{#if this.loading}}<div class=\\\"pulse_loader\\\"></div>{{/if}}</td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/data-export-gateway-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td colspan=\\\"2\\\">Import seismic data from file</td><th colspan=\\\"4\\\" class=\\\"add-new-item\\\"><span {{action \\'cancelImport\\' on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\'importFile\\' on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Import</span></th></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"2\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"file_format\\\" class=\\\"col-12 col-form-label bold\\\">File format:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"file_format\\\" onchange={{action (mut this.fileFormat) value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each this.fileFormats as |fileFormatOption|}}<option selected={{is-equal fileFormatOption.key this.fileFormat}} value=\\\"{{fileFormatOption.key}}\\\">{{fileFormatOption.value}}</option>{{/each}}</select></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newBlastEventObjectDelay\\\" class=\\\"col-12 col-form-label\\\">File:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{file-upload-seis isSubmitting=this.isSubmitting fileSettings=this.fileSettings notSubmitting=(action \\\"notSubmitting\\\") errorHappened=(action \\\"errorHappened\\\")}}</div></div></td></tr></tbody></table></td><td width=\\\"50px\\\" colspan=\\\"1\\\">{{#if this.loading}}<div class=\\\"pulse_loader\\\"></div>{{/if}}</td></tr>{{#if this.isVisibleError}}<tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details error\\\"><label for=\\\"error_message\\\" class=\\\"col-12 col-form-label\\\">There was an error importing the instrument data.</label></td></tr>{{/if}}</tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/data-import-form-seis.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleImportDataForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td colspan=\\\"4\\\">Import instrument data from file</td><th colspan=\\\"6\\\" class=\\\"add-new-item\\\"><span {{action \\\"cancelImport\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"importFile\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Import</span></th></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"2\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"file_format\\\" class=\\\"col-12 col-form-label bold\\\">File format:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"file_format\\\" onchange={{action (mut this.fileFormat) value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each this.fileFormats as |fileFormat|}}<option selected={{is-equal fileFormat.key this.fileFormat}} value=\\\"{{fileFormat.key}}\\\">{{fileFormat.value}}</option>{{/each}}</select></div></div></td></tr></tbody></table></td><td colspan=\\\"2\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"date_format\\\" class=\\\"col-12 col-form-label bold\\\">Date format:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"date_format\\\" onchange={{action (mut this.dateFormat) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"\\\">Select Date Format</option>{{#each this.dateFormats as |dateFormat|}}<option selected={{is-equal dateFormat.key this.dateFormat}} value=\\\"{{dateFormat.key}}\\\">{{dateFormat.value}}</option>{{/each}}</select></div></div></td></tr></tbody></table></td>{{#if this.showIsRAW}}<td colspan=\\\"2\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><BsTooltip @title={{this.getUnitInstrComment}} @placement=\\\"top\\\" /><label class=\\\"col-12 col-form-label\\\">is RAW:</label></td><td><label class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"isRAW\\\" checked=this.isRAW class=\\\"custom-control-input\\\"}}</label></td></tr></tbody></table></td>{{/if}}<td colspan=\\\"2\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newBlastEventObjectDelay\\\" class=\\\"col-12 col-form-label\\\">File:</label></td><td class=\\\"input\\\"><div class=\\\"form-group rowc\\\"><div class=\\\"col-12\\\">{{file-upload isSubmitting=this.isSubmitting fileSettings=this.fileSettings notSubmitting=\\\"notSubmitting\\\" errorHappened=\\\"errorHappened\\\"}}</div></div></td></tr></tbody></table></td><td width=\\\"50px\\\" colspan=\\\"1\\\">{{#if this.loading}}<div class=\\\"pulse_loader\\\"></div>{{/if}}</td></tr>{{#if this.isVisibleError}}<tr class=\\\"details\\\"><td colspan=\\\"8\\\" class=\\\"td_details error\\\"><label for=\\\"error_message\\\" class=\\\"col-12 col-form-label\\\">There was an error importing the instrument data.</label></td></tr><tr class=\\\"details\\\"><td colspan=\\\"8\\\" class=\\\"td_details error\\\"><label for=\\\"error_message\\\" class=\\\"col-12 col-form-label\\\">{{this.error}}</label></td></tr>{{/if}}</tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/data-import-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleImportDataForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td colspan=\\\"2\\\">Import gateway data from file</td><th colspan=\\\"6\\\" class=\\\"add-new-item\\\"><span {{action \\\"cancelImport\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"importFile\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Import</span></th></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"2\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"file_format\\\" class=\\\"col-12 col-form-label bold\\\">File format:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"file_format\\\" onchange={{action (mut this.fileFormat) value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each this.fileFormats as |fileFormat|}}<option selected={{is-equal fileFormat.key this.fileFormat}} value=\\\"{{fileFormat.key}}\\\">{{fileFormat.value}}</option>{{/each}}</select></div></div></td></tr></tbody></table></td><td colspan=\\\"2\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"date_format\\\" class=\\\"col-12 col-form-label bold\\\">Date format:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"date_format\\\" onchange={{action (mut this.dateFormat) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"\\\">Select Date Format</option>{{#each this.dateFormats as |dateFormat|}}<option selected={{is-equal dateFormat.key this.dateFormat}} value=\\\"{{dateFormat.key}}\\\">{{dateFormat.value}}</option>{{/each}}</select></div></div></td></tr></tbody></table></td><td colspan=\\\"2\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newBlastEventObjectDelay\\\" class=\\\"col-12 col-form-label\\\">File:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{file-gateway-upload isSubmitting=this.isSubmitting fileSettings=this.fileSettings notSubmitting=(action \\\"notSubmitting\\\") errorHappened=(action \\\"errorHappened\\\")}}</div></div></td></tr></tbody></table></td><td width=\\\"50px\\\" colspan=\\\"1\\\">{{#if this.loading}}<div class=\\\"pulse_loader\\\"></div>{{/if}}</td></tr>{{#if this.isVisibleError}}<tr class=\\\"details\\\"><td colspan=\\\"8\\\" class=\\\"td_details error\\\"><label for=\\\"error_message\\\" class=\\\"col-12 col-form-label\\\">There was an error importing the gateway data.</label></td></tr><tr class=\\\"details\\\"><td colspan=\\\"8\\\" class=\\\"td_details error\\\"><label for=\\\"error_message\\\" class=\\\"col-12 col-form-label\\\">{{this.error}}</label></td></tr>{{/if}}</tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/data-import-gateway-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isOpen}}<div style=\\\"position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.45);z-index:1050;display:flex;align-items:center;justify-content:center;\\\" class=\\\"data-row-modal-backdrop\\\"><div style=\\\"background:#fff;border-radius:6px;width:min(560px, 92vw);max-height:88vh;display:flex;flex-direction:column;box-shadow:0 8px 24px rgba(0,0,0,0.2);\\\" class=\\\"data-row-modal-window\\\"><div style=\\\"padding:18px 22px;border-bottom:1px solid #e5e5e5;\\\"><h4 style=\\\"margin:0;font-size:1.25rem;font-weight:600;\\\">{{this.title}}</h4></div><div style=\\\"padding:18px 22px;overflow-y:auto;flex:1 1 auto;\\\">{{#each this.fieldsWithDomIds as |field|}}<div style=\\\"display:flex;align-items:center;margin-bottom:10px;\\\" class=\\\"form-group\\\"><label style=\\\"min-width:120px;margin:0 12px 0 0;font-weight:500;\\\">{{field.label}}:</label><input id={{field.domId}} type={{field.type}} value={{field.value}} style=\\\"flex:1;\\\" class=\\\"form-control\\\"></div>{{/each}}</div><div style=\\\"padding:14px 22px;border-top:1px solid #e5e5e5;display:flex;justify-content:flex-end;\\\"><button type=\\\"button\\\" {{action \\\"cancel\\\"  on=\\\"click\\\"}} style=\\\"margin-right:10px;\\\" class=\\\"btn btn-secondary\\\">Cancel</button><button type=\\\"button\\\" {{action \\\"save\\\"  on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Save</button></div></div></div>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/data-row-modal.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/dconv/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@projectLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'newInstrumentObjectProject\\' onSelectionChange=(action \\'setProject\\' value=\\\"target.value\\\") inputFieldId=\\'project\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.location}} oninput={{action (mut this.newInstrumentObject.location) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCoordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.east}} oninput={{action (mut this.newInstrumentObject.east) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.north}} oninput={{action (mut this.newInstrumentObject.north) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.depth}} oninput={{action (mut this.newInstrumentObject.depth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><br /></td></tr><tr><td><label for=\\\"newInstrumentObjectAzimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.azimuth}} oninput={{action (mut this.newInstrumentObject.azimuth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAzimuth\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectDip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.dip}} oninput={{action (mut this.newInstrumentObject.dip) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDip\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@levelLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'newInstrumentObjectLevel\\' onSelectionChange=(action \\'setLevel\\' value=\\\"target.value\\\") inputFieldId=\\'level\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectBorehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.borehole}} oninput={{action (mut this.newInstrumentObject.borehole) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectBorehole\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectStrokeLength\\\" class=\\\"col-12 col-form-label bold\\\">Stroke Length (mm):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.strokeLength}} oninput={{action (mut this.newInstrumentObject.strokeLength) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectStrokeLength\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><br /></td></tr><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.installedBy}} oninput={{action (mut this.newInstrumentObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.purpose}} oninput={{action (mut this.newInstrumentObject.purpose) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newInstrumentObject.notes}} oninput={{action (mut this.newInstrumentObject.notes) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/dconv/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{this.instrumentAnchors.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each this.instrumentAnchors as |anchor|}}<td>{{anchor}}</td>{{/each}}<td>Temperature</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action \\\"setNewTimestampValue\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action \\\"setNewDisplacementValue\\\" key}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} oninput={{action \\\"setTemperatureValue\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/dconv/create-new-raw-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"width: 100%;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:10px\\\"><div style=\\\"margin-right:10px\\\"><div class=\\\"inst-buttons\\\"><span {{action \\\"viewData\\\" @instrument.id }} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div></div><div style=\\\"margin-right:10px\\\">{{#if @hasGraphs}}<div class=\\\"inst-buttons\\\"><span {{action \\\"tGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div><div style=\\\"\\\">{{#if @hasGraphs}}{{#if (gt @instrument.channelsNum 2)}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"sGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-area\\\" /> Spatial Graph</span></div>{{/if}}{{/if}}</div></div><div style=\\\"text-decoration:underline;margin-bottom:10px; cursor:pointer;\\\" onClick={{action \\\"cycleAlertsListVisibility\\\"}}><h5>Alerts:</h5></div>{{#if this.isAlertsListVisible}}{{#if this.licenceIsValid}}<div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content: space-between;\\\"><div class=\\\"action-bar-section\\\"><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"table-legend\\\"}} class=\\\"action-bar-head-body\\\">Table Legend</div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"actions\\\"}} class=\\\"action-bar-head-body\\\">Actions</div></div></div>{{/if}}<div style=\\\"margin:15px\\\">{{#if (is-equal this.activeActionTab \\\"table-legend\\\")}}{{table-legend-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"actions\\\")}}{{actions-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"batch-actions\\\")}}{{batch-actions-alerts batchSelectedAlertsID=this.batchSelectedAlertsID alerts=@model.alerts isShowBatchConfirmationModal=this.isShowBatchConfirmationModal typeBatch=this.typeBatch batchWarningMessage=this.batchWarningMessage}}{{/if}}</div><div style=\\\"margin-bottom:10px\\\">{{alerts-list licenceIsValid=this.licenceIsValid allowBatchSelect=false batchSelectedAlertsID=this.batchSelectedAlertsID alerts=this.alertsList globalDatetimeFormat=@globalDatetimeFormat ordering=this.ordering sortBy=(action \\'sortBy\\')}}</div><div style=\\\"display:flex;justify-content: flex-end;\\\">{{#each this.paginationSearchConfig.alertProfilePaginationList as |page|}}<button type=\\\"button\\\" {{action \\'jumpToPage\\' page on=\\\"click\\\"}} style=\\\"border-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}};color: {{if (eq page \\'...\\') \\'black\\' \\'white\\'}};margin-right: 10px;font-size:small;padding: 5px;background-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}}\\\" class=\\\"btn btn-primary\\\">{{page}}</button>{{/each}}</div>{{/if}}<div style=\\\"width: 100%;\\\"><div><h5>Properties:</h5></div><div style=\\\"width: 100%;display:flex;flex-direction:row;\\\"><div style=\\\"width: 50%;display:flex;flex-direction:column;\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"channelsNum\\\" class=\\\"col-12 col-form-label\\\">Channels:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'channelsNum\\' isEditable=false}}</td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"coordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=@instrument east=@instrument.east north=@instrument.north depth=@instrument.depth stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><br /></td></tr><tr><td><label for=\\\"azimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'azimuth\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"dip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'dip\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"borehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'borehole\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></div><div style=\\\"width: 50%;display:flex;flex-direction:column;\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"strokeLength\\\" class=\\\"col-12 col-form-label\\\">Stroke Length (mm):</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'strokeLength\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"baseLength\\\" class=\\\"col-12 col-form-label\\\">Base Length (m):</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'baseLength\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><br /></td></tr><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'zeroTimestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><br /></td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Active:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument id=\\\"activeCheck\\\" field=\\'active\\'}}</td></tr></tbody></table></div></div><div style=\\\"padding: 0.2rem;font-weight:bold;\\\">Anchor Diagram:</div><div style=\\\"padding:10px;width: 100%;\\\">{{#if this.isEditAnchorDiagram}}<div style=\\\"display:flex;flex-direction:row;align-items:center\\\"><div style=\\\"width: 100%;\\\">{{instrument-anchors-diagram showHATHACLabels=true style=\\\"width: 100%;\\\" inputMode=\\\"input\\\" initialValues=this.anchorDiagramInputInitalValue instrumentID=@instrument.id headAt=@instrument.headAt.id instrumentTypeText=@instrument.instrumentType.title channels=@instrument.channelsNum onCustomNumberInput=(action \\\"updateChannelInput\\\")}}</div><div style=\\\"margin-right:10px;margin-left:10px;cursor:pointer;\\\" onClick={{action \\\"saveAnchors\\\"}}><FaIcon @icon=\\\"check\\\" /></div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleEditAnchorDiagram\\\"}}><FaIcon @icon=\\\"times\\\" /></div></div>{{else}}<div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleEditAnchorDiagram\\\"}}>{{instrument-anchors-diagram showHATHACLabels=true style=\\\"width: 100%;\\\" inputMode=\\\"label\\\" initialValues=this.anchorDiagramLabelInitalValue instrumentID=@instrument.id headAt=@instrument.headAt.id instrumentTypeText=@instrument.instrumentType.title channels=@instrument.channelsNum}}</div>{{/if}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/dconv/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-spatial-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-spatial-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/dconv/nvd3-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/dconv/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"table-responsive\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th>{{#each this.columnSpecs as |spec|}}<th>{{spec.tableLabel}}</th>{{/each}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th></tr></thead><tbody>{{#each this.tableRows as |row|}}<tr><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td>{{#each row.cells as |cell|}}<td>{{cell.value}}</td>{{/each}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td></tr>{{/each}}</tbody></table></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/dconv/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Velocity</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/dconv/spatial-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Velocity</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'acceleration-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Acceleration</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/dconv/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><select onchange={{action \\'selectedValue\\' value=\\\"target.value\\\"}}><option value=\\\"\\\"></option>{{#each this.getDispUnitsArr as |unit|}}<option selected={{is-equal unit this.initValue}} value=\\\"{{unit}}\\\">{{unit}}</option>{{/each}}{{#if this.allowRAW}}<option selected={{is-equal \\\"RAW\\\" this.initValue}} value=\\\"RAW\\\">RAW</option>{{/if}}{{#if this.allowBits}}<option selected={{is-equal \\\"BITS\\\" this.initValue}} value=\\\"BITS\\\">Bits</option>{{/if}}</select></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/displacement-units-group.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isEditable}}<div class=\\\"editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{#if this.isEditing}}{{#if this.isTextInput}}<input type=\\\"text\\\" value={{this.newValue}} oninput={{action (mut this.newValue) value=\\\"target.value\\\"}} focus-out={{action \\\"save\\\" this.object}} id=\\\"{{this.field}}\\\" class=\\\"form-control\\\">{{/if}}{{#if this.isTextarea}}<textarea type=\\\"text\\\" rows=3 value={{this.newValue}} oninput={{action (mut this.newValue) value=\\\"target.value\\\"}} focus-out={{action \\\"save\\\" this.object}} id=\\\"{{this.field}}\\\" class=\\\"form-control\\\"></textarea>{{/if}}<span {{action \\\"save\\\" this.object on=\\\"click\\\"}} class=\\\"save\\\"><i aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Save\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"check\\\" /></i></span><span {{action \\\"cancel\\\" on=\\\"click\\\"}} class=\\\"cancel\\\"><i aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Cancel\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"times\\\" /></i></span>{{else}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Edit\\\" @placement=\\\"right\\\"/>{{get this.object this.field}}</span>{{/if}}</div></div></div>{{else}}<div class=\\\"non-editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Read Only\\\" @placement=\\\"right\\\" />{{get this.object this.field}}</span></div></div></div>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/display-noneditable-numeric.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/dppc/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@projectLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'newInstrumentObjectProject\\' onSelectionChange=(action \\'setProject\\' value=\\\"target.value\\\") inputFieldId=\\'project\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.location}} oninput={{action (mut this.newInstrumentObject.location) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCoordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.east}} oninput={{action (mut this.newInstrumentObject.east) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.north}} oninput={{action (mut this.newInstrumentObject.north) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.depth}} oninput={{action (mut this.newInstrumentObject.depth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectAzimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.azimuth}} oninput={{action (mut this.newInstrumentObject.azimuth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAzimuth\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectDip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.dip}} oninput={{action (mut this.newInstrumentObject.dip) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDip\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@levelLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'newInstrumentObjectLevel\\' onSelectionChange=(action \\'setLevel\\' value=\\\"target.value\\\") inputFieldId=\\'level\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectBorehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.borehole}} oninput={{action (mut this.newInstrumentObject.borehole) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectBorehole\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.installedBy}} oninput={{action (mut this.newInstrumentObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.purpose}} oninput={{action (mut this.newInstrumentObject.purpose) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newInstrumentObject.notes}} oninput={{action (mut this.newInstrumentObject.notes) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/dppc/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{this.instrumentAnchors.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each this.instrumentAnchors as |anchor|}}<td>{{anchor}}</td>{{/each}}<td>Temperature</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action \\\"setNewTimestampValue\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action \\\"setNewDisplacementValue\\\" key}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} oninput={{action \\\"setTemperatureValue\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/dppc/create-new-raw-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div>{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div><hr></td></tr><tr class=\\\"details\\\"><td><h5>Properties:</h5></td></tr><tr class=\\\"details\\\"><td colspan=\\\"2\\\" style=\\\"vertical-align: top; margin-bottom: 1rem;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"channelsNum\\\" class=\\\"col-12 col-form-label\\\">Channels:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'channelsNum\\' isEditable=false}}</td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"coordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=@instrument east=@instrument.east north=@instrument.north depth=@instrument.depth stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"azimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'azimuth\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"dip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'dip\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"borehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'borehole\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'zeroTimestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Active:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument id=\\\"activeCheck\\\" field=\\'active\\'}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label class=\\\"col-12 col-form-label\\\">Nodes:</label></td><td class=\\\"input\\\">{{single-save-instrument-anchors object=@anchors instrument=@instrument headAt=@instrument.headAt.id channelsNum=@instrument.channelsNum stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td></tr><tr class=\\\"details newRecordDetails\\\"></tr><td colspan=\\\"5\\\" class=\\\"td_details\\\"></td><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"add-new-item\\\"></td><td class=\\\"add-new-item\\\"><span {{action \\\"saveInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/dppc/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-spatial-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-spatial-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/dppc/nvd3-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/dppc/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"table-responsive\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th>{{#each this.columnSpecs as |spec|}}<th>{{spec.tableLabel}}</th>{{/each}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th></tr></thead><tbody>{{#each this.tableRows as |row|}}<tr><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td>{{#each row.cells as |cell|}}<td>{{cell.value}}</td>{{/each}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td></tr>{{/each}}</tbody></table></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/dppc/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if @selected}}\\n      {{@selected}}\\n    {{else}}\\n        Pressure\\n    {{/if}}\\n<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"Pressure\\\"}} class=\\\"dropdown-item\\\">Pressure</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"Pressure Rate\\\"}} class=\\\"dropdown-item\\\">Press. Rate</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"mmH20\\\"}} class=\\\"dropdown-item\\\">mmH20</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/dppc/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#modal-dialog translucentOverlay=true}}<div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content:space-between\\\"><h4>{{this.title}}</h4></div><div class=\\\"modal-body\\\"><div class=\\\"edit-modal\\\"><div class=\\\"my-profile-sidebar-home-subtitle\\\">General</div><div style=\\\"margin-bottom:10px;padding-left:10px;display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;width:60%\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;width:100%;justify-content: space-between;\\\"><div style=\\\"margin-right:5px\\\">First Name:</div><input id=\\\"contactFirstName\\\" type=\\\"text\\\" value={{this.getFirstName}}></div></div><div style=\\\"margin-bottom:10px;padding-left:10px;display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;width:60%\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;width:100%;justify-content: space-between;\\\"><div style=\\\"margin-right:5px\\\">Last Name:</div><input id=\\\"contactLastName\\\" type=\\\"text\\\" value={{this.getLastName}}></div></div><div style=\\\"margin-bottom:10px;padding-left:10px;display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;width:60%\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;width:100%;justify-content: space-between;\\\"><div style=\\\"margin-right:5px\\\">Phone:</div><input id=\\\"contactPhone\\\" type=\\\"tel\\\" placeholder=\\\"Phone number\\\"></div></div><div style=\\\"margin-bottom:10px;padding-left:10px;display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;width:60%\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;width:100%;justify-content: space-between;\\\"><div style=\\\"margin-right:5px\\\">Email:</div><input id=\\\"contactEmail\\\" type=\\\"text\\\" value={{this.getEmail}}></div></div><div style=\\\"margin-bottom:10px;padding-left:10px;display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;width:60%\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;width:100%;justify-content: space-between;\\\"><div style=\\\"margin-right:5px\\\">Birth Date:</div><input id=\\\"contactBirthDate\\\" type=\\\"date\\\" value={{this.getBirthDate}}></div></div><div style=\\\"margin-bottom:10px;padding-left:10px;display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;width:60%\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;width:100%;justify-content: space-between;\\\"><div style=\\\"margin-right:5px\\\">Group:</div><select id=\\\"contactGroupSelect\\\">{{#if (eq this.getGroup null)}}<option value=\\\"\\\" selected=\\\"selected\\\">None</option>{{else}}<option value=\\\"\\\">None</option>{{/if}}{{#each this.groupList as |g|}}{{#if (eq g.id this.getGroup)}}<option value={{g.id}} selected=\\\"selected\\\">{{g.name}}</option>{{else}}<option value={{g.id}}>{{g.name}}</option>{{/if}}{{/each}}</select></div></div><div style=\\\"padding-left:10px;display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;width:60%\\\"><div style=\\\"display:flex;flex-direction:row;align-items: flex-start;width:100%;justify-content: space-between;\\\"><div style=\\\"margin-right:5px\\\">Notes:</div><textarea id=\\\"contactNotes\\\" rows=\\\"3\\\" value={{this.getNotes}}></textarea></div></div></div></div><div class=\\\"modal-footer\\\"><button {{action \\\"close\\\" on=\\\"click\\\"}} class=\\\"btn btn-secondary\\\">Cancel</button><button {{action \\\"save\\\" on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Save</button></div>{{/modal-dialog}}', { moduleName: 'geotechnical-data-platform-new/templates/components/edit-my-profile-contact-modal.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#modal-dialog translucentOverlay=true}}<div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content:space-between\\\"><h4>{{this.title}}</h4></div><div class=\\\"modal-body\\\"><div class=\\\"edit-modal\\\"><div class=\\\"my-profile-sidebar-home-subtitle\\\">General</div><div style=\\\"margin-bottom:10px;padding-left:10px;display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;width:50%\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;width:100%;justify-content: space-between;\\\"><div style=\\\"margin-right:5px;\\\">Is Internal:</div><input id=\\\"isInternalCheckbox\\\" type=\\\"checkbox\\\" checked={{this.getIsInternal}}></div></div><div style=\\\"margin-bottom:10px;padding-left:10px;display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;width:50%\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;width:100%;justify-content: space-between;\\\"><div style=\\\"margin-right:5px\\\">Code:</div><input id=\\\"codeTextbox\\\" disabled={{this.isEditingExisting}} maxlength=\\\"8\\\" type=\\\"text\\\" value={{this.getCode}}></div></div><div style=\\\"padding-left:10px;display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;width:50%\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;width:100%;justify-content: space-between;\\\"><div style=\\\"margin-right:5px\\\">Company:</div><input id=\\\"companyTextbox\\\" type=\\\"text\\\" value={{this.getCompany}}></div></div></div></div><div class=\\\"modal-footer\\\"><button {{action \\\"close\\\" on=\\\"click\\\"}} class=\\\"btn btn-secondary\\\">Cancel</button><button {{action \\\"save\\\" on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Save</button></div>{{/modal-dialog}}', { moduleName: 'geotechnical-data-platform-new/templates/components/edit-my-profile-contractors-modal.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#modal-dialog translucentOverlay=true}}<div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content:space-between\\\"><h4>{{this.title}}</h4></div><div class=\\\"modal-body\\\"><div class=\\\"edit-modal\\\"><div class=\\\"my-profile-sidebar-home-subtitle\\\">General</div><div style=\\\"margin-bottom:10px;padding-left:10px;display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;width:60%\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;width:100%;justify-content: space-between;\\\"><div style=\\\"margin-right:5px\\\">Name:</div><input id=\\\"groupName\\\" type=\\\"text\\\" value={{this.getName}}></div></div><div style=\\\"padding-left:10px;display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;width:60%\\\"><div style=\\\"display:flex;flex-direction:row;align-items: flex-start;width:100%;justify-content: space-between;\\\"><div style=\\\"margin-right:5px\\\">Description:</div><textarea id=\\\"groupDescription\\\" rows=\\\"3\\\" value={{this.getDescription}}></textarea></div></div></div></div><div class=\\\"modal-footer\\\"><button {{action \\\"close\\\" on=\\\"click\\\"}} class=\\\"btn btn-secondary\\\">Cancel</button><button {{action \\\"save\\\" on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Save</button></div>{{/modal-dialog}}', { moduleName: 'geotechnical-data-platform-new/templates/components/edit-my-profile-group-modal.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#modal-dialog translucentOverlay=true}}<div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content:space-between\\\"><h4>{{this.title}}</h4></div><div class=\\\"modal-body\\\"><div class=\\\"edit-modal\\\"><div class=\\\"my-profile-sidebar-home-subtitle\\\">General</div><div style=\\\"padding:10px;display:flex;flex-direction:row;align-items:center;justify-content:space-evenly\\\"><div style=\\\"display: none;flex-direction: row;align-items: center;\\\"><div style=\\\"margin-right:5px;\\\">Is Admin:</div><input id=\\\"isStaffCheckbox\\\" disabled type=\\\"checkbox\\\" checked={{this.getIsStaff}}></div><div style=\\\"display: flex;flex-direction: row;align-items: center;\\\"><div style=\\\"margin-right:5px;\\\">Is Master User:</div><input id=\\\"isActiveCheckbox\\\" disabled type=\\\"checkbox\\\" checked={{this.getIsMasterUser}}></div><div style=\\\"display: flex;flex-direction: row;align-items: center;\\\"><div style=\\\"margin-right:5px;\\\">Is Verified:</div><input id=\\\"isActiveCheckbox\\\" disabled type=\\\"checkbox\\\" checked={{this.getIsActive}}></div></div><div style=\\\"padding-left:10px;display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;width:50%\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;width:100%;justify-content: space-between;\\\"><div style=\\\"margin-right:5px\\\">Company:</div><input id=\\\"companyTextbox\\\" type=\\\"text\\\" value={{this.getCompany}}></div><div style=\\\"padding-top:10px;display:flex;flex-direction:row;align-items: center;width:100%;justify-content: space-between;\\\"><div style=\\\"margin-right:5px\\\">Position:</div><input id=\\\"positionTextbox\\\" type=\\\"text\\\" value={{this.getPosition}}></div></div><div class=\\\"my-profile-sidebar-home-subtitle\\\">Permissions</div><div style=\\\"padding:10px;display:flex;flex-direction:column;\\\"><div style=\\\"display: flex;flex-direction: row;align-items: center;\\\"><input id=\\\"canLoginVPCheckbox\\\" style=\\\"margin-right:5px;\\\" type=\\\"checkbox\\\" checked={{this.canLoginToVP}}><div style=\\\"margin-right:5px;\\\">Can login to VantagePoint</div></div><div style=\\\"display: flex;flex-direction: row;align-items: center;\\\"><input id=\\\"canUploadVPCheckbox\\\" style=\\\"margin-right:5px;\\\" type=\\\"checkbox\\\" checked={{this.canUploadToVP}}><div style=\\\"margin-right:5px;\\\">Can upload to VantagePoint</div></div></div></div></div><div class=\\\"modal-footer\\\"><button {{action \\\"close\\\" on=\\\"click\\\"}} class=\\\"btn btn-secondary\\\">Cancel</button><button {{action \\\"save\\\" on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Save</button></div>{{/modal-dialog}}', { moduleName: 'geotechnical-data-platform-new/templates/components/edit-my-profile-user-modal.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"display:flex;flex-direction:row;align-items:stretch;width:100%;height:60vh;gap:8px;\\\" class=\\\"chart-grouped-wrapper\\\"><div style=\\\"position:relative;flex:1 1 auto;min-width:0;\\\" class=\\\"chart-canvas-wrap\\\"><canvas></canvas></div><div style=\\\"position:relative;flex:0 0 220px;max-width:240px;overflow-y:auto;overflow-x:hidden;border-left:1px solid #e5e5e5;padding:6px 8px;min-height:0;\\\" class=\\\"chart-legend-side\\\"></div></div><div style=\\\"display:flex;font-size:small;color:black;border:solid;justify-content:space-evenly;border-width:1px;border-radius:10px;margin-top:8px;padding:4px 8px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the chart to select a narrower time range — refetches data for that range\\\">- Drag on chart to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click a legend item to toggle that line\\'s visibility\\\">- Click legend to toggle</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/extoBMultiInstrument/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"margin-bottom:8px;margin-top:10px;\\\" class=\\\"row\\\"><div style=\\\"display:flex;align-items:center;flex-wrap:wrap;\\\" class=\\\"col\\\"><label style=\\\"margin:0 12px 0 0;min-width:80px;\\\">Instruments:</label>{{#each this.instrumentButtons as |btn|}}<button type=\\\"button\\\" {{action \\\"toggleInstrument\\\" btn.index  on=\\\"click\\\"}} style={{btn.style}} class=\\\"btn\\\">{{btn.label}}</button>{{/each}}</div></div><div style=\\\"margin-bottom:12px;\\\" class=\\\"row\\\"><div style=\\\"display:flex;align-items:center;flex-wrap:wrap;\\\" class=\\\"col\\\"><label style=\\\"margin:0 12px 0 0;min-width:80px;\\\">Layout:</label>{{#each this.layoutButtons as |btn|}}<button type=\\\"button\\\" {{action \\\"setLayout\\\" btn.key  on=\\\"click\\\"}} style={{btn.style}} class=\\\"btn\\\">{{btn.label}}</button>{{/each}}</div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{this.displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=this.displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"table-responsive\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th>{{#each this.columnSpecs as |spec|}}<th style={{spec.headerStyle}}>{{spec.label}}</th>{{/each}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th></tr></thead><tbody>{{#each this.tableRows as |row|}}<tr><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td>{{#each row.cells as |cell|}}<td style={{cell.style}}>{{cell.value}}</td>{{/each}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td></tr>{{/each}}</tbody></table></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=this.displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/extoBMultiInstrument/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{yield}}', { moduleName: 'geotechnical-data-platform-new/templates/components/file-upload-seis.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{yield}}', { moduleName: 'geotechnical-data-platform-new/templates/components/file-upload.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"form-group\\\"><label>Quick search</label><div class=\\\"input-group\\\"><input id=\\\"quickTableFilter\\\" type=\\\"text\\\" aria-describedby=\\\"emailHelp\\\" placeholder=\\\"What?\\\" value={{this.inputValue}} oninput={{action (mut this.inputValue) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><span class=\\\"input-group-btn\\\"><button type=\\\"button\\\" {{action \\'search\\' on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Search</button></span></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/filter-text-input-events.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"form-group\\\"><label>Search for a Gateway</label><div class=\\\"input-group\\\"><input id=\\\"quickTableFilter\\\" type=\\\"text\\\" aria-describedby=\\\"emailHelp\\\" placeholder=\\\"What?\\\" value={{this.inputValue}} oninput={{action (mut this.inputValue) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><span class=\\\"input-group-btn\\\"><button type=\\\"button\\\" {{action \\'updateProperty\\' \\'searchValue\\' this.inputValue on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Search</button></span></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/filter-text-input-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"width: 25%; margin-bottom: 15px;\\\" class=\\\"form-group\\\"><label>Search</label><div class=\\\"input-group\\\"><input id=\\\"quickTableFilter\\\" type=\\\"text\\\" aria-describedby=\\\"emailHelp\\\" value={{this.search}} onchange={{action \\'updateProperty\\' \\'search\\'}} class=\\\"form-control\\\"></div></div><div style=\\\"margin-bottom: 15px;\\\" class=\\\"form-group\\\"><label>Date</label><div class=\\\"input-group\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" value={{this.startDate}} onchange={{action \\'updateProperty\\' \\'startDate\\'}} id=\\\"startRangeDateComponent\\\"></div><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" value={{this.endDate}} onchange={{action \\'updateProperty\\' \\'endDate\\'}} id=\\\"endRangeDateComponent\\\"></div></div></div><div style=\\\"margin-top: 10px;\\\"><span class=\\\"input-group-btn\\\"><button type=\\\"button\\\" {{action \\\"search\\\" on=\\\"click\\\"}} style=\\\"margin-right: 5px;\\\" class=\\\"btn btn-primary\\\">Search</button><button type=\\\"button\\\" {{action \\\"reset\\\" on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Reset</button></span></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/filter-text-input-log-viewer.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"form-group\\\"><label>Quick search</label><div class=\\\"input-group\\\"><input id=\\\"quickTableFilter\\\" type=\\\"text\\\" aria-describedby=\\\"emailHelp\\\" placeholder=\\\"What?\\\" value={{this.inputValue}} oninput={{action (mut this.inputValue) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><span class=\\\"input-group-btn\\\"><button type=\\\"button\\\" {{action \\'updateProperty\\' \\'searchValue\\' this.inputValue on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Search</button></span></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/filter-text-input.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if (eq @instrumentType \\'15\\')}}{{vibe/frequency-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/frequency-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @display_records 50)}}\\n      50\\n    {{else if (is-equal @display_records 300)}}\\n      300\\n    {{else if (is-equal @display_records 100)}}\\n      100\\n    {{else if (is-equal @display_records 10)}}\\n      10\\n    {{else if (is-equal @display_records 1)}}\\n      All\\n    {{else}}\\n      100\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"frequency-graphs.frequency-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash display_records=300}} class=\\\"dropdown-item\\\">300</LinkTo>\\n        <LinkTo @route=\\\"frequency-graphs.frequency-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash display_records=100}} class=\\\"dropdown-item\\\">100</LinkTo>\\n        <LinkTo @route=\\\"frequency-graphs.frequency-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash display_records=50}} class=\\\"dropdown-item\\\">50</LinkTo>\\n        <LinkTo @route=\\\"frequency-graphs.frequency-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash display_records=10}} class=\\\"dropdown-item\\\">10</LinkTo>\\n        <LinkTo @route=\\\"frequency-graphs.frequency-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash display_records=1}} class=\\\"dropdown-item\\\">All</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/frequency-display-records-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsTab \\n  style=\\\"{{if this.showLoading \\\"pointer-events: none; opacity: 0.6;\\\"}}\\\"\\n  @selected={{this.selectedFreqEventTabKey}} \\n  @onChange={{action \\\"updateSelectedTab\\\"}} \\n  as |tab|>\\n  <div class=\\\"tab-content\\\">\\n    {{#each this.buildTabsInstrTypeDependent as |tabDef|}}\\n      <tab.pane @title={{tabDef.label}} @id={{tabDef.id}}>\\n        {{#if (eq tabDef.id \\\"raw\\\")}}\\n          <BsTab \\n            id=\\\"subTabSection\\\"\\n            style=\\\"margin-top: 5px;{{if this.showLoading \\\"pointer-events: none; opacity: 0.6;\\\"}}\\\"\\n            @selected={{this.selectedSubTabKey}} \\n            @onChange={{action \\\"updateSelectedSubTab\\\"}} \\n            as |subTab|>\\n            {{#each this.buildSubTabsInstrTypeDependent as |subTabDef1|}}\\n              <subTab.pane \\n                @title={{subTabDef1.label}} \\n                @id={{subTabDef1.id}}/>\\n            {{/each}}\\n          </BsTab>\\n        {{/if}}\\n        {{#if (or (eq tabDef.id \\\"acceleration\\\")(eq tabDef.id \\\"fft\\\")(eq tabDef.id \\\"velocity\\\")(eq tabDef.id \\\"displacement\\\"))}}\\n          <BsTab \\n            style=\\\"margin-top: 5px;{{if this.showLoading \\\"pointer-events: none; opacity: 0.6;\\\"}}\\\"\\n            @selected={{this.selectedSubTabKey}} \\n            @onChange={{action \\\"updateSelectedSubTab\\\"}} \\n            as |subTab|>\\n            {{#each this.buildSubTabsInstrTypeDependent as |subTabDef2|}}\\n              <subTab.pane \\n                @title={{subTabDef2.label}} \\n                @id={{subTabDef2.id}}/>\\n              {{#if (or (eq subTabDef2.id \\\"sub_acceleration_linear_regression\\\")(eq subTabDef2.id \\\"sub_velocity_linear_regression\\\")(eq subTabDef2.id \\\"sub_displacement_linear_regression\\\"))}}\\n                <BsTab \\n                  style=\\\"margin-top: 5px;\\\"\\n                  @selected={{this.selectedFreqEventSubSubTabKey}} \\n                  @onChange={{action \\\"updateSelectedSubSubTab\\\"}} \\n                  as |subTab|>\\n                  {{#each this.buildSubSubTabsInstrTypeDependent as |subSubTab|}}\\n                    <subTab.pane \\n                      @title={{subSubTab.label}} \\n                      @id={{subSubTab.id}}/>\\n                  {{/each}}\\n                </BsTab>\\n              {{/if}}\\n            {{/each}}\\n          </BsTab>\\n        {{/if}}\\n      </tab.pane>\\n    {{/each}}\\n  </div>\\n</BsTab>', { moduleName: 'geotechnical-data-platform-new/templates/components/frequency-event-tabs.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%;\\\" hidden id=\\\"gatewayChildListError\\\"><tr class=\\\"details\\\"><td colspan=\\\"6\\\" style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"td_details error\\\"><label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You do not have permission to delete a gateway.</label></td></tr></table>{{#if this.isLoading}}<div style=\\\"width: 45px;height: 40px;\\\" class=\\\"center pulse_loader\\\"></div>{{else}}<table class=\\\"table table-striped responsive-table\\\"><thead><tr style=\\\"min-height:175px;\\\"><th style=\\\"justify-content: center;\\\">Node</th><th style=\\\"justify-content: center;\\\">Current</th><th style=\\\"justify-content: center;\\\">Name</th><th style=\\\"justify-content: center;\\\">Type</th><th style=\\\"justify-content: center;\\\">Level</th><th style=\\\"justify-content: center;\\\">Project</th><th style=\\\"justify-content: center;\\\">Location</th><th style=\\\"justify-content: center;\\\">Action</th></tr></thead><tbody>{{#each (get this.childDict @gateway.id) as |childGateway|}}<tr style=\\\"min-height:175px;\\\"><td style=\\\"min-height:175px;\\\"><LinkTo @route=\\\"edit-gateway\\\" @model={{childGateway.id}} @query={{hash parentGateway=@gateway.id}}> {{childGateway.id}}</LinkTo></td><td style=\\\"min-height:175px;\\\">{{#if childGateway.is_current}}<FaIcon @icon=\\\"check\\\" />{{else}}<FaIcon @icon=\\\"times\\\" />{{/if}}</td><td style=\\\"min-height:175px;\\\">{{childGateway.name}}</td><td style=\\\"min-height:175px;\\\">{{childGateway.gateway_type}}</td><td style=\\\"min-height:175px;\\\">{{childGateway.level}}</td><td style=\\\"min-height:175px;\\\">{{childGateway.project}}</td><td style=\\\"min-height:175px;\\\">{{childGateway.location}}</td><td style=\\\"min-height:175px;\\\" class=\\\"crud-td\\\"><span {{action \\\"toggleRowDeleteConfirmationDialog\\\" childGateway.id on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><div class=\\\"delete-confirmation {{active-class (get this.isRowDeleteConfirmationDialog childGateway.id)}}\\\"><span class=\\\"crud-delete-message\\\"><span><small>All associated data</small><small>will be deleted too!</small></span></span><span {{action \\\"remove\\\" @gateway childGateway on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-confirm\\\">Yes</span><span {{action \\\"toggleRowDeleteConfirmationDialog\\\" childGateway.id on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-cancel\\\">No</span></div></td></tr>{{/each}}</tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/gateway-list-children.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%;\\\" hidden id=\\\"gatewayListError\\\"><tr class=\\\"details\\\"><td colspan=\\\"6\\\" style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"td_details error\\\"><label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You do not have permission to delete a gateway.</label></td></tr></table><table class=\\\"table table-striped responsive-table\\\"><thead><tr>{{#if @showExpandColumn}}<th>Expand</th>{{/if}}{{sortable-table-header title=\\'Gateway ID\\' sortProperty=\\'id\\' selectedSortProperty=this.ordering sort=this.sortBy}}{{sortable-table-header title=\\'Destroyed\\' sortProperty=\\'active\\' selectedSortProperty=this.ordering sort=this.sortBy}}{{sortable-table-header title=\\'Name\\' sortProperty=\\'name\\' selectedSortProperty=this.ordering sort=this.sortBy}}{{sortable-table-header title=\\'Type\\' sortProperty=\\'gatewayType\\' selectedSortProperty=this.ordering sort=this.sortBy}}{{sortable-table-header title=\\'Level\\' sortProperty=\\'level\\' selectedSortProperty=this.ordering sort=this.sortBy}}{{sortable-table-header title=\\'Project\\' sortProperty=\\'project\\' selectedSortProperty=this.ordering sort=this.sortBy}}{{sortable-table-header title=\\'Location\\' sortProperty=\\'location\\' selectedSortProperty=this.ordering sort=this.sortBy}}{{#if this.licenceIsValid}}<th id=\\\"add-new\\\" class=\\\"add-new-item\\\"><span {{action \\\"createGateway\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"><FaIcon @icon=\\\"plus\\\" /> New</span></th>{{/if}}{{#if (not this.licenceIsValid)}}<th id=\\\"add-new\\\" class=\\\"add-new-item\\\"></th>{{/if}}</tr></thead><tbody>{{#each this.gateway as |tableRow|}}<tr>{{#if @showExpandColumn}}<td>{{#if tableRow.hasChildren}}<div id=\\\"add-new\\\" class=\\\"add-new-item centered-container\\\"><span onclick={{action \\'toggleExpandedRow\\' tableRow.id}} class=\\\"add-new centered-span\\\">{{#if (get this.isRowExpanded tableRow.id)}}< FaIcon @icon=\\\"minus\\\" /> Nodes{{/if}}{{#unless (get this.isRowExpanded tableRow.id)}}< FaIcon @icon=\\\"plus\\\" /> Nodes{{/unless}}</span></div>{{/if}}</td>{{/if}}<td><LinkTo @route=\\\"edit-gateway\\\" @model={{tableRow.id}}>{{tableRow.id}}</LinkTo></td>{{#if (not tableRow.active)}}<td style=\\\"display: flex; justify-content: center; margin-top: 2px; vertical-align: top;\\\">< FaIcon @icon=\\\"check-square\\\"/></td>{{/if}}{{#unless (not tableRow.active)}}<td><span class=\\\"separator\\\"></span></td>{{/unless}}<td>{{tableRow.name}}</td><td>{{tableRow.gatewayType.title}}</td><td>{{tableRow.level}}</td><td>{{tableRow.project}}</td><td>{{tableRow.location}}</td><td class=\\\"crud-td\\\"><span {{action \\'toggleRowDeleteConfirmationDialog\\' tableRow.id on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><div class=\\\"delete-confirmation {{active-class (get this.isRowDeleteConfirmationDialog tableRow.id)}}\\\"><span class=\\\"crud-delete-message\\\"><span><small>Any associated nodes will be</small><small>sent to the orphaned nodes gateway.</small></span></span><span {{action \\'remove\\' this.model.gateway tableRow on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-confirm\\\">Yes</span><span {{action \\'toggleRowDeleteConfirmationDialog\\' tableRow.id on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-cancel\\\">No</span></div></td></tr>{{#if (get this.isRowExpanded tableRow.id)}}<tr class=\\\"expandable-row\\\"><td></td><td colspan=\\\"7\\\">{{gateway-list-children gateway=tableRow}}</td></tr>{{/if}}{{/each}}</tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/gateway-list.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'geotechnical-data-platform-new/templates/components/gateway-selector.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<td><td><td><a style=\\\"font-size: 1rem; color: black; font-family: Trebuchet MS\\\" href=\\\"/gateway\\\" title=\\\"List of all Gateways\\\">Total:</a></td><td><span style=\\\"margin-left: 5px; font-size: 1rem;\\\">{{@model.total}}</span></td></td><td><td style=\\\"vertical-align:middle\\\"><div id=\\\"circleSmall\\\" style=\\\"margin-left: 2rem; margin-right: 3px; margin-top: 2px;\\\"></div></td><td><a style=\\\"font-size: 1rem; color: black; font-family: Trebuchet MS\\\" href=\\\"/gateway/?search=active\\\" title=\\\"List of active gateways\\\">Active:</a></td><td><span style=\\\"margin-left: 5px; font-size: 1rem;=\\\">{{@model.active}}</span></td></td></td>', { moduleName: 'geotechnical-data-platform-new/templates/components/getTotalsGateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<td><td><td><a style=\\\"font-size: 1rem; color: black; font-family: Trebuchet MS\\\" href=\\\"/instruments\\\" title=\\\"List of all instruments\\\">Total:</a></td><td><span style=\\\"margin-left: 5px; font-size: 1rem;\\\">{{@model.total}}</span></td></td><td><td style=\\\"vertical-align:middle\\\"><div id=\\\"circleSmall\\\" style=\\\"margin-left: 2rem; margin-right: 3px; margin-top: 2px;\\\"></div></td><td><a style=\\\"font-size: 1rem; color: black; font-family: Trebuchet MS\\\" href=\\\"/instruments/?search=active\\\" title=\\\"List of active instruments\\\">Active:</a></td><td><span style=\\\"margin-left: 5px; font-size: 1rem;=\\\">{{@model.active}}</span></td></td></td>', { moduleName: 'geotechnical-data-platform-new/templates/components/getTotalsInstruments.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<td><td><td><a style=\\\"font-size: 1rem; color: black; font-family: Trebuchet MS\\\" href=\\\"/log-viewer\\\" title=\\\"List of all Logs\\\">Total:</a></td><td><span style=\\\"margin-left: 5px; font-size: 1rem;\\\">{{@model.total}}</span></td></td><td><td style=\\\"vertical-align:middle\\\"><div id=\\\"circleSmall\\\" style=\\\"margin-left: 2rem; margin-right: 3px; margin-top: 2px;\\\"></div></td><td><a style=\\\"font-size: 1rem; color: black; font-family: Trebuchet MS\\\" href=\\\"/log-viewers/?search=active\\\" title=\\\"List of Logs\\\">Active:</a></td><td><span style=\\\"margin-left: 5px; font-size: 1rem;=\\\">{{@model.active}}</span></td></td></td>', { moduleName: 'geotechnical-data-platform-new/templates/components/getTotalsLogViewers.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"container-fluid\\\"><div style=\\\"padding:0 20px 20px 20px;;\\\"><h2 style=\\\"margin-bottom:6px;\\\">Have an Issue?</h2><p style=\\\"color:#666;margin-bottom:24px;font-size:medium;\\\">Send a detailed issue report to our customer support team. Include reproduction steps, screenshots, and any relevant IDs so we can respond as quickly as possible.</p><div style=\\\"font-size:small;color:#888;margin-bottom:24px;padding:8px 12px;background:#f1f3f5;border-radius:4px;\\\">Reporting from:<strong style=\\\"margin-left:6px;\\\">{{this.hostname}}</strong><span style=\\\"margin-left:6px;\\\">{{this.pageUrl}}</span></div>{{#if this.successMessage}}<div style=\\\"border:1px solid #94A378;background:#eef3e3;color:#3a5a40;padding:12px 16px;border-radius:4px;margin-bottom:20px;display:flex;justify-content:space-between;align-items:center;\\\"><span>{{this.successMessage}}</span><button style=\\\"color:#3a5a40;\\\" {{action \\\"dismissMessage\\\" on=\\\"click\\\"}} class=\\\"btn btn-sm btn-link\\\">×</button></div>{{/if}}{{#if this.errorMessage}}<div style=\\\"border:1px solid #D25353;background:#fbeaea;color:#7f1d1d;padding:12px 16px;border-radius:4px;margin-bottom:20px;display:flex;justify-content:space-between;align-items:center;\\\"><span>{{this.errorMessage}}</span><button style=\\\"color:#7f1d1d;\\\" {{action \\\"dismissMessage\\\" on=\\\"click\\\"}} class=\\\"btn btn-sm btn-link\\\">×</button></div>{{/if}}<div style=\\\"margin-bottom:18px;\\\"><label style=\\\"display:block;font-weight:600;margin-bottom:4px;\\\">Subject<span style=\\\"color:#D25353;margin-left:2px;\\\">*</span></label><div style=\\\"font-size:small;color:#666;margin-bottom:6px;\\\">Give a short overview of your issue.</div><input type=\\\"text\\\" value={{this.subject}} placeholder=\\\"e.g. I cannot see data from newly installed gateway\\\" oninput={{action \\\"subjectChanged\\\"}} class=\\\"form-control\\\"></div><div style=\\\"margin-bottom:18px;padding:16px 20px;border-radius:4px;\\\"><div style=\\\"font-weight:600;margin-bottom:4px;\\\">Your Info</div><div style=\\\"font-size:small;color:#666;margin-bottom:14px;\\\">Helps our support team know who they\\'re talking to and where the report is coming from.</div><div style=\\\"display:flex;flex-direction:row;gap:12px;margin-bottom:12px;\\\"><div style=\\\"flex:1;\\\"><label style=\\\"display:block;font-size:small;color:#444;margin-bottom:4px;\\\">First Name<span style=\\\"color:#D25353;margin-left:2px;\\\">*</span></label><input type=\\\"text\\\" value={{this.firstName}} oninput={{action \\\"firstNameChanged\\\"}} class=\\\"form-control\\\"></div><div style=\\\"flex:1;\\\"><label style=\\\"display:block;font-size:small;color:#444;margin-bottom:4px;\\\">Last Name<span style=\\\"color:#D25353;margin-left:2px;\\\">*</span></label><input type=\\\"text\\\" value={{this.lastName}} oninput={{action \\\"lastNameChanged\\\"}} class=\\\"form-control\\\"></div></div><div style=\\\"margin-bottom:12px;\\\"><label style=\\\"display:block;font-size:small;color:#444;margin-bottom:4px;\\\">Company<span style=\\\"color:#D25353;margin-left:2px;\\\">*</span></label><input type=\\\"text\\\" value={{this.company}} placeholder=\\\"e.g. Sample Company Co.\\\" oninput={{action \\\"companyChanged\\\"}} class=\\\"form-control\\\"></div><div style=\\\"margin-bottom:8px;\\\"><div style=\\\"font-size:small;color:#444;margin-bottom:6px;font-weight:600;\\\">Contact<span style=\\\"color:#D25353;margin-left:2px;\\\">*</span></div><div style=\\\"font-size:small;color:#666;margin-bottom:8px;\\\">Provide at least one of phone or email so we can respond.</div><div style=\\\"display:flex;flex-direction:row;gap:12px;\\\"><div style=\\\"flex:1;\\\"><div style=\\\"font-size:small;color:#444;margin-bottom:4px;\\\">Phone</div><input type=\\\"tel\\\" value={{this.phone}} placeholder=\\\"+1 (613) 555-0100\\\" oninput={{action \\\"phoneChanged\\\"}} class=\\\"form-control\\\"></div><div style=\\\"flex:1;\\\"><div style=\\\"font-size:small;color:#444;margin-bottom:4px;\\\">Email</div><input type=\\\"email\\\" value={{this.email}} placeholder=\\\"you@example.com\\\" oninput={{action \\\"emailChanged\\\"}} class=\\\"form-control\\\"></div></div></div><div style=\\\"margin-top:14px;padding:10px 12px;background:#fff8e1;border:1px solid #ffe082;border-radius:4px;font-size:small;color:#5d4e00;\\\"><strong>Privacy:</strong><span> we do not store this information. It is included only in the email to our customer support team so they can identify who sent the report and how to respond.</span></div></div><div style=\\\"margin-bottom:18px;\\\"><label style=\\\"display:block;font-weight:600;margin-bottom:4px;\\\">Issue Details<span style=\\\"color:#D25353;margin-left:2px;\\\">*</span></label><div style=\\\"font-size:small;color:#666;margin-bottom:6px;\\\">Describe the issue in detail. Include the steps that triggered it, what you expected vs. what happened, and any error messages. Attach screenshots or files below if helpful.</div><textarea rows=\\\"10\\\" value={{this.bodyText}} placeholder=\\\"Steps to reproduce, observed behavior, expected behavior...\\\" oninput={{action \\\"bodyChanged\\\"}} class=\\\"form-control\\\"></textarea></div><div style=\\\"margin-bottom:18px;\\\"><label style=\\\"display:block;font-weight:600;margin-bottom:4px;\\\">Attach Files</label><div style=\\\"font-size:small;color:#666;margin-bottom:6px;\\\">Supported: .txt, .doc, .docx, .csv, .dlog</div><input type=\\\"file\\\" multiple accept={{this.fileAccept}} onchange={{action \\\"filesPicked\\\"}}>{{#if this.files}}{{#if this.files.length}}<ul style=\\\"margin-top:10px;padding-left:0;list-style:none;\\\">{{#each this.files as |f idx|}}<li style=\\\"padding:6px 10px;background:#e9ecef;border-radius:4px;margin-bottom:4px;display:flex;justify-content:space-between;align-items:center;\\\"><span style=\\\"font-size:small;\\\">{{f.name}}</span><button style=\\\"color:#D25353;\\\" type=\\\"button\\\" {{action \\\"removeFile\\\" idx on=\\\"click\\\"}} class=\\\"btn btn-sm btn-link\\\">Remove</button></li>{{/each}}</ul>{{/if}}{{/if}}</div><div style=\\\"margin-bottom:18px;\\\"><label style=\\\"display:block;font-weight:600;margin-bottom:4px;\\\">Attach Screenshots / Photos</label><div style=\\\"font-size:small;color:#666;margin-bottom:6px;\\\">Any image format. Screenshots are especially helpful.</div><input type=\\\"file\\\" multiple accept={{this.photoAccept}} onchange={{action \\\"photosPicked\\\"}}>{{#if this.photos}}{{#if this.photos.length}}<ul style=\\\"margin-top:10px;padding-left:0;list-style:none;\\\">{{#each this.photos as |f idx|}}<li style=\\\"padding:6px 10px;background:#e9ecef;border-radius:4px;margin-bottom:4px;display:flex;justify-content:space-between;align-items:center;\\\"><span style=\\\"font-size:small;\\\">{{f.name}}</span><button style=\\\"color:#D25353;\\\" type=\\\"button\\\" {{action \\\"removePhoto\\\" idx on=\\\"click\\\"}} class=\\\"btn btn-sm btn-link\\\">Remove</button></li>{{/each}}</ul>{{/if}}{{/if}}</div><div style=\\\"margin-top:24px;display:flex;align-items:center;margin-bottom: 24px;\\\"><button type=\\\"button\\\" disabled={{this.cannotSubmit}} {{action \\\"submit\\\" on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">{{this.submitButtonLabel}}</button>{{#if this.isSubmitting}}<span style=\\\"font-size:small;color:#666;\\\">Please don\\'t refresh the page.</span>{{/if}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/have-an-issue.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:450px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-spatial\\\"></canvas></div></div><div style=\\\"min-height:24px;padding:4px 8px;font-size:12px;border:1px solid #ddd;border-radius:4px;background:#fafafa;margin-top:4px;overflow-x:auto;white-space:nowrap;\\\" class=\\\"spatial-info-panel\\\"><span style=\\\"color:#999;\\\">Hover over chart to see values</span></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;margin-top:4px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Each line represents one reading timestamp\\\">- Lines = timestamps</div><div title=\\\"Light/thin lines are older readings, dark/thick lines are the most recent\\\">- Light = older, Dark = newer</div><div title=\\\"Hover over the chart to see values in the panel below\\\">- Hover to see values</div><div title=\\\"Colored dots on x-axis show anchor positions\\\">- Dots = anchor positions</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/hid/chartjs-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/hid/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@projectLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'newInstrumentObjectProject\\' onSelectionChange=(action \\'setProject\\' value=\\\"target.value\\\") inputFieldId=\\'project\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.location}} oninput={{action (mut this.newInstrumentObject.location) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCoordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.east}} oninput={{action (mut this.newInstrumentObject.east) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.north}} oninput={{action (mut this.newInstrumentObject.north) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.depth}} oninput={{action (mut this.newInstrumentObject.depth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectAzimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.azimuth}} oninput={{action (mut this.newInstrumentObject.azimuth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAzimuth\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectDip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.dip}} oninput={{action (mut this.newInstrumentObject.dip) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDip\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@levelLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'newInstrumentObjectLevel\\' onSelectionChange=(action \\'setLevel\\' value=\\\"target.value\\\") inputFieldId=\\'level\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectBorehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.borehole}} oninput={{action (mut this.newInstrumentObject.borehole) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectBorehole\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.installedBy}} oninput={{action (mut this.newInstrumentObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.purpose}} oninput={{action (mut this.newInstrumentObject.purpose) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newInstrumentObject.notes}} oninput={{action (mut this.newInstrumentObject.notes) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/hid/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{this.instrumentAnchors.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each this.instrumentAnchors as |anchor|}}<td>{{anchor}}</td>{{/each}}<td>Temperature</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action \\\"setNewTimestampValue\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action \\\"setNewDisplacementValue\\\" key}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} oninput={{action \\\"setTemperatureValue\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/hid/create-new-raw-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div>{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div><hr></td></tr><tr class=\\\"details\\\"><td><h5>Properties:</h5></td></tr><tr class=\\\"details\\\"><td colspan=\\\"2\\\" style=\\\"vertical-align: top; margin-bottom: 1rem;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"channelsNum\\\" class=\\\"col-12 col-form-label\\\">Channels:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'channelsNum\\' isEditable=false}}</td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"coordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=@instrument east=@instrument.east north=@instrument.north depth=@instrument.depth stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"azimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'azimuth\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"dip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'dip\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"borehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'borehole\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'zeroTimestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Active:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument id=\\\"activeCheck\\\" field=\\'active\\'}}</td></tr></tbody></table></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"td_details\\\"></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"add-new-item\\\"></td><td class=\\\"add-new-item\\\"><span {{action \\\"saveInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/hid/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-spatial-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-spatial-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/hid/nvd3-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/hid/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"col\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th>{{#each this.columnSpecs as |spec|}}<th>{{spec.tableLabel}}</th>{{/each}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th></tr></thead><tbody>{{#each this.tableRows as |row|}}<tr><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td>{{#each row.cells as |cell|}}<td>{{cell.value}}</td>{{/each}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td></tr>{{/each}}</tbody></table></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/hid/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Velocity</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/hid/spatial-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">microstrain</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/hid/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"display:flex;flex-direction:column;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div class=\\\"datetime-picker-component\\\"><div style=\\\"margin-right: 5px;\\\" class=\\\"profile-body-row-label-section-label\\\">From:</div></div><input value={{this.selectedDatetime}} style=\\\"margin: 0px;\\\" type=\\\"datetime-local\\\" onchange={{action \\'onDatetimePickerChange\\'}} class=\\\"profile-body-row-label-section-value\\\"><button type=\\\"button\\\" style=\\\"margin-left: 10px;margin-right: 10px;font-size: small;flex-shrink: 0;max-height: 35px;\\\" {{action \\\"searchReading\\\" on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Search Reading</button>{{#if this.isLoading}}<div class=\\\"pulse_loader\\\"></div>{{/if}}</div><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div class=\\\"datetime-picker-component\\\"><div style=\\\"margin-right: 5px;\\\" class=\\\"profile-body-row-label-section-label\\\">Data:</div></div><select onchange={{action \\'onSelectReadingObject\\' value=\\\"target.value\\\"}} style=\\\"min-width: 150px;\\\"><option value=\\\"\\\"></option>{{#each this.readingsArray as |readingObject|}}<option selected={{is-equal readingObject.id this.readingID}} value=\\\"{{readingObject.id}}\\\">{{readingObject.id}}</option>{{/each}}</select></div><div style=\\\"font-size: x-small;margin:0px;\\\" class=\\\"profile-body-row-label-section-value\\\">The returned array is based on chosen datetime +- 10 minutes.</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/influx-readings-with-instrument-id-with-datetime.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"anchor-diagram-container\\\"><div id=\\\"diagramExcavationLabel\\\" class=\\\"anchor-diagram-diagram-excavation-label\\\">Excavation</div><div id=\\\"diagramDrillDirectionLabel\\\" class=\\\"anchor-diagram-diagram-drill-direction-label\\\">v Drill Direction v</div><div style=\\\"display:flex;flex-direction:column;\\\"><div id=\\\"masterAnchorDiagram\\\" class=\\\"anchor-diagram-master-anchor-diagram\\\"><div id=\\\"upperMasterSection\\\" class=\\\"anchor-diagram-master-anchor-diagram-upper-section\\\"></div><div id=\\\"anchorMasterSection\\\" class=\\\"anchor-diagram-master-anchor-diagram-middle-section\\\"></div><div id=\\\"lowerMasterSection\\\" class=\\\"anchor-diagram-master-anchor-diagram-lower-section\\\"></div></div>{{#if this.showHATHACLabels}}<div id=\\\"diagramHeadToeLabels\\\" class=\\\"anchor-diagram-head-toe-labels-section\\\"><div id=\\\"diagramHeadLabel\\\" class=\\\"anchor-diagram-head-label\\\">HEAD</div><div id=\\\"diagramToeLabel\\\" class=\\\"anchor-diagram-toe-label\\\">TOE</div></div>{{/if}}</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/instrument-anchors-diagram.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if @isEditable}}\\n    <BsDropdown as |dd|>\\n        <dd.button>\\n            {{#if inst_id}}\\n                {{inst_id}}\\n            {{else}}\\n                Select\\n            {{/if}}\\n            <span class=\\\"caret\\\"></span>\\n        </dd.button>\\n        <dd.menu as |ddm|>\\n            {{#each @instruments as |instrument|}}\\n                    <a class=\\\"dropdown-item\\\" onclick={{action \\\"setID\\\" instrument dd.closeDropdown}}>{{instrument.id}}</a>\\n            {{/each}}\\n        </dd.menu>\\n    </BsDropdown>\\n{{else}}\\n    {{@instrument.id}}\\n{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/instrument-drop-down.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%;\\\" hidden id=\\\"instrumentListError\\\"><tr class=\\\"details\\\"><td colspan=\\\"6\\\" style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"td_details error\\\"><label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You do not have permission to delete an instrument.</label></td></tr></table><table class=\\\"table table-striped responsive-table\\\"><thead><tr>{{sortable-table-header title=\\'Instrument ID\\' sortProperty=\\'id\\' selectedSortProperty=this.ordering sort=@sortBy}}{{sortable-table-header title=\\'Name\\' sortProperty=\\'name\\' selectedSortProperty=this.ordering sort=@sortBy}}{{sortable-table-header title=\\'Type\\' sortProperty=\\'instrumentType\\' selectedSortProperty=this.ordering sort=@sortBy}}{{sortable-table-header title=\\'Level\\' sortProperty=\\'level\\' selectedSortProperty=this.ordering sort=@sortBy}}{{sortable-table-header title=\\'Project\\' sortProperty=\\'project\\' selectedSortProperty=this.ordering sort=@sortBy}}{{sortable-table-header title=\\'Location\\' sortProperty=\\'location\\' selectedSortProperty=this.ordering sort=@sortBy}}{{#if this.licenceIsValid}}<th id=\\\"add-new\\\" class=\\\"add-new-item\\\"><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"><FaIcon @icon=\\\"plus\\\" /> New</span></th>{{/if}}{{#if (not this.licenceIsValid)}}<th id=\\\"add-new\\\" class=\\\"add-new-item\\\"></th>{{/if}}</tr></thead><tbody>{{#each @instruments as |tableRow|}}<tr><td><LinkTo @route=\\\"edit-instrument\\\" @model={{tableRow.id}}>{{tableRow.id}}</LinkTo></td><td>{{tableRow.name}}</td><td>{{tableRow.instrumentType.title}}</td><td>{{tableRow.level}}</td><td>{{tableRow.project}}</td><td>{{tableRow.location}}</td><td class=\\\"crud-td\\\"><span {{action \\'toggleRowDeleteConfirmationDialog\\' tableRow.id on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span>{{#unless (is-instrument-anchors-set tableRow.anchors)}}<span class=\\\"crud warning\\\"><BsTooltip @title=\\\"Instrument anchors are not set!\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"exclamation-triangle\\\" /></span>{{/unless}}{{#unless (is-stroke-length-required-and-set tableRow)}}<span class=\\\"crud warning\\\"><BsTooltip @title=\\\"Instrument Stroke Length is not set!\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"exclamation-triangle\\\" /></span>{{/unless}}<div class=\\\"delete-confirmation {{active-class (get this.isRowDeleteConfirmationDialog tableRow.id)}}\\\"><span class=\\\"crud-delete-message\\\"><span><small>All associated data</small><small>will be deleted too!</small></span></span><span {{action \\'remove\\' this.model.instruments tableRow on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-confirm\\\">Yes</span><span {{action \\'toggleRowDeleteConfirmationDialog\\' tableRow.id on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-cancel\\\">No</span></div></td></tr>{{/each}}</tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/instruments-list.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleImportKeyForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td colspan=\\\"3\\\">Upload licence key file</td><th class=\\\"add-new-item\\\"><span {{action \\\"importKey\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Upload</span></th></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newKeyFile\\\" class=\\\"col-12 col-form-label\\\">File:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{key-upload isSubmitting=this.isSubmitting errorHappened=\\\"errorHappened\\\"}}</div></div></td><td width=\\\"50px\\\" colspan=\\\"1\\\"></td></tr></tbody></table>{{#if this.loading}}<div class=\\\"pulse_loader\\\"></div>{{/if}}</td></tr>{{#if this.isVisibleError}}<tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details error\\\"><label for=\\\"error_message\\\" class=\\\"col-12 col-form-label\\\">There was an error importing the licence key data.</label></td></tr>{{/if}}</tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/key-import-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{yield}}', { moduleName: 'geotechnical-data-platform-new/templates/components/key-upload.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Settings\\\"}}{{outlet}}<div class=\\\"container-fluid\\\"><div class=\\\"mt-1\\\"><h4>Log Viewer</h4></div><table class=\\\"table table-striped responsive-table settings-table\\\"><thead><tr><th>ID</th><th>Creation Date/Time</th><th>Error Type</th><th>Device Type</th><th>Device ID</th><th>Message</th></tr></thead><tbody>{{#each @logViewer as |log|}}<tr><td data-title=\\\"{{log.id}}\\\" class=\\\"noWrap\\\"><label for=\\\"id\\\" class=\\\"col-12 col-form-label\\\">{{log.id}}</label></td><td data-title=\\\"{{log.creationDatetime}}\\\" class=\\\"noWrap\\\"><label for=\\\"creationDatetime\\\" class=\\\"col-12 col-form-label\\\">{{moment-format log.creationDatetime \\'DD-MM-YYYY HH:mm\\'}}</label></td><td>{{single-save-lookup selectOptions=@errorTypeLookups style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" object=log.errorType parentObject=log field=\\'value\\' fieldText=\\'Error Type\\' valueSource=\\'id\\' inputFieldId=\\'errorType\\' isEditable=false}}</td><td data-title=\\\"{{log.deviceType}}\\\" class=\\\"noWrap\\\"><label for=\\\"type\\\" class=\\\"col-12 col-form-label\\\">{{log.deviceType}}</label></td><td data-title=\\\"{{log.deviceId}}\\\" class=\\\"noWrap\\\"><label for=\\\"type\\\" class=\\\"col-12 col-form-label\\\">{{log.deviceId}}</label></td><td data-title=\\\"{{log.message}}\\\"><label for=\\\"type\\\" class=\\\"col-12 col-form-label\\\">{{log.message}}</label></td></tr>{{/each}}</tbody></table><div class=\\\"pb-1\\\"></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/log-viewer-list.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:450px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-spatial\\\"></canvas></div></div><div style=\\\"min-height:24px;padding:4px 8px;font-size:12px;border:1px solid #ddd;border-radius:4px;background:#fafafa;margin-top:4px;overflow-x:auto;white-space:nowrap;\\\" class=\\\"spatial-info-panel\\\"><span style=\\\"color:#999;\\\">Hover over chart to see values</span></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;margin-top:4px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Each line represents one reading timestamp\\\">- Lines = timestamps</div><div title=\\\"Light/thin lines are older readings, dark/thick lines are the most recent\\\">- Light = older, Dark = newer</div><div title=\\\"Hover over the chart to see values in the panel below\\\">- Hover to see values</div><div title=\\\"Colored dots on x-axis show anchor positions\\\">- Dots = anchor positions</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/micro/chartjs-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/micro/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@projectLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'newInstrumentObjectProject\\' onSelectionChange=(action \\'setProject\\' value=\\\"target.value\\\") inputFieldId=\\'project\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.location}} oninput={{action (mut this.newInstrumentObject.location) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCoordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.east}} oninput={{action (mut this.newInstrumentObject.east) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.north}} oninput={{action (mut this.newInstrumentObject.north) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.depth}} oninput={{action (mut this.newInstrumentObject.depth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectAzimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.azimuth}} oninput={{action (mut this.newInstrumentObject.azimuth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAzimuth\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectDip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.dip}} oninput={{action (mut this.newInstrumentObject.dip) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDip\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@levelLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'newInstrumentObjectLevel\\' onSelectionChange=(action \\'setLevel\\' value=\\\"target.value\\\") inputFieldId=\\'level\\'}}</div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectStrokeLength\\\" class=\\\"col-12 col-form-label bold\\\">Stroke Length (μm):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.strokeLength}} oninput={{action (mut this.newInstrumentObject.strokeLength) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectStrokeLength\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.installedBy}} oninput={{action (mut this.newInstrumentObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.purpose}} oninput={{action (mut this.newInstrumentObject.purpose) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newInstrumentObject.notes}} oninput={{action (mut this.newInstrumentObject.notes) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/micro/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{this.instrumentAnchors.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each this.instrumentAnchors as |anchor|}}<td>{{anchor}}</td>{{/each}}<td>Temperature</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action \\\"setNewTimestampValue\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action \\\"setNewDisplacementValue\\\" key}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} oninput={{action \\\"setTemperatureValue\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/micro/create-new-raw-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"width: 100%;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:10px\\\"><div style=\\\"margin-right:10px\\\"><div class=\\\"inst-buttons\\\"><span {{action \\\"viewData\\\" @instrument.id }} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div></div><div style=\\\"margin-right:10px\\\">{{#if @hasGraphs}}<div class=\\\"inst-buttons\\\"><span {{action \\\"tGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div></div><div style=\\\"text-decoration:underline;margin-bottom:10px; cursor:pointer;\\\" onClick={{action \\\"cycleAlertsListVisibility\\\"}}><h5>Alerts:</h5></div>{{#if this.isAlertsListVisible}}{{#if this.licenceIsValid}}<div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content: space-between;\\\"><div class=\\\"action-bar-section\\\"><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"table-legend\\\"}} class=\\\"action-bar-head-body\\\">Table Legend</div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"actions\\\"}} class=\\\"action-bar-head-body\\\">Actions</div></div></div>{{/if}}<div style=\\\"margin:15px\\\">{{#if (is-equal this.activeActionTab \\\"table-legend\\\")}}{{table-legend-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"actions\\\")}}{{actions-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"batch-actions\\\")}}{{batch-actions-alerts batchSelectedAlertsID=this.batchSelectedAlertsID alerts=@model.alerts isShowBatchConfirmationModal=this.isShowBatchConfirmationModal typeBatch=this.typeBatch batchWarningMessage=this.batchWarningMessage}}{{/if}}</div><div style=\\\"margin-bottom:10px\\\">{{alerts-list licenceIsValid=this.licenceIsValid allowBatchSelect=false batchSelectedAlertsID=this.batchSelectedAlertsID alerts=this.alertsList globalDatetimeFormat=@globalDatetimeFormat ordering=this.ordering sortBy=(action \\'sortBy\\')}}</div><div style=\\\"display:flex;justify-content: flex-end;\\\">{{#each this.paginationSearchConfig.alertProfilePaginationList as |page|}}<button type=\\\"button\\\" {{action \\'jumpToPage\\' page on=\\\"click\\\"}} style=\\\"border-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}};color: {{if (eq page \\'...\\') \\'black\\' \\'white\\'}};margin-right: 10px;font-size:small;padding: 5px;background-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}}\\\" class=\\\"btn btn-primary\\\">{{page}}</button>{{/each}}</div>{{/if}}<div style=\\\"width: 100%;\\\"><div><h5>Properties:</h5></div><div style=\\\"width: 100%;display:flex;flex-direction:row;\\\"><div style=\\\"width: 50%;display:flex;flex-direction:column;\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"channelsNum\\\" class=\\\"col-12 col-form-label\\\">Channels:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'channelsNum\\' isEditable=false}}</td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"coordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=@instrument east=@instrument.east north=@instrument.north depth=@instrument.depth stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"azimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'azimuth\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"dip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'dip\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></div><div style=\\\"width: 50%;display:flex;flex-direction:column;\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'zeroTimestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"strokeLength\\\" class=\\\"col-12 col-form-label\\\">Stroke Length (μm):</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'strokeLength\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Active:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument id=\\\"activeCheck\\\" field=\\'active\\'}}</td></tr></tbody></table></div></div><div style=\\\"padding: 0.2rem;font-weight:bold;\\\">Anchor Diagram:</div><div style=\\\"padding:10px;width: 100%;\\\">{{#if this.isEditAnchorDiagram}}<div style=\\\"display:flex;flex-direction:row;align-items:center\\\"><div style=\\\"width: 100%;\\\">{{instrument-anchors-diagram showHATHACLabels=false style=\\\"width: 100%;\\\" inputMode=\\\"input\\\" initialValues=this.anchorDiagramInputInitalValue instrumentID=@instrument.id headAt=@instrument.headAt.id instrumentTypeText=@instrument.instrumentType.title channels=@instrument.channelsNum onCustomNumberInput=(action \\\"updateChannelInput\\\")}}</div><div style=\\\"margin-right:10px;margin-left:10px;cursor:pointer;\\\" onClick={{action \\\"saveAnchors\\\"}}><FaIcon @icon=\\\"check\\\" /></div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleEditAnchorDiagram\\\"}}><FaIcon @icon=\\\"times\\\" /></div></div>{{else}}<div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleEditAnchorDiagram\\\"}}>{{instrument-anchors-diagram showHATHACLabels=false style=\\\"width: 100%;\\\" inputMode=\\\"label\\\" initialValues=this.anchorDiagramLabelInitalValue instrumentID=@instrument.id headAt=@instrument.headAt.id instrumentTypeText=@instrument.instrumentType.title channels=@instrument.channelsNum}}</div>{{/if}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/micro/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-spatial-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-spatial-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/micro/nvd3-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/micro/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"table-responsive\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th>{{#each this.columnSpecs as |spec|}}<th>{{spec.tableLabel}}</th>{{/each}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th></tr></thead><tbody>{{#each this.tableRows as |row|}}<tr><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td>{{#each row.cells as |cell|}}<td>{{cell.value}}</td>{{/each}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td></tr>{{/each}}</tbody></table></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/micro/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Velocity</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/micro/spatial-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Velocity</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'acceleration-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Acceleration</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/micro/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/multiDExto/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><label>WARNING Before you add dExtos, make sure each of them have anchor information applied!</label></tr></tbody><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" class=\\\"form-control\\\"></div></div></td><td style=\\\"padding-bottom: 5rem; padding-bottom: 5rem;\\\"></td></tr><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\"></div></div></div></td><td style=\\\"padding-bottom: 5rem; padding-bottom: 5rem;\\\"></td></tr><tr><td><label style=\\\"font-weight:bold !important;\\\" class=\\\"col-12 col-form-label\\\">dExto(s): </label></td><td><div class=\\\"col-13\\\">{{searchable-select content=this.instruments on-search=(action \\'onDropdownSearch\\') id=\\\"selectedID\\\" selected=\\\"\\\" sortBy=\\\"title\\\" prompt=\\\"Select IDs\\\" searchPrompt=\\\"Filter\\\" isClearable=true on-change=(action \\\"setID\\\")}}</div></td><td id=\\\"add-exto\\\" colspan=\\\"5\\\" class=\\\"add-new-item\\\"><span {{action \\\"searchForExto\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Search </span></td>{{#if this.loading}}<td><div style=\\\"width: auto; margin-left: 10px; margin-bottom: 10px;\\\" class=\\\"pulse_loader \\\"></div></td>{{/if}}<td style=\\\"padding-bottom: 5rem;\\\"></td></tr></tbody></table><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label class=\\\"col-12 col-form-label\\\">Selected dExtos:</label></td><td>{{this.selectedInstruments.length}}</td><td><label class=\\\"col-12 col-form-label\\\">of 2.</label></td></tr></tbody></table><table style=\\\"width: 100%;\\\" class=\\\"row_details form-inline\\\"><tbody>{{selected-dExtos dExtoList=this.selectedInstruments}}</tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"resetInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Reset</span><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/multiDExto/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if (is-equal @key 0)}}<thead><tr><th>Date</th>{{#each (arrayAt anchorDistances slaveExtoIndex) as |anchor index|}}<th>{{anchor}}</th>{{/each}}<th>Temperature</th></tr></thead>{{/if}}<tbody><td data-title=\\\"Date\\\" class=\\\"noWrap\\\">{{moment-format displacementValueObject.id \\'YYYY-MM-DD HH:mm:ss\\'}}</td>{{#each getSpecificRowData as |key value|}}<td style=\\\"width: 65px;\\\">{{key}}</td>{{/each}}</tbody>', { moduleName: 'geotechnical-data-platform-new/templates/components/multiDExto/dExto-children-table-row.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%;\\\" hidden id=\\\"gatewayChildListError\\\"><tr class=\\\"details\\\"><td colspan=\\\"6\\\" style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"td_details error\\\"><label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You do not have permission to delete a gateway.</label></td></tr></table><table class=\\\"table table-striped responsive-table\\\">{{#each @displaceData as |displacementObj index|}}{{multiDExto/dExto-children-table-row slaveExtoIndex=@slaveExtoIndex anchorDistances=anchorDistances key=index multiExtoInstr=@instrument currentExtoInstr=@currentExtoInstr temperatureValuesModel=@temperatureData displacementValueObject=displacementObj}}{{/each}}</table>', { moduleName: 'geotechnical-data-platform-new/templates/components/multiDExto/dExto-children.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div></div></td></tr><tr class=\\\"details\\\"><td colspan=\\\"6\\\"><hr></td></tr><tr class=\\\"details\\\"><td colspan=\\\"6\\\"><h5>Properties:</h5></td></tr><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\') id=\\\"newInstrumentObjectName\\\"}}</div></div></td><td style=\\\"padding-bottom: 5rem; padding-bottom: 5rem;\\\"></td></tr><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'zeroTimestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label class=\\\"col-12 col-form-label\\\">Selected dExtos:</label></td><td>{{this.selectedInstruments.length}}</td><td> of 2. The dExtos are in order, starting from closest to the wall.</td></tr></tbody></table><table style=\\\"width: 100%;\\\" class=\\\"row_details form-inline\\\"><tbody>{{selected-dExtos dExtoList=this.selectedInstruments}}</tbody></table></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"add-new-item\\\"></td><td class=\\\"add-new-item\\\"><span {{action \\\"saveInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/multiDExto/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"600\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/multiDExto/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings: </a><a>{{@displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{#if this.isVisibleCreateNewForm}}<div class=\\\"row\\\"><div class=\\\"col details newRecordDetails\\\">{{pack/create-new-raw-data-value-form isVisibleCreateNewForm=this.isVisibleCreateNewForm isVisibleReadingCreated=this.isVisibleReadingCreated instrumentId=@instrument.id instrumentType=@instrument.instrumentType instrumentAnchors=this.anchorDistances dateFormat=\\'YYYY-MM-DD HH:mm:ss\\' setProp=this.setProp}}</div></div>{{/if}}{{#if this.isVisibleReadingCreated}}<div class=\\\"row\\\"><div class=\\\"col\\\">Reading Added!</div></div>{{/if}}<table class=\\\"table table-striped responsive-table\\\"><thead><tr style=\\\"min-height:175px;\\\"><th style=\\\"justify-content: center;\\\">Index</th><th style=\\\"justify-content: center;\\\">dExto ID</th><th style=\\\"justify-content: center;\\\">Head At</th></tr></thead><tbody>{{#each this.selectedInstruments as |exto index|}}<tr><td style=\\\"width:20px;\\\">{{exto.id}}</td><td>{{#link-to \\\"edit-instrument\\\" exto.instrumentID}}{{exto.instrumentID}}{{/link-to}}</td><td>{{exto.position}}</td></tr><tr><td></td><td colspan=\\\"7\\\">{{multiDExto/dExto-children slaveExtoIndex=index anchorDistances=this.anchorDistances temperatureData=@temperatureData displaceData=@displacementData currentExtoInstr=exto instrument=@instrument}}</td></tr>{{/each}}</tbody><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/multiDExto/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Velocity</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'acceleration-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Acceleration</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/multiDExto/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"font-size:25px;font-weight: 600;\\\">Add-ons</div>{{#if this.isMasterUser}}<div style=\\\"padding:10px\\\"><div class=\\\"my-profile-sidebar-home-subtitle\\\">Microsoft AD Configuration</div><div class=\\\"my-profile-sidebar-home-row-section\\\"><div class=\\\"my-profile-sidebar-home-row-label-section\\\"><div class=\\\"my-profile-sidebar-home-row-label\\\">Client ID</div><div onClick={{action \\'updateIsEditingProperty\\' \\'client_id\\'}} class=\\\"my-profile-sidebar-home-row-edit\\\">Edit</div></div>{{#if (is-equal this.isEditingClientID true)}}<div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center;\\\"><td style=\\\"margin-right:10px;width: 100%;\\\" class=\\\"input\\\"><input id=\\\"clientIDTextbox\\\" type=\\\"text\\\" value={{this.getClientID}} class=\\\"form-control\\\"></td><div onClick={{action \\\"updateProperty\\\" \\\"clientIDTextbox\\\" \\\"client_id\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Save</div></div>{{else}}<div class=\\\"my-profile-sidebar-home-row-value\\\">{{this.getClientID}}</div>{{/if}}<div class=\\\"my-profile-sidebar-home-row-divider\\\"></div></div><div class=\\\"my-profile-sidebar-home-row-section\\\"><div class=\\\"my-profile-sidebar-home-row-label-section\\\"><div class=\\\"my-profile-sidebar-home-row-label\\\">Tenant ID</div><div onClick={{action \\'updateIsEditingProperty\\' \\'tenant_id\\'}} class=\\\"my-profile-sidebar-home-row-edit\\\">Edit</div></div>{{#if (is-equal this.isEditingTenantID true)}}<div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center;\\\"><td style=\\\"margin-right:10px;width: 100%;\\\" class=\\\"input\\\"><input id=\\\"tenantIDTextbox\\\" type=\\\"text\\\" value={{this.getTenantID}} class=\\\"form-control\\\"></td><div onClick={{action \\\"updateProperty\\\" \\\"tenantIDTextbox\\\" \\\"tenant_id\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Save</div></div>{{else}}<div class=\\\"my-profile-sidebar-home-row-value\\\">{{this.getTenantID}}</div>{{/if}}<div class=\\\"my-profile-sidebar-home-row-divider\\\"></div></div><div class=\\\"my-profile-sidebar-home-row-section\\\"><div class=\\\"my-profile-sidebar-home-row-label-section\\\"><div class=\\\"my-profile-sidebar-home-row-label\\\">Redirect URI</div><div onClick={{action \\'updateIsEditingProperty\\' \\'redirect_uri\\'}} class=\\\"my-profile-sidebar-home-row-edit\\\">Edit</div></div>{{#if (is-equal this.isEditingRedirectURI true)}}<div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center;\\\"><td style=\\\"margin-right:10px;width: 100%;\\\" class=\\\"input\\\"><input id=\\\"redirectURITextbox\\\" type=\\\"text\\\" value={{this.getRedirectURI}} class=\\\"form-control\\\"></td><div onClick={{action \\\"updateProperty\\\" \\\"redirectURITextbox\\\" \\\"redirect_uri\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Save</div></div>{{else}}<div class=\\\"my-profile-sidebar-home-row-value\\\">{{this.getRedirectURI}}</div>{{/if}}<div class=\\\"my-profile-sidebar-home-row-divider\\\"></div></div><div class=\\\"my-profile-sidebar-home-row-section\\\"><div class=\\\"my-profile-sidebar-home-row-label-section\\\"><div class=\\\"my-profile-sidebar-home-row-label\\\">Token URL</div><div onClick={{action \\'updateIsEditingProperty\\' \\'token_url\\'}} class=\\\"my-profile-sidebar-home-row-edit\\\">Edit</div></div>{{#if (is-equal this.isEditingTokenURL true)}}<div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center;\\\"><td style=\\\"margin-right:10px;width: 100%;\\\" class=\\\"input\\\"><input id=\\\"tokenURLTextbox\\\" type=\\\"text\\\" value={{this.getTokenURL}} class=\\\"form-control\\\"></td><div onClick={{action \\\"updateProperty\\\" \\\"tokenURLTextbox\\\" \\\"token_url\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Save</div></div>{{else}}<div class=\\\"my-profile-sidebar-home-row-value\\\">{{this.getTokenURL}}</div>{{/if}}<div class=\\\"my-profile-sidebar-home-row-divider\\\"></div></div><div class=\\\"my-profile-sidebar-home-row-section\\\"><div class=\\\"my-profile-sidebar-home-row-label-section\\\"><div class=\\\"my-profile-sidebar-home-row-label\\\">Client Secret</div></div><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center;\\\"><td style=\\\"margin-right:10px;width: 100%;\\\" class=\\\"input\\\"><input id=\\\"clientSecretTextbox\\\" type=\\\"text\\\" value={{this.getClientSecret}} class=\\\"form-control\\\"></td><div onClick={{action \\\"updateProperty\\\" \\\"clientSecretTextbox\\\" \\\"client_secret\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Save</div></div><div class=\\\"my-profile-sidebar-home-row-divider\\\"></div></div><div class=\\\"my-profile-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; justify-content: space-evenly;\\\"><div onClick={{action \\\"testMicrosoftADConnection\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Test Microsoft AD Connection</div><div onClick={{action \\\"clearMicrosoftADTestMessages\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Clear Test Messages</div></div>{{#if (is-equal this.isShowMicrosoftADTestMessage true)}}<div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; justify-content: center;\\\"><div class=\\\"my-profile-sidebar-home-row-value\\\">{{this.microsoftADTestMessages}}</div></div>{{/if}}<div class=\\\"my-profile-sidebar-home-row-divider\\\"></div></div></div>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/my-profile-sidebar-addon.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"font-size:25px;font-weight: 600;display: flex;flex-direction: row;align-items: center;\\\">Contacts{{#if this.isLoading}}<div style=\\\"margin-left:10px\\\" class=\\\"pulse_loader\\\"></div>{{/if}}</div><div style=\\\"display:flex; flex-direction:row; padding:10px; gap:15px; align-items:flex-start;\\\"><div style=\\\"flex: 0 0 200px; border-right:1.5px solid #d5d5d5; padding-right:10px;\\\"><div style=\\\"display:flex; flex-direction:row; align-items:center; justify-content:space-between; margin-bottom:8px;\\\"><div style=\\\"font-size:small; font-weight:600; color:#666;\\\">GROUPS</div><div {{action \\'newGroup\\' on=\\\"click\\\"}} style=\\\"cursor:pointer; color:blue; font-size:smaller; text-decoration:underline;\\\">Add Group</div></div><div {{action \\'selectGroupFilter\\' \\'ALL\\' on=\\\"click\\\"}} style={{this.allRowStyle}} class=\\\"contacts-group-row\\\"><div style=\\\"display:flex; justify-content:space-between; padding:6px 8px; cursor:pointer; border-radius:4px;\\\"><div style=\\\"font-size:small;\\\">All Contacts</div><div style=\\\"font-size:small; color:#888;\\\">{{this.contactList.length}}</div></div></div><div {{action \\'selectGroupFilter\\' \\'UNGROUPED\\' on=\\\"click\\\"}} style={{this.ungroupedRowStyle}} class=\\\"contacts-group-row\\\"><div style=\\\"display:flex; justify-content:space-between; padding:6px 8px; cursor:pointer; border-radius:4px;\\\"><div style=\\\"font-size:small;\\\">Ungrouped</div><div style=\\\"font-size:small; color:#888;\\\">{{this.ungroupedCount}}</div></div></div><div style=\\\"height:2px; background:#d5d5d5; margin:6px 0;\\\"></div>{{#each this.displayGroups as |g|}}<div style={{g._rowStyle}} class=\\\"contacts-group-row\\\"><div style=\\\"display:flex; align-items:center; justify-content:space-between; padding:6px 8px; cursor:pointer; border-radius:4px;\\\"><div {{action \\'selectGroupFilter\\' g.id on=\\\"click\\\"}} style=\\\"font-size:small; flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;\\\">{{g.name}}</div><div style=\\\"display:flex; align-items:center; gap:8px;\\\"><div style=\\\"font-size:small; color:#888;\\\">{{g.contact_count}}</div><div {{action \\'renameGroup\\' g on=\\\"click\\\"}} style=\\\"cursor:pointer; color:blue;\\\" title=\\\"Rename group\\\"><FaIcon @icon=\\\"pen\\\" style=\\\"font-size:11px;color:#F90\\\" /></div><div {{action \\'deleteGroup\\' g on=\\\"click\\\"}} style=\\\"cursor:pointer; color:red;\\\" title=\\\"Delete group\\\"><FaIcon @icon=\\\"trash\\\" style=\\\"font-size:11px;\\\" /></div></div></div></div>{{/each}}</div><div style=\\\"flex:1; min-width:0;\\\"><div style=\\\"display:flex; flex-direction:row; align-items:center; justify-content:space-between; margin-bottom:8px; gap:10px;\\\"><input type=\\\"text\\\" value={{this.searchText}} oninput={{action \\'updateSearch\\'}} placeholder=\\\"Search name, email, phone…\\\" style=\\\"flex:1; max-width:320px; font-size:small; padding:4px 8px;\\\"><div {{action \\'openAddContactModal\\' on=\\\"click\\\"}} style=\\\"cursor:pointer; background:#2d6cdf; color:white; font-size:small; padding:5px 12px; border-radius:4px; white-space:nowrap;\\\">Add Contact</div></div><table style=\\\"border-width: 0px;margin-top:6px\\\" class=\\\"table table-striped table-bordered\\\"><thead><tr><th style=\\\"width:30px;\\\"><input type=\\\"checkbox\\\" checked={{this.allDisplayedSelected}} {{action \\'toggleSelectAll\\' on=\\\"change\\\"}}></th><th {{action \\'sortBy\\' \\'last_name\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Name{{#if (eq this.sortKey \\'last_name\\')}}{{#if this.sortAsc}} ^{{else}} v{{/if}}{{/if}}</th><th {{action \\'sortBy\\' \\'phone_number\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Phone{{#if (eq this.sortKey \\'phone_number\\')}}{{#if this.sortAsc}} ^{{else}} v{{/if}}{{/if}}</th><th {{action \\'sortBy\\' \\'email\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Email{{#if (eq this.sortKey \\'email\\')}}{{#if this.sortAsc}} ^{{else}} v{{/if}}{{/if}}</th><th {{action \\'sortBy\\' \\'group\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Group{{#if (eq this.sortKey \\'group\\')}}{{#if this.sortAsc}} ^{{else}} v{{/if}}{{/if}}</th><th style=\\\"font-size: small;font-weight: normal;\\\">Actions</th></tr></thead><tbody>{{#each this.displayedContacts as |contact|}}<tr><td style=\\\"width:30px;\\\"><input type=\\\"checkbox\\\" checked={{contact._selected}} {{action \\'toggleContact\\' contact on=\\\"change\\\"}}></td><td style=\\\"font-size: small;\\\">{{contact.first_name}} {{contact.last_name}}{{#if contact.is_opted_out}}<span style=\\\"margin-left:6px; color:#c0392b; font-size:11px;\\\" title=\\\"Opted out of SMS\\\">(opted out)</span>{{/if}}</td><td style=\\\"font-size: small;\\\">{{contact.phone_number}}</td><td style=\\\"font-size: small;\\\">{{contact.email}}</td><td style=\\\"font-size: small;\\\">{{contact.group_name}}</td><td style=\\\"width: 130px;\\\"><div style=\\\"width: 130px; overflow-x: auto;display:flex;\\\"><div style=\\\"overflow-x: auto;display:inline-flex; min-width: max-content; gap:15px; cursor: pointer;color: blue;text-decoration: underline;font-size: smaller;\\\"><div {{action \\'openEditContactModal\\' contact on=\\\"click\\\"}}>Edit</div></div><div style=\\\"overflow-x: auto;display:inline-flex; min-width: max-content; gap:15px; cursor: pointer;color: red;text-decoration: underline;font-size: smaller; margin-left:15px;\\\"><div {{action \\'deleteContact\\' contact on=\\\"click\\\"}}>Delete</div></div></div></td></tr>{{/each}}</tbody></table>{{#if this.hasSelection}}<div style=\\\"display:flex; flex-direction:row; align-items:center; gap:12px; padding:8px 12px; background:#f4f7ff; border:1px solid #d6e0ff; border-radius:4px; margin-top:6px;\\\"><div style=\\\"font-size:small; font-weight:600;\\\">{{this.selectionCount}} selected</div>{{#if this.isSelectionGrouped}}<select disabled style=\\\"font-size:small; padding:3px 6px; color:#444;\\\"><option selected>{{this.selectionGroupName}}</option></select><div {{action \\'ungroupSelected\\' on=\\\"click\\\"}} style=\\\"cursor:pointer; color:blue; font-size:small; text-decoration:underline;\\\">Ungroup</div>{{else}}<select id=\\\"batchGroupSelect\\\" style=\\\"font-size:small; padding:3px 6px;\\\"><option value=\\\"\\\">Add to group…</option>{{#each this.groupList as |g|}}<option value={{g.id}}>{{g.name}}</option>{{/each}}<option value=\\\"__NEW__\\\">+ New group…</option></select><div {{action \\'groupSelected\\' on=\\\"click\\\"}} style=\\\"cursor:pointer; color:blue; font-size:small; text-decoration:underline;\\\">Group</div>{{/if}}<div {{action \\'clearSelection\\' on=\\\"click\\\"}} style=\\\"cursor:pointer; color:#888; font-size:small; text-decoration:underline; margin-left:auto;\\\">Clear</div></div>{{/if}}</div>{{#if this.isEditModalOpen}}{{edit-my-profile-contact-modal selectedContact=this.selectedContact groupList=this.groupList title=this.editTitle closeModal=(action \\'closeContactModal\\') saveModal=(action \\'saveContact\\')}}{{/if}}{{#if this.isGroupModalOpen}}{{edit-my-profile-group-modal selectedGroup=this.selectedGroup title=this.groupModalTitle closeModal=(action \\'closeGroupModal\\') saveModal=(action \\'saveGroup\\')}}{{/if}}</div>', { moduleName: 'geotechnical-data-platform-new/templates/components/my-profile-sidebar-contacts.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"font-size:25px;font-weight: 600;display: flex;flex-direction: row;align-items: center;\\\">Contractors{{#if this.isLoading}}<div style=\\\"margin-left:10px\\\" class=\\\"pulse_loader\\\"></div>{{/if}}</div>{{#if this.isYieldPointSupervisor}}<div style=\\\"padding:0 10px; display:flex; justify-content:flex-end;\\\"><div {{action \\'openAddContractorModal\\' on=\\\"click\\\"}} style=\\\"cursor:pointer; background:#2d6cdf; color:white; font-size:small; padding:5px 12px; border-radius:4px; white-space:nowrap; margin-top:10px;\\\">+ Add Contractor</div></div>{{/if}}<div style=\\\"padding:10px\\\"><table style=\\\"border-width: 0px;margin-top:10px\\\" class=\\\"table table-striped table-bordered\\\"><thead><tr><th id=\\\"id\\\" {{action \\'columnCycleOrdering\\' \\'id\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">ID</th><th id=\\\"company_name\\\" {{action \\'columnCycleOrdering\\' \\'company_name\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Company</th><th id=\\\"code\\\" {{action \\'columnCycleOrdering\\' \\'code\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Code</th><th id=\\\"is_internal\\\" {{action \\'columnCycleOrdering\\' \\'is_internal\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Is Internal</th><th id=\\\"created_at\\\" {{action \\'columnCycleOrdering\\' \\'created_at\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Created At</th><th style=\\\"font-size: small;font-weight: normal;\\\">Actions</th></tr></thead><tbody>{{#each this.companyList as |company|}}<tr><td style=\\\"font-size: small;\\\">{{company.id}}</td><td style=\\\"font-size: small;\\\">{{company.company_name}}</td><td style=\\\"font-size: small;\\\">{{company.code}}</td><td style=\\\"font-size: small;\\\">{{#if company.is_internal}}<FaIcon style=\\\"color:green\\\" @icon=\\\"check\\\" />       {{else}}<FaIcon style=\\\"color:red\\\" @icon=\\\"times\\\" />{{/if}}</td><td style=\\\"font-size: small;\\\">{{company.created_at}}</td><td style=\\\"width: 130px;\\\">{{#if this.isYieldPointSupervisor}}<div style=\\\"width: 130px; overflow-x: auto;display:flex;\\\"><div style=\\\"width: 50px; overflow-x: auto;display:inline-flex; min-width: max-content; gap:15px; cursor: pointer;color: blue;text-decoration: underline;font-size: smaller;\\\"><div {{action \\'openEditContractorModal\\' company on=\\\"click\\\"}}>Edit</div></div><div style=\\\"width: 50px; overflow-x: auto;display:inline-flex; min-width: max-content; gap:15px; cursor: pointer;color: red;text-decoration: underline;font-size: smaller;\\\"><div {{action \\'deleteContractor\\' company on=\\\"click\\\"}}>Delete</div></div></div>{{/if}}</td></tr>{{/each}}</tbody>{{#if this.isEditModalOpen}}{{edit-my-profile-contractors-modal parentUser=this.userProfileService selectedContactorCompany=this.selectedContactorCompany title=this.editTitle closeModal=(action \\'closeEditUserModal\\') saveModal=(action \\'saveUserEdits\\')}}{{/if}}</table></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/my-profile-sidebar-contractors.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"font-size:25px;font-weight: 600;\\\">My Profile</div><div style=\\\"padding:10px\\\"><div class=\\\"my-profile-sidebar-home-subtitle\\\">Personal Info</div><div class=\\\"my-profile-sidebar-home-row-section\\\"><div class=\\\"my-profile-sidebar-home-row-label-section\\\"><div class=\\\"my-profile-sidebar-home-row-label\\\">First Name</div><div onClick={{action \\'updateIsEditingProperty\\' \\'firstName\\'}} class=\\\"my-profile-sidebar-home-row-edit\\\">Edit</div></div>{{#if (is-equal this.isEditingFirstName true)}}<div style=\\\"width:50%;display:flex;flex-direction:row;align-items:center;\\\"><td style=\\\"margin-right:10px\\\" class=\\\"input\\\"><input id=\\\"firstNameTextbox\\\" type=\\\"text\\\" value={{this.getFirstName}} class=\\\"form-control\\\"></td><div onClick={{action \\\"updateProperty\\\" \\\"firstNameTextbox\\\" \\\"first_name\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Save</div></div>{{else}}<div class=\\\"my-profile-sidebar-home-row-value\\\">{{this.getFirstName}}</div>{{/if}}<div class=\\\"my-profile-sidebar-home-row-divider\\\"></div><div class=\\\"my-profile-sidebar-home-row-label-section\\\"><div class=\\\"my-profile-sidebar-home-row-label\\\">Last Name</div><div onClick={{action \\'updateIsEditingProperty\\' \\'lastName\\'}} class=\\\"my-profile-sidebar-home-row-edit\\\">Edit</div></div>{{#if (is-equal this.isEditingLastName true)}}<div style=\\\"width:50%;display:flex;flex-direction:row;align-items:center;\\\"><td style=\\\"margin-right:10px\\\" class=\\\"input\\\"><input id=\\\"lastNameTextbox\\\" type=\\\"text\\\" value={{this.getLastName}} class=\\\"form-control\\\"></td><div onClick={{action \\\"updateProperty\\\" \\\"lastNameTextbox\\\" \\\"last_name\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Save</div></div>{{else}}<div class=\\\"my-profile-sidebar-home-row-value\\\">{{this.getLastName}}</div>{{/if}}<div class=\\\"my-profile-sidebar-home-row-divider\\\"></div><div class=\\\"my-profile-sidebar-home-row-label-section\\\"><div class=\\\"my-profile-sidebar-home-row-label\\\">Email</div><div onClick={{action \\'updateIsEditingProperty\\' \\'email\\'}} class=\\\"my-profile-sidebar-home-row-edit\\\">Edit</div></div>{{#if (is-equal this.isEditingEmail true)}}<div style=\\\"display:flex;flex-direction:column;\\\"><div style=\\\"width:50%;display:flex;flex-direction:row;align-items:center;\\\"><td style=\\\"margin-right:10px\\\" class=\\\"input\\\"><input id=\\\"emailTextbox\\\" type=\\\"text\\\" value={{this.getEmail}} oninput={{action \\\"updateEmail\\\"}} class=\\\"form-control\\\"></td><div onClick={{action \\\"updateProperty\\\" \\\"emailTextbox\\\" \\\"email\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Save</div></div>{{#if this.isValidEmail}}<div style=\\\"margin-top:5px; font-size: small; color: darkslategray;\\\">{{this.emailTips}}</div>{{/if}}</div>{{else}}<div class=\\\"my-profile-sidebar-home-row-value\\\">{{this.getEmail}}</div>{{/if}}{{#if (is-equal this.showEmailError true)}}<div class=\\\"my-profile-error-message-value\\\">{{this.emailErrorMessage}}</div>{{/if}}<div class=\\\"my-profile-sidebar-home-row-divider\\\"></div><div class=\\\"my-profile-sidebar-home-row-label-section\\\"><div class=\\\"my-profile-sidebar-home-row-label\\\">Username</div><div onClick={{action \\'updateIsEditingProperty\\' \\'username\\'}} class=\\\"my-profile-sidebar-home-row-edit\\\">Edit</div></div>{{#if (is-equal this.isEditingUsername true)}}<div style=\\\"display:flex;flex-direction:column;\\\"><div style=\\\"width:50%;display:flex;flex-direction:row;align-items:center;\\\"><td style=\\\"margin-right:10px\\\" class=\\\"input\\\"><input id=\\\"usernameTextbox\\\" type=\\\"text\\\" value={{this.getUsername}} oninput={{action \\\"updateUsername\\\"}} class=\\\"form-control\\\"></td><div onClick={{action \\\"updateProperty\\\" \\\"usernameTextbox\\\" \\\"username\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Save</div></div>{{#if this.isValidUsername}}<div style=\\\"margin-top:5px; font-size: small; color: darkslategray;\\\">{{this.usernameTips}}</div>{{/if}}</div>{{else}}<div class=\\\"my-profile-sidebar-home-row-value\\\">{{this.getUsername}}</div>{{/if}}{{#if (is-equal this.showUsernameError true)}}<div class=\\\"my-profile-error-message-value\\\">{{this.emailUsernameMessage}}</div>{{/if}}<div class=\\\"my-profile-sidebar-home-row-divider\\\"></div></div><div class=\\\"my-profile-sidebar-home-subtitle\\\">Company Info</div><div class=\\\"my-profile-sidebar-home-row-section\\\"><div class=\\\"my-profile-sidebar-home-row-label-section\\\"><div class=\\\"my-profile-sidebar-home-row-label\\\">Company</div></div>{{#if (is-equal this.isEditingCompany true)}}<div style=\\\"width:50%;display:flex;flex-direction:row;align-items:center;\\\"><td style=\\\"margin-right:10px\\\" class=\\\"input\\\"><input id=\\\"companyTextbox\\\" type=\\\"text\\\" value={{this.getCompany}} class=\\\"form-control\\\"></td><div onClick={{action \\\"updateProperty\\\" \\\"companyTextbox\\\" \\\"company\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Save</div></div>{{else}}<div class=\\\"my-profile-sidebar-home-row-value\\\">{{this.getCompany}}</div>{{/if}}<div class=\\\"my-profile-sidebar-home-row-divider\\\"></div><div class=\\\"my-profile-sidebar-home-row-label-section\\\"><div class=\\\"my-profile-sidebar-home-row-label\\\">Department</div></div>{{#if (is-equal this.isEditingDepartment true)}}<div style=\\\"width:50%;display:flex;flex-direction:row;align-items:center;\\\"><td style=\\\"margin-right:10px\\\" class=\\\"input\\\"><input id=\\\"departmentTextbox\\\" type=\\\"text\\\" value={{this.getDepartment}} class=\\\"form-control\\\"></td><div onClick={{action \\\"updateProperty\\\" \\\"departmentTextbox\\\" \\\"department\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Save</div></div>{{else}}<div class=\\\"my-profile-sidebar-home-row-value\\\">{{this.getDepartment}}</div>{{/if}}<div class=\\\"my-profile-sidebar-home-row-divider\\\"></div><div class=\\\"my-profile-sidebar-home-row-label-section\\\"><div class=\\\"my-profile-sidebar-home-row-label\\\">Position</div></div>{{#if (is-equal this.isEditingPosition true)}}<div style=\\\"width:50%;display:flex;flex-direction:row;align-items:center;\\\"><td style=\\\"margin-right:10px\\\" class=\\\"input\\\"><input id=\\\"positionTextbox\\\" type=\\\"text\\\" value={{this.getPosition}} class=\\\"form-control\\\"></td><div onClick={{action \\\"updateProperty\\\" \\\"positionTextbox\\\" \\\"position\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Save</div></div>{{else}}<div class=\\\"my-profile-sidebar-home-row-value\\\">{{this.getPosition}}</div>{{/if}}<div class=\\\"my-profile-sidebar-home-row-divider\\\"></div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/my-profile-sidebar-home.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"font-size:25px;font-weight: 600;display: flex;flex-direction: row;align-items: center;\\\">More{{#if this.isLoading}}<div style=\\\"margin-left:10px\\\" class=\\\"pulse_loader\\\"></div>{{/if}}</div><div style=\\\"padding:10px\\\"><div class=\\\"my-profile-sidebar-home-subtitle\\\">Reset Password</div><div class=\\\"my-profile-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; justify-content: space-evenly;\\\"><div onClick={{action \\\"sendResetPasswordLink\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Send Reset Link</div></div></div><div class=\\\"my-profile-sidebar-home-row-section\\\">{{#if (is-equal this.isShowResetPasswordMessage true)}}<div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; justify-content: center;\\\"><div class=\\\"my-profile-sidebar-home-row-value\\\">{{this.resetPasswordMessage}}</div></div>{{/if}}<div class=\\\"my-profile-sidebar-home-row-divider\\\"></div></div><div class=\\\"my-profile-sidebar-home-subtitle\\\">Account Activity</div><div class=\\\"my-profile-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; justify-content: space-evenly;\\\"><div style=\\\"width: 100%;\\\" class=\\\"my-profile-sidebar-home-row-edit\\\"><table style=\\\"border-width: 0px;width: 100%;\\\" class=\\\"table table-striped table-bordered\\\"><thead><tr><th id=\\\"instrument_id_sort\\\" {{action \\'columnCycleOrdering\\' \\'instrument_id_sort\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Sensor ID</th><th id=\\\"instrument_snapshot_id\\\" style=\\\"font-size: small;font-weight: normal;\\\">Snapshot Sensor ID</th><th id=\\\"gateway_id_sort\\\" {{action \\'columnCycleOrdering\\' \\'gateway_id_sort\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Gateway ID</th><th id=\\\"gateway_snapshot_id\\\" style=\\\"font-size: small;font-weight: normal;\\\">Snapshot Gateway ID</th><th id=\\\"action_date_sort\\\" {{action \\'columnCycleOrdering\\' \\'action_date_sort\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Date</th><th id=\\\"activity_message\\\" style=\\\"font-size: small;font-weight: normal;\\\">Activity</th></tr></thead><tbody>{{#each this.activityLogList as |activityLogObj|}}<tr><td style=\\\"font-size: small;\\\">{{activityLogObj.instrument_id}}</td><td style=\\\"font-size: small;\\\">{{activityLogObj.instrument_snapshot_id}}</td><td style=\\\"font-size: small;\\\">{{activityLogObj.gateway_id}}</td><td style=\\\"font-size: small;\\\">{{activityLogObj.gateway_snapshot_id}}</td><td style=\\\"font-size: small;\\\">{{activityLogObj.action_date}}</td><td style=\\\"font-size: small;\\\">{{activityLogObj.activity_message}}</td></tr>{{/each}}</tbody></table><div style=\\\"display:flex;justify-content: flex-end;\\\">{{#each this.paginationSearchConfig.calibrationInstrumentProfilePaginationList as |page|}}<button type=\\\"button\\\" {{action \\'jumpToPage\\' page on=\\\"click\\\"}} style=\\\"border-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}};color: {{if (eq page \\'...\\') \\'black\\' \\'white\\'}};margin-right: 10px;font-size:small;padding: 5px;background-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}}\\\" class=\\\"btn btn-primary\\\">{{page}}</button>{{/each}}</div></div></div><div class=\\\"my-profile-sidebar-home-row-divider\\\"></div></div>{{#if this.isStaffUser}}<div class=\\\"my-profile-sidebar-home-subtitle\\\">Admin Console</div><div class=\\\"my-profile-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; justify-content: space-evenly;\\\"><div onClick={{action \\\"accessAdmin\\\"}} class=\\\"my-profile-sidebar-home-row-edit\\\">Access Here</div></div><div class=\\\"my-profile-sidebar-home-row-divider\\\"></div></div>{{/if}}</div>', { moduleName: 'geotechnical-data-platform-new/templates/components/my-profile-sidebar-more.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"font-size:25px;font-weight: 600;display: flex;flex-direction: row;align-items: center;\\\">Users{{#if this.isLoading}}<div style=\\\"margin-left:10px\\\" class=\\\"pulse_loader\\\"></div>{{/if}}</div><div style=\\\"padding:10px\\\"><table style=\\\"border-width: 0px;margin-top:10px\\\" class=\\\"table table-striped table-bordered\\\"><thead><tr><th style=\\\"font-size: small;font-weight: normal;\\\">Verified</th><th id=\\\"id\\\" {{action \\'columnCycleOrdering\\' \\'id\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">ID</th><th id=\\\"first_name\\\" {{action \\'columnCycleOrdering\\' \\'first_name\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">First Name</th><th id=\\\"last_name\\\" {{action \\'columnCycleOrdering\\' \\'last_name\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Last Name</th><th id=\\\"username\\\" {{action \\'columnCycleOrdering\\' \\'username\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Username</th><th id=\\\"last_login\\\" {{action \\'columnCycleOrdering\\' \\'last_login\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Last Joined</th><th id=\\\"date_joined\\\" {{action \\'columnCycleOrdering\\' \\'date_joined\\' on=\\\"click\\\"}} style=\\\"font-size: small;cursor:pointer;\\\">Date Joined</th><th style=\\\"font-size: small;font-weight: normal;\\\">Actions</th></tr></thead><tbody>{{#each this.userList as |user|}}<tr><td style=\\\"font-size: small;text-align:center; vertical-align: middle;\\\">{{input disabled=true type=\\\"checkbox\\\" checked=(if user.is_active true false)}}</td><td style=\\\"font-size: small;\\\">{{user.id}}</td><td style=\\\"font-size: small;\\\">{{user.first_name}}</td><td style=\\\"font-size: small;\\\">{{user.last_name}}</td><td style=\\\"font-size: small;\\\">{{user.username}}</td><td style=\\\"font-size: small;\\\">{{user.last_login}}</td><td style=\\\"font-size: small;\\\">{{user.date_joined}}</td><td style=\\\"width: 130px;\\\"><div style=\\\"width: 130px; overflow-x: auto;\\\"><div style=\\\"width: 130px; overflow-x: auto;display:inline-flex; min-width: max-content; gap:15px; cursor: pointer;color: blue;text-decoration: underline;font-size: smaller;\\\"><div {{action \\'openEditUserModal\\' user on=\\\"click\\\"}}>Edit</div></div></div></td></tr>{{/each}}</tbody>{{#if this.isEditModalOpen}}{{edit-my-profile-user-modal parentUser=this.userProfileService selectedUser=this.selectedUser title=this.editTitle closeModal=(action \\'closeEditUserModal\\') saveModal=(action \\'saveUserEdits\\')}}{{/if}}</table></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/my-profile-sidebar-users.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"my-profile-sidebar-section-user-profile\\\"><div id=\\\"profilePhoto\\\" style=\\\"cursor:pointer;\\\" onClick={{action \\\"triggerImageUpload\\\"}}>{{#if this.profileImage}}<img src={{this.profileImage}} style=\\\"width:90px;height:90px;\\\">{{else}}{{fa-icon icon=\\\"user\\\" size=\\\"4x\\\"}}{{/if}}<td style=\\\"margin-right:10px\\\" class=\\\"input\\\"><input id=\\\"profileImageInput\\\" type=\\\"file\\\" accept=\\\"image/jpeg,image/png\\\" style=\\\"display:none\\\" onChange={{action \\\"uploadProfileImage\\\"}} class=\\\"form-control\\\"></td></div><div style=\\\"width: 100%;display:flex;flex-direction:row;align-items:center;font-size:x-large;overflow-x: hidden;justify-content: center;\\\"><div style=\\\"margin-right:5px;\\\">{{this.firstName}}</div><div>{{this.lastName}}</div></div></div><div class=\\\"my-profile-sidebar-section-divider\\\"></div><div style=\\\"width:100%;padding:25px\\\"><div class=\\\"my-profile-sidebar-section-row\\\"><div style=\\\"margin-right:5px\\\">{{fa-icon icon=\\\"home\\\" size=\\\"1x\\\"}}</div><div style=\\\"font-size:large;\\\" onClick={{action \\\"updateTab\\\" \\\"HOME\\\"}}>Home</div></div><div class=\\\"my-profile-sidebar-section-row\\\"><div style=\\\"margin-right:5px;\\\">{{fa-icon icon=\\\"address-book\\\" variant=\\\"light\\\" size=\\\"1x\\\" style=\\\"margin-right:5px\\\"}}</div><div style=\\\"font-size:large;\\\" onClick={{action \\\"updateTab\\\" \\\"CONTACTS\\\"}}>Contacts</div></div>{{#if this.isMasterUser}}<div class=\\\"my-profile-sidebar-section-row\\\"><div style=\\\"margin-right:5px;\\\">{{fa-icon icon=\\\"users\\\" size=\\\"1x\\\" style=\\\"margin-right:5px\\\"}}</div><div style=\\\"font-size:large;\\\" onClick={{action \\\"updateTab\\\" \\\"USERS\\\"}}>Users</div></div>{{/if}}{{#if this.isSupervisor}}<div class=\\\"my-profile-sidebar-section-row\\\"><div style=\\\"margin-right:5px;\\\">{{fa-icon icon=\\\"handshake\\\" size=\\\"1x\\\" style=\\\"margin-right:5px\\\"}}</div><div style=\\\"font-size:large;\\\" onClick={{action \\\"updateTab\\\" \\\"CONTRACTORS\\\"}}>Contractors</div></div>{{/if}}<div class=\\\"my-profile-sidebar-section-row\\\"><div style=\\\"margin-right:5px;\\\">{{fa-icon icon=\\\"puzzle-piece\\\" variant=\\\"light\\\" size=\\\"1x\\\" style=\\\"margin-right:5px\\\"}}</div><div style=\\\"font-size:large;\\\" onClick={{action \\\"updateTab\\\" \\\"ADDON\\\"}}>Add-On</div></div><div class=\\\"my-profile-sidebar-section-row\\\"><div style=\\\"margin-right:5px;\\\">{{fa-icon icon=\\\"ellipsis-h\\\" size=\\\"1x\\\" style=\\\"margin-right:5px\\\"}}</div><div style=\\\"font-size:large;\\\" onClick={{action \\\"updateTab\\\" \\\"MORE\\\"}}>More</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/my-profile-sidebar.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div>\\n    <div class=\\\"container-fluid\\\">\\n        <a class=\\\"logo\\\" href=\\'/\\'>\\n            <img width=\\\"50%\\\" src=\\\"/assets/images/logo.png\\\" />\\n            <img class=\\\"right\\\" height=\\\"80px\\\" src=\\\"/assets/images/customer_logo/logo.png\\\" onerror=\\\"this.onerror=null;this.src=\\'/assets/images/nologo.png\\';\\\"/>\\n        </a>\\n    </div>\\n    <BsNavbar as |navbar|>\\n    <div class=\\\"container-fluid\\\">\\n        <div>\\n            <navbar.toggle />\\n        </div>\\n        <navbar.content>\\n            <navbar.nav class=\\\"navFull\\\" as |nav|>\\n            <nav.item>\\n                <nav.linkTo @route=\\\"index\\\" @models={{(array)}}><FaIcon @icon=\\\"globe\\\" /> Dashboard</nav.linkTo>\\n            </nav.item>\\n            <nav.item>\\n                <nav.linkTo @route=\\\"instruments\\\" @models={{(array)}}><FaIcon @icon=\\\"ruler\\\" /> Instruments</nav.linkTo>\\n            </nav.item>\\n            <nav.item>\\n                <nav.linkTo @route=\\\"gateway\\\" @models={{(array)}}><FaIcon @icon=\\\"medkit\\\" /> Health</nav.linkTo>\\n            </nav.item>\\n            <nav.item>\\n                <nav.linkTo @route=\\\"alerts\\\" @models={{(array)}}><FaIcon @icon=\\\"bell\\\" /> Alerts</nav.linkTo>\\n            </nav.item>\\n\\n\\n            <nav.item>\\n                <nav.linkTo @route=\\\"seismic-events\\\" @models={{(array)}}><FaIcon @icon=\\\"thumbtack\\\" /> Seismic events</nav.linkTo>\\n            </nav.item>\\n            <nav.item>\\n                <nav.linkTo @route=\\\"blast-events\\\" @models={{(array)}}><FaIcon @icon=\\\"bomb\\\" /> Blast events</nav.linkTo>\\n            </nav.item>\\n            {{#if this.hasPermissionProductionTab}}\\n                <nav.dropdown as |dd|>\\n                    <dd.toggle>\\n                        <span class=\\\"caret\\\"> <FaIcon @icon=\\\"cogs\\\" /> Production</span>\\n                    </dd.toggle>\\n                    <dd.menu as |ddm|>\\n                        {{#if this.hasPermissionSensorCalibration}}\\n                                <a href=\\\"/admin\\\" class=\\\"nav-link custom-link\\\" {{on \\\"click\\\" this.navigateToSensorCalibration}} target=\\\"_blank\\\">\\n                                    Sensor Calibration\\n                                </a>\\n                        {{/if}}\\n                        {{#if this.hasPermissionPacksValidation}}\\n                                <a href=\\\"/admin\\\" class=\\\"nav-link custom-link\\\" {{on \\\"click\\\" this.navigateToPacksValidation}} target=\\\"_blank\\\">\\n                                    Packs Validation\\n                                </a>\\n                        {{/if}}\\n                    </dd.menu>\\n                </nav.dropdown>\\n            {{/if}}\\n            {{#if this.hasPermissionAnalyticsTab}}\\n                <nav.dropdown as |dd|>\\n                    <dd.toggle>\\n                        <span class=\\\"caret\\\"> <FaIcon @icon=\\\"chart-line\\\" /> Analytics</span>\\n                    </dd.toggle>\\n                    <dd.menu as |ddm|>\\n                        {{#if this.hasPermissionPacksValidationAnalytics}}\\n                                <a href=\\\"/admin\\\" class=\\\"nav-link custom-link\\\" {{on \\\"click\\\" this.navigateToSensorCalibrationAnalytics}} target=\\\"_blank\\\">\\n                                    Sensor Calibration\\n                                </a>\\n                        {{/if}}\\n                        {{#if this.hasPermissionSensorCalibrationAnalytics}}\\n                                <a href=\\\"/admin\\\" class=\\\"nav-link custom-link\\\" {{on \\\"click\\\" this.navigateToPacksValidationAnalytics}} target=\\\"_blank\\\">\\n                                    Packs Validation\\n                                </a>\\n                        {{/if}}\\n                    </dd.menu>\\n                </nav.dropdown>\\n            {{/if}}\\n            <nav.item>\\n                <nav.linkTo @route=\\\"vibration-events\\\" @models={{(array)}}><FaIcon @icon=\\\"wave-square\\\" /> BluVibe events</nav.linkTo>\\n            </nav.item>\\n            <nav.item style=\\\"margin-left: auto;\\\">\\n                {{#if this.session.isAuthenticated}}\\n                    <nav.dropdown as |dd|>\\n                        <dd.toggle>{{this.username}} <span class=\\\"caret\\\"></span></dd.toggle>\\n                        <dd.menu as |ddm|>\\n                                <a class=\\\"nav-link custom-link\\\" role=\\\"button\\\" {{on \\\"click\\\" this.navigateToMyProfile}}>\\n                                    <FaIcon @icon=\\\"user\\\" /> My Profile\\n                                </a>\\n                                <a class=\\\"nav-link custom-link\\\" role=\\\"button\\\" {{on \\\"click\\\" this.navigateToSettings}}>\\n                                    <FaIcon @icon=\\\"cog\\\" /> Settings\\n                                </a>\\n                                <a class=\\\"nav-link custom-link\\\" role=\\\"button\\\" {{on \\\"click\\\" this.logout}}>\\n                                    <FaIcon @icon=\\\"sign-out-alt\\\" /> Logout\\n                                </a>\\n                        </dd.menu>\\n                    </nav.dropdown>\\n                {{/if}}\\n            </nav.item>\\n            </navbar.nav>\\n        </navbar.content>\\n    </div>\\n    </BsNavbar>\\n    <div>\\n        {{#each this.tasks as |task|}}\\n            <ProgressBar @taskName={{task.name}} @percentage={{task.percentage}} />\\n        {{/each}}\\n    </div>\\n    {{#if this.isValid}}\\n        {{#if false}}\\n            <div class=\\\"container-fluid error\\\">\\n                <a>\\n                    Your licence does not include this module.\\n                    <br> If you would like this module, please contact YieldPoint for further details.\\n                    <br> 700 Progress Ave.\\n                    <br> Kingston, ON. K7M 4W9\\n                    <br> 1 613-531-4722\\n                    <br> <a href=\\\"mailto:customersupport.yp@epiroc.com\\\">customersupport.yp@epiroc.com</a>\\n                </a>\\n            </div>\\n        {{/if}}\\n        {{#unless this.isWithinLimit}}\\n            <div class=\\\"container-fluid error\\\">\\n                <a>\\n                    There are more active instruments than your licence allows for.\\n                    <br> Please disable any outdated instruments, update your licence <LinkTo @route=\\\"keys\\\">here</LinkTo> or contact YieldPoint to increase your limit.\\n                    <br> 700 Progress Ave.\\n                    <br> Kingston, ON. K7M 4W9\\n                    <br> 1 613-531-4722\\n                    <br> <a href=\\\"mailto:sales.yp@epiroc.com\\\">sales.yp@epiroc.com</a>\\n                </a>\\n            </div>\\n        {{/unless}}\\n    {{else}}\\n        <div class=\\\"container-fluid error\\\">\\n            <a>\\n                You currently have no active licence.\\n                <br> Please install a new licence <LinkTo @route=\\\"keys\\\">here</LinkTo> or contact YieldPoint for further details.\\n                <br> 700 Progress Ave.\\n                <br> Kingston, ON. K7M 4W9\\n                <br> 1 613-531-4722\\n                <br> <a href=\\\"mailto:sales.yp@epiroc.com\\\">sales.yp@epiroc.com</a>\\n            </a>\\n        </div>\\n    {{/if}}\\n</div>', { moduleName: 'geotechnical-data-platform-new/templates/components/navbar.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/oneforone/chartjs-temporal-gateway-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newGatewayObjectParent\\\" class=\\\"col-12 col-form-label\\\">Parent Gateway: </label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"gatewaySelect\\\" onchange={{action \\\"setID\\\" value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"\\\">Gateway ID</option>{{#each this.gateways as |gw|}}<option value={{gw.value}}>{{gw.title}}</option>{{/each}}</select></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.Name}} oninput={{action (mut this.newGatewayObject.name) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.project}} oninput={{action (mut this.newGatewayObject.project) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectProject\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.location}} oninput={{action (mut this.newGatewayObject.location) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.level}} oninput={{action (mut this.newGatewayObject.level) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectLevel\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><span>&nbsp;</span></td><td><span>&nbsp;</span></td></tr><tr><td><span>&nbsp;</span></td><td><span>&nbsp;</span></td></tr><tr><td><label for=\\\"newGatewayObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.installedBy}} oninput={{action (mut this.newGatewayObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.purpose}} oninput={{action (mut this.newGatewayObject.purpose) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newGatewayObject.notes}} oninput={{action (mut this.newGatewayObject.notes) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createGateway\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/oneforone/create-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{@anchorDistances.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" @gateway on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" @gateway on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each @anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}<td>Temp.</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.newTimestampValue) value=\\\"target.value\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.gatewayValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action (mut (get this.newGatewayValueObjectValues key)) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temp.\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} id=\\\"df{{key}}\\\" oninput={{action (mut this.temperatureObjectValue) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/oneforone/create-new-raw-gateway-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"7\\\" class=\\\"td_details\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @gateway.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div>{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @gateway.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div></td></tr><tr class=\\\"details\\\"><td colspan=\\\"7\\\"><hr></td></tr><tr class=\\\"details\\\"><td colspan=\\\"3\\\" style=\\\"vertical-align: top; margin-bottom: 1rem;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td class=\\\"h5\\\"><label for=\\\"newGatewayObjectParent\\\" class=\\\"col-12 col-form-label\\\">Current Parent Gateway: </label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{#if this.parentLoading}}<div style=\\\"width: 35px;height: 30px;\\\" class=\\\"center pulse_loader\\\"></div>{{else}}<select style=\\\"min-width: 150px;\\\" id=\\\"parentSelection\\\" onchange={{action \\\"setID\\\"}} class=\\\"form-control\\\"><option value=\\\"\\\">Gateway ID</option>{{#each this.gateways as |gw|}}{{#if (eq gw.value this.initialSelection.value)}}<option selected value={{gw.value}}>{{gw.title}}</option>{{else}}<option value={{gw.value}}>{{gw.title}}</option>{{/if}}{{/each}}</select>{{/if}}</div></div></td></tr><tr><td><span class=\\\"cospan separator\\\"></span></td></tr><tr><td><h5>Properties:</h5></td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@gateway field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\"><table style=\\\"justify-content: left; vertical-align: top;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><span class=\\\"cospan separator\\\"></span></td></tr><tr><td><span class=\\\"cospan separator\\\"></span></td><td><span class=\\\"cospan separator\\\"></span></td></tr><tr><td><h5>Settings:</h5></td></tr><tr><td><label for=\\\"meshID\\\" class=\\\"col-12 col-form-label\\\">Mesh ID:</label></td><td><input size=6 type=\\\"text\\\" value={{@gateway.meshID}} disabled class=\\\"form-control\\\"></td></tr><tr><td><label for=\\\"gatewayReadInterval\\\" class=\\\"col-12 col-form-label\\\">Read Interval:</label></td><td class=\\\"input\\\"><select id=\\\"gatewayReadInterval\\\" onchange={{action \\'setGatewayInterval\\'}} class=\\\"form-control\\\"><option value=\\\"\\\">Select an Interval</option>{{#each this.gatewayReadingIntervals as |selectOption|}}{{#if (eq this.getGatewayReadIntervalID selectOption.id)}}<option selected value={{selectOption.id}}>{{selectOption.intervalName}}</option>{{else}}<option value={{selectOption.id}}>{{selectOption.intervalName}}</option>{{/if}}{{/each}}</select></td></tr></tbody></table></td></tr></tbody><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"7\\\" class=\\\"td_details\\\"></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"6\\\" class=\\\"add-new-item\\\"></td><td class=\\\"add-new-item\\\"><span {{action \\\"saveGateway\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr>{{#if (eq @gateway.hasChildren true)}}<tr class=\\\"details newRecordDetails\\\">{{gateway-list gateway=@gateway.children sortBy=(action \\'sortBy\\') ordering=this.ordering}}</tr>{{/if}}</table>', { moduleName: 'geotechnical-data-platform-new/templates/components/oneforone/edit-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg></div><div class=\\\"mb-1\\\"></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/oneforone/nvd3-temporal-gateway-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@gatewayData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@gatewayData.meta routeLink=\\'raw-gateway-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{#if this.isVisibleCreateNewForm}}<div class=\\\"row\\\"><div class=\\\"col details newRecordDetails\\\">{{oneforone/create-new-raw-gateway-data-value-form isVisibleCreateNewForm=this.isVisibleCreateNewForm isVisibleReadingCreated=this.isVisibleReadingCreated gatewayId=@gateway.id gatewayType=@gateway.gatewayType anchorDistances=this.anchorDistances dateFormat=\\'YYYY-MM-DD HH:mm:ss\\' setProp=@setProp}}</div></div>{{/if}}{{#if this.isVisibleReadingCreated}}<div class=\\\"row\\\"><div class=\\\"col\\\">Reading Added!</div></div>{{/if}}<div class=\\\"row\\\"><div class=\\\"col\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th>Date</th>{{#each this.anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}<th>Temp.</th><th id=\\\"add-new\\\" class=\\\"add-new-item\\\"><span class=\\\"separator\\\"></span></th></tr></thead><tbody>{{#each this.getGatewayData as |gatewayValue index|}}{{single-save-gateway-inputs-array-table-row-cells gatewayId=@gateway.id gateway=@gateway gatewayType=@gateway.gatewayType gatewayValueObject=gatewayValue gatewayValuesModel=@gatewayData temperatureValuesModel=@temperatureData inputType=\\'text\\' fields=\\'values\\' tableRowIndex=index setProp=@setProp}}{{/each}}</tbody></table></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@gatewayData.meta routeLink=\\'raw-gateway-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/oneforone/raw-gateway-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @left_axis_field \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @left_axis_field \\'Firmware\\')}}\\n      Firmware Version\\n    {{else if (is-equal @left_axis_field \\'RSSI\\')}}\\n      RSSI\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Voltage\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"RSSI\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Firmware\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Firmware Version</LinkTo>\\n  </dd.menu>\\n</BsDropdown>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/oneforone/temporal-gateway-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @selected \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @selected \\'RSSI\\')}}\\n      RSSI\\n    {{else if (is-equal @selected \\'Readings\\')}}\\n      Number of Readings\\n    {{else if (is-equal @selected \\'Uptime\\')}}\\n      Uptime in Seconds\\n    {{else if (is-equal @selected \\'Reconnection\\')}}\\n      Reconnection Attempts\\n    {{else if (is-equal @selected \\'Uploads\\')}}\\n      Number of Uploads\\n    {{else if (is-equal @selected \\'Firmware\\')}}\\n      Firmware Version\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Voltage\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"RSSI\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'readings-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Readings\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Number of Readings</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uptime-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Uptime\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Uptime in Seconds</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'reconnection-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Reconnection\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Reconnection Attempts</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uploads-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Uploads\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Number of Uploads</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Firmware\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Firmware</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/oneforone/temporal-gateway-left-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @right_axis_field \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @right_axis_field \\'Firmware\\')}}\\n      Firmware\\n    {{else if (is-equal @right_axis_field \\'Temperature\\')}}\\n      Temperature\\n    {{else if (is-equal @right_axis_field \\'RSSI\\')}}\\n      RSSI\\n    {{else}}\\n      Temperature\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Voltage\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"RSSI\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'temp-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Temperature\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Temperature</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Firmware\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Firmware Version</LinkTo>\\n  </dd.menu>\\n</BsDropdown>\\n{{!-- <BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal selected \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal selected \\'RSSI\\')}}\\n      RSSI\\n    {{else if (is-equal selected \\'Readings\\')}}\\n      Number of Readings\\n    {{else if (is-equal selected \\'Uptime\\')}}\\n      Uptime in Seconds\\n    {{else if (is-equal selected \\'Reconnection\\')}}\\n      Reconnection Attempts\\n    {{else if (is-equal selected \\'Uploads\\')}}\\n      Number of Uploads\\n    {{else if (is-equal selected \\'Firmware\\')}}\\n      Firmware Version\\n    {{else if (is-equal selected \\'Temperature\\')}}\\n      Temperature\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        {{#link-to \\'temporal-gateway-graphs.temporal-gateway-graph\\' gatewayId \\'voltage-values\\' (query-params start_timestamp=null end_timestamp=null right_axis_field=\\\"Voltage\\\" left_axis_field=left_axis_field) class=\\\"dropdown-item\\\"}}Voltage{{/link-to}}\\n        {{#link-to \\'temporal-gateway-graphs.temporal-gateway-graph\\' gatewayId \\'rssi-values\\' (query-params start_timestamp=null end_timestamp=null right_axis_field=\\\"RSSI\\\" left_axis_field=left_axis_field) class=\\\"dropdown-item\\\"}}RSSI{{/link-to}}\\n        {{#link-to \\'temporal-gateway-graphs.temporal-gateway-graph\\' gatewayId \\'readings-values\\' (query-params start_timestamp=null end_timestamp=null right_axis_field=\\\"Readings\\\" left_axis_field=left_axis_field) class=\\\"dropdown-item\\\"}}Number of Readings{{/link-to}}\\n        {{#link-to \\'temporal-gateway-graphs.temporal-gateway-graph\\' gatewayId \\'uptime-values\\' (query-params start_timestamp=null end_timestamp=null right_axis_field=\\\"Uptime\\\" left_axis_field=left_axis_field) class=\\\"dropdown-item\\\"}}Uptime in Seconds{{/link-to}}\\n        {{#link-to \\'temporal-gateway-graphs.temporal-gateway-graph\\' gatewayId \\'reconnection-values\\' (query-params start_timestamp=null end_timestamp=null right_axis_field=\\\"Reconnection\\\" left_axis_field=left_axis_field) class=\\\"dropdown-item\\\"}}Reconnection Attempts{{/link-to}}\\n        {{#link-to \\'temporal-gateway-graphs.temporal-gateway-graph\\' gatewayId \\'uploads-values\\' (query-params start_timestamp=null end_timestamp=null right_axis_field=\\\"Uploads\\\") class=\\\"dropdown-item\\\"}}Number of Uploads{{/link-to}}\\n        {{#link-to \\'temporal-gateway-graphs.temporal-gateway-graph\\' gatewayId \\'firmware-values\\' (query-params start_timestamp=null end_timestamp=null right_axis_field=\\\"Firmware\\\") class=\\\"dropdown-item\\\"}}Firmware{{/link-to}}\\n        {{#link-to \\'temporal-gateway-graphs.temporal-gateway-graph\\' gatewayId \\'temp-values\\' (query-params start_timestamp=null end_timestamp=null right_axis_field=\\\"Temperature\\\") class=\\\"dropdown-item\\\"}}Temperature{{/link-to}}\\n  </dd.menu>\\n</BsDropdown> --}}', { moduleName: 'geotechnical-data-platform-new/templates/components/oneforone/temporal-gateway-right-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"margin-top: 10px;\\\"><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:450px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-spatial\\\"></canvas></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;margin-top:4px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Hover over the chart to see values in the panel below\\\">Hover to see values</div><div title=\\\"Colored dots on x-axis show anchor positions\\\">Dots = anchor positions</div><div title=\\\"Scroll up to zoom out centered around cursor\\\">Scroll up to zoom out</div><div title=\\\"Scroll down to zoom in towards cursor\\\">Scroll down to zoom in</div><div title=\\\"Click and drag left or right\\\">Drag to pan</div><div title=\\\"Double-click anywhere on the chart\\\">Double-click to reset</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/pack/chartjs-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/pack/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@projectLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'newInstrumentObjectProject\\' onSelectionChange=(action \\'setProject\\' value=\\\"target.value\\\") inputFieldId=\\'project\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.location}} oninput={{action (mut this.newInstrumentObject.location) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCoordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.east}} oninput={{action (mut this.newInstrumentObject.east) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.north}} oninput={{action (mut this.newInstrumentObject.north) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.depth}} oninput={{action (mut this.newInstrumentObject.depth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectAzimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.azimuth}} oninput={{action (mut this.newInstrumentObject.azimuth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAzimuth\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectDip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.dip}} oninput={{action (mut this.newInstrumentObject.dip) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDip\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@levelLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'newInstrumentObjectLevel\\' onSelectionChange=(action \\'setLevel\\' value=\\\"target.value\\\") inputFieldId=\\'level\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectBorehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.borehole}} oninput={{action (mut this.newInstrumentObject.borehole) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectBorehole\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectStrokeLength\\\" class=\\\"col-12 col-form-label bold\\\">Stroke Length (mm):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.strokeLength}} oninput={{action (mut this.newInstrumentObject.strokeLength) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectStrokeLength\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.installedBy}} oninput={{action (mut this.newInstrumentObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.purpose}} oninput={{action (mut this.newInstrumentObject.purpose) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newInstrumentObject.notes}} oninput={{action (mut this.newInstrumentObject.notes) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectHeadAt\\\" class=\\\"col-12 col-form-label bold\\\">Head at:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"newInstrumentObjectHeadAt\\\" onchange={{action (mut this.headAt) value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each @headAts as |selectOption|}}<option selected={{is-equal selectOption.key this.headAt}} value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/pack/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{this.instrumentAnchors.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each this.instrumentAnchors as |anchor|}}<td>{{anchor}}</td>{{/each}}<td>Temperature</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action \\\"setNewTimestampValue\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action \\\"setNewDisplacementValue\\\" key}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} oninput={{action \\\"setTemperatureValue\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/pack/create-new-raw-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"width: 100%;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:10px\\\"><div style=\\\"margin-right:10px\\\"><div class=\\\"inst-buttons\\\"><span {{action \\\"viewData\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div></div><div style=\\\"margin-right:10px\\\"><div class=\\\"inst-buttons\\\"><span {{action \\\"tGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div></div>{{#if @hasGraphs}}{{#if (gt @instrument.channelsNum 2)}}{{#unless (eq @instrument.subModel \\\"B\\\")}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"sGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-area\\\" /> Spatial Graph</span></div>{{/unless}}{{/if}}{{/if}}</div><div style=\\\"text-decoration:underline;margin-bottom:10px; cursor:pointer;\\\" onClick={{action \\\"cycleAlertsListVisibility\\\"}}><h5>Alerts:</h5></div>{{#if this.isAlertsListVisible}}{{#if this.licenceIsValid}}<div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content: space-between;\\\"><div class=\\\"action-bar-section\\\"><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"table-legend\\\"}} class=\\\"action-bar-head-body\\\">Table Legend</div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"actions\\\"}} class=\\\"action-bar-head-body\\\">Actions</div></div></div>{{/if}}<div style=\\\"margin:15px\\\">{{#if (is-equal this.activeActionTab \\\"table-legend\\\")}}{{table-legend-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"actions\\\")}}{{actions-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"batch-actions\\\")}}{{batch-actions-alerts batchSelectedAlertsID=this.batchSelectedAlertsID alerts=@model.alerts isShowBatchConfirmationModal=this.isShowBatchConfirmationModal typeBatch=this.typeBatch batchWarningMessage=this.batchWarningMessage}}{{/if}}</div><div style=\\\"margin-bottom:10px\\\">{{alerts-list licenceIsValid=this.licenceIsValid allowBatchSelect=false batchSelectedAlertsID=this.batchSelectedAlertsID alerts=this.alertsList globalDatetimeFormat=@globalDatetimeFormat ordering=this.ordering sortBy=(action \\'sortBy\\')}}</div><div style=\\\"display:flex;justify-content: flex-end;\\\">{{#each this.paginationSearchConfig.alertProfilePaginationList as |page|}}<button type=\\\"button\\\" {{action \\'jumpToPage\\' page on=\\\"click\\\"}} style=\\\"border-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}};color: {{if (eq page \\'...\\') \\'black\\' \\'white\\'}};margin-right: 10px;font-size:small;padding: 5px;background-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}}\\\" class=\\\"btn btn-primary\\\">{{page}}</button>{{/each}}</div>{{/if}}<div style=\\\"width: 100%;\\\"><div><h5>Properties:</h5></div><div style=\\\"width: 100%;display:flex;flex-direction:row;\\\"><div style=\\\"width: 50%;display:flex;flex-direction:column;\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"channelsNum\\\" class=\\\"col-12 col-form-label\\\">Channels:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'channelsNum\\' isEditable=false}}</td></tr><tr><td><label for=\\\"subModel\\\" class=\\\"col-12 col-form-label\\\">Sub-Model:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'subModel\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"coordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=@instrument east=@instrument.east north=@instrument.north depth=@instrument.depth stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'zeroTimestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"headAt\\\" class=\\\"col-12 col-form-label\\\">Head at:</label></td><td class=\\\"input\\\">{{single-save-select selectOptions=@headAts id=\\\"headAt\\\" selectOptionsKyes=\\\"id,title\\\" object=@instrument.headAt parentObject=@instrument field=\\'title\\' valueSource=\\'id\\' inputFieldId=\\'headAt\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"strokeLength\\\" class=\\\"col-12 col-form-label\\\">Stroke Length (mm):</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'strokeLength\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"referenceAnchor\\\" class=\\\"col-12 col-form-label\\\">Reference Anchor:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'referenceAnchor\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Active:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument id=\\\"activeCheck\\\" field=\\'active\\'}}</td></tr></tbody></table></div><div style=\\\"width: 50%;display:flex;flex-direction:column;\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"azimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'azimuth\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"dip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'dip\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"borehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'borehole\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></div></div><div style=\\\"padding: 0.2rem;font-weight:bold;\\\">Anchor Diagram:</div><div style=\\\"padding:10px;width: 100%;\\\">{{#if this.isEditAnchorDiagram}}<div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"width: 100%;\\\">{{instrument-anchors-diagram showHATHACLabels=true style=\\\"width: 100%;\\\" inputMode=\\\"input\\\" initialValues=this.anchorDiagramInputInitalValue instrumentID=@instrument.id headAt=@instrument.headAt.id instrumentTypeText=@instrument.instrumentType.title channels=@instrument.channelsNum onCustomNumberInput=(action \\\"updateChannelInput\\\")}}</div><div style=\\\"margin-right:10px;margin-left:10px;cursor:pointer;\\\" onClick={{action \\\"saveAnchors\\\"}}><FaIcon @icon=\\\"check\\\" /></div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleEditAnchorDiagram\\\"}}><FaIcon @icon=\\\"times\\\" /></div></div>{{else}}<div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleEditAnchorDiagram\\\"}}>{{instrument-anchors-diagram showHATHACLabels=true style=\\\"width: 100%;\\\" inputMode=\\\"label\\\" initialValues=this.anchorDiagramLabelInitalValue instrumentID=@instrument.id headAt=@instrument.headAt.id instrumentTypeText=@instrument.instrumentType.title channels=@instrument.channelsNum}}</div>{{/if}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/pack/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-spatial-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-spatial-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/pack/nvd3-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/pack/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"table-responsive\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th>{{#each this.columnSpecs as |spec|}}<th>{{spec.tableLabel}}</th>{{/each}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th></tr></thead><tbody>{{#each this.tableRows as |row|}}<tr><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td>{{#each row.cells as |cell|}}<td>{{cell.value}}</td>{{/each}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td></tr>{{/each}}</tbody></table></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/pack/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Velocity</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/pack/spatial-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Velocity</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'acceleration-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Acceleration</LinkTo>\\n        {{!-- Strain / Strain Rate are not meaningful for grouped (subModel B) Exto — multi-group hardware uses per-group reference points rather than a single strain series. --}}\\n        {{#unless (eq @subModel \\\"B\\\")}}\\n            <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain</LinkTo>\\n            <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n        {{/unless}}\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/pack/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{@page_size}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  {{#if @model}}\\n    <dd.menu as |ddm|>\\n          <LinkTo @route={{@page_type}} @query={{hash page_size=20 page=1}} class=\\\"dropdown-item\\\">20</LinkTo>\\n          <LinkTo @route={{@page_type}} @query={{hash page_size=50 page=1}} class=\\\"dropdown-item\\\">50</LinkTo>\\n          <LinkTo @route={{@page_type}} @query={{hash page_size=100 page=1}} class=\\\"dropdown-item\\\">100</LinkTo>\\n          <LinkTo @route={{@page_type}} @query={{hash page_size=200 page=1}} class=\\\"dropdown-item\\\">200</LinkTo>\\n    </dd.menu>\\n  {{else}}\\n    <dd.menu as |ddm|>\\n          <a class=\\\"dropdown-item\\\">No Events</a>\\n    </dd.menu>\\n  {{/if}}\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/page-item-count.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.paginationLinks}}<nav aria-label=\\\"Page navigation\\\"><ul class=\\\"pagination\\\">{{#if this.firstPageLink}}<li class=\\\"page-item\\\"><LinkTo @route={{this.firstPageLink.[0]}} @query={{this.firstPageLink.[1].values}} class=\\\"page-link\\\" aria-label=\\\"Previous\\\">1</LinkTo></li><li class=\\\"page-item disabled\\\"><a href=\\\"#\\\" class=\\\"page-link\\\">...</a></li>{{/if}}{{#each this.paginationLinks as |value|}}<li class=\\\"page-item {{active-class (is-equal value.linkName this.currentPage)}}\\\"><LinkTo @route={{value.params.[0]}} @query={{value.params.[1].values}} class=\\\"page-link\\\">{{value.linkName}}</LinkTo></li>{{/each}}{{#if this.lastPageLink}}<li class=\\\"page-item disabled\\\"><a href=\\\"#\\\" class=\\\"page-link\\\">...</a></li><li class=\\\"page-item\\\"><LinkTo @route={{this.lastPageLink.[0]}} @query={{this.lastPageLink.[1].values}} class=\\\"page-link\\\" aria-label=\\\"Next\\\">{{this.totalPages}}</LinkTo></li>{{/if}}{{#if (gt this.totalPages 10)}}<li class=\\\"page-item\\\"><input size=\\\"2\\\" placeholder=\\\"Page #\\\" oninput={{action \\'updateNewPage\\' value=\\\"target.value\\\"}} class=\\\"page-link\\\"></li><li class=\\\"page-item\\\"><button {{action \\\"goToPage\\\" on=\\\"click\\\"}} style=\\\"color:#fff;background-color:#4A6A9C;\\\" class=\\\"page-link\\\">Go</button></li>{{/if}}</ul></nav>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/pagination-links.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:450px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-spatial\\\"></canvas></div></div><div style=\\\"min-height:24px;padding:4px 8px;font-size:12px;border:1px solid #ddd;border-radius:4px;background:#fafafa;margin-top:4px;overflow-x:auto;white-space:nowrap;\\\" class=\\\"spatial-info-panel\\\"><span style=\\\"color:#999;\\\">Hover over chart to see values</span></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;margin-top:4px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Each line represents one reading timestamp\\\">- Lines = timestamps</div><div title=\\\"Light/thin lines are older readings, dark/thick lines are the most recent\\\">- Light = older, Dark = newer</div><div title=\\\"Hover over the chart to see values in the panel below\\\">- Hover to see values</div><div title=\\\"Colored dots on x-axis show anchor positions\\\">- Dots = anchor positions</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/piezo/chartjs-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/piezo/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@projectLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'newInstrumentObjectProject\\' onSelectionChange=(action \\'setProject\\' value=\\\"target.value\\\") inputFieldId=\\'project\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.location}} oninput={{action (mut this.newInstrumentObject.location) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCoordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.east}} oninput={{action (mut this.newInstrumentObject.east) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.north}} oninput={{action (mut this.newInstrumentObject.north) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.depth}} oninput={{action (mut this.newInstrumentObject.depth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectAzimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.azimuth}} oninput={{action (mut this.newInstrumentObject.azimuth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAzimuth\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectDip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.dip}} oninput={{action (mut this.newInstrumentObject.dip) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDip\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@levelLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'newInstrumentObjectLevel\\' onSelectionChange=(action \\'setLevel\\' value=\\\"target.value\\\") inputFieldId=\\'level\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectBorehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.borehole}} oninput={{action (mut this.newInstrumentObject.borehole) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectBorehole\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.installedBy}} oninput={{action (mut this.newInstrumentObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.purpose}} oninput={{action (mut this.newInstrumentObject.purpose) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newInstrumentObject.notes}} oninput={{action (mut this.newInstrumentObject.notes) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/piezo/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{this.instrumentAnchors.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each this.instrumentAnchors as |anchor|}}<td>{{anchor}}</td>{{/each}}<td>Temperature</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action \\\"setNewTimestampValue\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action \\\"setNewDisplacementValue\\\" key}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} oninput={{action \\\"setTemperatureValue\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/piezo/create-new-raw-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div>{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div></td></tr><tr class=\\\"details\\\"><td><h5>Properties:</h5></td></tr><tr class=\\\"details\\\"><td colspan=\\\"2\\\" style=\\\"vertical-align: top; margin-bottom: 1rem;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"channelsNum\\\" class=\\\"col-12 col-form-label\\\">Channels:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'channelsNum\\' isEditable=false}}</td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"coordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=@instrument east=@instrument.east north=@instrument.north depth=@instrument.depth stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"azimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'azimuth\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"dip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'dip\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"borehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'borehole\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'zeroTimestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"referenceAnchor\\\" class=\\\"col-12 col-form-label\\\">Reference Anchor:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'referenceAnchor\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Active:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument id=\\\"activeCheck\\\" field=\\'active\\'}}</td></tr><tr><td><label for=\\\"instrumentLength\\\" class=\\\"col-12 col-form-label\\\">Burial Depth (m):</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'instrumentLength\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"td_details\\\"></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"add-new-item\\\"></td><td class=\\\"add-new-item\\\"><span {{action \\\"saveInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/piezo/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-spatial-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-spatial-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/piezo/nvd3-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/piezo/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"table-responsive\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th>{{#each this.columnSpecs as |spec|}}<th>{{spec.tableLabel}}</th>{{/each}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th></tr></thead><tbody>{{#each this.tableRows as |row|}}<tr><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td>{{#each row.cells as |cell|}}<td>{{cell.value}}</td>{{/each}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td></tr>{{/each}}</tbody></table></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/piezo/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if @selected}}\\n      {{@selected}}\\n    {{else}}\\n        Pressure\\n    {{/if}}\\n<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"Pressure\\\"}} class=\\\"dropdown-item\\\">Pressure</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"Pressure Rate\\\"}} class=\\\"dropdown-item\\\">Press. Rate</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"mmH20\\\"}} class=\\\"dropdown-item\\\">mmH20</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/piezo/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if isShowingModal}}\\n<ModalDialog @onClose={{action \\\"toggleModal\\\"}} @translucentOverlay={{false}} @targetAttachment=\\\"none\\\" @containerClass=\\\"centered-scrolling-container\\\" @overlayClass=\\\"centered-scrolling-overlay\\\" @wrapperClass=\\\"centered-scrolling-wrapper\\\" @clickOutsideToClose={{false}}>\\n    <h2>Record List</h2>\\n    <table>\\n    <thead>\\n      <tr>\\n        <th>Phone Number</th>\\n        <th>Country</th>\\n        <th>Carrier</th>\\n        <th>Gateway</th>\\n        <th>Select</th>\\n      </tr>\\n    </thead>\\n    <tbody>\\n        {{#each-in carrierList as |index item|}}\\n        <tr>\\n          <td>{{phoneNumber}}</td>\\n          <td>{{item.Country}}</td>\\n          <td>{{item.Carrier}}</td>\\n          <td>{{item.Gateway}}</td>\\n          <td>\\n            <button {{on \\\"click\\\" (action \\'selectGateway\\' phoneNumber item.Gateway)}}>Select</button>\\n          </td>\\n        </tr>\\n      {{/each-in}}\\n    </tbody>\\n  </table>\\n\\n  <button {{action \\'closeTargetSelector\\'}}>Close</button>\\n</ModalDialog>\\n{{/if}} ', { moduleName: 'geotechnical-data-platform-new/templates/components/popup-list.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"min-height:1200px\\\">{{#if this.isShowConfig.isShowPopupNotification}}<div id=\\\"notificationBackdrop\\\" style=\\\"position:fixed; top:0; left:0; width:100%; height:100%; z-index:998;\\\" {{action \\\"closeNotificationPopup\\\" on=\\\"click\\\"}}></div><div id=\\\"notificationPopup\\\" style=\\\"max-height:700px; display:flex; flex-direction:column; position:fixed; top:50%; left:50%; transform:translate(-50%, -50%); z-index:999; width:1000px;background: white;border-width: 1px;border-color: gray;border-style: solid;border-radius: 10px;\\\"><div style=\\\"display: flex; flex-direction: row;justify-content: space-between;width: 100%; \\\"><h5 style=\\\"margin-left: 10px;\\\"></h5><label id=\\\"closeXButton\\\" style=\\\"margin-right: 10px;margin-bottom: 0;font-size: medium;cursor: pointer;color: grey;\\\" {{action \\\"closeNotificationPopup\\\" on=\\\"click\\\"}}>X</label></div><div id=\\\"notificationPopupContentBody\\\" style=\\\"overflow-x: scroll;overflow-y: scroll;padding-bottom: 10px; padding-left: 20px; display: flex; flex-direction: column;justify-content: space-between;width: 100%; padding-right: 20px;\\\"></div><div id=\\\"confirmationCheckBoxSection\\\" style=\\\"display:none;align-items: center; justify-content: center;flex-direction: row;width:100%\\\"><td class=\\\"input\\\"><input id=\\\"confirmationCheckBox\\\" type=\\\"checkbox\\\" class=\\\"form-control\\\"></td><label style=\\\"font-weight: bold;font-size: small;margin:0px\\\">I confirm the data posted above is correct.</label></div><div id=\\\"buttonsPanel\\\" style=\\\"padding:15px;justify-content: center;flex-direction: row;display: flex;width:100%\\\"><button id=\\\"notificationReadyButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Ready                </button><button id=\\\"notificationRefreshButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Refresh</button><button id=\\\"notificationOkButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Ok</button><button id=\\\"notificationAbortButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">ABORT</button><button id=\\\"notificationYesButton\\\" type=\\\"button\\\" style=\\\"display:none; margin-left:10px;margin-right:10px;min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Yes </button><button id=\\\"notificationNoButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">No</button><button id=\\\"notificationSaveButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Save </button><button id=\\\"notificationPrintButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Print</button><button id=\\\"notificationExportButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Export</button><button id=\\\"notificationCancelButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Cancel</button></div></div>{{/if}}<div id=\\\"popupMessageSection\\\" class=\\\"pulse-border\\\"><div id=\\\"popupMessageBody\\\" style=\\\" padding: 10px; display: flex; flex-direction: column;width: 100%;\\\"></div></div><div id=\\\"controlPanel1\\\" style=\\\"display:flex; flex-direction:column; position:fixed; top: 20%;right: 10px;transform: translateY(-50%);z-index:999; width:auto; height:auto; background: white;border-width: 1px;border-color: gray;border-style: solid;border-radius: 10px;\\\"><button type=\\\"button\\\" {{action \\\"cycleVisualSettings\\\" on=\\\"click\\\"}} style=\\\"margin:5px;width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;align-self: end;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"rocket\\\" /> </button>{{#if this.isShowConfig.isShowSettings}}<div style=\\\"width:125px;display:flex;flex-direction:column;margin-left:5px;margin-right:5px;\\\"><div style=\\\"width:100%;border-style: solid;border-width: 1px;border-radius: 100px;border-color: lightgray;margin-bottom: 5px;\\\"></div>{{#if this.isShowConfig.tabs.home}}<div style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">View Home   </label><button type=\\\"button\\\" {{action \\\"scrollTop\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"home\\\" /> </button></div>{{/if}}{{#if this.isShowConfig.tabs.home}}<div style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">View Dashboard   </label><button type=\\\"button\\\" {{action \\\"scrollDashboard\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"tachometer-alt\\\" /> </button></div>{{/if}}{{#if this.isShowConfig.tabs.home}}<div style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">Cycle Core Ver.   </label><button type=\\\"button\\\" {{action \\\"cycleInternalHotButton\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"exchange-alt\\\" /> </button></div>{{/if}}<div style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">Cycle Displays  </label><button type=\\\"button\\\" {{action \\\"cycleView\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"eye\\\" /></button></div>{{#if this.isShowConfig.tabs.home}}<div style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">Rig Form</label><button type=\\\"button\\\" {{action \\\"cycleAddNewRigMode\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"tools\\\" /></button></div>{{/if}}{{#if this.isShowConfig.tabs.home}}<div style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">Calib Form </label><button type=\\\"button\\\" {{action \\\"cycleAddNewCalibProfileMode\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"tools\\\" /></button></div>{{/if}}{{#if this.isShowConfig.tabs.home}}<div style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">Rig Notifications </label><button type=\\\"button\\\" {{action \\\"viewRigNotifications\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"bell\\\" /></button></div>{{/if}}{{#if this.isShowConfig.tabs.home}}<div style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">Calibration Data </label><button type=\\\"button\\\" {{action \\\"viewCalibratedData\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"database\\\" /></button></div>{{/if}}{{#if this.isShowConfig.tabs.home}}<div style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">Phase II Data </label><button type=\\\"button\\\" {{action \\\"viewPhaseIIConclusionCalibrationSheet\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"database\\\" /></button></div>{{/if}}</div>{{/if}}</div><div style=\\\"display: flex; flex-direction: column; align-items: center; margin-top: 20px;\\\"></div><div><h4>{{this.settingsConfig.softwareVersion}}</h4></div><div style=\\\"margin-left:15px\\\"><div {{action \\\"cycleView\\\" on=\\\"click\\\"}} style=\\\"cursor: pointer;display: flex; flex-direction: row; gap: 10px; margin: 0;    justify-content: center;\\\">{{#each this.getTabKeys as |tabKey|}}<div id={{tabKey}} style=\\\"width: 10px; height: 10px; border-radius: 50%; background-color: {{if (get this.isShowConfig.tabs tabKey) \\'grey\\' \\'lightgrey\\'}}\\\"></div>{{/each}}</div></div><div id=\\\"tabSlider\\\" style=\\\"width: 100%; max-width: 100%; overflow: hidden; position: relative;\\\"><div style=\\\"display: flex; width: 200%; transition: transform 0.5s ease; transform: {{if this.isShowConfig.tabs.home \\'translateX(0%)\\' \\'translateX(-50%)\\'}};\\\"><div style=\\\"width: 50%;\\\"><div style=\\\"display:flex;flex-direction:column;\\\"><label style=\\\"margin-bottom:0;font-size: large;color: red;\\\">AUTHORIZED PERSONNEL ONLY</label>{{#if this.showIrretrivableWarning}}<label style=\\\"margin-bottom:0;font-size: small;color: red;\\\">Do not manually refresh page. You will lose data, and it is irretrievable.</label>{{/if}}</div><div style=\\\"width:100%;display:flex;flex-direction:row;\\\"><div style=\\\"min-width:225px;display:flex;flex-direction:column;\\\"><div style=\\\"width:100%;display:flex;flex-direction:column;margin-bottom:15px\\\"><div style=\\\"margin-bottom:10px;\\\"><label style=\\\"margin-bottom:0;font-size: medium;\\\">Step 1: Rig</label><label style=\\\"margin-left:5px; margin-bottom:0;font-size: x-small;color: red;\\\">required</label></div><div style=\\\"padding-left: 10px; width: 100%;display: flex;flex-direction: row;align-items: center;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Profile:</label><td class=\\\"input\\\"><select id=\\\"selectedRigIP\\\" style=\\\"font-size: small;padding: 0px;\\\" onchange={{action (mut this.selectedRigDP) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"0\\\">Mandatory selection</option>{{#each this.getRigList as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div></div><div style=\\\"width:100%;display:flex;flex-direction:column;\\\"><div style=\\\"margin-bottom:10px;\\\"><label style=\\\"margin-bottom:0;font-size: medium;\\\">Step 2: Calibration</label><label style=\\\"margin-left:5px; margin-bottom:0;font-size: x-small;color: red;\\\">required</label></div><div style=\\\"padding-left: 10px; width: 100%;display: flex;flex-direction: row;align-items: center;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Profile:</label><td class=\\\"input\\\"><select id=\\\"selectedCalibrationType\\\" style=\\\"font-size: small;padding: 0px;\\\" onchange={{action (mut this.selectedCalibDP) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"0\\\">Type / CH / RNG</option>{{#each this.getCalibrationProfileList as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div></div></div><div style=\\\"min-width:515px;display:flex;flex-direction:column;\\\"><div style=\\\"margin-bottom:10px;\\\"><label style=\\\"margin-bottom:0;font-size: medium;\\\">Step 3: Sensor </label><label style=\\\"margin-left:5px; margin-bottom:0;font-size: x-small;color: red;\\\">required</label><div style=\\\"padding-left: 10px; width: 100%;display: flex;flex-direction: row;\\\"><div style=\\\"width: 100%;display: flex;flex-direction: column;\\\">{{#if (or (is-equal this.settingsConfig.internalVersion \\\"v1.0\\\"))}}<div style=\\\"display:flex;flex-direction:row;align-items: center;justify-content: space-between;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">ID:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"max-width:130px;font-size: small; padding:0px;\\\" oninput={{action \\'updateSensorFormData\\' event=\\\"target\\\"}} id=\\\"sensorID\\\" class=\\\"form-control\\\"></td></div>{{#if (is-equal this.userInputtedData.isForInventory true)}}<div style=\\\"font-size:x-small;color:gray;margin-bottom:2px;line-height:1.2;\\\">Note: Job #, Sensor Name & Anchor values are stored as -175 — meaning \\\"intentionally left blank (for inventory)\\\".</div>{{/if}}<div style=\\\"display:flex;flex-direction:row;align-items: center;justify-content: space-between;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">For Inventory?:</label><div style=\\\"display:flex;flex-direction:row;align-items: center;width:130px\\\"><label style=\\\"margin-bottom:0;font-size: small;margin-right:12px;display:flex;align-items:center;cursor:pointer;\\\"><input type=\\\"radio\\\" name=\\\"forInventory\\\" id=\\\"forInventoryYes\\\" checked={{is-equal this.userInputtedData.isForInventory true}} style=\\\"margin-right:4px;\\\" onchange={{action \\'toggleForInventory\\' true}}>Yes</label><label style=\\\"margin-bottom:0;font-size: small;display:flex;align-items:center;cursor:pointer;\\\"><input type=\\\"radio\\\" name=\\\"forInventory\\\" id=\\\"forInventoryNo\\\" checked={{is-equal this.userInputtedData.isForInventory false}} style=\\\"margin-right:4px;\\\" onchange={{action \\'toggleForInventory\\' false}}>No</label></div></div><div style=\\\"display:flex;flex-direction:row;align-items: center;justify-content: space-between;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Sensor Name:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"max-width:130px;font-size: small; padding:0px;\\\" oninput={{action \\'updateSensorFormData\\' event=\\\"target\\\"}} id=\\\"sensorName\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;justify-content: space-between;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Pack ID:</label><td class=\\\"input\\\"><select id=\\\"selectedPackProfile\\\" style=\\\"min-width:130px;font-size: small;padding: 0px;\\\" onchange={{action \\'updateSensorFormData\\' event=\\\"target\\\"}} class=\\\"form-control\\\"><option value=\\\"0\\\">-</option>{{#each this.frontendData.packValidationCompletedProfileList as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div>{{/if}}{{#if (is-equal this.settingsConfig.internalVersion \\\"v2.0\\\")}}<div style=\\\"display:flex;flex-direction:row;align-items: center;    justify-content: space-between;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Sensors Count:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"max-width:130px;font-size: small; padding:0px;\\\" value={{this.settingsConfig.BATCH_SENSORS_COUNT}} onchange={{action (mut this.settingsConfig.BATCH_SENSORS_COUNT) value=\\\"target.value\\\"}} id=\\\"batchSensorsCount\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;justify-content: space-between;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Batch IDs:</label><button type=\\\"button\\\" {{action \\\"showBatchSensors\\\" on=\\\"click\\\"}} style=\\\"width:130px;height:30px; padding:0px;\\\" class=\\\"btn btn-primary\\\">View/Edit</button></div>{{/if}}<div style=\\\"display:flex;flex-direction:row;align-items: center;    justify-content: space-between;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Job #:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"max-width:130px;font-size: small; padding:0px;\\\" oninput={{action \\'updateSensorFormData\\' event=\\\"target\\\"}} id=\\\"jobID\\\" class=\\\"form-control\\\"></td></div></div><div style=\\\"padding-left: 10px; width: 100%;display: flex;flex-direction: column;height:100%\\\"><div style=\\\"display:flex;height:100%\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Memo:</label><td class=\\\"input\\\"><textarea type=\\\"text\\\" style=\\\"min-height: 100px;resize: none;height:100%;font-size: small; padding:0px;\\\" oninput={{action \\'updateSensorFormData\\' event=\\\"target\\\"}} id=\\\"memo\\\" class=\\\"form-control\\\"></textarea></td></div></div></div></div></div><div style=\\\"width: 100%;display: flex;flex-direction: row;align-items: center;overflow: hidden;\\\"><button type=\\\"button\\\" {{action \\\"validatePriorCalibration\\\" on=\\\"click\\\"}} style=\\\"width:150px;height:35px; padding:0px;\\\" class=\\\"btn btn-primary\\\">Validate</button></div></div><div id=\\\"masterAnchorDiagram\\\" class=\\\"masterAnchorDiagramStyle\\\"><div id=\\\"upperMasterSection\\\" class=\\\"upperMasterSectionStyle\\\"><div id=\\\"anchorUpperTextBoxSection\\\" class=\\\"anchorUpperTextBoxSectionStyle\\\"></div></div><div id=\\\"anchorMasterSection\\\" class=\\\"anchorMasterSectionStyle\\\"><div class=\\\"anchorHeadTextStyle\\\">HEAD</div><div id=\\\"anchorPointsSection\\\" class=\\\"anchorPointsSectionStyle\\\"></div><div class=\\\"anchorToeTextStyle\\\">TOE</div></div><div id=\\\"lowerMasterSection\\\" class=\\\"lowerMasterSectionStyle\\\"><div id=\\\"anchorLowerTextBoxSection\\\" class=\\\"anchorLowerTextBoxSection\\\"></div></div></div><div style=\\\"width:100%;display:flex;flex-direction:column;\\\">{{#if (is-equal this.isShowConfig.isShowRigForm true)}}<div style=\\\"margin-bottom:0;display:flex;flex-direction:row;align-items:center;\\'\\\"><div style=\\\"font-size:medium\\\">Rig Config Form </div><div style=\\\"font-size:small;display:flex; align-self: flex-end;\\\">{{#if (is-equal this.isShowConfig.isFormEditing true)}}<div {{action \\'cycleEditMode\\' on=\\\"click\\\"}} style=\\\"padding-left: 5px;text-decoration: underline;cursor:pointer;color:blue;\\\">Mode: Edit</div>{{else}}<div {{action \\'cycleEditMode\\' on=\\\"click\\\"}} style=\\\"padding-left: 5px;text-decoration: underline;cursor:pointer;color:blue;\\\">Mode: Add </div>{{/if}}</div></div><div style=\\\"display:flex;flex-direction:row;align-items: center;\\\"></div><div style=\\\"padding-left: 10px; width: 100%;display: flex;flex-direction: row;align-items: center;\\\">{{#if (is-equal this.isShowConfig.isFormEditing true)}}<div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Rig Profile:</label><td class=\\\"input\\\"><select id=\\\"selectedRigIP\\\" style=\\\"font-size: small;padding: 0px;\\\" onchange={{action (mut this.selectedRigDPRigForm) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"0\\\"></option>{{#each this.getRigList as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div>{{/if}}<div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"rigFormRigIPTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">IP:</label><td class=\\\"input\\\"><input style=\\\"padding:0px;font-size:small\\\" type=\\\"text\\\" oninput={{action \\'updateRigFormData\\' event=\\\"target\\\"}} id=\\\"rigIP\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"rigFormRigNameTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Name:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"padding:0px;font-size:small\\\" oninput={{action \\'updateRigFormData\\' event=\\\"target\\\"}} id=\\\"rigName\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:200px\\\"><label {{action \\\"assistiveTooltip\\\" \\\"rigFormRigCategoryTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Category:</label><td style=\\\"width:100px;\\\" class=\\\"input\\\"><select id=\\\"rigCategory\\\" style=\\\"font-size: small;padding: 0px;\\\" onchange={{action \\'updateRigFormData\\' event=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"\\\"></option>{{#each this.getApprovedRigCategoryList as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div></div><div style=\\\"padding-left: 10px; width:100%;display:flex;flex-direction:row;align-items: center;\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"rigFormReferenceIDTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Reference Sensor S/N:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"padding:0px;font-size:small\\\" oninput={{action \\'updateRigFormData\\' event=\\\"target\\\"}} id=\\\"rigReferenceID\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"rigFormReferenceCalibrationValueTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Reference Sensor Certificate:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"padding:0px;font-size:small\\\" oninput={{action \\'updateRigFormData\\' event=\\\"target\\\"}} id=\\\"rigReferenceCalibrationValue\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"rigFormReferenceCalibrationDateTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Reference Sensor Certification Date:</label><td class=\\\"input\\\"><input type=\\\"datetime-local\\\" style=\\\"padding:0px;font-size:small\\\" oninput={{action \\'updateRigFormData\\' event=\\\"target\\\"}} id=\\\"rigReferenceCalibrationDate\\\" class=\\\"date-time-picker\\\"></td></div></div><div style=\\\"padding-left: 10px; width:100%;display:flex;flex-direction:row;align-items: center;\\\"><div style=\\\"margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'formSaveButton\\' \\'rig\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Save</button></div>{{#if (is-equal this.isShowConfig.isFormEditing true)}}<div style=\\\"margin-left:10px;margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'formDeleteButton\\' \\'rig\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Delete</button></div>{{/if}}</div>{{/if}}{{#if (is-equal this.isShowConfig.isShowCalibForm true)}}<div style=\\\"margin-bottom:0;display:flex;flex-direction:row;align-items:center;\\'\\\"><div style=\\\"font-size:medium\\\">Calibration Config Form </div><div style=\\\"font-size:small;display:flex; align-self: flex-end;\\\">{{#if (is-equal this.isShowConfig.isFormEditing true)}}<div {{action \\'cycleEditMode\\' on=\\\"click\\\"}} style=\\\"padding-left: 5px;text-decoration: underline;cursor:pointer;color:blue;\\\">Mode: Edit</div>{{else}}<div {{action \\'cycleEditMode\\' on=\\\"click\\\"}} style=\\\"padding-left: 5px;text-decoration: underline;cursor:pointer;color:blue;\\\">Mode: Add</div>{{/if}}</div></div><div style=\\\"padding-left: 10px; width:100%;display:flex;flex-direction:row;\\\">{{#if (is-equal this.isShowConfig.isFormEditing true)}}<div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:250px;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Calib Profile:</label><td class=\\\"input\\\"><select id=\\\"selectedCalibrationTypeCalibForm\\\" style=\\\"font-size: small;padding: 0px;\\\" onchange={{action (mut this.selectedCalibDPCalibForm) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"0\\\">Type / CH / RNG</option>{{#each this.getCalibrationProfileList as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div>{{/if}}<div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:250px;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Type:</label><td style=\\\"width:100px;\\\" class=\\\"input\\\"><select id=\\\"calibType\\\" style=\\\"font-size: small;padding: 0px;\\\" onchange={{action \\'updateCalibFormData\\' event=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"\\\"></option>{{#each this.getApprovedInstrumentTypeList as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:250px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"calibFormTypeIDTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Type ID:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updateCalibFormData\\' event=\\\"target\\\"}} id=\\\"typeID\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:150px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"calibFormChannelsTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Channels:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" min=1 max=15 oninput={{action \\'updateCalibFormData\\' event=\\\"target\\\"}} id=\\\"channels\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:250px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"calibFormMinLimitTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Min Limit:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updateCalibFormData\\' event=\\\"target\\\"}} id=\\\"minLimit\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:250px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"calibFormMaxLimitTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Max Limit:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updateCalibFormData\\' event=\\\"target\\\"}} id=\\\"maxLimit\\\" class=\\\"form-control\\\"></td></div></div><div style=\\\"padding-left: 10px; width:100%;display:flex;flex-direction:row;align-items: center;\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:350px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"calibFormSampleSizeTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Sample Size:</label><td class=\\\"input\\\"><input type=\\\"number\\\" min=\\\"1\\\" step=\\\"1\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updateCalibFormData\\' event=\\\"target\\\"}} id=\\\"checkpointSampleSize\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:150px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"calibFormSpeedTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Speed:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updateCalibFormData\\' event=\\\"target\\\"}} id=\\\"checkpointSpeed\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:150px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"calibFormUnitTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Unit:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updateCalibFormData\\' event=\\\"target\\\"}} id=\\\"unit\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:150px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"calibFormDelayTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Delay:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updateCalibFormData\\' event=\\\"target\\\"}} id=\\\"checkpointDelay\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:400px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"calibFormCurrent-TargetBufferTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Current-Target Buffer:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updateCalibFormData\\' event=\\\"target\\\"}} id=\\\"checkpointCurrentTargetBuffer\\\" class=\\\"form-control\\\"></td></div></div><div style=\\\"padding-left: 10px; width:100%;display:flex;flex-direction:row;align-items: center;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"calibFormPositionsTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Positions:</label><td style=\\\"width:100%;\\\" class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updateCalibFormData\\' event=\\\"target\\\"}} id=\\\"checkpointPositions\\\" class=\\\"form-control\\\"></td></div><div style=\\\"padding-left: 10px; display:flex;flex-direction:row;align-items: center;margin-right:10px;margin-top:10px;\\\"><div style=\\\"margin-left:10px;margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'formSaveButton\\' \\'calib\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Save</button></div>{{#if (is-equal this.isShowConfig.isFormEditing true)}}<div style=\\\"margin-left:10px;margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'formDeleteButton\\' \\'calib\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Delete</button></div>{{/if}}</div>{{/if}}</div><div style=\\\"height:10px\\\"></div><div style=\\\"\\\"><label id=\\\"calibrationDashboardTitle\\\" style=\\\"margin-bottom:0;font-size: medium;\\\">Calibration Operation Dashboard</label><div style=\\\"width:100%; display:flex; flex-direction:row; padding-left:10px;border: solid;border-width: 0.1px;border-radius: 50px;padding: 5px;border-color: lightgray;\\\"><div style=\\\"width:20%; display:flex; flex-direction:row\\\"><div {{action \\\"assistiveTooltip\\\" \\\"statusBarStatusTooltip\\\" on=\\\"click\\\"}} style=\\\"font-size:small;display:flex; flex-direction:column; padding-right:10px\\\">Status:</div><div id=\\\"statusStatus\\\" style=\\\"font-size:small; font-weight:bold; display:flex; flex-direction:column; color:red\\\"></div></div><div style=\\\"width:20%; display:flex; flex-direction:row\\\"><div {{action \\\"assistiveTooltip\\\" \\\"statusBarConnectionTooltip\\\" on=\\\"click\\\"}} style=\\\"font-size:small;display:flex; flex-direction:column; padding-right:10px\\\">Connection:</div><div id=\\\"connectionStatus\\\" style=\\\"font-size:small; font-weight:bold; display:flex; flex-direction:column; color:red\\\"></div></div><div style=\\\"width:20%; display:flex; flex-direction:row\\\"><div {{action \\\"assistiveTooltip\\\" \\\"statusBarCalibrationTooltip\\\" on=\\\"click\\\"}} style=\\\"font-size:small; display:flex; flex-direction:column; padding-right:10px\\\">Calibration:</div><div id=\\\"calibrationStatus\\\" style=\\\"font-size:small; font-weight:bold; display:flex; flex-direction:column; color:orange\\\"></div></div><div style=\\\"width:20%; display:flex; flex-direction:row\\\"><div {{action \\\"assistiveTooltip\\\" \\\"statusBarCurrentTooltip\\\" on=\\\"click\\\"}} style=\\\"font-size:small; display:flex; flex-direction:column; padding-right:10px\\\">Current:</div><div id=\\\"currentPoint\\\" style=\\\"font-size:small; font-weight:bold; display:flex; flex-direction:column\\\"></div></div><div style=\\\"width:20%; display:flex; flex-direction:row\\\"><div {{action \\\"assistiveTooltip\\\" \\\"statusBarTargetTooltip\\\" on=\\\"click\\\"}} style=\\\"font-size:small; display:flex; flex-direction:column; padding-right:10px\\\">Target:</div><div id=\\\"targetPoint\\\" style=\\\"font-size:small; font-weight:bold; display:flex; flex-direction:column\\\"></div></div></div><div id=\\\"anchorLiveViewSections\\\" style=\\\"min-height: 20px;width:100%; display:flex; flex-direction:row;border: solid;border-width: 0.1px;border-radius: 50px;padding: 5px;border-color: lightgray;justify-content: space-between;\\\"></div><div style=\\\"display:flex;flex-direction:column\\\"><label style=\\\"padding-left:10px;margin-bottom:0px;font-size: x-small;\\\">Live Log</label><div style=\\\"display:flex;flex-direction:row;width:100%;height: 250px;\\\"><div id=\\\"streamingTextBoxControlPanel\\\" style=\\\"height: 100%;justify-content: space-evenly;display:flex;align-items: center;flex-direction:column;background-color: white;width: 30px;border-color: gray;border-style: solid;border-width: 1px 0 1px 1px;border-radius: 10px;\\\"><button type=\\\"button\\\" {{action \\\"copyChatToClipboard\\\" \\'streamingTextBox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"copy\\\" /></button><button type=\\\"button\\\" {{action \\\"unlockChatScroll\\\" \\'streamingTextBox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"unlock\\\" /></button><button type=\\\"button\\\" {{action \\\"lockChatScroll\\\" \\'streamingTextBox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"lock\\\" /></button><button type=\\\"button\\\" {{action \\\"exportChatToFile\\\" \\'streamingTextBox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"file-export\\\" /> </button><button type=\\\"button\\\" {{action \\\"showLiveGraphs\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"chart-line\\\" /> </button><button type=\\\"button\\\" {{action \\\"showCommandConsole\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"terminal\\\" /> </button></div><div id=\\\"streamingTextBoxWrapper\\\" style=\\\"height: 100%; width: 100%; border: solid;border-width: 1px;border-radius: 5px;border-color: gray;\\\"><canvas id=\\\"myChart\\\" style=\\\"display: {{if this.isShowConfig.isShowLiveGraphs \\'block;\\' \\'none;\\'}};width:100%;height:100%; \\\"></canvas><div id=\\\"streamingTextBox\\\" style=\\\"white-space:pre-line;display: {{if this.isShowConfig.isShowLiveGraphs \\'none;\\' \\'block;\\'}};width: 100%; height: 100%; font-size: x-small; color:black;background-color: rgba(255, 255, 255, 0.4); overflow-y: auto; padding: 5px;\\\"></div></div></div><div style=\\\"display: {{if this.isShowConfig.isShowCommandConsole \\'flex;\\' \\'none;\\'}};margin-left:30px;flex-direction:row;align-items: center;\\\"><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"min-width:500px;font-size: small;padding: 0px;\\\" onkeydown={{action \\\"onKeyDown\\\"}} id=\\\"cmdConsole\\\" class=\\\"form-control\\\"></td><button id=\\\"sendCommand\\\" {{action \\'sendCommand\\' on=\\\"click\\\"}} type=\\\"button\\\" style=\\\"padding: 3px;border: solid;border-radius: 50px;\\\" class=\\\"btn btn-primary\\\">Send</button></div></div><div style=\\\"width: 100%;display:flex;flex-direction:column\\\"><div style=\\\"width: 100%;display:flex;flex-direction:row\\\"><div style=\\\"width: 50%;display:flex;flex-direction:column\\\"><label style=\\\"padding-left:10px;margin-bottom:0px;font-size: x-small;\\\">Phase I Log</label><div style=\\\"display:flex;flex-direction:row;width:100%\\\"><div id=\\\"streamingTextBoxControlPanel\\\" style=\\\"justify-content: space-evenly;display:flex;align-items: center;flex-direction:column;background-color: white;width: 30px;height: 200px;border-color: gray;border-style: solid;border-width: 1px 0 1px 1px;border-radius: 10px;\\\"><button type=\\\"button\\\" {{action \\\"copyChatToClipboard\\\" \\'phaseITextbox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"copy\\\" />                        </button><button type=\\\"button\\\" {{action \\\"unlockChatScroll\\\" \\'phaseITextbox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"unlock\\\" />                        </button><button type=\\\"button\\\" {{action \\\"lockChatScroll\\\" \\'phaseITextbox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"lock\\\" />                        </button><button type=\\\"button\\\" {{action \\\"exportChatToFile\\\" \\'phaseITextbox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"file-export\\\" /> </button></div><div id=\\\"phaseITextbox\\\" style=\\\"white-space:pre-line;width: 100%; padding: 5px;font-size: x-small;background-color: white;height: 200px;border-color: gray;border-style: solid;border-width: 1px;border-radius: 10px; overflow-y: auto;\\\"></div></div></div><div style=\\\"width: 50%;display:flex;flex-direction:column\\\"><label style=\\\"padding-left:10px;margin-bottom:0px;font-size: x-small;\\\">Phase II Log</label><div style=\\\"display:flex;flex-direction:row;width:100%\\\"><div id=\\\"phaseIITextbox\\\" style=\\\"white-space:pre-line;width: 100%; padding: 5px;font-size: x-small;background-color: white;height: 200px;border-color: gray;border-style: solid;border-width: 1px;border-radius: 10px; overflow-y: auto;\\\"></div><div id=\\\"streamingTextBoxControlPanel\\\" style=\\\"justify-content: space-evenly;display:flex;align-items: center;flex-direction:column;background-color: white;width: 30px;height: 200px;border-color: gray;border-style: solid;border-width: 1px 1px 1px 0;border-radius: 10px;\\\"><button type=\\\"button\\\" {{action \\\"copyChatToClipboard\\\" \\'phaseIITextbox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"copy\\\" />                        </button><button type=\\\"button\\\" {{action \\\"unlockChatScroll\\\" \\'phaseIITextbox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"unlock\\\" />                        </button><button type=\\\"button\\\" {{action \\\"lockChatScroll\\\" \\'phaseIITextbox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"lock\\\" />                        </button><button type=\\\"button\\\" {{action \\\"exportChatToFile\\\" \\'phaseIITextbox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"file-export\\\" /> </button></div></div></div></div></div><div style=\\\"width: 100%;display:flex;flex-direction:column;border-color: lightgray;border-style: solid;border-width: 1px;border-radius: 10px;margin-top: 10px;\\\"><div style=\\\"width: 100%;height: 100%;display:flex;flex-direction:row;\\\"><div id=\\\"stepperMotorSection\\\" style=\\\"pointer-events: none;opacity:0.5;min-width:220px;width: 25%; padding-left: 10px; display: flex; flex-direction: column;justify-content: space-between;margin-bottom: 10px;\\\"><div style=\\\"font-size:small;\\\">Stepper Motor</div><div style=\\\"display:flex;flex-direction:row; align-items:center;justify-content: space-evenly;padding-bottom: 5px; \\\"><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'stepperInit\\' \\\"\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">Init   </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualStepper\\' \\\"+8.33\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+8.33 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualStepper\\' \\\"+10\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+10 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualStepper\\' \\\"+1\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+1 </button></div><div style=\\\"display:flex;flex-direction:row; align-items:center;justify-content: space-evenly;\\\"><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'stepper0\\' \\\"\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">0 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualStepper\\' \\\"+25\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+25 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualStepper\\' \\\"-10\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">-10 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualStepper\\' \\\"-1\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">-1  </button></div></div><div style=\\\"border-style: solid;border-width: 1px;border-radius: 100px;border-color: lightgray;margin-top: 10px;margin-bottom: 10px;\\\"></div><div id=\\\"pressurePumpSection\\\" style=\\\"pointer-events: none;opacity:0.5;min-width:220px;width: 25%; padding-left: 10px; display: flex; flex-direction: column;justify-content: space-between;margin-bottom: 10px;\\\"><div style=\\\"font-size:small;\\\">Pressure Pump</div><div style=\\\"display:flex;flex-direction:row; align-items:center;justify-content: space-evenly;padding-bottom: 5px; \\\"><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"+100\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+100   </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"+50\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+50 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"+25\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+25 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"+10\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+10</button></div><div style=\\\"display:flex;flex-direction:row; align-items:center;justify-content: space-evenly;\\\"><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"-100\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">-100 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"-50\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">-50 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"-25\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">-25 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"-10\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">-10</button></div></div><div style=\\\"border-style: solid;border-width: 1px;border-radius: 100px;border-color: lightgray;margin-top: 10px;margin-bottom: 10px;\\\"></div><div id=\\\"pressureCalibHotKeysSection\\\" style=\\\"pointer-events: none;opacity:0.5;min-width:220px;width: 40%; padding-left: 10px; display: flex; flex-direction: column;justify-content: space-between;margin-bottom: 10px;\\\"><div style=\\\"font-size:small;\\\">Pressure Calib. Hot Keys</div><div style=\\\"display:flex;flex-direction:row; align-items:center;justify-content: space-evenly;padding-bottom: 5px; \\\"><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'\\' \\\"\\\" on=\\\"click\\\"}} style=\\\"min-width:85px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">Set Up. Calib. Arr.</button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'\\' \\\"\\\" on=\\\"click\\\"}} style=\\\"min-width:85px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">Get Temp. Offset</button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'\\' \\\"\\\" on=\\\"click\\\"}} style=\\\"min-width:85px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">Get Press. Offset</button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'\\' \\\"\\\" on=\\\"click\\\"}} style=\\\"min-width:85px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+10</button></div><div style=\\\"display:flex;flex-direction:row; align-items:center;justify-content: space-evenly;\\\"><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'\\' \\\"\\\" on=\\\"click\\\"}} style=\\\"min-width:85px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">Set Up. Calib. Arr.</button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'\\' \\\"\\\" on=\\\"click\\\"}} style=\\\"min-width:85px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">Set Temp. Offset</button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'\\' \\\"\\\" on=\\\"click\\\"}} style=\\\"min-width:85px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">Set Press. Offset</button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'\\' \\\"\\\" on=\\\"click\\\"}} style=\\\"min-width:85px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">Exp. Lookup  </button></div></div><div style=\\\"border-style: solid;border-width: 1px;border-radius: 100px;border-color: lightgray;margin-top: 10px;margin-bottom: 10px;\\\"></div></div></div><div style=\\\"width: 100%;height: 50px;display: flex;flex-direction: row;justify-content: space-evenly;border: solid;border-width: 0.1px;border-radius: 50px;padding: 5px;border-color: lightgray;margin-top: 10px;\\\"><button type=\\\"button\\\" {{action \\\"reconnectWebSocket\\\" on=\\\"click\\\"}} style=\\\"min-width:80px;padding: 3px;border: solid;border-radius: 50px;\\\" class=\\\"btn btn-primary\\\">Reconnect </button>{{#if (is-equal this.settingsConfig.internalVersion \\\"v1.0\\\")}}<button id=\\\"phaseICalibrationButton\\\" type=\\\"button\\\" style=\\\"min-width:80px;padding: 3px;background-color:green;border: solid;border-radius: 50px;\\\" onmousedown={{action \\\"startVerificationPress\\\" \\'phaseICalibrationButton\\' 500 \\\"Phase I\\\"}} onmouseup={{action \\\"cancelVerificationPress\\\" \\\"phaseICalibrationButton\\\" \\\"Phase I\\\"}} onmouseleave={{action \\\"cancelVerificationPress\\\" \\\"phaseICalibrationButton\\\" \\\"Phase I\\\"}} class=\\\"btn btn-primary\\\">Phase I </button><button id=\\\"phaseIICalibrationButton\\\" type=\\\"button\\\" style=\\\"min-width:80px;padding: 3px;background-color:green;border: solid;border-radius: 50px;\\\" onmousedown={{action \\\"startVerificationPress\\\" \\'phaseIICalibrationButton\\' 1000 \\\"Phase II\\\"}} onmouseup={{action \\\"cancelVerificationPress\\\" \\\"phaseIICalibrationButton\\\" \\\"Phase II\\\"}} onmouseleave={{action \\\"cancelVerificationPress\\\" \\\"phaseIICalibrationButton\\\" \\\"Phase II\\\"}} class=\\\"btn btn-primary\\\">Phase II</button>{{/if}}{{#if (is-equal this.settingsConfig.internalVersion \\\"v2.0\\\")}}<button id=\\\"startV2CalibrationButton\\\" type=\\\"button\\\" style=\\\"min-width:80px;padding: 3px;background-color:green;border: solid;border-radius: 50px;\\\" onmousedown={{action \\\"startVerificationPress\\\" \\'startV2CalibrationButton\\' 1000 \\\"Start\\\"}} onmouseup={{action \\\"cancelVerificationPress\\\" \\\"startV2CalibrationButton\\\" \\\"Start\\\"}} onmouseleave={{action \\\"cancelVerificationPress\\\" \\\"startV2CalibrationButton\\\" \\\"Start\\\"}} class=\\\"btn btn-primary\\\">Start</button>{{/if}}<button id=\\\"stopCalibrationButton\\\" type=\\\"button\\\" style=\\\"min-width:200px;padding: 3px;background-color:red;border: solid;border-radius: 50px;\\\" onmousedown={{action \\\"startVerificationPress\\\" \\'stopCalibrationButton\\' 500 \\\"STOP\\\"}} onmouseup={{action \\\"cancelVerificationPress\\\" \\\"stopCalibrationButton\\\" \\\"STOP\\\"}} onmouseleave={{action \\\"cancelVerificationPress\\\" \\\"stopCalibrationButton\\\" \\\"STOP\\\"}} class=\\\"btn btn-primary\\\">STOP</button><button id=\\\"resetCalibrationButton\\\" type=\\\"button\\\" style=\\\"min-width:80px;padding: 3px;background-color:red;border: solid;border-radius: 50px;\\\" onmousedown={{action \\\"startVerificationPress\\\" \\'resetCalibrationButton\\' 2500 \\\"RESET\\\"}} onmouseup={{action \\\"cancelVerificationPress\\\" \\\"resetCalibrationButton\\\" \\\"RESET\\\"}} onmouseleave={{action \\\"cancelVerificationPress\\\" \\\"resetCalibrationButton\\\" \\\"RESET\\\"}} class=\\\"btn btn-primary\\\">RESET</button></div></div></div><div style=\\\"padding-left:5px;width: 50%;\\\"><div style=\\\"width:100%;padding:0px;margin-top:10px;display:none; flex-direction:column;\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;\\\"><label style=\\\"margin-bottom:0;\\\">Rows:</label></div><div style=\\\"display:flex;flex-direction:row;align-items: center;\\\"><td class=\\\"input\\\"><select id=\\\"page_size\\\" style=\\\"padding: 0px;\\\" onchange={{action \\'updateSearchObjData\\' event=\\\"target\\\"}} class=\\\"form-control\\\"><option value=\\\"0\\\">-</option>{{#each this.getPaginationPageSizesList as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td><label id=\\\"totalReadings\\\" style=\\\"margin-bottom:0;margin-left:15px;\\\">Total:</label></div></div><div style=\\\"width:100%;padding:0px;margin-top:10px;display:flex; flex-direction:column;\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;\\\"><label style=\\\"margin-bottom:0;\\\">Filters:</label></div></div><div style=\\\"width:100%;padding:0px;margin-top:10px;display:flex; flex-direction:row; align-items:center\\\"><div style=\\\"margin-left:10px;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Rows:</label><select id=\\\"certificateManagerPageSize\\\" style=\\\"font-size: small;padding: 0px; width: auto;\\\" onchange={{action \\'changeCertificateManagerPageSize\\' event=\\\"target\\\"}} class=\\\"form-control\\\"><option value=\\\"20\\\">20</option><option value=\\\"50\\\">50</option><option value=\\\"100\\\">100</option><option value=\\\"200\\\">200</option></select></div></div><div style=\\\"width:100%;padding:0px;margin-top:10px;display:flex; flex-direction:row; align-items:center\\\"><div style=\\\"margin-left:10px;display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:350px\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Calib ID:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" id=\\\"searchCalibrationID\\\" oninput={{action \\'updateSearchObjData\\' event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:350px\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Job ID:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small;padding: 0px;\\\" id=\\\"searchJobID\\\" oninput={{action \\'updateSearchObjData\\' event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:350px\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Sensor ID:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small;padding: 0px;\\\" id=\\\"searchSensorID\\\" oninput={{action \\'updateSearchObjData\\' event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div></div><div style=\\\"width:100%;padding:0px;margin-top:10px;display:flex; flex-direction:row; align-items:center\\\"><div style=\\\"margin-left:10px;display:flex;flex-direction:row;align-items: center;margin-right:15px;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Is Redone:</label><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;display:flex;align-items:center;\\\"><input type=\\\"radio\\\" name=\\\"isRedoneFilter\\\" value=\\\"true\\\" style=\\\"margin-right:4px;\\\" checked={{if (eq this.searchIsRedone \\'true\\') true}} {{action \\'changeIsRedoneFilter\\' \\'true\\' on=\\\"change\\\"}}>Yes</label><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;display:flex;align-items:center;\\\"><input type=\\\"radio\\\" name=\\\"isRedoneFilter\\\" value=\\\"false\\\" style=\\\"margin-right:4px;\\\" checked={{if (eq this.searchIsRedone \\'false\\') true}} {{action \\'changeIsRedoneFilter\\' \\'false\\' on=\\\"change\\\"}}>No</label></div></div><div style=\\\"width:100%;padding:0px;margin-top:10px;display:flex; flex-direction:row; align-items:center\\\"><div style=\\\"margin-left:10px;display:flex;flex-direction:row;align-items: center;margin-right:15px;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Progression:</label><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;display:flex;align-items:center;\\\"><input type=\\\"radio\\\" name=\\\"progressionFilter\\\" value=\\\"full\\\" style=\\\"margin-right:4px;\\\" checked={{if (eq this.searchProgression \\'full\\') true}} {{action \\'changeProgressionFilter\\' \\'full\\' on=\\\"change\\\"}}>Full</label><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;display:flex;align-items:center;\\\"><input type=\\\"radio\\\" name=\\\"progressionFilter\\\" value=\\\"phase_i_only\\\" style=\\\"margin-right:4px;\\\" checked={{if (eq this.searchProgression \\'phase_i_only\\') true}} {{action \\'changeProgressionFilter\\' \\'phase_i_only\\' on=\\\"change\\\"}}>Only Phase I</label><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;display:flex;align-items:center;\\\"><input type=\\\"radio\\\" name=\\\"progressionFilter\\\" value=\\\"all\\\" style=\\\"margin-right:4px;\\\" checked={{if (eq this.searchProgression \\'all\\') true}} {{action \\'changeProgressionFilter\\' \\'all\\' on=\\\"change\\\"}}>All</label></div></div><div style=\\\"width:100%;padding:0px;margin-top:10px;display:flex; flex-direction:row; align-items:center\\\"><div style=\\\"margin-left:10px;margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'search\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Search </button></div><div style=\\\"margin-left:10px;margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'resetSearch\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Reset Search</button></div><div style=\\\"margin-left:10px;margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'resetSort\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Reset Sort</button></div></div><div style=\\\"width:100%;padding:0px;margin-top:10px;display:flex; flex-direction:column;\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;\\\"><label style=\\\"margin-bottom:0;\\\">Certificate Manager:</label></div></div><div style=\\\"width:100%;padding:0px;margin-top:10px;display:flex; flex-direction:row; align-items:center\\\"><div style=\\\"margin-left:10px;margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'batchCertificate\\' true on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">View & Export</button></div><div style=\\\"margin-left:10px;margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'batchCertificate\\' false on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Direct Export</button></div></div><table style=\\\"border-width: 0px;margin-top:10px\\\" class=\\\"table table-striped table-bordered\\\"><thead><tr><th><input id=\\\"HEADER_CB\\\" type=\\\"checkbox\\\" {{action \\'rowCheckbox\\' \\'HEADER_CB\\' on=\\\"change\\\"}}></th><th style=\\\"font-size: smaller;font-weight: normal;\\\">Checkout</th><th style=\\\"font-size: smaller;font-weight: normal;\\\">Inv</th><th style=\\\"font-size: smaller;font-weight: normal;\\\">Progress</th><th id=\\\"calibrationIDColumn\\\" {{action \\'columnCycleOrdering\\' \\'calibrationIDOrdering\\' on=\\\"click\\\"}} style=\\\"font-size: smaller;cursor:pointer;\\\">Calibration ID</th><th id=\\\"jobIDColumn\\\" {{action \\'columnCycleOrdering\\' \\'jobIDOrdering\\' on=\\\"click\\\"}} style=\\\"font-size: smaller;cursor:pointer;\\\">Job ID</th><th id=\\\"calibrationDateColumn\\\" {{action \\'columnCycleOrdering\\' \\'calibrationDateOrdering\\' on=\\\"click\\\"}} style=\\\"font-size: smaller;cursor:pointer;\\\">Calibration Date v</th><th id=\\\"sensorIDColumn\\\" {{action \\'columnCycleOrdering\\' \\'sensorIDOrdering\\' on=\\\"click\\\"}} style=\\\"font-size: smaller;cursor:pointer;\\\">Sensor ID</th><th style=\\\"font-size: smaller;font-weight: normal;\\\">Sensor Desc</th><th style=\\\"font-size: smaller;font-weight: normal;\\\">Employee</th><th style=\\\"font-size: smaller;font-weight: normal;\\\">Actions</th></tr></thead><tbody>{{#each this.frontendData.calibrationInstrumentProfileList as |profile|}}<tr><td><input id={{concat \\\"BATCH_CB_\\\"  profile.calibrationId}} type=\\\"checkbox\\\" {{action \\'rowCheckbox\\' (concat \\\"BATCH_CB_\\\"  profile.calibrationId) on=\\\"change\\\"}}></td><td><button type=\\\"button\\\" disabled={{if profile.isInventory false true}} {{action \\'checkoutSensor\\' profile on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Checkout </button></td><td><div>{{#if (is-equal profile.isInventory true)}}<FaIcon style=\\\"color:green\\\" @icon=\\\"check\\\" />       {{else}}<FaIcon style=\\\"color:red\\\" @icon=\\\"times\\\" />{{/if}}</div></td><td><div style={{profile.progress.trackStyle}}><div style={{profile.progress.fillStyle}}></div></div></td><td style=\\\"font-size: small;\\\">{{profile.calibrationId}}</td><td style=\\\"font-size: small;\\\">{{profile.jobId}}</td><td style=\\\"font-size: small;\\\">{{profile.calibrationDate}}</td><td style=\\\"font-size: small;\\\">{{profile.sensorId}}</td><td style=\\\"font-size: small;\\\">{{profile.sensorDescription}}</td><td style=\\\"font-size: small;\\\">{{profile.employee}}</td><td style=\\\"width: 200px;\\\"><div style=\\\"width: 100%;overflow-x: auto;display:inline-flex; min-width: max-content; gap:15px; cursor: pointer;color: blue;text-decoration: underline;font-size: smaller;\\\"><div {{action \\'viewCalibrationSheet\\' profile.calibrationId on=\\\"click\\\"}}>Certificate</div><div {{action \\'getCalibProfile\\' profile.calibrationId on=\\\"click\\\"}}>Profile</div>{{#if this.settingsConfig.CALIBRATIONSPECIFICPERMISSIONS.can_view_edit_from_inv}}{{#if (is-equal profile.isInventory true)}}<div {{action \\'viewFromInventoryEditSheet\\' profile on=\\\"click\\\"}}>Edit from Inv</div>{{else}}<div style=\\\"color:gray;cursor:not-allowed;text-decoration:none;\\\" title=\\\"Sensor is not in inventory\\\">Edit from Inv</div>{{/if}}{{/if}}</div></td></tr>{{/each}}</tbody></table><div style=\\\"display:flex;justify-content: flex-end;\\\">{{#each this.paginationSearchConfig.calibrationInstrumentProfilePaginationList as |page|}}<button type=\\\"button\\\" {{action \\'jumpToPage\\' page on=\\\"click\\\"}} style=\\\"border-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}};color: {{if (eq page \\'...\\') \\'black\\' \\'white\\'}};margin-right: 10px;font-size:small;padding: 5px;background-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}}\\\" class=\\\"btn btn-primary\\\">{{page}}</button>{{/each}}</div></div></div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/production/calibrationMainPage.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"min-height:1200px\\\">{{#if this.isShowConfig.isShowPopupNotification}}<div id=\\\"overlayBackdrop\\\" style=\\\"position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.25); z-index: 998; pointer-events: auto;\\\" {{action \\\"dismissPopupViaBackdrop\\\" on=\\\"click\\\"}}></div>{{/if}}{{#if this.isShowConfig.isShowPopupNotification}}<div id=\\\"notificationPopup\\\" style=\\\"max-height:700px; display:flex; flex-direction:column; position:fixed; top:50%; left:50%; transform:translate(-50%, -50%); z-index:999; width:1000px;background: white;border-width: 1px;border-color: gray;border-style: solid;border-radius: 10px;\\\"><div style=\\\"display: flex; flex-direction: row;justify-content: space-between;width: 100%; \\\"><h5 style=\\\"margin-left: 10px;\\\"></h5><label id=\\\"closeXButton\\\" style=\\\"margin-right: 10px;margin-bottom: 0;font-size: medium;cursor: pointer;color: grey;\\\" {{action \\\"closeNotificationPopup\\\" on=\\\"click\\\"}}>X</label></div><div id=\\\"notificationPopupContentBody\\\" style=\\\"overflow-x: scroll;overflow-y: scroll;padding-bottom: 10px; padding-left: 20px; display: flex; flex-direction: column;justify-content: space-between;width: 100%; padding-right: 20px;\\\"></div><div id=\\\"confirmationCheckBoxSection\\\" style=\\\"display:none;align-items: center; justify-content: center;flex-direction: row;width:100%\\\"><td class=\\\"input\\\"><input id=\\\"confirmationCheckBox\\\" type=\\\"checkbox\\\" class=\\\"form-control\\\"></td><label style=\\\"font-weight: bold;font-size: small;margin:0px\\\">I confirm the data posted above is correct.           </label></div><div id=\\\"buttonsPanel\\\" style=\\\"padding:15px;justify-content: center;flex-direction: row;display: flex;width:100%\\\"><button id=\\\"notificationReadyButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Ready</button><button id=\\\"notificationRefreshButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Refresh</button><button id=\\\"notificationOkButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Ok</button><button id=\\\"notificationAbortButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">ABORT</button><button id=\\\"notificationOverruleButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Overrule</button><button id=\\\"notificationYesButton\\\" type=\\\"button\\\" style=\\\"display:none; margin-left:10px;margin-right:10px;min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Yes </button><button id=\\\"notificationNoButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">No</button><button id=\\\"notificationSaveButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Save </button><button id=\\\"notificationPrintButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Print</button><button id=\\\"notificationExportButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Export</button></div></div>{{/if}}<div id=\\\"popupMessageSection\\\" class=\\\"pulse-border\\\"><div id=\\\"popupMessageBody\\\" style=\\\" padding: 10px; display: flex; flex-direction: column;width: 100%;\\\"></div></div><div id=\\\"controlPanel1\\\" style=\\\"display:flex; flex-direction:column; position:fixed; top: 27%;right: 10px;transform: translateY(-50%);z-index:999; width:auto; height:auto; background: white;border-width: 1px;border-color: gray;border-style: solid;border-radius: 10px;\\\"><button type=\\\"button\\\" {{action \\\"cycleVisualSettings\\\" on=\\\"click\\\"}} style=\\\"margin:5px;width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;align-self: end;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"rocket\\\" /> </button>{{#if this.isShowConfig.isShowSettings}}<div style=\\\"width:125px;display:flex;flex-direction:column;margin-left:5px;margin-right:5px;\\\"><div style=\\\"width:100%;border-style: solid;border-width: 1px;border-radius: 100px;border-color: lightgray;margin-bottom: 5px;\\\"></div>{{#if this.settingsConfig.tabs.home}}<div style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">View Home   </label><button type=\\\"button\\\" {{action \\\"scrollTop\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"home\\\" /> </button></div>{{/if}}{{#if this.settingsConfig.tabs.home}}<div style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">View Dashboard   </label><button type=\\\"button\\\" {{action \\\"scrollDashboard\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"tachometer-alt\\\" /> </button></div>{{/if}}<div style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">Cycle Displays  </label><button type=\\\"button\\\" {{action \\\"cycleView\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"eye\\\" /></button></div>{{#if (is-equal this.settingsConfig.phaseENV.canCycle true)}}{{#if this.settingsConfig.tabs.home}}<div id=\\\"cyclePhaseHotButton\\\" style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">Cycle Phase </label><button type=\\\"button\\\" {{action \\\"cyclePhase\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"exchange-alt\\\" /></button></div>{{/if}}{{/if}}{{#if (is-equal this.settingsConfig.phaseENV.canCycle true)}}{{#if this.settingsConfig.tabs.home}}<div id=\\\"cycleInternalHotButton\\\" style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">Cycle Core Ver. </label><button type=\\\"button\\\" {{action \\\"cycleInternalHotButton\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"exchange-alt\\\" /></button></div>{{/if}}{{/if}}{{#if this.settingsConfig.tabs.home}}<div style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">Rig Form</label><button type=\\\"button\\\" {{action \\\"cycleAddNewRigMode\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"tools\\\" /></button></div>{{/if}}{{#if this.settingsConfig.tabs.home}}<div style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">Pack Type Form </label><button type=\\\"button\\\" {{action \\\"cycleAddNewPackTypeMode\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"tools\\\" /></button></div>{{/if}}{{#if this.settingsConfig.tabs.home}}<div style=\\\"display:flex;flex-direction:row;justify-content: space-between;\\\"><label style=\\\"font-size: small;\\\">Rig Notifications </label><button type=\\\"button\\\" {{action \\\"viewRigNotifications\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"bell\\\" /></button></div>{{/if}}</div>{{/if}}</div><div style=\\\"display: flex; flex-direction: column; align-items: center; margin-top: 20px;\\\"></div><div style=\\\"display: flex; flex-direction: row; align-items: center;\\\"><h4>{{this.settingsConfig.softwareVersion}}</h4><div id=\\\"phaseValidationLabel\\\"></div></div><div id=\\\"cycleViewSection\\\" style=\\\"margin-left:15px\\\"><div {{action \\\"cycleView\\\" on=\\\"click\\\"}} style=\\\"cursor: pointer;display: flex; flex-direction: row; gap: 10px; margin: 0;    justify-content: center;\\\">{{#each this.getTabKeys as |tabKey|}}<div id={{tabKey}} style=\\\"width: 10px; height: 10px; border-radius: 50%; background-color: {{if (get this.settingsConfig.tabs tabKey) \\'grey\\' \\'lightgrey\\'}}\\\"></div>{{/each}}</div></div><div id=\\\"tabSlider\\\" style=\\\"width: 100%; max-width: 100%; overflow: hidden; position: relative;\\\"><div style=\\\"display: flex; width: 200%; transition: transform 0.5s ease; transform: {{if this.settingsConfig.tabs.home \\'translateX(0%)\\' \\'translateX(-50%)\\'}};\\\"><div style=\\\"width: 50%;\\\"><div style=\\\"display:flex;flex-direction:column;\\\"><label style=\\\"margin-bottom:0;font-size: large;color: red;\\\">AUTHORIZED PERSONNEL ONLY</label>{{#if this.showIrretrivableWarning}}<label style=\\\"margin-bottom:0;font-size: small;color: red;\\\">Do not manually refresh page. You will lose data, and it is irretrievable.</label>{{/if}}</div><div style=\\\"width:100%;display:flex;flex-direction:row;\\\"><div style=\\\"min-width:225px;display:flex;flex-direction:column;\\\"><div style=\\\"width:100%;display:flex;flex-direction:column;margin-bottom:15px\\\"><div style=\\\"margin-bottom:10px;\\\"><label style=\\\"margin-bottom:0;font-size: medium;\\\">Step 1: Rig</label><label style=\\\"margin-left:5px; margin-bottom:0;font-size: x-small;color: red;\\\">required</label></div><div style=\\\"padding-left: 10px; width: 100%;display: flex;flex-direction: row;align-items: center;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Profile:</label><td class=\\\"input\\\"><select id=\\\"selectedRigIP\\\" style=\\\"font-size: small;padding: 0px;\\\" onchange={{action (mut this.selectedRigDP) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"0\\\">Mandatory selection</option>{{#each this.getRigList as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div></div></div>{{#if (is-equal this.settingsConfig.phaseENV.phase 1)}}<div style=\\\"min-width:350px;display:flex;flex-direction:column;\\\"><div style=\\\"margin-bottom:10px;\\\"><label style=\\\"margin-bottom:0;font-size: medium;cursor:pointer;\\\" {{action \\'cycleIsRepair\\' on=\\\"click\\\"}}>Step 2: Pack Configuration</label><label style=\\\"margin-left:5px; margin-bottom:0;font-size: x-small;color: red;\\\">required</label></div>{{#if (is-equal this.settingsConfig.phaseENV.isRepairing true)}}<div style=\\\"padding-left: 10px; display: flex;flex-direction: row;align-items: center;\\\"><label style=\\\"min-width:65px;margin-bottom:0;font-size: small; margin-right:10px;\\\">Repair Completed Packs:</label><td class=\\\"input\\\"><select id=\\\"completedFullPackProfile\\\" style=\\\"font-size: small;padding: 0px;\\\" onchange={{action (mut this.completedPackProfileDP) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"0\\\">X-Pack</option>{{#each this.frontendData.completedFullPacksData as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div>{{else}}<div style=\\\"padding-left: 10px;margin-bottom: 5px;\\\"><label style=\\\"font-size: small;\\\">Pack Type Filter</label><div style=\\\"padding-left: 10px;margin-bottom: 5px;display:flex;flex-direction:row;\\\"><div style=\\\"padding-left: 10px;margin-bottom: 5px;display:flex;flex-direction:column;\\\"><label style=\\\"font-size: small; margin-right:10px;\\\">Size:</label><td class=\\\"input\\\"><input type=\\\"number\\\" min=\\\"3\\\" id=\\\"packTypeFilterPackNumber\\\" style=\\\"font-size: small;padding: 0px;width:80px;\\\" value={{this.packTypeFilterPackNumber}} oninput={{action (mut this.packTypeFilterPackNumber) value=\\\"target.value\\\"}} class=\\\"form-control\\\"></td></div><div style=\\\"padding-left: 10px;margin-bottom: 5px;display:flex;flex-direction:column;\\\"><label style=\\\"font-size: small; margin-right:10px;\\\">Max Length:</label><td class=\\\"input\\\"><input type=\\\"number\\\" id=\\\"packTypeFilterMaxLength\\\" style=\\\"font-size: small;padding: 0px;width:80px;\\\" value={{this.packTypeFilterMaxLength}} oninput={{action (mut this.packTypeFilterMaxLength) value=\\\"target.value\\\"}} class=\\\"form-control\\\"></td></div></div><button type=\\\"button\\\" {{action \\'applyPackTypeFilter\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 2px 10px;\\\" class=\\\"btn btn-primary\\\">Apply</button><button type=\\\"button\\\" {{action \\'resetPackTypeFilter\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 2px 10px; margin-left:5px;\\\" class=\\\"btn btn-secondary\\\">Reset</button></div><div style=\\\"padding-left: 10px; display: flex;flex-direction: row;align-items: center;\\\"><label style=\\\"min-width:65px;margin-bottom:0;font-size: small; margin-right:10px;\\\">Pack Type:</label><td class=\\\"input\\\"><select id=\\\"selectedPackType\\\" style=\\\"font-size: small;padding: 0px;\\\" onchange={{action (mut this.selectedPackTypeDP) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"0\\\">X-Pack</option>{{#each this.getTypeList as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div><div style=\\\"padding-left: 10px; width: 100%;display: flex;flex-direction: column;\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;\\\"><label style=\\\"min-width:65px;margin-bottom:0;font-size: small; margin-right:10px;\\\">Name:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small; padding:0px;\\\" oninput={{action \\'updatePackFormData\\' event=\\\"target\\\"}} id=\\\"packName\\\" class=\\\"form-control\\\"></td></div></div><div style=\\\"padding-left: 10px; display: flex;flex-direction: row;align-items: center;\\\"><label style=\\\"min-width:65px;margin-bottom:0;font-size: small; margin-right:10px;\\\">Memo:</label><td class=\\\"input\\\"><textarea type=\\\"text\\\" style=\\\"font-size: small; padding:0px;\\\" oninput={{action \\'updatePackFormData\\' event=\\\"target\\\"}} id=\\\"phase1Memo\\\" class=\\\"form-control\\\"></textarea></td></div>{{/if}}</div>{{else}}<div style=\\\"min-width:350px;display:flex;flex-direction:column;\\\"><div style=\\\"margin-bottom:10px;\\\"><label style=\\\"margin-bottom:0;font-size: medium;\\\">Step 2: Completed Packs</label><label style=\\\"margin-left:5px; margin-bottom:0;font-size: x-small;color: red;\\\">required</label></div><div style=\\\"padding-left: 10px;min-width:250px; width: 100%;display: flex;flex-direction: row;align-items: center;\\\"><label style=\\\"min-width:65px;margin-bottom:0;font-size: small; margin-right:10px;\\\">Profile:</label><td class=\\\"input\\\"><select id=\\\"selectedPackType\\\" style=\\\"font-size: small;padding: 0px;\\\" onchange={{action (mut this.manufacturedPackProfileDP) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"0\\\">Pack ID</option>{{#each this.frontendData.manufacturedPacksData as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div><div style=\\\"padding-left: 10px; display: flex;flex-direction: row;align-items: center;\\\"><label style=\\\"min-width:65px;margin-bottom:0;font-size: small; margin-right:10px;\\\">Memo:</label><td class=\\\"input\\\"><textarea type=\\\"text\\\" style=\\\"font-size: small; padding:0px;\\\" oninput={{action \\'updatePackFormData\\' event=\\\"target\\\"}} id=\\\"phase2Memo\\\" class=\\\"form-control\\\"></textarea></td></div></div>{{/if}}<div style=\\\"width: 100%;display: flex;flex-direction: row;align-items: center;overflow: hidden;\\\"><button type=\\\"button\\\" {{action \\\"validatePriorCalibration\\\" on=\\\"click\\\"}} style=\\\"width:150px;height:35px; padding:0px;\\\" class=\\\"btn btn-primary\\\">Validate       </button></div></div><div style=\\\"width:100%;display:flex;flex-direction:column;\\\">{{#if (is-equal this.isShowConfig.isShowRigForm true)}}<div style=\\\"height:10px\\\"></div><div style=\\\"margin-bottom:0;display:flex;flex-direction:row;align-items:center;\\'\\\"><div style=\\\"font-size:medium\\\">Rig Config Form </div><div style=\\\"font-size:small;display:flex; align-self: flex-end;\\\">{{#if (is-equal this.isShowConfig.isFormEditing true)}}<div {{action \\'cycleEditMode\\' on=\\\"click\\\"}} style=\\\"padding-left: 5px;text-decoration: underline;cursor:pointer;color:blue;\\\">Mode: Edit</div>{{else}}<div {{action \\'cycleEditMode\\' on=\\\"click\\\"}} style=\\\"padding-left: 5px;text-decoration: underline;cursor:pointer;color:blue;\\\">Mode: Add </div>{{/if}}</div></div><div style=\\\"display:flex;flex-direction:row;align-items: center;\\\"></div><div id=\\\"isForAnotherUserSection\\\" style=\\\"display:none;padding-left: 10px; width:100%;flex-direction:row;align-items: center;\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Is this for another user?</label><input type=\\\"checkbox\\\" name=\\\"isForAnotherUser\\\" checked={{this.isForAnotherUser}} onchange={{action (mut this.isForAnotherUser) value=\\\"target.checked\\\"}}></div></div><div style=\\\"padding-left: 10px; width: 100%;display: flex;flex-direction: row;align-items: center;\\\">{{#if (is-equal this.isShowConfig.isFormEditing true)}}<div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Rig Profile:</label><td class=\\\"input\\\"><select id=\\\"selectedRigIP\\\" style=\\\"font-size: small;padding: 0px;\\\" onchange={{action (mut this.selectedRigDPRigForm) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"0\\\"></option>{{#each this.getRigList as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div>{{/if}}<div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"rigFormRigIPTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">IP:</label><td class=\\\"input\\\"><input style=\\\"padding:0px;font-size:small\\\" type=\\\"text\\\" oninput={{action \\'updateRigFormData\\' event=\\\"target\\\"}} id=\\\"rigIP\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"rigFormRigNameTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Name:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"padding:0px;font-size:small\\\" oninput={{action \\'updateRigFormData\\' event=\\\"target\\\"}} id=\\\"rigName\\\" class=\\\"form-control\\\"></td></div>{{#if (is-equal this.isForAnotherUser true)}}<div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Users:</label><td class=\\\"input\\\"><select id=\\\"username\\\" style=\\\"font-size: small;padding: 0px;\\\" onchange={{action \\'updateRigFormData\\' event=\\\"target\\\"}} class=\\\"form-control\\\"><option value=\\\"\\\"></option>{{#each this.userListForRig as |userObj|}}<option value=\\\"{{userObj.username}}\\\">{{userObj.username}}</option>{{/each}}</select></td></div>{{/if}}<div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:200px\\\"><label {{action \\\"assistiveTooltip\\\" \\\"rigFormRigCategoryTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Category:</label><td style=\\\"width:100px;\\\" class=\\\"input\\\"><select id=\\\"rigCategory\\\" style=\\\"font-size: small;padding: 0px;\\\" onchange={{action \\'updateRigFormData\\' event=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"\\\"></option>{{#each this.getApprovedRigCategoryList as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div></div><div style=\\\"padding-left: 10px; width:100%;display:flex;flex-direction:row;align-items: center;\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"rigFormReferenceIDTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Reference Sensor S/N:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"padding:0px;font-size:small\\\" oninput={{action \\'updateRigFormData\\' event=\\\"target\\\"}} id=\\\"rigReferenceID\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"rigFormReferenceCalibrationValueTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Reference Sensor Certificate:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"padding:0px;font-size:small\\\" oninput={{action \\'updateRigFormData\\' event=\\\"target\\\"}} id=\\\"rigReferenceCalibrationValue\\\" class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"rigFormReferenceCalibrationDateTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Reference Sensor Certification Date:</label><td class=\\\"input\\\"><input type=\\\"datetime-local\\\" style=\\\"padding:0px;font-size:small\\\" oninput={{action \\'updateRigFormData\\' event=\\\"target\\\"}} id=\\\"rigReferenceCalibrationDate\\\" class=\\\"date-time-picker\\\"></td></div></div><div style=\\\"padding-left: 10px; width:100%;display:flex;flex-direction:row;align-items: center;\\\"><div style=\\\"margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'formSaveButton\\' \\'rig\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Save</button></div>{{#if (is-equal this.isShowConfig.isFormEditing true)}}<div style=\\\"margin-left:10px;margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'formDeleteButton\\' \\'rig\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Delete</button></div>{{/if}}</div>{{/if}}{{#if (is-equal this.isShowConfig.isShowPackTypeForm true)}}<div style=\\\"height:10px\\\"></div><div style=\\\"margin-bottom:0;display:flex;flex-direction:row;align-items:center;\\'\\\"><div style=\\\"font-size:medium\\\">Pack Type Config Form </div><div style=\\\"font-size:small;display:flex; align-self: flex-end;\\\">{{#if (is-equal this.isShowConfig.isFormEditing true)}}<div {{action \\'cycleEditMode\\' on=\\\"click\\\"}} style=\\\"padding-left: 5px;text-decoration: underline;cursor:pointer;color:blue;\\\">Mode: Edit</div>{{else}}<div {{action \\'cycleEditMode\\' on=\\\"click\\\"}} style=\\\"padding-left: 5px;text-decoration: underline;cursor:pointer;color:blue;\\\">Mode: Add</div>{{/if}}</div></div><div style=\\\"padding-left: 10px; width:100%;display:flex;flex-direction:row;\\\">{{#if (is-equal this.isShowConfig.isFormEditing true)}}<div style=\\\"width:20%;display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:250px;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Pack Type:</label><td class=\\\"input\\\"><select id=\\\"selectedPackTypeCalibForm\\\" style=\\\"font-size: small;padding: 0px;\\\" onchange={{action (mut this.selectedPackTypeDPCalibForm) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"0\\\">X-Pack</option>{{#each this.getTypeList as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td></div>{{/if}}<div style=\\\"width:20%;display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:250px;\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Pack Size:</label><td class=\\\"input\\\"><input type=\\\"number\\\" min=\\\"3\\\" style=\\\"max-width: 50px;padding:0px;font-size:small\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"packType\\\" class=\\\"form-control\\\"></td><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">- Pack</label></div><div style=\\\"width:20%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormActiveCoilsCount\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Active Number of Coils:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"activeCoilsCount\\\" class=\\\"form-control\\\"></td></div><div style=\\\"width:20%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormTotalCoilsCount\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Total Number of Coils on Board:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"totalCoilsCount\\\" class=\\\"form-control\\\"></td></div><div style=\\\"width:20%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormMinLimitTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Min:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"min\\\" class=\\\"form-control\\\"></td></div><div style=\\\"width:20%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormMaxLimitTooltip\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Max:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"max\\\" class=\\\"form-control\\\"></td></div></div><div style=\\\"padding-left: 10px; width:100%;display:flex;flex-direction:row;\\\"><div style=\\\"width:25%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormP1UnloadMin\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">PI Unload Min:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"phase1UnloadMinRange\\\" class=\\\"form-control\\\"></td></div><div style=\\\"width:25%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormP1LoadMin\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">PI Load Min:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"phase1LoadMinRange\\\" class=\\\"form-control\\\"></td></div><div style=\\\"width:25%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormP2Unload2Min\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">PII Unload 2 Min:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"phase2UnloadMinRange2\\\" class=\\\"form-control\\\"></td></div><div style=\\\"width:25%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormP2Load2Min\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">PII Load 2 Min:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"phase2LoadMinRange2\\\" class=\\\"form-control\\\"></td></div></div><div style=\\\"padding-left: 10px; width:100%;display:flex;flex-direction:row;\\\"><div style=\\\"width:25%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormP1UnloadMax\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">PI Unload Max:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"phase1UnloadMaxRange\\\" class=\\\"form-control\\\"></td></div><div style=\\\"width:25%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormP1LoadMax\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">PI Load Max:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"phase1LoadMaxRange\\\" class=\\\"form-control\\\"></td></div><div style=\\\"width:25%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormP2Unload2Max\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">PII Unload 2 Max:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"phase2UnloadMaxRange2\\\" class=\\\"form-control\\\"></td></div><div style=\\\"width:25%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormP2Load2Max\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">PII Load 2 Max:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"phase2LoadMaxRange2\\\" class=\\\"form-control\\\"></td></div></div><div style=\\\"padding-left: 10px; width:100%;display:flex;flex-direction:row;\\\"><div style=\\\"width:25%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormUnloadAcceptedVariance\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Unload Accepted Variance:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"acceptedUnloadVariance\\\" class=\\\"form-control\\\"></td></div><div style=\\\"width:25%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormLoadAcceptedVariance\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Load Accepted Variance:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"acceptedLoadVariance\\\" class=\\\"form-control\\\"></td></div></div><div style=\\\"padding-left: 10px; width:100%;display:flex;flex-direction:row;\\\"><div style=\\\"width:25%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormGeneralCoilsPositions\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Active Coils Position:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"generalCoilsPositions\\\" class=\\\"form-control\\\"></td></div><div style=\\\"width:25%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"packTypeFormReferenceUnfilledCoilsPositions\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Reference Unfilled Coils Position:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"referenceUnfilledCoilsPositions\\\" class=\\\"form-control\\\"></td></div></div><div style=\\\"padding-left: 10px; width:100%;display:flex;flex-direction:row;\\\"><div style=\\\"width:25%;display:flex;flex-direction:row;align-items: center;margin-right:10px;\\\"><label {{action \\\"assistiveTooltip\\\" \\\"\\\" on=\\\"click\\\"}} style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Stage Delay:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" oninput={{action \\'updatePackTypeFormData\\' event=\\\"target\\\"}} id=\\\"checkpointDelay\\\" class=\\\"form-control\\\"></td></div></div><div style=\\\"padding-left: 10px; display:flex;flex-direction:row;align-items: center;margin-right:10px;margin-top:10px;\\\"><div style=\\\"margin-left:10px;margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'formSaveButton\\' \\'packType\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Save</button></div>{{#if (is-equal this.isShowConfig.isFormEditing true)}}<div style=\\\"margin-left:10px;margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'formDeleteButton\\' \\'packType\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Delete</button></div>{{/if}}</div>{{/if}}</div><div style=\\\"height:10px\\\"></div><div><label id=\\\"dashboardTitle\\\" style=\\\"margin-bottom:0;font-size: medium;\\\">Packs Operation Dashboard</label><div style=\\\"width:100%; display:flex; flex-direction:row; padding-left:10px;border: solid;border-width: 0.1px;border-radius: 50px;padding: 5px;border-color: lightgray;\\\"><div style=\\\"width:20%; display:flex; flex-direction:row\\\"><div {{action \\\"assistiveTooltip\\\" \\\"statusBarStatusTooltip\\\" on=\\\"click\\\"}} style=\\\"font-size:small;display:flex; flex-direction:column; padding-right:10px\\\">Status:</div><div id=\\\"statusStatus\\\" style=\\\"font-size:small; font-weight:bold; display:flex; flex-direction:column; color:red\\\"></div></div><div style=\\\"width:20%; display:flex; flex-direction:row\\\"><div {{action \\\"assistiveTooltip\\\" \\\"statusBarConnectionTooltip\\n\\\" on=\\\"click\\\"}} style=\\\"font-size:small;display:flex; flex-direction:column; padding-right:10px\\\">Connection:</div><div id=\\\"connectionStatus\\\" style=\\\"font-size:small; font-weight:bold; display:flex; flex-direction:column; color:red\\\"></div></div><div style=\\\"width:20%; display:flex; flex-direction:row\\\"><div {{action \\\"assistiveTooltip\\\" \\\"statusBarCalibrationTooltip\\\" on=\\\"click\\\"}} style=\\\"font-size:small; display:flex; flex-direction:column; padding-right:10px\\\">Status:</div><div id=\\\"calibrationStatus\\\" style=\\\"font-size:small; font-weight:bold; display:flex; flex-direction:column; color:orange\\\"></div></div></div><div id=\\\"anchorLiveViewSections\\\" style=\\\"min-height: 20px;width:100%; display:flex; flex-direction:row;border: solid;border-width: 0.1px;border-radius: 50px;padding: 5px;border-color: lightgray;justify-content: space-between;\\\"></div><div id=\\\"packsProgressionViewSection\\\" class=\\\"packsProgressionViewSection\\\"><div id=\\\"packsProgressionBar\\\" class=\\\"packsProgressionBar\\\"><div id=\\\"packsProgressionValue\\\" class=\\\"packsProgressionValue\\\"></div></div></div><div style=\\\"display:flex;flex-direction:column\\\"><label style=\\\"padding-left:10px;margin-bottom:0px;font-size: x-small;\\\">Live Log</label><div style=\\\"display:flex;flex-direction:row;width:100%;height: 400px;\\\"><div id=\\\"streamingTextBoxControlPanel\\\" style=\\\"height: 100%;justify-content: space-evenly;display:flex;align-items: center;flex-direction:column;background-color: white;width: 30px;border-color: gray;border-style: solid;border-width: 1px 0 1px 1px;border-radius: 10px;\\\"><button type=\\\"button\\\" {{action \\\"copyChatToClipboard\\\" \\'streamingTextBox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"copy\\\" /></button><button type=\\\"button\\\" {{action \\\"unlockChatScroll\\\" \\'streamingTextBox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"unlock\\\" /></button><button type=\\\"button\\\" {{action \\\"lockChatScroll\\\" \\'streamingTextBox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"lock\\\" /></button><button type=\\\"button\\\" {{action \\\"exportChatToFile\\\" \\'streamingTextBox\\' on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"file-export\\\" /> </button><button type=\\\"button\\\" {{action \\\"showLiveGraphs\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"chart-line\\\" /> </button><button type=\\\"button\\\" {{action \\\"showCommandConsole\\\" on=\\\"click\\\"}} style=\\\"width: 20px;height: 20px;align-items: center;display: flex;justify-content: center;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"terminal\\\" /> </button></div><div id=\\\"streamingTextBoxWrapper\\\" style=\\\"height: 100%; width: 100%; border: solid;border-width: 1px;border-radius: 5px;border-color: gray;\\\"><canvas id=\\\"myChart\\\" style=\\\"display: {{if this.isShowConfig.isShowLiveGraphs \\'block;\\' \\'none;\\'}};width:100%;height:100%; \\\"></canvas><div id=\\\"streamingTextBox\\\" style=\\\"white-space:pre-line;display: {{if this.isShowConfig.isShowLiveGraphs \\'none;\\' \\'block;\\'}};width: 100%; height: 100%; font-size: x-small; color:black;background-color: rgba(255, 255, 255, 0.4); overflow-y: auto; padding: 5px;\\\"></div></div></div><div style=\\\"display: {{if this.isShowConfig.isShowCommandConsole \\'flex;\\' \\'none;\\'}};margin-left:30px;flex-direction:row;align-items: center;\\\"><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"min-width:500px;font-size: small;padding: 0px;\\\" onkeydown={{action \\\"onKeyDown\\\"}} id=\\\"cmdConsole\\\" class=\\\"form-control\\\"></td><button id=\\\"sendCommand\\\" {{action \\'sendCommand\\' on=\\\"click\\\"}} type=\\\"button\\\" style=\\\"padding: 3px;border: solid;border-radius: 50px;\\\" class=\\\"btn btn-primary\\\">Send</button></div></div><div style=\\\"width: 100%;display:flex;flex-direction:column;border-color: lightgray;border-style: solid;border-width: 1px;border-radius: 10px;margin-top: 10px;\\\"><div style=\\\"width: 100%;height: 100%;display:flex;flex-direction:row;\\\"><div id=\\\"stepperMotorSection\\\" style=\\\"pointer-events: none;opacity:0.5;min-width:220px;width: 25%; padding-left: 10px; display: flex; flex-direction: column;justify-content: space-between;margin-bottom: 10px;\\\"><div style=\\\"font-size:small;\\\">Stepper Motor</div><div style=\\\"display:flex;flex-direction:row; align-items:center;justify-content: space-evenly;padding-bottom: 5px; \\\"><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'stepperInit\\' \\\"\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">Init   </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualStepper\\' \\\"+8.33\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+8.33 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualStepper\\' \\\"+10\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+10 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualStepper\\' \\\"+1\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+1 </button></div><div style=\\\"display:flex;flex-direction:row; align-items:center;justify-content: space-evenly;\\\"><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'stepper0\\' \\\"\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">0 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualStepper\\' \\\"+25\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+25 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualStepper\\' \\\"-10\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">-10 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualStepper\\' \\\"-1\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">-1  </button></div></div><div style=\\\"border-style: solid;border-width: 1px;border-radius: 100px;border-color: lightgray;margin-top: 10px;margin-bottom: 10px;\\\"></div><div id=\\\"pressurePumpSection\\\" style=\\\"pointer-events: none;opacity:0.5;min-width:220px;width: 25%; padding-left: 10px; display: flex; flex-direction: column;justify-content: space-between;margin-bottom: 10px;\\\"><div style=\\\"font-size:small;\\\">Pressure Pump</div><div style=\\\"display:flex;flex-direction:row; align-items:center;justify-content: space-evenly;padding-bottom: 5px; \\\"><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"+100\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+100   </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"+50\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+50 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"+25\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+25 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"+10\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">+10</button></div><div style=\\\"display:flex;flex-direction:row; align-items:center;justify-content: space-evenly;\\\"><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"-100\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">-100 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"-50\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">-50 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"-25\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">-25 </button><button type=\\\"button\\\" {{action \\\"controlPanel\\\" \\'manualPump\\' \\\"-10\\\" on=\\\"click\\\"}} style=\\\"min-width:50px;font-size:x-small;padding: 3px;\\\" class=\\\"btn btn-primary\\\">-10</button></div></div><div style=\\\"border-style: solid;border-width: 1px;border-radius: 100px;border-color: lightgray;margin-top: 10px;margin-bottom: 10px;\\\"></div><div id=\\\"\\\" style=\\\"min-width:220px;width: 25%; padding-left: 10px; display: flex; flex-direction: column;justify-content: space-between;margin-bottom: 10px;\\\"></div><div style=\\\"border-style: solid;border-width: 1px;border-radius: 100px;border-color: lightgray;margin-top: 10px;margin-bottom: 10px;\\\"></div></div></div><div style=\\\"width: 100%;height: 50px;display: flex;flex-direction: row;justify-content: space-evenly;border: solid;border-width: 0.1px;border-radius: 50px;padding: 5px;border-color: lightgray;margin-top: 10px;\\\"><button type=\\\"button\\\" {{action \\\"reconnectWebSocket\\\" on=\\\"click\\\"}} style=\\\"min-width:80px;padding: 3px;border: solid;border-radius: 50px;\\\" class=\\\"btn btn-primary\\\">Reconnect </button>{{#if (is-equal this.settingsConfig.phaseENV.phase 1)}}<button id=\\\"phaseIButton\\\" type=\\\"button\\\" style=\\\"min-width:80px;padding: 3px;background-color:green;border: solid;border-radius: 50px;\\\" onmousedown={{action \\\"startVerificationPress\\\" \\'phaseIButton\\' 500 \\\"Phase I\\\"}} onmouseup={{action \\\"cancelVerificationPress\\\" \\\"phaseIButton\\\" \\\"Phase I\\\"}} onmouseleave={{action \\\"cancelVerificationPress\\\" \\\"phaseIButton\\\" \\\"Phase I\\\"}} class=\\\"btn btn-primary\\\">Phase I</button>{{else}}<button id=\\\"phaseIIButton\\\" type=\\\"button\\\" style=\\\"min-width:80px;padding: 3px;background-color:green;border: solid;border-radius: 50px;\\\" onmousedown={{action \\\"startVerificationPress\\\" \\'phaseIIButton\\' 500 \\\"Phase II\\\"}} onmouseup={{action \\\"cancelVerificationPress\\\" \\\"phaseIIButton\\\" \\\"Phase II\\\"}} onmouseleave={{action \\\"cancelVerificationPress\\\" \\\"phaseIIButton\\\" \\\"Phase II\\\"}} class=\\\"btn btn-primary\\\">Phase II</button>{{/if}}<button id=\\\"stopCalibrationButton\\\" type=\\\"button\\\" style=\\\"min-width:200px;padding: 3px;background-color:red;border: solid;border-radius: 50px;\\\" onmousedown={{action \\\"startVerificationPress\\\" \\'stopCalibrationButton\\' 500 \\\"STOP\\\"}} onmouseup={{action \\\"cancelVerificationPress\\\" \\\"stopCalibrationButton\\\" \\\"STOP\\\"}} onmouseleave={{action \\\"cancelVerificationPress\\\" \\\"stopCalibrationButton\\\" \\\"STOP\\\"}} class=\\\"btn btn-primary\\\">STOP</button><button id=\\\"resetCalibrationButton\\\" type=\\\"button\\\" style=\\\"min-width:80px;padding: 3px;background-color:red;border: solid;border-radius: 50px;\\\" onmousedown={{action \\\"startVerificationPress\\\" \\'resetCalibrationButton\\' 2500 \\\"RESET\\\"}} onmouseup={{action \\\"cancelVerificationPress\\\" \\\"resetCalibrationButton\\\" \\\"RESET\\\"}} onmouseleave={{action \\\"cancelVerificationPress\\\" \\\"resetCalibrationButton\\\" \\\"RESET\\\"}} class=\\\"btn btn-primary\\\">RESET</button></div></div></div><div style=\\\"padding-left:5px;width: 50%;\\\"><div style=\\\"width:100%;padding:0px;margin-top:10px;display:none; flex-direction:column;\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;\\\"><label style=\\\"margin-bottom:0;\\\">Rows:</label></div><div style=\\\"display:flex;flex-direction:row;align-items: center;\\\"><td class=\\\"input\\\"><select id=\\\"page_size\\\" style=\\\"padding: 0px;\\\" onchange={{action \\'updateSearchObjData\\' event=\\\"target\\\"}} class=\\\"form-control\\\"><option value=\\\"0\\\">-</option>{{#each this.getPaginationPageSizesList as |selectOption|}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></td><label id=\\\"totalReadings\\\" style=\\\"margin-bottom:0;margin-left:15px;\\\">Total:</label></div></div><div style=\\\"width:100%;padding:0px;margin-top:10px;display:flex; flex-direction:column;\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;\\\"><label style=\\\"margin-bottom:0;\\\">Filters:</label></div></div>{{#if (is-equal this.isContractor false)}}<div style=\\\"margin-left:15px;width:100%;padding:0px;margin-top:10px;display:flex; flex-direction:row; align-items:center\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Is Used:</label><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;display:flex;align-items:center;\\\"><input type=\\\"radio\\\" name=\\\"isUsedFilter\\\" style=\\\"margin-right:4px;\\\" checked={{if (eq this.searchIsUsed true) true}} {{action \\'changeIsUsedFilter\\' true on=\\\"change\\\"}}>True</label><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;display:flex;align-items:center;\\\"><input type=\\\"radio\\\" name=\\\"isUsedFilter\\\" style=\\\"margin-right:4px;\\\" checked={{if (eq this.searchIsUsed false) true}} {{action \\'changeIsUsedFilter\\' false on=\\\"change\\\"}}>False</label></div>{{/if}}<div style=\\\"margin-left:15px;width:100%;padding:0px;margin-top:10px;display:flex; flex-direction:row; align-items:center\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Phase:</label><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;display:flex;align-items:center;\\\"><input type=\\\"radio\\\" name=\\\"phaseFilter\\\" value=\\\"phaseI\\\" style=\\\"margin-right:4px;\\\" checked={{if (eq this.searchPhase \\'phaseI\\') true}} {{action \\'changePhaseFilter\\' \\'phaseI\\' on=\\\"change\\\"}}>P1 Passed</label>{{#if (is-equal this.isContractor false)}}<label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;display:flex;align-items:center;\\\"><input type=\\\"radio\\\" name=\\\"phaseFilter\\\" value=\\\"phaseII\\\" style=\\\"margin-right:4px;\\\" checked={{if (eq this.searchPhase \\'phaseII\\') true}} {{action \\'changePhaseFilter\\' \\'phaseII\\' on=\\\"change\\\"}}>P2 Passed</label><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;display:flex;align-items:center;\\\"><input type=\\\"radio\\\" name=\\\"phaseFilter\\\" value=\\\"both\\\" style=\\\"margin-right:4px;\\\" checked={{if (eq this.searchPhase \\'both\\') true}} {{action \\'changePhaseFilter\\' \\'both\\' on=\\\"change\\\"}}>Both Passed</label>{{/if}}<label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;display:flex;align-items:center;\\\"><input type=\\\"radio\\\" name=\\\"phaseFilter\\\" value=\\\"all\\\" style=\\\"margin-right:4px;\\\" checked={{if (eq this.searchPhase \\'all\\') true}} {{action \\'changePhaseFilter\\' \\'all\\' on=\\\"change\\\"}}>All</label></div><div style=\\\"margin-left:15px;width:100%;padding:0px;margin-top:10px;display:flex; flex-direction:row; align-items:center\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:350px\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">ID:</label><td class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"font-size: small;padding: 0px;\\\" id=\\\"searchValidationID\\\" oninput={{action \\'updateSearchObjData\\' event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:350px\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Pack ID:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small;padding: 0px;\\\" id=\\\"searchPackID\\\" oninput={{action \\'updateSearchObjData\\' event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:350px\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Pack Name:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small;padding: 0px;\\\" id=\\\"searchPackName\\\" oninput={{action \\'updateSearchObjData\\' event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div>{{#if (is-equal this.isContractor false)}}<div style=\\\"display:flex;flex-direction:row;align-items: center;margin-right:10px;max-width:350px\\\"><label style=\\\"margin-bottom:0;font-size: small; margin-right:10px;\\\">Company:</label><td class=\\\"input\\\"><input type=\\\"text\\\" style=\\\"font-size: small;padding: 0px;\\\" id=\\\"searchCompany\\\" oninput={{action \\'updateSearchObjData\\' event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div>{{/if}}</div><div style=\\\"margin-left:15px;width:100%;padding:0px;margin-top:10px;display:flex; flex-direction:row; align-items:center\\\"><div style=\\\"margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'search\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Search </button></div><div style=\\\"margin-left:10px;margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'resetSearch\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Reset Search</button></div><div style=\\\"margin-left:10px;margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'resetSort\\' on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Reset Sort</button></div></div><div style=\\\"width:100%;padding:0px;margin-top:10px;display:flex; flex-direction:column;\\\"><div style=\\\"display:flex;flex-direction:row;align-items: center;\\\"><label style=\\\"margin-bottom:0;\\\">Profile Manager:</label></div></div><div style=\\\"width:100%;padding:0px;margin-top:10px;display:flex; flex-direction:row; align-items:center\\\"><div style=\\\"margin-left:10px;margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'batchProfile\\' true on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">View & Export</button></div><div style=\\\"margin-left:10px;margin-right:10px;\\\"><button type=\\\"button\\\" {{action \\'batchProfile\\' false on=\\\"click\\\"}} style=\\\"font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Direct Export</button></div></div><table style=\\\"border-width: 0px;margin-top:10px\\\" class=\\\"table table-striped table-bordered\\\"><thead><tr><th><input id=\\\"HEADER_CB\\\" type=\\\"checkbox\\\" {{action \\'rowCheckbox\\' \\'HEADER_CB\\' on=\\\"change\\\"}}></th><th id=\\\"validationIdColumn\\\" {{action \\'columnCycleOrdering\\' \\'validationIdOrdering\\' on=\\\"click\\\"}} style=\\\"min-width:50px;font-size: smaller;cursor:pointer;\\\">ID v</th><th id=\\\"progressionColumn\\\" style=\\\"font-size: smaller; font-weight: normal;\\\">Progression</th><th id=\\\"packIdColumn\\\" {{action \\'packIdHeaderClick\\' on=\\\"click\\\"}} onmousedown={{action \\'packIdHeaderPressStart\\'}} onmouseup={{action \\'packIdHeaderPressEnd\\'}} onmouseleave={{action \\'packIdHeaderPressEnd\\'}} style=\\\"font-size: smaller;cursor:pointer;\\\">Pack ID</th><th {{action \\'\\' on=\\\"click\\\"}} style=\\\"font-size: smaller; font-weight: normal;\\\">Pack Name</th><th {{action \\'\\' on=\\\"click\\\"}} style=\\\"font-size: smaller; font-weight: normal; \\\">Company</th><th id=\\\"phase1ValidationDateColumn\\\" {{action \\'columnCycleOrdering\\' \\'phase1ValidationDateOrdering\\' on=\\\"click\\\"}} style=\\\"min-width:80px;font-size: smaller;cursor:pointer;\\\">P1 Date</th><th {{action \\'\\' on=\\\"click\\\"}} style=\\\"font-size: smaller; font-weight: normal;\\\">P1 Employee</th><th id=\\\"phase2ValidationDateColumn\\\" {{action \\'columnCycleOrdering\\' \\'phase2ValidationDateOrdering\\' on=\\\"click\\\"}} style=\\\"min-width:80px;font-size: smaller;cursor:pointer;\\\">P2 Date</th><th {{action \\'\\' on=\\\"click\\\"}} style=\\\"font-size: smaller; min-width:100px; font-weight: normal;\\\">P2 Employee</th><th id=\\\"progressionColumn\\\" style=\\\"font-size: smaller; font-weight: normal;\\\">Verdict</th><th id=\\\"overruledColumn\\\" {{action \\'columnCycleOrdering\\' \\'overruledOrdering\\' on=\\\"click\\\"}} style=\\\"min-width:80px;font-size: smaller;cursor:pointer;\\\">Overruled</th><th {{action \\'\\' on=\\\"click\\\"}} style=\\\"font-size: smaller; font-weight: normal;\\\">Actions</th></tr></thead><tbody>{{#each this.frontendData.packsValidationProfileList as |profile|}}<tr><td><input id={{concat \\\"BATCH_CB_\\\" profile.validationId}} type=\\\"checkbox\\\" {{action \\'rowCheckbox\\' (concat \\\"BATCH_CB_\\\" profile.validationId) on=\\\"change\\\"}}></td><td style=\\\"font-size: small;\\\">{{profile.validationId}}</td><td style=\\\"font-size: small;\\\">{{get-packs-validation-progression profile}}</td><td style=\\\"font-size: small;\\\">{{profile.packId}}</td><td style=\\\"font-size: small;\\\">{{profile.packName}}</td><td style=\\\"font-size: small;\\\">{{profile.company}}</td><td style=\\\"font-size: small;\\\">{{profile.phase1ValidationDate}}</td><td style=\\\"font-size: small;\\\">{{profile.phase1Employee}}</td><td style=\\\"font-size: small;\\\">{{profile.phase2ValidationDate}}</td><td style=\\\"font-size: small;\\\">{{profile.phase2Employee}}</td><td style=\\\"font-size: small;\\\">{{get-packs-validation-verdict profile}}</td><td style=\\\"font-size: small;\\\">{{profile.phase2OverruleEmployee}}</td><td><div style=\\\"display:flex; flex-direction:row;justify-content:space-evenly;    cursor: pointer;color: blue;text-decoration: underline;font-size: smaller;\\\"><div {{action \\'getPackProfile\\' profile.validationId on=\\\"click\\\"}}>Profile</div></div></td></tr>{{/each}}</tbody></table><div style=\\\"display:flex;justify-content: flex-end;\\\">{{#each this.paginationSearchConfig.packsValidationInstrumentProfilePaginationList as |page|}}<button type=\\\"button\\\" {{action \\'jumpToPage\\' page on=\\\"click\\\"}} style=\\\"border-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}};color: {{if (eq page \\'...\\') \\'black\\' \\'white\\'}};margin-right: 10px;font-size:small;padding: 5px;background-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}}\\\" class=\\\"btn btn-primary\\\">{{page}}</button>{{/each}}</div></div></div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/production/packsValidationMainPage.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"progress-container\\\">\\n  <span class=\\\"progress-label\\\">{{@taskName}}</span>\\n  <BsProgress as |pg| >\\n    <pg.bar @value={{@percentage}} @minValue={{0}} @maxValue={{100}} @showLabel={{true}}  @type=\\\"info\\\" aria-label=\\\"Loading\\\" />\\n  </BsProgress>\\n</div>', { moduleName: 'geotechnical-data-platform-new/templates/components/progress-bar.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<input type=\\\"radio\\\" id={{@type}} name=\\\"rdb\\\" value=\\\"raw\\\" checked={{@checked}} onclick={{@setValue}}>\\n<label for={{@type}} style=\\\"margin-left: 5px;margin-bottom: 0px;\\\">{{@type}}</label><br>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/radio-buttons.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"display:flex;flex-direction:row;align-items:center;\\\">{{displacement-units-group dispUnits=this.dispUnits initValue=this.getDispPart allowRAW=this.allowRAW allowBits=this.allowBits onChange=(action \\\"updateDispDropdownUnit\\\")}}<div style=\\\"margin-left:10px; margin-right:10px\\\">/</div>{{time-units-group timeUnits=this.timeUnits initValue=this.getTimePart onChange=(action \\\"updateTimeDropdownUnit\\\")}}</div>', { moduleName: 'geotechnical-data-platform-new/templates/components/rate-velocity-units-group.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@pageSize}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n    <LinkTo @route=\\\"raw-data\\\" @model={{this.instrumentId}} @query={{hash page_size=20 page=1}} class=\\\"dropdown-item\\\">20</LinkTo>\\n    <LinkTo @route=\\\"raw-data\\\" @model={{this.instrumentId}} @query={{hash page_size=50 page=1}} class=\\\"dropdown-item\\\">50</LinkTo>\\n    <LinkTo @route=\\\"raw-data\\\" @model={{this.instrumentId}} @query={{hash page_size=100 page=1}} class=\\\"dropdown-item\\\">100</LinkTo>\\n    <LinkTo @route=\\\"raw-data\\\" @model={{this.instrumentId}} @query={{hash page_size=250 page=1}} class=\\\"dropdown-item\\\">250</LinkTo>\\n    <LinkTo @route=\\\"raw-data\\\" @model={{this.instrumentId}} @query={{hash page_size=500 page=1}} class=\\\"dropdown-item\\\">500</LinkTo>\\n    <LinkTo @route=\\\"raw-data\\\" @model={{this.instrumentId}} @query={{hash page_size=750 page=1}} class=\\\"dropdown-item\\\">750</LinkTo>\\n    <LinkTo @route=\\\"raw-data\\\" @model={{this.instrumentId}} @query={{hash page_size=1000 page=1}} class=\\\"dropdown-item\\\">1000</LinkTo>\\n    <LinkTo @route=\\\"raw-data\\\" @model={{this.instrumentId}} @query={{hash page_size=1500 page=1}} class=\\\"dropdown-item\\\">1500</LinkTo>\\n    <LinkTo @route=\\\"raw-data\\\" @model={{this.instrumentId}} @query={{hash page_size=2000 page=1}} class=\\\"dropdown-item\\\">2000</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/raw-drop-down.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@pageSize}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"raw-frequency-events-data\\\" @model={{@instrumentId}} @query={{hash page_size=20 page=1}} class=\\\"dropdown-item\\\">20</LinkTo>\\n        <LinkTo @route=\\\"raw-frequency-events-data\\\" @model={{@instrumentId}} @query={{hash page_size=50 page=1}} class=\\\"dropdown-item\\\">50</LinkTo>\\n        <LinkTo @route=\\\"raw-frequency-events-data\\\" @model={{@instrumentId}} @query={{hash page_size=100 page=1}} class=\\\"dropdown-item\\\">100</LinkTo>\\n        <LinkTo @route=\\\"raw-frequency-events-data\\\" @model={{@instrumentId}} @query={{hash page_size=250 page=1}} class=\\\"dropdown-item\\\">250</LinkTo>\\n        <LinkTo @route=\\\"raw-frequency-events-data\\\" @model={{@instrumentId}} @query={{hash page_size=500 page=1}} class=\\\"dropdown-item\\\">500</LinkTo>\\n        <LinkTo @route=\\\"raw-frequency-events-data\\\" @model={{@instrumentId}} @query={{hash page_size=750 page=1}} class=\\\"dropdown-item\\\">750</LinkTo>\\n        <LinkTo @route=\\\"raw-frequency-events-data\\\" @model={{@instrumentId}} @query={{hash page_size=1000 page=1}} class=\\\"dropdown-item\\\">1000</LinkTo>\\n        <LinkTo @route=\\\"raw-frequency-events-data\\\" @model={{@instrumentId}} @query={{hash page_size=1500 page=1}} class=\\\"dropdown-item\\\">1500</LinkTo>\\n        <LinkTo @route=\\\"raw-frequency-events-data\\\" @model={{@instrumentId}} @query={{hash page_size=2000 page=1}} class=\\\"dropdown-item\\\">2000</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/raw-frequency-events-drop-down.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@pageSize}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n    <ddm.item><LinkTo @route=\\\"raw-gateway-data\\\" @model={{@gatewayId}} @query={{hash page_size=20}} class=\\\"dropdown-item\\\">20</LinkTo></ddm.item>\\n    <ddm.item><LinkTo @route=\\\"raw-gateway-data\\\" @model={{@gatewayId}} @query={{hash page_size=50}} class=\\\"dropdown-item\\\">50</LinkTo></ddm.item>\\n    <ddm.item><LinkTo @route=\\\"raw-gateway-data\\\" @model={{@gatewayId}} @query={{hash page_size=100}} class=\\\"dropdown-item\\\">100</LinkTo></ddm.item>\\n    <ddm.item><LinkTo @route=\\\"raw-gateway-data\\\" @model={{@gatewayId}} @query={{hash page_size=250}} class=\\\"dropdown-item\\\">250</LinkTo></ddm.item>\\n    <ddm.item><LinkTo @route=\\\"raw-gateway-data\\\" @model={{@gatewayId}} @query={{hash page_size=500}} class=\\\"dropdown-item\\\">500</LinkTo></ddm.item>\\n    <ddm.item><LinkTo @route=\\\"raw-gateway-data\\\" @model={{@gatewayId}} @query={{hash page_size=750}} class=\\\"dropdown-item\\\">750</LinkTo></ddm.item>\\n    <ddm.item><LinkTo @route=\\\"raw-gateway-data\\\" @model={{@gatewayId}} @query={{hash page_size=1000}} class=\\\"dropdown-item\\\">1000</LinkTo></ddm.item>\\n    <ddm.item><LinkTo @route=\\\"raw-gateway-data\\\" @model={{@gatewayId}} @query={{hash page_size=1500}} class=\\\"dropdown-item\\\">1500</LinkTo></ddm.item>\\n    <ddm.item><LinkTo @route=\\\"raw-gateway-data\\\" @model={{@gatewayId}} @query={{hash page_size=2000}} class=\\\"dropdown-item\\\">2000</LinkTo></ddm.item>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/raw-gateway-drop-down.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown @closeOnMenuClick={{true}} as |dd|>\\n  <dd.button>{{@port_number}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n    {{#each this.ports as |port|}}\\n          <LinkTo @route=\\\"raw-data\\\" @model={{@instrumentId}} @query={{hash page_size=20 page=1 port_number=port.channel}} class=\\\"dropdown-item\\\">{{port.channel}}</LinkTo>\\n    {{/each}}\\n  </dd.menu>\\n</BsDropdown>\\n\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/raw-port-drop-down.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"margin-top: 10px;\\\"><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:450px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-spatial\\\"></canvas></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;margin-top:4px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Hover over the chart to see values in the panel below\\\">Hover to see values</div><div title=\\\"Colored dots on x-axis show anchor positions\\\">Dots = anchor positions</div><div title=\\\"Scroll up to zoom out centered around cursor\\\">Scroll up to zoom out</div><div title=\\\"Scroll down to zoom in towards cursor\\\">Scroll down to zoom in</div><div title=\\\"Click and drag left or right\\\">Drag to pan</div><div title=\\\"Double-click anywhere on the chart\\\">Double-click to reset</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/rebar/chartjs-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/rebar/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.project}} oninput={{action (mut this.newInstrumentObject.project) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectProject\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.location}} oninput={{action (mut this.newInstrumentObject.location) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCoordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.east}} oninput={{action (mut this.newInstrumentObject.east) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.north}} oninput={{action (mut this.newInstrumentObject.north) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.depth}} oninput={{action (mut this.newInstrumentObject.depth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectAzimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.azimuth}} oninput={{action (mut this.newInstrumentObject.azimuth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAzimuth\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectDip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.dip}} oninput={{action (mut this.newInstrumentObject.dip) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDip\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.level}} oninput={{action (mut this.newInstrumentObject.level) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLevel\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectBorehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.borehole}} oninput={{action (mut this.newInstrumentObject.borehole) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectBorehole\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstrument_length\\\" class=\\\"col-12 col-form-label\\\">Total bolt length (m):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.instrumentLength}} oninput={{action (mut this.newInstrumentObject.instrumentLength) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstrumentLength\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectStrokeLength\\\" class=\\\"col-12 col-form-label bold\\\">Stroke Length (mm):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.strokeLength}} oninput={{action (mut this.newInstrumentObject.strokeLength) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectStrokeLength\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectHeadExclusionLength\\\" class=\\\"col-12 col-form-label\\\">Thread Exclusion Length (mm):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.headExclusionLength}} oninput={{action (mut this.newInstrumentObject.headExclusionLength) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectHeadExclusionLength\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectGaugeLength\\\" class=\\\"col-12 col-form-label\\\">Gauge Length (mm):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.gaugeLength}} oninput={{action (mut this.newInstrumentObject.gaugeLength) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectGaugeLength\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectStacked\\\" class=\\\"col-12 col-form-label\\\">Stacked:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><label data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" data-offset=\\\"0 -7\\\" class=\\\"custom-control custom-checkbox empty-checkbox-title mr-sm-2 has-tooltip-info\\\"><input type=\\\"checkbox\\\" {{action \\\"stackedChanged\\\" on=\\\"change\\\"}} id=\\\"newInstrumentObjectStacked\\\" class=\\\"custom-control-input\\\"><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\"></span></label></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.installedBy}} oninput={{action (mut this.newInstrumentObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.purpose}} oninput={{action (mut this.newInstrumentObject.purpose) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newInstrumentObject.notes}} oninput={{action (mut this.newInstrumentObject.notes) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr><tr><td><br /></td></tr><tr><td><label for=\\\"newInstrumentObjectElasticLimitPct\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit strain (%):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.elasticLimitPct}} oninput={{action (mut this.newInstrumentObject.elasticLimitPct) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectElasticLimitPct\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPlasticLimitPct\\\" class=\\\"col-12 col-form-label\\\">Plastic Limit strain (%):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.plasticLimitPct}} oninput={{action (mut this.newInstrumentObject.plasticLimitPct) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPlasticLimitPct\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectUltimateLimitPct\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit strain (%):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.ultimateLimitPct}} oninput={{action (mut this.newInstrumentObject.ultimateLimitPct) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectUltimateLimitPct\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjEctelasticLimitFce\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit force (kN):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.elasticLimitFce}} oninput={{action (mut this.newInstrumentObject.elasticLimitFce) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjEctelasticLimitFce\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPlasticLimitFce\\\" class=\\\"col-12 col-form-label\\\">Plastic Limit force (kN):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.plasticLimitFce}} oninput={{action (mut this.newInstrumentObject.plasticLimitFce) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPlasticLimitFce\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectUltimateLimitFce\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit force (kN):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.ultimateLimitFce}} oninput={{action (mut this.newInstrumentObject.ultimateLimitFce) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectUltimateLimitFce\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/rebar/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{this.instrumentAnchors.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each this.instrumentAnchors as |anchor|}}<td>{{anchor}}</td>{{/each}}<td>Temperature</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action \\\"setNewTimestampValue\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action \\\"setNewDisplacementValue\\\" key}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} oninput={{action \\\"setTemperatureValue\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/rebar/create-new-raw-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"width: 100%;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:10px\\\"><div style=\\\"margin-right:10px\\\"><div class=\\\"inst-buttons\\\"><span {{action \\\"viewData\\\" @instrument.id }} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div></div><div style=\\\"margin-right:10px\\\">{{#if @hasGraphs}}<div class=\\\"inst-buttons\\\"><span {{action \\\"tGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div></div><div style=\\\"text-decoration:underline;margin-bottom:10px; cursor:pointer;\\\" onClick={{action \\\"cycleAlertsListVisibility\\\"}}><h5>Alerts:</h5></div>{{#if this.isAlertsListVisible}}{{#if this.licenceIsValid}}<div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content: space-between;\\\"><div class=\\\"action-bar-section\\\"><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"table-legend\\\"}} class=\\\"action-bar-head-body\\\">Table Legend</div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"actions\\\"}} class=\\\"action-bar-head-body\\\">Actions</div></div></div>{{/if}}<div style=\\\"margin:15px\\\">{{#if (is-equal this.activeActionTab \\\"table-legend\\\")}}{{table-legend-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"actions\\\")}}{{actions-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"batch-actions\\\")}}{{batch-actions-alerts batchSelectedAlertsID=this.batchSelectedAlertsID alerts=@model.alerts isShowBatchConfirmationModal=this.isShowBatchConfirmationModal typeBatch=this.typeBatch batchWarningMessage=this.batchWarningMessage}}{{/if}}</div><div style=\\\"margin-bottom:10px\\\">{{alerts-list licenceIsValid=this.licenceIsValid allowBatchSelect=false batchSelectedAlertsID=this.batchSelectedAlertsID alerts=this.alertsList globalDatetimeFormat=@globalDatetimeFormat ordering=this.ordering sortBy=(action \\'sortBy\\')}}</div><div style=\\\"display:flex;justify-content: flex-end;\\\">{{#each this.paginationSearchConfig.alertProfilePaginationList as |page|}}<button type=\\\"button\\\" {{action \\'jumpToPage\\' page on=\\\"click\\\"}} style=\\\"border-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}};color: {{if (eq page \\'...\\') \\'black\\' \\'white\\'}};margin-right: 10px;font-size:small;padding: 5px;background-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}}\\\" class=\\\"btn btn-primary\\\">{{page}}</button>{{/each}}</div>{{/if}}<div style=\\\"width: 100%;\\\"><div><h5>Properties:</h5></div><div style=\\\"width: 100%;display:flex;flex-direction:row;\\\"><div style=\\\"width: 50%;display:flex;flex-direction:column;\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"channelsNum\\\" class=\\\"col-12 col-form-label\\\">Channels:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'channelsNum\\' isEditable=false}}</td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"coordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=@instrument east=@instrument.east north=@instrument.north depth=@instrument.depth stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"azimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'azimuth\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"dip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'dip\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"borehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'borehole\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'zeroTimestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></div><div style=\\\"width: 50%;display:flex;flex-direction:column;\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"strokeLength\\\" class=\\\"col-12 col-form-label\\\">Total Bolt Length (m):</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'instrumentLength\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"strokeLength\\\" class=\\\"col-12 col-form-label\\\">Stroke Length (mm):</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'strokeLength\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"headExclusionLength\\\" class=\\\"col-12 col-form-label\\\">Thread Exclusion Length (mm):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'headExclusionLength\\' update=(action \\'updatePage\\') stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"gaugeLength\\\" class=\\\"col-12 col-form-label\\\">Gauge Length (mm):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'gaugeLength\\' update=(action \\'updatePage\\') stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"referenceAnchor\\\" class=\\\"col-12 col-form-label\\\">Reference Anchor:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'referenceAnchor\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Active:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument id=\\\"activeCheck\\\" field=\\'active\\'}}</td></tr><tr><td><br /></td></tr><tr><td><label for=\\\"elasticLimitPct\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit strain (%):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'elasticLimitPct\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"plasticLimitPct\\\" class=\\\"col-12 col-form-label\\\">Plastic Limit strain (%):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'plasticLimitPct\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"ultimateLimitPct\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit strain (%):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'ultimateLimitPct\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"elasticLimitFce\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit force (kN):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'elasticLimitFce\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"plasticLimitFce\\\" class=\\\"col-12 col-form-label\\\">Plastic Limit force (kN):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'plasticLimitFce\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"ultimateLimitFce\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit force (kN):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'ultimateLimitFce\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></div></div><div style=\\\"padding: 0.2rem;font-weight:bold;\\\">Anchor Diagram:</div><div style=\\\"padding:10px;width: 100%;\\\">{{#if this.isEditAnchorDiagram}}<div style=\\\"display:flex;flex-direction:row;align-items:center\\\"><div style=\\\"width: 100%;\\\">{{instrument-anchors-diagram showHATHACLabels=false style=\\\"width: 100%;\\\" inputMode=\\\"input\\\" initialValues=this.anchorDiagramInputInitalValue instrumentID=@instrument.id headAt=@instrument.headAt.id instrumentTypeText=@instrument.instrumentType.title channels=@instrument.channelsNum onCustomNumberInput=(action \\\"updateChannelInput\\\")}}</div><div style=\\\"margin-right:10px;margin-left:10px;cursor:pointer;\\\" onClick={{action \\\"saveAnchors\\\"}}><FaIcon @icon=\\\"check\\\" /></div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleEditAnchorDiagram\\\"}}><FaIcon @icon=\\\"times\\\" /></div></div>{{else}}<div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleEditAnchorDiagram\\\"}}>{{instrument-anchors-diagram showHATHACLabels=false style=\\\"width: 100%;\\\" inputMode=\\\"label\\\" initialValues=this.anchorDiagramLabelInitalValue instrumentID=@instrument.id headAt=@instrument.headAt.id instrumentTypeText=@instrument.instrumentType.title channels=@instrument.channelsNum}}</div>{{/if}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/rebar/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-spatial-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-spatial-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/rebar/nvd3-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/rebar/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"table-responsive\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th>{{#each this.columnSpecs as |spec|}}<th>{{spec.tableLabel}}</th>{{/each}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th></tr></thead><tbody>{{#each this.tableRows as |row|}}<tr><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td>{{#each row.cells as |cell|}}<td>{{cell.value}}</td>{{/each}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td></tr>{{/each}}</tbody></table></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/rebar/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'axial-displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Axial Displacement</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'axial-strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Axial Strain</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'bending-strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Bending Strain</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'load-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Axial Load</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/rebar/spatial-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Stretch</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'axial-displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Axial Displacement</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Total Strain</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'axial-strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Axial Strain</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'bending-strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Bending Strain</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'load-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Axial Load</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/rebar/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"margin-top: 10px;\\\"><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:450px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-spatial\\\"></canvas></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;margin-top:4px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Hover over the chart to see values in the panel below\\\">Hover to see values</div><div title=\\\"Colored dots on x-axis show anchor positions\\\">Dots = anchor positions</div><div title=\\\"Scroll up to zoom out centered around cursor\\\">Scroll up to zoom out</div><div title=\\\"Scroll down to zoom in towards cursor\\\">Scroll down to zoom in</div><div title=\\\"Click and drag left or right\\\">Drag to pan</div><div title=\\\"Double-click anywhere on the chart\\\">Double-click to reset</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/rebarv2/chartjs-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/rebarv2/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@projectLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'newInstrumentObjectProject\\' onSelectionChange=(action \\'setProject\\' value=\\\"target.value\\\") inputFieldId=\\'project\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.location}} oninput={{action (mut this.newInstrumentObject.location) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCoordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.east}} oninput={{action (mut this.newInstrumentObject.east) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.north}} oninput={{action (mut this.newInstrumentObject.north) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.depth}} oninput={{action (mut this.newInstrumentObject.depth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectAzimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.azimuth}} oninput={{action (mut this.newInstrumentObject.azimuth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAzimuth\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectDip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.dip}} oninput={{action (mut this.newInstrumentObject.dip) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDip\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@levelLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'newInstrumentObjectLevel\\' onSelectionChange=(action \\'setLevel\\' value=\\\"target.value\\\") inputFieldId=\\'level\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectBorehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.borehole}} oninput={{action (mut this.newInstrumentObject.borehole) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectBorehole\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstrument_length\\\" class=\\\"col-12 col-form-label\\\">Total bolt length (mm):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.instrumentLength}} oninput={{action (mut this.newInstrumentObject.instrumentLength) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstrumentLength\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectStrokeLength\\\" class=\\\"col-12 col-form-label bold\\\">Stroke Length (mm):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.strokeLength}} oninput={{action (mut this.newInstrumentObject.strokeLength) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectStrokeLength\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectHeadExclusionLength\\\" class=\\\"col-12 col-form-label\\\">Thread Exclusion Length (mm):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.headExclusionLength}} oninput={{action (mut this.newInstrumentObject.headExclusionLength) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectHeadExclusionLength\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectStacked\\\" class=\\\"col-12 col-form-label\\\">Stacked:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><label data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" data-offset=\\\"0 -7\\\" class=\\\"custom-control custom-checkbox empty-checkbox-title mr-sm-2 has-tooltip-info\\\"><input type=\\\"checkbox\\\" {{action \\\"stackedChanged\\\" on=\\\"change\\\"}} id=\\\"newInstrumentObjectStacked\\\" checked class=\\\"custom-control-input\\\"><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\"></span></label></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.installedBy}} oninput={{action (mut this.newInstrumentObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.purpose}} oninput={{action (mut this.newInstrumentObject.purpose) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newInstrumentObject.notes}} oninput={{action (mut this.newInstrumentObject.notes) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr><tr><td><br /></td></tr><tr><td><label for=\\\"newInstrumentObjectYoungsModulus\\\" class=\\\"col-12 col-form-label\\\">Young\\'s Modulus (GPa):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.youngsModulus}} oninput={{action (mut this.newInstrumentObject.youngsModulus) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectYoungsModulus\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"boltDiameter\\\" class=\\\"col-12 col-form-label\\\">Bolt Diameter(mm):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.boltDiameter}} onchange={{action \\'handleBoltDiameterChange\\'}} oninput={{action (mut this.newInstrumentObject.boltDiameter) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectBoltDiameter\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCrossSectionalArea\\\" class=\\\"col-12 col-form-label\\\">Bolt Area(mm<sup>2</sup>):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.crossSectionalArea}} oninput={{action (mut this.newInstrumentObject.crossSectionalArea) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectCrossSectionalArea\\\" disabled class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"axialStiffness\\\" class=\\\"col-12 col-form-label\\\">Axial Stiffness (kN/%): </label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.axialStiffness}} oninput={{action (mut this.newInstrumentObject.axialStiffness) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAxialStiffness\\\" disabled class=\\\"form-control\\\"></div></div></td></tr><tr><td><br /></td></tr><tr><td><label for=\\\"newInstrumentObjectElasticLimitPct\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit strain (%):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.elasticLimitPct}} oninput={{action (mut this.newInstrumentObject.elasticLimitPct) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectElasticLimitPct\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectUltimateLimitPct\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit strain (%):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.ultimateLimitPct}} oninput={{action (mut this.newInstrumentObject.ultimateLimitPct) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectUltimateLimitPct\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjEctelasticLimitFce\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit force (kN):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.elasticLimitFce}} oninput={{action (mut this.newInstrumentObject.elasticLimitFce) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjEctelasticLimitFce\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectUltimateLimitFce\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit force (kN):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.ultimateLimitFce}} oninput={{action (mut this.newInstrumentObject.ultimateLimitFce) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectUltimateLimitFce\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/rebarv2/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{this.instrumentAnchors.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each this.instrumentAnchors as |anchor|}}<td>{{anchor}}</td>{{/each}}<td>Temperature</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action \\\"setNewTimestampValue\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action \\\"setNewDisplacementValue\\\" key}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} oninput={{action \\\"setTemperatureValue\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/rebarv2/create-new-raw-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"width: 100%;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:10px\\\"><div style=\\\"margin-right:10px\\\"><div class=\\\"inst-buttons\\\"><span {{action \\\"viewData\\\" @instrument.id }} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div></div><div style=\\\"margin-right:10px\\\">{{#if @hasGraphs}}<div class=\\\"inst-buttons\\\"><span {{action \\\"tGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div></div><div style=\\\"text-decoration:underline;margin-bottom:10px; cursor:pointer;\\\" onClick={{action \\\"cycleAlertsListVisibility\\\"}}><h5>Alerts:</h5></div>{{#if this.isAlertsListVisible}}{{#if this.licenceIsValid}}<div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content: space-between;\\\"><div class=\\\"action-bar-section\\\"><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"table-legend\\\"}} class=\\\"action-bar-head-body\\\">Table Legend</div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleActionBar\\\" \\\"actions\\\"}} class=\\\"action-bar-head-body\\\">Actions</div></div></div>{{/if}}<div style=\\\"margin:15px\\\">{{#if (is-equal this.activeActionTab \\\"table-legend\\\")}}{{table-legend-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"actions\\\")}}{{actions-alerts}}{{/if}}{{#if (is-equal this.activeActionTab \\\"batch-actions\\\")}}{{batch-actions-alerts batchSelectedAlertsID=this.batchSelectedAlertsID alerts=@model.alerts isShowBatchConfirmationModal=this.isShowBatchConfirmationModal typeBatch=this.typeBatch batchWarningMessage=this.batchWarningMessage}}{{/if}}</div><div style=\\\"margin-bottom:10px\\\">{{alerts-list licenceIsValid=this.licenceIsValid allowBatchSelect=false batchSelectedAlertsID=this.batchSelectedAlertsID alerts=this.alertsList globalDatetimeFormat=@globalDatetimeFormat ordering=this.ordering sortBy=(action \\'sortBy\\')}}</div><div style=\\\"display:flex;justify-content: flex-end;\\\">{{#each this.paginationSearchConfig.alertProfilePaginationList as |page|}}<button type=\\\"button\\\" {{action \\'jumpToPage\\' page on=\\\"click\\\"}} style=\\\"border-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}};color: {{if (eq page \\'...\\') \\'black\\' \\'white\\'}};margin-right: 10px;font-size:small;padding: 5px;background-color: {{if (eq page \\'...\\') \\'white\\' \\'#4A6A9C\\'}}\\\" class=\\\"btn btn-primary\\\">{{page}}</button>{{/each}}</div>{{/if}}<div style=\\\"width: 100%;\\\"><div><h5>Properties:</h5></div><div style=\\\"width: 100%;display:flex;flex-direction:row;\\\"><div style=\\\"width: 50%;display:flex;flex-direction:column;\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"channelsNum\\\" class=\\\"col-12 col-form-label\\\">Channels:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'channelsNum\\' isEditable=false}}</td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"coordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=@instrument east=@instrument.east north=@instrument.north depth=@instrument.depth stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"azimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'azimuth\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"dip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'dip\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"borehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'borehole\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'zeroTimestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></div><div style=\\\"width: 50%;display:flex;flex-direction:column;\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"instrumentLength\\\" class=\\\"col-12 col-form-label\\\">Total Bolt Length (mm):</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'instrumentLength\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"strokeLength\\\" class=\\\"col-12 col-form-label\\\">Stroke Length (mm):</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'strokeLength\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"headExclusionLength\\\" class=\\\"col-12 col-form-label\\\">Thread Exclusion Length (mm):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'headExclusionLength\\' update=(action \\'updatePage\\') stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"referenceAnchor\\\" class=\\\"col-12 col-form-label\\\">Reference Anchor:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'referenceAnchor\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"stacked\\\" class=\\\"col-12 col-form-label\\\">Stacked:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument field=\\'stacked\\' update=(action \\'updatePage\\')}}</td></tr><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Active:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument id=\\\"activeCheck\\\" field=\\'active\\'}}</td></tr><tr><td><br /></td></tr><tr><td><label for=\\\"youngsModulus\\\" class=\\\"col-12 col-form-label\\\">Young\\'s Modulus (GPa):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'youngsModulus\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"boltDiameter\\\" class=\\\"col-12 col-form-label\\\">Bolt Diameter(mm):</label></td><td class=\\\"input\\\">{{single-save-input-numeric inputType=\\'text\\' object=@instrument field=\\'boltDiameter\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\') update=(action \\'updateCrossSectionalArea\\')}}</td></tr><tr><td><label for=\\\"crossSectionalArea\\\" class=\\\"col-12 col-form-label\\\">Bolt Area(mm<sup>2</sup>):</label></td><td><input size=6 type=\\\"text\\\" value={{@instrument.crossSectionalArea}} disabled class=\\\"form-control\\\"></td></tr><tr><td><label for=\\\"axialStiffness\\\" class=\\\"col-12 col-form-label\\\">Axial Stiffness (kN/%):</label></td><td class=\\\"input\\\"><input size=6 type=\\\"text\\\" value={{@instrument.axialStiffness}} disabled class=\\\"form-control\\\"></td></tr><tr><td><br /></td></tr><tr><td><label for=\\\"elasticLimitPct\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit strain (%):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'elasticLimitPct\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"ultimateLimitPct\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit strain (%):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'ultimateLimitPct\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"calculatedElasticLimitForce\\\" class=\\\"col-12 col-form-label\\\">Elastic Limit force (kN):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'calculatedElasticLimitForce\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\') isEditable=false}}</td></tr><tr><td><label for=\\\"ultimateLimitFce\\\" class=\\\"col-12 col-form-label\\\">Ultimate Limit force (kN):</label></td><td class=\\\"input\\\">{{single-save-input-numeric object=@instrument inputType=\\'text\\' field=\\'ultimateLimitFce\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></div></div><div style=\\\"padding: 0.2rem;font-weight:bold;\\\">Anchor Diagram:</div><div style=\\\"padding:10px;width: 100%;\\\">{{#if this.isEditAnchorDiagram}}<div style=\\\"display:flex;flex-direction:row;align-items:center\\\"><div style=\\\"width: 100%;\\\">{{instrument-anchors-diagram showHATHACLabels=false style=\\\"width: 100%;\\\" inputMode=\\\"input\\\" initialValues=this.anchorDiagramInputInitalValue instrumentID=@instrument.id headAt=@instrument.headAt.id instrumentTypeText=@instrument.instrumentType.title channels=@instrument.channelsNum onCustomNumberInput=(action \\\"updateChannelInput\\\")}}</div><div style=\\\"margin-right:10px;margin-left:10px;cursor:pointer;\\\" onClick={{action \\\"saveAnchors\\\"}}><FaIcon @icon=\\\"check\\\" /></div><div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleEditAnchorDiagram\\\"}}><FaIcon @icon=\\\"times\\\" /></div></div>{{else}}<div style=\\\"cursor:pointer;\\\" onClick={{action \\\"cycleEditAnchorDiagram\\\"}}>{{instrument-anchors-diagram showHATHACLabels=false style=\\\"width: 100%;\\\" inputMode=\\\"label\\\" initialValues=this.anchorDiagramLabelInitalValue instrumentID=@instrument.id headAt=@instrument.headAt.id instrumentTypeText=@instrument.instrumentType.title channels=@instrument.channelsNum}}</div>{{/if}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/rebarv2/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-spatial-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-spatial-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/rebarv2/nvd3-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/rebarv2/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"table-responsive\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th>{{#each this.columnSpecs as |spec|}}<th>{{spec.tableLabel}}</th>{{/each}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th></tr></thead><tbody>{{#each this.tableRows as |row|}}<tr><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td>{{#each row.cells as |cell|}}<td>{{cell.value}}</td>{{/each}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td></tr>{{/each}}</tbody></table></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/rebarv2/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Velocity</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'axial-strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Axial Strain</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'bending-strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Bending Strain</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Axial Strain Rate</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'load-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Axial Load</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/rebarv2/spatial-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'axial-strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Axial Strain</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'bending-strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Bending Strain</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'load-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Axial Load</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n  </dd.menu>\\n</BsDropdown>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/rebarv2/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"target-selector\\\">\\n  <label {{action \\\"openModal\\\"}}>Target (Phone #):</label>\\n  {{#if showModal}}\\n    <EmberModalDialog @close={{action \\\"closeModal\\\"}} @translucentOverlay={{true}}>\\n      <PopupList @onSelect={{action \\\"selectRecord\\\"}} />\\n    </EmberModalDialog>\\n  {{/if}}\\n</div>\\n\\n{{!-- {{#if isShowingModal}}\\n{{#modal-dialog\\n    onClose=\\'toggleCenteredScrolling\\'\\n    translucentOverlay=true\\n    targetAttachment=\\'none\\'\\n    containerClass=\\'centered-scrolling-container\\'\\n    overlayClass=\\'centered-scrolling-overlay\\'\\n    wrapperClass=\\'centered-scrolling-wrapper\\'\\n    clickOutsideToClose=true\\n    onClickOverlay=(action \\'closeTargetSelector\\')\\n\\n}}\\n    <h2>Record List</h2>\\n    <table>\\n    <thead>\\n      <tr>\\n        <th>Country</th>\\n        <th>Carrier</th>\\n        <th>Gateway</th>\\n      </tr>\\n    </thead>\\n    <tbody>\\n        {{#each-in carrierList as |index item|}}\\n        <tr>\\n          <td>{{item.Country}}</td>\\n          <td>{{item.Carrier}}</td>\\n          <td>{{item.Gateway}}</td>\\n        </tr>\\n      {{/each-in}}\\n    </tbody>\\n  </table>\\n\\n  <button {{action \\'closeTargetSelector\\'}}>Close</button>\\n  {{/modal-dialog}}\\n{{/if}}\\n  --}}', { moduleName: 'geotechnical-data-platform-new/templates/components/record-selector.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isSelected}}\\n  <span class=\\\"Searchable-select__icon Searchable-select__icon--check\\n    Searchable-select__option-indicator--selected\\\">\\n    &#10003;\\n  </span>\\n{{/if}}\\n\\n<span class=\\\"Searchable-select__option-label\\n  {{if this.isSelected \\'Searchable-select__option-label--selected\\'}}\\\">\\n  {{searchable-select-highlight-match\\n    (searchable-select-get this.option this.optionLabelKey)\\n    this.searchText\\n  }}\\n</span>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/searchable-select-option.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<a href=\\\"#\\\"\\n  class=\\\"Searchable-select__label\\n    {{if this._isShowingMenu \\'Searchable-select__label--menu-open\\'}}\\n    {{if this.multiple \\'Searchable-select__label--multiple\\'}}\\n    {{if this._hasMultipleSelection \\'Searchable-select__label--multiple-selected\\'}}\\\"\\n  {{action \\\"toggleMenu\\\"}}>\\n\\n  {{#if this._hasSingleSelection}}\\n    <span class=\\\"Searchable-select__selected-label\\\">\\n      {{searchable-select-get this._selected this.optionLabelKey}}\\n    </span>\\n  {{/if}}\\n\\n  {{#if this._hasMultipleSelection}}\\n    {{#each this._selected as |selectedOption|}}\\n      <span class=\\\"Searchable-select__selected-pill\\\">\\n        <span class=\\\"Searchable-select__selected-pill-text\\\">\\n          {{searchable-select-get selectedOption this.optionLabelKey}}\\n        </span>\\n        <span\\n          class=\\\"Searchable-select__selected-pill-clear\\\"\\n          {{action \\\"removeOption\\\" selectedOption bubbles=false}}>\\n          &times;\\n        </span>\\n      </span>\\n    {{/each}}\\n  {{/if}}\\n\\n  {{#unless this._hasSelection}}\\n    <span class=\\\"Searchable-select__prompt\\\">{{this.prompt}}</span>\\n  {{/unless}}\\n</a>\\n\\n{{#if this._isShowingMenu}}\\n  <div class=\\\"Searchable-select__menu\\\">\\n    <div class=\\\"Searchable-select__search\\\" {{action \\\"noop\\\" bubbles=false}}>\\n      {{input\\n        class=\\\"Searchable-select__input\\\"\\n        type=\\\"text\\\"\\n        placeholder=this.searchPrompt\\n        key-up=\\\"updateSearch\\\"\\n        tabindex=-1\\n        bubbles=false}}\\n    </div>\\n\\n    {{#if this._isShowingClear}}\\n      <div class=\\\"Searchable-select__clear\\\"\\n        tabindex=-1\\n        data-enter-key-action=\\\"clear\\\"\\n        {{action \\\"clear\\\" bubbles=false}}>\\n        <span class=\\\"Searchable-select__icon Searchable-select__icon--clear\\\">\\n          &times;\\n        </span>\\n        {{this.clearLabel}}\\n      </div>\\n    {{/if}}\\n\\n    {{#if this._isShowingAddNew}}\\n    <div class=\\\"Searchable-select__add-new\\\"\\n      tabindex=-1\\n      data-enter-key-action=\\\"addNew\\\"\\n      {{action \\\"addNew\\\" bubbles=false}}>\\n      {{this.addLabel}} <em>{{this._searchText}}</em>\\n    </div>\\n    {{/if}}\\n\\n    {{#if this._isShowingNoResultsMessage}}\\n    <div class=\\\"Searchable-select__info\\\">\\n      {{this.noResultsMessage}}\\n    </div>\\n    {{/if}}\\n\\n    {{#if this.isLoading}}\\n      <div class=\\\"Searchable-select__info\\\">\\n        <svg\\n          width=\\\"12\\\" height=\\\"12\\\"\\n          viewBox=\\\"0 0 40 40\\\"\\n          xmlns=\\\"http://www.w3.org/2000/svg\\\"\\n          stroke=\\\"#9a9a9a\\\"\\n          class=\\\"Searchable-select__loader\\\">\\n          <g fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n            <g transform=\\\"translate(2 2)\\\" stroke-width=\\\"4\\\">\\n              <circle\\n                stroke-opacity=\\\".6\\\"\\n                cx=\\\"18\\\" cy=\\\"18\\\" r=\\\"18\\\"\\n                class=\\\"Searchable-select__loader-circle\\\"/>\\n              <path\\n                d=\\\"M36 18c0-9.94-8.06-18-18-18\\\"\\n                class=\\\"Searchable-select__loader-spinner\\\">\\n                <animateTransform\\n                  attributeName=\\\"transform\\\"\\n                  type=\\\"rotate\\\"\\n                  from=\\\"0 18 18\\\"\\n                  to=\\\"360 18 18\\\"\\n                  dur=\\\"0.8s\\\"\\n                  repeatCount=\\\"indefinite\\\"/>\\n              </path>\\n            </g>\\n          </g>\\n        </svg>\\n        <span class=\\\"Searchable-select__loader-text\\\">\\n          {{this.loadingMessage}}\\n        </span>\\n      </div>\\n    {{/if}}\\n\\n    {{#if this._hasResults}}\\n    <ul class=\\\"Searchable-select__options-list\\\">\\n      {{#each this._filteredContent as |option|}}\\n        {{searchable-select-option\\n          option=option\\n          selected=this._selected\\n          searchText=this._searchText\\n          optionLabelKey=this.optionLabelKey\\n          optionDisabledKey=this.optionDisabledKey\\n          select-item=(action \\\"selectItem\\\") }}\\n      {{/each}}\\n    </ul>\\n    {{/if}}\\n\\n  </div>\\n{{/if}}\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/searchable-select.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%;\\\" hidden id=\\\"selectedDExtoError\\\"><tr class=\\\"details\\\"><td colspan=\\\"6\\\" style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"td_details error\\\"><label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You do not have permission to delete a dExto.</label></td></tr></table><table class=\\\"table table-striped responsive-table\\\"><thead><tr style=\\\"min-height:175px;\\\"><th style=\\\"justify-content: center;\\\">Index</th><th style=\\\"justify-content: center;\\\">dExto ID</th><th style=\\\"justify-content: center;\\\">Head at</th><th style=\\\"justify-content: center;\\\">Stroke length</th><th style=\\\"justify-content: center;\\\">Anchor Points</th></tr></thead><tbody>{{#each @dExtoList as |dExto|}}<tr style=\\\"min-height:175px;\\\"><td style=\\\"min-height:175px;\\\">{{dExto.id}}</td><td style=\\\"min-height:175px;\\\"><LinkTo @route=\\\"edit-instrument\\\" @model={{dExto.instrumentID}}>{{dExto.instrumentID}}</LinkTo></td><td style=\\\"min-height:175px;\\\">{{dExto.position}}</td><td style=\\\"min-height:175px;\\\">{{dExto.strokeLength}}</td><td style=\\\"min-height:175px;\\\">{{dExto.anchorPoints}}</td></tr>{{/each}}</tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/selected-dExtos.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"font-size:25px;font-weight: 600;display: flex;flex-direction: row;align-items: center;\\\">About</div><div style=\\\"padding:10px\\\"><div class=\\\"settings-sidebar-home-subtitle\\\">Version </div><div class=\\\"settings-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"font-size: medium;\\\">3.4.3</div></div><div class=\\\"settings-sidebar-home-row-divider\\\"></div></div><div class=\\\"settings-sidebar-home-subtitle\\\">Ember Version </div><div class=\\\"settings-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"font-size: medium;\\\">5.8</div></div><div class=\\\"settings-sidebar-home-row-divider\\\"></div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/settings-about.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"font-size:25px;font-weight: 600;display: flex;flex-direction: row;align-items: center;\\\">General{{#if this.loading}}<div style=\\\"margin-left:10px\\\" class=\\\"pulse_loader\\\"></div>{{/if}}</div><div style=\\\"padding:10px\\\"><div class=\\\"settings-sidebar-home-subtitle\\\">Licence Keys </div><div class=\\\"settings-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; justify-content: space-evenly;\\\"><div onClick={{action \\\"navigateToLicenseKeys\\\"}} class=\\\"settings-sidebar-home-row-edit\\\">Manage    </div></div><div class=\\\"settings-sidebar-home-row-divider\\\"></div></div><div class=\\\"settings-sidebar-home-subtitle\\\">Backend Logs </div><div class=\\\"settings-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; justify-content: space-evenly;\\\"><div onClick={{action \\\"navigateToBackendLogs\\\"}} class=\\\"settings-sidebar-home-row-edit\\\">View    </div></div><div class=\\\"settings-sidebar-home-row-divider\\\"></div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/settings-general.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#modal-dialog translucentOverlay=true}}<div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content:space-between\\\"><h4>Warning</h4></div><div class=\\\"modal-body\\\"><div style=\\\"display: flex;flex-direction: column;align-items: center;min-width: 350px;\\\" class=\\\"edit-modal\\\"><div></div>{{warningMessage}}</div></div><div class=\\\"modal-footer\\\"><button {{action \\\"close\\\" on=\\\"click\\\"}} class=\\\"btn btn-secondary\\\">Cancel</button><button {{action \\\"save\\\" type on=\\\"click\\\"}} class=\\\"btn btn-primary\\\">Confirm</button></div>{{/modal-dialog}}', { moduleName: 'geotechnical-data-platform-new/templates/components/settings-more-clear-logs-confirmation-modal.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"font-size:25px;font-weight: 600;display: flex;flex-direction: row;align-items: center;\\\">More{{#if this.loading}}<div style=\\\"margin-left:10px\\\" class=\\\"pulse_loader\\\"></div>{{/if}}</div><div style=\\\"padding:10px\\\"><div class=\\\"settings-sidebar-home-subtitle\\\">Global Datetime Format  </div><div class=\\\"settings-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; \\\"><div class=\\\"settings-sidebar-home-row-edit\\\"><select style=\\\"font-size: small;\\\" onChange={{action \\'updateDatetimeFormat\\' value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each this.datetimeFormatArray as |object|}}<option selected={{is-equal object.id this.selectedDatetimeFormat}} value=\\\"{{object.id}}\\\">{{object.title}}</option>{{/each}}</select></div></div><div class=\\\"settings-sidebar-home-row-divider\\\"></div></div>{{#if this.isStaffUser}}<div class=\\\"settings-sidebar-home-subtitle\\\">Technical Backend Constants </div><div class=\\\"settings-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; justify-content: space-evenly;\\\"><div onClick={{action \\\"navigateToLookups\\\"}} class=\\\"settings-sidebar-home-row-edit\\\">Configure Here    </div></div><div class=\\\"settings-sidebar-home-row-divider\\\"></div></div>{{/if}}<div class=\\\"settings-sidebar-home-subtitle\\\">Timezone  </div><div class=\\\"settings-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; \\\"><div class=\\\"settings-sidebar-home-row-edit\\\"><select style=\\\"font-size: small;\\\" onChange={{action \\'updateTimezone\\' value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each this.timeZones as |object|}}<option selected={{is-equal object.id this.selectTimezone}} value=\\\"{{object.id}}\\\">{{object.title}}</option>{{/each}}</select></div></div><div class=\\\"settings-sidebar-home-row-divider\\\"></div></div>{{#if this.isStaffUser}}<div class=\\\"settings-sidebar-home-subtitle\\\">SMTP Configuration</div><div class=\\\"settings-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:column;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center; \\\"><div style=\\\"margin-right: 10px;\\\">Test Email: </div><input type=\\\"text\\\" id=\\\"smtp_recipient_tb\\\" style=\\\"margin-right:10px;\\\"><div {{action \\\"testGoogleAuthCode\\\" on=\\\"click\\\"}} class=\\\"profile-body-row-label-section-edit\\\">Test</div></div>{{#if this.testRecipientSMTPMessage}}<div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; \\\">{{this.testRecipientSMTPMessage}}</div>{{/if}}</div><div class=\\\"settings-sidebar-home-row-divider\\\"></div></div>{{/if}}{{#if this.isStaffUser}}<div class=\\\"settings-sidebar-home-subtitle\\\">VantagePoint Global SMS Messaging System</div><div class=\\\"settings-sidebar-home-row-section\\\"></div><div class=\\\"settings-sidebar-home-row-section\\\">Status: {{this.getCurrentSMSAlertStatus}}</div><div class=\\\"settings-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; \\\">{{#if this.isEnabledSMSAlerts}}<div style=\\\"margin-right:15px;\\\" {{action \\\"activateDeactivateSMSAlerts\\\" \\\"false\\\" on=\\\"click\\\"}} class=\\\"profile-body-row-label-section-edit\\\">Deactivate</div>{{else}}<div {{action \\\"activateDeactivateSMSAlerts\\\" \\\"true\\\" on=\\\"click\\\"}} class=\\\"profile-body-row-label-section-edit\\\">Activate</div>{{/if}}</div><div class=\\\"settings-sidebar-home-row-divider\\\"></div></div>{{/if}}<div class=\\\"settings-sidebar-home-subtitle\\\">Server Storage  </div><div class=\\\"settings-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; \\\"><div class=\\\"settings-more-storage-parent\\\"><div style=\\\"width: {{this.generalUsedPercent}}%\\\" class=\\\"settings-storage-used\\\"></div><div style=\\\"width: {{this.generalFreePercent}}%\\\" class=\\\"settings-storage-free\\\"></div></div></div><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center;justify-content: space-evenly;font-size:small;\\\"><div style=\\\"color:#f39c12;\\\">Used: {{this.generalUsedValue}}/{{this.generalUsedPercent}}%</div><div style=\\\"color:#2ecc71;\\\">Free: {{this.generalFreeValue}}/{{this.generalFreePercent}}%</div><div style=\\\"color:black;\\\">Total: {{this.generalTotalValue}}</div></div><div class=\\\"settings-sidebar-home-row-divider\\\"></div></div><div class=\\\"settings-sidebar-home-subtitle\\\">PostGres Storage  </div><div class=\\\"settings-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; \\\"><div id=\\\"postgresParentStorageBar\\\" class=\\\"settings-more-storage-parent\\\"></div></div><div id=\\\"postgresLabelSection\\\" style=\\\"width:auto;display:flex;flex-direction:row;align-items:center;justify-content: space-evenly;font-size:small;\\\"></div><div style=\\\"margin-top:10px;width:auto;display:flex;flex-direction:row;align-items:center;justify-content:space-evenly;\\\">{{#if (is-equal this.isMasterProfile true)}}<div style=\\\"font-size: small;\\\" onClick={{action \\\"setClearLogsType\\\" \\\"all\\\"}} class=\\\"settings-sidebar-home-row-edit\\\">Clear All Logs</div><div style=\\\"font-size: small;\\\" onClick={{action \\\"setClearLogsType\\\" \\\"log_viewer\\\"}} class=\\\"settings-sidebar-home-row-edit\\\">Clear LogViewer Logs</div>{{/if}}<div style=\\\"font-size: small;\\\" onClick={{action \\\"setClearLogsType\\\" \\\"user_logs\\\"}} class=\\\"settings-sidebar-home-row-edit\\\">Clear User Logs</div></div>{{#if (is-equal this.showStorageMessage true)}}<div style=\\\"margin-top:10px;width:auto;display:flex;flex-direction:row;align-items:center;justify-content:space-evenly;\\\"><div style=\\\"font-size: small;\\\" class=\\\"my-profile-sidebar-home-row-value\\\">{{this.updateStorageMessage}}</div></div>{{/if}}<div class=\\\"settings-sidebar-home-row-divider\\\"></div></div><div class=\\\"settings-sidebar-home-subtitle\\\">Influx Storage  </div><div class=\\\"settings-sidebar-home-row-section\\\"><div style=\\\"width:auto;display:flex;flex-direction:row;align-items:center; \\\"><div id=\\\"influxParentStorageBar\\\" class=\\\"settings-more-storage-parent\\\"></div></div><div id=\\\"influxLabelSection\\\" style=\\\"width:auto;display:flex;flex-direction:row;align-items:center;font-size:small;\\\"></div><div class=\\\"settings-sidebar-home-row-divider\\\"></div></div></div>{{#if this.isShowClearLogsConfirmationModal}}{{settings-more-clear-logs-confirmation-modal warningMessage=this.getWarningMessage type=this.clearLogsConfirmationModalType closeModal=(action close) confirmModal=(action confirm)}}{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/settings-more.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"width: 100%;display:flex;flex-direction:row;align-items:center;font-size:x-large;overflow-x: hidden;justify-content: center;\\\"><h3>Settings</h3></div><div class=\\\"settings-sidebar-section-divider\\\"></div><div style=\\\"width:100%;padding:25px\\\"><div class=\\\"settings-sidebar-section-row\\\"><div style=\\\"margin-right:5px\\\">{{fa-icon icon=\\\"cog\\\" size=\\\"1x\\\"}}</div><div style=\\\"font-size:large;\\\" onClick={{action \\\"updateTab\\\" \\\"GENERAL\\\"}}>General</div></div><div class=\\\"settings-sidebar-section-row\\\"><div style=\\\"margin-right:5px;\\\">{{fa-icon icon=\\\"ellipsis-h\\\" size=\\\"1x\\\" style=\\\"margin-right:5px\\\"}}</div><div style=\\\"font-size:large;\\\" onClick={{action \\\"updateTab\\\" \\\"MORE\\\"}}>More</div></div><div class=\\\"settings-sidebar-section-row\\\"><div style=\\\"margin-right:5px;\\\">{{fa-icon icon=\\\"info-circle\\\" variant=\\\"light\\\" size=\\\"1x\\\" style=\\\"margin-right:5px\\\"}}</div><div style=\\\"font-size:large;\\\" onClick={{action \\\"updateTab\\\" \\\"ABOUT\\\"}}>About</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/settings-sidebar.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<label data-offset=\\\"0 -7\\\" class=\\\"custom-control custom-checkbox empty-checkbox-title mr-sm-2\\\"><BsTooltip @title=\\\"Change and Save\\\" @placement=\\\"right\\\" /><input type=\\\"checkbox\\\" id={{this.field}} name={{this.field}} checked={{this.isChecked}} {{action \\\"change\\\" this.object on=\\\"change\\\"}} class=\\\"custom-control-input\\\"><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\"></span></label>', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-checkbox.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"editable-field\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center\\\">{{#if this.isEditing}}<div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" value={{this.newValue}} oninput={{action (mut this.newValue) value=\\\"target.value\\\"}} focus-out={{action \\\"save\\\" this.object}} id=\\\"{{this.field}}\\\"></div><div {{action \\\"save\\\" this.object on=\\\"click\\\"}} aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Save\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"check\\\" style=\\\"cursor:pointer;margin-left:5px;margin-right:5px;color:#6F6E6E;\\\"/></div><div {{action \\\"cancel\\\" on=\\\"click\\\"}} aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Cancel\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"times\\\" style=\\\"cursor:pointer;color:#6F6E6E;\\\"/></div>{{else}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Edit\\\" @placement=\\\"right\\\" />{{this.datetimeLabel}}</span>{{/if}}</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-datetime-picker.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isEditing}}<td data-title=\\\"Date\\\" class=\\\"noWrap\\\">{{moment-format @gatewayValueObject.id \\'YY-MM-DD HH:mm:ss\\'}}</td>{{#each-in @gatewayValueObject.values as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action (mut (get this.gatewayValueObjectValues key)) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}{{#unless @omitTemperature}}<td data-title=\\\"Temperature (°C)\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} id=\\\"df{{key}}\\\" oninput={{action (mut this.temperatureObjectValue) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{/unless}}<td class=\\\"crud-td\\\"><span {{action \\\"save\\\" on=\\\"click\\\"}} class=\\\"save\\\"><FaIcon @icon=\\\"check\\\" /></span><span {{action \\\"cancel\\\" on=\\\"click\\\"}} class=\\\"cancel\\\"><FaIcon @icon=\\\"times\\\" /></span></td>{{else}}<td data-title=\\\"Date\\\" class=\\\"noWrap\\\">{{moment-format @gatewayValueObject.id \\'YY-MM-DD HH:mm:ss\\'}}</td>{{#each-in @gatewayValueObject.values as |key value|}}<td data-title={{key}}><span data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Edit\\\" class=\\\"text has-tooltip-info\\\"></span>{{value}}</td>{{/each-in}}{{#unless @omitTemperature}}<td data-title=\\\"Temperature\\\"><span data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Edit\\\" class=\\\"text has-tooltip-info\\\">{{this.temperatureObjectValue}}</span></td>{{/unless}}<td class=\\\"crud-td\\\"><span {{action \\\"toggleRowDeleteConfirmationDialog\\\" @gatewayValueObject.id on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /><div class=\\\"delete-confirmation {{active-class (get-array-element this.isRowDeleteConfirmationDialog @gatewayValueObject.id)}}\\\"><div style=\\\"display: flex; justify-content: center; margin-top: 2px; vertical-align: top;\\\"><span class=\\\"crud-delete-message\\\"></span><span class=\\\"small\\\">Delete it?Are you sure?</span><span {{action \\\"remove\\\" on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-confirm\\\">Yes</span><span {{action \\\"toggleRowDeleteConfirmationDialog\\\" @gatewayValueObject.id on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-cancel\\\">No</span></div></div></span></td>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-gateway-inputs-array-table-row-cells.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"editable-field\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center\\\">{{#if this.isEditing}}<div style=\\\"display:flex;flex-direction:row;align-items:center;overflow-x:auto\\\"><input style=\\\"max-width: 100px;\\\" type=\\\"text\\\" value={{this.newEast}} oninput={{action (mut this.newEast) value=\\\"target.value\\\"}} id=\\\"#east\\\"><input style=\\\"max-width: 100px;\\\" type=\\\"text\\\" value={{this.newNorth}} oninput={{action (mut this.newNorth) value=\\\"target.value\\\"}} id=\\\"#north\\\"><input style=\\\"max-width: 100px;\\\" type=\\\"text\\\" value={{this.newDepth}} oninput={{action (mut this.newDepth) value=\\\"target.value\\\"}} id=\\\"#depth\\\"></div><div {{action \\\"save\\\" @object on=\\\"click\\\"}} aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Save\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"check\\\" style=\\\"cursor:pointer;margin-left:5px;margin-right:5px;color:#6F6E6E;\\\"/></div><div {{action \\\"cancel\\\" @object on=\\\"click\\\"}} aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Cancel\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"times\\\" style=\\\"cursor:pointer;color:#6F6E6E;\\\"/></div>{{else}}{{#if @east}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\">{{\\'east:\\'}} {{@east}}, {{\\'north:\\'}} {{@north}}, {{\\'depth:\\'}} {{@depth}} <BsTooltip @title=\\\"Edit\\\" @placement=\\\"right\\\" /></span>{{else}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\">{{\\'east:\\'}}, {{\\'north:\\'}}, {{\\'depth:\\'}} <BsTooltip @title=\\\"Edit\\\" @placement=\\\"right\\\" />    </span>{{/if}}{{/if}}</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-geo-input.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isEditable}}<div class=\\\"editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{#if this.isEditing}}{{#if this.isTextInput}}<input type=\\\"text\\\" value={{this.newValue}} oninput={{action (mut this.newValue) value=\\\"target.value\\\"}} focus-out={{action \\\"save\\\" this.object}} id=\\\"{{this.field}}\\\" class=\\\"form-control\\\">{{/if}}{{#if this.isTextarea}}<textarea type=\\\"text\\\" rows=3 value={{this.newValue}} oninput={{action (mut this.newValue) value=\\\"target.value\\\"}} focus-out={{action \\\"save\\\" this.object}} id=\\\"{{this.field}}\\\" class=\\\"form-control\\\"></textarea>{{/if}}<span {{action \\\"save\\\" this.object on=\\\"click\\\"}} class=\\\"save\\\"><i aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Save\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"check\\\" /></i></span><span {{action \\\"cancel\\\" on=\\\"click\\\"}} class=\\\"cancel\\\"><i aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Cancel\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"times\\\" /></i></span>{{else}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Edit\\\" @placement=\\\"right\\\"/>{{get this.object this.field}}</span>{{/if}}</div></div></div>{{else}}<div class=\\\"non-editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><span style=\\\"font-size: 24px\\\" {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Read Only\\\" @placement=\\\"left\\\" />{{get this.object this.field}}</span></div></div></div>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-input-InstType.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isEditable}}<div class=\\\"editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{#if this.isEditing}}{{#if this.isTextInput}}<input type=\\\"text\\\" value={{this.newValue}} oninput={{action (mut this.newValue) value=\\\"target.value\\\"}} focus-out={{action \\\"save\\\" this.object}} id=\\\"{{this.field}}\\\" class=\\\"form-control\\\">{{/if}}{{#if this.isTextarea}}<textarea type=\\\"text\\\" rows=3 value={{this.newValue}} oninput={{action (mut this.newValue) value=\\\"target.value\\\"}} focus-out={{action \\\"save\\\" this.object}} id=\\\"{{this.field}}\\\" class=\\\"form-control\\\"></textarea>{{/if}}<span {{action \\\"save\\\" this.object on=\\\"click\\\"}} class=\\\"save\\\"><i aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Save\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"check\\\" /></i></span><span {{action \\\"cancel\\\" on=\\\"click\\\"}} class=\\\"cancel\\\"><i aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Cancel\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"times\\\" /></i></span>{{else}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Edit\\\" @placement=\\\"right\\\"/>{{get this.object this.field}}</span>{{/if}}</div></div></div>{{else}}<div class=\\\"non-editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Read Only\\\" @placement=\\\"right\\\" />{{get this.object this.field}}</span></div></div></div>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-input-numeric.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isEditable}}<div class=\\\"editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{#if this.isEditing}}{{#if this.isTextInput}}<input type=\\\"password\\\" value=\\\"\\\" oninput={{action (mut this.newValue) value=\\\"target.value\\\"}} focus-out={{action \\\"save\\\" this.object}} id=\\\"{{this.field}}\\\" class=\\\"form-control\\\">{{/if}}{{#if this.isTextarea}}<input type=\\\"password\\\" rows=3 value=\\\"\\\" oninput={{action (mut this.newValue) value=\\\"target.value\\\"}} focus-out={{action \\\"save\\\" this.object}} id=\\\"{{this.field}}\\\" class=\\\"form-control\\\">{{/if}}<span {{action \\\"save\\\" this.object on=\\\"click\\\"}} class=\\\"save\\\"><i aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Save\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"check\\\" /></i></span><span {{action \\\"cancel\\\" on=\\\"click\\\"}} class=\\\"cancel\\\"><i aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Cancel\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"times\\\" /></i></span>{{else}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Edit\\\" @placement=\\\"right\\\"/>{{#if (not-eq (get this.object this.field) \\\"\\\")}}******{{/if}}</span>{{/if}}</div></div></div>{{else}}<div class=\\\"non-editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Read Only\\\" @placement=\\\"right\\\" />{{get this.object this.field}}</span></div></div></div>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-input-password.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isEditable}}<div class=\\\"editable-field\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center\\\">{{#if this.isEditing}}{{#if this.isTextInput}}<input type=\\\"text\\\" value={{this.newValue}} oninput={{action (mut this.newValue) value=\\\"target.value\\\"}} focus-out={{action \\\"save\\\" this.object}} id=\\\"{{this.field}}\\\">{{/if}}{{#if this.isTextarea}}<textarea type=\\\"text\\\" rows=3 value={{this.newValue}} oninput={{action (mut this.newValue) value=\\\"target.value\\\"}} focus-out={{action \\\"save\\\" this.object}} id=\\\"{{this.field}}\\\" class=\\\"form-control\\\"></textarea>{{/if}}<div {{action \\\"save\\\" this.object on=\\\"click\\\"}} aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Save\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"check\\\" style=\\\"cursor:pointer;margin-left:5px;margin-right:5px;color:#6F6E6E;\\\"/> </div><div {{action \\\"cancel\\\" on=\\\"click\\\"}} aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Cancel\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"times\\\" style=\\\"cursor:pointer;color:#6F6E6E;\\\"/></div>{{else}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Edit\\\" @placement=\\\"right\\\"/>{{get this.object this.field}}</span>{{/if}}</div></div>{{else}}<div class=\\\"non-editable-field\\\"><span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Read Only\\\" @placement=\\\"right\\\" />{{get this.object this.field}}</span></div>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-input.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if isEditing}}<td data-title=\\\"Date\\\" class=\\\"noWrap\\\">{{moment-format displacementValueObject.id \\'YYYY-MM-DD HH:mm:ss\\'}}</td>{{#each-in @displacementValueObject.values as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action (mut (get displacementValueObjectValues key)) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}{{#unless @isWire}}<td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{temperatureObjectValue}} id=\\\"df{{key}}\\\" oninput={{action (mut temperatureObjectValue) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{/unless}}<td class=\\\"crud-td\\\"><span {{action \\\"save\\\" on=\\\"click\\\"}} class=\\\"save\\\"><FaIcon @icon=\\\"check\\\" /></span><span {{action \\\"cancel\\\" on=\\\"click\\\"}} class=\\\"cancel\\\"><FaIcon @icon=\\\"times\\\" /></span></td>{{else}}<div class=\\\"row align-items-start\\\"><div data-title=\\\"Date\\\" class=\\\"col-4\\\">{{moment-format @displacementValueObject.id \\'YYYY-MM-DD HH:mm:ss\\'}}</div>{{#each-in @displacementValueObject.values as |key value|}}<div data-title={{key}} class=\\\"col\\\">{{#if (is-greater-than value strokeLength)}}<span data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Value is above Stroke Length. Graphs will use previous value.\\\" class=\\\"text red-text bold has-tooltip-info\\\">&uArr; </span>{{/if}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Edit\\\" class=\\\"text has-tooltip-info\\\">{{#if isFine}}{{format-number value 3}}{{else}}{{format-number value 2}}{{/if}}</span></div>{{/each-in}}<div data-title=\\\"Temperature\\\" class=\\\"col\\\"><span {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Edit\\\" class=\\\"text has-tooltip-info\\\">{{temperatureObjectValue}}</span></div><div class=\\\"col crud-td\\\"><span {{action \\'toggleRowDeleteConfirmationDialog\\' displacementValueObject.id on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Edit\\\" class=\\\"crud edit has-tooltip-info\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span><div class=\\\"delete-confirmation {{active-class (get isRowDeleteConfirmationDialog displacementValueObject.id)}}\\\"><span class=\\\"crud-delete-message\\\"><span><small>Delete it?</small><small>Are you sure?</small></span></span><span {{action \\\"remove\\\" on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-confirm\\\">Yes</span><span {{action \\'toggleRowDeleteConfirmationDialog\\' displacementValueObject.id on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-cancel\\\">No</span></div></div></div>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-inputs-array-table-row-cells-2.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isEditing}}<td data-title=\\\"Date\\\" class=\\\"noWrap\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\".001\\\" value={{this.temperatureValueObject.id}} oninput={{action \\\"setNewTimestamp\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td></td>{{#each-in this.temperatureValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"tf{{key}}\\\" oninput={{action (mut (get this.temperatureValues key)) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td class=\\\"crud-td\\\">{{#if this.loading}}<div style=\\\"width: auto; padding-top:5px;\\\" class=\\\"center pulse_loader \\\"></div>{{/if}}<span {{action \\\"save\\\" on=\\\"click\\\"}} class=\\\"save\\\"><FaIcon @icon=\\\"check\\\" /></span><span {{action \\\"cancel\\\" on=\\\"click\\\"}} class=\\\"cancel\\\"><FaIcon @icon=\\\"times\\\" /></span></td>{{else}}<td data-title=\\\"Date\\\" class=\\\"noWrap\\\">{{this.datetimeLabel}}</td>{{#each-in this.temperatureValues as |key value|}}<td data-title={{key}}><span {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Edit\\\" class=\\\"text has-tooltip-info\\\">{{format-number value 2}}</span></td>{{/each-in}}<td class=\\\"crud-td\\\"><span {{action \\\"toggleRowDeleteConfirmationDialog\\\" this.temperatureValueObject.id on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Edit\\\" class=\\\"crud edit has-tooltip-info\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span><div class=\\\"delete-confirmation {{active-class (get-array-element this.isRowDeleteConfirmationDialog this.temperatureValueObject.id)}}\\\"><span class=\\\"crud-delete-message\\\"><span><small>Delete it?</small><small>Are you sure?</small></span></span><span {{action \\\"remove\\\" on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-confirm\\\">Yes</span><span {{action \\\"toggleRowDeleteConfirmationDialog\\\" this.temperatureValueObject.id on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-cancel\\\">No</span></div></td>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-inputs-array-table-row-cells-temperature.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isEditing}}<td data-title=\\\"Date\\\" class=\\\"noWrap\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\".001\\\" value={{this.displacementValueObject.id}} oninput={{action \\\"setNewTimestampValue\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action \\\"setDisplacementValue\\\" key}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}{{#unless @isWire}}<td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} id=\\\"dfTemp\\\" oninput={{action \\\"setTemperatureValue\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{/unless}}<td class=\\\"crud-td\\\">{{#if this.loading}}<div style=\\\"width: auto; padding-top:5px;\\\" class=\\\"center pulse_loader \\\"></div>{{/if}}<span {{action \\\"save\\\" on=\\\"click\\\"}} class=\\\"save\\\"><FaIcon @icon=\\\"check\\\" /></span><span {{action \\\"cancel\\\" on=\\\"click\\\"}} class=\\\"cancel\\\"><FaIcon @icon=\\\"times\\\" /></span></td>{{else}}<td data-title=\\\"Date\\\" class=\\\"noWrap\\\">{{this.datetimeLabel}}</td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><span {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Edit\\\" class=\\\"text has-tooltip-info\\\">{{#if this.isFine}}{{#if (is-equal key 0)}}{{#if (is-equal value 1.0)}}<td style=\\\"padding:0px\\\">X</td>{{/if}}{{else if (is-equal key 7)}}{{#else if (is-equal value 2.0)}}<td style=\\\"padding:0px\\\">Y</td>{{/else}}{{else if (is-equal key 14)}}{{#else if (is-equal value 3.0)}}<td style=\\\"padding:0px\\\">Z</td>{{/else}}{{else if (is-equal key 21)}}{{#else if (is-equal value 4.0)}}<td style=\\\"padding:0px\\\">R</td>{{/else}}{{else}}{{format-number value 3}}{{/if}}{{else}}{{format-number value 2}}{{/if}}</span></td>{{/each-in}}{{#unless @isWire}}<td data-title=\\\"Temperature\\\"><span {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Edit\\\" class=\\\"text has-tooltip-info\\\">{{this.temperatureObjectValue}}</span></td>{{/unless}}<td class=\\\"crud-td\\\"><span {{action \\\"toggleRowDeleteConfirmationDialog\\\" this.displacementValueObject.id on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Edit\\\" class=\\\"crud edit has-tooltip-info\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span><div class=\\\"delete-confirmation {{active-class (get-array-element this.isRowDeleteConfirmationDialog this.displacementValueObject.id)}}\\\"><span class=\\\"crud-delete-message\\\"><span><small>Delete it?</small><small>Are you sure?</small></span></span><span {{action \\\"remove\\\" on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-confirm\\\">Yes</span><span {{action \\\"toggleRowDeleteConfirmationDialog\\\" this.displacementValueObject.id on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-cancel\\\">No</span></div></td>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-inputs-array-table-row-cells.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"editable-field\\\"><div class=\\\"form-group\\\">{{#unless isAllAnchorsPopulated}}<p {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"warning-text empty-anchor-warning-rebar-v2 italic\\\">Please add all instrument anchors! They are needed to make calculations for graphs.</p>{{/unless}}{{#if isEditing}}<ul style={{anchorsCSSCounteStyle}} class=\\\"anchor-distances-input {{if isToe \\'anchor-distances-input has-tooltip-info\\' \\'has-tooltip-info reverse-anchors-counter\\'}}\\\"><li><label class=\\\"col-12 toe-label-rebarv2\\\">Toe</label></li><li class=\\\"tail\\\"><span class=\\\"tail collar-rebarv2\\\"></span></li>{{#each listedAnchors as |anchor i|}}{{#unless anchor.isDeleted}}<li class=\\\"anchor\\\"><input type=\\\"text\\\" value={{get anchor \\'distance-a\\'}} oninput={{action (action \\'inputNewValue\\' anchor \\'distance-a\\') value=\\\"target.value\\\"}} focus-out=\\\"\\'save\\' object\\\" id=\\\"{{field}}\\\" class=\\\"form-control\\\"><span class=\\\"anchor-distance-rebar-l\\\">{{get anchor \\'number-a\\'}}</span><span class=\\\"instrument-pipe\\\"></span><span class=\\\"anchor-distance-rebar-r\\\">{{get anchor \\'number-b\\'}}</span><input type=\\\"text\\\" value={{get anchor \\'distance-b\\'}} oninput={{action (action \\'inputNewValue\\' anchor \\'distance-b\\') value=\\\"target.value\\\"}} focus-out=\\\"\\'save\\' object\\\" id=\\\"{{field}}\\\" class=\\\"form-control\\\"></li>{{/unless}}{{/each}}<li><span class=\\\"head collar-rebarv2\\\"></span></li><li><label class=\\\"col-12 toe-label-rebarv2\\\">Head</label></li></ul>{{#if isAllAnchorsPopulated}}<span {{action \\'save\\' object on=\\\"click\\\"}} class=\\\"save\\\"><i aria-hidden=\\\"true\\\" data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" class=\\\"has-tooltip-info\\\"><BsTooltip @title=\\\"Save\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"check\\\" /></i></span>{{else}}<span class=\\\"save inactive\\\"><i aria-hidden=\\\"true\\\" data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" class=\\\"has-tooltip-info\\\"><BsTooltip @title=\\\"Input all anchors before saving!\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"check\\\" /></i></span>{{/if}}<span {{action \\'cancel\\' object allowedKeys=\\'alt\\' on=\\\"click\\\"}} class=\\\"cancel\\\"><i aria-hidden=\\\"true\\\" data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" class=\\\"has-tooltip-info\\\"><BsTooltip @title=\\\"Cancel\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"times\\\" /></i></span>{{else}}<ul {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" title=\\\"Change properties to update.\\\" style={{anchorsCSSCounteStyle}} class=\\\"{{if isToe \\'anchor-distances-input has-tooltip-info\\' \\'anchor-distances-input has-tooltip-info reverse-anchors-counter\\'}}\\\"><li><label class=\\\"col-12 toe-label-readonly-rebarv2\\\">Toe</label></li><li class=\\\"tail\\\"><span class=\\\"tail rebar collar\\\"></span></li>{{#each listedAnchors as |anchor i|}}{{#unless anchor.isDeleted}}<li class=\\\"anchor\\\"><span class=\\\"anchor-distance-rebar-l\\\">{{get anchor \\'distance-a\\'}}</span><span class=\\\"anchor-number-l\\\">{{get anchor \\'number-a\\'}}</span><span class=\\\"instrument-pipe\\\"></span><span class=\\\"anchor-number-r\\\">{{get anchor \\'number-b\\'}}</span><span class=\\\"anchor-distance-rebar-r\\\">{{get anchor \\'distance-b\\'}}</span></li>{{/unless}}{{/each}}<li><span class=\\\"head rebar collar\\\"></span></li><li><label class=\\\"col-12 collar-label-readonly-rebarv2\\\">Head</label></li></ul>{{/if}}</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-instrument-anchors-rebar.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{#unless this.isAllAnchorsPopulated}}<p {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"warning-text empty-anchor-warning italic\\\">Please add all instrument anchors! They are needed to make calculations for graphs.</p>{{/unless}}{{#if this.isEditing}}<ul style={{this.anchorsCSSCounteStyle}} class=\\\"anchor-distances-input {{if this.isToe \\'anchor-distances-input has-tooltip-info\\' \\'has-tooltip-info reverse-anchors-counter\\'}}\\\"><li><label class=\\\"col-12 toe-label\\\">Borehole Toe</label></li>{{#if this.isToe}}<li><span class=\\\"head toe\\\"></span></li>{{else}}<li class=\\\"tail\\\"><span class=\\\"tail collar\\\"></span></li>{{/if}}{{#each this.sortedInstrumentAnchors as |anchor i|}}{{#unless anchor.isDeleted}}<li><span class=\\\"position\\\"></span><span class=\\\"instrument-pipe\\\"></span><input type=\\\"text\\\" value={{anchor.distance}} oninput={{action (action \\'inputNewValue\\' anchor) value=\\\"target.value\\\"}} focus-out={{action \\\"save\\\" this.object}} id=\\\"{{this.field}}\\\" class=\\\"form-control\\\"></li>{{/unless}}{{/each}}{{#if this.isCollar}}<li><span class=\\\"head collar\\\"></span></li>{{else}}<li class=\\\"tail\\\"><span class=\\\"tail toe\\\"></span></li>{{/if}}<li><label class=\\\"col-12 collar-label\\\">Borehole Collar</label></li></ul>{{#if this.isAllAnchorsPopulated}}<span {{action \\\"save\\\" this.object on=\\\"click\\\"}} class=\\\"save\\\"><i aria-hidden=\\\"true\\\" data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" class=\\\"has-tooltip-info\\\"><BsTooltip @title=\\\"Save\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"check\\\" /></i></span>{{else}}<span class=\\\"save inactive\\\"><i aria-hidden=\\\"true\\\" data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" class=\\\"has-tooltip-info\\\"><BsTooltip @title=\\\"Input all anchors before saving!\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"check\\\" /></i></span>{{/if}}<span {{action \\\"cancel\\\" on=\\\"click\\\"}} class=\\\"cancel\\\"><i aria-hidden=\\\"true\\\" data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" class=\\\"has-tooltip-info\\\"><BsTooltip @title=\\\"Cancel\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"times\\\" /></i></span>{{else}}<ul {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" title=\\\"Click on instrument to edit\\\" style={{this.anchorsCSSCounteStyle}} class=\\\"{{if this.isToe \\'anchor-distances-input has-tooltip-info\\' \\'anchor-distances-input has-tooltip-info reverse-anchors-counter\\'}}\\\"><li><label class=\\\"col-12 toe-label\\\">Borehole Toe</label></li>{{#if this.isToe}}<li><span class=\\\"head toe\\\"></span></li>{{else}}<li class=\\\"tail\\\"><span class=\\\"tail collar\\\"></span></li>{{/if}}{{#each this.sortedInstrumentAnchors as |anchor i|}}{{#unless anchor.isDeleted}}<li class=\\\"anchor\\\"><span class=\\\"position\\\"></span><span class=\\\"instrument-pipe\\\"></span>{{#if (if-empty-string-or-null (get anchor \\'distance\\'))}}<span class=\\\"anchor-distance warning-text empty-anchor-warning\\\">NULL</span>{{else}}<span class=\\\"anchor-distance\\\">{{get anchor \\'distance\\'}}</span>{{/if}}</li>{{/unless}}{{/each}}{{#if this.isCollar}}<li><span class=\\\"head collar\\\"></span></li>{{else}}<li class=\\\"tail\\\"><span class=\\\"tail toe\\\"></span></li>{{/if}}<li><label class=\\\"col-12 collar-label\\\">Borehole Collar</label></li></ul>{{/if}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-instrument-anchors.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isEditable}}<div class=\\\"editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{#if this.isEditing}}<select id={{this.inputFieldId}} onchange={{action \\\"selectNewValue\\\" value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each this.selectOptionsArray as |selectOption|}}<option selected={{is-equal selectOption.key this.newValue}} value=\\\"{{selectOption.key}}\\\">{{selectOption.value}}</option>{{/each}}</select><span {{action \\\"save\\\" this.parentObject on=\\\"click\\\"}} class=\\\"save\\\"><i aria-hidden=\\\"true\\\" data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" title=\\\"Save\\\" class=\\\"fa fa-check has-tooltip-info\\\"></i></span><span {{action \\\"cancel\\\" on=\\\"click\\\"}} class=\\\"cancel\\\"><i aria-hidden=\\\"true\\\" data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" title=\\\"Cancel\\\" class=\\\"fa fa-times has-tooltip-info\\\"></i></span>{{else}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Edit\\\" class=\\\"text has-tooltip-info\\\">{{get this.object this.field}}</span>{{/if}}</div></div></div>{{else}}<div class=\\\"non-editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><span {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Read only\\\" class=\\\"text has-tooltip-info\\\">{{get this.object this.field}}</span></div></div></div>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-interval-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isEditable}}<div class=\\\"editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12 d-flex align-items-center\\\">{{#unless this.isNew}}{{#if this.isEditing}}<select id={{this.inputFieldId}} onchange={{action \\\"selectNewValue\\\" value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option disabled selected value=\\\"\\\">Please choose a {{#if this.fieldText}}{{concat this.fieldText \\\".\\\"}}{{else}}{{concat this.value \\\".\\\"}}{{/if}}</option>{{#each this.selectOptionsArray as |selectOption|}}<option selected={{is-equal selectOption.key this.newValue}} value=\\\"{{selectOption.key}}\\\">{{selectOption.value}}</option>{{/each}}</select><span {{action \\'cancel\\' this.object on=\\\"click\\\"}} class=\\\"blast-cancel ml-2\\\"><i aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Cancel\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"times\\\" /></i></span>{{else}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Edit\\\" @placement=\\\"right\\\"/>{{get this.object this.field}}</span>{{/if}}{{/unless}}{{#if this.isNew}}<select id={{this.inputFieldId}} onchange={{action \\\"selectNewValue\\\" value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#if (not this.newValue)}}<option disabled selected value=\\\"\\\">Please choose a {{#if this.fieldText}}{{concat this.fieldText \\\".\\\"}}{{else}}{{concat this.value \\\".\\\"}}{{/if}}</option>{{/if}}{{#each this.selectOptionsArray as |selectOption|}}<option selected={{is-equal selectOption.key this.newValue}} value=\\\"{{selectOption.key}}\\\">{{selectOption.value}}</option>{{/each}}</select>{{/if}}</div></div></div>{{else}}<div class=\\\"non-editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Read Only\\\" @placement=\\\"right\\\" />{{get this.object this.field}}</span></div></div></div>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-lookup.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isEditable}}<div class=\\\"editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{#if this.isEditing}}<select id={{this.inputFieldId}} onchange={{action \\\"selectNewValue\\\" value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each this.selectOptionsArray as |selectOption|}}<option selected={{is-equal selectOption.key this.newValue}} value=\\\"{{selectOption.key}}\\\">{{selectOption.value}}</option>{{/each}}</select><span {{action \\\"save\\\" this.parentObject on=\\\"click\\\"}} class=\\\"save\\\"><i aria-hidden=\\\"true\\\" data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" title=\\\"Save\\\" class=\\\"fa fa-check has-tooltip-info\\\"></i></span><span {{action \\\"cancel\\\" on=\\\"click\\\"}} class=\\\"cancel\\\"><i aria-hidden=\\\"true\\\" data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" title=\\\"Cancel\\\" class=\\\"fa fa-times has-tooltip-info\\\"></i></span>{{else}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Edit\\\" class=\\\"text has-tooltip-info\\\">{{get this.object this.field}}</span>{{/if}}</div></div></div>{{else}}<div class=\\\"non-editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><span {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Read only\\\" class=\\\"text has-tooltip-info\\\">{{get this.object this.field}}</span></div></div></div>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-select-alt.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isEditable}}<div class=\\\"editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{#if this.isEditing}}<select id={{this.inputFieldId}} onchange={{action \\\"selectNewValue\\\" value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each this.selectOptionsArray as |selectOption|}}<option selected={{is-equal selectOption.key this.newValue}} value=\\\"{{selectOption.key}}\\\">{{selectOption.value}}</option>{{/each}}</select><span {{action \\\"cancel\\\" on=\\\"click\\\"}} class=\\\"save\\\"><i aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Cancel\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"times\\\" /></i></span>{{else}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} onchange={{action \\\"getNewOptionValue\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Edit\\\" @placement=\\\"right\\\"/>{{get this.object this.field}}&nbsp;(mm)</span>{{/if}}</div></div></div>{{else}}<div class=\\\"non-editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Read Only\\\" @placement=\\\"right\\\" />{{get this.object this.field}}&nbsp;(mm)</span></div></div></div>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-select-non-model.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isEditable}}<div class=\\\"editable-field\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center\\\">{{#if this.isEditing}}{{#if this.width}}<select style=\\\"width: {{this.width}}px;font-size: large;\\\" id={{this.inputFieldId}} onchange={{action \\\"selectNewValue\\\" value=\\\"target.value\\\"}}>{{#each this.selectOptionsArray as |selectOption|}}<option selected={{is-equal selectOption.key this.newValue}} value=\\\"{{selectOption.key}}\\\">{{selectOption.value}}</option>{{/each}}</select><div {{action \\\"cancel\\\" on=\\\"click\\\"}}><i aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Cancel\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"times\\\" style=\\\"cursor:pointer;margin-left:5px;margin-right:5px;color:#6F6E6E;\\\" /></i></div>{{else}}<select style=\\\"font-size: large;\\\" id={{this.inputFieldId}} onchange={{action \\\"selectNewValue\\\" value=\\\"target.value\\\"}}>{{#each this.selectOptionsArray as |selectOption|}}<option selected={{is-equal selectOption.key this.newValue}} value=\\\"{{selectOption.key}}\\\">{{selectOption.value}}</option>{{/each}}</select><div {{action \\\"cancel\\\" on=\\\"click\\\"}} aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Cancel\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"times\\\" style=\\\"cursor:pointer;margin-left:5px;margin-right:5px;color:#6F6E6E;\\\" /></div>{{/if}}{{else}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Edit\\\" @placement=\\\"right\\\"/>{{get this.object this.field}}</span>{{/if}}</div></div>{{else}}<div class=\\\"non-editable-field\\\"><span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Read Only\\\" @placement=\\\"right\\\" />{{get this.object this.field}}</span></div>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-select.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"editable-field\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{#if this.isEditing}}<div class=\\\"datetime-picker-component\\\"><input type=\\\"time\\\" step=\\\"1\\\" format={{this.format}} value={{this.newValue}} oninput={{action (mut this.newValue) value=\\\"target.value\\\"}} focus-out=\\\"\\'save\\' this.object\\\" id=\\\"{{this.field}}\\\"></div><span {{action \\'save\\' this.object on=\\\"click\\\"}} class=\\\"save\\\"><i aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Save\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"check\\\" /></i></span><span {{action \\'cancel\\' this.object on=\\\"click\\\"}} class=\\\"cancel\\\"><i aria-hidden=\\\"true\\\"><BsTooltip @title=\\\"Cancel\\\" @placement=\\\"top\\\" /><FaIcon @icon=\\\"times\\\" /></i></span>{{else}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} class=\\\"text\\\"><BsTooltip @title=\\\"Edit\\\" @placement=\\\"right\\\" />{{get this.object this.field}}</span>{{/if}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/single-save-time-picker.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"margin-top: 10px;\\\"><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:450px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-spatial\\\"></canvas></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;margin-top:4px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Hover over the chart to see values in the panel below\\\">Hover to see values</div><div title=\\\"Colored dots on x-axis show anchor positions\\\">Dots = anchor positions</div><div title=\\\"Scroll up to zoom out centered around cursor\\\">Scroll up to zoom out</div><div title=\\\"Scroll down to zoom in towards cursor\\\">Scroll down to zoom in</div><div title=\\\"Click and drag left or right\\\">Drag to pan</div><div title=\\\"Double-click anywhere on the chart\\\">Double-click to reset</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/slough/chartjs-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/slough/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@projectLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'newInstrumentObjectProject\\' onSelectionChange=(action \\'setProject\\' value=\\\"target.value\\\") inputFieldId=\\'project\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.location}} oninput={{action (mut this.newInstrumentObject.location) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCoordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.east}} oninput={{action (mut this.newInstrumentObject.east) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.north}} oninput={{action (mut this.newInstrumentObject.north) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.depth}} oninput={{action (mut this.newInstrumentObject.depth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectAzimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.azimuth}} oninput={{action (mut this.newInstrumentObject.azimuth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAzimuth\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectDip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.dip}} oninput={{action (mut this.newInstrumentObject.dip) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDip\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@levelLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'newInstrumentObjectLevel\\' onSelectionChange=(action \\'setLevel\\' value=\\\"target.value\\\") inputFieldId=\\'level\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectBorehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.borehole}} oninput={{action (mut this.newInstrumentObject.borehole) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectBorehole\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstrument_length\\\" class=\\\"col-12 col-form-label\\\">Burial Depth (m):</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.instrumentLength}} oninput={{action (mut this.newInstrumentObject.instrumentLength) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstrumentLength\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.installedBy}} oninput={{action (mut this.newInstrumentObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.purpose}} oninput={{action (mut this.newInstrumentObject.purpose) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newInstrumentObject.notes}} oninput={{action (mut this.newInstrumentObject.notes) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/slough/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{this.instrumentAnchors.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each this.instrumentAnchors as |anchor|}}<td>{{anchor}}</td>{{/each}}<td>Temperature</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action \\\"setNewTimestampValue\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action \\\"setNewDisplacementValue\\\" key}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} oninput={{action \\\"setTemperatureValue\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/slough/create-new-raw-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div>{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"sGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-area\\\" /> Spatial Graph</span></div>{{/if}}</div><hr></td></tr><tr class=\\\"details\\\"><td><h5>Properties:</h5></td></tr><tr class=\\\"details\\\"><td colspan=\\\"2\\\" style=\\\"vertical-align: top; margin-bottom: 1rem;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"channelsNum\\\" class=\\\"col-12 col-form-label\\\">Channels:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'channelsNum\\' isEditable=false}}</td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"coordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=@instrument east=@instrument.east north=@instrument.north depth=@instrument.depth stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"azimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'azimuth\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"dip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'dip\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"borehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'borehole\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'zeroTimestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Active:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument id=\\\"activeCheck\\\" field=\\'active\\'}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label class=\\\"col-12 col-form-label\\\">Nodes:</label></td><td class=\\\"input\\\">{{single-save-instrument-anchors object=@anchors instrument=@instrument headAt=@instrument.headAt.id channelsNum=@instrument.channelsNum stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"td_details\\\"></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"add-new-item\\\"></td><td class=\\\"add-new-item\\\"><span {{action \\\"saveInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/slough/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-spatial-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-spatial-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/slough/nvd3-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/slough/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"table-responsive\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th>{{#each this.columnSpecs as |spec|}}<th>{{spec.tableLabel}}</th>{{/each}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th></tr></thead><tbody>{{#each this.tableRows as |row|}}<tr><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td>{{#each row.cells as |cell|}}<td>{{cell.value}}</td>{{/each}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td></tr>{{/each}}</tbody></table></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/slough/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">digit(boolean)</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/slough/spatial-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">digit(boolean)</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/slough/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{this.title}}{{#if this.isSelectedSort}}{{#if this.orderingAscending}}<span class=\\\"th-sort horizontal-headers active\\\"><span aria-hidden=\\\"true\\\" {{action \\'sortBy\\' this.sortProperty true on=\\\"click\\\"}} class=\\\"sort-icons sort-asc\\\"><FaIcon @icon=\\\"sort-up\\\" /></span></span>{{else}}<span class=\\\"th-sort horizontal-headers active\\\"><span aria-hidden=\\\"true\\\" {{action \\'sortBy\\' this.sortProperty false on=\\\"click\\\"}} class=\\\"sort-icons sort-desc\\\"><FaIcon @icon=\\\"sort-down\\\" /></span></span>{{/if}}{{else}}<span class=\\\"th-sort\\\"><span aria-hidden=\\\"true\\\" {{action \\'sortBy\\' this.sortProperty true on=\\\"click\\\"}} class=\\\"sort-icons\\\"><FaIcon @icon=\\\"sort\\\" /></span></span>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/sortable-table-header.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @blastType \\\"1\\\")}}\\n      Production\\n    {{else if (is-equal @blastType \\\"2\\\")}}\\n      Development\\n    {{else}}\\n      All\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash blast_type=null}} class=\\\"dropdown-item\\\">All</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash blast_type=1}} class=\\\"dropdown-item\\\">Production</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash blast_type=2}} class=\\\"dropdown-item\\\">Development</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/spatial-blast-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if (eq @instrumentType \\'1\\')}}{{pack/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'2\\')}}{{cable/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'3\\')}}{{rebar/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'4\\')}}{{pack/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'5\\')}}{{pack/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'6\\')}}{{tilt/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'7\\')}}{{slough/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'8\\')}}{{thermo/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'9\\')}}{{piezo/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'10\\')}}{{hid/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'11\\')}}{{pack/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'12\\')}}Wire{{else if (eq @instrumentType \\'13\\')}}{{adict/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'15\\')}}{{vibe/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'16\\')}}{{micro/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'17\\')}}{{rebarv2/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'19\\')}}{{dppc/spatial-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else}}{{pack/spatial-chart-dropdown selected=\\'Displacement\\'}}{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/spatial-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @eventType \\\"blast\\\")}}\\n      Blast\\n    {{else if (is-equal @eventType \\\"seismic\\\")}}\\n      Seismic\\n    {{else if (is-equal @eventType \\\"bluvibe\\\")}}\\n      BluVibe\\n    {{else}}\\n      All\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash event_type=null blast_type=null seismic_type=null}} class=\\\"dropdown-item\\\">All</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash event_type=\\\"blast\\\" blast_type=null seismic_type=null}} class=\\\"dropdown-item\\\">Blast</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash event_type=\\\"seismic\\\" blast_type=null seismic_type=null}} class=\\\"dropdown-item\\\">Seismic</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/spatial-event-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if @groupTime}}\\n      Frequency\\n    {{else if @groupWindow}}\\n      Number of Samples\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash group_time=true group_window=false frequency_num=0 frequency=\\'weekly\\'}} class=\\\"dropdown-item\\\">Frequency</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash group_time=false group_window=true frequency_num=50 frequency=\\'\\'}} class=\\\"dropdown-item\\\">Number of Samples</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/spatial-group-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @seismicType \\\"1\\\")}}\\n      Event\\n    {{else if (is-equal @seismicType \\\"2\\\")}}\\n      Blast\\n    {{else if (is-equal @seismicType \\\"3\\\")}}\\n      Noise\\n    {{else if (is-equal @seismicType \\\"4\\\")}}\\n      Other\\n    {{else}}\\n      All\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash seismic_type=null}} class=\\\"dropdown-item\\\">All</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash seismic_type=1}} class=\\\"dropdown-item\\\">Event</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash seismic_type=2}} class=\\\"dropdown-item\\\">Blast</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash seismic_type=3}} class=\\\"dropdown-item\\\">Noise</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash seismic_type=4}} class=\\\"dropdown-item\\\">Other</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/spatial-seismic-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{@frequencySelect}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash frequency_num=0 frequency=\\'daily\\' events_only=false}} class=\\\"dropdown-item\\\">Daily</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash frequency_num=0 frequency=\\'weekly\\' events_only=false}} class=\\\"dropdown-item\\\">Weekly</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash frequency_num=0 frequency=\\'monthly\\' events_only=false}} class=\\\"dropdown-item\\\">Monthly</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/spatial-time-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{@frequencySelect}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash frequency_num=10 frequency=\\'\\' events_only=false}} class=\\\"dropdown-item\\\">10</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash frequency_num=20 frequency=\\'\\' events_only=false}} class=\\\"dropdown-item\\\">20</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash frequency_num=50 frequency=\\'\\' events_only=false}} class=\\\"dropdown-item\\\">50</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/spatial-window-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"container\\\">{{#svg viewbox=\\\"0 0 #{height} #{width}\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=height height=width class=\\\"svg-container\\\"}}{{#defs}}{{#pattern patternUnits=\\\"userSpaceOnUse\\\" width=\\\"21\\\" height=\\\"21\\\" id=\\\"p\\\"}}{{rect width=\\\"20\\\" height=\\\"20\\\" x=\\\"0\\\" y=\\\"0\\\" class=\\\"grid-back\\\"}}{{/pattern}}{{/defs}}{{rect width=width height=height class=\\\"grid-front\\\"}}{{rect width=width height=height fill=\\\"url(#p)\\\"}}{{g id=\\'chart-container\\'}}{{/svg}}</div>', { moduleName: 'geotechnical-data-platform-new/templates/components/svg-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"max-width:150px\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:5px;justify-content:space-between;\\\"><div style=\\\"width: 40px;height: 40px;display: flex;align-items: center;justify-content: center;\\\" class=\\\"active-bell-deco\\\"><FaIcon @icon=\\\"bell\\\" /></div><div style=\\\"\\\">Active Alert</div></div><div style=\\\"display:flex;flex-direction:row;align-items:center;margin-bottom:5px;justify-content:space-between;\\\"><div style=\\\"width: 40px;height: 40px;display: flex;align-items: center;justify-content: center;\\\" class=\\\"inactive-bell-deco\\\"><FaIcon @icon=\\\"bell-slash\\\" /></div><div style=\\\"\\\">Inactive Alert</div></div><div style=\\\"width: 100%;display:flex;flex-direction:row;align-items:center;margin-bottom:5px;justify-content:space-between;\\\"><div class=\\\"inactive-bell-deco\\\"><div style=\\\"width:40px;height:40px\\\" class=\\\"alert-ripple-container level-1 is-muted-true\\\"><div class=\\\"ripple-ring\\\"></div><span style=\\\"font-size:medium;\\\" class=\\\"alert-bell-icon\\\"><FaIcon @icon=\\\"bell\\\" /></span></div></div><div style=\\\"\\\">Muted Alert</div></div><div style=\\\"width: 100%;display:flex;flex-direction:row;align-items:center;margin-bottom:5px;justify-content:space-between;\\\"><div class=\\\"inactive-bell-deco\\\"><div style=\\\"width:40px;height:40px\\\" class=\\\"alert-ripple-container level-4 is-muted-false\\\"><div class=\\\"ripple-ring\\\"></div><span style=\\\"font-size:medium;\\\" class=\\\"alert-bell-icon\\\"><FaIcon @icon=\\\"bell\\\" /></span></div></div><div style=\\\"\\\">Level 4 Alert</div></div><div style=\\\"width: 100%;display:flex;flex-direction:row;align-items:center;margin-bottom:5px;justify-content:space-between;\\\"><div class=\\\"inactive-bell-deco\\\"><div style=\\\"width:40px;height:40px\\\" class=\\\"alert-ripple-container level-3 is-muted-false\\\"><div class=\\\"ripple-ring\\\"></div><span style=\\\"font-size:medium;\\\" class=\\\"alert-bell-icon\\\"><FaIcon @icon=\\\"bell\\\" /></span></div></div><div style=\\\"\\\">Level 3 Alert</div></div><div style=\\\"width: 100%;display:flex;flex-direction:row;align-items:center;margin-bottom:5px;justify-content:space-between;\\\"><div class=\\\"inactive-bell-deco\\\"><div style=\\\"width:40px;height:40px\\\" class=\\\"alert-ripple-container level-2 is-muted-false\\\"><div class=\\\"ripple-ring\\\"></div><span style=\\\"font-size:medium;\\\" class=\\\"alert-bell-icon\\\"><FaIcon @icon=\\\"bell\\\" /></span></div></div><div style=\\\"\\\">Level 2 Alert</div></div><div style=\\\"width: 100%;display:flex;flex-direction:row;align-items:center;margin-bottom:5px;justify-content:space-between;\\\"><div class=\\\"inactive-bell-deco\\\"><div style=\\\"width:40px;height:40px\\\" class=\\\"alert-ripple-container level-1 is-muted-false\\\"><div class=\\\"ripple-ring\\\"></div><span style=\\\"font-size:medium;\\\" class=\\\"alert-bell-icon\\\"><FaIcon @icon=\\\"bell\\\" /></span></div></div><div style=\\\"\\\">Level 1 Alert</div></div><div style=\\\"width: 100%;display:flex;flex-direction:row;align-items:center;margin-bottom:5px;justify-content:space-between;\\\"><div class=\\\"inactive-bell-deco\\\"><div style=\\\"width:40px;height:40px\\\" class=\\\"alert-ripple-container level-0 is-muted-false\\\"><div class=\\\"ripple-ring\\\"></div><span style=\\\"font-size:medium;\\\" class=\\\"alert-bell-icon\\\"><FaIcon @icon=\\\"bell\\\" /></span></div></div><div style=\\\"\\\">Level 0 Alert</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/table-legend-alerts.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><select onchange={{action \\'selectedValue\\' value=\\\"target.value\\\"}}><option value=\\\"\\\"></option>{{#each this.getTempUnitsArr as |unit|}}<option selected={{is-equal unit this.initValue}} value=\\\"{{unit}}\\\">{{unit}}</option>{{/each}}</select></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/temperature-units-group.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @blastType \\\"1\\\")}}\\n      Production\\n    {{else if (is-equal @blastType \\\"2\\\")}}\\n      Development\\n    {{else}}\\n      All\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash blast_type=null}} class=\\\"dropdown-item\\\">All</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash blast_type=1}} class=\\\"dropdown-item\\\">Production</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash blast_type=2}} class=\\\"dropdown-item\\\">Development</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/temporal-blast-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if (eq @instrumentType \\'1\\')}}{{pack/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId subModel=@instrument.subModel}}{{else if (eq @instrumentType \\'2\\')}}{{cable/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'3\\')}}{{rebar/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'4\\')}}{{pack/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'5\\')}}{{dconv/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'6\\')}}{{tilt/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'7\\')}}{{slough/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'8\\')}}{{thermo/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'9\\')}}{{piezo/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'10\\')}}{{hid/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'11\\')}}{{pack/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'12\\')}}{{wire/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId port=@port}}{{else if (eq @instrumentType \\'13\\')}}{{#if (eq @vendor.vendorType \\'MDT_MPBX\\')}}{{adict/temporal-MPBX-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{/if}}{{#if (eq @vendor.vendorType \\'MDT_CABLE\\')}}{{adict/temporal-CABLE-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{/if}}{{#if (eq @vendor.vendorType \\'GENERIC\\')}}{{adict/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{/if}}{{#if (eq @vendor.vendorType \\'\\')}}{{adict/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{/if}}{{else if (eq @instrumentType \\'15\\')}}{{vibe/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'16\\')}}{{micro/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'17\\')}}{{rebarv2/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'19\\')}}{{dppc/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else if (eq @instrumentType \\'20\\')}}{{multiDExto/temporal-chart-dropdown selected=@selected instrumentId=@instrumentId}}{{else}}{{pack/temporal-chart-dropdown selected=\\'Displacement\\'}}{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @display_records 50)}}\\n      50\\n    {{else if (is-equal @display_records 300)}}\\n      300\\n    {{else if (is-equal @display_records 100)}}\\n      100\\n    {{else if (is-equal @display_records 10)}}\\n      10\\n    {{else if (is-equal @display_records 1)}}\\n      All\\n    {{else}}\\n      100\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash display_records=300}} class=\\\"dropdown-item\\\">300</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash display_records=100}} class=\\\"dropdown-item\\\">100</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash display_records=50}} class=\\\"dropdown-item\\\">50</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash display_records=10}} class=\\\"dropdown-item\\\">10</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash display_records=1}} class=\\\"dropdown-item\\\">All</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/temporal-display-records-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @eventType \\\"blast\\\")}}\\n      Blast\\n    {{else if (is-equal @eventType \\\"seismic\\\")}}\\n      Seismic\\n    {{else if (is-equal @eventType \\\"bluvibe\\\")}}\\n      BluVibe\\n    {{else}}\\n      All\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash event_type=null blast_type=null seismic_type=null}} class=\\\"dropdown-item\\\">All</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash event_type=\\\"blast\\\" blast_type=null seismic_type=null}} class=\\\"dropdown-item\\\">Blast</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash event_type=\\\"seismic\\\" blast_type=null seismic_type=null}} class=\\\"dropdown-item\\\">Seismic</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash event_type=\\\"bluvibe\\\" blast_type=null seismic_type=null}} class=\\\"dropdown-item\\\">BluVibe</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/temporal-event-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if (eq @gatewayType \\'1\\')}}{{blucell/temporal-gateway-chart-dropdown selected=@selected gatewayId=@gatewayId gatewayType=@gatewayTypeId left_axis_field=@left_axis_field right_axis_field=@right_axis_field modelName=@modelName chart_parent_gateway=@chart_parent_gateway}}{{else if (eq @gatewayType \\'2\\')}}{{blugate/temporal-gateway-chart-dropdown selected=@selected gatewayId=@gatewayId gatewayType=@gatewayTypeId left_axis_field=@left_axis_field right_axis_field=@right_axis_field modelName=@modelName}}{{else if (eq @gatewayType \\'3\\')}}{{blu900gw/temporal-gateway-chart-dropdown selected=@selected gatewayId=@gatewayId gatewayType=@gatewayTypeId left_axis_field=@left_axis_field right_axis_field=@right_axis_field modelName=@modelName}}{{else if (eq @gatewayType \\'4\\')}}{{blu900node/temporal-gateway-chart-dropdown selected=@selected gatewayId=@gatewayId gatewayType=@gatewayTypeId left_axis_field=@left_axis_field right_axis_field=@right_axis_field modelName=@modelName chart_parent_gateway=@chart_parent_gateway}}{{else if (eq @gatewayType \\'5\\')}}{{oneforone/temporal-gateway-chart-dropdown selected=@selected gatewayId=@gatewayId gatewayType=@gatewayTypeId left_axis_field=@left_axis_field right_axis_field=@right_axis_field modelName=@modelName chart_parent_gateway=@chart_parent_gateway}}{{else if (eq @gatewayType \\'6\\')}}{{vibe/temporal-gateway-chart-dropdown selected=@selected gatewayId=@gatewayId gatewayType=@gatewayTypeId left_axis_field=@left_axis_field right_axis_field=@right_axis_field modelName=@modelName chart_parent_gateway=@chart_parent_gateway}}{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/temporal-gateway-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'geotechnical-data-platform-new/templates/components/temporal-gateway-left-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if (eq @gatewayType \\'1\\')}}{{blucell/temporal-gateway-right-axis-dropdown gatewayId=@gatewayId modelName=@modelName right_axis_field=@right_axis_field left_axis_field=@left_axis_field selected=@selected}}{{else if (eq @gatewayType \\'2\\')}}{{blugate/temporal-gateway-right-axis-dropdown gatewayId=@gatewayId modelName=@modelName right_axis_field=@right_axis_field left_axis_field=@left_axis_field selected=@selected}}{{else if (eq @gatewayType \\'3\\')}}{{blu900gw/temporal-gateway-right-axis-dropdown gatewayId=@gatewayId modelName=@modelName right_axis_field=@right_axis_field left_axis_field=@left_axis_field selected=@selected}}{{else if (eq @gatewayType \\'4\\')}}{{blu900node/temporal-gateway-right-axis-dropdown gatewayId=@gatewayId modelName=@modelName right_axis_field=@right_axis_field left_axis_field=@left_axis_field selected=@selected chart_parent_gateway=@chart_parent_gateway}}{{else if (eq @gatewayType \\'5\\')}}{{oneforone/temporal-gateway-right-axis-dropdown gatewayId=@gatewayId modelName=@modelName right_axis_field=@right_axis_field left_axis_field=@left_axis_field selected=@selected chart_parent_gateway=@chart_parent_gateway}}{{else if (eq @gatewayType \\'6\\')}}{{vibe/temporal-gateway-right-axis-dropdown gatewayId=@gatewayId modelName=@modelName right_axis_field=@right_axis_field left_axis_field=@left_axis_field selected=@selected chart_parent_gateway=@chart_parent_gateway}}{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/temporal-gateway-right-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if @window}}\\n      {{#if (is-equal @window 60)}}\\n        1 Hour\\n      {{else if (is-equal @window 480)}}\\n        8 Hours\\n      {{else if (is-equal @window 1440)}}\\n        24 Hours\\n      {{else if (is-equal @window 2880)}}\\n        48 Hours\\n      {{else if (is-equal @window 4320)}}\\n        72 Hours\\n      {{else if (is-equal @window 5760)}}\\n        96 Hours\\n      {{else}}\\n        {{@window}}\\n      {{/if}}\\n    {{else}}\\n      None\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash window=60}} class=\\\"dropdown-item\\\">1 Hour</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash window=480}} class=\\\"dropdown-item\\\">8 Hours</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash window=1440}} class=\\\"dropdown-item\\\">24 Hours</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash window=2880}} class=\\\"dropdown-item\\\">48 Hours</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash window=4320}} class=\\\"dropdown-item\\\">72 Hours</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash window=5760}} class=\\\"dropdown-item\\\">96 Hours</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/temporal-group-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @seismicType \\\"1\\\")}}\\n      Event\\n    {{else if (is-equal @seismicType \\\"2\\\")}}\\n      Blast\\n    {{else if (is-equal @seismicType \\\"3\\\")}}\\n      Noise\\n    {{else if (is-equal @seismicType \\\"4\\\")}}\\n      Other\\n    {{else}}\\n      All\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash seismic_type=null}} class=\\\"dropdown-item\\\">All</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash seismic_type=1}} class=\\\"dropdown-item\\\">Event</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash seismic_type=2}} class=\\\"dropdown-item\\\">Blast</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash seismic_type=3}} class=\\\"dropdown-item\\\">Noise</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash seismic_type=4}} class=\\\"dropdown-item\\\">Other</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/temporal-seismic-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @frequency \\\"minute\\\")}}\\n      Per Minute\\n    {{else if (is-equal @frequency \\\"hourly\\\")}}\\n      Hourly\\n    {{else if (is-equal @frequency \\\"daily\\\")}}\\n      Daily\\n    {{else}}\\n      None\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash frequency=\\'\\'}} class=\\\"dropdown-item\\\">None</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash frequency=\\'minute\\'}} class=\\\"dropdown-item\\\">Per Minute</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash frequency=\\'hourly\\'}} class=\\\"dropdown-item\\\">Hourly</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId @modelName}} @query={{hash frequency=\\'daily\\'}} class=\\\"dropdown-item\\\">Daily</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/temporal-window-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"margin-top: 10px;\\\"><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:450px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-spatial\\\"></canvas></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;margin-top:4px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Hover over the chart to see values in the panel below\\\">Hover to see values</div><div title=\\\"Colored dots on x-axis show anchor positions\\\">Dots = anchor positions</div><div title=\\\"Scroll up to zoom out centered around cursor\\\">Scroll up to zoom out</div><div title=\\\"Scroll down to zoom in towards cursor\\\">Scroll down to zoom in</div><div title=\\\"Click and drag left or right\\\">Drag to pan</div><div title=\\\"Double-click anywhere on the chart\\\">Double-click to reset</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/thermo/chartjs-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/thermo/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@projectLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'newInstrumentObjectProject\\' onSelectionChange=(action \\'setProject\\' value=\\\"target.value\\\") inputFieldId=\\'project\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.location}} oninput={{action (mut this.newInstrumentObject.location) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCoordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.east}} oninput={{action (mut this.newInstrumentObject.east) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.north}} oninput={{action (mut this.newInstrumentObject.north) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.depth}} oninput={{action (mut this.newInstrumentObject.depth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectAzimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.azimuth}} oninput={{action (mut this.newInstrumentObject.azimuth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAzimuth\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectDip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.dip}} oninput={{action (mut this.newInstrumentObject.dip) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDip\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@levelLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'newInstrumentObjectLevel\\' onSelectionChange=(action \\'setLevel\\' value=\\\"target.value\\\") inputFieldId=\\'level\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectBorehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.borehole}} oninput={{action (mut this.newInstrumentObject.borehole) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectBorehole\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.installedBy}} oninput={{action (mut this.newInstrumentObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.purpose}} oninput={{action (mut this.newInstrumentObject.purpose) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newInstrumentObject.notes}} oninput={{action (mut this.newInstrumentObject.notes) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/thermo/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{this.instrumentAnchors.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each this.instrumentAnchors as |anchor|}}<td>{{anchor}}</td>{{/each}}</tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action \\\"setNewTimestampValue\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action \\\"setNewDisplacementValue\\\" key}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}</tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/thermo/create-new-raw-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div>{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"sGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-area\\\" /> Spatial Graph</span></div>{{/if}}</div><hr></td></tr><tr class=\\\"details\\\"><td><h5>Properties:</h5></td></tr><tr class=\\\"details\\\"><td colspan=\\\"2\\\" style=\\\"vertical-align: top; margin-bottom: 1rem;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"channelsNum\\\" class=\\\"col-12 col-form-label\\\">Channels:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'channelsNum\\' isEditable=false}}</td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"coordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=@instrument east=@instrument.east north=@instrument.north depth=@instrument.depth stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"azimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'azimuth\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"dip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'dip\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"borehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'borehole\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'zeroTimestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Active:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument id=\\\"activeCheck\\\" field=\\'active\\'}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label class=\\\"col-12 col-form-label\\\">Nodes:</label></td><td class=\\\"input\\\">{{single-save-instrument-anchors object=@anchors instrument=@instrument headAt=@instrument.headAt.id channelsNum=@instrument.channelsNum stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"td_details\\\"></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"add-new-item\\\"></td><td class=\\\"add-new-item\\\"><span {{action \\\"saveInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/thermo/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-spatial-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-spatial-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/thermo/nvd3-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/thermo/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"table-responsive\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th>{{#each this.columnSpecs as |spec|}}<th>{{spec.tableLabel}}</th>{{/each}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th></tr></thead><tbody>{{#each this.tableRows as |row|}}<tr><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td>{{#each row.cells as |cell|}}<td>{{cell.value}}</td>{{/each}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td></tr>{{/each}}</tbody></table></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/thermo/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Temperature</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Temp Rate</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Temp Grad</LinkTo>\\n\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/thermo/spatial-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Temperature</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Temp. Rate</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Temp. Grad</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/thermo/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'geotechnical-data-platform-new/templates/components/threeD.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/tilt/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@projectLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'newInstrumentObjectProject\\' onSelectionChange=(action \\'setProject\\' value=\\\"target.value\\\") inputFieldId=\\'project\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.location}} oninput={{action (mut this.newInstrumentObject.location) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCoordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.east}} oninput={{action (mut this.newInstrumentObject.east) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.north}} oninput={{action (mut this.newInstrumentObject.north) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.depth}} oninput={{action (mut this.newInstrumentObject.depth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectAzimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.azimuth}} oninput={{action (mut this.newInstrumentObject.azimuth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAzimuth\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectDip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.dip}} oninput={{action (mut this.newInstrumentObject.dip) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDip\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@levelLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'newInstrumentObjectLevel\\' onSelectionChange=(action \\'setLevel\\' value=\\\"target.value\\\") inputFieldId=\\'level\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectBorehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.borehole}} oninput={{action (mut this.newInstrumentObject.borehole) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectBorehole\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.installedBy}} oninput={{action (mut this.newInstrumentObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.purpose}} oninput={{action (mut this.newInstrumentObject.purpose) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newInstrumentObject.notes}} oninput={{action (mut this.newInstrumentObject.notes) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/tilt/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{this.instrumentAnchors.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each this.instrumentAnchors as |anchor|}}<td>{{anchor}}</td>{{/each}}<td>Temperature</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action \\\"setNewTimestampValue\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action \\\"setNewDisplacementValue\\\" key}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} oninput={{action \\\"setTemperatureValue\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/tilt/create-new-raw-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div>{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div></td></tr><tr class=\\\"details\\\"><td><h5>Properties:</h5></td></tr><tr class=\\\"details\\\"><td colspan=\\\"2\\\" style=\\\"vertical-align: top; margin-bottom: 1rem;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"channelsNum\\\" class=\\\"col-12 col-form-label\\\">Channels:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'channelsNum\\' isEditable=false}}</td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"coordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=@instrument east=@instrument.east north=@instrument.north depth=@instrument.depth stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"azimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'azimuth\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"dip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'dip\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"borehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'borehole\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'zeroTimestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Active:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument id=\\\"activeCheck\\\" field=\\'active\\'}}</td></tr></tbody></table></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"td_details\\\"></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"add-new-item\\\"></td><td class=\\\"add-new-item\\\"><span {{action \\\"saveInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/tilt/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/tilt/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{#if @multiple}}<div class=\\\"row\\\"><div class=\\\"col\\\"><a>ALERT! Multiple Modes detected in this set of data, using final value.</a></div></div>{{/if}}<div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"table-responsive\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th>{{#each this.columnSpecs as |spec|}}<th>{{spec.tableLabel}}</th>{{/each}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th></tr></thead><tbody>{{#each this.tableRows as |row|}}<tr><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td>{{#each row.cells as |cell|}}<td>{{cell.value}}</td>{{/each}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td></tr>{{/each}}</tbody></table></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/tilt/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Tilt</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Ang. Velocity</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/tilt/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><select onchange={{action \\'selectedValue\\' value=\\\"target.value\\\"}}><option value=\\\"\\\"></option>{{#each this.getTimeUnitsArr as |unit|}}<option selected={{is-equal unit this.initValue}} value=\\\"{{unit}}\\\">{{unit}}</option>{{/each}}</select></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/time-units-group.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'geotechnical-data-platform-new/templates/components/vendor-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:450px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-freq\\\"></canvas></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Scroll up to zoom out centered around cursor\\\">- Scroll up to zoom out</div><div title=\\\"Scroll down to zoom in towards cursor\\\">- Scroll down to zoom in</div><div title=\\\"Click and drag left or right\\\">- Drag to pan</div><div title=\\\"Double-click anywhere on the chart\\\">- Double-click to reset</div><div title=\\\"Click on a data point to freeze the tooltip; click again to unpin\\\">- Click to pin tooltip</div><div title=\\\"Hover over a legend item to highlight that channel\\\">- Hover legend to highlight</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/chartjs-frequency-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/chartjs-temporal-gateway-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newGatewayObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.Name}} oninput={{action (mut this.newGatewayObject.name) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.project}} oninput={{action (mut this.newGatewayObject.project) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectProject\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.location}} oninput={{action (mut this.newGatewayObject.location) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.level}} oninput={{action (mut this.newGatewayObject.level) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectLevel\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newGatewayObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.installedBy}} oninput={{action (mut this.newGatewayObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newGatewayObject.purpose}} oninput={{action (mut this.newGatewayObject.purpose) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newGatewayObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newGatewayObject.notes}} oninput={{action (mut this.newGatewayObject.notes) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createGateway\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/create-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@projectLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'newInstrumentObjectProject\\' onSelectionChange=(action \\'setProject\\' value=\\\"target.value\\\") inputFieldId=\\'project\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.location}} oninput={{action (mut this.newInstrumentObject.location) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCoordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.east}} oninput={{action (mut this.newInstrumentObject.east) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.north}} oninput={{action (mut this.newInstrumentObject.north) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.depth}} oninput={{action (mut this.newInstrumentObject.depth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectAzimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.azimuth}} oninput={{action (mut this.newInstrumentObject.azimuth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAzimuth\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectDip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.dip}} oninput={{action (mut this.newInstrumentObject.dip) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDip\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@levelLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'newInstrumentObjectLevel\\' onSelectionChange=(action \\'setLevel\\' value=\\\"target.value\\\") inputFieldId=\\'level\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectBorehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.borehole}} oninput={{action (mut this.newInstrumentObject.borehole) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectBorehole\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.installedBy}} oninput={{action (mut this.newInstrumentObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.purpose}} oninput={{action (mut this.newInstrumentObject.purpose) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newInstrumentObject.notes}} oninput={{action (mut this.newInstrumentObject.notes) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px\\\" class=\\\"add-new-item\\\"><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{this.instrumentAnchors.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each this.instrumentAnchors as |anchor|}}<td>{{anchor}}</td>{{/each}}<td>Temperature</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\".001\\\" oninput={{action \\\"setNewTimestampValue\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action \\\"setNewDisplacementValue\\\" key}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} oninput={{action \\\"setTemperatureValue\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/create-new-raw-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{@anchorDistances.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" @gateway on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" @gateway on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each @anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}<td>Temp.</td></tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.newTimestampValue) value=\\\"target.value\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td>{{#each-in this.gatewayValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action (mut (get this.newGatewayValueObjectValues key)) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td data-title=\\\"Temp.\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} id=\\\"df{{key}}\\\" oninput={{action (mut this.temperatureObjectValue) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td></tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/create-new-raw-gateway-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><h5 style=\\\"text-align: center;\\\" id=\\\"graphTitle\\\">{{getGraphTitle}}</h5></div><div id=\\\"bluvibe_frequency_event_echarts\\\" style=\\\"width: 100%; min-height: 600px; border: solid;border-width: thin; border-color: lightgrey;border-radius: 20px;\\\" class=\\\"echart-container\\\"></div><div style=\\\"margin:10px;\\\"><h6 style=\\\"font-weight:bold;\\\">Additional Information</h6><div style=\\\"margin:10px\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div>Starting Timestamp:</div><div style=\\\"margin-left:10px;\\\">{{getTimestamp}}</div></div></div></div><div style=\\\"margin:10px;\\\"><h6 style=\\\"font-weight:bold;\\\">Graph Tools</h6>{{#if this.isShowConfig.isShowXYZ3DInstructions}}<div style=\\\"margin:10px;display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div>Controls:</div><div style=\\\"margin-left:10px;\\\">{{this.controlsText}}</div></div></div>{{/if}}<div style=\\\"margin:10px;display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div>3D:</div><button type=\\\"button\\\" style=\\\"margin-left:10px;width: 60px;padding:5px;\\\" onClick={{action \\\"handleToggle3D\\\"}} class=\\\"btn btn-primary\\\">Toggle</button></div><div style=\\\"width:25px\\\"></div>{{#if this.setVisibleIntegrationMethod}}<div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div>Integration Method:</div><button id=\\\"integrationMethodButtonID\\\" type=\\\"button\\\" style=\\\"margin-left:10px;padding:5px;\\\" onClick={{action \\\"handleToggleIntegrationMethod\\\"}} class=\\\"btn btn-primary\\\">-</button></div>{{/if}}</div><div style=\\\"margin:10px;display:{{if this.playbackOptions.isVisible \\'flex;\\' \\'none;\\'}};flex-direction:row;align-items:center;\\\"><div>Playback:</div><div style=\\\"width:100%;display:flex;flex-direction:column;align-items:center;\\\"><div style=\\\"display: flex; flex-direction: row; align-items: center;\\\"><div id=\\\"playBackLoopSettings\\\" style=\\\"cursor:pointer; border-color: black; border: solid; border-radius: 5px; border-width: thin; padding: 2px;color:{{if this.playbackOptions.isPlayLoop \\'green;\\' \\'red;\\'}}\\\" onClick={{action \\\"cyclePlayLoop\\\"}}>Loop</div><div style=\\\"width:25px\\\"></div><div id=\\\"playPauseSettings\\\" style=\\\"cursor:pointer; border-color: black; border: solid; border-radius: 5px; border-width: thin; padding: 2px;\\\">Play/Pause</div><div style=\\\"width:25px\\\"></div><div id=\\\"playBackSpeedSettings\\\" style=\\\"cursor:pointer;\\\"><select id=\\\"playbackSpeedSelect\\\" onchange={{action \\'cyclePlaybackSpeed\\' value=\\\"target.value\\\"}} class=\\\"form-control\\\">{{#each this.playbackOptions.playbackSpeedData as |speedValue|}}<option value={{speedValue}} selected={{eq speedValue this.playbackOptions.playbackSpeed}}>{{speedValue}}</option>{{/each}}</select></div></div><div style=\\\"display:flex;width:100%\\\"><td style=\\\"width: 100%\\\" class=\\\"input\\\"><input id=\\\"playBackGraphSettings\\\" type=\\\"range\\\" class=\\\"form-control\\\"></td></div></div></div><div style=\\\"margin:10px;display:flex;flex-direction:row;align-items:center;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div>Scaling:</div><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div id=\\\"xGraphScaling\\\" style=\\\"margin-left:10px;display:flex;flex-direction:column;align-items:center;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div>Max X:</div><td style=\\\"margin-left:10px\\\" class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"\\\" id=\\\"maxXGraph\\\" oninput={{action \\'updateGraphScaling\\' event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div>Min X:</div><td style=\\\"margin-left:10px\\\" class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"\\\" id=\\\"minXGraph\\\" oninput={{action \\'updateGraphScaling\\' event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div></div><div id=\\\"yGraphScaling\\\" style=\\\"margin-left:10px;display:flex;flex-direction:column;align-items:center;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div>Max Y:</div><td style=\\\"margin-left:10px\\\" class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"\\\" id=\\\"maxYGraph\\\" oninput={{action \\'updateGraphScaling\\' event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div>Min Y:</div><td style=\\\"margin-left:10px\\\" class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"\\\" id=\\\"minYGraph\\\" oninput={{action \\'updateGraphScaling\\' event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div></div><div id=\\\"zGraphScaling\\\" style=\\\"margin-left:10px;display:flex;flex-direction:column;align-items:center;\\\"><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div>Max Z:</div><td style=\\\"margin-left:10px\\\" class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"\\\" id=\\\"maxZGraph\\\" oninput={{action \\'updateGraphScaling\\' event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div><div style=\\\"display:flex;flex-direction:row;align-items:center;\\\"><div>Min Z:</div><td style=\\\"margin-left:10px\\\" class=\\\"input\\\"><input type=\\\"number\\\" style=\\\"\\\" id=\\\"minZGraph\\\" oninput={{action \\'updateGraphScaling\\' event=\\\"target\\\"}} class=\\\"form-control\\\"></td></div></div><button type=\\\"button\\\" style=\\\"margin-left:10px;width: 60px;padding:5px;\\\" onClick={{action \\\"resetGraphScaling\\\"}} class=\\\"btn btn-primary\\\">Reset</button></div></div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/echarts-frequency-event.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @gateway.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div>{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @gateway.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div></td></tr><tr class=\\\"details\\\"><td colspan=\\\"7\\\"><hr></td></tr><tr class=\\\"details\\\"><td colspan=\\\"3\\\" style=\\\"vertical-align: top; margin-bottom: 1rem;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><h5>Properties:</h5></td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@gateway field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@gateway inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"></td></tr></tbody><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"td_details\\\"></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"6\\\" class=\\\"add-new-item\\\"></td><td class=\\\"add-new-item\\\"><span {{action \\\"saveGateway\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr>{{#if (eq @gateway.hasChildren true)}}<tr class=\\\"details newRecordDetails\\\">{{gateway-list gateway=@gateway.children sortBy=(action \\'sortBy\\') ordering=this.ordering}}</tr>{{/if}}</table>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/edit-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details\\\"><div style=\\\"align-items: center;\\\" class=\\\"row\\\">{{#if (if-meet-sub-model-requirement @instrument \\\"viewData\\\")}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div>{{/if}}{{#if (if-meet-sub-model-requirement @instrument \\\"tGraph\\\")}}{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}{{/if}}{{#if (if-meet-sub-model-requirement @instrument \\\"fGraph\\\")}}{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"fGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-area\\\" /> Frequency Graph</span></div>{{/if}}{{/if}}{{#if (if-meet-sub-model-requirement @instrument \\\"fEvent\\\")}}{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"fEvent\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"wave-square\\\" /> Frequency Events</span></div>{{/if}}{{/if}}{{#if this.showLoading}}<div style=\\\"width: auto;\\\" class=\\\"pulse_loader\\\"></div>{{/if}}</div><hr></td></tr><tr class=\\\"details\\\"><td><h5>Properties:</h5></td></tr><tr class=\\\"details\\\"><td colspan=\\\"2\\\" style=\\\"vertical-align: top; margin-bottom: 1rem;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"channelsNum\\\" class=\\\"col-12 col-form-label\\\">Channels:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'channelsNum\\' isEditable=false}}</td></tr><tr><td><label for=\\\"subModel\\\" class=\\\"col-12 col-form-label\\\">Sub-Model:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'subModel\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"coordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=@instrument east=@instrument.east north=@instrument.north depth=@instrument.depth stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"azimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'azimuth\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"dip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'dip\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"borehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'borehole\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'zeroTimestamp\\' format=@globalDatetimeFormat.value showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'installDate\\' format=@globalDatetimeFormat.value showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Active:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument field=\\'active\\'}}</td></tr></tbody></table></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"td_details\\\"></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"add-new-item\\\"></td><td class=\\\"add-new-item\\\"><span {{action \\\"saveInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>    \\n    {{#if (is-equal @selected \\\"ppv\\\")}}\\n      PPV vs Frequency\\n    {{else if (is-equal @selected \\\"ppa\\\")}}\\n      PPA vs Frequency\\n    {{else if (is-equal @selected \\\"ppl\\\")}}\\n      PPV vs Log(Frequency)\\n    {{else}}\\n      PPV vs Frequency\\n    {{/if}}\\n\\n    <span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"frequency-graphs.frequency-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"ppv\\\"}} class=\\\"dropdown-item\\\">PPV vs Frequency</LinkTo>\\n        <LinkTo @route=\\\"frequency-graphs.frequency-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"ppl\\\"}} class=\\\"dropdown-item\\\">PPV vs Log(Frequency)</LinkTo>\\n        <LinkTo @route=\\\"frequency-graphs.frequency-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"ppa\\\"}} class=\\\"dropdown-item\\\">PPA vs Frequency</LinkTo>\\n  </dd.menu>\\n</BsDropdown>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/frequency-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>    \\n    {{#if (is-equal @selected \\\"lin_reg_raw\\\")}}\\n      Linear Reg(RAW)\\n    {{else if (is-equal @selected \\\"lin_reg_detrended\\\")}}\\n      Linear Reg(Detrended)\\n    {{else if (is-equal @selected \\\"fft\\\")}}\\n      FFT\\n    {{else}}\\n      Velocity/Displacement\\n    {{/if}}\\n\\n    <span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"frequency-events\\\" @model={{@instrumentId}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"lin_reg_raw\\\"}} class=\\\"dropdown-item\\\">Linear Reg(RAW)</LinkTo>\\n        <LinkTo @route=\\\"frequency-events\\\" @model={{@instrumentId}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"lin_reg_detrended\\\"}} class=\\\"dropdown-item\\\">Linear Reg(Detrended)</LinkTo>\\n        <LinkTo @route=\\\"frequency-events\\\" @model={{@instrumentId}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"fft\\\"}} class=\\\"dropdown-item\\\">FFT</LinkTo>\\n        <LinkTo @route=\\\"frequency-events\\\" @model={{@instrumentId}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"velo_and_disp\\\"}} class=\\\"dropdown-item\\\">Velocity/Displacement</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/frequency-events-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<button type=\\\"button\\\" style=\\\"margin-top:15px; border-width: 0;background-color: white;padding: 0px;font-size: large;cursor: pointer;text-decoration: underline;color: #007bff;\\\" {{action \\\"downloadScreenshot\\\" on=\\\"click\\\"}}>Export Graph</button><div id=\\\"GRAPH\\\"><div id={{chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-frequency-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/nvd3-frequency-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg></div><div class=\\\"mb-1\\\"></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/nvd3-temporal-gateway-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div><div style=\\\"margin-top:8px;overflow:auto;display:inline-block;max-width:1300px;\\\" class=\\\"row parent\\\"><div class=\\\"col\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"table-responsive\\\"><table class=\\\"table table-striped responsive-table child\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th>{{#each this.columnSpecs as |spec|}}<th style=\\\"white-space:nowrap;\\\">{{spec.tableLabel}}</th>{{/each}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th></tr></thead><tbody>{{#each this.tableRows as |row|}}<tr><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td>{{#each row.cells as |cell|}}<td style=\\\"white-space:nowrap;\\\">{{cell.value}}</td>{{/each}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td></tr>{{/each}}</tbody></table></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><div><label style=\\\"margin-right: 5px;\\\">Visible:</label><label style=\\\"margin-right: 5px;\\\">{{this.getVisibleReadings}}</label><label style=\\\"margin-right: 5px;\\\">Total:</label><label style=\\\"margin-right: 5px;\\\">{{this.getTotalReadings}}</label></div></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@instrumentFreqEventData.meta routeLink=\\'raw-frequency-events-data\\' class=\\\"text-md-right\\\"}}</div></div></div>{{#if this.isVisibleCreateNewForm}}<div style=\\\"overflow: auto; max-width: 1300px;\\\" class=\\\"row\\\"><div class=\\\"col details newRecordDetails\\\">{{vibe/create-new-raw-data-value-form isVisibleCreateNewForm=this.isVisibleCreateNewForm isVisibleReadingCreated=this.isVisibleReadingCreated instrumentId=@instrument.id instrumentType=@instrument.instrumentType instrumentAnchors=this.anchorDistances dateFormat=\\'YYYY-MM-DD HH:mm:ss.l\\' setProp=this.setProp}}</div></div>{{/if}}{{#if this.isVisibleReadingCreated}}<div class=\\\"row\\\"><div class=\\\"col\\\">Reading Added!</div></div>{{/if}}<div class=\\\"row parent\\\"><div class=\\\"col\\\"><table class=\\\"table table-striped responsive-table child\\\"><thead><tr><th>ID</th><th>Event ID</th><th>Date</th>{{#each this.anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}</tr></thead><tbody>{{#each this.getFreqEventData as |selectOption|}}<tr><td>{{selectOption.id}}</td><td style=\\\"color:blue;cursor:pointer;\\\" onclick={{action \\\"handleAction\\\" \\\"eventIDHotClick\\\" selectOption}}>{{selectOption.parent_id}}</td><td>{{selectOption.timestamp}}</td><td>{{format-number selectOption.x 5}}</td><td>{{format-number selectOption.y 5}}</td><td>{{format-number selectOption.z 5}}</td></tr>{{/each}}</tbody></table></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@instrumentFreqEventData.meta routeLink=\\'raw-frequency-events-data\\' class=\\\"text-md-right\\\"}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/raw-frequency-events-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@gatewayData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@gatewayData.meta routeLink=\\'raw-gateway-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{#if this.isVisibleCreateNewForm}}<div class=\\\"row\\\"><div class=\\\"col details newRecordDetails\\\">{{blucell/create-new-raw-gateway-data-value-form isVisibleCreateNewForm=this.isVisibleCreateNewForm isVisibleReadingCreated=this.isVisibleReadingCreated gatewayId=@gateway.id gatewayType=@gateway.gatewayType anchorDistances=this.anchorDistances dateFormat=\\'YYYY-MM-DD HH:mm:ss\\' setProp=@setProp}}</div></div>{{/if}}{{#if this.isVisibleReadingCreated}}<div class=\\\"row\\\"><div class=\\\"col\\\">Reading Added!</div></div>{{/if}}<div class=\\\"row\\\"><div class=\\\"col\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th>Date</th>{{#each this.anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}<th>Temp.</th></tr></thead><tbody>{{#each this.getGatewayData as |gatewayValue index|}}{{single-save-gateway-inputs-array-table-row-cells gatewayId=@gateway.id gateway=@gateway gatewayType=@gateway.gatewayType gatewayValueObject=gatewayValue gatewayValuesModel=@gatewayData temperatureValuesModel=@temperatureData inputType=\\'text\\' fields=\\'values\\' tableRowIndex=index setProp=@setProp omitTemperature=false}}{{/each}}</tbody></table></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@gatewayData.meta routeLink=\\'raw-gateway-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/raw-gateway-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>    \\n    {{#if (is-equal @selected \\\"frequency\\\")}}\\n      Frequency\\n    {{else if (is-equal @selected \\\"ppv\\\")}}\\n      PPV\\n    {{else if (is-equal @selected \\\"ppa\\\")}}\\n      PPA\\n    {{else}}\\n      Frequency\\n    {{/if}}\\n\\n    <span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"frequency\\\"}} class=\\\"dropdown-item\\\">Frequency</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"ppv\\\"}} class=\\\"dropdown-item\\\">PPV</LinkTo>\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null chart_type=\\\"ppa\\\"}} class=\\\"dropdown-item\\\">PPA</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @left_axis_field \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @left_axis_field \\'RSSI\\')}}\\n      RSSI\\n    {{else if (is-equal @left_axis_field \\'Readings\\')}}\\n      Number of Readings\\n    {{else if (is-equal @left_axis_field \\'Uptime\\')}}\\n      Uptime in Seconds\\n    {{else if (is-equal @left_axis_field \\'Reconnection\\')}}\\n      Reconnection Attempts\\n    {{else if (is-equal @left_axis_field \\'Uploads\\')}}\\n      Number of Uploads\\n    {{else if (is-equal @left_axis_field \\'Firmware\\')}}\\n      Firmware Version\\n    {{else if (is-equal @left_axis_field \\'Temperature\\')}}\\n      Temperature\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Voltage\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null  left_axis_field=\\\"RSSI\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'readings-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Readings\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Number of Readings</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uptime-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Uptime\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Uptime in Seconds</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'reconnection-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Reconnection\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Reconnection</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Firmware\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Firmware Version</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'temperature-gateway-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Temperature\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Temperature</LinkTo>\\n  </dd.menu>\\n</BsDropdown>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/temporal-gateway-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @selected \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @selected \\'RSSI\\')}}\\n      RSSI\\n    {{else if (is-equal @selected \\'Readings\\')}}\\n      Number of Readings\\n    {{else if (is-equal @selected \\'Uptime\\')}}\\n      Uptime in Seconds\\n    {{else if (is-equal @selected \\'Reconnection\\')}}\\n      Reconnection Attempts\\n    {{else if (is-equal @selected \\'Uploads\\')}}\\n      Number of Uploads\\n    {{else if (is-equal @selected \\'Firmware\\')}}\\n      Firmware Version\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Voltage\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"RSSI\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'readings-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Readings\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Number of Readings</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uptime-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Uptime\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Uptime in Seconds</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'reconnection-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Reconnection\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Reconnection Attempts</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uploads-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Uploads\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Number of Uploads</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null left_axis_field=\\\"Firmware\\\" right_axis_field=@right_axis_field}} class=\\\"dropdown-item\\\">Firmware</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/temporal-gateway-left-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    {{#if (is-equal @right_axis_field \\'Voltage\\')}}\\n      Voltage\\n    {{else if (is-equal @right_axis_field \\'RSSI\\')}}\\n      RSSI\\n    {{else if (is-equal @right_axis_field \\'Readings\\')}}\\n      Number of Readings\\n    {{else if (is-equal @right_axis_field \\'Uptime\\')}}\\n      Uptime in Seconds\\n    {{else if (is-equal @right_axis_field \\'Reconnection\\')}}\\n      Reconnection Attempts\\n    {{else if (is-equal @right_axis_field \\'Uploads\\')}}\\n      Number of Uploads\\n    {{else if (is-equal @right_axis_field \\'Firmware\\')}}\\n      Firmware Version\\n    {{else if (is-equal @right_axis_field \\'Temperature\\')}}\\n      Temperature\\n    {{else}}\\n      Voltage\\n    {{/if}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'voltage-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Voltage\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Voltage</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'rssi-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"RSSI\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">RSSI</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'readings-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Readings\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Number of Readings</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uptime-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Uptime\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Uptime in Seconds</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'reconnection-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Reconnection\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Reconnection Attempts</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'uploads-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Uploads\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Number of Uploads</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'firmware-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Firmware\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Firmware</LinkTo>\\n        <LinkTo @route=\\\"temporal-gateway-graphs.temporal-gateway-graph\\\" @models={{array @gatewayId \\'temp-values\\'}} @query={{hash start_timestamp=null end_timestamp=null right_axis_field=\\\"Temperature\\\" left_axis_field=@left_axis_field}} class=\\\"dropdown-item\\\">Temperature</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/vibe/temporal-gateway-right-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isEditing}}<td data-title=\\\"Date\\\" class=\\\"noWrap\\\">{{moment-format @displacementValueObject.id \\'YYYY-MM-DD HH:mm:ss.SSS\\'}}</td><td data-title=\\\"Temp\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} id=\\\"df{{key}}\\\" oninput={{action (mut this.temperatureObjectValue) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{#each-in @displacementValueObject.values as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action (mut (get this.displacementValueObjectValues key)) value=\\\"target.value\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}<td class=\\\"crud-td\\\"><span {{action \\\"save\\\" on=\\\"click\\\"}} class=\\\"save\\\"><FaIcon @icon=\\\"check\\\" /></span><span {{action \\\"cancel\\\" on=\\\"click\\\"}} class=\\\"cancel\\\"><FaIcon @icon=\\\"times\\\" /></span></td>{{else}}<td data-title=\\\"Date\\\" class=\\\"noWrap\\\">{{moment-format @displacementValueObject.id \\'YYYY-MM-DD HH:mm:ss.SSS\\'}}</td><td data-title=\\\"Temperature\\\"><span {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Edit\\\" class=\\\"text has-tooltip-info\\\">{{this.temperatureObjectValue}}</span></td>{{#each-in @displacementValueObject.values as |key value|}}<td data-title={{key}}>{{#if (is-greater-than value @strokeLength)}}<span data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Value is above Stroke Length. Graphs will use previous value.\\\" class=\\\"text red-text bold has-tooltip-info\\\">&uArr;</span>{{/if}}<span {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Edit\\\" class=\\\"text has-tooltip-info\\\">{{#if @isFine}}{{format-number value 3}}{{else}}{{format-number value 2}}{{/if}}</span></td>{{/each-in}}<td class=\\\"crud-td\\\"><span {{action \\'toggleRowDeleteConfirmationDialog\\' @displacementValueObject.id on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"edit\\\" on=\\\"click\\\"}} data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Edit\\\" class=\\\"crud edit has-tooltip-info\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span><div class=\\\"delete-confirmation {{active-class (get-array-element this.isRowDeleteConfirmationDialog @displacementValueObject.id)}}\\\"><span class=\\\"crud-delete-message\\\"><span><small>Delete it?</small><small>Are you sure?</small></span></span><span {{action \\\"remove\\\" on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-confirm\\\">Yes</span><span {{action \\'toggleRowDeleteConfirmationDialog\\' @displacementValueObject.id on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-cancel\\\">No</span></div></td>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/wire-single-save-inputs-array-table-row-cells.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div><span class=\\\"separator\\\"></span></div><div id=\\\"capture\\\"><div style=\\\"position:relative;width:100%;height:420px;margin-top:30px;\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-main\\\"></canvas><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.2);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-main-selection\\\"></div></div><div style=\\\"position:relative;width:100%;height:70px;margin-top:4px;\\\" class=\\\"chartjs-overview-wrap\\\"><canvas style=\\\"width:100%;height:100%;\\\" class=\\\"chartjs-overview\\\"></canvas><div style=\\\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:crosshair;\\\" class=\\\"chartjs-brush-overlay\\\"></div><div style=\\\"position:absolute;top:0;height:100%;background:rgba(74,106,156,0.25);border-left:1px solid #4A6A9C;border-right:1px solid #4A6A9C;display:none;pointer-events:none;\\\" class=\\\"chartjs-brush-selection\\\"></div></div></div><div style=\\\"display: flex;font-size: small;color: black;border: solid;justify-content: space-evenly;border-width: 1px;border-radius: 10px;\\\" class=\\\"chart-interaction-hints\\\"><div title=\\\"Drag horizontally on the main chart to select a narrower time range\\\">- Drag on chart to select range</div><div title=\\\"Drag horizontally on the mini chart below to narrow the visible range\\\">- Drag on overview to select range</div><div title=\\\"Double-click to reset to full history\\\">- Double-click to reset</div><div title=\\\"Hover over a legend item to highlight that line\\\">- Hover legend to highlight</div><div title=\\\"Click on the chart to pin a crosshair at that point; click the same spot (or right-click anywhere on the chart or legend) to remove it\\\">- Click to pin / click same spot or right-click to remove</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/chartjs-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table class=\\\"row_details\\\"><tbody style=\\\"display:contents\\\"><tr><td colspan=\\\"2\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectName\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.Name}} oninput={{action (mut this.newInstrumentObject.name) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectName\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectProject\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@projectLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Project\\' valueSource=\\'newInstrumentObjectProject\\' onSelectionChange=(action \\'setProject\\' value=\\\"target.value\\\") inputFieldId=\\'project\\'}}</div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLocation\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.location}} oninput={{action (mut this.newInstrumentObject.location) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectLocation\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectCoordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"row no-gutters\\\"><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.east}} oninput={{action (mut this.newInstrumentObject.east) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectEast\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.north}} oninput={{action (mut this.newInstrumentObject.north) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNorth\\\" class=\\\"form-control\\\"></div><div class=\\\"col-4\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.depth}} oninput={{action (mut this.newInstrumentObject.depth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDepth\\\" class=\\\"form-control\\\"></div></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectAzimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.azimuth}} oninput={{action (mut this.newInstrumentObject.azimuth) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectAzimuth\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectDip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.dip}} oninput={{action (mut this.newInstrumentObject.dip) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectDip\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectLevel\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\">{{single-save-lookup isNew=true isEditable=true selectOptions=@levelLookupList style=\\\"font-size: 23px\\\" selectOptionsKyes=\\\"id,value\\\" field=\\'value\\' fieldText=\\'Level\\' valueSource=\\'newInstrumentObjectLevel\\' onSelectionChange=(action \\'setLevel\\' value=\\\"target.value\\\") inputFieldId=\\'level\\'}}</div></div></td></tr></tbody></table></td><td colspan=\\\"3\\\" style=\\\"vertical-align:top\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectBorehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.borehole}} oninput={{action (mut this.newInstrumentObject.borehole) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectBorehole\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectZeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.zeroTimestamp) value=\\\"target.value\\\"}} id=\\\"zeroTimestamp\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstallDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action (mut this.installDate) value=\\\"target.value\\\"}} id=\\\"installDate\\\"></div></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.installedBy}} oninput={{action (mut this.newInstrumentObject.installedBy) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectInstalledBy\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectPurpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" value={{this.newInstrumentObject.purpose}} oninput={{action (mut this.newInstrumentObject.purpose) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectPurpose\\\" class=\\\"form-control\\\"></div></div></td></tr><tr><td><label for=\\\"newInstrumentObjectNotes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><textarea type=\\\"text\\\" value={{this.newInstrumentObject.notes}} oninput={{action (mut this.newInstrumentObject.notes) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectNotes\\\" class=\\\"form-control\\\"></textarea></div></div></td></tr></tbody></table></td></tr><tr><td id=\\\"add-new\\\" colspan=\\\"3\\\" style=\\\"padding-bottom:5px;\\\" class=\\\"add-new-item\\\"><span {{action \\\"createInstrument\\\" on=\\\"click\\\"}} style=\\\"margin-top: 1 rem;\\\" class=\\\"add-new\\\"> Create</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.isVisibleCreateNewForm}}<table class=\\\"table table-striped responsive-table\\\"><tbody><tr class=\\\"active newRecord\\\"><td>New data value</td><td colspan={{this.instrumentAnchors.length}}></td><td class=\\\"add-new-item noWrap\\\"><span {{action \\\"cancelNew\\\" on=\\\"click\\\"}} class=\\\"cancel-new mr-1\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> Cancel</span><span {{action \\\"saveNew\\\" on=\\\"click\\\"}} class=\\\"save-new\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-check\\\"></i> Save</span></td></tr><tr class=\\\"details newRecordDetails\\\"><td>Date</td>{{#each this.instrumentAnchors as |anchor|}}<td>{{anchor}}</td>{{/each}}</tr><tr class=\\\"details newRecordDetails\\\"><td data-title=\\\"Date\\\" class=\\\"noWrap row_details form-inline input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><div class=\\\"datetime-picker-component\\\"><input type=\\\"datetime-local\\\" step=\\\"1\\\" oninput={{action \\\"setNewTimestampValue\\\"}} id=\\\"newTimestampValue\\\"></div></div></div></td><td data-title=\\\"Temperature\\\"><input type=\\\"text\\\" value={{this.temperatureObjectValue}} oninput={{action \\\"setTemperatureValue\\\"}} class=\\\"form-control inside-table-cell\\\"></td>{{#each-in this.displacementValueObjectValues as |key value|}}<td data-title={{key}}><input type=\\\"text\\\" value={{value}} id=\\\"df{{key}}\\\" oninput={{action \\\"setNewDisplacementValue\\\" key}} class=\\\"form-control inside-table-cell\\\"></td>{{/each-in}}</tr></tbody></table>{{/if}}', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/create-new-raw-data-value-form.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown @closeOnMenuClick={{true}} as |dd|>\\n  <dd.button>{{@selectedPort}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n    {{#each @ports as |port|}}\\n        <a href onclick={{action \\\"selectedProperty\\\" item dd.closeDropdown}}> {{port.channel}}</a>\\n    {{/each}}\\n  </dd.menu>\\n</BsDropdown>\\n\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/edit-instrument-port-drop-down.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsTab @customTabs={{true}} as |tab|>\\n  <BsNav @type=\\\"tabs\\\" as |nav|>\\n    {{#each this.ports as |port|}}\\n      <nav.item @active={{bs-eq tab.activeId @activePanel}}><a href=\\\"#\\\"port.channel role=\\\"tab\\\" onclick={{action tab.select port.channel}}>{{port.title}}</a></nav.item>\\n    {{/each}}    \\n  </BsNav>\\n  <div class=\\\"tab-content\\\">\\n    {{#each this.ports as |port|}}\\n      <tab.pane @id=port.channel @title=port.title>\\n        <Wire::EditInstrument />\\n      </tab.pane>\\n    {{/each}}\\n  </div>\\n</BsTab>', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/edit-instrument-tabs.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details\\\"><div class=\\\"row\\\"><div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"viewData\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"database\\\" /> View Data</span></div>{{#if @hasGraphs}}<div class=\\\"col-sm-auto inst-buttons\\\"><span {{action \\\"tGraph\\\" @instrument.id}} class=\\\"add-new\\\"><FaIcon @icon=\\\"chart-line\\\" /> Temporal Graph</span></div>{{/if}}</div></td></tr><tr class=\\\"details\\\"><td><h5>Properties:</h5></td></tr><tr class=\\\"details\\\"><td colspan=\\\"2\\\" style=\\\"vertical-align: top; margin-bottom: 1rem;\\\" class=\\\"td_details\\\"><table style=\\\"justify-content: left;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"channelsNum\\\" class=\\\"col-12 col-form-label\\\">Channels:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'channelsNum\\' isEditable=false}}</td></tr><tr><td><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">Name:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'name\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"project\\\" class=\\\"col-12 col-form-label\\\">Project:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'project\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td><td><label for=\\\"location\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'location\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"coordinates\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=@instrument east=@instrument.east north=@instrument.north depth=@instrument.depth stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"azimuth\\\" class=\\\"col-12 col-form-label\\\">Azimuth:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'azimuth\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"dip\\\" class=\\\"col-12 col-form-label\\\">Dip:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'dip\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"level\\\" class=\\\"col-12 col-form-label\\\">Level:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'level\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table><div class=\\\"row\\\"></div><hr colspan=\\\"6\\\"></td><td colspan=\\\"3\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"zeroTimestamp\\\" class=\\\"col-12 col-form-label\\\">Zero timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'zeroTimestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installDate\\\" class=\\\"col-12 col-form-label\\\">Install date:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=@instrument field=\\'installDate\\' format=\\'YYYY-MM-DD HH:mm:ss\\' showClear=true stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"installedBy\\\" class=\\\"col-12 col-form-label\\\">Installed by:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'installedBy\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"purpose\\\" class=\\\"col-12 col-form-label\\\">Purpose:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'purpose\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"notes\\\" class=\\\"col-12 col-form-label\\\">Notes:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'textarea\\' field=\\'notes\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"referenceAnchor\\\" class=\\\"col-12 col-form-label\\\">Reference Anchor:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'referenceAnchor\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr><tr><td><label for=\\\"active\\\" class=\\\"col-12 col-form-label\\\">Active:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=@instrument id=\\\"activeCheck\\\" field=\\'active\\'}}</td></tr><tr><td><label for=\\\"borehole\\\" class=\\\"col-12 col-form-label\\\">Borehole:</label></td><td class=\\\"input\\\">{{single-save-input object=@instrument inputType=\\'text\\' field=\\'borehole\\' stopEditField=(action \\'stopEditField\\') editField=(action \\'editField\\')}}</td></tr></tbody></table></td></tr><tr class=\\\"details\\\"><div style=\\\"font-size: x-small;margin:0px;margin-bottom: 1rem;\\\">Fields must match your calibration sheet exactly.</div></tr>{{#each this.vwProperties key=\\\"@index\\\" as |vwProperty|}}<tr class=\\\"details\\\"><td colspan=\\\"1\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"><label class=\\\"h5\\\">Port {{vwProperty.port}}:</label></td></tr><tr class=\\\"details\\\"><td colspan=\\\"1\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"vwvendor\\\" class=\\\"col-xs-12 col-form-label\\\">Instrument Vendor:</label></td><td class=\\\"input\\\"><select id=\\\"instrumentVendor\\\" onchange={{action \\'setVendor\\' vwProperty}} class=\\\"form-control\\\">{{#each @vwVendors as |selectOption|}}{{#if (eq vwProperty.vendor.id selectOption.id)}}<option selected value=\\\"{{selectOption.id}}\\\">{{selectOption.vendorName}}</option>{{else}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.vendorName}}</option>{{/if}}{{/each}}</select></td></tr></tbody></table></td><td colspan=\\\"2\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"vwmodel\\\" class=\\\"col-xs-12 col-form-label\\\">Instrument Model:</label></td><td class=\\\"input\\\"><select id=\\\"instrumentModel\\\" onchange={{action \\'setModel\\' vwProperty}} class=\\\"form-control\\\"><option value=\\\"\\\">Select</option>{{#each vwProperty.modelTypes as |selectOption|}}{{vwProperty.vwmodel.id}}{{#if (eq vwProperty.vwmodel.id selectOption.id)}}<option selected value=\\\"{{selectOption.id}}\\\">{{selectOption.modelName}}</option>{{else}}<option value=\\\"{{selectOption.id}}\\\">{{selectOption.modelName}}</option>{{/if}}{{/each}}</select></td></tr></tbody></table></td></tr><tr class=\\\"details space-below\\\"><td colspan=\\\"4\\\" style=\\\"vertical-align: top;\\\" class=\\\"td_details\\\">{{#if (eq vwProperty.vendor.vendorName \\'GEOKON\\')}}{{wire/geo-pt-edit port=vwProperty model=vwProperty.vwmodel}}{{/if}}{{#if (eq vwProperty.vendor.vendorName \\'Roctest\\')}}{{#if (eq this.model.modelName \\\"PWS\\\")}}{{wire/roc-pws-edit port=vwProperty model=vwProperty.vwmodel}}{{/if}}{{#if (eq this.model.modelName \\\"JM-S\\\")}}{{wire/roc-jms-edit port=vwProperty model=vwProperty.vwmodel}}{{/if}}{{/if}}{{#if (eq vwProperty.vendor.vendorName \\'RST\\')}}{{wire/rst-pt-edit port=vwProperty model=vwProperty.vwmodel}}{{/if}}</td></tr><tr><td colspan=\\\"6\\\" class=\\\"td_details\\\"><hr></td></tr>{{/each}}<tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"td_details\\\"></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=\\\"5\\\" class=\\\"add-new-item\\\"></td><td class=\\\"add-new-item\\\"><span {{action \\\"saveInstrument\\\" on=\\\"click\\\"}} class=\\\"add-new\\\"> Return</span></td></tr></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content: space-evenly;\\\"><div style=\\\"display:flex;flex-direction:row;align-items: baseline;\\\"><label for=\\\"serial\\\" style=\\\"font-weight: bold;\\\">Unit= </label><select id=\\\"{{concat \\'pressureUnitDropdown\\' @port.port}}\\\" onchange={{action \\\"handlePressureUnitChange\\\"}} class=\\\"form-control\\\"><option value=\\\"-\\\">-</option><option value=\\\"kPa\\\">kPa</option><option value=\\\"MPa\\\">MPa</option></select></div><div style=\\\"display:flex;flex-direction:column;align-items:center\\\"><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef1\\\" style=\\\"font-weight: bold;\\\">G({{this.gPressureUnit}})=</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef1\\'}}</td></div><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef3\\\" style=\\\"font-weight: bold;\\\">R<sub>0</sub> (Hz) =</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef3\\'}}</td></div></div><div style=\\\"display:flex;flex-direction:column;align-items:center\\\"><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef2\\\" style=\\\"font-weight: bold;\\\">K({{this.kPressureUnit}})=</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef2\\'}}</td></div><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef4\\\" style=\\\"font-weight: bold;\\\">T<sub>0</sub> (&deg;C) =</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef4\\'}}</td></div></div></div></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/geo-pt-edit.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-spatial-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-spatial-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/nvd3-spatial-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div id={{this.chartId}} class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"450\\\" class=\\\"nvd3-temporal-line-chart-svg\\\"></svg><div class=\\\"mb-1\\\"></div></div><div id={{this.chartId}} style=\\\"width:92%\\\" class=\\\"nvd3-chart-tooltip-container\\\"><svg width=\\\"1100\\\" height=\\\"70\\\" class=\\\"nvd3-temporal-line-chart-focus-svg\\\"></svg></div>', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/nvd3-temporal-line-chart.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    Port {{@port}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n    {{#each this.sortedProperties as |property|}}\\n        <LinkTo @route=\\\"raw-data\\\" @model={{@instrumentId}} @query={{hash calib=@calib linear=@linear depth=@depth port=property.port}} class=\\\"dropdown-item\\\">\\n            Port {{property.port}}\\n        </LinkTo>\\n    {{/each}}\\n  </dd.menu>\\n</BsDropdown>\\n{{!-- <BsDropdown as |dd|>\\n  <dd.button>\\n    Port {{@port}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n    {{#each this.instrument.vwproperty as |property|}}\\n        {{#link-to \\'raw-data\\' @instrumentId (query-params calib=@calib linear=@linear depth=@depth port=property.port) class=\\\"dropdown-item\\\"}}\\n            Port {{property.port}}\\n        {{/link-to}}\\n    {{/each}}\\n  </dd.menu>\\n</BsDropdown> --}}\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/raw-data-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"row\\\"><div class=\\\"col\\\"><a>Total Readings:</a><a>{{@displacementData.meta.pagination.total}}</a></div><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{#if this.isRawMode}}<div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><button type=\\\"button\\\" {{action \\\"openAdd\\\"  on=\\\"click\\\"}} style=\\\"font-size:small;padding:5px 12px;\\\" class=\\\"btn btn-primary\\\"><FaIcon @icon=\\\"plus\\\" /> New</button></div></div>{{/if}}<div style=\\\"margin-top:8px;\\\" class=\\\"row\\\"><div class=\\\"col\\\"><div style=\\\"overflow-x:auto;\\\" class=\\\"table-responsive\\\"><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th style=\\\"min-width:160px;white-space:nowrap;\\\">Date</th><th>Temp.(°C)</th>{{#each this.anchorDistances as |anchor|}}<th>{{anchor}}</th>{{/each}}{{#if this.isRawMode}}<th style=\\\"min-width:80px;white-space:nowrap;\\\"></th>{{/if}}</tr></thead><tbody>{{#each this.tableRows as |row|}}<tr class=\\\"{{row.isZeroTimestampClass}}\\\"><td style=\\\"white-space:nowrap;\\\">{{row.formattedDate}}</td><td>{{row.tempValue}}</td>{{#each row.cells as |cell|}}<td>{{#if cell.aboveStroke}}<span data-toggle=\\\"tooltip\\\" data-placement=\\\"right\\\" title=\\\"Value is above Stroke Length. Graphs will use previous value.\\\" class=\\\"text red-text bold has-tooltip-info\\\">&uArr;</span>{{/if}}{{#if cell.hasValue}}{{format-number cell.value 3}}{{/if}}</td>{{/each}}{{#if this.isRawMode}}<td style=\\\"min-width:80px;white-space:nowrap;\\\" class=\\\"crud-td\\\"><span {{action \\\"removeRow\\\" row.id  on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\\"openEdit\\\" row.id  on=\\\"click\\\"}} class=\\\"crud edit\\\"><FaIcon @icon=\\\"pencil-alt\\\" /></span></td>{{/if}}</tr>{{/each}}</tbody></table></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@displacementData.meta routeLink=\\'raw-data\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{data-row-modal isOpen=this.isModalOpen title=this.modalTitle fields=this.modalFields onSave=(action \\\"saveRow\\\") onCancel=(action \\\"closeModal\\\")}}', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content: space-evenly;\\\"><div style=\\\"display:flex;flex-direction:row;align-items: baseline;\\\"><label for=\\\"serial\\\" style=\\\"font-weight: bold;padding-right:16px\\\">Unit= </label><select id=\\\"{{concat \\'pressureUnitDropdown\\' @port.port}}\\\" onchange={{action \\\"handleUnitChange\\\"}} class=\\\"form-control\\\"><option value=\\\"-\\\">-</option><option value=\\\"kPa\\\">kPa</option><option value=\\\"MPa\\\">MPa</option><option value=\\\"mm\\\">mm</option><option value=\\\"in\\\">in</option></select></div><div style=\\\"display:flex;flex-direction:column;\\\"><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef1\\\" style=\\\"font-weight: bold;\\\">A ({{this.unitA}})=</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef1\\'}}</td></div><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef1\\\" style=\\\"font-weight: bold;\\\">B ({{this.unitB}})=</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef2\\'}}</td></div><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef3\\\" style=\\\"font-weight: bold;\\\">C  ({{this.unitC}})=</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef3\\'}}</td></div></div></div></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/roc-jms-edit.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content: space-evenly;\\\"><div style=\\\"display:flex;flex-direction:row;align-items: baseline;\\\"><label for=\\\"serial\\\" style=\\\"font-weight: bold;padding-right:16px\\\">Unit= </label><select id=\\\"{{concat \\'pressureUnitDropdown\\' @port.port}}\\\" onchange={{action \\\"handleUnitChange\\\"}} class=\\\"form-control\\\"><option value=\\\"-\\\">-</option><option value=\\\"kPa\\\">kPa</option><option value=\\\"MPa\\\">MPa</option><option value=\\\"mm\\\">mm</option><option value=\\\"in\\\">in</option></select></div><div style=\\\"display:flex;flex-direction:column;\\\"><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef1\\\" style=\\\"font-weight: bold;\\\">A=</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef1\\'}}</td></div><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef1\\\" style=\\\"font-weight: bold;\\\">B=</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef2\\'}}</td></div><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef3\\\" style=\\\"font-weight: bold;\\\">L<sub>0</sub> (Hz) =</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef3\\'}}</td></div></div><div style=\\\"display:flex;flex-direction:column;\\\"><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef2\\\" style=\\\"font-weight: bold;\\\">C<sub>T</sub>({{this.ctPressureTempUnit}})=</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef4\\'}}</td></div><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef4\\\" style=\\\"font-weight: bold;\\\">T<sub>0</sub> (&deg;C) =</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef5\\'}}</td></div></div></div></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/roc-pws-edit.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<table style=\\\"width: 100%\\\"><tbody><div style=\\\"display:flex;flex-direction:row;align-items:center;justify-content: space-evenly;\\\"><div style=\\\"display:flex;flex-direction:row;align-items: baseline;\\\"><label for=\\\"serial\\\" style=\\\"font-weight: bold;\\\">Unit= </label><select id=\\\"{{concat \\'pressureUnitDropdown\\' @port.port}}\\\" onchange={{action \\\"handlePressureUnitChange\\\"}} class=\\\"form-control\\\"><option value=\\\"-\\\">-</option><option value=\\\"kPa\\\">kPa</option><option value=\\\"MPa\\\">MPa</option></select></div><div style=\\\"display:flex;flex-direction:column;align-items:center\\\"><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef1\\\" style=\\\"font-weight: bold;\\\">CF({{this.cfPressureUnit}})=</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef1\\'}}</td></div><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef3\\\" style=\\\"font-weight: bold;\\\">L<sub>0</sub> (B) =</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef3\\'}}</td></div></div><div style=\\\"display:flex;flex-direction:column;align-items:center\\\"><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef2\\\" style=\\\"font-weight: bold;\\\">Tk({{this.tkPressureUnit}})=</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef2\\'}}</td></div><div style=\\\"display:flex;flex-direction:row;margin-left: 20px;\\\"><label for=\\\"calcCoef4\\\" style=\\\"font-weight: bold;\\\">T<sub>0</sub> (&deg;C) =</label><td style=\\\"min-width:100px;\\\" class=\\\"input\\\">{{single-save-input-numeric object=@port inputType=\\'text\\' field=\\'calcCoef4\\'}}</td></div></div></div></tbody></table>', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/rst-pt-edit.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>{{@selected}}<span class=\\\"caret\\\"></span></dd.button>\\n  <dd.menu as |ddm|>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Displacement</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'velocity-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Velocity</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'strain-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain</LinkTo>\\n        <LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array @instrumentId \\'strain-rate-values\\'}} @query={{hash start_timestamp=null end_timestamp=null}} class=\\\"dropdown-item\\\">Strain Rate</LinkTo>\\n  </dd.menu>\\n</BsDropdown>', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/spatial-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<BsDropdown as |dd|>\\n  <dd.button>\\n    Port {{@port}}\\n    <span class=\\\"caret\\\"></span>\\n  </dd.button>\\n  <dd.menu as |ddm|>\\n    {{#each this.instrument.vwproperty as |property|}}\\n        <LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array @instrumentId \\'displacement-values\\'}} @query={{hash start_timestamp=null end_timestamp=null port=property.port}} class=\\\"dropdown-item\\\">\\n            Port {{property.port}}\\n        </LinkTo>\\n    {{/each}}\\n  </dd.menu>\\n</BsDropdown>\\n', { moduleName: 'geotechnical-data-platform-new/templates/components/wire/temporal-chart-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Contact Us\\\"}}<div class=\\\"container-fluid\\\">{{bread-crumbs}}<div style=\\\"max-width:820px;margin:30px auto;padding:0 20px;\\\"><h2 style=\\\"margin-bottom:6px;\\\">Contact Us</h2><p style=\\\"color:#666;margin-bottom:30px;font-size:medium;\\\">Reach out for licensing, technical support, or general inquiries. Contact details below.</p><div style=\\\"padding:18px 22px;margin-bottom:20px;background:#f8f9fa;border-radius:4px;\\\"><h4 style=\\\"margin-top:0;margin-bottom:14px;color:#4A6A9C;\\\">YieldPoint powered by Epiroc</h4><div style=\\\"margin-bottom:8px;\\\"><strong style=\\\"display:inline-block;min-width:90px;\\\">Address:</strong><span>700 Progress Ave, Kingston, ON K7M 4W9</span></div><div style=\\\"margin-bottom:8px;\\\"><strong style=\\\"display:inline-block;min-width:90px;\\\">Phone:</strong><a href=\\\"tel:+16135314722\\\">+1 (613) 531-4722</a></div><div style=\\\"margin-bottom:8px;\\\"><strong style=\\\"display:inline-block;min-width:90px;\\\">Email:</strong><a href=\\\"mailto:sales.yp@epiroc.com\\\">sales.yp@epiroc.com</a></div><div><strong style=\\\"display:inline-block;min-width:90px;\\\">Website:</strong><a href=\\\"https://www.yieldpoint.com/en\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\">https://www.yieldpoint.com/en</a></div></div><div style=\\\"padding:18px 22px;margin-bottom:10px;background:#f8f9fa;border-radius:4px;\\\"><h5 style=\\\"margin-top:0;margin-bottom:12px;color:#c45a2a;\\\">Technical Issues & Inquiries</h5><div><strong style=\\\"display:inline-block;min-width:90px;\\\">Email:</strong><a href=\\\"mailto:customersupport.yp@epiroc.com\\\">customersupport.yp@epiroc.com</a></div></div><div style=\\\"border-radius:4px;margin-bottom:30px;background:#fff8e1;font-size:small;color:#5d4e00;\\\"><strong>When emailing:</strong><span> please be as detailed as possible about your issues, concerns, or questions. Include reproduction steps, screenshots, and any relevant instrument IDs and/or gateway IDs where applicable so we can respond effectively.</span></div><div style=\\\"padding:18px 22px;margin-bottom:20px;background:#f8f9fa;border-radius:4px;\\\"><h5 style=\\\"margin-top:0;margin-bottom:12px;color:#5d6b40;\\\">Sales & Licensing Inquiries</h5><div style=\\\"margin-bottom:8px;\\\"><strong style=\\\"display:inline-block;min-width:90px;\\\">Phone:</strong><a href=\\\"tel:+16135314722\\\">+1 (613) 531-4722</a></div><div><strong style=\\\"display:inline-block;min-width:90px;\\\">Email:</strong><a href=\\\"mailto:sales.yp@epiroc.com\\\">sales.yp@epiroc.com</a></div></div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/contact-us.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Create Alert Profile\\\"}}<div style=\\\"padding-bottom: 1rem;\\\" class=\\\"container-fluid\\\">{{bread-crumbs}}<div style=\\\"display:flex;flex-direction:row;\\\"><div class=\\\"profile-sidebar\\\">{{create-alert-profile-sidebar licenceIsValid=this.licenceIsValid alertProfileFormFinalData=this.alertProfileFormFinalData alertProfileFormChannelsData=this.alertProfileFormChannelsData alertProfileFormParametersData=this.alertProfileFormParametersData}}</div><div class=\\\"profile-body\\\">{{create-alert-profile-form licenceIsValid=this.licenceIsValid alertProfileFormFinalData=this.alertProfileFormFinalData alertProfileFormChannelsData=this.alertProfileFormChannelsData alertProfileFormParametersData=this.alertProfileFormParametersData dispUnits=this.model.dispUnits tempUnits=this.model.tempUnits timeUnits=this.model.timeUnits}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/create-alert-profile.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Create Gateway\\\"}}<div style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"container-fluid\\\">{{bread-crumbs}}<table style=\\\"width: 100%\\\">{{#if this.isVisibleError}}<tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details error\\\"><label for=\\\"error_message\\\" class=\\\"col-12 col-form-label\\\">There was an error creating the gateway.</label>{{#if this.duplicateError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">Either you do not have permission or the gateway ID already exists.</label>{{else if this.typeError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You must select a gateway type.</label>{{else if this.fieldError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">A required field was not entered. Bolded fields are required.</label>{{else if this.authError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">Either you do not have permission or the gateway ID already exists.</label>{{/if}}</td></tr>{{/if}}<tr class=\\\"details newRecordDetails\\\"><td class=\\\"td_details\\\"><table style=\\\"padding-top: 2rem; padding-left: 2rem; padding-bottom: 1rem;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newGatewayObjectId\\\" style=\\\"font-size: 23px;\\\" class=\\\"col-12 col-form-label bold\\\">Gateway ID:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" oninput={{action (mut this.id) value=\\\"target.value\\\"}} id=\\\"newGatewayObjectId\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td class=\\\"td_details\\\"><table style=\\\"padding-top: 2rem; padding-left: 2rem; padding-bottom: 1rem;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newGatewayObjectType\\\" style=\\\"font-size: 23px;\\\" class=\\\"col-12 col-form-label bold\\\">Gateway Type:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"newGatewayObjectType\\\" onchange={{action \\\"choseForm\\\" value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"\\\">Select a Gateway</option>{{#each @model.gatewayTypes as |gatewayTypeSelected|}}<option selected={{eq this.gatewayType.id gatewayTypeSelected}} value=\\\"{{gatewayTypeSelected.id}}\\\">{{gatewayTypeSelected.title}}</option>{{/each}}</select></div></div></td></tr></tbody></table></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=3 style=\\\"padding-left:2rem; padding-right:2rem; padding-bottom: 1rem; margin-bottom: 1rem;\\\" class=\\\"td_details\\\">{{#if (eq this.gatewayTypes \\\"1\\\")}}{{blucell/create-gateway typeID=this.gatewayTypes id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.gatewayTypes \\\"2\\\")}}{{blugate/create-gateway typeID=this.gatewayTypes id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.gatewayTypes \\\"3\\\")}}{{blu900gw/create-gateway typeID=this.gatewayTypes id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.gatewayTypes \\\"4\\\")}}{{blu900node/create-gateway typeID=this.gatewayTypes gatewayList=@model.gateways id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.gatewayTypes \\\"5\\\")}}{{oneforone/create-gateway typeID=this.gatewayTypes gatewayList=@model.gateways id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.gatewayTypes \\\"6\\\")}}{{vibe/create-gateway typeID=this.gatewayTypes gatewayList=@model.gateways id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}</td></tr></table></div>{{outlet}}', { moduleName: 'geotechnical-data-platform-new/templates/create-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Create Instrument\\\"}}<div style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"container-fluid\\\">{{bread-crumbs}}<table style=\\\"width: 100%\\\">{{#if this.isVisibleError}}<tr class=\\\"details\\\"><td colspan=\\\"6\\\" class=\\\"td_details error\\\"><label for=\\\"error_message\\\" class=\\\"col-12 col-form-label\\\">There was an error creating the instrument.</label>{{#if this.duplicateError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">Either you do not have permission or the instrument ID already exists.</label>{{else if this.typeError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You must select an instrument type.</label>{{else if this.fieldError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">A required field was not entered. Bolded fields are required.</label>{{else if this.authError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">Either you do not have permission or the instrument ID already exists.</label>{{/if}}</td></tr>{{/if}}<tr class=\\\"details newRecordDetails\\\"><td class=\\\"td_details\\\"><table style=\\\"padding-top: 2rem; padding-left: 2rem; padding-bottom: 1rem;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectId\\\" style=\\\"font-size: 23px;\\\" class=\\\"col-12 col-form-label bold\\\">Instrument ID:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" disabled={{eq this.instType \\\"20\\\"}} oninput={{action (mut this.id) value=\\\"target.value\\\"}} id=\\\"newInstrumentObjectId\\\" class=\\\"form-control\\\"></div></div></td></tr></tbody></table></td><td class=\\\"td_details\\\"><table style=\\\"padding-top: 2rem; padding-left: 2rem; padding-bottom: 1rem;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"newInstrumentObjectType\\\" style=\\\"font-size: 23px;\\\" class=\\\"col-12 col-form-label bold\\\">Instrument type:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"newInstrumentObjectType\\\" onchange={{action \\\"choseForm\\\" value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"\\\">Select an Instrument</option>{{#each this.getInstrumentTypes as |selectOption|}}<option selected={{eq selectOption.id this.instType}} value=\\\"{{selectOption.id}}\\\">{{selectOption.title}}</option>{{/each}}</select></div></div></td></tr></tbody></table></td></tr><tr class=\\\"details newRecordDetails\\\"><td colspan=3 style=\\\"padding-left:2rem; padding-right:2rem; padding-bottom: 1rem; margin-bottom: 1rem;\\\" class=\\\"td_details\\\">{{#if (eq this.instType \\\"1\\\")}}{{pack/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"2\\\")}}{{cable/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"3\\\")}}{{rebar/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"4\\\")}}{{pack/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"5\\\")}}{{dconv/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"6\\\")}}{{tilt/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"7\\\")}}{{slough/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"8\\\")}}{{thermo/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"9\\\")}}{{piezo/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"10\\\")}}{{hid/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"11\\\")}}{{pack/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"12\\\")}}{{wire/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList vwModels=this.model.vwModels vwVendors=this.model.vwVendors headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"13\\\")}}{{adict/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store vendors=this.model.vendors submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"15\\\")}}{{vibe/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"16\\\")}}{{micro/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"17\\\")}}{{rebarv2/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"19\\\")}}{{dppc/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}{{#if (eq this.instType \\\"20\\\")}}{{multiDExto/create-instrument levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList headAts=this.model.headAts typeID=this.instType id=this.id store=this.store submit=(action \\'submit\\') setError=(action \\'setError\\')}}{{/if}}</td></tr></table></div>{{outlet}}', { moduleName: 'geotechnical-data-platform-new/templates/create-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Create Lookup\\\"}}<div style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"container-fluid\\\">{{bread-crumbs}}<table style=\\\"width: 100%; text-align: left; border\\\"><tr class=\\\"details newRecordDetails\\\"><td style=\\\"width: 275px; text-align: left;\\\" class=\\\"td_details\\\"><label for=\\\"newLookupObjectName\\\" style=\\\"font-size: 23px;\\\" class=\\\"col-12 col-form-label bold\\\">Lookup Name:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select id=\\\"newLookupObjectName\\\" required onchange={{action (mut name) value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option value=\\\"\\\" disabled selected>Select a Lookup</option>{{#each @model.uniqueNames as |selectOption|}}<option value=\\\"{{selectOption.name}}\\\">{{selectOption.name}}</option>{{/each}}</select></div></div></td></tr><tr class=\\\"details newRecordDetails\\\"><td style=\\\"width: 275px; text-align: left;\\\" class=\\\"td_details\\\"><label for=\\\"newLookupObjectType\\\" style=\\\"font-size: 23px;\\\" class=\\\"col-12 col-form-label bold\\\">Lookup Data Type:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select required id=\\\"newLookupObjectType\\\" onchange={{action \\\"choseType\\\" value=\\\"target.value\\\"}} class=\\\"form-control\\\"><option selected disabled value=\\\"\\\">Select a Lookup Data Type</option><option value=\\\"string\\\">String</option><option value=\\\"integer\\\">Integer</option><option value=\\\"boolean\\\">Boolean</option></select></div></div></td></tr><tr class=\\\"details newRecordDetails\\\">{{#if (eq lookupType \\\"string\\\")}}<td style=\\\"width: 275px; text-align: left;\\\" class=\\\"td_details\\\"><label for=\\\"newLookupObjectValue\\\" style=\\\"font-size: 23px;\\\" class=\\\"col-12 col-form-label bold\\\">Lookup Value:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"text\\\" placeholder=\\\"Enter a string\\\" onchange={{action (mut value) value=\\\"target.value\\\"}} required class=\\\"form-control\\\"></div></div></td>{{/if}}{{#if (eq lookupType \\\"integer\\\")}}<td style=\\\"width: 275px; text-align: left;\\\" class=\\\"td_details\\\"><label for=\\\"newLookupObjectValue\\\" style=\\\"font-size: 23px;\\\" class=\\\"col-12 col-form-label bold\\\">Lookup Value:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><input type=\\\"number\\\" id=\\\"newLookupObjectValue\\\" placeholder=\\\"Enter an integer\\\" step=\\\"1\\\" onchange={{action (mut value) value=\\\"target.value\\\"}} required class=\\\"form-control\\\"></div></div></td>{{/if}}{{#if (eq lookupType \\\"boolean\\\")}}<td style=\\\"width: 275px; text-align: left;\\\" class=\\\"td_details\\\"><label for=\\\"newLookupObjectValue\\\" style=\\\"font-size: 23px;\\\" class=\\\"col-12 col-form-label bold\\\">Lookup Value:</label></td><td class=\\\"input\\\"><div class=\\\"form-group row\\\"><div class=\\\"col-12\\\"><select onchange={{action (mut value) value=\\\"target.value\\\"}} required class=\\\"form-control\\\"><option value=\\\"\\\" disabled>Select true or false</option><option value=\\\"true\\\">True</option><option value=\\\"false\\\">False</option></select></div></div></td>{{/if}}</tr><tr><td colspan=\\\"3\\\" style=\\\"text-align: right; padding-bottom:5px;\\\"><button type=\\\"submit\\\" {{action \\\"createLookup\\\" on=\\\"click\\\"}} style=\\\"margin-top: 1rem;\\\">Create</button></td></tr></table></div>{{outlet}}', { moduleName: 'geotechnical-data-platform-new/templates/create-lookup.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'geotechnical-data-platform-new/templates/dash-map.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Alert \\\" this.model.alert.id}}<div style=\\\"padding-bottom: 1rem;\\\" class=\\\"container-fluid\\\">{{bread-crumbs}}<div style=\\\"display:flex;flex-direction:row;\\\"><div class=\\\"profile-sidebar\\\">{{alert-profile-sidebar licenceIsValid=this.licenceIsValid alert=this.model.alert currentTab=this.currentTab}}</div>{{#if (is-equal this.currentTab \\\"HOME\\\")}}<div class=\\\"profile-body\\\">{{alert-profile-sidebar-home licenceIsValid=this.licenceIsValid alert=this.model.alert globalDatetimeFormat=this.model.globalDatetimeFormat}}</div>{{/if}}{{#if (is-equal this.currentTab \\\"ALERT_EVENTS\\\")}}<div class=\\\"profile-body\\\">{{alert-profile-sidebar-alert-events licenceIsValid=this.licenceIsValid alert=this.model.alert globalDatetimeFormat=this.model.globalDatetimeFormat}}</div>{{/if}}{{#if (is-equal this.currentTab \\\"ALERT_MORE\\\")}}<div class=\\\"profile-body\\\">{{alert-profile-sidebar-alert-more licenceIsValid=this.licenceIsValid alert=this.model.alert globalDatetimeFormat=this.model.globalDatetimeFormat tempUnits=this.model.tempUnits dispUnits=this.model.dispUnits timeUnits=this.model.timeUnits}}</div>{{/if}}</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/edit-alert-profile.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Gateway \\\" @model.gateway.id}}<div style=\\\"padding-bottom: 1rem;\\\" class=\\\"container-fluid\\\">{{bread-crumbs}}<table style=\\\"width: 100%; margin-bottom: 1rem;\\\" hidden id=\\\"instrumentEditError\\\"><tr class=\\\"details\\\"><td colspan=\\\"6\\\" style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"td_details error\\\"><label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You do not have permission to edit a gateway.</label></td></tr></table><table style=\\\"width: 100%;\\\"><tr class=\\\"details\\\"><td style=\\\"padding-top: 2rem; padding-left: 2rem; padding-bottom: 1rem;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"id\\\" style=\\\"font-size: 25px;\\\" class=\\\"col-12 col-form-label\\\">{{this.gatewayTypeLabel}} ID:</label></td><td class=\\\"input\\\">{{single-save-input-InstType object=@model.gateway inputType=\\'text\\' field=\\'id\\' isEditable=false}}</td></tr></tbody></table></td><td style=\\\"padding-top: 2rem; padding-bottom: 1rem;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"gatewayType\\\" style=\\\"font-size: 25px\\\" class=\\\"col-12 col-form-label\\\">{{this.gatewayTypeLabel}} Type:</label></td><td style=\\\"font-size:23px;\\\" class=\\\"input\\\">{{single-save-select selectOptions=@model.gatewayTypes selectOptionsKyes=\\\"id,title\\\" object=@model.gateway.gatewayType parentObject=@model.gateway field=\\'title\\' valueSource=\\'id\\' inputFieldId=\\'gatewayType\\' isEditable=true}}</td></tr></tbody></table></td><td class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"></table></td></tr><tr class=\\\"details\\\"><td colspan=3 style=\\\"padding-left:2rem; padding-right:2rem; padding-bottom: 2rem;\\\" class=\\\"td_details\\\">{{#if (eq @model.gateway.gatewayTypeID 1)}}{{blucell/edit-gateway gateway=@model.gateway gatewayList=@model.gateways gatewayReadingIntervals=@model.gatewayReadingIntervals gatewayUploadIntervals=@model.gatewayUploadIntervals hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.gateway.gatewayTypeID 2)}}{{blugate/edit-gateway gateway=@model.gateway gatewayList=@model.gateways gatewayReadingIntervals=@model.gatewayReadingIntervals gatewayUploadIntervals=@model.gatewayUploadIntervals hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.gateway.gatewayTypeID 3)}}{{blu900gw/edit-gateway gateway=@model.gateway gatewayList=@model.gateways gatewayReadingIntervals=@model.gatewayReadingIntervals gatewayUploadIntervals=@model.gatewayUploadIntervals gatewayMeshCycleIntervals=@model.gatewayMeshCycleIntervals gatewayTransmissionPowerIntervals=@model.gatewayRadioPowerLevelIntervals hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.gateway.gatewayTypeID 4)}}{{blu900node/edit-gateway gateway=@model.gateway parentGateway=this.parentGateway gatewayList=@model.gateways gatewayReadingIntervals=@model.gatewayReadingIntervals gatewayUploadIntervals=@model.gatewayUploadIntervals hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.gateway.gatewayTypeID 5)}}{{oneforone/edit-gateway gateway=@model.gateway parentGateway=this.parentGateway gatewayList=@model.gateways gatewayReadingIntervals=@model.gatewayReadingIntervals gatewayUploadIntervals=@model.gatewayUploadIntervals hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.gateway.gatewayTypeID 6)}}{{vibe/edit-gateway gateway=@model.gateway parentGateway=this.parentGateway gatewayList=@model.gateways gatewayReadingIntervals=@model.gatewayReadingIntervals gatewayUploadIntervals=@model.gatewayUploadIntervals hasGraphs=this.hasGraphs}}{{/if}}</td></tr></table></div>{{outlet}}', { moduleName: 'geotechnical-data-platform-new/templates/edit-gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Instrument \\\" @model.instrument.id}}<div style=\\\"padding-bottom: 1rem;\\\" class=\\\"container-fluid\\\">{{bread-crumbs}}<div style=\\\"width: 100%;border-radius: 20px;height: 80px;display: flex;align-items: center;justify-content: center;;\\\" hidden id=\\\"instrumentEditError\\\" class=\\\"error\\\"><div id=\\\"error_message_details\\\" style=\\\"font-size: larger;font-weight: bold;\\\">You do not have permission to edit an instrument!</div></div><div style=\\\"padding: 25px;\\\" class=\\\"details\\\"><div style=\\\"display:flex;flex-direction:row;justify-content:space-between;margin-left:75px; margin-right:75px\\\"><div style=\\\"display:flex;flex-direction:row;\\\"><div style=\\\"margin-right:10px;\\\"><label for=\\\"id\\\" style=\\\"font-size: x-large;font-weight: bold;\\\">Instrument ID:</label></div><div style=\\\"font-size:x-large;\\\">{{single-save-input-InstType object=@model.instrument inputType=\\'text\\' field=\\'id\\' isEditable=false}}</div></div><div style=\\\"display:flex;flex-direction:row;align-items:center\\\"><div for=\\\"instrumentType\\\" style=\\\"font-size: x-large;font-weight: bold;margin-right:10px;\\\">Instrument Type:</div><div style=\\\"font-size:x-large;\\\">{{single-save-select selectOptions=@model.instrumentTypes selectOptionsKyes=\\\"id,title\\\" object=@model.instrument.instrumentType parentObject=@model.instrument field=\\'title\\' valueSource=\\'id\\' inputFieldId=\\'instrumentType\\' modelNameOverride=\\'instrument-type\\' isRelational=true isEditable=true}}</div></div></div>{{#if (eq @model.instrument.instrumentTypeID 1)}}{{pack/edit-instrument globalDatetimeFormat=@model.globalDatetimeFormat ordering=this.ordering instrument=@model.instrument projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 2)}}{{cable/edit-instrument globalDatetimeFormat=@model.globalDatetimeFormat ordering=this.ordering instrument=@model.instrument projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 3)}}{{rebar/edit-instrument globalDatetimeFormat=@model.globalDatetimeFormat ordering=this.ordering instrument=@model.instrument projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 4)}}{{pack/edit-instrument globalDatetimeFormat=@model.globalDatetimeFormat ordering=this.ordering instrument=@model.instrument projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 5)}}{{dconv/edit-instrument globalDatetimeFormat=@model.globalDatetimeFormat ordering=this.ordering instrument=@model.instrument projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 6)}}{{tilt/edit-instrument instrument=@model.instrument projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 7)}}{{slough/edit-instrument instrument=@model.instrument anchors=@model.anchors projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 8)}}{{thermo/edit-instrument instrument=@model.instrument anchors=@model.anchors projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 9)}}{{piezo/edit-instrument instrument=@model.instrument anchors=@model.anchors projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 10)}}{{hid/edit-instrument instrument=@model.instrument projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 11)}}{{pack/edit-instrument globalDatetimeFormat=@model.globalDatetimeFormat ordering=this.ordering instrument=@model.instrument projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 12)}}{{wire/edit-instrument instrument=@model.instrument projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts vwModels=@model.vwModels vwVendors=@model.vwVendors hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 13)}}{{adict/edit-instrument globalDatetimeFormat=@model.globalDatetimeFormat ordering=this.ordering instrument=@model.instrument projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList vendors=@model.vendors headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 14)}}Analog{{/if}}{{#if (eq @model.instrument.instrumentTypeID 15)}}{{vibe/edit-instrument globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 16)}}{{micro/edit-instrument globalDatetimeFormat=@model.globalDatetimeFormat ordering=this.ordering instrument=@model.instrument projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 17)}}{{rebarv2/edit-instrument globalDatetimeFormat=@model.globalDatetimeFormat ordering=this.ordering instrument=@model.instrument projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 19)}}{{dppc/edit-instrument instrument=@model.instrument anchors=@model.anchors projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts hasGraphs=this.hasGraphs}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 20)}}{{multiDExto/edit-instrument instrument=@model.instrument instrumentList=@model.instruments projectLookupList=@model.projectLookupList levelLookupList=@model.levelLookupList headAts=@model.headAts}}{{/if}}</div></div>{{outlet}}', { moduleName: 'geotechnical-data-platform-new/templates/edit-instrument.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Alert \\\" @model.alert.id}}<div class=\\\"container-fluid\\\">{{bread-crumbs}}<table style=\\\"width: 100%;\\\">{{#if isVisibleError}}<tr class=\\\"details\\\"><td colspan=\\\"6\\\" style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"td_details error\\\"><label for=\\\"error_message\\\" class=\\\"col-12 col-form-label\\\">There was an error editting the alert.</label>{{#if emptyBoldError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">A required field was not entered. Bolded fields are required.</label>{{else if noActChError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">Select at least one active channel.</label>{{else if nonNumericValueError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">Ensure that your value entry only contains a numeric values (0-9) or a decimal point (\\\".\\\")</label>{{else if wLError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">Enter a window length larger than 1 if method is not immediate.</label>{{else if wLNegError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">Enter a window length larger than or equal to 1 if method is not immediate.</label>{{else if targetError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">Enter a target.</label>{{else if phoneNumError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">Enter a valid phone number (numeric values only).</label>To see available carriers, click on the \\\"Target (Phone #):\\\" link. {{else if authError}}<label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You do not have permission to make changes to an alert.</label>{{/if}}</td></tr>{{/if}}<tr class=\\\"details\\\"><td style=\\\"padding-top: 2rem; padding-left: 2rem; padding-bottom: 1rem;\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"id\\\" style=\\\"font-size: 25px;\\\" class=\\\"col-12 col-form-label\\\">Instrument ID:</label></td><td class=\\\"input\\\"><LinkTo @route=\\\"edit-instrument\\\" @model={{@model.alert.instrument.id}} style=\\\"font-size: 23px\\\"> {{@model.alert.instrument.id}} </LinkTo></td></tr></tbody></table></td><td class=\\\"td_details\\\"><table style=\\\"padding-top: 2rem; padding-left: 2rem; padding-bottom: 1rem;\\\" class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"instrumentType\\\" style=\\\"font-size: 25px\\\" class=\\\"col-12 col-form-label\\\">Instrument type:</label></td><td class=\\\"input\\\">{{single-save-input-InstType object=@model.alert.instrument.instrumentType inputType=\\'text\\' field=\\'title\\' isEditable=false}}</td></tr></tbody></table></td><td class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"></table></td></tr><tr class=\\\"details\\\"><td colspan=3 style=\\\"padding-left:2rem; padding-right:1rem;\\\" class=\\\"td_details\\\"></td></tr></table></div>{{outlet}}', { moduleName: 'geotechnical-data-platform-new/templates/edit-lookups.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Forgot Password\\\"}}<div style=\\\"justify-content: center;display: flex;\\\"><div id=\\\"auth_card\\\"><div style=\\\"font-size: 30px;color: white;justify-self: center;margin-bottom: 20px;\\\">Forgot Your Password?</div><div style=\\\"margin: 10px;\\\">{{#if this.isSentResetRequest}}<div style=\\\"margin-bottom: 50px;color: white;font-size: medium;\\\">Email has been sent if it exists!</div>{{else}}<div style=\\\"margin-bottom: 20px;color: white;width:100%;display:flex;flex-direction:row;align-items:center;font-size: small;\\\">Don\\'t worry, we will send you instructions to your email.</div><input id=\\\"id_register_email\\\" placeholder=\\\"email\\\" autocomplete=\\\"email\\\" value={{this.email}} onchange={{action \\\"updateInfo\\\" \\\"email\\\"}}><div style=\\\"display: flex;flex-direction: column;align-items: center;margin: 10px;\\\"><button id=\\\"id_button\\\" {{action \\\"resetPassword\\\" on=\\\"click\\\"}}>Send</button></div>{{/if}}</div>{{#if this.loading}}<div style=\\\"width: auto; padding-top:5px;\\\" class=\\\"center pulse_loader\\\"></div>{{/if}}{{#if this.errorMessage}}<div style=\\\"overflow: scroll;display: flex;width: 100%;max-height: 100px;\\\">{{this.errorMessage}}</div>{{/if}}</div></div>{{outlet}}', { moduleName: 'geotechnical-data-platform-new/templates/forgot-password.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Frequency Events\\\"}}<div class=\\\"container-fluid\\\">{{bread-crumbs}}{{#if this.isShowConfig.isShowPopupNotification}}<div id=\\\"notificationPopup\\\" style=\\\"max-height:700px; display:flex; flex-direction:column; position:fixed; top:50%; left:50%; transform:translate(-50%, -50%); z-index:999; width:1000px;background: white;border-width: 1px;border-color: gray;border-style: solid;border-radius: 10px;\\\"><div style=\\\"display: flex; flex-direction: row;justify-content: space-between;width: 100%; \\\"><h5 style=\\\"margin-left: 10px;\\\"></h5><label id=\\\"closeXButton\\\" style=\\\"margin-right: 10px;margin-bottom: 0;font-size: medium;cursor: pointer;color: grey;\\\" {{action \\\"closeNotificationPopup\\\" on=\\\"click\\\"}}>X</label></div><div id=\\\"notificationPopupContentBody\\\" style=\\\"overflow-x: scroll;overflow-y: scroll;padding-bottom: 10px; padding-left: 20px; display: flex; flex-direction: column;justify-content: space-between;width: 100%; padding-right: 20px;\\\"></div><div id=\\\"confirmationCheckBoxSection\\\" style=\\\"display:none;align-items: center; justify-content: center;flex-direction: row;width:100%\\\"><td class=\\\"input\\\"><input id=\\\"confirmationCheckBox\\\" type=\\\"checkbox\\\" class=\\\"form-control\\\"></td><label style=\\\"font-weight: bold;font-size: small;margin:0px\\\">I confirm the data posted above is correct.</label></div><div id=\\\"buttonsPanel\\\" style=\\\"padding:15px;justify-content: center;flex-direction: row;display: flex;width:100%\\\"><button id=\\\"notificationReadyButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Ready</button><button id=\\\"notificationRefreshButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Refresh</button><button id=\\\"notificationOkButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Ok</button><button id=\\\"notificationAbortButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">ABORT</button><button id=\\\"notificationYesButton\\\" type=\\\"button\\\" style=\\\"display:none; margin-left:10px;margin-right:10px;min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Yes</button><button id=\\\"notificationNoButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">No</button><button id=\\\"notificationSaveButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Save</button><button id=\\\"notificationPrintButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Print</button><button id=\\\"notificationExportButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Export</button><button id=\\\"notificationCancelButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Cancel</button></div></div>{{/if}}<div style=\\\"display:flex;flex-direction:row;align-items: center;\\\"><div><h4>Frequency Events</h4></div>{{#if this.showLoading}}<div style=\\\"width: auto;margin-bottom: 8px;\\\" class=\\\"pulse_loader\\\"></div>{{/if}}</div><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\"><h5>{{if this.displayData this.instrumentType}} {{if this.displayData this.subModel}}-{{if this.displayData this.instrumentId}}</h5><h6>{{if this.displayData this.details}}</h6></div></div><div class=\\\"row\\\"><div class=\\\"col-md-6 d-flex flex-column justify-content-center\\\"><div class=\\\"row\\\"><div class=\\\"col\\\"><label>Rows</label>{{raw-frequency-events-drop-down instrumentId=this.instrument.id pageSize=this.bluvibeV2Profiles.meta.pagination.page_size}}</div></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{advanced-filter filterType=\\\"frequency-events\\\" globalDatetimeFormat=@model.globalDatetimeFormat displayFrequencyEventsDropDown=false displayDateTimeFormat=true displayYAxistUnit=false requireXMaxMin=false requireYLeftMaxMin=false requireYRightMaxMin=false instrumentId=@model.instrument.id instrumentType=@model.instrument.instrumentType.title}}</div></div><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\"><div><label style=\\\"margin-right: 5px;\\\">Visible:</label><label style=\\\"margin-right: 5px;\\\">{{this.getVisibleReadings}}</label><label style=\\\"margin-right: 5px;\\\">Total:</label><label style=\\\"margin-right: 5px;\\\">{{this.getTotalReadings}}</label></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=this.bluvibeV2Profiles.meta routeLink=\\'frequency-events\\' class=\\\"text-md-right\\\"}}</div></div></div><table class=\\\"table table-striped responsive-table\\\"><thead><tr><th>ID</th><th>Date</th><th>Actions</th></tr></thead><tbody>{{#each this.getbluvibev2ProfileList as |tableRow|}}<tr><td><div>{{tableRow.id}}</div></td><td>{{make-timestamp-global-format-aware-bluvibe tableRow.timestamp this.globalDatetimeFormat.value}}</td><td><div style=\\\"display:flex;flex-direction:row;align-items: center;justify-content: space-evenly;\\\"><div style=\\\"color:blue;cursor: pointer;\\\" onclick={{action \\'actionsHotKey\\' \\\"overview\\\" tableRow}}>Overview</div><div style=\\\"color:blue;cursor: pointer;\\\" onclick={{action \\'actionsHotKey\\' \\\"data\\\" tableRow}}>Data</div><div style=\\\"color:blue;cursor: pointer;border-radius:{{if (frequency-events-validate-for-red-warning tableRow) \\'100px;\\' \\';\\'}};border:{{if (frequency-events-validate-for-red-warning tableRow) \\'0.5px solid red;\\' \\';\\'}};\\\" onclick={{action \\'actionsHotKey\\' \\\"analytics\\\" tableRow}}>Analytics</div><div style=\\\"color:orange;cursor: pointer;\\\" onclick={{action \\'actionsHotKey\\' \\\"edit\\\" tableRow}}>Edit</div><div style=\\\"color:red;cursor: pointer;\\\" onclick={{action \\'actionsHotKey\\' \\\"delete\\\" tableRow}}>Delete</div></div></td></tr>{{/each}}</tbody></table><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=this.bluvibeV2Profiles.meta routeLink=\\'frequency-events\\' class=\\\"text-md-right\\\"}}</div></div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/frequency-events.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Frequency Event\\\"}}<div class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"row\\\"></div>{{#if this.isShowConfig.isShowPopupNotification}}<div id=\\\"notificationPopup\\\" style=\\\"max-height:700px; display:flex; flex-direction:column; position:fixed; top:50%; left:50%; transform:translate(-50%, -50%); z-index:999; width:1000px;background: white;border-width: 1px;border-color: gray;border-style: solid;border-radius: 10px;\\\"><div style=\\\"display: flex; flex-direction: row;justify-content: space-between;width: 100%; \\\"><h5 style=\\\"margin-left: 10px;\\\"></h5><label id=\\\"closeXButton\\\" style=\\\"margin-right: 10px;margin-bottom: 0;font-size: medium;cursor: pointer;color: grey;\\\" {{action \\\"closeNotificationPopup\\\" on=\\\"click\\\"}}>X</label></div><div id=\\\"notificationPopupContentBody\\\" style=\\\"overflow-x: scroll;overflow-y: scroll;padding-bottom: 10px; padding-left: 20px; display: flex; flex-direction: column;justify-content: space-between;width: 100%; padding-right: 20px;\\\"></div><div id=\\\"confirmationCheckBoxSection\\\" style=\\\"display:none;align-items: center; justify-content: center;flex-direction: row;width:100%\\\"><td class=\\\"input\\\"><input id=\\\"confirmationCheckBox\\\" type=\\\"checkbox\\\" class=\\\"form-control\\\"></td><label style=\\\"font-weight: bold;font-size: small;margin:0px\\\">I confirm the data posted above is correct.</label></div><div id=\\\"buttonsPanel\\\" style=\\\"padding:15px;justify-content: center;flex-direction: row;display: flex;width:100%\\\"><button id=\\\"notificationReadyButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Ready</button><button id=\\\"notificationRefreshButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Refresh</button><button id=\\\"notificationOkButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Ok</button><button id=\\\"notificationAbortButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">ABORT</button><button id=\\\"notificationYesButton\\\" type=\\\"button\\\" style=\\\"display:none; margin-left:10px;margin-right:10px;min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Yes</button><button id=\\\"notificationNoButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">No</button><button id=\\\"notificationSaveButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Save</button><button id=\\\"notificationPrintButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Print</button><button id=\\\"notificationExportButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Export</button><button id=\\\"notificationCancelButton\\\" type=\\\"button\\\" style=\\\"display:none; min-width: 50px;font-size:small;padding: 5px;\\\" class=\\\"btn btn-primary\\\">Cancel</button></div></div>{{/if}}<div style=\\\"display:flex\\\"><h3>Frequency Event {{this.getProfileID}}</h3></div><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\"><h5>{{if this.displayData this.instrumentType}} {{if this.displayData this.subModel}}-{{if this.displayData this.instrumentId}}</h5><h6>{{if this.displayData this.details}}</h6></div></div><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\">{{component \\\"frequency-event-tabs\\\" showLoading=this.showLoading integrationMethod=this.integrationMethod instrument=this.instrument instrumentType=this.instrumentType selectedFreqEventTabKey=this.selectedFreqEventTabKey selectedFreqEventSubTabKey=this.selectedFreqEventSubTabKey selectedFreqEventSubSubTabKey=this.selectedFreqEventSubSubTabKey bluvibeV2ModelProfiles=this.bluvibeV2ModelProfiles bluvibeV2ModelData=this.bluvibeV2ModelData}}</div></div><div style=\\\"display:{{if this.showLoading \\'flex;\\' \\'none;\\'}};width: 125px;height: 100px;justify-self: center;margin-top: 50px;\\\" class=\\\"pulse_loader\\\"></div><div style=\\\"margin:25px;display:{{if this.showLoading \\'none;\\' \\'block;\\'}};\\\">{{vibe/echarts-frequency-event showLoading=this.showLoading advancedYAxisUnit=this.advancedYAxisUnit profileId=this.profileId integrationMethod=this.integrationMethod selectedFreqEventSubSubTabKey=this.selectedFreqEventSubSubTabKey selectedFreqEventSubTabKey=this.selectedFreqEventSubTabKey selectedFreqEventTabKey=this.selectedFreqEventTabKey instrument=this.instrument instrumentType=this.instrumentType bluvibeV2ModelProfiles=this.bluvibeV2ModelProfiles bluvibeV2ModelPitchRollData=this.bluvibeV2ModelPitchRollData bluvibeV2ModelData=this.bluvibeV2ModelData globalDatetimeFormat=this.globalDatetimeFormat}}</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/frequency-events/frequency-event.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"spinner-yp-logo v_centered_abs_pos h_centered_abs_pos mt-2\\\"><img src=\\\"/assets/images/logo-no-text.png\\\" class=\\\"d-block mx-auto\\\"></div>', { moduleName: 'geotechnical-data-platform-new/templates/frequency-events/frequency-graph-loading.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"mt-1\\\"></div><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\"><h5>{{if this.displayData this.instrumentType}} {{if this.displayData this.name}} {{if this.displayData this.instrumentId}}</h5><h6>{{if this.displayData this.details}}</h6></div></div><div class=\\\"row\\\"><div class=\\\"col-sm-7\\\">{{#unless this.bluVibe}}<div class=\\\"form-group pull-left mr-1\\\"><label>Select instrument</label>{{searchable-select content=this.instruments selected=this.initialInstrumentSelection id=\\\"instrumentSelect\\\" sortBy=\\\"title\\\" prompt=\\\"Instrument ID\\\" searchPrompt=\\\"Filter\\\" isClearable=false on-change=(action \\\"onUpdateTransitionTo\\\")}}</div>{{/unless}}<div class=\\\"form-group pull-left mr-1\\\"><label>Select Chart</label><div class=\\\"dropdown\\\">{{vibe/frequency-chart-dropdown selected=this.chart_type instrumentType=this.instrumentTypeId instrumentId=this.instrumentId}}</div></div></div>{{#if this.bluVibe}}<div class=\\\"col\\\"><span></span><td style=\\\"padding-right: 2rem;visibility: hidden;\\\"><div class=\\\"col-sm-auto mr-1\\\"><label>Number of Display Records</label><div class=\\\"dropdown\\\">{{frequency-display-records-dropdown instrumentId=this.instrumentId modelName=this.modelName display_records=this.display_records}}</div></div></td></div>{{/if}}</div>{{#if this.instrumentId}}{{advanced-filter filterType=\\\"frequency\\\" displayDateTimeFormat=false displayYAxistUnit=false requireXMaxMin=true requireYLeftMaxMin=true requireYRightMaxMin=false instrumentId=this.instrumentId chartType=this.chart_type instrumentType=this.instrumentType}}{{/if}}{{#unless this.bluVibe}}{{#if this.instrumentId}}<div class=\\\"row\\\"><div class=\\\"col-md-5\\\"><div class=\\\"form-group d-inline-block\\\"><label {{action \\'toggleLocalProperty\\' \\'adjust_scales\\' on=\\\"click\\\"}} class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"adjust_scales\\\" checked=this.adjust_scales class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Adjust Scales</span></label></div></div></div>{{/if}}{{/unless}}{{#if this.adjust_scales}}<div class=\\\"row\\\"><div class=\\\"col-md-5\\\"><div class=\\\"form-group d-inline-block\\\"><div class=\\\"row no-gutters\\\"><div style=\\\"padding-left:15px\\\" class=\\\"col-md-12\\\"><div class=\\\"row no-gutters\\\"><label>Primary Y-Axis</label><hr style=\\\"height: 2px; background: black;\\\"></div><div class=\\\"row no-gutters\\\"><label {{action \\'toggleLocalProperty\\' \\'auto_scale\\' on=\\\"click\\\"}} class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"auto_scale\\\" checked=this.auto_scale class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Auto Scale</span></label></div></div><div class=\\\"row no-gutters\\\"><div class=\\\"col-md-4\\\"><label for=\\\"yMaxValue\\\" class=\\\"col-12 col-form-label bold\\\">Y-Max:</label></div><div class=\\\"col-md-4\\\"><input type=\\\"text\\\" value={{this.y_max}} oninput={{action (mut y_max) value=\\\"target.value\\\"}} id=\\\"yScaleMax\\\" disabled={{this.auto_scale}} class=\\\"form-control\\\"></div></div><div class=\\\"row no-gutters\\\"><div class=\\\"col-md-4\\\"><label for=\\\"yMinValue\\\" class=\\\"col-12 col-form-label bold\\\">Y-Min:</label></div><div class=\\\"col-md-4\\\"><input type=\\\"text\\\" value={{this.y_min}} oninput={{action (mut y_min) value=\\\"target.value\\\"}} id=\\\"yScaleMin\\\" disabled={{this.auto_scale}} class=\\\"form-control\\\"></div></div></div></div></div>{{#if this.instrumentId}}{{#if (is-equal this.chartDataValueName \\'Displacement\\')}}<div class=\\\"col-lg-5 pull-right\\\"><div class=\\\"form-group d-inline-block pull-right\\\">{{#if this.isWire}}<div class=\\\"row no-gutters\\\"><div class=\\\"col-md-7\\\"><label></label></div><div class=\\\"col-md-5\\\"><div class=\\\"form-group mb-0 mr-05\\\"><label {{action \\'toggleProperty\\' \\'raw\\' on=\\\"click\\\"}} class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"raw\\\" checked=this.rawData class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Raw data</span></label></div></div></div>{{/if}}<div class=\\\"row no-gutters\\\">{{#unless this.isWire}}<div class=\\\"col-md-7\\\"><label></label></div>{{/unless}}<div style=\\\"width:100%\\\" class=\\\"col-md-5\\\"><div class=\\\"form-group mb-0 mr-05\\\"><label {{action \\'toggleProperty\\' \\'zeroed\\' on=\\\"click\\\"}} class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"zeroed\\\" checked=this.timeRef class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Time reference</span></label></div></div></div><div class=\\\"row no-gutters\\\">{{#if this.isWire}}<div style=\\\"width:100%\\\" class=\\\"col-md-5\\\"><div class=\\\"form-group mb-0 mr-05\\\">{{#if (is-equal this.refHeadPosition \\'hac\\')}}<label class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked=true disabled=\\'disabled\\' class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Flip signs</span></label>{{else}}<label {{action \\'toggleProperty\\' \\'flip_signs\\' on=\\\"click\\\"}} class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked=this.flipSigns class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Flip signs</span></label>{{/if}}</div></div>{{else}}<div style=\\\"width:100%\\\" class=\\\"col-md-5\\\"><div class=\\\"form-group mb-0 mr-05\\\">{{#if (is-equal this.refHeadPosition \\'hac\\')}}<label class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked=true disabled=\\'disabled\\' class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Flip signs</span></label>{{else}}<label {{action \\'toggleProperty\\' \\'flip_signs\\' on=\\\"click\\\"}} class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked=this.flipSigns class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Flip signs</span></label>{{/if}}</div></div>{{/if}}</div><div class=\\\"row no-gutters\\\">{{#unless this.isWire}}<div style=\\\"width:100%\\\" class=\\\"col-md-7\\\"><label>Select ref. anchor</label></div>{{/unless}}{{#if this.isWire}}<div role=\\\"toolbar\\\" aria-label=\\\"Toolbar with button groups\\\" class=\\\"btn-toolbar mr-05\\\"><div role=\\\"group\\\" aria-label=\\\"First group\\\" class=\\\"btn-group btn-group-sm\\\"><input type=\\\"button\\\" tagName=\\\"button\\\" value=\\\"Temps\\\" {{action \\\"selectTemps\\\" on=\\\"click\\\"}} class=\\\"btn btn-outline-primary\\\"><input type=\\\"button\\\" tagName=\\\"button\\\" value=\\\"Values\\\" {{action \\\"selectReadings\\\" on=\\\"click\\\"}} class=\\\"btn btn-outline-primary\\\"></div></div>{{/if}}{{#unless this.isWire}}<div role=\\\"toolbar\\\" aria-label=\\\"Toolbar with button groups\\\" class=\\\"btn-toolbar mr-05\\\"><div role=\\\"group\\\" aria-label=\\\"First group\\\" class=\\\"btn-group btn-group-sm\\\">{{#each this.instrumentAnchorsSorted as |anchor|}}<LinkTo @route=\\\"frequency-graphs.frequency-graph\\\" @models={{array this.instrumentId this.modelName}} @query={{hash ref_head_position=\\\"\\\" ref_anchor=anchor.number}} class=\\\"btn btn-outline-primary nowrap\\\">- {{anchor.number}} -</LinkTo>{{/each}}</div></div>{{/unless}}</div></div></div>{{/if}}{{/if}}</div>{{/if}}{{outlet}}</div>', { moduleName: 'geotechnical-data-platform-new/templates/frequency-graphs.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"spinner-yp-logo v_centered_abs_pos h_centered_abs_pos mt-2\\\"><img src=\\\"/assets/images/logo-no-text.png\\\" class=\\\"d-block mx-auto\\\"></div>', { moduleName: 'geotechnical-data-platform-new/templates/frequency-graphs/frequency-graph-loading.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{outlet}}<div class=\\\"mb-1\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\">{{vibe/chartjs-frequency-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData zoomTempData=@model.zoomTempData raw=@raw instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=@flip_signs autoAxis=@auto_scale axis_min=@y_min axis_max=@y_max updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}</div></div></div><div class=\\\"mb-1\\\"></div>', { moduleName: 'geotechnical-data-platform-new/templates/frequency-graphs/frequency-graph.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Gateway\\\"}}<div class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"row\\\"><div class=\\\"col\\\">{{filter-text-input-gateway searchValue=this.search pageValue=this.page}}</div><div class=\\\"col\\\"><div class=\\\"form-group\\\"><label>Rows</label><div class=\\\"dropdown\\\">{{page-item-count page_size=this.page_size page_type=\\'gateway\\' model=this.model.gateway}}</div></div></div><div style=\\\"margin-top:2rem;\\\" class=\\\"col\\\">{{getTotalsGateway model=this.model.gatewayStats}}</div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=this.model.gateway.meta routeLink=\\'gateway\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{gateway-list gateway=this.model.gateway sortBy=(action \\'sortBy\\') ordering=this.ordering showExpandColumn=true refreshRoute=(action \\'refreshRoute\\')}}</div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=this.model.gateway.meta routeLink=\\'gateway\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/gateway.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Have an Issue?\\\"}}<div class=\\\"container-fluid\\\">{{bread-crumbs}}{{have-an-issue}}</div>', { moduleName: 'geotechnical-data-platform-new/templates/have-an-issue.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Index\\\"}}<div class=\\\"container-fluid\\\"><div style=\\\"background: #e9ecef; border-radius: 0.25rem; padding-top:0.65rem; padding-right:1rem; padding-bottom:0.65rem; padding-left:1rem; \\\"><a style=\\\"font-size: 1.2rem; font-family: Frutiger Arabic 45 Light\\\" href=\\\"/instruments\\\" title=\\\"List of instruments\\\">Instruments</a></div><div style=\\\"margin-top:1rem;\\\"><table style=\\\"margin-bottom: 1rem; width: 25rem;\\\"><tr><div style=\\\"margin-left: 3px;\\\">{{filter-text-input searchValue=this.search pageValue=this.page target=this.searchTgt targetName=\\\"inst\\\"}}</div></tr><tr><div style=\\\"margin-left: 3px;\\\"><tr><div style=\\\"vertical-align:middle;\\\">{{getTotalsInstruments model=this.model.instrumentStats}}</div></tr></div></tr><tr hidden><td><div style=\\\"margin-top: 10px;\\\">{{instruments-list instruments=this.model.instruments sortBy=(action \\'sortByI\\') ordering=this.ordering levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList}}</div></td></tr></table></div><div style=\\\"background: #e9ecef; border-radius: 0.25rem; padding-top:0.65rem; padding-right:1rem; padding-bottom:0.65rem; padding-left:1rem; \\\"><a style=\\\"font-size: 1.2rem; font-family: Frutiger Arabic 45 Light\\\" href=\\\"/gateway\\\" title=\\\"Gateway Health\\\">Health</a></div><div style=\\\"margin-top:1rem;\\\"><table style=\\\"margin-bottom: 1rem; width: 25rem;\\\"><tr><div style=\\\"margin-left: 3px;\\\">{{filter-text-input-gateway searchValue=this.search pageValue=this.page target=this.searchTgt targetName=\\\"gateway\\\"}}</div></tr><tr><div style=\\\"margin-left: 3px;\\\"><tr><div style=\\\"vertical-align:middle;\\\">{{getTotalsGateway model=this.model.gatewayStats}}</div></tr></div></tr><tr hidden><td><div style=\\\"margin-top: 10px;\\\">{{gateway-list gateway=this.model.gateway sortBy=(action \\'sortByG\\') ordering=this.ordering showExpandColumn=true}}</div></td></tr></table></div></div>{{outlet}}', { moduleName: 'geotechnical-data-platform-new/templates/index.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Instruments\\\"}}<div class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"row\\\"><div class=\\\"col\\\">{{filter-text-input searchValue=this.search pageValue=this.page}}</div><div class=\\\"col\\\"><div class=\\\"form-group\\\"><label>Rows</label><div class=\\\"dropdown\\\">{{page-item-count page_size=this.page_size page_type=\\'instruments\\' model=this.model.instruments}}</div></div></div><div style=\\\"margin-top:2rem;\\\" class=\\\"col\\\">{{getTotalsInstruments model=this.model.instrumentStats}}</div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=this.model.instruments.meta routeLink=\\'instruments\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{instruments-list instruments=this.model.instruments sortBy=(action \\'sortBy\\') ordering=this.ordering levelLookupList=this.model.levelLookupList projectLookupList=this.model.projectLookupList}}</div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=this.model.instruments.meta routeLink=\\'instruments\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/instruments.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{outlet}}<div class=\\\"container-fluid\\\"><div class=\\\"mt-1\\\"><h3>Licenses</h3></div>{{key-import-form}}<table class=\\\"table table-striped responsive-table settings-table\\\"><thead><tr><th>id</th><th>Company</th><th>Start Date</th><th>End Date</th><th># Instruments</th><th>Version</th><th>Active</th><th>Delete</th></tr></thead><tbody>{{#each @model.licenceKeys as |key|}}<tr><td data-title=\\\"{{key.id}}\\\" class=\\\"noWrap\\\"><label for=\\\"id\\\" class=\\\"col-12 col-form-label\\\">{{key.id}}</label></td><td data-title=\\\"{{key.companyName}}\\\" class=\\\"noWrap\\\"><label for=\\\"id\\\" class=\\\"col-12 col-form-label\\\">{{key.companyName}}</label></td><td data-title=\\\"{{key.startDate}}\\\" class=\\\"noWrap\\\"><label for=\\\"id\\\" class=\\\"col-12 col-form-label\\\">{{key.startDate}}</label></td><td data-title=\\\"{{key.endDate}}\\\" class=\\\"noWrap\\\"><label for=\\\"id\\\" class=\\\"col-12 col-form-label\\\">{{key.endDate}}</label></td><td data-title=\\\"{{key.numInst}}\\\" class=\\\"noWrap\\\">{{#if (eq key.numInst 0)}}<label class=\\\"col-12 col-form-label\\\">Unlimited</label>{{else}}<label for=\\\"id\\\" class=\\\"col-12 col-form-label\\\">{{key.numInst}}</label>{{/if}}</td><td data-title=\\\"{{key.softwareVersion}}\\\" class=\\\"noWrap\\\"><label for=\\\"id\\\" class=\\\"col-12 col-form-label\\\">{{key.softwareVersion}}</label></td><td data-title=\\\"{{key.isValidKey}}\\\" class=\\\"noWrap\\\">{{#if (get this.activeKeys key.id)}}<span style=\\\"font-size:25px;color:green\\\">&#10003;</span>{{else}}<span style=\\\"font-size:25px;color:red\\\">&#10005;</span>{{/if}}</td><td data-title=\\\"{{key.id}}\\\" style=\\\"text-align:center;\\\" class=\\\"noWrap\\\">{{#if (not (get this.isRowDeleteConfirmationDialog key.id))}}<span {{action \\'toggleRowDeleteConfirmationDialog\\' key.id on=\\\"click\\\"}} style=\\\"float:left;margin-top: 0.5rem\\\" class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span>{{/if}}{{#if (get this.isRowDeleteConfirmationDialog key.id)}}<div style=\\\"position:relative;min-width:0px;float:left;padding-right: 0\\\" class=\\\"delete-confirmation active\\\"><span {{action \\'remove\\' @model.licenceKeys key on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-confirm\\\">Yes</span><span {{action \\'toggleRowDeleteConfirmationDialog\\' key.id on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-cancel\\\">No</span></div>{{/if}}</td></tr>{{/each}}</tbody></table><div class=\\\"pb-1\\\"></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/keys.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Settings\\\"}}{{outlet}}<div class=\\\"container-fluid\\\"><div class=\\\"mt-1\\\"><h3>Lookup Values</h3></div><table class=\\\"table table-striped responsive-table settings-table\\\"><thead><tr><th>ID</th><th>Name</th><th>Type</th><th>Value</th></tr></thead><tbody>{{#each @model.lookups as |lookup|}}<tr><td data-title=\\\"{{lookup.id}}\\\" class=\\\"noWrap\\\"><label for=\\\"id\\\" class=\\\"col-12 col-form-label\\\">{{lookup.id}}</label></td><td data-title=\\\"{{lookup.name}}\\\" class=\\\"noWrap\\\"><label for=\\\"name\\\" class=\\\"col-12 col-form-label\\\">{{lookup.name}}</label></td><td data-title=\\\"{{lookup.type}}\\\" class=\\\"noWrap\\\"><label for=\\\"type\\\" class=\\\"col-12 col-form-label\\\">{{lookup.type}}</label></td><td data-title=\\\"{{lookup.id}}\\\" class=\\\"noWrap input-container\\\">{{#if (eq this.editingId lookup.id)}}<input type=\\\"text\\\" value={{lookup.value}} id={{lookup.id}} oninput={{action (mut lookup.value) value=\\\"target.value\\\"}} class=\\\"form-control full-width-input\\\">{{else}}<label for=\\\"value\\\" class=\\\"col-12 col-form-label\\\">{{lookup.value}}</label>{{/if}}</td></tr>{{/each}}</tbody></table><div class=\\\"pb-1\\\"></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/list-lookups.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Log Viewer\\\"}}<div class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"row\\\"><div class=\\\"col\\\">{{filter-text-input-log-viewer searchValue=this.search pageValue=this.page}}</div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@model.logViewer.meta routeLink=\\'log-viewer\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{log-viewer-list logViewer=@model.logViewer errorTypeLookups=this.errorTypeLookups sortBy=(action \\'sortBy\\') ordering=this.ordering showExpandColumn=true refreshRoute=(action \\'refreshRoute\\')}}</div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@model.logViewer.meta routeLink=\\'log-viewer\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/log-viewer.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Login\\\"}}<div style=\\\"justify-content: center;display: flex;\\\"><div id=\\\"auth_card\\\"><div style=\\\"font-size: 30px;color: white;justify-self: center;margin-bottom: 20px;\\\">Login</div><div style=\\\"width: 75%;margin: 10px;font-size: small;\\\"><input id=\\\"id_username\\\" autocomplete=\\\"username\\\" placeholder=\\\"Username\\\" value={{this.identification}} oninput={{action \\\"updateIdentification\\\"}}></div><div style=\\\"width: 75%;margin: 10px;font-size: small;\\\"><input id=\\\"id_password\\\" type=\\\"password\\\" placeholder=\\\"Password\\\" autocomplete=\\\"current-password\\\" value={{this.password}} oninput={{action \\\"updatePassword\\\"}} onkeydown={{action \\\"onLoginKeydown\\\"}}><div style=\\\"width:100%;display: flex;justify-content: space-between;\\\"><div style=\\\"font-size: x-small;margin-left: 5px;font-weight: bold;cursor: pointer;color: #4A6A9C;\\\" {{action \\\"forgotPassword\\\" on=\\\"click\\\"}}>Forgot your password?</div>{{#if this.showResendVerification}}<div style=\\\"font-size: x-small;margin-right: 5px;font-weight: bold;cursor: pointer;color: #4A6A9C;\\\" {{action \\\"resendVerification\\\" on=\\\"click\\\"}}>Resend Verification</div>{{/if}}</div></div><div style=\\\"display: flex;flex-direction: column;align-items: center;margin: 10px;\\\"><button id=\\\"id_button\\\" {{action \\\"authenticateWithProvider\\\" \\\"login\\\" on=\\\"click\\\"}}>Login</button><div style=\\\"width: 100%;display: flex;flex-direction: row;align-items: center;font-size: x-small;justify-content: center;\\\"><div>Don\\'t have an account?</div><div style=\\\"margin-left: 5px;font-weight: bold;cursor: pointer;color: #4A6A9C;\\\" {{action \\\"registerNewAccount\\\" on=\\\"click\\\"}}>Register</div></div><div style=\\\"height:35px\\\"></div>{{#if (is-equal this.model.loginAPI \\\"GOOGLE\\\")}}<button id=\\\"id_button\\\" style=\\\"margin-bottom:10px;\\\" {{action \\\"authenticateWithProvider\\\" \\\"google-oauth2\\\" on=\\\"click\\\"}}>Login via Google</button>{{/if}}{{#if (is-equal this.model.loginAPI \\\"MICROSOFT\\\")}}<button style=\\\"justify-content:center;display: flex;flex-direction: row;align-items: center;\\\" id=\\\"id_button\\\" {{action \\\"authenticateWithProvider\\\" \\\"azure-ad-oauth2\\\" on=\\\"click\\\"}}><img width=\\\"20px;\\\" src=\\\"/assets/images/microsoft-icon.png\\\"><div style=\\\"margin-left: 10px;\\\">Sign in with Microsoft</div></button>{{/if}}</div>{{#if this.loading}}<div style=\\\"width: auto; padding-top:5px;\\\" class=\\\"center pulse_loader\\\"></div>{{/if}}{{#if this.errorMessage}}<div style=\\\"overflow: scroll;display: flex;width: 100%;max-height: 250px;\\\">{{this.errorMessage}}</div>{{/if}}</div></div>{{outlet}}', { moduleName: 'geotechnical-data-platform-new/templates/login.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"My Profile\\\"}}<div style=\\\"display:flex;flex-direction:row;\\\" class=\\\"container-fluid\\\"><div class=\\\"my-profile-sidebar\\\">{{my-profile-sidebar currentTab=this.currentTab}}</div>{{#if (is-equal this.currentTab \\\"HOME\\\")}}<div class=\\\"my-profile-body\\\">{{my-profile-sidebar-home}}</div>{{/if}}{{#if (is-equal this.currentTab \\\"CONTACTS\\\")}}<div class=\\\"my-profile-body\\\">{{my-profile-sidebar-contacts}}</div>{{/if}}{{#if (is-equal this.currentTab \\\"USERS\\\")}}<div class=\\\"my-profile-body\\\">{{my-profile-sidebar-users}}</div>{{/if}}{{#if (is-equal this.currentTab \\\"CONTRACTORS\\\")}}<div class=\\\"my-profile-body\\\">{{my-profile-sidebar-contractors}}</div>{{/if}}{{#if (is-equal this.currentTab \\\"ADDON\\\")}}<div class=\\\"my-profile-body\\\">{{my-profile-sidebar-addon}}</div>{{/if}}{{#if (is-equal this.currentTab \\\"MORE\\\")}}<div class=\\\"my-profile-body\\\">{{my-profile-sidebar-more}}</div>{{/if}}</div>{{outlet}}', { moduleName: 'geotechnical-data-platform-new/templates/my-profile.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Packs Validation\\\"}}<div class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"row\\\"><div class=\\\"col\\\">{{analytics/packsValidationAnalyticsMainPage}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/packs-validation-analytics.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Packs Validation\\\"}}<div class=\\\"container-fluid\\\">{{bread-crumbs}}{{production/packsValidationMainPage packTypeList=@model.packTypeList typeList=@model.typeList rigProfileList=@model.rigProfileList packProfileList=@model.packProfileList}}</div>', { moduleName: 'geotechnical-data-platform-new/templates/packs-validation.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Raw Data \\\" @model.instrument.id}}<div id=\\\"raw-content\\\" class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"mt-1\\\">{{#if this.permissionError}}<table style=\\\"width: 100%; margin-bottom: 1rem;\\\" id=\\\"instrumentEditError\\\"><tr class=\\\"details\\\"><td colspan=\\\"6\\\" style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"td_details error\\\"><label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You do not have sufficent permissions.</label></td></tr></table>{{/if}}<h5>{{this.model.instrument.instrumentType.title}} {{this.model.instrument.id}}</h5><div class=\\\"row\\\"><div class=\\\"col-md-6 d-flex flex-column justify-content-center\\\"><div class=\\\"row\\\"><div class=\\\"col\\\"><label>Rows</label>{{raw-drop-down instrumentId=@model.instrument.id pageSize=@model.displacementValues.meta.pagination.page_size}}</div></div>{{#if this.isWire}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label>Port Selection</label></div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{wire/raw-data-dropdown selected=this.port instrumentId=@model.instrument.id calib=this.calib linear=this.linear depth=this.depth port=this.port port_number=this.port_number}}</div></div>{{/if}}</div>{{#if this.isWire}}<div class=\\\"col-md-6\\\"><div class=\\\"form-group mb-0 mr-05\\\"><tr>{{radio-buttons setValue=(action \\'toggleDataType\\' \\'raw\\') type=\\'Raw Data\\' checked=\\\"checked\\\"}}</tr><tr>{{radio-buttons setValue=(action \\'toggleDataType\\' \\'linear\\') type=\\'Linear Data\\' checked=\\\"\\\"}}</tr><tr>{{radio-buttons setValue=(action \\'toggleDataType\\' \\'calib\\') type=\\'Calibrated Data\\' checked=\\\"\\\"}}</tr><tr>{{radio-buttons setValue=(action \\'toggleDataType\\' \\'depth\\') type=\\'Depth (Water)\\' checked=\\\"\\\"}}</tr></div></div>{{/if}}</div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"mb-1\\\"><button style=\\\"margin-top: 0.5rem; margin-bottom: 0.25rem\\\" type=\\\"button\\\" {{action \\\"toggleProperty\\\" \\\"isVisibleExportDataForm\\\" on=\\\"click\\\"}} class=\\\"btn btn-sm mr-1 {{if this.isVisibleExportDataForm \\'btn-primary\\' \\'btn-secondary\\'}}\\\"><FaIcon @icon=\\\"upload\\\" />&nbsp; Export data</button><button style=\\\"margin-top: 0.5rem; margin-bottom: 0.25rem\\\" type=\\\"button\\\" {{action \\\"toggleProperty\\\" \\\"isVisibleImportDataForm\\\" on=\\\"click\\\"}} class=\\\"btn btn-sm mr-1 {{if this.isVisibleImportDataForm \\'btn-primary\\' \\'btn-secondary\\'}}\\\"><FaIcon @icon=\\\"download\\\" />&nbsp; Import data</button>{{data-export-form instrumentId=@model.instrument.id isVisibleExportDataForm=this.isVisibleExportDataForm instrument=@model.instrument}}{{data-import-form instrumentId=@model.instrument.id isVisibleImportDataForm=this.isVisibleImportDataForm instrument=@model.instrument}}</div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{advanced-filter filterType=\\\"raw-data\\\" displayDateTimeFormat=true displayYAxistUnit=true requireXMaxMin=false requireYLeftMaxMin=false requireYRightMaxMin=false instrumentId=@model.instrument.id instrumentType=@model.instrument.instrumentType.title}}</div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{#if (eq @model.instrument.instrumentTypeID 1)}}{{#if (eq @model.instrument.subModel \\\"B\\\")}}{{extoBMultiInstrument/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{else}}{{pack/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 2)}}{{cable/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 3)}}{{rebar/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 4)}}{{pack/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 5)}}{{pack/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 6)}}{{tilt/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 7)}}{{slough/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 8)}}{{thermo/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 9)}}{{piezo/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 10)}}{{hid/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 11)}}{{pack/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 12)}}{{wire/raw-data globalDatetimeFormat=@model.globalDatetimeFormat port=this.port instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\') depth=this.depth calib=this.calib linear=this.linear}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 13)}}{{adict/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 14)}}Analog{{/if}}{{#if (eq @model.instrument.instrumentTypeID 15)}}{{vibe/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 16)}}{{micro/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 17)}}{{rebarv2/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 18)}}{{bluecell/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 19)}}{{dppc/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 20)}}{{multiDExto/raw-data globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument headAts=@model.headAts displacementData=@model.displacementValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}</div></div>{{outlet}}</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/raw-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Raw Data \\\" @model.instrument.id}}<div id=\\\"raw-content\\\" class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"mt-1\\\">{{#if this.permissionError}}<table style=\\\"width: 100%; margin-bottom: 1rem;\\\" id=\\\"instrumentEditError\\\"><tr class=\\\"details\\\"><td colspan=\\\"6\\\" style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"td_details error\\\"><label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You do not have sufficent permissions.</label></td></tr></table>{{/if}}<div style=\\\"display:flex;flex-direction:row;align-items: center;\\\"><h3>{{@model.instrument.instrumentType.title}} {{@model.instrument.id}}</h3>{{#if this.showLoading}}<div style=\\\"width: auto;margin-bottom: 8px;\\\" class=\\\"pulse_loader\\\"></div>{{/if}}</div><div class=\\\"row\\\"><div class=\\\"col\\\"><label>Rows</label>{{raw-frequency-events-drop-down instrumentId=@model.instrument.id pageSize=@model.instrumentFreqEventData.meta.pagination.page_size}}</div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{advanced-filter filterType=\\\"raw-frequency-events-data\\\" globalDatetimeFormat=@model.globalDatetimeFormat displayDateTimeFormat=true displayYAxistUnit=true requireXMaxMin=false requireYLeftMaxMin=false requireYRightMaxMin=false instrumentId=@model.instrument.id instrumentType=@model.instrument.instrumentType.title}}</div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{#if (eq @model.instrument.instrumentTypeID 15)}}{{vibe/raw-frequency-events-data showLoading=this.showLoading globalDatetimeFormat=@model.globalDatetimeFormat instrument=@model.instrument instrumentFreqEventProfiles=@model.instrumentFreqEventProfiles instrumentFreqEventData=@model.instrumentFreqEventData setProp=(action \\'updateProperty\\')}}{{/if}}</div></div>{{outlet}}</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/raw-frequency-events-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Raw Gateway Data \\\" @model.gateway.id}}<div id=\\\"raw-content\\\" class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"mt-1\\\">{{#if this.permissionError}}<table style=\\\"width: 100%; margin-bottom: 1rem;\\\" id=\\\"instrumentEditError\\\"><tr class=\\\"details\\\"><td colspan=\\\"6\\\" style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"td_details error\\\"><label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You do not have sufficent permissions.</label></td></tr></table>{{/if}}<h5>{{this.model.gateway.gatewayType.title}} {{this.model.gateway.id}}</h5><div class=\\\"row\\\"><div class=\\\"col\\\"><label>Rows</label>{{raw-gateway-drop-down gatewayId=@model.gateway.id pageSize=@model.gatewayValues.meta.pagination.page_size}}</div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"mb-1\\\"><button style=\\\"margin-top: 0.5rem; margin-bottom: 0.25rem\\\" type=\\\"button\\\" {{action \\\"toggleProperty\\\" \\\"isVisibleExportDataForm\\\" on=\\\"click\\\"}} class=\\\"btn btn-sm mr-1 {{if this.isVisibleExportDataForm \\'btn-primary\\' \\'btn-secondary\\'}}\\\"><FaIcon @icon=\\\"upload\\\" />&nbsp; Export data</button><button style=\\\"margin-top: 0.5rem; margin-bottom: 0.25rem\\\" type=\\\"button\\\" {{action \\\"toggleProperty\\\" \\\"isVisibleImportDataForm\\\" on=\\\"click\\\"}} class=\\\"btn btn-sm mr-1 {{if this.isVisibleImportDataForm \\'btn-primary\\' \\'btn-secondary\\'}}\\\"><FaIcon @icon=\\\"download\\\" />&nbsp; Import data</button>{{data-export-gateway-form gatewayId=@model.gateway.id isVisibleExportDataForm=this.isVisibleExportDataForm}}{{data-import-gateway-form gatewayId=@model.gateway.id isVisibleImportDataForm=this.isVisibleImportDataForm}}</div></div></div><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\">{{#if (eq @model.gateway.gatewayTypeID 1)}}{{blucell/raw-gateway-data gateway=@model.gateway gatewayData=@model.gatewayValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.gateway.gatewayTypeID 2)}}{{blugate/raw-gateway-data gateway=@model.gateway gatewayData=@model.gatewayValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.gateway.gatewayTypeID 3)}}{{blu900gw/raw-gateway-data gateway=@model.gateway gatewayData=@model.gatewayValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.gateway.gatewayTypeID 4)}}{{blu900node/raw-gateway-data gateway=@model.gateway raw_parent_gateway=this.raw_parent_gateway gatewayData=@model.gatewayValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.gateway.gatewayTypeID 5)}}{{oneforone/raw-gateway-data gateway=@model.gateway raw_parent_gateway=this.raw_parent_gateway gatewayData=@model.gatewayValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}{{#if (eq @model.gateway.gatewayTypeID 6)}}{{vibe/raw-gateway-data gateway=@model.gateway raw_parent_gateway=this.raw_parent_gateway gatewayData=@model.gatewayValues temperatureData=@model.temperatureValues setProp=(action \\'updateProperty\\')}}{{/if}}</div></div>{{outlet}}</div></div>', { moduleName: 'geotechnical-data-platform-new/templates/raw-gateway-data.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Create Account\\\"}}<div style=\\\"justify-content: center;display: flex;\\\"><div id=\\\"auth_card\\\" style=\\\"width: 50%;\\\">{{#if this.isSuccessful}}<div style=\\\"font-size: 30px;color: white;justify-self: center;margin-bottom: 20px;\\\">Verification Required</div><div style=\\\"width:100%;display:flex;flex-direction:column;align-items:center;font-size: small;\\\"><div style=\\\"color: white;font-size: small;\\\">To activate your VantagePoint account, at least one master user must approve your registration.</div><div style=\\\"color: white;font-size: small;\\\">Request(s) has been sent to:</div><div style=\\\"color: white;font-size: small;\\\">{{this.emailsSent}}</div></div><div style=\\\"color: white;font-size: small;\\\">Please contact email(s) listed above for approval.</div><div style=\\\"color: white;font-size: small;\\\">If you have already verifed your email, you may close this page and re-login.</div><div style=\\\"display: flex;flex-direction: column;align-items: center;margin: 10px;\\\"><button id=\\\"id_button\\\" type=\\\"button\\\" onclick={{this.resendVerification}}>Resend</button></div>{{#if this.loading}}<div style=\\\"width: auto; padding-top:5px;\\\" class=\\\"center pulse_loader\\\"></div>{{/if}}{{#if this.errorMessage}}<div style=\\\"overflow: scroll;display: flex;width: 100%;max-height: 100px;\\\">{{this.errorMessage}}</div>{{/if}}{{else}}<div style=\\\"font-size: 30px;color: white;justify-self: center;margin-bottom: 20px;\\\">Create Account</div><div style=\\\"width:100%;display:flex;flex-direction:row;align-items:center;font-size: small;\\\"><div style=\\\"width:50%;margin: 10px;\\\"><div style=\\\"color: white;width:100%;display:flex;flex-direction:row;align-items:center;font-size: small;\\\"><div>First Name</div><div>*</div></div><input id=\\\"id_register_firstname\\\" value={{this.firstName}} oninput={{this.updateFirstName}}></div><div style=\\\"width:50%;margin: 10px;\\\"><div style=\\\"color: white;width:100%;display:flex;flex-direction:row;align-items:center;font-size: small;\\\"><div>Last name</div><div>*</div></div><input id=\\\"id_register_lastname\\\" value={{this.lastName}} oninput={{this.updateLastName}}></div></div><div style=\\\"width:100%;display:flex;flex-direction:row;align-items:center;font-size: small;\\\"><div style=\\\"width:100%;margin: 10px;\\\"><div style=\\\"color: white;width:100%;display:flex;flex-direction:row;align-items:center;font-size: small;\\\"><div>Email</div><div>*</div></div><input id=\\\"id_register_email\\\" autocomplete=\\\"email\\\" value={{this.email}} oninput={{this.updateEmail}}></div>{{#if this.isValidEmail}}<div style=\\\"margin-top:5px; font-size: small; color:white;\\\">{{this.emailTips}}</div>{{/if}}</div><div style=\\\"width:100%;display:flex;flex-direction:row;align-items:center;font-size: small;\\\"><div style=\\\"width:100%;margin: 10px;\\\"><div style=\\\"color: white;width:100%;display:flex;flex-direction:row;align-items:center;font-size: small;\\\"><div>Username</div><div>*</div></div><input id=\\\"id_register_username\\\" autocomplete=\\\"username\\\" value={{this.username}} oninput={{this.updateUsername}}></div>{{#if this.isValidUsername}}<div style=\\\"margin-top:5px; font-size: small; color:white;\\\">{{this.usernameTips}}</div>{{/if}}</div><div style=\\\"width:100%;display:flex;flex-direction:column;align-items:center;font-size: small;\\\"><div style=\\\"width:100%;margin: 10px;\\\"><div style=\\\"color: white;width:100%;display:flex;flex-direction:row;align-items:center;font-size: small;\\\"><div>Password</div><div>*</div></div><input id=\\\"id_register_password\\\" type=\\\"password\\\" autocomplete=\\\"current-password\\\" oninput={{this.updatePassword}} value={{this.password}}></div><div style=\\\"margin-top:5px; font-size: small; color:white;\\\">{{this.passwordStrengthText}}</div><div style=\\\"height:5px; width:100%; background:#ddd; border-radius:5px; overflow:hidden; margin-top:5px;\\\"><div style={{this.passwordStrengthBarStyle}}></div></div></div><div style=\\\"display: flex;flex-direction: column;align-items: center;margin: 10px;\\\"><button id=\\\"id_button\\\" type=\\\"button\\\" onclick={{this.submitRegistration}}>Create</button></div>{{#if this.loading}}<div style=\\\"width: auto; padding-top:5px;\\\" class=\\\"center pulse_loader\\\"></div>{{/if}}{{#if this.errorMessage}}<div style=\\\"overflow: scroll;display: flex;width: 100%;max-height: 100px;\\\">{{this.errorMessage}}</div>{{/if}}{{/if}}</div></div>{{outlet}}', { moduleName: 'geotechnical-data-platform-new/templates/register.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Reset Password\\\"}}<div style=\\\"justify-content: center;display: flex;\\\"><div style=\\\"margin-top: 100px;width: 30%;border: solid;border-radius: 10px;padding: 15px;border-color: white;display: flex;flex-direction: column;align-items: center;background: linear-gradient(to bottom, #4A6A9C 0%, #ffffff 100%);\\\"><div style=\\\"font-size: 30px;color: white;justify-self: center;margin-bottom: 20px;\\\">Reset Password</div><div style=\\\"margin: 10px;\\\">{{#if this.success}}<div style=\\\"margin-bottom: 50px;color: white;font-size: medium;\\\">Password has been updated. You can now log in.</div>{{else}}<div style=\\\"color: white;width:100%;display:flex;flex-direction:row;align-items:center;font-size: small;\\\">Password</div><input id=\\\"reset_password\\\" type=\\\"password\\\" value={{this.password}} onchange={{action \\\"updateField\\\" \\\"password\\\"}}><div style=\\\"margin-top: 20px;color: white;width:100%;display:flex;flex-direction:row;align-items:center;font-size: small;\\\">Confirm Password</div><input id=\\\"reset_confirm_password\\\" type=\\\"password\\\" value={{this.passwordConfirm}} onchange={{action \\\"updateField\\\" \\\"passwordConfirm\\\"}}><div style=\\\"display: flex;flex-direction: column;align-items: center;margin: 10px;\\\"><button id=\\\"id_button\\\" {{action \\\"submit\\\"  on=\\\"click\\\"}}>Save</button></div>{{/if}}</div>{{#if this.loading}}<div style=\\\"width: auto; padding-top:5px;\\\" class=\\\"center pulse_loader\\\"></div>{{/if}}{{#if this.errorMessage}}<div>{{this.errorMessage}}</div>{{/if}}</div></div>{{outlet}}', { moduleName: 'geotechnical-data-platform-new/templates/reset-password.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{outlet}}<div style=\\\"padding-top: 1rem;\\\" class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"mt-1\\\">{{#if this.permissionError}}<table style=\\\"width: 100%; margin-bottom: 1rem;\\\" id=\\\"instrumentEditError\\\"><tr class=\\\"details\\\"><td colspan=\\\"6\\\" style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"td_details error\\\"><label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You do not have sufficent permissions.</label></td></tr></table>{{/if}}<h4>Events</h4></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\">{{filter-text-input-events searchValue=this.search}}</div><div class=\\\"col-sm-2\\\"><div class=\\\"form-group\\\"><label>Rows</label><div class=\\\"dropdown\\\">{{page-item-count page_size=this.page_size page_type=\\'seismic-events\\' model=this.model.seismicEvents}}</div></div></div></div><div class=\\\"mb-1\\\"><button style=\\\"margin-top: 0.5rem; margin-bottom: 0.25rem\\\" type=\\\"button\\\" {{action \\'toggleProperty\\' \\'isVisibleImportDataForm\\' on=\\\"click\\\"}} class=\\\"btn btn-sm mr-1 {{if this.isVisibleImportDataForm \\'btn-primary\\' \\'btn-secondary\\'}}\\\"><FaIcon @icon=\\\"download\\\" />&nbsp; Import data</button></div>{{#if this.isVisibleImportDataForm}}{{data-import-form-seis isVisibleError=this.isVisibleError}}{{/if}}<div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=this.model.seismicEvents.meta routeLink=\\'seismic-events\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div>{{create-new-seismic-event-form seismicEvents=this.model.seismicEvents seismicTypesSelectOptions=this.model.seismicTypes seismicTypesSelectOptionsKyes=\\\"id,title\\\" vewRowDetails=(action \\'vewRowDetails\\') isVisibleCreateNewForm=this.isVisibleCreateNewForm dateFormat=\\'YYYY-MM-DD HH:mm:ss\\' setProp=(action \\'updateProperty\\')}}<table class=\\\"table table-striped responsive-table\\\"><thead><tr>{{sortable-table-header title=\\'Timestamp\\' sortProperty=\\'timestamp\\' selectedSortProperty=this.ordering sort=(action \\'sortBy\\')}}{{sortable-table-header title=\\'Location\\' sortProperty=\\'location\\' selectedSortProperty=this.ordering sort=(action \\'sortBy\\')}}{{sortable-table-header title=\\'Moment magnitude\\' sortProperty=\\'moment_magnitude\\' selectedSortProperty=this.ordering sort=(action \\'sortBy\\')}}{{sortable-table-header title=\\'Seismic moment\\' sortProperty=\\'seismic_moment\\' selectedSortProperty=this.ordering sort=(action \\'sortBy\\')}}{{sortable-table-header title=\\'Source Radius\\' sortProperty=\\'source_radius\\' selectedSortProperty=this.ordering sort=(action \\'sortBy\\')}}{{sortable-table-header title=\\'Energy\\' sortProperty=\\'energy\\' selectedSortProperty=this.ordering sort=(action \\'sortBy\\')}}<th id=\\\"add-new\\\" class=\\\"add-new-item\\\"><span {{action \\'updateProperty\\' \\'isVisibleCreateNewForm\\' \\'true\\' on=\\\"click\\\"}} class=\\\"add-new\\\"><FaIcon @icon=\\\"plus\\\" /> New</span></th></tr></thead><tbody>{{#each this.model.seismicEvents as |tableRow|}}<tr class=\\\"{{active-class (get this.isVisibleRowDetails tableRow.id)}}\\\"><td>{{tableRow.timestamp}}</td><td>{{tableRow.location}}</td><td>{{tableRow.momentMagnitude}}</td><td>{{tableRow.seismicMoment}}</td><td>{{tableRow.sourceRadius}}</td><td>{{tableRow.energy}}</td><td class=\\\"crud-td\\\"><span {{action \\'toggleRowDeleteConfirmationDialog\\' tableRow.id on=\\\"click\\\"}} class=\\\"crud remove\\\"><FaIcon @icon=\\\"trash\\\" /></span><span {{action \\'vewRowDetails\\' tableRow.id on=\\\"click\\\"}} class=\\\"crud view\\\"><FaIcon @icon=\\\"eye\\\" /></span><div class=\\\"delete-confirmation {{active-class (get this.isRowDeleteConfirmationDialog tableRow.id)}}\\\"><span class=\\\"crud-delete-message\\\"><span><small>Delete it?</small><small>Are you sure?</small></span></span><span {{action \\'remove\\' this.model.seismicEvents tableRow on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-confirm\\\">Yes</span><span {{action \\'toggleRowDeleteConfirmationDialog\\' tableRow.id on=\\\"click\\\"}} class=\\\"crud-delete-action crud-delete-cancel\\\">No</span></div></td></tr>{{#if (get this.isVisibleRowDetails tableRow.id)}}<tr class=\\\"details\\\"><td></td><td colspan=\\\"2\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"{{tableRow.timestamp}}\\\" class=\\\"col-12 col-form-label\\\">Timestamp:</label></td><td class=\\\"input\\\">{{single-save-datetime-picker object=tableRow field=\\'timestamp\\' format=\\'YYYY-MM-DD HH:mm:ss\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.location}}\\\" class=\\\"col-12 col-form-label\\\">Location:</label></td><td class=\\\"input\\\">{{single-save-input object=tableRow inputType=\\'text\\' field=\\'location\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.coordinates}}\\\" class=\\\"col-12 col-form-label\\\">Coordinates:</label></td><td class=\\\"input\\\">{{single-save-geo-input object=tableRow east=tableRow.east north=tableRow.north depth=tableRow.depth}}</td></tr><tr><td><label for=\\\"{{tableRow.comments}}\\\" class=\\\"col-12 col-form-label\\\">Comments:</label></td><td class=\\\"input\\\">{{single-save-input object=tableRow inputType=\\'textarea\\' field=\\'comments\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.isVisible}}\\\" class=\\\"col-12 col-form-label\\\">Is visible:</label></td><td class=\\\"input\\\">{{single-save-checkbox object=tableRow field=\\'isVisible\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.momentMagnitude}}\\\" class=\\\"col-12 col-form-label\\\">Moment magnitude:</label></td><td class=\\\"input\\\">{{single-save-input object=tableRow inputType=\\'text\\' field=\\'momentMagnitude\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.seismicMoment}}\\\" class=\\\"col-12 col-form-label\\\">Seismic moment:</label></td><td class=\\\"input\\\">{{single-save-input object=tableRow inputType=\\'text\\' field=\\'seismicMoment\\'}}</td></tr></tbody></table></td><td colspan=\\\"4\\\" class=\\\"td_details\\\"><table class=\\\"row_details form-inline\\\"><tbody><tr><td><label for=\\\"{{tableRow.sourceRadius}}\\\" class=\\\"col-12 col-form-label\\\">Source radius:</label></td><td class=\\\"input\\\">{{single-save-input object=tableRow inputType=\\'text\\' field=\\'sourceRadius\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.peakParticleVelocity}}\\\" class=\\\"col-12 col-form-label\\\">PPV (m/s):</label></td><td class=\\\"input\\\">{{single-save-input object=tableRow inputType=\\'text\\' field=\\'peakParticleVelocity\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.peakParticleAcceleration}}\\\" class=\\\"col-12 col-form-label\\\">PPA (m/s):</label></td><td class=\\\"input\\\">{{single-save-input object=tableRow inputType=\\'text\\' field=\\'peakParticleAcceleration\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.energy}}\\\" class=\\\"col-12 col-form-label\\\">Energy:</label></td><td class=\\\"input\\\">{{single-save-input object=tableRow inputType=\\'text\\' field=\\'energy\\'}}</td></tr><tr><td><label for=\\\"{{tableRow.seismicType.title}}\\\" class=\\\"col-12 col-form-label\\\">Seismic type:</label></td><td class=\\\"input\\\">{{single-save-select selectOptions=this.model.seismicTypes selectOptionsKyes=\\\"id,title\\\" object=tableRow.seismicType parentObject=tableRow field=\\'title\\' valueSource=\\'id\\'}}</td></tr></tbody></table></td></tr>{{/if}}{{/each}}</tbody></table><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=this.model.seismicEvents.meta routeLink=\\'seismic-events\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div class=\\\"pb-1\\\"></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/seismic-events.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Sensor Calibration\\\"}}<div class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"row\\\"><div class=\\\"col\\\">{{analytics/sensorCalibrationAnalyticsMainPage}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/sensor-calibration-analytics.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Sensor Calibration\\\"}}<div class=\\\"container-fluid\\\">{{bread-crumbs}}{{production/calibrationMainPage typeProfileList=@model.sensorTypeList instrumentProfileList=@model.instrumentProfileList rigProfileList=@model.rigProfileList calibrationprofileList=@model.calibrationProfileList}}</div>', { moduleName: 'geotechnical-data-platform-new/templates/sensor-calibration.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{page-title \\\"Settings\\\"}}<div style=\\\"display:flex;flex-direction:row;\\\" class=\\\"container-fluid\\\"><div class=\\\"settings-sidebar\\\">{{settings-sidebar currentTab=this.currentTab}}</div>{{#if (is-equal this.currentTab \\\"GENERAL\\\")}}<div class=\\\"settings-body\\\">{{settings-general model=@model}}</div>{{/if}}{{#if (is-equal this.currentTab \\\"MORE\\\")}}<div class=\\\"settings-body\\\">{{settings-more model=@model}}</div>{{/if}}{{#if (is-equal this.currentTab \\\"ABOUT\\\")}}<div class=\\\"settings-body\\\">{{settings-about model=@model}}</div>{{/if}}</div>{{outlet}}', { moduleName: 'geotechnical-data-platform-new/templates/settings.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"mt-1\\\"></div><div class=\\\"row\\\"><div class=\\\"col-sm-9\\\"><div class=\\\"row\\\"><div class=\\\"col\\\"><h5>{{if this.displayData this.instrumentType}} {{if this.displayData this.name}} {{if this.displayData this.instrumentId}}</h5><h6>{{if this.displayData this.details}}</h6>{{#if this.isThermo}}<label>Thermostrings show the Temperature channel from the head as anchor 0.</label>{{/if}}</div></div><div class=\\\"row no-gutters\\\"><div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-1\\\"><label>Select Chart</label><div class=\\\"dropdown\\\">{{spatial-chart-dropdown selected=this.chartDataValueName instrumentType=this.instrumentTypeId instrumentId=this.instrumentId}}</div></div></div>{{#if this.groupTime}}<div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-05\\\"><label>Group By</label><div class=\\\"dropdown\\\">{{spatial-group-dropdown instrumentId=this.instrumentId modelName=this.modelName groupTime=this.groupTime groupWindow=this.groupWindow}}</div></div></div>{{/if}}{{#if this.groupWindow}}<div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-05\\\"><label>Group By</label><div class=\\\"dropdown\\\">{{spatial-group-dropdown instrumentId=this.instrumentId modelName=this.modelName groupTime=this.groupTime groupWindow=this.groupWindow}}</div></div></div>{{/if}}{{#if this.groupTime}}<div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-05\\\"><label>&nbsp;</label><div class=\\\"dropdown\\\">{{spatial-time-dropdown instrumentId=this.instrumentId modelName=this.modelName frequencySelect=this.frequencySelect}}</div></div></div>{{/if}}{{#if this.groupWindow}}<div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-05\\\"><label>&nbsp;</label><div class=\\\"dropdown\\\">{{spatial-window-dropdown instrumentId=this.instrumentId modelName=this.modelName frequencySelect=this.frequencySelect}}</div></div></div>{{/if}}<div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-1\\\"><label>Event type</label><div class=\\\"dropdown\\\">{{spatial-event-dropdown instrumentId=this.instrumentId modelName=this.modelName eventType=this.eventType}}</div></div></div>{{#if (is-equal this.eventType \\\"blast\\\")}}<div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-1\\\"><label>Blast type</label><div class=\\\"dropdown\\\">{{spatial-blast-dropdown instrumentId=this.instrumentId modelName=this.modelName blastType=this.blastType}}</div></div></div>{{/if}}{{#if (is-equal this.eventType \\\"seismic\\\")}}<div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-1\\\"><label>Seismic type</label><div class=\\\"dropdown\\\">{{spatial-seismic-dropdown instrumentId=this.instrumentId modelName=this.modelName seismicType=this.seismicType}}</div></div></div>{{/if}}</div></div><div class=\\\"col-sm-3\\\"><div class=\\\"form-group mb-0 mr-05 pull-right\\\">{{#if this.instrumentId}}{{#if (is-equal this.chartDataValueName \\'Displacement\\')}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label {{action \\'toggleProperty\\' \\'zeroed\\' on=\\\"click\\\"}} class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"zeroed\\\" checked=this.timeRef class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Time reference</span></label></div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{#if (is-equal this.refHeadPosition \\'hac\\')}}<label class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked=true disabled=\\'disabled\\' class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Flip signs</span></label>{{else}}<label {{action \\'toggleProperty\\' \\'flip_signs\\' on=\\\"click\\\"}} class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked=this.flipSigns class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Flip signs</span></label>{{/if}}</div></div>{{#unless this.isAdictMDT}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label>Select ref. anchor</label><div role=\\\"toolbar\\\" aria-label=\\\"Toolbar with button groups\\\" class=\\\"btn-toolbar mr-05\\\"><div role=\\\"group\\\" aria-label=\\\"First group\\\" class=\\\"btn-group btn-group-sm\\\">{{#each this.instrumentAnchorsSorted as |anchor|}}<LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array this.instrumentId this.modelName}} @query={{hash ref_head_position=\\\"\\\" ref_anchor=anchor.number}} class=\\\"btn btn-outline-primary nowrap\\\">- {{anchor.number}} -</LinkTo>{{/each}}</div></div></div></div>{{else}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label>Select ref. anchor</label><div role=\\\"toolbar\\\" aria-label=\\\"Toolbar with button groups\\\" class=\\\"btn-toolbar mr-05\\\"><div role=\\\"group\\\" aria-label=\\\"First group\\\" class=\\\"btn-group btn-group-sm\\\">{{#each this.instrumentAnchorsForAdictMDT as |anchor|}}<LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array this.instrumentId this.modelName}} @query={{hash ref_head_position=\\\"\\\" ref_anchor=anchor.number}} class=\\\"btn btn-outline-primary nowrap\\\">- {{anchor.number}} -</LinkTo>{{/each}}</div></div></div></div>{{/unless}}{{/if}}{{#if (is-equal this.chartDataValueName \\'Displacement\\')}}{{#if this.isRebar}}<div class=\\\"row\\\"><div class=\\\"col\\\"><div role=\\\"toolbar\\\" class=\\\"btn-toolbar mr-05\\\"><div role=\\\"group\\\" aria-label=\\\"Second group\\\" class=\\\"btn-group btn-group-sm\\\"><LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array this.instrumentId this.modelName}} @query={{hash ref_head_position=\\\"\\\" side=\\\"A\\\"}} class=\\\"btn btn-outline-primary nowrap\\\">Side A</LinkTo><LinkTo @route=\\\"spatial-graphs.spatial-graph\\\" @models={{array this.instrumentId this.modelName}} @query={{hash ref_head_position=\\\"\\\" side=\\\"B\\\"}} class=\\\"btn btn-outline-primary nowrap\\\">Side B</LinkTo></div></div></div></div>{{/if}}{{/if}}{{#if (is-equal this.chartDataValueName \\'Temperature\\')}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label {{action \\'toggleProperty\\' \\'zeroed\\' on=\\\"click\\\"}} class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"zeroed\\\" checked=this.timeRef class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Time reference</span></label></div></div>{{/if}}{{/if}}</div></div></div><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\">{{outlet}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/spatial-graphs.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"spinner-yp-logo v_centered_abs_pos h_centered_abs_pos mt-2\\\"><img src=\\\"/assets/images/logo-no-text.png\\\" class=\\\"d-block mx-auto\\\"></div>', { moduleName: 'geotechnical-data-platform-new/templates/spatial-graphs/spatial-graph-loading.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{outlet}}<div class=\\\"mb-1\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\">{{#if (eq @model.instrument.instrumentTypeID 1)}}{{pack/chartjs-spatial-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 2)}}{{cable/chartjs-spatial-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 3)}}{{rebar/nvd3-spatial-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 4)}}{{pack/chartjs-spatial-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 5)}}{{pack/chartjs-spatial-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 6)}}BluTilt{{/if}}{{#if (eq @model.instrument.instrumentTypeID 7)}}{{slough/chartjs-spatial-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 8)}}{{thermo/chartjs-spatial-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 9)}}Piezo{{/if}}{{#if (eq @model.instrument.instrumentTypeID 10)}}HID{{/if}}{{#if (eq @model.instrument.instrumentTypeID 11)}}{{pack/chartjs-spatial-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 12)}}Wire{{/if}}{{#if (eq @model.instrument.instrumentTypeID 13)}}{{adict/chartjs-spatial-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 14)}}Analog{{/if}}{{#if (eq @model.instrument.instrumentTypeID 15)}}BluVibe{{/if}}{{#if (eq @model.instrument.instrumentTypeID 16)}}Micro{{/if}}{{#if (eq @model.instrument.instrumentTypeID 17)}}{{rebarv2/nvd3-spatial-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 19)}}DPPC{{/if}}</div></div></div><div class=\\\"mb-1\\\"></div>', { moduleName: 'geotechnical-data-platform-new/templates/spatial-graphs/spatial-graph.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"mt-1\\\"></div><div class=\\\"row\\\"><div class=\\\"col-sm-6\\\"><div class=\\\"row\\\"><div class=\\\"col\\\"><h5>{{if this.chart_parent_gateway \\\"\\\"}} {{if (eq this.gatewayType \\'Blu900\\') \\\"Selected Gateway:\\\"}} {{if (eq this.gatewayType \\'Blu900\\') this.chart_parent_gateway}}</h5><h5>{{if this.displayData this.gatewayType}} {{if this.displayData this.gatewayId}} {{if this.displayData this.name}}</h5><h6>{{if this.displayData this.details}}</h6></div></div><div class=\\\"row no-gutters\\\"><div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-1\\\"><label>Select Chart</label><div class=\\\"dropdown\\\">{{temporal-gateway-chart-dropdown selected=this.chartDataValueName gatewayType=this.gatewayTypeId gatewayId=this.gatewayId left_axis_field=this.left_axis_field right_axis_field=this.right_axis_field modelName=this.modelName chart_parent_gateway=this.chart_parent_gateway}}</div></div></div><div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-1\\\"><label>Secondary Axis</label><div class=\\\"dropdown\\\">{{temporal-gateway-right-axis-dropdown gatewayId=this.gatewayId gatewayType=this.gatewayTypeId selected=this.chartDataValueName left_axis_field=this.left_axis_field right_axis_field=this.right_axis_field modelName=this.modelName chart_parent_gateway=this.chart_parent_gateway}}</div></div></div></div>{{#if this.gatewayId}}<div class=\\\"row\\\"><div class=\\\"col\\\">{{input type=\\\"checkbox\\\" name=\\\"adjust_scales\\\" click=\\\"\\'toggleLocalProperty\\' \\'adjust_scales\\'\\\" checked=this.adjust_scales class=\\\"custom-control-input\\\"}}Adjust Scales</div></div>{{#if this.adjust_scales}}<div class=\\\"row\\\"><div class=\\\"col-md-5\\\"><div class=\\\"form-group d-inline-block\\\"><div class=\\\"row no-gutters\\\"><div style=\\\"padding-left:15px\\\" class=\\\"col-md-12\\\"><div class=\\\"row no-gutters\\\"><label>Primary Y-Axis</label><hr style=\\\"height: 2px; background: black;\\\"></div><div class=\\\"row no-gutters\\\"><label class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"auto_scale\\\" checked=this.auto_scale click=\\\"\\'toggleLocalProperty\\' \\'auto_scale\\'\\\" class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Auto Scale</span></label></div></div><div class=\\\"row no-gutters\\\"><div class=\\\"col-md-4\\\"><label for=\\\"yMaxValue\\\" class=\\\"col-12 col-form-label bold\\\">Y-Max:</label></div><div class=\\\"col-md-4\\\"><input type=\\\"text\\\" value={{this.y_max}} oninput={{action (mut this.y_max) value=\\\"target.value\\\"}} id=\\\"yScaleMax\\\" disabled={{this.auto_scale}} class=\\\"form-control\\\"></div></div><div class=\\\"row no-gutters\\\"><div class=\\\"col-md-4\\\"><label for=\\\"yMinValue\\\" class=\\\"col-12 col-form-label bold\\\">Y-Min:</label></div><div class=\\\"col-md-4\\\"><input type=\\\"text\\\" value={{this.y_min}} oninput={{action (mut this.y_min) value=\\\"target.value\\\"}} id=\\\"yScaleMin\\\" disabled={{this.auto_scale}} class=\\\"form-control\\\"></div></div></div></div></div><div class=\\\"col-md-5\\\"><div class=\\\"form-group d-inline-block\\\"><div class=\\\"row no-gutters\\\"><div style=\\\"padding-left:15px\\\" class=\\\"col-md-12\\\"><div class=\\\"row no-gutters\\\"><label>Secondary Y-Axis</label><hr style=\\\"height: 2px; background: black;\\\"></div><div class=\\\"row no-gutters\\\"><label class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"auto_scale_2\\\" checked=this.auto_scale_2 click=\\\"\\'toggleLocalProperty\\' \\'auto_scale_2\\'\\\" class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Auto Scale</span></label></div></div><div class=\\\"row no-gutters\\\"><div class=\\\"col-md-4\\\"><label for=\\\"yMaxValue\\\" class=\\\"col-12 col-form-label bold\\\">Y-Max:</label></div><div class=\\\"col-md-4\\\"><input type=\\\"text\\\" value={{this.y_max_2}} oninput={{action (mut this.y_max_2) value=\\\"target.value\\\"}} id=\\\"yScaleMax2\\\" disabled={{this.auto_scale_2}} class=\\\"form-control\\\"></div></div><div class=\\\"row no-gutters\\\"><div class=\\\"col-md-4\\\"><label for=\\\"yMinValue\\\" class=\\\"col-12 col-form-label bold\\\">Y-Min:</label></div><div class=\\\"col-md-4\\\"><input type=\\\"text\\\" value={{this.y_min_2}} oninput={{action (mut this.y_min_2) value=\\\"target.value\\\"}} id=\\\"yScaleMin2\\\" disabled={{this.auto_scale_2}} class=\\\"form-control\\\"></div></div></div></div></div></div>{{/if}}{{/if}}</div></div><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\">{{outlet}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/temporal-gateway-graphs.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"spinner-yp-logo v_centered_abs_pos h_centered_abs_pos mt-2\\\"><img src=\\\"/assets/images/logo-no-text.png\\\" class=\\\"d-block mx-auto\\\"></div>', { moduleName: 'geotechnical-data-platform-new/templates/temporal-gateway-graphs/temporal-gateway-graph-loading.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{outlet}}<div class=\\\"mb-1\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\">{{#if (eq @model.gateway.gatewayTypeID 1)}}{{blucell/chartjs-temporal-gateway-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData zoomTempData=@model.zoomTempData depth=@depth gateway=@model.gateway chartData=@model.graphs autoAxis=@auto_scale axis_min=@y_min axis_max=@y_max autoAxis2=@auto_scale_2 axis_min_2=@y_min_2 axis_max_2=@y_max_2 updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.gateway.gatewayTypeID 2)}}{{blugate/chartjs-temporal-gateway-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData zoomTempData=@model.zoomTempData depth=@depth gateway=@model.gateway chartData=@model.graphs autoAxis=@auto_scale axis_min=@y_min axis_max=@y_max autoAxis2=@auto_scale_2 axis_min_2=@y_min_2 axis_max_2=@y_max_2 updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.gateway.gatewayTypeID 3)}}{{blu900gw/chartjs-temporal-gateway-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData zoomTempData=@model.zoomTempData depth=@depth gateway=@model.gateway chartData=@model.graphs autoAxis=@auto_scale axis_min=@y_min axis_max=@y_max autoAxis2=@auto_scale_2 axis_min_2=@y_min_2 axis_max_2=@y_max_2 updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.gateway.gatewayTypeID 4)}}{{blu900node/chartjs-temporal-gateway-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData zoomTempData=@model.zoomTempData depth=@depth gateway=@model.gateway chartData=@model.graphs autoAxis=@auto_scale axis_min=@y_min axis_max=@y_max autoAxis2=@auto_scale_2 axis_min_2=@y_min_2 axis_max_2=@y_max_2 updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.gateway.gatewayTypeID 5)}}{{oneforone/chartjs-temporal-gateway-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData zoomTempData=@model.zoomTempData depth=@depth gateway=@model.gateway chartData=@model.graphs autoAxis=@auto_scale axis_min=@y_min axis_max=@y_max autoAxis2=@auto_scale_2 axis_min_2=@y_min_2 axis_max_2=@y_max_2 updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.gateway.gatewayTypeID 6)}}{{vibe/chartjs-temporal-gateway-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData zoomTempData=@model.zoomTempData depth=@depth gateway=@model.gateway chartData=@model.graphs autoAxis=@auto_scale axis_min=@y_min axis_max=@y_max autoAxis2=@auto_scale_2 axis_min_2=@y_min_2 axis_max_2=@y_max_2 updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}</div></div></div><div class=\\\"mb-1\\\"></div>', { moduleName: 'geotechnical-data-platform-new/templates/temporal-gateway-graphs/temporal-gateway-graph.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'geotechnical-data-platform-new/templates/temporal-gateway-right-axis-dropdown.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"mt-1\\\"></div><div class=\\\"row\\\"><div class=\\\"col-sm-6\\\"><div class=\\\"row\\\"><div class=\\\"col\\\"><h5>{{if this.displayData this.instrumentType}} {{if this.displayData this.name}} {{if this.displayData this.instrumentId}}</h5><h6>{{if this.displayData this.details}}</h6>{{#if this.isThermo}}<label>Thermostrings show the Temperature channel from the head as anchor 0.</label>{{/if}}</div></div><div class=\\\"row no-gutters\\\"><div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-1\\\"><label>Select Chart</label><div class=\\\"dropdown\\\">{{#if this.bluVibe}}{{temporal-chart-dropdown selected=this.chart_type instrumentType=this.instrumentTypeId instrumentId=this.instrumentId instrument=this.instrument}}{{/if}}{{#unless this.bluVibe}}{{#if this.isPiezo}}{{temporal-chart-dropdown selected=this.chart_type instrumentType=this.instrumentTypeId instrumentId=this.instrumentId instrument=this.instrument}}{{/if}}{{#unless this.isPiezo}}{{#if this.isDPPC}}{{temporal-chart-dropdown selected=this.chart_type instrumentType=this.instrumentTypeId instrumentId=this.instrumentId instrument=this.instrument}}{{else}}{{temporal-chart-dropdown selected=this.chartDataValueName instrumentType=this.instrumentTypeId instrumentId=this.instrumentId instrument=this.instrument vendor=this.vendor port=this.port}}{{/if}}{{/unless}}{{/unless}}</div></div></div>{{#if this.bluVibe}}<div class=\\\"col\\\"><span></span><td style=\\\"padding-right: 2rem;visibility: hidden;\\\"><div class=\\\"col-sm-auto mr-1\\\"><label>Number of Display Records:</label><div class=\\\"dropdown\\\">{{temporal-display-records-dropdown instrumentId=this.instrumentId modelName=this.modelName display_records=this.display_records}}</div></div></td></div>{{/if}}{{#if this.isVelocityGraph}}<div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-05\\\"><label>Group By</label><div class=\\\"dropdown\\\">{{temporal-group-dropdown instrumentId=this.instrumentId modelName=this.modelName window=this.window_value}}</div></div></div>{{#if this.bluVibe}}<div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-1\\\"><label>Event type</label><div class=\\\"dropdown\\\">{{temporal-event-dropdown instrumentId=this.instrumentId modelName=this.modelName eventType=this.eventType}}</div></div></div>{{/if}}{{#if this.bluVibeEvent}}<div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-1\\\"><label>Select BluVibe</label>{{searchable-select content=this.vibes selected=this.vibeSelection id=\\\"vibeSelect\\\" sortBy=\\\"title\\\" prompt=\\\"BluVibe ID\\\" searchPrompt=\\\"Filter\\\" isClearable=false on-change=(action \\\"onUpdateTransitionToVibe\\\")}}</div></div>{{/if}}{{#if this.bluVibe}}<div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-05\\\"><label>Group Window</label><div class=\\\"dropdown\\\">{{temporal-window-dropdown instrumentId=this.instrumentId modelName=this.modelName frequency=this.frequency}}</div></div></div>{{/if}}{{/if}}{{#if (is-equal this.eventType \\\"blast\\\")}}<div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-1\\\"><label>Blast type</label><div class=\\\"dropdown\\\">{{temporal-blast-dropdown instrumentId=this.instrumentId modelName=this.modelName blastType=this.blastType}}</div></div></div>{{/if}}{{#if (is-equal this.eventType \\\"seismic\\\")}}<div class=\\\"col-sm-auto\\\"><div class=\\\"form-group pull-left mr-1\\\"><label>Seismic type</label><div class=\\\"dropdown\\\">{{temporal-seismic-dropdown instrumentId=this.instrumentId modelName=this.modelName seismicType=this.seismicType}}</div></div></div>{{/if}}</div>{{#if this.instrumentId}}{{#if (is-equal this.chartDataValueName \\'Displacement\\')}}<div style=\\\"margin-bottom: 15px;\\\">{{advanced-filter filterType=\\\"temporal\\\" displayDateTimeFormat=false displayYAxistUnit=true requireXMaxMin=false requireYLeftMaxMin=false requireYRightMaxMin=false instrumentId=this.instrumentId chartType=this.chart_type instrumentType=this.instrumentType}}</div>{{/if}}{{/if}}<div class=\\\"row\\\"><div class=\\\"col\\\">{{input type=\\\"checkbox\\\" name=\\\"adjust_scales\\\" click=\\\"\\'toggleLocalProperty\\' \\'adjust_scales\\'\\\" checked=this.adjust_scales class=\\\"custom-control-input\\\"}}Adjust Scales</div></div>{{#if this.adjust_scales}}<div class=\\\"row\\\"><div class=\\\"col-md-5\\\"><div class=\\\"form-group d-inline-block\\\"><div class=\\\"row no-gutters\\\"><div style=\\\"padding-left:15px\\\" class=\\\"col-md-12\\\"><div class=\\\"row no-gutters\\\"><label>Primary Y-Axis</label><hr style=\\\"height: 2px; background: black;\\\"></div><div class=\\\"row no-gutters\\\"><label class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"auto_scale\\\" checked=this.auto_scale click=\\\"\\'toggleLocalProperty\\' \\'auto_scale\\'\\\" class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Auto Scale</span></label></div></div><div class=\\\"row no-gutters\\\"><div class=\\\"col-md-4\\\"><label for=\\\"yMaxValue\\\" class=\\\"col-12 col-form-label bold\\\">Y-Max:</label></div><div class=\\\"col-md-4\\\"><input type=\\\"text\\\" value={{this.y_max}} oninput={{action (mut this.y_max) value=\\\"target.value\\\"}} id=\\\"yScaleMax\\\" disabled={{this.auto_scale}} class=\\\"form-control\\\"></div></div><div class=\\\"row no-gutters\\\"><div class=\\\"col-md-4\\\"><label for=\\\"yMinValue\\\" class=\\\"col-12 col-form-label bold\\\">Y-Min:</label></div><div class=\\\"col-md-4\\\"><input type=\\\"text\\\" value={{this.y_min}} oninput={{action (mut this.y_min) value=\\\"target.value\\\"}} id=\\\"yScaleMin\\\" disabled={{this.auto_scale}} class=\\\"form-control\\\"></div></div></div></div></div>{{#unless this.bluVibe}}<div class=\\\"col-md-5\\\"><div class=\\\"form-group d-inline-block\\\"><div class=\\\"row no-gutters\\\"><div style=\\\"padding-left:15px\\\" class=\\\"col-md-12\\\"><div class=\\\"row no-gutters\\\"><label>Secondary Y-Axis</label><hr style=\\\"height: 2px; background: black;\\\"></div><div class=\\\"row no-gutters\\\"><label class=\\\"custom-control custom-checkbox mr-sm-2\\\">{{input type=\\\"checkbox\\\" name=\\\"auto_scale_2\\\" checked=this.auto_scale_2 click=\\\"\\'toggleLocalProperty\\' \\'auto_scale_2\\'\\\" class=\\\"custom-control-input\\\"}}<span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Auto Scale</span></label></div></div><div class=\\\"row no-gutters\\\"><div class=\\\"col-md-4\\\"><label for=\\\"yMaxValue\\\" class=\\\"col-12 col-form-label bold\\\">Y-Max:</label></div><div class=\\\"col-md-4\\\"><input type=\\\"text\\\" value={{this.y_max_2}} oninput={{action (mut this.y_max_2) value=\\\"target.value\\\"}} id=\\\"yScaleMax2\\\" disabled={{this.auto_scale_2}} class=\\\"form-control\\\"></div></div><div class=\\\"row no-gutters\\\"><div class=\\\"col-md-4\\\"><label for=\\\"yMinValue\\\" class=\\\"col-12 col-form-label bold\\\">Y-Min:</label></div><div class=\\\"col-md-4\\\"><input type=\\\"text\\\" value={{this.y_min_2}} oninput={{action (mut this.y_min_2) value=\\\"target.value\\\"}} id=\\\"yScaleMin2\\\" disabled={{this.auto_scale_2}} class=\\\"form-control\\\"></div></div></div></div></div>{{/unless}}</div>{{/if}}</div><div class=\\\"col\\\"><div class=\\\"form-group mb-0 mr-05 pull-right\\\"><td style=\\\"padding-right: 2rem;\\\">{{#if this.isWire}}<tr>{{radio-buttons setValue=(action \\'toggleDataType\\' \\'raw\\') type=\\'Raw Data\\' checked=this.rawChecked}}</tr><tr>{{radio-buttons setValue=(action \\'toggleDataType\\' \\'linear\\') type=\\'Linear Data\\' checked=this.linearChecked}}</tr><tr>{{radio-buttons setValue=(action \\'toggleDataType\\' \\'calib\\') type=\\'Calibrated Data\\' checked=this.calibChecked}}</tr><tr>{{radio-buttons setValue=(action \\'toggleDataType\\' \\'depth\\') type=\\'Depth (Water)\\' checked=this.depthChecked}}</tr>{{/if}}{{#unless this.bluVibe}}{{#if this.instrumentId}}{{#if (or (is-equal this.chartDataValueName \\'Displacement\\') (is-equal this.chartDataValueName \\'Pressure\\'))}}<div class=\\\"row\\\"><div class=\\\"col\\\"><input type=\\\"checkbox\\\" name=\\\"zeroed\\\" checked={{this.zeroed}} onchange={{action \\\"setCheckboxProperty\\\" \\\"zeroed\\\"}}><label>Time reference</label></div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{#if (is-equal this.refHeadPosition \\'hac\\')}}<input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked disabled><label>Flip signs</label>{{else}}<input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked={{this.flip_signs}} onchange={{action \\\"setCheckboxProperty\\\" \\\"flip_signs\\\"}}><label>Flip signs</label>{{/if}}</div></div>{{#unless this.isAdictMDT}}<div class=\\\"row\\\"><div class=\\\"col\\\">{{#if (is-equal this.instrumentType \\\"multi-dExto\\\")}}<label></label>{{else}}<label>Select Reference Anchor</label><div role=\\\"toolbar\\\" aria-label=\\\"Toolbar with button groups\\\" class=\\\"btn-toolbar mr-05\\\"><div role=\\\"group\\\" aria-label=\\\"First group\\\" class=\\\"btn-group btn-group-sm\\\"></div>{{#each this.instrumentAnchorsSorted as |anchor|}}<LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array this.instrumentId this.modelName}} @query={{hash ref_head_position=\\\"\\\" ref_anchor=anchor.number selectedAnchor=this.selectedAnchor}} class={{buttonclass anchor.number this.selectedAnchor}} {{on \\\"click\\\" (action \\\"handleAnchorSelection\\\" anchor.number)}}>- {{anchor.number}} -</LinkTo>{{/each}}</div>{{/if}}</div></div>{{else}}<div class=\\\"col\\\"><label>Select Reference Anchor</label><div role=\\\"toolbar\\\" aria-label=\\\"Toolbar with button groups\\\" class=\\\"btn-toolbar mr-05\\\"><div class=\\\"btn-group btn-group-sm\\\"></div>{{#each this.instrumentAnchorsForAdictMDT as |anchor|}}<LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array this.instrumentId this.modelName}} @query={{hash ref_head_position=\\\"\\\" ref_anchor=anchor.number selectedAnchor=this.selectedAnchor}} class={{buttonclass anchor.number this.selectedAnchor}} {{on \\\"click\\\" (action \\\"handleAnchorSelection\\\" anchor.number)}}>- {{anchor.number}} -</LinkTo>{{/each}}</div></div>{{/unless}}{{/if}}{{/if}}{{#if (is-equal this.chartDataValueName \\'Tilt\\')}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label></label></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><input type=\\\"checkbox\\\" name=\\\"zeroed\\\" checked={{this.timeRef}} disabled><label style=\\\"cursor: pointer;\\\" {{action \\'toggleProperty\\' \\'zeroed\\' on=\\\"click\\\"}}>Time reference</label></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked={{this.flip_signs}} onchange={{action \\\"setCheckboxProperty\\\" \\\"flip_signs\\\"}}><label>Flip signs</label></div></div>{{#if this.tiltMode}}{{#if (is-equal this.tiltMode 0)}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Tilt Mode: Raw</span></label></div></div>{{/if}}{{#if (is-equal this.tiltMode 1)}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Tilt Mode: Vector</span></label></div></div>{{/if}}{{#if (is-equal this.tiltMode 2)}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Tilt Mode: 2-Angle</span></label></div></div>{{/if}}{{#if (is-equal this.tiltMode 3)}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Tilt Mode: 3-Angle</span></label></div></div>{{/if}}{{#if (is-equal this.tiltMode 2)}}{{#if (is-equal this.tiltZUp 0)}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Tilt_Z_Up: +Z is UP</span></label></div></div>{{/if}}{{#if (is-equal this.tiltZUp 1)}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Tilt_Z_Up: +Y is UP</span></label></div></div>{{/if}}{{#if (is-equal this.tiltZUp 2)}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Tilt_Z_Up: +X is UP</span></label></div></div>{{/if}}{{#if (is-equal this.tiltZUp 3)}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Tilt_Z_Up: +Z is DOWN</span></label></div></div>{{/if}}{{#if (is-equal this.tiltZUp 4)}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Tilt_Z_Up: +Y is DOWN</span></label></div></div>{{/if}}{{#if (is-equal this.tiltZUp 5)}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label><span class=\\\"custom-control-indicator\\\"></span><span class=\\\"custom-control-description noselect\\\">Tilt_Z_Up: +X is DOWN</span></label></div></div>{{/if}}{{/if}}{{/if}}{{/if}}{{#if (is-equal this.chartDataValueName \\'Stretch\\')}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label></label></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><input type=\\\"checkbox\\\" name=\\\"zeroed\\\" checked={{this.timeRef}} disabled><label style=\\\"cursor: pointer;\\\" {{action \\'toggleProperty\\' \\'zeroed\\' on=\\\"click\\\"}}>Time reference</label></div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{#if (is-equal this.refHeadPosition \\'hac\\')}}<input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked disabled><label>Flip signs</label>{{else}}<input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked={{this.flip_signs}} onchange={{action \\\"setCheckboxProperty\\\" \\\"flip_signs\\\"}}><label>Flip signs</label>{{/if}}</div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><label>Select Reference Anchor</label><div role=\\\"toolbar\\\" aria-label=\\\"Toolbar with button groups\\\" class=\\\"btn-toolbar mr-05\\\"><div role=\\\"group\\\" aria-label=\\\"First group\\\" class=\\\"btn-group btn-group-sm\\\">{{#each this.instrumentAnchorsSorted as |anchor|}}<LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array this.instrumentId this.modelName}} @query={{hash ref_head_position=\\\"\\\" ref_anchor=anchor.number selectedAnchor=this.selectedAnchor}} class={{buttonclass anchor.number this.selectedAnchor}} {{on \\\"click\\\" (action \\\"handleAnchorSelection\\\" anchor.number)}}>- {{anchor.number}} -</LinkTo>{{/each}}</div></div></div></div>{{/if}}{{#if (is-equal this.chartDataValueName \\'Axial Displacement\\')}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label></label></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><input type=\\\"checkbox\\\" name=\\\"zeroed\\\" checked={{this.timeRef}} disabled><label style=\\\"cursor: pointer;\\\" {{action \\'toggleProperty\\' \\'zeroed\\' on=\\\"click\\\"}}>Time reference</label></div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{#if (is-equal this.refHeadPosition \\'hac\\')}}<input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked disabled><label>Flip signs</label>{{else}}<input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked={{this.flip_signs}} onchange={{action \\\"setCheckboxProperty\\\" \\\"flip_signs\\\"}}><label>Flip signs</label>{{/if}}</div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><label>Select Reference Anchor</label><div role=\\\"toolbar\\\" aria-label=\\\"Toolbar with button groups\\\" class=\\\"btn-toolbar mr-05\\\"><div role=\\\"group\\\" aria-label=\\\"First group\\\" class=\\\"btn-group btn-group-sm\\\">{{#each this.instrumentAnchorsSorted as |anchor|}}<LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array this.instrumentId this.modelName}} @query={{hash ref_head_position=\\\"\\\" ref_anchor=anchor.number selectedAnchor=this.selectedAnchor}} class={{buttonclass anchor.number this.selectedAnchor}} {{on \\\"click\\\" (action \\\"handleAnchorSelection\\\" anchor.number)}}>- {{anchor.number}} -</LinkTo>{{/each}}</div></div></div></div>{{/if}}{{#if (is-equal this.chartDataValueName \\'Velocity\\')}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label></label></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><label></label></div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{#if (is-equal this.refHeadPosition \\'hac\\')}}<input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked disabled><label>Flip signs</label>{{else}}<input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked={{this.flip_signs}} onchange={{action \\\"setCheckboxProperty\\\" \\\"flip_signs\\\"}}><label>Flip signs</label>{{/if}}</div></div>{{#unless this.isAdictMDT}}<div class=\\\"row\\\"><div class=\\\"col\\\">{{#if (is-equal this.instrumentType \\\"multi-dExto\\\")}}<label></label>{{else}}<label>Select Reference Anchor</label><div role=\\\"toolbar\\\" aria-label=\\\"Toolbar with button groups\\\" class=\\\"btn-toolbar mr-05\\\"></div><div role=\\\"group\\\" aria-label=\\\"First group\\\" class=\\\"btn-group btn-group-sm\\\">{{#each this.instrumentAnchorsSorted as |anchor|}}<LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array this.instrumentId this.modelName}} @query={{hash ref_head_position=\\\"\\\" ref_anchor=anchor.number selectedAnchor=this.selectedAnchor}} class={{buttonclass anchor.number this.selectedAnchor}} {{on \\\"click\\\" (action \\\"handleAnchorSelection\\\" anchor.number)}}>- {{anchor.number}} -</LinkTo>{{/each}}</div>{{/if}}</div></div>{{else}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label>Select Reference Anchor</label><div role=\\\"toolbar\\\" aria-label=\\\"Toolbar with button groups\\\" class=\\\"btn-toolbar mr-05\\\"><div role=\\\"group\\\" aria-label=\\\"First group\\\" class=\\\"btn-group btn-group-sm\\\">{{#if (eq @instrument.referenceAnchor anchor.number)}}<LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array this.instrumentId this.modelName}} @query={{hash ref_head_position=\\\"\\\" ref_anchor=anchor.number selectedAnchor=this.selectedAnchor}} class={{buttonclass anchor.number this.selectedAnchor}} {{on \\\"click\\\" (action \\\"handleAnchorSelection\\\" anchor.number)}}>- {{anchor.number}} -</LinkTo>{{else}}<LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array this.instrumentId this.modelName}} @query={{hash ref_head_position=\\\"\\\" ref_anchor=anchor.number selectedAnchor=this.selectedAnchor}} class={{buttonclass anchor.number this.selectedAnchor}} {{on \\\"click\\\" (action \\\"handleAnchorSelection\\\" anchor.number)}}>- {{anchor.number}} -</LinkTo>{{/if}}</div></div></div></div>{{/unless}}{{/if}}{{#if (is-equal this.chartDataValueName \\'Acceleration\\')}}<div class=\\\"row\\\"><div class=\\\"col\\\"><label></label></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><label></label></div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{#if (is-equal this.refHeadPosition \\'hac\\')}}<input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked disabled><label>Flip signs</label>{{else}}<input type=\\\"checkbox\\\" name=\\\"flip_signs\\\" checked={{this.flip_signs}} onchange={{action \\\"setCheckboxProperty\\\" \\\"flip_signs\\\"}}><label>Flip signs</label>{{/if}}</div></div><div class=\\\"row\\\"><div class=\\\"col\\\">{{#if (is-equal this.instrumentType \\\"multi-dExto\\\")}}<label></label>{{else}}<label>Select Reference Anchor</label><div role=\\\"toolbar\\\" aria-label=\\\"Toolbar with button groups\\\" class=\\\"btn-toolbar mr-05\\\"><div role=\\\"group\\\" aria-label=\\\"First group\\\" class=\\\"btn-group btn-group-sm\\\">{{#each this.instrumentAnchorsSorted as |anchor|}}<LinkTo @route=\\\"temporal-graphs.temporal-graph\\\" @models={{array this.instrumentId this.modelName}} @query={{hash ref_head_position=\\\"\\\" ref_anchor=anchor.number selectedAnchor=this.selectedAnchor}} class={{buttonclass anchor.number this.selectedAnchor}} {{on \\\"click\\\" (action \\\"handleAnchorSelection\\\" anchor.number)}}>- {{anchor.number}} -</LinkTo>{{/each}}</div></div>{{/if}}</div></div>{{/if}}{{/unless}}</td></div></div></div><div class=\\\"row\\\"><div class=\\\"col-sm-12\\\">{{outlet}}</div></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/temporal-graphs.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('<div class=\\\"spinner-yp-logo v_centered_abs_pos h_centered_abs_pos mt-2\\\"><img src=\\\"/assets/images/logo-no-text.png\\\" class=\\\"d-block mx-auto\\\"></div>', { moduleName: 'geotechnical-data-platform-new/templates/temporal-graphs/temporal-graph-loading.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{outlet}}<div class=\\\"mb-1\\\"><div class=\\\"row\\\"><div class=\\\"col-md-12\\\">{{#if (eq @model.instrument.instrumentTypeID 1)}}{{#if (eq @model.instrument.subModel \\\"B\\\")}}{{extoBMultiInstrument/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData zoomTempData=@model.zoomTempData instrument=@model.instrument chartData=@model.graphs flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{else}}{{pack/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 2)}}{{cable/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData linear=this.linear calib=this.calib depth=this.depth instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 3)}}{{rebar/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData linear=this.linear calib=this.calib depth=this.depth instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 4)}}{{pack/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 5)}}{{dconv/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData linear=this.linear calib=this.calib depth=this.depth instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 6)}}{{tilt/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData tiltMode=@model.tiltMode vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData linear=this.linear calib=this.calib depth=this.depth instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 7)}}{{slough/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData linear=this.linear calib=this.calib depth=this.depth instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 8)}}{{thermo/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData linear=this.linear calib=this.calib depth=this.depth instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 9)}}{{piezo/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData linear=this.linear calib=this.calib depth=this.depth instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 10)}}{{hid/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData linear=this.linear calib=this.calib depth=this.depth instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 11)}}{{pack/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 12)}}{{wire/chartjs-temporal-line-chart port=this.port fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData linear=this.linear calib=this.calib depth=this.depth instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 13)}}{{adict/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData linear=this.linear calib=this.calib depth=this.depth instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 14)}}Analog{{/if}}{{#if (eq @model.instrument.instrumentTypeID 15)}}{{vibe/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData linear=this.linear calib=this.calib depth=this.depth instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit chart_type=\\'frequency\\' updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 16)}}{{micro/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData linear=this.linear calib=this.calib depth=this.depth instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 17)}}{{rebarv2/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData linear=this.linear calib=this.calib depth=this.depth instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 19)}}{{dppc/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData linear=this.linear calib=this.calib depth=this.depth instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}{{#if (eq @model.instrument.instrumentTypeID 20)}}{{multiDExto/chartjs-temporal-line-chart fullRangeChartData=@model.fullRangeData zoomChartData=@model.zoomData vibeEvents=@model.vibeEvents zoomTempData=@model.zoomTempData linear=this.linear calib=this.calib depth=this.depth instrument=@model.instrument chartData=@model.graphs seismicEvents=@model.seismicEvents blastEvents=@model.blastEvents flipSigns=this.flip_signs autoAxis=this.auto_scale axis_min=this.y_min axis_max=this.y_max advancedYAxisUnit=this.advancedYAxisUnit updateProperties=(action \\\"updateProperties\\\") getQueryParams=(action \\\"getQueryParams\\\") setChart=(action \\\"setChart\\\") setData=(action \\\"setData\\\")}}{{/if}}</div></div></div><div class=\\\"mb-1\\\"></div>', { moduleName: 'geotechnical-data-platform-new/templates/temporal-graphs/temporal-graph.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{outlet}}<div style=\\\"padding-top: 1rem;\\\" class=\\\"container-fluid\\\">{{bread-crumbs}}<div class=\\\"mt-1\\\">{{#if this.permissionError}}<table style=\\\"width: 100%; margin-bottom: 1rem;\\\" id=\\\"instrumentEditError\\\"><tr class=\\\"details\\\"><td colspan=\\\"6\\\" style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"td_details error\\\"><label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You do not have sufficent permissions.</label></td></tr></table>{{/if}}<table style=\\\"width: 100%; margin-bottom: 1rem;\\\" hidden id=\\\"instrumentEditError\\\"><tr class=\\\"details\\\"><td colspan=\\\"6\\\" style=\\\"padding-top: 1rem; padding-bottom: 1rem;\\\" class=\\\"td_details error\\\"><label id=\\\"error_message_details\\\" class=\\\"col-12 col-form-label\\\">You do not have sufficent permissions.</label></td></tr></table><h4>Events</h4></div><div class=\\\"row\\\"><div class=\\\"col-md-3\\\">{{filter-text-input-events searchValue=this.search}}</div><div class=\\\"col-sm-2\\\"><div class=\\\"form-group\\\"><label>Rows</label><div class=\\\"dropdown\\\">{{page-item-count page_size=this.page_size page_type=\\'vibration-events\\' model=@model.vibrationEvents}}</div></div></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@model.vibrationEvents.meta routeLink=\\'vibration-events\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div style=\\\"overflow: auto; display: inline-block; max-width: 1300px;;\\\" class=\\\"row parent\\\"><div class=\\\"col-md-3\\\"><table class=\\\"table table-striped responsive-table child\\\"><thead><tr><th>Timestamp</th><th>Instrument</th>{{#each this.headerTitles as |title|}}<th>{{title}}</th>{{/each}}</tr></thead><tbody>{{#each @model.vibrationEvents as |tableRow|}}<tr class=\\\"horizontal-text {{active-class (get this.isVisibleRowDetails tableRow.id)}}\\\"><td>{{tableRow.timestamp}}</td><td><LinkTo @route=\\\"edit-instrument\\\" @model={{tableRow.instrument}}>{{tableRow.instrument}}</LinkTo></td><td>{{tableRow.ch1}}</td><td>{{tableRow.trigger01}}</td><td>{{tableRow.frequency01}}</td><td>{{tableRow.amplitude01}}</td><td>{{tableRow.ppv01}}</td><td>{{tableRow.ppa01}}</td><td>{{tableRow.duration01}}</td><td>{{tableRow.ch2}}</td><td>{{tableRow.trigger02}}</td><td>{{tableRow.frequency02}}</td><td>{{tableRow.amplitude02}}</td><td>{{tableRow.ppv02}}</td><td>{{tableRow.ppa02}}</td><td>{{tableRow.duration02}}</td><td>{{tableRow.ch3}}</td><td>{{tableRow.trigger03}}</td><td>{{tableRow.frequency03}}</td><td>{{tableRow.amplitude03}}</td><td>{{tableRow.ppv03}}</td><td>{{tableRow.ppa03}}</td><td>{{tableRow.duration03}}</td><td>{{tableRow.ch4}}</td><td>{{tableRow.trigger04}}</td><td>{{tableRow.frequency04}}</td><td>{{tableRow.amplitude04}}</td><td>{{tableRow.ppv04}}</td><td>{{tableRow.ppa04}}</td><td>{{tableRow.duration04}}</td></tr>{{/each}}</tbody></table></div></div><div class=\\\"row\\\"><div class=\\\"col\\\"><div class=\\\"pull-right\\\">{{pagination-links meta=@model.vibrationEvents.meta routeLink=\\'vibration-events\\' extraQueryParams=(hash paginate_from_zero=\\'\\') class=\\\"text-md-right\\\"}}</div></div></div><div class=\\\"pb-1\\\"></div></div>', { moduleName: 'geotechnical-data-platform-new/templates/vibration-events.hbs' });\n","import DS from 'ember-data';\n\nexport default DS.Transform.extend({\n  deserialize(serialized) {\n    return serialized; //do nothing\n  },\n\n  serialize(deserialized) {\n    if(deserialized == null) {\n      deserialized = false;\n    }\n    return deserialized; // returns value or null\n  }\n});","import { deprecate } from '@ember/debug';\n\nimport { DateTransform } from '@ember-data/serializer/transform';\n\nexport default class DeprecatedDateTransform extends DateTransform {\n  constructor(...args) {\n    super(...args);\n    deprecate(\n      \"You are relying on ember-data auto-magically installing the DateTransform. Use `export { DateTransform as default } from '@ember-data/serializer/transform';` in app/transforms/date.js instead\",\n      false,\n      {\n        id: 'ember-data:deprecate-legacy-imports',\n        for: 'ember-data',\n        until: '6.0',\n        since: {\n          enabled: '5.2',\n          available: '4.13',\n        },\n      }\n    );\n  }\n}\n","import DS from 'ember-data';\n\nexport default DS.Transform.extend({\n  deserialize(serialized) {\n    return serialized; //do nothing\n  },\n\n  serialize(deserialized) {\n    if(deserialized === \"\") {\n      deserialized = null;\n    }\n    return deserialized; // returns value or null\n  }\n});","import { deprecate } from '@ember/debug';\n\nimport { NumberTransform } from '@ember-data/serializer/transform';\nexport default class DeprecatedNumberTransform extends NumberTransform {\n  constructor(...args) {\n    super(...args);\n    deprecate(\n      \"You are relying on ember-data auto-magically installing the NumberTransform. Use `export { NumberTransform as default } from '@ember-data/serializer/transform';` in app/transforms/number.js instead\",\n      false,\n      {\n        id: 'ember-data:deprecate-legacy-imports',\n        for: 'ember-data',\n        until: '6.0',\n        since: {\n          enabled: '5.2',\n          available: '4.13',\n        },\n      }\n    );\n  }\n}\n","import Transform from '@ember-data/serializer/transform';\n\nexport default class ObjectTransform extends Transform {\n  deserialize(serialized) {\n    return serialized || {};\n  }\n\n  serialize(deserialized) {\n    return deserialized || {};\n  }\n}","import { deprecate } from '@ember/debug';\n\nimport { StringTransform } from '@ember-data/serializer/transform';\n\nexport default class DeprecatedStringTransform extends StringTransform {\n  constructor(...args) {\n    super(...args);\n    deprecate(\n      \"You are relying on ember-data auto-magically installing the StringTransform. Use `export { StringTransform as default } from '@ember-data/serializer/transform';` in app/transforms/string.js instead\",\n      false,\n      {\n        id: 'ember-data:deprecate-legacy-imports',\n        for: 'ember-data',\n        until: '6.0',\n        since: {\n          enabled: '5.2',\n          available: '4.13',\n        },\n      }\n    );\n  }\n}\n","import DS from 'ember-data';\n\nexport default DS.Transform.extend({\n  deserialize(serialized) {\n    return serialized; //do nothing\n  },\n\n  serialize(deserialized) {\n    if(deserialized === null) {\n      deserialized = \"\";\n    }\n    return deserialized; // returns value or null\n  }\n});","export { default } from 'ember-uploader/uploaders/s3';\n","export { default } from 'ember-uploader/uploaders/uploader';\n","\nexport function getAlertEvaluationTypesDictionary(typeCode) {\n    const dictionary = {\n        \"DHQ_NO_DATA\": \"No Data Detection\",\n        \"DHQ_FLATLINE\": \"Flatlined Data Detection\",\n        \"DHQ_SPIKE\": \"Spiked Data Detection\",\n        \"OOR_ARBITRARY\": \"Out of Range to Arbitrary Value Detection\",\n        \"OOR_REFERENCE\": \"Out of Range to Reference Reading Detection\",\n        \"ROC_ROLLING\": \"Rolling Window Detection\",\n        \"DISP_TEMP_CORRELATION\": \"Displacement & Temperation Correlation Detection\",\n    };\n  return dictionary[typeCode];\n}\n","// app/utils/api-config.js\nimport ENV from 'geotechnical-data-platform-new/config/environment';\nfunction isValid(value) {\n  return (\n    value !== undefined &&\n    value !== null &&\n    typeof value === \"string\" &&\n    !value.startsWith(\"__\")\n  );\n}\nexport function getApiConfig() {\n  const runtime = window.RUNTIME_CONFIG || {};\n  return {\n    protocol: isValid(runtime.API_PROTOCOL) ? runtime.API_PROTOCOL : ENV.API_PROTOCOL,\n    host:     isValid(runtime.API_URL)      ? runtime.API_URL      : ENV.API_URL,\n    port:     isValid(runtime.API_PORT)     ? runtime.API_PORT     : ENV.API_PORT,\n  };\n}\n\nexport function getApiBaseUrl() {\n  const { protocol, host, port } = getApiConfig();\n  return `${protocol}${host}:${port}`;\n}\n\nexport function getApiBasePort() {\n  const { protocol, host, port } = getApiConfig();\n  return `${port}`;\n}","export default {\n\n    // ===== Core =====\n    vpBlue: '#4A6A9C',\n\n    // ===== Blue Family (1–40) =====\n    blue1:  '#001f3f',\n    blue2:  '#003366',\n    blue3:  '#004080',\n    blue4:  '#0059b3',\n    blue5:  '#007bff',\n    blue6:  '#1a8cff',\n    blue7:  '#3399ff',\n    blue8:  '#4da6ff',\n    blue9:  '#66b3ff',\n    blue10: '#80c1ff',\n    blue11: '#99ceff',\n    blue12: '#b3daff',\n    blue13: '#cce6ff',\n    blue14: '#e6f2ff',\n    blue15: '#f0f8ff',\n    blue16: '#0a192f',\n    blue17: '#112d4e',\n    blue18: '#1b3a6b',\n    blue19: '#254a91',\n    blue20: '#2e5cb8',\n    blue21: '#3a6fdc',\n    blue22: '#4a82f0',\n    blue23: '#6a9cff',\n    blue24: '#8ab6ff',\n    blue25: '#aacfff',\n    blue26: '#003f88',\n    blue27: '#00509d',\n    blue28: '#0077b6',\n    blue29: '#0096c7',\n    blue30: '#00b4d8',\n    blue31: '#48cae4',\n    blue32: '#90e0ef',\n    blue33: '#ade8f4',\n    blue34: '#caf0f8',\n    blue35: '#edf6ff',\n    blue36: '#14213d',\n    blue37: '#1f4068',\n    blue38: '#274c77',\n    blue39: '#3a5a9b',\n    blue40: '#4a6fa5',\n\n    // ===== Beige Family (1–30) =====\n    beige1: '#F1ECE6',\n    beige2: '#F6F0D7',\n    beige3: '#e8d8c3',\n    beige4: '#dcc9b6',\n    beige5: '#d0baa9',\n    beige6: '#c4ab9c',\n    beige7: '#b89c8f',\n    beige8: '#ac8d82',\n    beige9: '#a07e75',\n    beige10:'#947068',\n    beige11:'#88615b',\n    beige12:'#7c524e',\n    beige13:'#704341',\n    beige14:'#644034',\n    beige15:'#5a382d',\n    beige16:'#f5efe6',\n    beige17:'#ede0d4',\n    beige18:'#e6ccb2',\n    beige19:'#ddb892',\n    beige20:'#d4a373',\n    beige21:'#c19a6b',\n    beige22:'#b08968',\n    beige23:'#a47148',\n    beige24:'#8b5e3c',\n    beige25:'#7f5539',\n    beige26:'#fdf6e3',\n    beige27:'#f5e1c8',\n    beige28:'#eed6b4',\n    beige29:'#e7caa1',\n    beige30:'#e0bf8d',\n\n    // ===== Orange Family (1–30) =====\n    orange1: '#fd7e14',\n    orange2: '#FF7444',\n    orange3: '#ff6f00',\n    orange4: '#ff8c00',\n    orange5: '#ffa500',\n    orange6: '#ffb347',\n    orange7: '#ffc266',\n    orange8: '#ffd580',\n    orange9: '#ffe0b3',\n    orange10:'#fff0d9',\n    orange11:'#e85d04',\n    orange12:'#dc2f02',\n    orange13:'#f48c06',\n    orange14:'#faa307',\n    orange15:'#ffba08',\n    orange16:'#ff8800',\n    orange17:'#ff9500',\n    orange18:'#ffaa00',\n    orange19:'#ffbf00',\n    orange20:'#ffd000',\n    orange21:'#ff9f1c',\n    orange22:'#ffbf69',\n    orange23:'#ffdab9',\n    orange24:'#f77f00',\n    orange25:'#e36414',\n    orange26:'#fb8500',\n    orange27:'#ff6d00',\n    orange28:'#f3722c',\n    orange29:'#f9844a',\n    orange30:'#f8961e',\n\n    // ===== Yellow Family (1–25) =====\n    yellow1:'#ffc107',\n    yellow2:'#ffca3a',\n    yellow3:'#ffd60a',\n    yellow4:'#ffe066',\n    yellow5:'#fff3b0',\n    yellow6:'#ffdd00',\n    yellow7:'#ffd000',\n    yellow8:'#ffea00',\n    yellow9:'#fff200',\n    yellow10:'#fff9c4',\n    yellow11:'#ffeb3b',\n    yellow12:'#fdd835',\n    yellow13:'#fbc02d',\n    yellow14:'#f9a825',\n    yellow15:'#f57f17',\n    yellow16:'#fff176',\n    yellow17:'#fff59d',\n    yellow18:'#fff9c4',\n    yellow19:'#fffde7',\n    yellow20:'#ffe082',\n    yellow21:'#ffd54f',\n    yellow22:'#ffca28',\n    yellow23:'#ffc107',\n    yellow24:'#ffb300',\n    yellow25:'#ffa000',\n\n    // ===== Green Family (1–30) =====\n    green1:'#17a2b8',\n    green2:'#94A378',\n    green3:'#2a9d8f',\n    green4:'#3a5a40',\n    green5:'#4caf50',\n    green6:'#66bb6a',\n    green7:'#81c784',\n    green8:'#a5d6a7',\n    green9:'#c8e6c9',\n    green10:'#e8f5e9',\n    green11:'#1b4332',\n    green12:'#2d6a4f',\n    green13:'#40916c',\n    green14:'#52b788',\n    green15:'#74c69d',\n    green16:'#95d5b2',\n    green17:'#b7e4c7',\n    green18:'#d8f3dc',\n    green19:'#006400',\n    green20:'#228b22',\n    green21:'#32cd32',\n    green22:'#7fff00',\n    green23:'#00ff7f',\n    green24:'#98fb98',\n    green25:'#90ee90',\n    green26:'#14532d',\n    green27:'#166534',\n    green28:'#15803d',\n    green29:'#16a34a',\n    green30:'#22c55e',\n\n    // ===== Red Family (1–25) =====\n    red1:'#D25353',\n    red2:'#dc3545',\n    red3:'#ff4d4d',\n    red4:'#ff6666',\n    red5:'#ff8080',\n    red6:'#ff9999',\n    red7:'#ffb3b3',\n    red8:'#ffcccc',\n    red9:'#ffe6e6',\n    red10:'#fff2f2',\n    red11:'#7f1d1d',\n    red12:'#991b1b',\n    red13:'#b91c1c',\n    red14:'#dc2626',\n    red15:'#ef4444',\n    red16:'#f87171',\n    red17:'#fca5a5',\n    red18:'#fecaca',\n    red19:'#fee2e2',\n    red20:'#fef2f2',\n    red21:'#ff0033',\n    red22:'#cc0033',\n    red23:'#990033',\n    red24:'#660033',\n    red25:'#330033',\n    //===== Purple Family (1–25)\n    purple1:'#2e1065',\n    purple2:'#3b0a91',\n    purple3:'#4c1d95',\n    purple4:'#5b21b6',\n    purple5:'#6d28d9',\n    purple6:'#7c3aed',\n    purple7:'#8b5cf6',\n    purple8:'#a78bfa',\n    purple9:'#c4b5fd',\n    purple10:'#ddd6fe',\n    purple11:'#ede9fe',\n    purple12:'#f5f3ff',\n    purple13:'#581c87',\n    purple14:'#6b21a8',\n    purple15:'#7e22ce',\n    purple16:'#9333ea',\n    purple17:'#a855f7',\n    purple18:'#c084fc',\n    purple19:'#d8b4fe',\n    purple20:'#f3e8ff',\n    purple21:'#4a148c',\n    purple22:'#6a1b9a',\n    purple23:'#8e24aa',\n    purple24:'#ab47bc',\n    purple25:'#ce93d8',\n    //===== Teal Family (1–25)\n    teal1:'#042f2e',\n    teal2:'#064e3b',\n    teal3:'#065f46',\n    teal4:'#047857',\n    teal5:'#059669',\n    teal6:'#10b981',\n    teal7:'#34d399',\n    teal8:'#6ee7b7',\n    teal9:'#a7f3d0',\n    teal10:'#d1fae5',\n    teal11:'#f0fdfa',\n    teal12:'#134e4a',\n    teal13:'#115e59',\n    teal14:'#0f766e',\n    teal15:'#0d9488',\n    teal16:'#14b8a6',\n    teal17:'#2dd4bf',\n    teal18:'#5eead4',\n    teal19:'#99f6e4',\n    teal20:'#ccfbf1',\n    teal21:'#004d40',\n    teal22:'#00695c',\n    teal23:'#00796b',\n    teal24:'#00897b',\n    teal25:'#26a69a',\n    //===== Cyan Family (1–25)\n    cyan1:'#083344',\n    cyan2:'#0e7490',\n    cyan3:'#0891b2',\n    cyan4:'#06b6d4',\n    cyan5:'#22d3ee',\n    cyan6:'#67e8f9',\n    cyan7:'#a5f3fc',\n    cyan8:'#cffafe',\n    cyan9:'#ecfeff',\n    cyan10:'#164e63',\n    cyan11:'#155e75',\n    cyan12:'#0e7490',\n    cyan13:'#0284c7',\n    cyan14:'#0369a1',\n    cyan15:'#075985',\n    cyan16:'#0c4a6e',\n    cyan17:'#22d3ee',\n    cyan18:'#38bdf8',\n    cyan19:'#7dd3fc',\n    cyan20:'#bae6fd',\n    cyan21:'#e0f2fe',\n    cyan22:'#f0f9ff',\n    cyan23:'#0097a7',\n    cyan24:'#00acc1',\n    cyan25:'#00bcd4',\n    //===== Pink Family (1–25)\n    pink1:'#500724',\n    pink2:'#831843',\n    pink3:'#9d174d',\n    pink4:'#be185d',\n    pink5:'#db2777',\n    pink6:'#ec4899',\n    pink7:'#f472b6',\n    pink8:'#f9a8d4',\n    pink9:'#fbcfe8',\n    pink10:'#fce7f3',\n    pink11:'#fff1f2',\n    pink12:'#880e4f',\n    pink13:'#ad1457',\n    pink14:'#c2185b',\n    pink15:'#d81b60',\n    pink16:'#e91e63',\n    pink17:'#f06292',\n    pink18:'#f48fb1',\n    pink19:'#f8bbd0',\n    pink20:'#fce4ec',\n    pink21:'#ff80ab',\n    pink22:'#ff4081',\n    pink23:'#f50057',\n    pink24:'#c51162',\n    pink25:'#880e4f',\n    //===== Indigo Family (1–25)\n    indigo1:'#1e1b4b',\n    indigo2:'#312e81',\n    indigo3:'#3730a3',\n    indigo4:'#4338ca',\n    indigo5:'#4f46e5',\n    indigo6:'#6366f1',\n    indigo7:'#818cf8',\n    indigo8:'#a5b4fc',\n    indigo9:'#c7d2fe',\n    indigo10:'#e0e7ff',\n    indigo11:'#eef2ff',\n    indigo12:'#3f51b5',\n    indigo13:'#3949ab',\n    indigo14:'#303f9f',\n    indigo15:'#283593',\n    indigo16:'#1a237e',\n    indigo17:'#5c6bc0',\n    indigo18:'#7986cb',\n    indigo19:'#9fa8da',\n    indigo20:'#c5cae9',\n    indigo21:'#dfe3ff',\n    indigo22:'#e8eaf6',\n    indigo23:'#f0f4ff',\n    indigo24:'#f8fbff',\n    indigo25:'#ffffff',\n    //===== Gray Family (1–25)\n    gray1:'#111111',\n    gray2:'#1f2937',\n    gray3:'#374151',\n    gray4:'#4b5563',\n    gray5:'#6b7280',\n    gray6:'#9ca3af',\n    gray7:'#d1d5db',\n    gray8:'#e5e7eb',\n    gray9:'#f3f4f6',\n    gray10:'#f9fafb',\n    gray11:'#fafafa',\n    gray12:'#e0e0e0',\n    gray13:'#bdbdbd',\n    gray14:'#9e9e9e',\n    gray15:'#757575',\n    gray16:'#616161',\n    gray17:'#424242',\n    gray18:'#303030',\n    gray19:'#212121',\n    gray20:'#0d0d0d',\n    gray21:'#f5f5f5',\n    gray22:'#eeeeee',\n    gray23:'#e0e0e0',\n    gray24:'#cccccc',\n    gray25:'#b3b3b3',\n    gray26:'#efefef',\n    gray27:'#f4f4f4'\n};","export { default } from \"ember-simple-auth/utils/inject\";\n","/**\n * Instrument ID parsing — single source of truth.\n *\n * Three formats coexist (BE accepts all):\n *\n *   9-char  legacy:           YY(2) + MM(2) + C(1)  + Type(1)        + XXX(3)\n *   10-char legacy:           YY(2) + MM(2) + CC(2) + Type(1)        + XXX(3)\n *   11-char multi-instrument: YY(2) + MM(2) + CC(2) + SubType(1 A–Z) + Type(1) + XXX(3)\n *\n * Examples:\n *   080171001    legacy 9         — YY=08 MM=01 C=7  Type=1 XXX=001\n *   2601211001   legacy 10        — YY=26 MM=01 CC=21 Type=1 XXX=001\n *   260121B1001  multi-instrument — YY=26 MM=01 CC=21 SubType=B Type=1 XXX=001\n *\n * \"Multi-instrument\" (subModel B, 11-char) IDs represent multiple identical instruments\n * merged under one parent ID. Each 7-channel hardware block is treated as its own logical\n * instrument: 1 temperature + 6 displacement channels per instrument. The user-facing\n * label for each block is `Ix` (e.g. I1, I2, I3) and channels within a block read\n * `Ix.T`, `Ix.D1` … `Ix.Dn`.\n *\n * Never parse instrument IDs with parseInt() / Number() / unary + — the new format\n * contains a letter at position 6 and integer coercion silently truncates everything\n * from the letter onward.\n */\n\nconst MULTI_INSTRUMENT_RE = /^\\d{6}[A-Z]\\d\\d{3}$/;\nconst LEGACY_10_RE        = /^\\d{6}[\\d\\w]\\d{3}$/; // 10-char with alnum at position 6\nconst LEGACY_9_RE         = /^\\d{5}[\\d\\w]\\d{3}$/; // 9-char with alnum at position 5\n\nexport function isMultiInstrumentId(id){\n    return typeof id === 'string' && MULTI_INSTRUMENT_RE.test(id);\n}\nexport function isLegacy10CharInstrumentId(id){\n    return typeof id === 'string' && id.length === 10 && LEGACY_10_RE.test(id) && !isMultiInstrumentId(id);\n}\nexport function isLegacy9CharInstrumentId(id){\n    return typeof id === 'string' && id.length === 9 && LEGACY_9_RE.test(id);\n}\nexport function isValidInstrumentId(id){\n    return isMultiInstrumentId(id) || isLegacy10CharInstrumentId(id) || isLegacy9CharInstrumentId(id);\n}\n\n// Hardware constraint: each physical sub-instrument can carry at most this many channels.\n// First channel of every sub-instrument is temperature, the remainder are displacement.\nexport const CHANNELS_PER_INSTRUMENT = 7;\n\n/**\n * Per-sub-instrument channel sizes for a given total channel count.\n * - Legacy formats: always a single sub-instrument containing all channels.\n * - Multi-instrument format: as many full 7-channel sub-instruments as fit, plus a\n *   final partial sub-instrument with whatever remains. e.g. 17 channels → [7, 7, 3].\n */\nfunction computeInstrumentSizes(format, channels){\n    if(channels <= 0){ return []; }\n    if(format !== 'multi'){ return [channels]; }\n    const sizes = [];\n    let remaining = channels;\n    while(remaining >= CHANNELS_PER_INSTRUMENT){\n        sizes.push(CHANNELS_PER_INSTRUMENT);\n        remaining -= CHANNELS_PER_INSTRUMENT;\n    }\n    if(remaining > 0){ sizes.push(remaining); }\n    return sizes;\n}\n\n/**\n * Parse an instrument ID into its components.\n * Returns null if the ID doesn't match a known format.\n *\n * Shape: { format, length, year, month, channels, instrumentCount, instrumentSizes,\n *          subModel, instrumentTypeID, sequence }\n * - channels, instrumentCount are numbers.\n * - instrumentSizes is an array of numbers, e.g. [7, 7, 3] for a 17-channel multi-instrument.\n * - subModel is null for legacy formats.\n * - format is 'multi' for 11-char IDs (subModel B), 'legacy10' / 'legacy9' for the older two.\n */\nexport function parseInstrumentId(id){\n    if(typeof id !== 'string'){ return null; }\n\n    if(isMultiInstrumentId(id)){\n        const channels = parseInt(id.substring(4, 6), 10);\n        const instrumentSizes = computeInstrumentSizes('multi', channels);\n        return {\n            format: 'multi',\n            length: 11,\n            year:     id.substring(0, 2),\n            month:    id.substring(2, 4),\n            channels,\n            instrumentCount: instrumentSizes.length,\n            instrumentSizes,\n            subModel:         id.substring(6, 7),     // uppercase letter, e.g. \"B\" (matches BE field)\n            instrumentTypeID: id.substring(7, 8),     // 1-char digit (matches BE field; same as legacy)\n            sequence:         id.substring(8, 11),\n        };\n    }\n    if(isLegacy10CharInstrumentId(id)){\n        const channels = parseInt(id.substring(4, 6), 10);\n        return {\n            format: 'legacy10',\n            length: 10,\n            year:     id.substring(0, 2),\n            month:    id.substring(2, 4),\n            channels,\n            instrumentCount: 1,\n            instrumentSizes: computeInstrumentSizes('legacy10', channels),\n            subModel:         null,\n            instrumentTypeID: id.substring(6, 7),\n            sequence:         id.substring(7, 10),\n        };\n    }\n    if(isLegacy9CharInstrumentId(id)){\n        const channels = parseInt(id.substring(4, 5), 10);\n        return {\n            format: 'legacy9',\n            length: 9,\n            year:     id.substring(0, 2),\n            month:    id.substring(2, 4),\n            channels,\n            instrumentCount: 1,\n            instrumentSizes: computeInstrumentSizes('legacy9', channels),\n            subModel:         null,\n            instrumentTypeID: id.substring(5, 6),\n            sequence:         id.substring(6, 9),\n        };\n    }\n    return null;\n}\n\n/**\n * Total channel count (CC), as a number. Includes any temperature channels.\n * Returns 0 for unrecognized IDs.\n */\nexport function getChannelsFromId(id){\n    const parsed = parseInstrumentId(id);\n    return parsed ? parsed.channels : 0;\n}\n\n/**\n * Number of sub-instruments (each up to 7 channels: 1 temp + up to 6 disp).\n * Returns 1 for legacy formats, ceil(channels/7) for multi-instrument, 0 for unrecognized IDs.\n */\nexport function getInstrumentCountFromId(id){\n    const parsed = parseInstrumentId(id);\n    return parsed ? parsed.instrumentCount : 0;\n}\n\n/**\n * Per-sub-instrument channel sizes, e.g. [7, 7, 3] for a 17-channel multi-instrument.\n * Returns [channels] for legacy, [] for unrecognized IDs.\n */\nexport function getInstrumentSizesFromId(id){\n    const parsed = parseInstrumentId(id);\n    return parsed ? parsed.instrumentSizes : [];\n}\n\n/**\n * Anchor (displacement-channel) count: channels - instrumentCount.\n * Each sub-instrument consumes one channel for temperature; the rest are displacement.\n * - Legacy 7-channel:                7 - 1 = 6 anchors  (matches old behavior)\n * - Multi-instrument 21-ch (3×7):    21 - 3 = 18 anchors\n * - Multi-instrument 17-ch (7+7+3):  17 - 3 = 14 anchors\n */\nexport function getAnchorCountFromId(id){\n    const parsed = parseInstrumentId(id);\n    if(!parsed){ return 0; }\n    return Math.max(parsed.channels - parsed.instrumentCount, 0);\n}\n\n/**\n * Synonym for getAnchorCountFromId — clearer name when the consumer cares about\n * counting displacement channels rather than physical anchor records.\n */\nexport function getDisplacementChannelCountFromId(id){\n    return getAnchorCountFromId(id);\n}\n\n/**\n * Channel kind at a given 0-based channel index in the instrument's data array.\n * Returns 'temperature' for the first channel of any sub-instrument, 'displacement' otherwise,\n * null if the index is out of range or the ID is unrecognized.\n */\nexport function getChannelKindAtIndex(id, channelIndex){\n    const sizes = getInstrumentSizesFromId(id);\n    let cursor = 0;\n    for(const size of sizes){\n        if(channelIndex === cursor){ return 'temperature'; }\n        if(channelIndex > cursor && channelIndex < cursor + size){ return 'displacement'; }\n        cursor += size;\n    }\n    return null;\n}\n\n/**\n * Validate that an array of channel data values matches the instrument's expected channel count.\n * Returns { valid, expected, actual, reason } where reason is one of:\n *   'invalid_id'  — ID didn't parse\n *   'too_few'     — fewer values than channels\n *   'too_many'    — more values than channels\n * Mirrors the BE's processing rule: any mismatch is an immediate error and downstream\n * processing should be skipped.\n */\nexport function validateChannelDataValues(id, dataValues){\n    const parsed = parseInstrumentId(id);\n    if(!parsed){\n        return { valid: false, expected: 0, actual: Array.isArray(dataValues) ? dataValues.length : 0, reason: 'invalid_id' };\n    }\n    const actual = Array.isArray(dataValues) ? dataValues.length : 0;\n    const expected = parsed.channels;\n    if(actual < expected){ return { valid: false, expected, actual, reason: 'too_few' }; }\n    if(actual > expected){ return { valid: false, expected, actual, reason: 'too_many' }; }\n    return { valid: true, expected, actual };\n}\n\n/**\n * Instrument type identifier. Always 1 character (e.g. \"1\"), matching BE's `instrumentTypeID`.\n * Returns '' for unrecognized IDs.\n */\nexport function getInstrumentTypeIDFromId(id){\n    const parsed = parseInstrumentId(id);\n    return parsed ? parsed.instrumentTypeID : '';\n}\n\n/**\n * Sub-model letter (e.g. \"B\") for multi-instrument IDs. Null for legacy.\n * Matches BE's `subModel` field on the instrument record.\n */\nexport function getSubModelFromId(id){\n    const parsed = parseInstrumentId(id);\n    return parsed ? parsed.subModel : null;\n}\n\n// ---------- Value-array helpers (BE response contract) ----------\n\n/**\n * Expected number of entries in the temperature-values response array.\n * One temperature reading per sub-instrument.\n *\n *   GET /instruments/{id}/temperature-values/ → values.length === instrumentCount\n *\n * - Legacy 7-ch:                    1 entry  (single sub-instrument)\n * - Multi-instrument 21-ch (3×7):   3 entries\n * - Multi-instrument 17-ch (7+7+3): 3 entries\n */\nexport function getExpectedTemperatureValueCount(id){\n    return getInstrumentCountFromId(id);\n}\n\n/**\n * Expected number of entries in the displacement-values response array.\n * Includes the leading 0.0 placeholder at index 0 (legacy convention preserved).\n *\n *   GET /instruments/{id}/displacement-values/ → values.length === (channels - instrumentCount) + 1\n *\n * - Legacy 7-ch:                       1 + 6 = 7 entries\n * - Multi-instrument 21-ch:            1 + 18 = 19 entries\n * - Multi-instrument 17-ch (7+7+3):    1 + 14 = 15 entries\n */\nexport function getExpectedDisplacementValueCount(id){\n    const anchor = getAnchorCountFromId(id);\n    return anchor > 0 ? anchor + 1 : 0;\n}\n\n/**\n * For a displacement-values array index (0 is the placeholder, 1..N are real readings),\n * return the 1-based sub-instrument number that reading belongs to. Returns 0 for the\n * placeholder itself and null if the index is out of range or the ID is unrecognized.\n *\n * Honors partial last sub-instruments (e.g. 17-channel sizes [7,7,3] → I3 only contains\n * 2 displacement readings, not 6).\n */\nexport function getInstrumentForDisplacementValueIndex(id, dispIndex){\n    if(dispIndex === 0){ return 0; } // placeholder\n    const sizes = getInstrumentSizesFromId(id);\n    if(!sizes.length || dispIndex < 0){ return null; }\n    let cursor = 1; // displacement readings start at index 1\n    for(let g = 0; g < sizes.length; g++){\n        const dispCountInInstrument = Math.max(sizes[g] - 1, 0); // 1 temp per sub-instrument\n        if(dispIndex >= cursor && dispIndex < cursor + dispCountInInstrument){\n            return g + 1;\n        }\n        cursor += dispCountInInstrument;\n    }\n    return null;\n}\n\n// ---------- Deprecated aliases ----------\n// Keep old names exported so any external call-site we missed keeps working.\n// New code should use the names above. Remove these once the codebase is fully migrated.\nexport const CHANNELS_PER_GROUP                 = CHANNELS_PER_INSTRUMENT;\nexport const isGroupedInstrumentId              = isMultiInstrumentId;\nexport const getGroupCountFromId                = getInstrumentCountFromId;\nexport const getGroupSizesFromId                = getInstrumentSizesFromId;\nexport const getGroupForDisplacementValueIndex  = getInstrumentForDisplacementValueIndex;\n","export { default } from \"ember-simple-auth/utils/is-fastboot\";\n","export { default } from \"ember-simple-auth/utils/location\";\n","export { default } from \"ember-simple-auth/utils/objects-are-equal\";\n","\n","define('geotechnical-data-platform-new/config/environment', [], function() {\n  var prefix = 'geotechnical-data-platform-new';\ntry {\n  var metaName = prefix + '/config/environment';\n  var rawConfig = document.querySelector('meta[name=\"' + metaName + '\"]').getAttribute('content');\n  var config = JSON.parse(decodeURIComponent(rawConfig));\n\n  var exports = { 'default': config };\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n  return exports;\n}\ncatch(err) {\n  throw new Error('Could not read config from meta tag with name \"' + metaName + '\".');\n}\n\n});\n","\n          if (!runningTests) {\n            require(\"geotechnical-data-platform-new/app\")[\"default\"].create({\"name\":\"geotechnical-data-platform-new\",\"version\":\"0.0.0+91b07e47\"});\n          }\n        \n"],"names":["ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","instrument_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","AlertEventAdapter","ApplicationAdapter","buildURL","modelName","id","snapshot","requestType","query","host","_exports","default","AlertAdapter","ApplicationAdapter","buildURL","modelName","id","snapshot","requestType","query","host","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","ajax","updateRecord","alert","deleteRecord","updateChannels","alertId","channels","contentType","_exports","default","DS","JSONAPIAdapter","extend","host","getApiBaseUrl","session","service","buildURL","type","id","record","_super","headers","computed","Accept","withCredentials","Authorization","localStorage","token","query","store","then","payload","data","Array","isArray","handleResponse","status","requestData","url","includes","isAuthenticated","invalidate","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","instrument_id","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","instrument_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","instrument_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","instrument_id","updateRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","deleteRecord","CalibrationCalibrationProfileAdapter","ApplicationAdapter","handleResponse","status","headers","payload","requestData","error","errors","title","detail","_exports","default","CalibrationTypeAdapter","ApplicationAdapter","handleResponse","status","headers","payload","requestData","error","errors","title","detail","_exports","default","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","instrument_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","instrument_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","instrument_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","instrument_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","gateway_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","instrument_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","instrument_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","gateway_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","gateway_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","gateway_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","instrument_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","search","page_size","page","_super","arguments","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","instrument_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","logViewer_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","PackValidationTypeAdapter","ApplicationAdapter","handleResponse","status","headers","payload","requestData","error","errors","title","detail","_exports","default","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","gateway_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","gateway_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","RigProfileAdapter","ApplicationAdapter","handleResponse","status","headers","payload","requestData","error","errors","title","detail","_exports","default","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","gateway_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","instrument_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","instrument_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","gateway_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","gateway_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","instrument_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","gateway_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","gateway_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","instrument_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","undefined","vendorType","ApplicationAdapter","extend","buildURL","modelName","id","snapshot","requestType","query","host","pluralize","gateway_id","createRecord","store","type","data","serializer","serializerFor","serializeIntoHash","includeId","url","adapterOptions","replace","ajax","updateRecord","deleteRecord","registerDeprecationHandler","message","options","next","id","App","Application","constructor","args","_defineProperty","config","modulePrefix","podModulePrefix","Resolver","_exports","default","loadInitializers","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","BasicAuth","_exports","default","_class","Base","constructor","args","_descriptor","_descriptor2","_descriptor3","restore","data","promise","Promise","resolve","reject","invalidate","access","localStorage","removeItem","logoutUrl","getApiBaseUrl","refreshToken","getItem","replace","api","fetch","method","headers","body","JSON","stringify","type","attributes","code","error","console","warn","authenticate","provider","options","jwtExchangeUrl","credentials","base64","encode","username","password","jwtResponse","ok","errorText","text","refresh","json","setItem","licensesUrl","licenseResponse","expirationTime","set","licence","isValid","limit","modules","ex","userProfileURL","userProfileResponse","userProfileData","userProfileService","loadFromServer","sessionData","auth","user","userProfile","prototype","service","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","JwtAuthenticator","_exports","default","_class","BaseAuthenticator","constructor","args","_descriptor","_descriptor2","_descriptor3","restore","data","access","licensesUrl","getApiBaseUrl","response","api","fetch","method","headers","Authorization","isValid","limit","modules","licence","ok","json","attributes","console","warn","invalidate","localStorage","removeItem","logoutUrl","refreshToken","getItem","replace","body","JSON","stringify","type","code","error","authenticate","options","loginUrl","loginResponse","username","password","err","catch","refresh","setItem","licenseResponse","profileUrl","userProfileResponse","errorText","text","userProfileData","userProfileService","loadFromServer","sessionData","auth","user","provider","userProfile","prototype","service","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","$","RSVP","Ember","CustomAuthenticator","_exports","default","_class","Base","constructor","args","_descriptor","restore","data","promise","Promise","resolve","reject","authenticate","auth","ajax","type","username","password","success","error","then","localStorage","setItem","url","getApiBaseUrl","endsWith","login","base64","encode","response","api","fetch","method","headers","Authorization","token","ok","expirationTime","set","licence","isValid","limit","modules","json","attributes","ex","user","text","er","JSON","parse","hasOwnProperty","detail","prototype","service","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","OAuthJwtAuthenticator","_exports","default","_class","BaseAuthenticator","constructor","args","_descriptor","_descriptor2","_descriptor3","_descriptor4","restore","data","access","licensesUrl","getApiBaseUrl","response","api","fetch","method","headers","Authorization","isValid","limit","modules","licence","ok","json","attributes","console","warn","authenticate","options","provider","providerConfig","oauthConfig","loadProviderConfig","ENV","torii","providers","clientId","client_id","tenantId","tenant_id","redirectUri","redirect_uri","scope","responseType","authResponse","open","loginUrl","loginResponse","body","JSON","stringify","code","authorizationCode","err","catch","error","refresh","localStorage","setItem","licenseResponse","profileUrl","profileResponse","userProfileData","sessionData","auth","userProfile","invalidate","removeItem","logoutUrl","refreshToken","getItem","replace","type","prototype","service","Component","extend","router","service","init","_super","arguments","actions","createAlert","transitionTo","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","_spatialChart","anchorDistances","computed","firstObject","get","dataValuesCount","length","values","anchors","content","map","anchor","modelName","splice","anchorMidDistances","midDistances","unshift","i","push","toFixed","spatialXValues","spatialChartLinesData","zoomChartData","xValues","item","key","timestamp","v","idx","x","y","filter","pt","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","seismicEventsChartData","event","type","momentMagnitude","blastEventsChartData","tonnes","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","_super","arguments","spatialLinesData","Promise","resolve","then","instrument","toString","forEach","id","yAxisTitle","_buildSpatialChart","linesData","canvas","element","querySelector","instrumentLength","e","anchorXValues","lineDatasets","line","label","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","tension","parsing","_isLine","anchorDatasets","dist","String","showLine","_isRef","datasets","noDataPlugin","afterDraw","chart","hasData","ds","hidden","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","anchorDotsPlugin","xScale","scales","yArea","px","getPixelForValue","beginPath","arc","Math","PI","fill","crosshairX","crosshairPlugin","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","legendTooltipEl","highlightedIndex","lastTooltipIdx","buildSpatialLegendItems","indexOf","color","join","highlightLine","skipUpdate","update","restoreLines","attachSpatialLegendHandlers","el","onmouseover","target","closest","parseInt","dataset","onmouseout","initSpatialLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","distToSegment","py","x1","y1","x2","y2","dx","dy","lenSq","t","max","min","projX","projY","ex","ey","sqrt","findClosestLine","mouseX","mouseY","closestIdx","closestDist","Infinity","getDatasetMeta","pts","j","p1","p2","datasetIndex","pixelDist","updateSpatialTooltip","pointerEvents","activeIdx","valuesHtml","anchorColor","spatialChart","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","onHover","display","text","size","afterBuildTicks","axis","visibleAnchors","ticks","callback","val","toLocaleString","plugins","legend","tooltip","enabled","parentElement","origXMin","origXMax","addEventListener","preventDefault","rect","getBoundingClientRect","yScale","factor","deltaY","cursorX","getValueForPixel","clientX","cursorY","clientY","passive","panStartX","panStartY","panXMin","panXMax","panYMin","panYMax","cursor","xPxRange","yPxRange","onPanEnd","set","willDestroyElement","destroy","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","yAxisUnit","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","isMDT","computed","vendor","instrument","vendorType","includes","seismicEventsChartData","map","event","type","x","timestamp","momentMagnitude","blastEventsChartData","tonnes","anchorDistances","anchors","arr","content","anchor","pop","modelName","midPoints","ctr","length","toFixed","unshift","fullRangeChartLinesData","fullRangeChartData","isStrain","lines","chartLineName","chartLineIndex","key","values","item","vals","Array","isArray","y","zoomTempData","push","yAxis","hidden","rawValues","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_buildYAxisTitle","_chartData","axisName","units","didInsertElement","Promise","resolve","then","toString","chartData","forEach","id","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","filter","v","xMin","Math","min","xMax","max","datasets","line","i","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","pt","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","e","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","val","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewInstrumentObject","_this","set","instrumentStiffness","elasticLimitPct","ultimateLimitPct","elasticLimitFce","ultimateLimitFce","_default","_exports","default","Component","extend","store","service","formDisabled","fieldVisible","selectedVendor","isAuthenticated","newInstrumentObject","headAt","zeroTimestamp","installDate","authError","project","level","init","_super","arguments","actions","setProject","value","foundObject","projectLookupList","find","l","id","setLevel","levelLookupList","vendorTypeChanged","object","badValues","includes","vendor","vendors","v","vendorType","strokeLengthChanged","strokeLength","createInstrument","get","setError","error","instrumentType","peekRecord","active","moment","format","newInstrument","createRecord","err","message","save","then","results","anchorCount","getAnchorCountFromId","ctr","number","distance","instrument","catch","resetNewRawDataValueObject","_this","displacementValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","getInstrument","instrumentId","findRecord","anchorDistances","computed","inst","anchors","anchorNumber","content","length","isMDT","dist","map","anchor","counter","label","getAnchorLabel","isAdictMDT","vendor","vendorType","includes","e","instrumentAnchorsLength","instrumentAnchorsSorted","sort","instrumentAnchorsForAdictMDT","instrumentAnchors","pop","newDisplacementValuesObject","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","newDisplacementValueObjectValues","convertMMToAdictBits","arrayMMs","bitsArray","mmValue","push","actions","saveNew","displacementValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","mmVals","bitsVals","newDisplacementValues","savedDisplacementValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","Component","extend","didReceiveAttrs","_super","arguments","router","service","store","api","session","formDisabled","fieldVisible","selectedVendor","selectedModel","editing","strokeLengthArray","type","modelName","options","id","value","activeActionTab","ordering","paginationSearchConfig","searchObject","calibrationDateOrdering","pagination","page","pageSize","totalPages","alertProfilePaginationList","anchorDiagramInputInitalValue","batchSelectedAlertsID","isAlertsListVisible","isEditAnchorDiagram","init","getAlertsList","payload","instrumentId","get","page_size","url","getApiBaseUrl","queryString","URLSearchParams","toString","response","fetch","method","headers","Authorization","localStorage","token","status","responseData","json","metaPaginationData","set","processAlertsList","data","updatePaginationList","rawList","list","forEach","element","rawElement","push","counter","createdAt","evaluationType","isAcknowledged","isActive","isMuted","lastDataReceivedAt","lastEvaluatedAt","lastTriggeredAt","level","name","channels","note","parameters","softResetCounter","range","maxPageToShow","paginationObj","i","orderingObserver","observer","anchorDiagramLabelInitalValue","computed","_a","content","anchors","anchorObj","distance","licenceIsValid","valid","authenticated","isValid","instrumentChannels","channelsNum","vendor","vendorType","actions","saveAnchors","anchorMap","anchor","savePromises","anchorNumber","newDistance","existingAnchor","save","newAnchor","createRecord","instrument","number","Promise","all","window","location","reload","error","console","log","updateChannelInput","key","cycleEditAnchorDiagram","cycleActionBar","tabName","jumpToPage","Number","parseInt","err","cycleAlertsListVisibility","sortBy","property","updatePage","stiffness","ex","strokeLengthChanged","object","vendorTypeChanged","badValues","includes","form","vendors","find","fieldsEnabled","elasticLimitPct","ultimateLimitPct","elasticLimitFce","ultimateLimitFce","instrumentStiffness","viewData","endDateObj","moment","startDateObj","subtract","format","formattedEndDateObj","baseUnit","transitionTo","queryParams","tGraph","sGraph","editField","stopEditField","saveInstrument","_this","t","confirm","href","didInsertElement","queryRecord","then","catch","isNaN","isFinite","Math","round","Component","extend","store","service","chartId","startTimestamp","endTimestamp","progressAnimationDuration","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","tonnes","isMDT","instrumentVendor","instrument","vendor","vendorType","includes","zoomDataPoints","item","chartData","temporaryChartData","linesKyes","pop","modelName","unshift","error","fullRangeDataPoints","temporaryValue","console","log","JSON","stringify","zoomTimePoints","fullRangeTimePoints","anchorDistances","dataValuesCount","length","anchors","arr","content","anchor","splice","anchorMidDistances","copy","midDistances","i","mid","push","toFixed","anchorColors","d3","scale","category10","range","anchorDistancesChartReferencePoints","anchorDistance","inlineHoverValuesSideOffset","zoomChartLinesData","_this","anchorDist","chartLine","chartLineIndex","dataPoint","dataPointIndex","concat","fullRangeChartLinesData","chartLineName","numLines","lineDrawDelay","chartDataModelName","query","model_name","yAxisLegend","promise","queryRecord","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","toString","forEach","id","axisName","units","zoomChart","nv","models","lineChartProgressAnimationAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","distXAxisScale","duration","showDistX","showLegend","showXAxis","noData","ex","forceX","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","utils","getDateAutoscaleFormat","Date","yAxis","axisLabel","distXAxis","ticks","distX","size","distXTooltipBottomOffset","distXRiseUpAnimationDelay","lineWidth","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","activeTooltipContent","windowResize","update","e","state","focus","line","syncBrushing","independentBrushing","showYAxis","fullRangeChartXDomainLength","getQueryParams","_default","_exports","default","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","title","yAxisUnit","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartDistXData","computed","key","type","color","values","map","event","moment","valueOf","isMDT","instrument","vendor","vendorType","includes","anchorCount","blastEventsChartDistXData","seismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","data_set","tonnes","zoomTempPoints","discreteData","item","rawValues","chartData","Array","isArray","slice","length","zoomDataPoints","modelName","push","valueArray","pop","convertDataAndReverse","convertedData","multiplier","DENOMINATOR","forEach","toFixed","parseFloat","reverse","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","instType","dataValuesCount","error","anchors","arr","content","anchor","midPoints","ctr","unshift","zoomChartLinesData","_this","chartLineName","chartLineIndex","yAxis","dataPoint","dataPointIndex","shift","temp","concat","fullRangeChartLinesData","chartDataModelName","query","model_name","yAxisLegend","substr","lastIndexOf","replace","promise","queryRecord","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","toString","id","axisName","units","raw","usesPoints","chartName","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","scale","category10","range","duration","showDistX","noData","legend","addGraph","tickValues","zoomChartXDomainLength","startDate","Date","endDate","interval","i","getTime","xAxis","tickPadding","showMaxMin","tickFormat","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","numDecimals","some","datum","filter","Boolean","call","dispatch","on","brushExtent","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","ppv","ppa","freq","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","distX2","activeTooltipContent","utils","windowResize","update","e","log","JSON","stringify","state","setData","setChart","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","getDateAutoscaleFormat","ex","getQueryParams","_default","_exports","default","Component","extend","store","service","router","isModalOpen","modalMode","modalEditingRowId","isMDT","computed","vendor","get","vendorType","includes","_e","anchorLabels","anchors","arr","content","total","length","map","anchor","idx","counter","distance","isUASlot","index","tableLabel","String","modalLabel","columnSpecs","out","a","key","label","valuesIndex","isTemp","push","_strokeLength","sl","Number","isFinite","_mmToBits","mm","n","_bitsToMm","bits","tableRows","dispData","tempData","specs","fmt","tempById","forEach","r","id","dispRow","dispValues","values","tempRow","tempValues","cells","spec","v","value","raw","date","formattedDate","moment","format","modalFields","mode","editingId","find","dateField","type","channelFields","modalTitle","verb","actions","openAdd","set","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","adapterOptions","promises","deleteRecord","save","Promise","all","then","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","safeNum","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","existingTempAtNew","existingDispAtNew","hasExistingAtNewId","oldTemp","oldDisp","createRecord","tempRecord","dispRecord","updateProperty","propertyName","propertyValue","Component","extend","Component","extend","Component","extend","Component","extend","Component","extend","router","service","advancedSearchLoading","startTriggerDate","endTriggerDate","search","level","init","_super","arguments","loadSearchFieldsFromURL","paramsObj","get","setProperties","undefined","instrumentId","dispatchRequest","mode","set","addIfPresent","key","value","actions","apply","reset","Component","extend","router","service","advancedSearchLoading","startCreationDate","endCreationDate","startTriggerDate","endTriggerDate","search","instrumentId","level","init","_super","arguments","loadSearchFieldsFromURL","paramsObj","Object","fromEntries","URLSearchParams","window","location","entries","setProperties","undefined","dispatchRequest","mode","set","queryParams","page","get","page_size","addIfPresent","key","value","transitionTo","then","isDestroyed","isDestroying","replaceWith","actions","apply","reset","Component","extend","approvedInstrForYAxisUnit","router","service","page","page_size","displayFrequencyEventsDropDown","advancedSearchLoading","startDate","undefined","chartType","endDate","xMin","xMax","yLeftMin","yLeftMax","yRightMin","yRightMax","yAxisUnit","selectedFrequencyEventsDropdownDate","visibleAdvancedFilter","isFrequencyGraph","init","_super","arguments","setFieldsFromURL","isInstrumentApproved","computed","includes","instrumentType","getFrequencyEventsDropDownData","data","get","forEach","timestampString","index","push","queryParams","URLSearchParams","window","location","search","startDateParam","endDateParam","yAxisUnitParam","xMinParam","xMaxParam","yLeftMinParam","yLeftMaxParam","yRightMinParam","yRightMaxParam","selectedFreqEventDateParam","set","trim","unitSymbolTranslator","formatDateForDatetimeLocal","dateStr","date","Date","toISOString","slice","dispatchRequest","mode","id","chart_type","selectedFreqEventDate","transitionTo","then","isDestroyed","isDestroying","newYAxisUnit","meterValue","millimeterValue","footValue","inchValue","microValue","RAWValue","actions","updateFrequencyEventsSelectedDatetime","input","console","log","length","toggleVisibility","visiblity","toggleYAxisUnit","property","updateDateProperty","propertyName","changeEvent","target","value","reset","Component","extend","store","service","session","userProfileService","api","userProfile","activeActionTab","alertEventsPaginationList","paginationSearchConfig","pagination","page","page_size","total_pages","searchObject","settingsConfig","MAX_TIMEOUT_AWAITING_SAMPLING","ASCENDING_CONST","DESCENDING_CONST","isMasterUser","computed","profile","is_master_key_account","init","_super","arguments","getAlertEvents","set","payload","profile_id","get","ordering","records","query","meta","processAlertEvents","updatePaginationList","rawData","list","globalDatetimeFormat","value","forEach","alert","push","id","isMuted","level","message","triggeredAt","moment","format","range","maxPageToShow","paginationObj","i","actions","jumpToPage","Number","parseInt","cycleActionBar","tabName","columnCycleOrdering","idColumnComp","document","getElementById","textContent","firstNameColumnComp","lastNameColumnComp","Component","extend","session","service","userProfileService","api","userProfile","isLoading","DISPFIELDS","TIMEFIELDS","TEMPFIELDS","RATEFIELDS","DISPCATEGORYCONST","TIMECATEGORYCONST","TEMPCATEGORYCONST","RATECATEGORYCONST","BOOLEANCATEGORYCONST","NUMBERCATEGORYCONST","TEXTCATEGORYCONST","alertParameter","isEditing","changesForm","outOfDispDistMatchError","outOfTimeMatchError","isMasterUser","computed","profile","is_master_key_account","init","_super","arguments","getAlertParameters","set","url","getApiBaseUrl","get","response","fetch","method","headers","Authorization","localStorage","token","ok","data","json","processAlertParamter","console","log","error","obj","final","Object","keys","forEach","key","i","dataObj","index","formValue","value","category","isRateDispTempTime","keyText","translateParameterKey","push","text","replace","toLowerCase","c","toUpperCase","arrayCastString","strArr","split","isBooleanString","paramUnitValue","dispArr","tempArr","timeArr","includes","isNaN","handleRevertChanges","curr","length","validateDispAndTimeConsistency","dispUnitsMap","timeUnitsMap","DISP_FIELDS","TIME_FIELDS","RATE_FIELDS","entries","rawValue","endsWith","String","trim","disp","time","dispUnitTypes","timeUnitTypes","isDispConsistent","isTimeConsistent","dispKeysInconsistent","timeKeysInconsistent","values","flat","patchAlertParameters","body","JSON","stringify","profile_id","Number","id","parameters","status","window","location","reload","actions","applyChanges","currForm","hasOwn","validationReport","revertChanges","updateCheckbox","pramObjKey","componentKey","comp","document","getElementById","newForm","checked","updateInput","updateRateDropdownUnit","updateDispDropdownUnit","updateTimeDropdownUnit","updateTempDropdownUnit","updateIsEditingProperty","Component","extend","session","service","userProfileService","api","store","alertsBatch","userProfile","instr","currentSelectedChannelsAnchorDiagram","isLoading","emailTags","phoneTags","contactList","groupList","selectedContacts","selectedGroups","isEditingName","isEditingDeliveryMethod","isEditingNote","isEditingStatuses","isEditingChannels","isDisabledEmailTextbox","isDisabledPhoneTextbox","METHOD_DELIVERY_OBJ","id","value","isMasterUser","computed","profile","is_master_key_account","init","_super","arguments","set","getContacts","getGroups","instrID","get","instrumentId","findRecord","console","log","url","getApiBaseUrl","response","fetch","method","headers","Authorization","localStorage","token","status","responseData","json","list","data","map","c","Object","assign","label","last_name","first_name","trim","email","phone_number","g","name","contact_count","emailCheckedEdit","phoneCheckedEdit","recipientsEnabledEdit","directEmailDisabledStyle","directPhoneDisabledStyle","recipientsDisabledStyle","displaySelectedContacts","e","p","emailDisabled","phoneDisabled","displaySelectedGroups","channelsLabel","useEmail","usePhone","chans","push","length","join","displayViewContacts","alert","dmd","deliveryMethodData","raw","Array","isArray","contacts","use_email","use_phone","recipients","filter","r","type","_name","rc","full","find","summary","displayViewGroups","contact_groups","rg","prefillRecipientsFromAlert","rawContacts","rawGroups","_email","_phone","phone","selContacts","undefined","selGroups","anchorDiagramLabelInitalValue","channels","i","channelsNum","includes","anchorDiagramCheckboxInitalValue","forEach","element","resetEmailPhoneTextboxToAlertProfile","methodsArr","deliveryMethod","getMethodDeliveryList","arr","keys","key","isContainEmailMethod","isContainPhoneMethod","getDeliveryMethod","getMethodTypesLabel","selectedMethods","getEmailMethod","getPhoneMethod","getEvaluationType","getAlertEvaluationTypesDictionary","evaluationType","getLastEvaluatedAt","globalDatetimeFormat","lastEvaluatedAt","moment","format","getLastDataReceivedAt","lastDataReceivedAt","getTriggeredAt","lastTriggeredAt","getCreatedAt","createdAt","getIsAcknowledged","isAcknowledged","getIsActive","isActive","getIsMuted","isMuted","getName","getID","getNote","note","initItlPhoneInput","setTimeout","phoneInput","querySelector","_iti","existingPhone","intlTelInput","initialCountry","preferredCountries","separateDialCode","addEventListener","preventDefault","dialCode","getSelectedCountryData","number","replace","fullNumber","tags","slice","updateIsEditing","existingEmail","split","s","Boolean","destroy","updateError","typeKey","errorMessage","resetError","validateEmail","emailRegex","test","actions","onEmailTagKeydown","target","removeEmailTag","tag","t","removePhoneTag","addContactRecipient","event","Number","some","contact","emailOn","phoneOn","entry","concat","removeContactRecipient","toggleContactChannel","channel","next","addGroupRecipient","group","removeGroupRecipient","toggleGroupChannel","toggleDeliveryMethod","triggerDiagramReset","updateChannelCheckboxInput","isChannelChecked","ch","statusButton","batchEdit","window","location","reload","err","error","updateIsEditingProperty","updateChannelProperty","adapterFor","updateChannels","updateDeliveryMethodProperties","newMethodsArr","comp1","document","getElementById","checked","is_delivery_method","native_alert_trigger_method","email_alert_trigger_method","phone_alert_trigger_method","delivery_method_data","body","JSON","stringify","detail","updateProperty","docuKey","docu","newValue","save","Component","extend","userProfileService","service","api","init","_super","arguments","rippleClass","computed","get","getAlertName","name","actions","updateTab","value","set","Component","extend","router","service","alertsBatch","init","_super","arguments","getAlertsList","computed","globalDatetimeFormat","get","value","alerts","list","forEach","alert","push","id","instrumentId","isMuted","isActive","name","level","createdAt","moment","format","lastTriggeredAt","actions","deleteAlertProfile","alertID","window","confirm","set","batchDelete","getOwner","lookup","refresh","err","console","error","jumpToInstrumentProfile","aletID","transitionTo","onCheckedAlertsRow","curr","includes","filter","MAIN_OPTIONS","key","value","PHASE_OPTIONS","DATE_FORMAT_OPTIONS","_default","_exports","default","Component","extend","store","service","router","session","mainDataKey","secondaryDataKey","phaseKey","companyKey","dateFormatKey","mainChartData","options","isEmptyData","chartYAxisOriginal","mainDataOptions","phaseOptions","dateFormatOptions","showDateFormat","computed","get","companyOptions","isYieldPointSupervisor","p","isYP","company","includes","isSup","override_power_supervisor_level","secondaryDataOptions","dateDisabled","disabled","snapSecondaryIfInvalid","observer","set","_syncSelectDom","emptyDataWarningListener","d","isEmpty","Array","isArray","labels","length","init","_super","arguments","profile","ownName","ownCode","company_code","console","warn","_loadAllCompanies","scheduleOnce","refreshMainChartData","didInsertElement","renderChart","url","getApiBaseUrl","res","fetch","method","headers","Authorization","localStorage","token","status","json","rows","data","list","push","forEach","r","code","name","company_name","err","error","id","el","document","getElementById","actions","mainChanged","e","target","secondaryChanged","phaseChanged","companyChanged","dateFormatChanged","updateChart","applyButton","resetButton","toggleLegend","disableEnableBarChartLengend","checked","resetScaleForm","labelID","comp","orig","min","scales","y","max","update","updateScaleForm","v","Number","parseInt","Component","extend","store","service","router","session","mainChartData","requestParams","x","y","is_distinct","secondary","date_min","date_max","options","isEmptyData","chartYAxisOriginal","chartXAxisOriginal","mainDataSelectionLabels","key","value","dateDataSelectionLabels","employeeGroupDataSelectionLabels","init","_super","arguments","scheduleOnce","getResponse","refreshMainChartData","mainDataSelectComp","document","getElementById","usersSectionComp","startRangeDateComponent","endRangeDateComponent","showLegendCheckBoxComp","checked","getMainDataSelections","computed","data","get","forEach","elementObj","index","push","id","title","code","getDateDataSelections","getEmployeeGroupDataSelections","showLegendObserver","observer","showLegend","target","disableEnableBarChartLengend","emptyDataWarningListener","set","length","mainDataChangeObserver","dateDataSelectComp","employeeGroupDataSelectComp","next","mainSelectionDropDownHandlerOberserver","manageCustomUIDateData","actions","applyButton","resetButton","resetDataAndSearch","resetScaleForm","labelID","yAxisMaxComponent","min","scales","max","update","updateScaleForm","e","componentKey","componentValue","console","log","Number","parseInt","didInsertElement","renderChart","Component","extend","router","service","batchCommandsLoading","init","_super","arguments","getSelectedAlertsCount","computed","get","length","dispatchRequest","mode","set","queryParams","addIfPresent","key","value","undefined","transitionTo","then","isDestroyed","isDestroying","loadSearchFieldsFromURL","search","replaceWith","actions","batchButton","message","selectAll","alerts","curr","forEach","alert","push","id","deselectAll","apply","reset","Component","extend","session","service","userProfileService","init","_super","arguments","actions","close","get","confirm","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","GATEWAY_ENUM","Object","freeze","Firmware","Coordinator","Voltage","RSSI","carrier","Readings","Uptime","Reconnection","Uploads","Temperature","var_1","var_2","var_3","AXIS_LABELS","buildGatewayLines","sourceData","tempData","leftAxis","rightAxis","leftIndex","rightIndex","tempValues","forEach","item","vals","get","push","leftLine","key","yAxis","values","map","i","val","length","x","y","rightLine","_default","_exports","default","Component","extend","store","service","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","computed","attrs","getQueryParams","fullRangeChartLinesData","overviewChartLinesData","didInsertElement","_super","arguments","linesData","y1Title","y2Title","_buildMainChart","_buildOverviewChart","_this","canvas","element","querySelector","xMin","xMax","l","v","datasets","line","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","hidden","noDataPlugin","id","afterDraw","chart","xScale","scales","hasData","ds","pt","min","max","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","crosshairX","pinnedX","crosshairPlugin","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","toFixed","buildLegendItems","color","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","e","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","px","targetX","getValueForPixel","items","bestDist","Infinity","d","Math","abs","setPinnedTooltip","type","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","title","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","set","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","startQP","endQP","getPixelForValue","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","Array","isArray","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","axisScaleObserver2","autoAxis2","axisMin2","axisMax2","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","then","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewGatewayObject","_this","console","log","set","CreateBluCellGateway","Component","constructor","args","_defineProperty","createGateway","object","store","get","newGatewayObject","error","id","installDate","depth","active","interval_upload","query","filter","interval_value","interval_group_name","then","r","at","catch","interval_read","interval_mesh_cycle","interval_transmission_power","moment","format","newGateway","dup","createRecord","peekRecord","err","message","includes","save","results","reason","init","arguments","_exports","default","resetNewRawDataValueObject","_this","gatewayValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newGatewayValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newGatewayValueObjectValues","actions","saveNew","gatewayValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","indexPositions","result","Array","newGatewayValues","savedGatewayValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","console","log","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","EditInstrument","_exports","default","_class","Component","extend","gatewayReadingsIntervals","childrenLoading","childrenData","init","_super","arguments","didInsertElement","gateway","get","set","query","parent_gateway","then","children","catch","store","service","isAuthenticated","selectedModel","editing","getGatewayUploadIntervalID","computed","gw","gatewayUploadInterval","id","toString","getGatewayReadIntervalID","gatewayReadInterval","getMeshCycleIntervalID","gatewayMeshCycleInterval","getTransmissionPowerIntervalsID","gatewayRadioPowerLevelInterval","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","setGatewayInterval","event","selectedOptions","Array","from","target","selectedValue","parseInt","map","option","value","intervalType","notSelected","findRecord","interval","notSelectedIntervalValue","group_name","filter","interval_value","interval_group_name","results","save","console","log","error","updatePage","viewData","transitionTo","tGraph","editField","stopEditField","saveGateway","_this","t","confirm","window","location","href","sortBy","property","_applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","temperaturePoints","distXRiseUpAnimationDuration","leftAxis","computed","attrs","getQueryParams","rightAxis","GATEWAY_ENUM","Object","freeze","Firmware","Coordinator","Voltage","RSSI","carrier","Readings","Uptime","Reconnection","Uploads","Temperature","var_1","var_2","var_3","zoomTempPoints","zoomTempData","get","forEach","item","i","chartData","values","push","zoomDataPointsLeftAxis","zoomChartData","leftAxisIndex","zoomLeftAxis","map","zoomDataPointsRightAxis","zoomRightAxis","rightAxisIndex","zoomDataPoints","left","fullRangeDataPoints","fullRangePoints","itemHolder","zoomTimePoints","fullRangeTimePoints","anchorDistances","zoomChartLinesData","_this","seismicEventsChartDistXData","blastEventsChartDistXData","tempPoints","mName","chartLineName","chartLineIndex","key","type","yAxis","dataPoint","dataPointIndex","moment","valueOf","temp","concat","fullRangeChartLinesData","fullRangeTempPoints","sortBy","temperature","chartDataModelName","query","model_name","yAxisLegend","chartTitle","promise","queryRecord","title","getTitleAndUnits","axis","axisValues","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","useInteractiveGuideline","x","d","y","color","scale","category10","range","duration","showLegend","showDistX","noData","showYAxis","y2Axis","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","length","utils","getDateAutoscaleFormat","Date","axis1Title","axis2Title","y1Axis","axisLabel","axisLabelDistance","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","format","some","datum","filter","Boolean","call","controls","disabled","dispatch","on","brushExtent","set","tooltip","hidden","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","eventSize","timestamp","distXMouseMove","seismicEventsArray","distX0","onDistXTooltipShowCall","blastEventsArray","distX1","vibeEventsArray","distX2","distXIndex","data_set","activeTooltipContent","windowResize","update","usesPoints","chartName","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","fullRangeChartXDomainLength","ex","Component","extend","isVisibleCreateNewForm","anchorDistances","computed","getGatewayData","fields","items","filteredData","get","forEach","item","values","firmware","voltage","rssi","sigma_d_readings","sigma_t_modem_on_duration","reconnection_attempts","number_of_uploads","temp","mesh_id","length","push","id","Number","parseFloat","originalValue","save_values","actions","updateProperty","propertyName","propertyValue","set","didInsertElement","_super","arguments","_default","_exports","default","Component","extend","LeftAxisDropdown","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","tGraph","id","modelName","params","get","transitionTo","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Component","extend","rightAxisField","routeValue","defaultRightAxisField","computed","getRouteValue","selected","toLowerCase","set","actions","handleRightAxisFieldChange","newValue","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","GATEWAY_ENUM","Object","freeze","Firmware","Coordinator","Voltage","RSSI","carrier","Readings","Uptime","Reconnection","Uploads","var_1","var_2","var_3","Temperature","AXIS_LABELS","buildGatewayLines","sourceData","tempData","leftAxis","rightAxis","leftIndex","rightIndex","tempValues","forEach","item","vals","get","push","leftLine","key","yAxis","values","map","i","val","length","x","y","rightLine","_default","_exports","default","Component","extend","store","service","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","computed","attrs","getQueryParams","fullRangeChartLinesData","overviewChartLinesData","didInsertElement","_super","arguments","linesData","y1Title","y2Title","_buildMainChart","_buildOverviewChart","_this","canvas","element","querySelector","xMin","xMax","l","v","datasets","line","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","hidden","noDataPlugin","id","afterDraw","chart","xScale","scales","hasData","ds","pt","min","max","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","crosshairX","pinnedX","crosshairPlugin","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","toFixed","buildLegendItems","color","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","e","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","px","targetX","getValueForPixel","items","bestDist","Infinity","d","Math","abs","setPinnedTooltip","type","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","title","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","set","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","startQP","endQP","getPixelForValue","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","Array","isArray","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","axisScaleObserver2","autoAxis2","axisMin2","axisMax2","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","then","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewGatewayObject","_this","set","CreateBluCellGateway","Component","constructor","args","_defineProperty","setError","error","value","createGateway","object","store","get","parent","console","log","newGatewayObject","parentGatewayId","id","parentGateway","installDate","depth","active","interval_upload","query","filter","interval_value","interval_group_name","then","r","at","catch","interval_read","moment","format","newGateway","dup","createRecord","peekRecord","typeID","err","message","includes","save","results","childRelation","isCurrent","reason","window","localStorage","setItem","setID","gwId","findRecord","init","arguments","loadGateways","gatewayList","rawData","filteredGateways","gateway","title","toLowerCase","mappedGateways","map","parentId","gw","type","_exports","default","resetNewRawDataValueObject","_this","gatewayValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newGatewayValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newGatewayValueObjectValues","actions","saveNew","gatewayValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newGatewayValues","savedGatewayValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","console","log","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","EditGateway","_exports","default","_class","Component","extend","store","service","gatewayReadingsIntervals","initialSelection","isAuthenticated","selectedModel","editing","parent","parentLoading","init","_super","arguments","computed","gateway","get","gateways","getGatewayUploadIntervalID","gw","gatewayUploadInterval","id","toString","getGatewayReadIntervalID","gatewayReadInterval","addParentToGateway","childGateway","newParentGateway","newRelation","createRecord","parentGateway","isCurrent","save","then","addObject","catch","error","console","log","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","setGatewayInterval","event","selectedOptions","Array","from","target","selectedValue","parseInt","map","option","value","intervalType","notSelected","findRecord","interval","notSelectedIntervalValue","group_name","query","filter","interval_value","interval_group_name","results","set","updatePage","viewData","transitionTo","queryParams","tGraph","badCodes","includes","localStorage","getItem","editField","stopEditField","saveGateway","_this","t","confirm","window","location","href","sortBy","property","setID","_applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","leftAxis","computed","attrs","getQueryParams","rightAxis","GATEWAY_ENUM","Object","freeze","Firmware","Coordinator","Voltage","RSSI","carrier","Readings","Uptime","Reconnection","Uploads","var_1","var_2","var_3","Temperature","zoomDataPointsLeftAxis","zoomChartData","get","leftAxisIndex","parentGateway","coordinatorPosition","zoomLeftAxis","filter","item","coordinator","values","map","zoomDataPointsRightAxis","rightAxisIndex","zoomRightAxis","zoomDataPoints","left","fullRangeDataPoints","fullRangePoints","itemHolder","newFullRangePoints","filteredPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","zoomChartLinesData","_this","seismicEventsChartDistXData","blastEventsChartDistXData","mName","chartLineName","chartLineIndex","key","type","yAxis","dataPoint","dataPointIndex","moment","valueOf","zoomTempPoints","temp","push","concat","fullRangeChartLinesData","fullRangeTempPoints","sortBy","temperature","chartDataModelName","query","model_name","yAxisLegend","chartTitle","promise","queryRecord","title","getTitleAndUnits","axis","axisValues","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","useInteractiveGuideline","x","d","y","color","scale","category10","range","duration","showLegend","showDistX","noData","showYAxis","y2Axis","legend","addGraph","xAxis","tickPadding","ticks","showMaxMin","tickFormat","zoomChartXDomainLength","length","utils","getDateAutoscaleFormat","Date","axis1Title","axis2Title","y1Axis","axisLabel","axisLabelDistance","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","format","some","datum","Boolean","call","controls","forEach","i","disabled","dispatch","on","brushExtent","set","tooltip","hidden","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","eventSize","timestamp","distXMouseMove","seismicEventsArray","distX0","onDistXTooltipShowCall","blastEventsArray","distX1","vibeEventsArray","distX2","distXIndex","data_set","activeTooltipContent","windowResize","update","usesPoints","chartName","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","fullRangeChartXDomainLength","ex","Component","extend","isVisibleCreateNewForm","anchorDistances","computed","getGatewayData","items","filteredData","get","forEach","item","firmware","values","coordinator","voltage","rssi","mesh_id","length","temperature","push","id","originalValue","save_values","console","log","actions","updateProperty","propertyName","propertyValue","set","Component","extend","selected","defaultSelected","computed","actions","handleSelectedFieldChange","newValue","set","LeftAxisDropdown","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","tGraph","id","modelName","params","get","transitionTo","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Component","extend","rightAxisField","routeValue","defaultRightAxisField","computed","getRouteValue","selected","toLowerCase","set","actions","handleRightAxisFieldChange","newValue","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","GATEWAY_ENUM","Object","freeze","Firmware","Coordinator","Voltage","RSSI","carrier","Readings","Uptime","Reconnection","Uploads","var_1","var_2","var_3","Temperature","AXIS_LABELS","buildGatewayLines","sourceData","tempData","leftAxis","rightAxis","leftIndex","rightIndex","tempValues","forEach","item","vals","get","push","leftLine","key","yAxis","values","map","i","val","length","x","y","rightLine","_default","_exports","default","Component","extend","store","service","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","computed","attrs","getQueryParams","fullRangeChartLinesData","overviewChartLinesData","didInsertElement","_super","arguments","linesData","y1Title","y2Title","_buildMainChart","_buildOverviewChart","_this","canvas","element","querySelector","xMin","xMax","l","v","datasets","line","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","hidden","noDataPlugin","id","afterDraw","chart","xScale","scales","hasData","ds","pt","min","max","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","crosshairX","pinnedX","crosshairPlugin","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","toFixed","buildLegendItems","color","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","e","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","px","targetX","getValueForPixel","items","bestDist","Infinity","d","Math","abs","setPinnedTooltip","type","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","title","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","set","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","startQP","endQP","getPixelForValue","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","Array","isArray","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","axisScaleObserver2","autoAxis2","axisMin2","axisMax2","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","then","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewGatewayObject","_this","set","CreateBluCellGateway","Component","constructor","args","_defineProperty","createGateway","object","store","get","newGatewayObject","setError","error","id","installDate","depth","active","moment","format","newGateway","dup","createRecord","peekRecord","err","message","includes","save","then","results","catch","reason","init","arguments","_exports","default","resetNewRawDataValueObject","_this","gatewayValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newGatewayValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newGatewayValueObjectValues","actions","saveNew","gatewayValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newGatewayValues","savedGatewayValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","console","log","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","EditInstrument","_exports","default","_class","Component","extend","gatewayReadingsIntervals","init","_super","arguments","store","service","isAuthenticated","selectedModel","editing","getGatewayUploadIntervalID","computed","gw","get","gatewayUploadInterval","id","toString","getGatewayReadIntervalID","gatewayReadInterval","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","setGatewayInterval","event","gateway","selectedOptions","Array","from","target","selectedValue","parseInt","map","option","value","intervalType","notSelected","findRecord","then","interval","notSelectedIntervalValue","group_name","query","filter","interval_value","interval_group_name","results","set","save","console","log","catch","error","updatePage","viewData","transitionTo","tGraph","editField","stopEditField","saveGateway","_this","t","confirm","window","location","href","sortBy","property","_applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","temperaturePoints","distXRiseUpAnimationDuration","leftAxis","computed","attrs","getQueryParams","rightAxis","GATEWAY_ENUM","Object","freeze","Firmware","Coordinator","Voltage","RSSI","carrier","Readings","Uptime","Reconnection","Uploads","var_1","var_2","var_3","Temperature","zoomDataPointsLeftAxis","zoomChartData","get","leftAxisIndex","zoomLeftAxis","map","item","i","values","zoomDataPointsRightAxis","zoomRightAxis","rightAxisIndex","zoomDataPoints","left","fullRangeDataPoints","fullRangePoints","itemHolder","zoomTimePoints","fullRangeTimePoints","anchorDistances","zoomChartLinesData","_this","seismicEventsChartDistXData","blastEventsChartDistXData","tempPoints","mName","chartLineName","chartLineIndex","key","type","yAxis","dataPoint","dataPointIndex","moment","valueOf","zoomTempPoints","temp","push","concat","fullRangeChartLinesData","fullRangeTempPoints","sortBy","temperature","chartDataModelName","query","model_name","yAxisLegend","chartTitle","promise","queryRecord","title","getTitleAndUnits","axis","axisValues","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","useInteractiveGuideline","x","d","y","color","scale","category10","range","duration","showLegend","showDistX","noData","showYAxis","y2Axis","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","length","utils","getDateAutoscaleFormat","Date","axis1Title","axis2Title","y1Axis","axisLabel","axisLabelDistance","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","format","some","datum","filter","Boolean","call","controls","forEach","disabled","dispatch","on","brushExtent","set","tooltip","hidden","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","eventSize","timestamp","distXMouseMove","seismicEventsArray","distX0","onDistXTooltipShowCall","blastEventsArray","distX1","vibeEventsArray","distX2","distXIndex","data_set","activeTooltipContent","windowResize","update","usesPoints","chartName","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","fullRangeChartXDomainLength","ex","Component","extend","isVisibleCreateNewForm","anchorDistances","computed","getGatewayData","fields","items","filteredData","get","forEach","item","values","firmware","voltage","rssi","carrier","readings","uptime","recon","uploads","temperature","length","push","id","originalValue","save_values","actions","updateProperty","propertyName","propertyValue","set","Component","extend","selected","defaultSelected","computed","actions","handleSelectedFieldChange","newValue","set","LeftAxisDropdown","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","tGraph","id","modelName","params","get","transitionTo","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Component","extend","rightAxisField","routeValue","defaultRightAxisField","computed","getRouteValue","selected","toLowerCase","set","actions","handleRightAxisFieldChange","newValue","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","GATEWAY_ENUM","Object","freeze","Firmware","Coordinator","Voltage","RSSI","carrier","Readings","Uptime","Reconnection","Uploads","var_1","var_2","var_3","Temperature","AXIS_LABELS","buildGatewayLines","sourceData","tempData","leftAxis","rightAxis","leftIndex","rightIndex","tempValues","forEach","item","vals","get","push","leftLine","key","yAxis","values","map","i","val","length","x","y","rightLine","_default","_exports","default","Component","extend","store","service","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","computed","attrs","getQueryParams","fullRangeChartLinesData","overviewChartLinesData","didInsertElement","_super","arguments","linesData","y1Title","y2Title","_buildMainChart","_buildOverviewChart","_this","canvas","element","querySelector","xMin","xMax","l","v","datasets","line","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","hidden","noDataPlugin","id","afterDraw","chart","xScale","scales","hasData","ds","pt","min","max","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","crosshairX","pinnedX","crosshairPlugin","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","toFixed","buildLegendItems","color","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","e","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","px","targetX","getValueForPixel","items","bestDist","Infinity","d","Math","abs","setPinnedTooltip","type","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","title","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","set","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","startQP","endQP","getPixelForValue","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","Array","isArray","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","axisScaleObserver2","autoAxis2","axisMin2","axisMax2","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","then","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewGatewayObject","_this","set","CreateBluGateGateway","Component","constructor","args","_defineProperty","createGateway","object","store","get","newGatewayObject","error","id","installDate","depth","active","moment","format","newGateway","dup","createRecord","peekRecord","err","message","includes","save","then","results","catch","reason","init","arguments","_exports","default","EditInstrument","_exports","default","_class","Component","extend","gatewayReadingsIntervals","init","_super","arguments","store","service","isAuthenticated","selectedModel","editing","getGatewayUploadIntervalID","computed","gw","get","gatewayUploadInterval","id","toString","getGatewayReadIntervalID","gatewayReadInterval","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","setGatewayInterval","event","gateway","selectedOptions","Array","from","target","selectedValue","parseInt","map","option","value","intervalType","notSelected","findRecord","then","interval","notSelectedIntervalValue","group_name","query","filter","interval_value","interval_group_name","results","set","save","console","log","catch","error","updatePage","viewData","transitionTo","tGraph","editField","stopEditField","saveGateway","_this","t","confirm","window","location","href","sortBy","property","_applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","temperaturePoints","distXRiseUpAnimationDuration","leftAxis","computed","attrs","getQueryParams","rightAxis","GATEWAY_ENUM","Object","freeze","Firmware","Coordinator","Voltage","RSSI","carrier","Readings","Uptime","Reconnection","Uploads","var_1","var_2","var_3","Temperature","zoomDataPointsLeftAxis","zoomChartData","get","console","log","leftAxisIndex","zoomLeftAxis","map","item","i","values","zoomDataPointsRightAxis","zoomRightAxis","rightAxisIndex","zoomDataPoints","left","fullRangeDataPoints","fullRangePoints","itemHolder","zoomTimePoints","fullRangeTimePoints","anchorDistances","zoomChartLinesData","_this","seismicEventsChartDistXData","blastEventsChartDistXData","tempPoints","mName","chartLineName","chartLineIndex","key","type","yAxis","dataPoint","dataPointIndex","moment","valueOf","zoomTempPoints","temp","push","concat","fullRangeChartLinesData","fullRangeTempPoints","sortBy","temperature","chartDataModelName","query","model_name","yAxisLegend","chartTitle","promise","queryRecord","title","getTitleAndUnits","axis","axisValues","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","useInteractiveGuideline","x","d","y","color","scale","category10","range","duration","showLegend","showDistX","noData","showYAxis","y2Axis","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","length","utils","getDateAutoscaleFormat","Date","axis1Title","axis2Title","y1Axis","axisLabel","axisLabelDistance","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","format","some","datum","filter","Boolean","call","controls","forEach","disabled","dispatch","on","brushExtent","set","tooltip","hidden","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","eventSize","timestamp","distXMouseMove","seismicEventsArray","distX0","onDistXTooltipShowCall","blastEventsArray","distX1","vibeEventsArray","distX2","distXIndex","data_set","activeTooltipContent","windowResize","update","usesPoints","chartName","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","fullRangeChartXDomainLength","ex","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","temperaturePoints","distXRiseUpAnimationDuration","leftAxis","computed","attrs","getQueryParams","rightAxis","GATEWAY_ENUM","Object","freeze","Firmware","Voltage","RSSI","carrier","Readings","Uptime","Reconnection","Uploads","Temperature","var_1","var_2","var_3","zoomTempPoints","zoomTempData","get","forEach","item","i","chartData","values","push","zoomDataPointsLeftAxis","zoomChartData","leftAxisIndex","zoomLeftAxis","map","zoomDataPointsRightAxis","zoomRightAxis","rightAxisIndex","zoomDataPoints","left","fullRangeDataPoints","fullRangePoints","itemHolder","zoomTimePoints","fullRangeTimePoints","anchorDistances","zoomChartLinesData","_this","seismicEventsChartDistXData","blastEventsChartDistXData","tempPoints","mName","chartLineName","chartLineIndex","key","type","yAxis","dataPoint","dataPointIndex","moment","valueOf","temp","concat","fullRangeChartLinesData","fullRangeTempPoints","sortBy","temperature","chartDataModelName","query","model_name","yAxisLegend","chartTitle","promise","queryRecord","title","getTitleAndUnits","axis","axisValues","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","useInteractiveGuideline","x","d","y","color","scale","category10","range","duration","showLegend","showDistX","noData","showYAxis","y2Axis","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","length","utils","getDateAutoscaleFormat","Date","axis1Title","axis2Title","y1Axis","axisLabel","axisLabelDistance","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","format","some","datum","filter","Boolean","call","controls","disabled","dispatch","on","brushExtent","set","tooltip","hidden","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","eventSize","timestamp","distXMouseMove","seismicEventsArray","distX0","onDistXTooltipShowCall","blastEventsArray","distX1","vibeEventsArray","distX2","distXIndex","data_set","activeTooltipContent","windowResize","update","usesPoints","chartName","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","fullRangeChartXDomainLength","ex","Component","extend","isVisibleCreateNewForm","anchorDistances","computed","getGatewayData","fields","items","filteredData","get","forEach","item","values","firmware","console","log","JSON","stringify","voltage","rssi","carrier","readings","uptime","recon","uploads","temperature","length","push","id","originalValue","save_values","actions","updateProperty","propertyName","propertyValue","set","_default","_exports","default","Component","extend","_default","_exports","default","Component","extend","LeftAxisDropdown","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","tGraph","id","modelName","params","get","transitionTo","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","TemporalGatewayRightAxisDropdown","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","setSelection","selected","set","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","resetNewGatewayObject","_this","set","CreateBluCellGateway","Component","constructor","args","_defineProperty","createGateway","object","store","get","newGatewayObject","setError","error","id","installDate","depth","active","interval_upload","query","filter","interval_value","interval_group_name","then","r","at","catch","interval_read","moment","format","newGateway","dup","createRecord","peekRecord","err","message","includes","save","results","reason","init","arguments","_exports","default","resetNewRawDataValueObject","_this","gatewayValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newGatewayValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newGatewayValueObjectValues","actions","saveNew","gatewayValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newGatewayValues","savedGatewayValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","console","log","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","EditInstrument","_exports","default","_class","Component","extend","gatewayReadingsIntervals","init","_super","arguments","store","service","isAuthenticated","selectedModel","editing","getGatewayUploadIntervalID","computed","gw","get","gatewayUploadInterval","id","toString","getGatewayReadIntervalID","gatewayReadInterval","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","setGatewayInterval","event","gateway","selectedOptions","Array","from","target","selectedValue","parseInt","map","option","value","intervalType","notSelected","findRecord","then","interval","notSelectedIntervalValue","group_name","query","filter","interval_value","interval_group_name","results","set","save","console","log","catch","error","updatePage","viewData","transitionTo","tGraph","editField","stopEditField","saveGateway","_this","t","confirm","window","location","href","sortBy","property","_applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","temperaturePoints","distXRiseUpAnimationDuration","leftAxis","computed","attrs","getQueryParams","rightAxis","GATEWAY_ENUM","Object","freeze","Firmware","Coordinator","Voltage","RSSI","carrier","Readings","Uptime","Reconnection","Uploads","var_1","var_2","var_3","Temperature","zoomDataPointsLeftAxis","zoomChartData","get","leftAxisIndex","zoomLeftAxis","map","item","i","values","zoomDataPointsRightAxis","zoomRightAxis","rightAxisIndex","zoomDataPoints","left","fullRangeDataPoints","fullRangePoints","itemHolder","zoomTimePoints","fullRangeTimePoints","anchorDistances","zoomChartLinesData","_this","seismicEventsChartDistXData","blastEventsChartDistXData","tempPoints","mName","chartLineName","chartLineIndex","key","type","yAxis","dataPoint","dataPointIndex","moment","valueOf","zoomTempPoints","temp","push","concat","fullRangeChartLinesData","fullRangeTempPoints","sortBy","temperature","chartDataModelName","query","model_name","yAxisLegend","chartTitle","promise","queryRecord","title","getTitleAndUnits","axis","axisValues","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","useInteractiveGuideline","x","d","y","color","scale","category10","range","duration","showLegend","showDistX","noData","showYAxis","y2Axis","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","length","utils","getDateAutoscaleFormat","Date","axis1Title","axis2Title","y1Axis","axisLabel","axisLabelDistance","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","format","some","datum","filter","Boolean","call","controls","forEach","disabled","dispatch","on","brushExtent","set","tooltip","hidden","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","eventSize","timestamp","distXMouseMove","seismicEventsArray","distX0","onDistXTooltipShowCall","blastEventsArray","distX1","vibeEventsArray","distX2","distXIndex","data_set","activeTooltipContent","windowResize","update","usesPoints","chartName","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","fullRangeChartXDomainLength","ex","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","temperaturePoints","distXRiseUpAnimationDuration","leftAxis","computed","attrs","getQueryParams","rightAxis","GATEWAY_ENUM","Object","freeze","Firmware","Voltage","RSSI","carrier","Readings","Uptime","Reconnection","Uploads","Temperature","var_1","var_2","var_3","zoomTempPoints","zoomTempData","get","forEach","item","i","chartData","values","push","zoomDataPointsLeftAxis","zoomChartData","leftAxisIndex","zoomLeftAxis","map","zoomDataPointsRightAxis","zoomRightAxis","rightAxisIndex","zoomDataPoints","left","fullRangeDataPoints","fullRangePoints","itemHolder","zoomTimePoints","fullRangeTimePoints","anchorDistances","zoomChartLinesData","_this","seismicEventsChartDistXData","blastEventsChartDistXData","tempPoints","mName","chartLineName","chartLineIndex","key","type","yAxis","dataPoint","dataPointIndex","moment","valueOf","temp","concat","fullRangeChartLinesData","fullRangeTempPoints","sortBy","temperature","chartDataModelName","query","model_name","yAxisLegend","chartTitle","promise","queryRecord","title","getTitleAndUnits","axis","axisValues","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","useInteractiveGuideline","x","d","y","color","scale","category10","range","duration","showLegend","showDistX","noData","showYAxis","y2Axis","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","length","utils","getDateAutoscaleFormat","Date","axis1Title","axis2Title","y1Axis","axisLabel","axisLabelDistance","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","format","some","datum","filter","Boolean","call","controls","disabled","dispatch","on","brushExtent","set","tooltip","hidden","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","eventSize","timestamp","distXMouseMove","seismicEventsArray","distX0","onDistXTooltipShowCall","blastEventsArray","distX1","vibeEventsArray","distX2","distXIndex","data_set","activeTooltipContent","windowResize","update","usesPoints","chartName","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","fullRangeChartXDomainLength","ex","Component","extend","isVisibleCreateNewForm","anchorDistances","computed","getGatewayData","fields","items","filteredData","get","forEach","item","values","firmware","voltage","rssi","carrier","readings","uptime","recon","uploads","temperature","length","push","id","originalValue","save_values","actions","updateProperty","propertyName","propertyValue","set","_default","_exports","default","Component","extend","LeftAxisDropdown","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","tGraph","id","modelName","params","get","transitionTo","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","TemporalGatewayRightAxisDropdown","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","setSelection","selected","set","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Component","extend","routerService","service","routeInfos","computed","currentRoute","infos","info","unshift","parent","controllers","owner","getOwner","get","map","routeInfo","lookup","name","filter","c","breadCrumbs","defaultPaths","ri","A","forEach","controller","index","crumbs","singleCrumb","isBlank","push","label","path","model","crumb","addObject","EmberObject","create","linkable","isPresent","isCurrent","deepestCrumb","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","_spatialChart","anchorDistances","computed","firstObject","get","dataValuesCount","length","values","anchors","content","map","anchor","modelName","splice","anchorMidDistances","midDistances","unshift","i","push","toFixed","spatialXValues","spatialChartLinesData","zoomChartData","xValues","plated","item","key","timestamp","v","idx","x","y","filter","pt","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","seismicEventsChartData","event","type","momentMagnitude","blastEventsChartData","tonnes","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","_super","arguments","spatialLinesData","Promise","resolve","then","instrument","toString","forEach","id","yAxisTitle","_buildSpatialChart","linesData","canvas","element","querySelector","infoPanel","instrumentLength","e","anchorXValues","lineCount","lineDatasets","line","label","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","tension","parsing","_isLine","anchorDatasets","dist","String","showLine","_isRef","datasets","noDataPlugin","afterDraw","chart","hasData","ds","hidden","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","anchorDotsPlugin","xScale","scales","yArea","px","getPixelForValue","beginPath","arc","Math","PI","fill","crosshairX","crosshairPlugin","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","legendTooltipEl","highlightedIndex","buildSpatialLegendItems","indexOf","color","join","highlightLine","skipUpdate","update","restoreLines","attachSpatialLegendHandlers","el","onmouseover","target","closest","parseInt","dataset","onmouseout","initSpatialLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","distToSegment","py","x1","y1","x2","y2","dx","dy","lenSq","t","max","min","projX","projY","ex","ey","sqrt","findClosestLine","mouseX","mouseY","closestIdx","closestDist","Infinity","getDatasetMeta","pts","j","p1","p2","datasetIndex","pixelDist","lastTooltipIdx","updateSpatialTooltip","pointerEvents","activeIdx","valuesHtml","anchorColor","spatialChart","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","axis","onHover","display","text","size","afterBuildTicks","visibleAnchors","ticks","callback","val","toLocaleString","plugins","legend","tooltip","enabled","parentElement","origXMin","origXMax","addEventListener","preventDefault","rect","getBoundingClientRect","yScale","factor","deltaY","cursorX","getValueForPixel","clientX","cursorY","clientY","passive","panStartX","panStartY","panXMin","panXMax","panYMin","panYMax","cursor","xPxRange","yPxRange","onPanEnd","set","willDestroyElement","destroy","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","yAxisUnit","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","yAxisUnitParam","get","set","seismicEventsChartData","computed","map","event","type","x","timestamp","momentMagnitude","location","blastEventsChartData","tonnes","anchorDistances","anchors","arr","content","anchor","modelName","midPoints","i","length","toFixed","fullRangeChartLinesData","sourceData","isStrain","lines","chartLineName","chartLineIndex","key","values","item","vals","Array","isArray","y","zoomTempData","push","yAxis","hidden","rawValues","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","Promise","resolve","then","instrument","toString","forEach","id","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","filter","v","xMin","Math","min","xMax","max","datasets","line","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","pt","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","e","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","val","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewInstrumentObject","_this","set","instrumentStiffness","elasticLimitPct","ultimateLimitPct","elasticLimitFce","ultimateLimitFce","CreatePackInstrument","Component","constructor","args","_defineProperty","setProject","value","selectedId","foundObject","projectLookupList","find","lookup","id","setLevel","levelLookupList","createInstrument","object","store","get","newInstrumentObject","setError","error","zeroTimestamp","installDate","instrumentType","peekRecord","headAt","bulbed","plated","active","ex","strokeLength","moment","format","newInstrument","dup","createRecord","err","message","includes","save","then","results","catch","reason","bulbChanged","document","getElementById","checked","plateChanged","init","arguments","_exports","default","resetNewRawDataValueObject","_this","displacementValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newDisplacementValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newDisplacementValueObjectValues","actions","setNewDisplacementValue","event","vals","target","value","setNewTimestampValue","setTemperatureValue","saveNew","displacementValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newDisplacementValues","savedDisplacementValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","Component","extend","didReceiveAttrs","_super","arguments","router","service","store","api","session","selectedVendor","selectedModel","editing","activeActionTab","ordering","paginationSearchConfig","searchObject","calibrationDateOrdering","pagination","page","pageSize","totalPages","alertProfilePaginationList","anchorDiagramInputInitalValue","batchSelectedAlertsID","isAlertsListVisible","isEditAnchorDiagram","init","getAlertsList","payload","instrumentId","get","id","page_size","url","getApiBaseUrl","queryString","URLSearchParams","toString","response","fetch","method","headers","Authorization","localStorage","token","status","responseData","json","metaPaginationData","set","processAlertsList","data","updatePaginationList","rawList","list","forEach","element","rawElement","push","counter","createdAt","evaluationType","isAcknowledged","isActive","isMuted","lastDataReceivedAt","lastEvaluatedAt","lastTriggeredAt","level","name","channels","note","parameters","softResetCounter","range","maxPageToShow","paginationObj","i","orderingObserver","observer","anchorDiagramLabelInitalValue","computed","_a","content","anchors","anchorObj","distance","licenceIsValid","valid","authenticated","isValid","actions","saveAnchors","anchorMap","anchor","savePromises","channelsNum","anchorNumber","newDistance","existingAnchor","save","newAnchor","createRecord","instrument","number","Promise","all","window","location","reload","error","console","log","updateChannelInput","key","value","cycleEditAnchorDiagram","cycleActionBar","tabName","jumpToPage","Number","parseInt","err","cycleAlertsListVisibility","sortBy","property","updatePage","stiffness","Math","round","ex","viewData","endDateObj","moment","startDateObj","subtract","format","formattedEndDateObj","baseUnit","transitionTo","queryParams","tGraph","editField","stopEditField","sGraph","saveInstrument","_this","t","confirm","href","Component","extend","store","service","chartId","startTimestamp","endTimestamp","progressAnimationDuration","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","tonnes","zoomDataPoints","item","chartData","modelName","plated","splice","unshift","push","length","error","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","dataValuesCount","anchors","content","anchor","anchorAXDistances","midPoints","headExclusion","leftAnchors","center","Math","ceil","concat","slice","midLeft","ctr","$","v","i","mid_temp","shift","pop","anchorBXDistances","anchorMidDistances","copy","midDistances","finalSize","mid","toFixed","len","anchorColors","d3","scale","category10","range","anchorDistancesChartReferencePoints","anchorDistance","inlineHoverValuesSideOffset","zoomChartLinesData","_this","chartLine","chartLineIndex","dataPoint","dataPointIndex","fullRangeChartLinesData","forEach","element","ad","chartLineName","numLines","lineDrawDelay","chartDataModelName","query","model_name","yAxisLegend","promise","queryRecord","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","instrument","toString","id","axisName","units","zoomChart","nv","models","lineChartProgressAnimationAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","distXAxisScale","duration","showDistX","showLegend","showXAxis","noData","ex","forceX","addGraph","xAxis","tickPadding","showMaxMin","yAxis","axisLabel","tickFormat","distXAxis","ticks","fullRangeChartXDomainLength","utils","getDateAutoscaleFormat","Date","distX","size","distXTooltipBottomOffset","distXRiseUpAnimationDelay","lineWidth","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","activeTooltipContent","windowResize","update","e","log","JSON","stringify","state","focus","line","syncBrushing","independentBrushing","showYAxis","getQueryParams","_default","_exports","default","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","yAxisUnit","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartDistXData","computed","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","tempSeismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","display","blastEvents","data_set","displayTime","displayTimestamp","displayEventSize","displayTonnes","displayLocation","tonnes","zoomTempPoints","item","rawValues","chartData","Array","isArray","slice","zoomDataPoints","modelName","plated","push","e","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","instType","instrument","dataValuesCount","length","error","anchors","arr","content","anchor","midPoints","ctr","mid","toFixed","splice","unshift","zoomChartLinesData","_this","vibeEventsChartDistXData","mName","forEach","element","chartLineName","chartLineIndex","yAxis","dataPoint","dataPointIndex","pop","shift","temp","concat","fullRangeChartLinesData","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","promise","queryRecord","title","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","toString","id","axisName","units","raw","usesPoints","chartName","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","scale","category10","range","duration","showDistX","noData","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","utils","getDateAutoscaleFormat","Date","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","some","datum","filter","Boolean","call","dispatch","on","brushExtent","console","log","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","ppv","ppa","freq","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","distX2","activeTooltipContent","windowResize","update","JSON","stringify","state","setData","setChart","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","ex","getQueryParams","Component","extend","store","service","router","isModalOpen","modalMode","modalEditingRowId","anchorLabels","computed","anchors","get","arr","content","validCounter","map","anchor","idx","distance","isUnset","index","tableLabel","modalLabel","String","columnSpecs","out","a","key","label","valuesIndex","push","isTemp","tableRows","dispData","tempData","specs","fmt","tempById","forEach","r","id","dispRow","dispValues","values","tempRow","tempValues","cells","spec","value","formattedDate","moment","format","date","modalFields","mode","editingId","existingRow","find","dateField","type","cellByKey","c","channelFields","modalTitle","verb","actions","openAdd","set","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","adapterOptions","promises","deleteRecord","save","Promise","all","then","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","Number","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","oldTemp","oldDisp","tempRecord","createRecord","dispRecord","updateProperty","propertyName","propertyValue","_default","_exports","default","Component","extend","_default","_exports","default","Component","extend","buildScatterChartDataSet","context","dataArray","axisProperties","xAxisDisplay","xAxisLabel","yAxisDisplay","yAxisLabel","colorPalette","datasets","forEach","dataObj","index","dataSetObj","push","chart","options","scales","x","title","display","text","y","updateScatterXYMinMax","error","console","updateChart","scatterConvertedDataset","data","update","renderChart","ctx","document","getElementById","getContext","xMin","get","xMax","yMin","yMax","noDataPlugin","id","beforeDraw","hasData","some","ds","length","width","height","save","textAlign","textBaseline","font","fillStyle","fillText","restore","Chart","register","zoomPlugin","type","responsive","min","undefined","max","plugins","tooltip","callbacks","tooltipItems","dataset","label","tooltipItem","xLabel","yLabel","date","raw","zoom","pan","enabled","mode","wheel","drag","updateScatterZoomPan","log","getXYValueObj","xyValueObj","queryParams","URLSearchParams","window","location","search","advancedEndDate","advancedStartDate","advancedXMax","advancedXMin","advancedYAxisUnit","advancedYLeftMax","advancedYLeftMin","Number","parseFloat","Component","extend","store","service","session","userProfileService","selectedEvaluationObj","EVALUATION_TYPE_OBJECTS","id","label","description","init","_super","arguments","set","curr","get","clearParamsData","actions","onSelectedEvaluationTypeObj","obj","Component","extend","api","service","store","session","userProfileService","intlPhonePrefix","phoneCountryCode","APPROVED_INSTRUMENTS","selectedMethodDelivery","METHOD_DELIVERY","id","value","MANDATORY_BODY","isLoading","isEmailTestLoading","isPhoneTestLoading","emailErrorMessage","phoneErrorMessage","emailErrorColor","phoneErrorColor","emailMsgTimer","phoneMsgTimer","emailTags","phoneTags","contactList","groupList","selectedContacts","selectedGroups","selectedInstrument","isSupportedInstrument","selectedChannels","init","_super","arguments","set","getContacts","getGroups","url","getApiBaseUrl","response","fetch","method","headers","Authorization","localStorage","token","status","responseData","json","list","data","map","c","Object","assign","label","last_name","first_name","trim","email","phone_number","g","name","contact_count","emailChecked","computed","get","includes","phoneChecked","recipientsEnabled","directEmailDisabledStyle","directPhoneDisabledStyle","recipientsDisabledStyle","emailDisabledBool","phoneDisabledBool","displaySelectedContacts","e","p","emailDisabled","phoneDisabled","displaySelectedGroups","_syncDeliveryPayload","methods","emailOn","phoneOn","is_delivery_method","native_alert_trigger_method","email_alert_trigger_method","phone_alert_trigger_method","delivery_method_data","slice","phone","contacts","use_email","use_phone","contact_groups","curr","didInsertElement","_instrumentMap","select","element","querySelector","choices","Choices","searchEnabled","searchChoices","searchFloor","searchResultLimit","placeholder","placeholderValue","shouldSort","removeItemButton","noResultsText","noChoicesText","loadingText","addEventListener","query","detail","length","search","page_size","then","results","forEach","r","setChoices","showDropdown","willDestroyElement","destroy","getName","getNote","note","clearEmailMessage","clearTimeout","setTimeout","isDestroying","isDestroyed","clearPhoneMessage","getDeliveryErrorMessage","code","validateEmail","emailRegex","test","updatePhoneValue","dialCode","getSelectedCountryData","phoneInput","number","replace","fullPhone","initPhoneInput","observer","intlTelInput","initialCountry","preferredCountries","separateDialCode","key","send","getAnchorDiagramInitalValue","selectedInstrumentObserver","instrumentType","title","basicInfoObserver","sendTestEmailAlert","join","result","ok","success","console","error","sendTestPhoneAlert","encodeURIComponent","actions","testEmailAlert","log","testPhoneAlert","updatePhoneNumber","target","updateCountryCode","toggleDeliveryMethod","methodId","current","index","indexOf","splice","push","triggerDiagramReset","updateNameInput","updateEmailInput","updatePhoneInput","onEmailTagKeydown","preventDefault","tags","removeEmailTag","tag","filter","t","onPhoneTagKeydown","fullNumber","removePhoneTag","addContactRecipient","event","Number","some","contact","find","entry","concat","removeContactRecipient","toggleContactChannel","channel","next","addGroupRecipient","group","removeGroupRecipient","toggleGroupChannel","updateNoteInput","updateChannelCheckboxInput","isChannelChecked","Component","extend","userProfileService","service","api","init","_super","arguments","actions","Component","extend","api","service","store","session","router","userProfileService","isSoftReset","softResetOccurrences","MANDATORY_PARAMETERS","OPTIONAL_PARAMETERS","init","_super","arguments","getTypeDescription","computed","get","description","createAlertRequest","payload","set","alertsUrl","getApiBaseUrl","alertResponse","fetch","method","headers","Authorization","localStorage","token","body","JSON","stringify","result","json","success","console","log","alert_id","transitionTo","error","blinkMissedLabels","missedIDsArr","forEach","id","componentID","includes","el","document","getElementById","classList","remove","offsetWidth","add","validateFormFields","missedFields","finalData","paramData","channelsData","key","length","push","idm","native_alert_trigger_method","email_alert_trigger_method","phone_alert_trigger_method","dmd","hasEmail","email","contacts","some","c","use_email","contact_groups","g","hasPhone","phone","use_phone","Object","hasOwn","initializeCreateAlert","curr","actions","toggleOperatorRadioGroup","operator","updateDispDropdownUnit","value","updateFlatlineThresholdValueInput","e","Number","target","updateOccurrencesValueInput","updateSoftResetOccurrences","updateSoftResetCheckbox","createAlert","Component","extend","api","service","store","session","router","userProfileService","isSoftReset","softResetOccurrences","MANDATORY_PARAMETERS","OPTIONAL_PARAMETERS","init","_super","arguments","getTypeDescription","computed","get","description","createAlertRequest","payload","set","alertsUrl","getApiBaseUrl","alertResponse","fetch","method","headers","Authorization","localStorage","token","body","JSON","stringify","result","json","success","console","log","alert_id","transitionTo","error","blinkMissedLabels","missedIDsArr","forEach","id","componentID","includes","el","document","getElementById","classList","remove","offsetWidth","add","validateFormFields","missedFields","finalData","paramData","channelsData","key","length","push","idm","native_alert_trigger_method","email_alert_trigger_method","phone_alert_trigger_method","dmd","hasEmail","email","contacts","some","c","use_email","contact_groups","g","hasPhone","phone","use_phone","Object","hasOwn","initializeCreateAlert","curr","actions","updateTimeDropdownUnit","value","updateMaxDurationValueInput","e","Number","target","updateSoftResetOccurrences","updateSoftResetCheckbox","createAlert","Component","extend","api","service","store","session","router","userProfileService","isSoftReset","softResetOccurrences","readingData","MANDATORY_PARAMETERS","OPTIONAL_PARAMETERS","init","_super","arguments","getTypeDescription","computed","get","description","createAlertRequest","payload","set","alertsUrl","getApiBaseUrl","alertResponse","fetch","method","headers","Authorization","localStorage","token","body","JSON","stringify","result","json","success","console","log","alert_id","transitionTo","error","blinkMissedLabels","missedIDsArr","forEach","id","componentID","includes","el","document","getElementById","classList","remove","offsetWidth","add","validateFormFields","missedFields","finalData","paramData","channelsData","key","length","push","idm","native_alert_trigger_method","email_alert_trigger_method","phone_alert_trigger_method","dmd","hasEmail","email","contacts","some","c","use_email","contact_groups","g","hasPhone","phone","use_phone","Object","hasOwn","initializeCreateAlert","curr","actions","updateDispDropdownUnit","value","updateSpikeThresholdValueInput","e","Number","target","updateSoftResetOccurrences","updateSoftResetCheckbox","createAlert","Component","extend","api","service","store","session","router","userProfileService","isSoftReset","softResetOccurrences","readingData","MANDATORY_PARAMETERS","OPTIONAL_PARAMETERS","init","_super","arguments","getTypeDescription","computed","get","description","createAlertRequest","payload","set","alertsUrl","getApiBaseUrl","alertResponse","fetch","method","headers","Authorization","localStorage","token","body","JSON","stringify","result","json","success","console","log","alert_id","transitionTo","error","blinkMissedLabels","missedIDsArr","forEach","id","componentID","includes","el","document","getElementById","classList","remove","offsetWidth","add","validateFormFields","missedFields","finalData","paramData","channelsData","key","length","push","idm","native_alert_trigger_method","email_alert_trigger_method","phone_alert_trigger_method","dmd","hasEmail","email","contacts","some","c","use_email","contact_groups","g","hasPhone","phone","use_phone","Object","hasOwn","initializeCreateAlert","curr","actions","updateDispDropdownUnit","value","updateTimeDropdownUnit","updateTempDropdownUnit","updatePeriodWindowValueInput","e","Number","target","updateDispThresholdValueInput","updateTempThresholdValueInput","updateOccurrencesValueInput","updateSoftResetOccurrences","updateSoftResetCheckbox","createAlert","Component","extend","api","service","store","session","router","userProfileService","isSoftReset","softResetOccurrences","MANDATORY_PARAMETERS","OPTIONAL_PARAMETERS","init","_super","arguments","getTypeDescription","computed","get","description","createAlertRequest","payload","set","alertsUrl","getApiBaseUrl","alertResponse","fetch","method","headers","Authorization","localStorage","token","body","JSON","stringify","result","json","success","console","log","alert_id","transitionTo","error","blinkMissedLabels","missedIDsArr","forEach","id","componentID","includes","el","document","getElementById","classList","remove","offsetWidth","add","validateFormFields","missedFields","finalData","paramData","channelsData","key","length","push","idm","native_alert_trigger_method","email_alert_trigger_method","phone_alert_trigger_method","dmd","hasEmail","email","contacts","some","c","use_email","contact_groups","g","hasPhone","phone","use_phone","Object","hasOwn","initializeCreateAlert","curr","actions","toggleOperatorRadioGroup","operator","updateDispDropdownUnit","value","updateThresholdValueInput","e","Number","target","updateOccurrencesValueInput","updateSoftResetOccurrences","updateSoftResetCheckbox","createAlert","Component","extend","api","service","store","session","router","userProfileService","isSoftReset","softResetOccurrences","selectedReadingObject","readingData","MANDATORY_PARAMETERS","OPTIONAL_PARAMETERS","init","_super","arguments","getInstrument","observer","console","log","getSelectedDatetime","computed","get","id","replace","set","key","value","getTypeDescription","description","createAlertRequest","payload","alertsUrl","getApiBaseUrl","alertResponse","fetch","method","headers","Authorization","localStorage","token","body","JSON","stringify","result","json","success","alert_id","transitionTo","error","blinkMissedLabels","missedIDsArr","forEach","componentID","includes","el","document","getElementById","classList","remove","offsetWidth","add","validateFormFields","missedFields","finalData","paramData","channelsData","length","push","idm","native_alert_trigger_method","email_alert_trigger_method","phone_alert_trigger_method","dmd","hasEmail","email","contacts","some","c","use_email","contact_groups","g","hasPhone","phone","use_phone","Object","hasOwn","initializeCreateAlert","curr","actions","onSelectedReadingObject","readingObj","updateDispDropdownUnit","updateDeltaValueInput","e","Number","target","updateOccurrencesValueInput","updateSoftResetOccurrences","updateSoftResetCheckbox","createAlert","Component","extend","api","service","store","session","router","userProfileService","isSoftReset","softResetOccurrences","initRateValue","initDispPartRateValue","initTimePartRateValue","MANDATORY_PARAMETERS","OPTIONAL_PARAMETERS","init","_super","arguments","set","rateBuildObserver","observer","dispPart","get","timePart","rate","breakdownRateStoreParts","split","e","getTypeDescription","computed","description","createAlertRequest","payload","alertsUrl","getApiBaseUrl","alertResponse","fetch","method","headers","Authorization","localStorage","token","body","JSON","stringify","result","json","success","console","log","alert_id","transitionTo","error","blinkMissedLabels","missedIDsArr","forEach","id","componentID","includes","el","document","getElementById","classList","remove","offsetWidth","add","validateFormFields","missedFields","finalData","paramData","channelsData","key","length","push","idm","native_alert_trigger_method","email_alert_trigger_method","phone_alert_trigger_method","dmd","hasEmail","email","contacts","some","c","use_email","contact_groups","g","hasPhone","phone","use_phone","Object","hasOwn","initializeCreateAlert","curr","currRate","timePart2","actions","updateTimeDropdownUnit","value","updatePeriodWindowValueInput","Number","target","updateRateDropdownUnit","updateROCThresholdValueInput","updateOccurrencesValueInput","updateSoftResetOccurrences","updateSoftResetCheckbox","createAlert","resetNewBlastEventObject","_this","set","isVisible","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","newBlastEventObject","dateFormat","timeFormat","timestamp","delay","blastType","dateTimePicker","datePicker","east","north","depth","project","level","selectOptionsArray","map","item","blastTypesSelectOptionsKyes","get","split","key","value","handleIsVisibleCreateNewFormChange","observer","actions","setProject","event","selectedId","target","foundObject","projectLookupList","find","lookup","id","setLevel","levelLookupList","addNew","object","saveNew","moment","format","peekRecord","newBlastEvent","createRecord","save","then","results","currentRouteName","currentRouteInstance","getOwner","refresh","catch","error","console","cancelNew","didRender","willDestroyElement","datetimepicker","resetNewSeismicEventObject","_this","set","isVisible","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","newSeismicEventObject","dateFormat","timestamp","seismicType","dateTimePicker","east","north","depth","selectOptionsArray","map","item","seismicTypesSelectOptionsKyes","get","split","key","value","handleIsVisibleCreateNewFormChange","observer","actions","addNew","object","saveNew","moment","format","peekRecord","newSeismicEvent","createRecord","savedObject","save","then","results","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","didRender","willDestroyElement","datetimepicker","_default","_exports","default","Component","extend","didInsertElement","map","L","center","lat","lng","zoom","imageOverlay","mapBounds","addTo","marker","popupContent","bindPopup","openPopup","computed","Component","extend","ajax","service","session","isVisibleExportDataForm","instrumentId","fileFormat","loading","fileFormats","key","value","fileName","computed","get","fileLink","base","getApiBaseUrl","handleIsVisibleCreateNewFormChange","observer","set","isExportLinkReady","actions","downloadFile","_this","currentUrl","window","location","href","urlSegments","split","originator","length","includes","params","URLSearchParams","keys","forEach","has","urlWithOriginator","filename","fetch","method","headers","Authorization","localStorage","token","then","response","text","data","download","updateProperties","propertyNames","propertyValues","propertyName","i","Array","isArray","cancel","Component","extend","ajax","service","session","isVisibleExportDataForm","gatewayId","fileFormat","loading","fileFormats","key","value","fileName","computed","get","fileLink","base","getApiBaseUrl","handleIsVisibleCreateNewFormChange","observer","set","isExportLinkReady","actions","downloadFile","filename","console","log","split","includes","fetch","method","headers","Authorization","localStorage","token","then","response","text","download","catch","updateProperties","propertyNames","propertyValues","_this","length","forEach","propertyName","i","Array","isArray","cancel","Component","extend","isVisibleImportDataForm","isVisibleError","instrumentId","loading","fileFormat","fileFormats","key","value","isSubmitting","fileSettings","instrument_id","file_format","actions","updateProperties","propertyNames","propertyValues","_this","length","forEach","propertyName","i","set","Array","isArray","importFile","get","cancelImport","notSubmitting","errorHappened","message","console","log","scheduleOnce","Component","extend","isVisibleImportDataForm","isVisibleError","loading","isVisibleErrorChangeObserver","observer","get","error","instrumentId","fileFormat","dateFormat","dateFormats","key","value","fileFormats","isRAW","uniqueInstruments","showIsRAW","computed","uniqueInstrumentsKeys","Object","keys","includes","instrumentType","title","getUnitInstrComment","isSubmitting","fileSettings","instrument_id","file_format","date_format","actions","updateProperties","propertyNames","propertyValues","_this","length","forEach","propertyName","i","set","Array","isArray","importFile","cancelImport","notSubmitting","errorHappened","message","console","log","replace","scheduleOnce","Component","extend","isVisibleImportDataForm","isVisibleError","loading","isVisibleErrorChangeObserver","observer","get","error","gatewayId","fileFormat","dateFormat","dateFormats","key","value","fileFormats","isSubmitting","fileSettings","gateway_id","file_format","date_format","actions","updateProperties","propertyNames","propertyValues","_this","length","forEach","propertyName","i","set","Array","isArray","importFile","cancelImport","notSubmitting","errorHappened","message","console","log","replace","scheduleOnce","_default","_exports","default","Component","extend","isOpen","title","fields","tagName","domIdPrefix","computed","Math","random","toString","slice","fieldsWithDomIds","prefix","get","map","f","Object","assign","domId","key","actions","save","onSave","snapshot","forEach","el","document","getElementById","value","cancel","onCancel","Component","extend","dataLegends","computed","objectKyes","Array","from","get","constructor","attributes","keys","recordValues","item","getProperties","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","yAxisUnit","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartData","computed","map","event","type","x","timestamp","momentMagnitude","blastEventsChartData","tonnes","anchorDistances","fullRangeChartData","dataValuesCount","values","length","error","anchors","arr","content","anchor","Array","from","_","i","modelName","midPoints","ctr","toFixed","unshift","fullRangeChartLinesData","isStrain","lines","chartLineName","chartLineIndex","key","item","vals","isArray","y","zoomTempData","push","yAxis","hidden","rawValues","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","Promise","resolve","then","instrument","toString","forEach","id","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","filter","v","xMin","Math","min","xMax","max","datasets","line","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","pt","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","e","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","val","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewInstrumentObject","_this","set","CreateDConvInstrument","Component","constructor","args","_defineProperty","setProject","value","selectedId","foundObject","projectLookupList","find","lookup","id","setLevel","levelLookupList","createInstrument","object","store","get","newInstrumentObject","setError","error","baseLength","instrumentType","peekRecord","headAt","active","strokeLength","zeroTimestamp","moment","format","installDate","newInstrument","dup","createRecord","err","message","includes","save","then","results","number","distance","instrument","anchorCount","catch","reason","init","arguments","_exports","default","resetNewRawDataValueObject","_this","displacementValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newDisplacementValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newDisplacementValueObjectValues","actions","setNewDisplacementValue","event","vals","target","value","setNewTimestampValue","setTemperatureValue","saveNew","displacementValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newDisplacementValues","savedDisplacementValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","Component","extend","didReceiveAttrs","_super","arguments","router","service","store","api","session","selectedVendor","selectedModel","editing","activeActionTab","ordering","paginationSearchConfig","searchObject","calibrationDateOrdering","pagination","page","pageSize","totalPages","alertProfilePaginationList","anchorDiagramInputInitalValue","batchSelectedAlertsID","isAlertsListVisible","isEditAnchorDiagram","init","getAlertsList","payload","instrumentId","get","id","page_size","url","getApiBaseUrl","queryString","URLSearchParams","toString","response","fetch","method","headers","Authorization","localStorage","token","status","responseData","json","metaPaginationData","set","processAlertsList","data","updatePaginationList","rawList","list","forEach","element","rawElement","push","counter","createdAt","evaluationType","isAcknowledged","isActive","isMuted","lastDataReceivedAt","lastEvaluatedAt","lastTriggeredAt","level","name","channels","note","parameters","softResetCounter","range","maxPageToShow","paginationObj","i","orderingObserver","observer","anchorDiagramLabelInitalValue","computed","_a","content","anchors","anchorObj","distance","licenceIsValid","valid","authenticated","isValid","actions","saveAnchors","anchorMap","anchor","savePromises","channelsNum","anchorNumber","newDistance","existingAnchor","save","newAnchor","createRecord","instrument","number","Promise","all","window","location","reload","error","console","log","updateChannelInput","key","value","cycleEditAnchorDiagram","cycleActionBar","tabName","jumpToPage","Number","parseInt","err","cycleAlertsListVisibility","sortBy","property","viewData","endDateObj","moment","startDateObj","subtract","format","formattedEndDateObj","baseUnit","transitionTo","queryParams","tGraph","sGraph","editField","stopEditField","saveInstrument","_this","t","confirm","href","Component","extend","store","service","chartId","startTimestamp","endTimestamp","progressAnimationDuration","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","tonnes","zoomDataPoints","item","chartData","modelName","unshift","error","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","dataValuesCount","length","anchors","content","anchor","splice","anchorMidDistances","copy","midDistances","i","mid","push","toFixed","anchorColors","d3","scale","category10","range","anchorDistancesChartReferencePoints","anchorDistance","inlineHoverValuesSideOffset","zoomChartLinesData","_this","anchorDist","chartLine","chartLineIndex","dataPoint","dataPointIndex","concat","fullRangeChartLinesData","chartLineName","numLines","lineDrawDelay","chartDataModelName","query","model_name","yAxisLegend","promise","queryRecord","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","instrument","toString","forEach","id","axisName","units","zoomChart","nv","models","lineChartProgressAnimationAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","distXAxisScale","duration","showDistX","showLegend","showXAxis","noData","ex","forceX","addGraph","xAxis","tickPadding","showMaxMin","yAxis","axisLabel","tickFormat","distXAxis","fullRangeChartXDomainLength","value1","value2","utils","getDateAutoscaleFormat","Date","distX","size","distXTooltipBottomOffset","distXRiseUpAnimationDelay","lineWidth","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","activeTooltipContent","windowResize","update","e","log","JSON","stringify","state","focus","line","syncBrushing","independentBrushing","showYAxis","getQueryParams","_default","_exports","default","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","yAxisUnit","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartDistXData","computed","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","sort","a","b","blastEventsArray","data_set","tonnes","zoomTempPoints","item","rawValues","chartData","Array","isArray","slice","zoomDataPoints","modelName","push","e","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","instType","instrument","dataValuesCount","length","error","anchors","arr","content","anchor","from","_","i","midPoints","ctr","toFixed","unshift","zoomChartLinesData","_this","chartLineName","chartLineIndex","yAxis","dataPoint","dataPointIndex","pop","shift","temp","concat","fullRangeChartLinesData","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","promise","queryRecord","title","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","toString","forEach","id","axisName","units","raw","usesPoints","chartName","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","scale","category10","range","duration","showDistX","noData","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","utils","getDateAutoscaleFormat","Date","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","numDecimals","some","datum","filter","Boolean","call","dispatch","on","brushExtent","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","ppv","ppa","freq","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","distX2","activeTooltipContent","windowResize","update","log","JSON","stringify","state","setData","setChart","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","ex","getQueryParams","Component","extend","store","service","router","isModalOpen","modalMode","modalEditingRowId","anchorLabels","computed","anchors","get","arr","content","validCounter","map","anchor","idx","distance","isUnset","index","tableLabel","modalLabel","String","columnSpecs","out","a","key","label","valuesIndex","push","isTemp","tableRows","dispData","tempData","specs","fmt","tempById","forEach","r","id","dispRow","dispValues","values","tempRow","tempValues","cells","spec","value","formattedDate","moment","format","date","modalFields","mode","editingId","existingRow","find","dateField","type","cellByKey","c","channelFields","modalTitle","verb","actions","openAdd","set","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","adapterOptions","promises","deleteRecord","save","Promise","all","then","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","Number","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","oldTemp","oldDisp","tempRecord","createRecord","dispRecord","updateProperty","propertyName","propertyValue","_default","_exports","default","Component","extend","_default","_exports","default","Component","extend","Component","extend","session","service","init","_super","arguments","getDispUnitsArr","computed","arrayCastString","get","value","error","console","log","strArr","split","actions","selectedValue","onChange","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","KPA_TO_MMH20","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","yAxisUnit","chartType","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","chartTypeParam","seismicEventsChartData","computed","map","event","type","x","timestamp","momentMagnitude","blastEventsChartData","tonnes","anchorDistances","instType","instrument","anchors","numPorts","ctr","push","arr","content","anchor","modelName","midPoints","length","mid","toFixed","splice","headExclusion","leftAnchors","rightAnchors","center","Math","ceil","concat","slice","midLeft","midRight","shift","pop","unshift","sort","fullRangeChartLinesData","fullRangeChartData","isStrain","isMmH20","lines","chartLineName","chartLineIndex","key","values","item","vals","Array","isArray","y","zoomTempData","yAxis","hidden","rawValues","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","Promise","resolve","then","toString","forEach","id","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","filter","v","xMin","min","xMax","max","datasets","line","i","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","pt","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","e","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","val","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewInstrumentObject","_this","set","CreatePackInstrument","Component","constructor","args","_defineProperty","setProject","value","selectedId","foundObject","projectLookupList","find","lookup","id","setLevel","levelLookupList","createInstrument","object","store","get","newInstrumentObject","setError","error","zeroTimestamp","installDate","instrumentType","peekRecord","headAt","active","instrumentStiffness","moment","format","newInstrument","dup","createRecord","err","message","includes","save","then","results","anchorCount","getAnchorCountFromId","ctr","number","distance","instrument","catch","reason","init","arguments","_exports","default","resetNewRawDataValueObject","_this","displacementValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newDisplacementValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newDisplacementValueObjectValues","actions","setNewDisplacementValue","event","vals","target","value","setNewTimestampValue","setTemperatureValue","saveNew","displacementValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newDisplacementValues","savedDisplacementValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","EditInstrument","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","viewData","id","get","transitionTo","tGraph","sGraph","editField","set","stopEditField","saveInstrument","t","confirm","window","location","href","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Component","extend","store","service","chartId","startTimestamp","endTimestamp","progressAnimationDuration","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","tonnes","zoomDataPoints","item","chartData","modelName","plated","error","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","dataValuesCount","length","anchors","content","anchor","splice","anchorAXDistances","midPoints","headExclusion","leftAnchors","center","Math","ceil","concat","slice","midLeft","ctr","$","v","i","unshift","mid_temp","push","shift","pop","anchorBXDistances","anchorMidDistances","copy","midDistances","mid","toFixed","len","anchorColors","d3","scale","category10","range","anchorDistancesChartReferencePoints","anchorDistance","inlineHoverValuesSideOffset","zoomChartLinesData","_this","chartLine","chartLineIndex","dataPoint","dataPointIndex","fullRangeChartLinesData","forEach","element","chartLineName","numLines","lineDrawDelay","chartDataModelName","query","model_name","yAxisLegend","promise","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","instrument","toString","id","axisName","units","zoomChart","nv","models","lineChartProgressAnimationAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","distXAxisScale","duration","showDistX","showLegend","showXAxis","noData","ex","forceX","addGraph","xAxis","tickPadding","showMaxMin","yAxis","axisLabel","tickFormat","distXAxis","fullRangeChartXDomainLength","utils","getDateAutoscaleFormat","Date","distX","size","distXTooltipBottomOffset","distXRiseUpAnimationDelay","lineWidth","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","activeTooltipContent","windowResize","update","e","log","JSON","stringify","state","focus","line","syncBrushing","independentBrushing","showYAxis","getQueryParams","_default","_exports","default","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","vibeEventsChartDistXData","events","blastEventsChartDistXData","seismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","location","sort","a","b","blastEventsArray","data_set","tonnes","vibeEventsArray","ppa","ppv","freq","zoomTempPoints","item","discreteData","rawValues","chartData","Array","isArray","slice","length","zoomDataPoints","KPA_TO_MMH20","modelName","chartType","attrs","getQueryParams","plated","push","e","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","instType","instrument","anchors","numPorts","startVal","maxVal","ctr","dataValuesCount","error","arr","content","anchor","midPoints","mid","toFixed","splice","headExclusion","leftAnchors","rightAnchors","center","Math","ceil","concat","midLeft","midRight","shift","pop","unshift","zoomChartLinesData","_this","mName","forEach","element","chartLineName","chartLineIndex","yAxis","dataPoint","dataPointIndex","temp","fullRangeChartLinesData","chartDataModelName","query","model_name","yAxisLegend","promise","queryRecord","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","toString","id","axisName","units","undefined","raw","usesPoints","chartName","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","scale","category10","range","duration","showDistX","noData","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","utils","getDateAutoscaleFormat","Date","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","numDecimals","some","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","distXMouseMove","distX2","onDistXTooltipShowCall","distX0","distX1","distXIndex","activeTooltipContent","windowResize","update","log","JSON","stringify","state","setData","setChart","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","ex","_default","_exports","default","Component","extend","store","service","router","isModalOpen","modalMode","modalEditingRowId","columnSpecs","computed","key","label","tableLabel","isTemp","isKPa","tableRows","dispData","get","tempData","fmt","tempById","forEach","r","id","map","dispRow","dispValues","values","tempRow","tempValues","kpaValue","length","tempValue","date","formattedDate","moment","format","cells","value","modalFields","specs","mode","editingId","existingRow","find","dateField","type","cellByKey","c","channelFields","spec","modalTitle","verb","actions","openAdd","set","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","adapterOptions","promises","deleteRecord","push","save","Promise","all","then","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","Number","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","oldTemp","oldDisp","tempRecord","createRecord","dispRecord","updateProperty","propertyName","propertyValue","_default","_exports","default","Component","extend","_default","_exports","default","Component","extend","DropdownOptionComponent","Component","isSelected","args","value","selectValue","_exports","default","Component","extend","session","service","userProfileService","intlPhone","init","_super","arguments","didInsertElement","setTimeout","phoneInput","document","getElementById","intlTelInput","initialCountry","preferredCountries","separateDialCode","existing","get","phone_number","dialCode","getSelectedCountryData","national","replace","startsWith","slice","length","value","willDestroyElement","destroy","getFirstName","computed","first_name","getLastName","last_name","getBirthDate","birth_date","getPhone","getEmail","email","getGroup","group","getNotes","notes","actions","close","save","data","fn","trim","ln","bd","ph","digits","em","grp","Number","nt","Component","extend","session","service","userProfileService","init","_super","arguments","console","log","get","getCode","computed","code","getCompany","company_name","getIsInternal","is_internal","isEditingExisting","id","actions","close","save","data","tb1","document","getElementById","checked","tb2","value","tb3","Component","extend","session","service","userProfileService","init","_super","arguments","getName","computed","get","name","getDescription","description","actions","close","save","data","nm","document","getElementById","value","trim","ds","Component","extend","session","service","userProfileService","init","_super","arguments","console","log","get","disableBasedOnAdminLevel","computed","parentUserProfile","profile","is_staff","canUploadToVP","can_upload_vantagepoint","canLoginToVP","can_login_vantagepoint","getCompany","company","getPosition","position","getIsActive","is_active","getIsStaff","getIsMasterUser","is_master_key_account","actions","close","save","data","companyTB","document","getElementById","value","positionTB","canLoginVPCheckbox","checked","canUploadVPCheckbox","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","zoomPlugin","INSTRUMENT_HUES","name","h","colorForChannel","instrumentNumber","positionInInstrument","instrumentSize","hue","length","stops","Math","max","lightness","dimColor","color","startsWith","replace","buildChannelMap","instrumentId","sizes","getInstrumentSizesFromId","tempLines","dispLines","dispCursor","forEach","size","iIdx","push","label","valuesIndex","instrumentIndex","p","_default","_exports","default","Component","extend","chart","yAxisUnit","_brushLastRange","init","_super","arguments","u","get","set","_submitBrush","startTs","endTs","isDestroyed","isDestroying","prev","attrs","updateProperties","yAxisTitle","computed","axisScaleObserver","observer","scales","y","auto","min","options","parseFloat","update","yAxisUnitObserver","title","text","channelMap","datasets","cm","dispData","tempData","out","read","item","key","line","data","map","x","v","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","tension","yAxisID","_instrumentIndex","_positionInInstrument","borderDash","didInsertElement","scheduleOnce","_buildChart","didUpdateAttrs","_refreshChart","willDestroyElement","destroy","sidebar","element","querySelector","existing","remove","_this","canvas","crosshairX","pinnedX","dragStartPx","originalColors","legendTooltipEl","colorOf","i","ds","crosshairPlugin","id","afterDraw","ctx","chartArea","left","right","save","beginPath","setLineDash","lineWidth","strokeStyle","moveTo","top","lineTo","bottom","stroke","restore","pointLabelsPlugin","xScale","targetTs","getValueForPixel","dsIndex","meta","getDatasetMeta","hidden","closest","bestDist","Infinity","pt","d","abs","yScale","px","getPixelForValue","py","fillStyle","arc","PI","fill","noDataPlugin","hasData","indexOf","font","textAlign","textBaseline","fillText","buildLegendItems","buckets","k","instrumentKeys","Object","keys","sort","parseInt","iKey","items","allHidden","every","allVisible","instrumentOpacity","hueDef","instrumentColor","channelItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","values","datasetIndex","val","dataset","toFixed","snapshotColors","restoreColors","hoveredIdx","applyHover","newIdx","attachLegendHandlers","el","onclick","e","instrumentBtn","target","instrument","indices","String","innerHTML","onmousemove","onmouseleave","oncontextmenu","preventDefault","clearPinnedTooltip","initLegendTooltip","host","document","createElement","className","appendChild","assign","style","position","inset","margin","width","boxSizing","display","flexDirection","flexWrap","alignItems","justifyContent","gap","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","setPinnedTooltip","getContext","type","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","enabled","external","zoom","wheel","pinch","pan","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","callback","y2","grid","drawOnChartArea","legendHost","parentElement","wrap","selectionEl","background","border","getCanvasX","rect","getBoundingClientRect","clientX","onmousedown","curX","onMouseUp","startPx","endPx","leftPx","rightPx","addEventListener","ondblclick","setChart","LAYOUTS","T_PER_INSTRUMENT","D_PER_INSTRUMENT","ALL_T_THEN_ALL_D","ALL_D_THEN_ALL_T","BTN_BASE","buttonStyle","selected","_default","_exports","default","Component","extend","store","service","router","selectedLayout","selectedInstruments","isModalOpen","modalMode","modalEditingRowId","init","_super","arguments","count","getInstrumentCountFromId","get","all","Set","i","add","set","instrumentCount","computed","instrumentSizes","getInstrumentSizesFromId","instrumentButtons","arr","isSel","has","push","index","label","style","layoutButtons","cur","make","key","columnSpecs","sizes","layout","dispCursor","instrumentRecords","map","size","iIdx","instrumentIndex","tempSpec","kind","headerStyle","cellStyle","tempIndex","dispIndex","dispCount","Math","max","dispSpecs","d","active","filter","r","out","forEach","s","tableRows","dispData","tempData","specs","fmt","tempById","id","dispRow","dispValues","values","tempRow","tempValues","cells","spec","value","formattedDate","moment","format","date","modalFields","mode","editingId","existingRow","find","dateField","type","cellByKey","c","channelFields","modalTitle","verb","actions","toggleInstrument","delete","setLayout","layoutKey","openAdd","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","adapterOptions","promises","deleteRecord","save","Promise","then","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","k","Number","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","oldTemp","oldDisp","tempRecord","createRecord","dispRecord","FileField","extend","session","service","isSubmitting","isSubmittingChangeObserver","observer","get","send","uploader","files","ajaxSettings","computed","headers","Accept","withCredentials","Authorization","localStorage","token","fileSettings","filesDidChange","Uploader","create","url","getApiBaseUrl","paramName","set","actions","submitFile","object","_this","isEmpty","format","file_format","dateFormat","date_format","filename","name","substring","lastIndexOf","ext","ok","id","gateway_id","errMsg","confirm","includes","upload","then","data","window","location","reload","error","responseJSON","sendAction","responseText","statusText","cancel","FileField","extend","session","service","isSubmitting","isSubmittingChangeObserver","observer","get","send","uploader","files","ajaxSettings","computed","headers","Accept","withCredentials","Authorization","localStorage","token","fileSettings","filesDidChange","Uploader","create","url","getApiBaseUrl","paramName","set","actions","submitFile","object","_this","isEmpty","format","file_format","dateFormat","date_format","filename","name","substring","lastIndexOf","ext","ok","id","instrument_id","errMsg","upload","then","data","window","location","reload","error","responseJSON","_eh","responseText","statusText","cancel","FileField","extend","session","service","isSubmitting","isSubmittingChangeObserver","observer","get","send","uploader","files","ajaxSettings","computed","headers","Accept","withCredentials","Authorization","localStorage","token","fileSettings","filesDidChange","Uploader","create","url","getApiBaseUrl","paramName","set","actions","submitFile","object","_this","isEmpty","format","file_format","dateFormat","date_format","filename","name","substring","lastIndexOf","ext","ok","id","instrument_id","errMsg","confirm","includes","upload","then","data","window","location","reload","error","responseJSON","sendAction","responseText","statusText","cancel","Component","extend","inputValue","init","_super","arguments","attrs","searchValue","value","set","e","actions","search","updateSearch","get","keyDown","keyCode","send","Component","extend","inputValue","pageValue","init","_super","arguments","attrs","searchValue","value","set","e","actions","updateProperty","propertyName","propertyValue","window","location","href","keyDown","keyCode","send","Component","extend","pageValue","startDate","endDate","search","init","_super","arguments","setSearchFieldsFromURL","queryParams","URLSearchParams","window","location","set","get","startDateParam","endDateParam","decodedStartDate","decodeURIComponent","console","log","decodedEndDate","formatDateForDatetimeLocal","dateStr","date","Date","toISOString","slice","actions","updateProperty","propertyName","changeEvent","target","value","newEndDate","calculateEndDate","searchValue","href","encodeURIComponent","reset","startDateObj","moment","add","format","keyDown","e","keyCode","caller","send","Component","extend","inputValue","pageValue","init","_super","arguments","attrs","searchValue","value","set","e","actions","updateProperty","propertyName","propertyValue","window","location","href","keyDown","keyCode","send","Component","extend","Component","extend","router","service","session","selectedFreqEventTabKey","selectedFreqEventSubTabKey","selectedFreqEventSubSubTabKey","buildTabsInstrTypeDependent","computed","tabs","instrumentType","get","id","label","buildSubTabsInstrTypeDependent","buildSubSubTabsInstrTypeDependent","willDestroyElement","_super","arguments","set","actions","updateSelectedTab","newTabId","updateSelectedSubTab","bluvibeV2ModelProfiles","length","updateSelectedSubSubTab","next","Component","extend","session","service","isRowDeleteConfirmationDialog","rdcd","store","childDict","isLoading","_loadId","init","_super","arguments","loadChildren","gateway","get","gatewayId","loadId","set","findRecord","reload","then","gw","isDestroying","isDestroyed","childrenDetails","catch","error","console","inspectGateway","gwc","toArray","setRDCD","value","notifyPropertyChange","actions","toggleRowDeleteConfirmationDialog","id","curVal","remove","model","object","_this","_store","errBox","document","getElementById","hidd","save","deleteRecord","unloadRecord","reason","status","errors","hidden","_default","_exports","default","Component","extend","store","service","router","session","expandedRowsArray","isRowDeleteConfirmationDialog","isRowExpanded","licenceIsValid","computed","valid","data","authenticated","isValid","expandedRows","index","gatewayChildren","gateway","get","children","get_id","id","actions","toggleExpansion","createGateway","transitionTo","toggleRowDeleteConfirmationDialog","curVal","set","toggleExpandedRow","isCurrentlyExpanded","row","remove","model","object","active","save","then","sendAction","catch","reason","console","log","removeGatewayWithoutNodes","errBox","document","getElementById","hidd","deleteRecord","unloadRecord","status","errors","hidden","removeGatewayWithNodes","_this","_store","badCodes","gatewayType","orphanGateway","findRecord","createRecord","name","includes","saveNodes","nodes","Promise","all","map","node","deleteGateway","refresh","GatewaySelectorComponent","_exports","default","_class","Component","selectGateway","gateway","concatenatedValue","PhoneNumber","Carrier","args","onSelect","_applyDecoratedDescriptor","prototype","action","Object","getOwnPropertyDescriptor","FILE_ACCEPT","PHOTO_ACCEPT","_default","_exports","default","Component","extend","session","service","subject","firstName","lastName","company","phone","email","bodyText","files","photos","isSubmitting","errorMessage","successMessage","fileAccept","photoAccept","init","_super","arguments","set","pageUrl","computed","window","location","href","hostname","subdomain","host","get","m","match","canSubmit","hasSubject","String","trim","hasFirstName","hasLastName","hasCompany","hasBody","hasContact","cannotSubmit","submitButtonLabel","actions","subjectChanged","e","target","value","firstNameChanged","lastNameChanged","companyChanged","phoneChanged","emailChanged","bodyChanged","filesPicked","picked","Array","from","removeFile","idx","next","slice","splice","photosPicked","removePhoto","submit","setProperties","fd","FormData","append","forEach","f","i","name","url","getApiBaseUrl","res","fetch","method","headers","Authorization","localStorage","token","body","ok","detail","j","json","error","_","status","err","console","dismissMessage","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","_spatialChart","anchorDistances","computed","firstObject","get","dataValuesCount","length","values","anchors","content","map","anchor","modelName","splice","anchorMidDistances","midDistances","unshift","i","push","toFixed","spatialXValues","spatialChartLinesData","fullRangeChartData","xValues","item","key","timestamp","v","idx","x","y","filter","pt","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","seismicEventsChartData","event","type","momentMagnitude","blastEventsChartData","tonnes","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","_super","arguments","spatialLinesData","Promise","resolve","then","instrument","toString","forEach","id","yAxisTitle","_buildSpatialChart","linesData","canvas","element","querySelector","infoPanel","instrumentLength","e","anchorXValues","lineCount","getLineColor","total","t","r","Math","round","g","lineDatasets","line","label","data","borderColor","backgroundColor","borderWidth","max","pointRadius","pointHoverRadius","tension","parsing","_isLine","anchorDatasets","dist","String","showLine","_isRef","datasets","noDataPlugin","afterDraw","chart","hasData","ds","hidden","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","anchorDotsPlugin","xScale","scales","yArea","px","getPixelForValue","beginPath","arc","PI","fill","crosshairX","crosshairPlugin","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","externalTooltipHandler","context","tooltip","opacity","lineItems","dataPoints","dataset","innerHTML","depth","parsed","html","toLocaleString","color","val","join","spatialChart","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","onHover","min","display","text","size","afterBuildTicks","axis","visibleAnchors","ticks","callback","plugins","legend","position","align","labels","generateLabels","pointStyle","datasetIndex","onClick","enabled","external","origXMin","origXMax","addEventListener","preventDefault","rect","getBoundingClientRect","yScale","factor","deltaY","cursorX","getValueForPixel","clientX","cursorY","clientY","update","passive","panStartX","panStartY","panXMin","panXMax","panYMin","panYMax","style","cursor","xPxRange","yPxRange","onPanEnd","document","set","willDestroyElement","destroy","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","yAxisUnit","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartData","computed","map","event","type","x","timestamp","momentMagnitude","blastEventsChartData","tonnes","anchorDistances","instType","instrument","anchors","numPorts","ctr","push","arr","content","anchor","modelName","midPoints","length","mid","toFixed","splice","headExclusion","leftAnchors","rightAnchors","center","Math","ceil","concat","slice","midLeft","midRight","shift","pop","unshift","sort","fullRangeChartLinesData","fullRangeChartData","isStrain","lines","chartLineName","chartLineIndex","key","values","item","vals","Array","isArray","y","zoomTempData","yAxis","hidden","rawValues","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","Promise","resolve","then","toString","forEach","id","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","filter","v","xMin","min","xMax","max","datasets","line","i","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","pt","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","e","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","val","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewInstrumentObject","_this","set","CreatePackInstrument","Component","constructor","args","_defineProperty","setProject","value","selectedId","foundObject","projectLookupList","find","lookup","id","setLevel","levelLookupList","createInstrument","object","store","get","newInstrumentObject","setError","error","zeroTimestamp","installDate","instrumentType","peekRecord","headAt","active","instrumentStiffness","moment","format","newInstrument","dup","createRecord","err","message","includes","save","then","results","anchorCount","getAnchorCountFromId","ctr","number","distance","instrument","catch","reason","init","arguments","_exports","default","resetNewRawDataValueObject","_this","displacementValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newDisplacementValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newDisplacementValueObjectValues","actions","setNewDisplacementValue","event","vals","target","value","setNewTimestampValue","setTemperatureValue","saveNew","displacementValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newDisplacementValues","savedDisplacementValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","EditInstrument","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","viewData","id","get","transitionTo","tGraph","sGraph","editField","set","stopEditField","saveInstrument","_this","t","confirm","window","location","href","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Component","extend","store","service","chartId","startTimestamp","endTimestamp","progressAnimationDuration","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","tonnes","zoomDataPoints","item","chartData","modelName","plated","splice","unshift","push","length","error","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","dataValuesCount","anchors","content","anchor","half_anchors","gauge","pop","last","sort","a","b","forEach","index","shift","anchorAXDistances","midPoints","headExclusion","leftAnchors","center","Math","ceil","concat","slice","midLeft","ctr","$","v","i","mid_temp","anchorBXDistances","anchorMidDistances","copy","midDistances","finalSize","mid","toFixed","len","anchorColors","d3","scale","category10","range","anchorDistancesChartReferencePoints","anchorDistance","inlineHoverValuesSideOffset","zoomChartLinesData","_this","chartLine","chartLineIndex","dataPoint","dataPointIndex","fullRangeChartLinesData","element","chartLineName","numLines","lineDrawDelay","chartDataModelName","query","model_name","yAxisLegend","promise","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","instrument","toString","id","axisName","units","zoomChart","nv","models","lineChartProgressAnimationAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","distXAxisScale","duration","showDistX","showLegend","showXAxis","noData","ex","forceX","addGraph","xAxis","tickPadding","showMaxMin","yAxis","axisLabel","tickFormat","distXAxis","fullRangeChartXDomainLength","utils","getDateAutoscaleFormat","Date","distX","size","distXTooltipBottomOffset","distXRiseUpAnimationDelay","lineWidth","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","activeTooltipContent","windowResize","update","e","log","JSON","stringify","state","focus","line","syncBrushing","independentBrushing","showYAxis","getQueryParams","_default","_exports","default","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","vibeEventsChartDistXData","events","blastEventsChartDistXData","seismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","location","sort","a","b","blastEventsArray","data_set","tonnes","zoomTempPoints","item","rawValues","chartData","Array","isArray","slice","zoomDataPoints","modelName","plated","push","e","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","instType","instrument","anchors","numPorts","startVal","maxVal","ctr","dataValuesCount","length","error","arr","content","anchor","midPoints","mid","toFixed","splice","headExclusion","leftAnchors","rightAnchors","center","Math","ceil","concat","midLeft","midRight","shift","pop","unshift","zoomChartLinesData","_this","mName","forEach","element","chartLineName","chartLineIndex","yAxis","dataPoint","dataPointIndex","temp","fullRangeChartLinesData","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","promise","queryRecord","title","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","toString","id","axisName","units","raw","usesPoints","chartName","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","scale","category10","range","duration","showDistX","noData","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","utils","getDateAutoscaleFormat","Date","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","numDecimals","some","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","ppv","ppa","freq","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","distX2","activeTooltipContent","windowResize","update","log","JSON","stringify","state","setData","setChart","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","ex","getQueryParams","Component","extend","store","service","router","isModalOpen","modalMode","modalEditingRowId","anchorLabels","computed","anchors","get","arr","content","validCounter","map","anchor","idx","distance","isUnset","index","tableLabel","modalLabel","String","columnSpecs","out","a","key","label","valuesIndex","push","isTemp","tableRows","dispData","tempData","specs","fmt","tempById","forEach","r","id","dispRow","dispValues","values","tempRow","tempValues","cells","spec","value","formattedDate","moment","format","date","modalFields","mode","editingId","existingRow","find","dateField","type","cellByKey","c","channelFields","modalTitle","verb","actions","openAdd","set","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","adapterOptions","promises","deleteRecord","save","Promise","all","then","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","Number","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","oldTemp","oldDisp","tempRecord","createRecord","dispRecord","updateProperty","propertyName","propertyValue","_default","_exports","default","Component","extend","_default","_exports","default","Component","extend","Component","extend","api","service","session","readingID","isLoading","selectedDatetime","readingsArray","init","_super","arguments","getReadingArray","console","log","get","set","url","getApiBaseUrl","response","fetch","method","headers","Authorization","localStorage","token","result","status","ok","json","data","error","actions","searchReading","onDatetimePickerChange","input","target","value","onSelectReadingObject","readingObj","forEach","element","id","fn","Component","extend","store","service","session","init","_super","arguments","didInsertElement","buildDiagram","didUpdateAttrs","scheduleOnce","APPROVEDINSTRUMENTTYPES","dExto","dCable","dConv","dMPBX","dMicro","dRebar","dRebarV2","dAdict","EXTO_HEAD_BODY_COLOR","EXTO_BODY_COLOR","EXTO_ANCHOR_COLOR","triggerDiagramReset","get","buildHACAnchorDiagram","Number","buildHATAnchorDiagram","buildHeadAtHeadToeLabel","buildExcavationDrillDirectionDiagram","buildInputTextbox","i","id","upperAnchorComponentHeight","anchorTextboxWidth","inputElement","document","createElement","style","width","height","setAttribute","fontSize","flexShrink","value","addEventListener","event","onCustomNumberInput","target","buildInputCheckbox","checkboxWidthHeight","divElement","display","flexDirection","alignItems","justifyContent","textContent","checkboxElement","checked","onCustomCheckBoxInput","appendChild","buildRawLabel","textDiv","inputComponentBuilder","inputComponent","buildAnchorHead","anchorHeadWidth","anchorComponentHeight","color","divHeadBodyComp","backgroundColor","borderTopLeftRadius","borderBottomLeftRadius","rotate","buildAnchorBody","anchorBodyWidth","divBodyComp","buildAnchorPoint","anchorWidth","divAnchor","type","channels","masterDiagramSection","getElementById","upperMasterSection","innerHTML","anchorCenterSection","lowerMasterSection","anchorHeadOffsetWidth","_instrumentCount","getInstrumentCountFromId","anchorHead","anchorBody","anchorPoint","totalAnchorWidth","bodyWidth","e","console","log","excavationLabelComponent","drillDirectionLabelComponent","headToeLabelSection","actions","onTextboxInput","key","onCheckboxInput","Component","extend","inst_id","actions","setID","inst","set","id","setValue","instrumentTypeID","Component","extend","router","service","session","isRowDeleteConfirmationDialog","licenceIsValid","computed","valid","data","authenticated","isValid","actions","createInstrument","get","transitionTo","toggleRowDeleteConfirmationDialog","id","curVal","set","remove","model","object","_this","_store","errBox","document","getElementById","hidd","save","then","deleteRecord","unloadRecord","catch","reason","status","errors","hidden","Component","extend","isVisibleImportKeyForm","isVisibleError","isSubmitting","loading","actions","updateProperties","propertyNames","propertyValues","_this","length","forEach","propertyName","i","set","Array","isArray","importKey","cancelImport","errorHappened","message","console","log","scheduleOnce","_default","_exports","default","FileField","extend","session","service","api","isSubmitting","isSubmittingChangeObserver","observer","get","send","uploader","files","ajaxSettings","computed","headers","Accept","withCredentials","Authorization","localStorage","token","fileSettings","filesDidChange","Uploader","create","url","getApiBaseUrl","paramName","set","updateLicence","endsWith","response","fetch","method","ok","licence","json","data","window","location","reload","actions","submitFile","object","console","log","_this","isEmpty","value","$","css","upload","then","error","sendAction","statusText","cancel","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","LogViewerTableComponent","_exports","default","_class","Component","constructor","args","_descriptor","logViewers","store","findAll","loadLogViewers","query","prototype","service","action","getOwnPropertyDescriptor","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","_spatialChart","anchorDistances","computed","firstObject","get","dataValuesCount","length","values","anchors","content","map","anchor","modelName","splice","anchorMidDistances","midDistances","unshift","i","push","toFixed","spatialXValues","spatialChartLinesData","fullRangeChartData","xValues","item","key","timestamp","v","idx","x","y","filter","pt","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","seismicEventsChartData","event","type","momentMagnitude","blastEventsChartData","tonnes","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","_super","arguments","spatialLinesData","Promise","resolve","then","instrument","toString","forEach","id","yAxisTitle","_buildSpatialChart","linesData","canvas","element","querySelector","infoPanel","instrumentLength","e","anchorXValues","lineCount","getLineColor","total","t","r","Math","round","g","lineDatasets","line","label","data","borderColor","backgroundColor","borderWidth","max","pointRadius","pointHoverRadius","tension","parsing","_isLine","anchorDatasets","dist","String","showLine","_isRef","datasets","noDataPlugin","afterDraw","chart","hasData","ds","hidden","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","anchorDotsPlugin","xScale","scales","yArea","px","getPixelForValue","beginPath","arc","PI","fill","crosshairX","crosshairPlugin","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","externalTooltipHandler","context","tooltip","opacity","lineItems","dataPoints","dataset","innerHTML","depth","parsed","html","toLocaleString","color","val","join","spatialChart","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","onHover","min","display","text","size","afterBuildTicks","axis","visibleAnchors","ticks","callback","plugins","legend","position","align","labels","generateLabels","pointStyle","datasetIndex","onClick","enabled","external","origXMin","origXMax","addEventListener","preventDefault","rect","getBoundingClientRect","yScale","factor","deltaY","cursorX","getValueForPixel","clientX","cursorY","clientY","update","passive","panStartX","panStartY","panXMin","panXMax","panYMin","panYMax","style","cursor","xPxRange","yPxRange","onPanEnd","document","set","willDestroyElement","destroy","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","yAxisUnit","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartData","computed","map","event","type","x","timestamp","momentMagnitude","blastEventsChartData","tonnes","anchorDistances","instType","instrument","anchors","numPorts","ctr","push","arr","content","anchor","modelName","midPoints","length","mid","toFixed","splice","headExclusion","leftAnchors","rightAnchors","center","Math","ceil","concat","slice","midLeft","midRight","shift","pop","unshift","sort","fullRangeChartLinesData","fullRangeChartData","isStrain","lines","chartLineName","chartLineIndex","key","values","item","vals","Array","isArray","y","zoomTempData","yAxis","hidden","rawValues","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","Promise","resolve","then","toString","forEach","id","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","filter","v","xMin","min","xMax","max","datasets","line","i","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","pt","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","e","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","val","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewInstrumentObject","_this","set","strokeLength","CreatePackInstrument","Component","constructor","args","_defineProperty","setProject","value","selectedId","foundObject","projectLookupList","find","lookup","id","setLevel","levelLookupList","createInstrument","object","store","get","newInstrumentObject","setError","error","instrumentType","peekRecord","headAt","active","zeroTimestamp","moment","format","installDate","newInstrument","dup","createRecord","err","message","includes","save","then","results","number","distance","instrument","catch","reason","init","arguments","_exports","default","resetNewRawDataValueObject","_this","displacementValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newDisplacementValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newDisplacementValueObjectValues","actions","setNewDisplacementValue","event","vals","target","value","setNewTimestampValue","setTemperatureValue","saveNew","displacementValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newDisplacementValues","savedDisplacementValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","Component","extend","didReceiveAttrs","_super","arguments","router","service","store","api","session","selectedVendor","selectedModel","editing","activeActionTab","ordering","paginationSearchConfig","searchObject","calibrationDateOrdering","pagination","page","pageSize","totalPages","alertProfilePaginationList","anchorDiagramInputInitalValue","batchSelectedAlertsID","isAlertsListVisible","isEditAnchorDiagram","init","getAlertsList","payload","instrumentId","get","id","page_size","url","getApiBaseUrl","queryString","URLSearchParams","toString","response","fetch","method","headers","Authorization","localStorage","token","status","responseData","json","metaPaginationData","set","processAlertsList","data","updatePaginationList","rawList","list","forEach","element","rawElement","push","counter","createdAt","evaluationType","isAcknowledged","isActive","isMuted","lastDataReceivedAt","lastEvaluatedAt","lastTriggeredAt","level","name","channels","note","parameters","softResetCounter","range","maxPageToShow","paginationObj","i","orderingObserver","observer","anchorDiagramLabelInitalValue","computed","_a","content","anchors","anchorObj","distance","licenceIsValid","valid","authenticated","isValid","actions","saveAnchors","anchorMap","anchor","savePromises","channelsNum","anchorNumber","newDistance","existingAnchor","save","newAnchor","createRecord","instrument","number","Promise","all","window","location","reload","error","console","log","updateChannelInput","key","value","cycleEditAnchorDiagram","cycleActionBar","tabName","jumpToPage","Number","parseInt","err","cycleAlertsListVisibility","sortBy","property","viewData","endDateObj","moment","startDateObj","subtract","format","formattedEndDateObj","baseUnit","transitionTo","queryParams","tGraph","sGraph","editField","stopEditField","saveInstrument","_this","t","confirm","href","Component","extend","store","service","chartId","startTimestamp","endTimestamp","progressAnimationDuration","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","tonnes","zoomDataPoints","item","chartData","modelName","unshift","error","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","dataValuesCount","length","anchors","content","anchor","splice","anchorMidDistances","copy","midDistances","i","mid","push","toFixed","anchorColors","d3","scale","category10","range","anchorDistancesChartReferencePoints","anchorDistance","inlineHoverValuesSideOffset","zoomChartLinesData","_this","chartLine","chartLineIndex","dataPoint","dataPointIndex","concat","fullRangeChartLinesData","chartLineName","numLines","lineDrawDelay","chartDataModelName","query","model_name","yAxisLegend","promise","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","instrument","toString","forEach","id","axisName","units","zoomChart","nv","models","lineChartProgressAnimationAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","distXAxisScale","duration","showDistX","showLegend","showXAxis","noData","ex","forceX","addGraph","xAxis","tickPadding","showMaxMin","yAxis","axisLabel","tickFormat","distXAxis","fullRangeChartXDomainLength","utils","getDateAutoscaleFormat","Date","distX","size","distXTooltipBottomOffset","distXRiseUpAnimationDelay","lineWidth","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","activeTooltipContent","windowResize","update","e","log","JSON","stringify","state","focus","line","syncBrushing","independentBrushing","showYAxis","getQueryParams","_default","_exports","default","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","yAxisUnit","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartDistXData","computed","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","sort","a","b","blastEventsArray","data_set","tonnes","zoomTempPoints","item","rawValues","chartData","Array","isArray","slice","zoomDataPoints","modelName","push","e","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","instType","instrument","dataValuesCount","length","error","anchors","arr","content","anchor","midPoints","ctr","toFixed","unshift","zoomChartLinesData","_this","chartLineName","chartLineIndex","yAxis","dataPoint","dataPointIndex","pop","shift","temp","concat","fullRangeChartLinesData","chartDataModelName","query","model_name","yAxisLegend","promise","queryRecord","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","toString","forEach","id","axisName","units","raw","usesPoints","chartName","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","scale","category10","range","duration","showDistX","noData","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","utils","getDateAutoscaleFormat","Date","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","some","datum","filter","Boolean","call","dispatch","on","brushExtent","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","ppv","ppa","freq","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","distX2","activeTooltipContent","windowResize","update","log","JSON","stringify","state","setData","setChart","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","ex","getQueryParams","Component","extend","store","service","router","isModalOpen","modalMode","modalEditingRowId","anchorLabels","computed","anchors","get","arr","content","validCounter","map","anchor","idx","distance","isUnset","index","tableLabel","modalLabel","String","columnSpecs","out","a","key","label","valuesIndex","push","isTemp","tableRows","dispData","tempData","specs","fmt","tempById","forEach","r","id","dispRow","dispValues","values","tempRow","tempValues","cells","spec","value","formattedDate","moment","format","date","modalFields","mode","editingId","existingRow","find","dateField","type","cellByKey","c","channelFields","modalTitle","verb","actions","openAdd","set","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","adapterOptions","promises","deleteRecord","save","Promise","all","then","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","Number","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","oldTemp","oldDisp","tempRecord","createRecord","dispRecord","updateProperty","propertyName","propertyValue","_default","_exports","default","Component","extend","_default","_exports","default","Component","extend","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","yAxisUnit","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartData","computed","map","event","type","x","timestamp","momentMagnitude","blastEventsChartData","tonnes","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_loadAnchorDistances","positionLabels","slaveData","Promise","all","label","position","anchors","distances","content","id","anchorDistances","e","filter","obj","finalDistances","offsetValue","forEach","slave","i","concat","distance","index","newDist","parseFloat","toFixed","push","slice","modelName","midPoints","ctr","length","_buildYAxisTitle","chartData","axisName","getAttr","key","units","didInsertElement","fullRangeChartData","isStrain","lines","chartLineName","chartLineIndex","String","values","item","rawVals","vals","arr","y","zoomTempData","yAxis","hidden","rawValues","Array","isArray","resolve","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","v","xMin","Math","min","xMax","max","datasets","line","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","pt","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","val","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","then","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewInstrumentObject","_this","set","CreateMultiExtoInstrument","Component","constructor","args","_defineProperty","onDropdownSearch","value","searchForExto","store","get","respData","query","small","search","then","data","loadInstruments","error","setID","instr","instrumentList","selectedInstruments","length","includes","addObject","resetInstrument","object","createInstrument","newInstrumentObject","setError","id","instrumentType","peekRecord","headAt","active","newInstrumentID","zeroTimestamp","moment","format","dup","forEach","index","instrumentPosition","existingInstrument","unloadRecord","newInstrument","createRecord","err","console","log","message","save","results","catch","reason","init","arguments","instruments","rawData","filteredInstruments","filter","instrument","title","toLowerCase","mappedGateways","map","instrumentID","position","buildInstrumentID","newID","buildInstrumentChannels","selectedInstrList","numberOfChannels","channels","getChannelsFromId","_exports","default","Component","extend","session","service","isRowDeleteConfirmationDialog","store","rowData","masterModifiedRawData","init","_super","arguments","displaceRowvalues","get","tempRowValues","objectAt","Number","key","buildMainRowData","multiExtoInstr","values","console","log","mainData","i","instr_position_index","instrumenPositionObj","subExtoID","id","channels","subRowData","length","slice","push","set","buildCustomAnchors","computed","extoInstrumentObj","anchors","instrumentID","instrPositionAttributesObj","findRecord","then","instrument","anchorPt","obj","forEach","element","catch","reason","getSpecificRowData","currMultiDExto","currentExtoInstr","index","actions","updateProperty","propertyName","propertyValue","Component","extend","session","service","isRowDeleteConfirmationDialog","store","init","_super","arguments","getAnchors","slaveInstrID","slaveInstrObjDataPromises","map","positionLabel","instrumentPosition","get","instrumentPositionID","instrPositionAttributesObj","then","anchors","anchorDistances","content","anchor","id","reason","slaveInstrObjData","Promise","all","filter","obj","set","actions","updateProperty","propertyName","propertyValue","resetNewInstrumentObject","_this","set","CreatePackInstrument","_exports","default","_class","Component","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","setID","instr","instrumentList","get","selectedInstruments","length","includes","addObject","viewData","id","transitionTo","tGraph","editField","stopEditField","saveInstrument","t","confirm","window","location","href","init","arguments","loadSelectedInstruments","instrument","selectedInstrs","i","instrPositionLabel","instrPositionObj","instrPositionAttributesObj","store","findRecord","then","anchorPt","obj","forEach","element","strokeLen","anchors","strokeLength","catch","reason","title","instrumentID","position","data","anchorPoints","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","_default","_exports","default","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","actions","saveImage","console","log","html2canvas","document","querySelector","then","canvas","downloadLink","createElement","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","lineIndex","lineSettings","JSON","parse","localStorage","getItem","setItem","stringify","d3","select","style","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","location","sort","a","b","blastEventsArray","data_set","tonnes","zoomTempPoints","item","rawValues","chartData","Array","isArray","slice","zoomDataPoints","indx","dataArry","mainArr","adjustedDataArry","lastPointDataIndicies","slaveInstrID","positionLabel","index","instrumentPosition","subArry","anchorIndex","value","push","Number","parseInt","offsetValue","forEach","val","parseFloat","includes","modelName","fullRangeDataPoints","instrumentID","zoomTimePoints","fullRangeTimePoints","anchorDistances","instType","instrument","dataValuesCount","length","error","slaveInstrObjDataPromises","positionObjID","instrPositionAttributesObj","anchors","content","anchor","id","reason","slaveInstrObjData","Promise","all","filter","obj","finalAnchorDistances","slaveExto","i","concat","distance","newDist","toFixed","modifiedAnchorDistances","midPoints","unshift","ctr","zoomChartLinesData","_this","chartLineName","chartLineIndex","yAxis","dataPoint","dataPointIndex","finalVal","pop","shift","temp","fullRangeChartLinesData","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","promise","queryRecord","title","didInsertElement","zoomChartSVG","fullRangeChartSVG","apiCallsPromises","randomHexColorCode","n","Math","random","toString","colorArray","numColor","colorHEX","results","axisName","units","raw","usesPoints","chartName","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","duration","showDistX","noData","legend","rightAlign","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","utils","getDateAutoscaleFormat","Date","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","numDecimals","some","datum","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","ppv","ppa","freq","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","distX2","activeTooltipContent","windowResize","update","e","state","setData","setChart","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","ex","getQueryParams","Component","extend","init","_super","arguments","getSelectedExtos","instrument","isVisibleCreateNewForm","store","service","router","session","selectedInstrs","i","instrPositionLabel","instrPositionObj","instr","title","id","instrumentID","position","data","set","selectedInstruments","actions","updateProperty","propertyName","propertyValue","Component","extend","session","service","isRowDeleteConfirmationDialog","rdcd","store","childDict","init","_super","arguments","actions","_default","_exports","default","Component","extend","Component","extend","session","service","userProfileService","api","provider1","isLoading","oauthProfile","isShowMicrosoftADTestMessage","microsoftADTestMessages","isEditingClientID","isEditingTenantID","isEditingRedirectURI","isEditingTokenURL","isEditingClientSecret","init","_super","arguments","getOAuthProfile","isMasterUser","computed","profile","is_master_key_account","set","url","getApiBaseUrl","response","fetch","method","headers","Authorization","localStorage","token","status","responseData","json","getClientID","client_id","getTenantID","tenant_id","getClientSecret","getRedirectURI","redirect_uri","getTokenURL","token_url","updateIsEditing","key","actions","updateIsEditingProperty","clearMicrosoftADTestMessages","updateProperty","docuKey","typeKey","dataobj","docu","document","getElementById","undefined","value","trim","body","JSON","stringify","result","ok","newProfile","testMicrosoftADConnection","success","error","console","e","ALL","UNGROUPED","NEW_GROUP","ROW_HILITE","_default","_exports","default","Component","extend","session","service","userProfileService","api","isLoading","isEditModalOpen","selectedContact","isGroupModalOpen","selectedGroup","groupModalAssignAfter","selectedGroupFilter","searchText","sortKey","sortAsc","contactList","groupList","selectedIds","init","_super","arguments","set","refreshAll","Promise","all","getContacts","getGroups","url","getApiBaseUrl","response","fetch","method","headers","Authorization","localStorage","token","status","responseData","json","data","displayedContacts","computed","list","slice","f","filter","c","group","q","trim","toLowerCase","first_name","last_name","email","phone_number","includes","key","dir","sort","a","b","av","bv","group_name","toString","sel","forEach","id","ungroupedCount","length","allRowStyle","ungroupedRowStyle","displayGroups","g","selectionCount","hasSelection","selectionGroupId","ids","undefined","first","allSame","every","isSelectionGrouped","selectionGroupName","gid","find","x","name","allDisplayedSelected","d","_selected","editTitle","groupModalTitle","closeContactModal","saveContact","editing","body","JSON","stringify","detail","e","console","log","window","alert","deleteContact","contact","removeFromSelection","patchContactGroup","contactId","groupId","closeGroupModal","saveGroup","patchGroup","postGroup","description","results","map","failures","r","join","clearSelection","deleteGroup","next","actions","selectGroupFilter","val","newGroup","renameGroup","label","confirmed","confirm","updateSearch","event","target","value","sortBy","openAddContactModal","openEditContactModal","toggleContact","idx","indexOf","push","splice","toggleSelectAll","displayed","displayedIds","set2","Set","Array","from","groupSelected","el","document","getElementById","Number","ungroupSelected","Component","extend","session","service","userProfileService","api","isEditModalOpen","selectedContactorCompany","isLoading","paginationSearchConfig","searchObject","settingsConfig","MAX_TIMEOUT_AWAITING_SAMPLING","ASCENDING_CONST","DESCENDING_CONST","init","_super","arguments","getCompanyList","set","payload","get","url","getApiBaseUrl","queryString","URLSearchParams","toString","response","fetch","method","headers","Authorization","localStorage","token","status","responseData","json","data","editTitle","computed","id","isYieldPointSupervisor","p","isYP","company","includes","isSup","override_power_supervisor_level","closeEditUserModal","_deleteContractors","console","log","_createContractor","body","JSON","stringify","detail","e","window","alert","_saveContractorsEdits","updatedData","actions","saveUserEdits","openAddContractorModal","openEditContractorModal","deleteContractor","name","company_name","label","confirmed","confirm","columnCycleOrdering","idColumnComp","document","getElementById","textContent","comp1","comp2","comp3","comp4","Component","extend","session","service","userProfileService","api","userProfile","isEditingFirstName","isEditingLastName","isEditingEmail","isEditingUsername","isEditingCompany","isEditingDepartment","isEditingPosition","isValidUsername","usernameTips","isValidEmail","emailTips","showEmailError","emailErrorMessage","showUsernameError","emailUsernameMessage","isMasterUser","computed","profile","is_master_key_account","getFirstName","first_name","getLastName","last_name","getEmail","email","getUsername","username","getCompany","company","getDepartment","department","getPosition","position","updateIsEditing","key","set","resetError","updateError","typeKey","errorMessage","validateEmail","length","emailRegex","test","validateUsername","inputUsername","usernameRegex","actions","updateEmail","event","target","value","updateUsername","updateIsEditingProperty","updateProperty","docuKey","dataobj","docu","document","getElementById","undefined","trim","url","getApiBaseUrl","response","fetch","method","headers","Authorization","localStorage","token","body","JSON","stringify","result","json","updatedObj","updated","ok","join","updateField","Component","extend","session","service","userProfileService","api","isLoading","paginationSearchConfig","searchObject","settingsConfig","MAX_TIMEOUT_AWAITING_SAMPLING","ASCENDING_CONST","DESCENDING_CONST","calibrationDateOrdering","pagination","page","pageSize","totalPages","paginationPageSizes","calibrationInstrumentProfilePaginationList","resetPasswordMessage","isShowResetPasswordMessage","init","_super","arguments","getActivityLogList","set","payload","page_size","get","url","getApiBaseUrl","queryString","URLSearchParams","toString","response","fetch","method","headers","Authorization","localStorage","token","status","responseData","json","rawList","data","included","map","record","flattenActivityLog","console","log","metaPaginationData","updatePaginationList","attrs","attributes","relationships","activity_message","action_date","instrument_snapshot_id","gateway_snapshot_id","instrument_id","instrument","id","gateway_id","gateway","range","maxPageToShow","paginationObj","push","i","isStaffUser","computed","profile","is_staff","actions","sendResetPasswordLink","email","alert","body","JSON","stringify","err","error","setTimeout","isDestroyed","isDestroying","accessAdmin","event","preventDefault","URL","window","location","href","port","getApiBasePort","open","columnCycleOrdering","instrument_id_sortComp","document","getElementById","textContent","action_date_sortComp","gateway_id_sortComp","jumpToPage","Number","parseInt","Component","extend","session","service","userProfileService","api","isEditModalOpen","selectedUser","isLoading","paginationSearchConfig","searchObject","settingsConfig","MAX_TIMEOUT_AWAITING_SAMPLING","ASCENDING_CONST","DESCENDING_CONST","init","_super","arguments","getUsers","set","payload","get","url","getApiBaseUrl","queryString","URLSearchParams","toString","response","fetch","method","headers","Authorization","localStorage","token","status","responseData","json","users","editTitle","computed","id","closeEditUserModal","_saveUserEdits","updatedData","body","JSON","stringify","console","log","actions","saveUserEdits","openEditUserModal","user","columnCycleOrdering","idColumnComp","document","getElementById","textContent","firstNameColumnComp","lastNameColumnComp","usernameColumnComp","lastLoginColumnComp","dateJoinedColumnComp","Component","extend","userProfileService","service","api","session","init","_super","arguments","profileImage","computed","profile","profile_picture","isMasterUser","is_master_key_account","isSupervisor","override_power_supervisor_level","firstName","first_name","lastName","last_name","actions","triggerImageUpload","document","getElementById","click","updateTab","value","set","uploadProfileImage","event","file","target","files","allowedTypes","includes","type","alert","MAX_SIZE_MB","size","formData","FormData","append","url","getApiBaseUrl","response","fetch","method","headers","Authorization","localStorage","token","body","result","json","ok","updateField","e","console","error","navbar","_exports","default","_dec","service","_dec2","computed","_dec3","_dec4","_dec5","_dec6","_dec7","_dec8","_dec9","_dec0","_dec1","_class","Component","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_descriptor4","apiPort","ENV","API_PORT","navigateToSettings","router","transitionTo","navigateToMyProfile","username","wrapper","userProfileService","firstName","lastName","profile","first_name","length","last_name","isValid","session","data","authenticated","undefined","hasPermissionAnalyticsTab","is_superuser","can_view_packs_validation_analytics","can_view_sensor_calibration_analytics","hasPermissionPacksValidationAnalytics","hasPermissionSensorCalibrationAnalytics","hasPermissionProductionTab","can_view_sensor_calibration","can_view_packs_validation","hasPermissionSensorCalibration","hasPermissionPacksValidation","isWithinLimit","limit","modules","navigateToSensorCalibrationAnalytics","event","preventDefault","url","URL","window","location","href","navigateToPacksValidationAnalytics","navigateToSensorCalibration","navigateToPacksValidation","logout","console","log","invalidate","error","_applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","action","Object","getOwnPropertyDescriptor","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","GATEWAY_ENUM","Object","freeze","Firmware","Coordinator","Voltage","RSSI","carrier","Readings","Uptime","Reconnection","Uploads","Temperature","var_1","var_2","var_3","AXIS_LABELS","buildGatewayLines","sourceData","tempData","leftAxis","rightAxis","leftIndex","rightIndex","tempValues","forEach","item","vals","get","push","leftLine","key","yAxis","values","map","i","val","length","x","y","rightLine","_default","_exports","default","Component","extend","store","service","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","computed","attrs","getQueryParams","fullRangeChartLinesData","overviewChartLinesData","didInsertElement","_super","arguments","linesData","y1Title","y2Title","_buildMainChart","_buildOverviewChart","_this","canvas","element","querySelector","xMin","xMax","l","v","datasets","line","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","hidden","noDataPlugin","id","afterDraw","chart","xScale","scales","hasData","ds","pt","min","max","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","crosshairX","pinnedX","crosshairPlugin","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","toFixed","buildLegendItems","color","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","e","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","px","targetX","getValueForPixel","items","bestDist","Infinity","d","Math","abs","setPinnedTooltip","type","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","title","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","set","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","startQP","endQP","getPixelForValue","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","Array","isArray","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","axisScaleObserver2","autoAxis2","axisMin2","axisMax2","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","then","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewGatewayObject","_this","set","CreateBluCellGateway","Component","constructor","args","_defineProperty","createGateway","object","store","get","newGatewayObject","error","id","installDate","depth","active","interval_upload","query","filter","interval_value","interval_group_name","then","r","at","catch","interval_read","moment","format","newGateway","dup","createRecord","peekRecord","typeID","err","message","includes","save","results","reason","setID","gwId","console","log","parent","findRecord","parentGateway","init","arguments","loadGateways","gatewayList","rawData","filteredGateways","gateway","title","toLowerCase","mappedGateways","map","parentId","gw","value","type","_exports","default","resetNewRawDataValueObject","_this","gatewayValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newGatewayValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newGatewayValueObjectValues","actions","saveNew","console","log","gatewayValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newGatewayValues","savedGatewayValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","EditGateway","_exports","default","_class","Component","extend","store","service","gatewayReadingsIntervals","initialSelection","isAuthenticated","selectedModel","editing","parentLoading","init","_super","arguments","loadGatewaysAsync","set","query","small","gateway_type","then","rawData","isDestroying","isDestroyed","filteredGateways","Array","from","filter","gateway","active","get","title","toLowerCase","parent","selectedItem","mappedGateways","map","gw","value","type","id","catch","error","console","computed","gateways","getGatewayUploadIntervalID","gatewayUploadInterval","toString","getGatewayReadIntervalID","gatewayReadInterval","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","setGatewayInterval","event","selectedOptions","target","selectedValue","parseInt","option","intervalType","notSelected","findRecord","interval","notSelectedIntervalValue","group_name","interval_value","interval_group_name","results","save","log","updatePage","viewData","transitionTo","tGraph","editField","stopEditField","saveGateway","_this","t","confirm","window","location","href","sortBy","property","setID","gwId","parentGateway","newRelation","createRecord","childGateway","isCurrent","addObject","_applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","temperaturePoints","distXRiseUpAnimationDuration","leftAxis","computed","attrs","getQueryParams","console","log","rightAxis","GATEWAY_ENUM","Object","freeze","Firmware","Coordinator","Voltage","RSSI","carrier","Readings","Uptime","Reconnection","Uploads","Temperature","var_1","var_2","var_3","zoomTempPoints","zoomTempData","get","forEach","item","i","chartData","values","push","zoomDataPointsLeftAxis","zoomChartData","leftAxisIndex","zoomLeftAxis","map","JSON","stringify","zoomDataPointsRightAxis","zoomRightAxis","rightAxisIndex","zoomDataPoints","left","fullRangeDataPoints","fullRangePoints","itemHolder","zoomTimePoints","fullRangeTimePoints","anchorDistances","zoomChartLinesData","_this","seismicEventsChartDistXData","blastEventsChartDistXData","tempPoints","mName","chartLineName","chartLineIndex","key","type","yAxis","dataPoint","dataPointIndex","moment","valueOf","temp","concat","fullRangeChartLinesData","fullRangeTempPoints","sortBy","temperature","chartDataModelName","query","model_name","yAxisLegend","chartTitle","promise","queryRecord","title","getTitleAndUnits","axis","axisValues","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","useInteractiveGuideline","x","d","y","color","scale","category10","range","duration","showLegend","showDistX","noData","showYAxis","y2Axis","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","length","utils","getDateAutoscaleFormat","Date","axis1Title","axis2Title","y1Axis","axisLabel","axisLabelDistance","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","format","some","datum","filter","Boolean","call","controls","disabled","dispatch","on","brushExtent","set","tooltip","hidden","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","eventSize","timestamp","distXMouseMove","seismicEventsArray","distX0","onDistXTooltipShowCall","blastEventsArray","distX1","vibeEventsArray","distX2","distXIndex","data_set","activeTooltipContent","windowResize","update","usesPoints","chartName","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","fullRangeChartXDomainLength","ex","Component","extend","isVisibleCreateNewForm","anchorDistances","computed","getGatewayData","fields","items","filteredData","get","forEach","item","values","firmware","coordinator","voltage","rssi","mesh_id","length","push","id","originalValue","save_values","actions","updateProperty","propertyName","propertyValue","console","log","set","Component","extend","selected","defaultSelected","computed","console","log","actions","handleSelectedFieldChange","newValue","set","LeftAxisDropdown","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","tGraph","id","modelName","params","console","log","get","transitionTo","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Component","extend","rightAxisField","routeValue","defaultRightAxisField","computed","console","log","getRouteValue","selected","toLowerCase","set","actions","handleRightAxisFieldChange","newValue","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","_spatialChart","anchorDistances","computed","firstObject","get","dataValuesCount","length","values","anchors","content","map","anchor","modelName","splice","anchorMidDistances","midDistances","unshift","i","push","toFixed","spatialXValues","spatialChartLinesData","zoomChartData","xValues","item","key","timestamp","v","idx","x","y","filter","pt","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","seismicEventsChartData","event","type","momentMagnitude","blastEventsChartData","tonnes","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","_super","arguments","spatialLinesData","Promise","resolve","then","instrument","toString","forEach","id","yAxisTitle","_buildSpatialChart","linesData","canvas","element","querySelector","instrumentLength","e","anchorXValues","lineDatasets","line","label","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","tension","parsing","_isLine","anchorDatasets","dist","String","showLine","_isRef","datasets","noDataPlugin","afterDraw","chart","hasData","ds","hidden","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","anchorDotsPlugin","xScale","scales","yArea","px","getPixelForValue","beginPath","arc","Math","PI","fill","crosshairX","crosshairPlugin","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","legendTooltipEl","highlightedIndex","buildSpatialLegendItems","indexOf","color","join","highlightLine","skipUpdate","update","restoreLines","attachSpatialLegendHandlers","el","onmouseover","target","closest","parseInt","dataset","onmouseout","initSpatialLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","distToSegment","py","x1","y1","x2","y2","dx","dy","lenSq","t","max","min","projX","projY","ex","ey","sqrt","findClosestLine","mouseX","mouseY","closestIdx","closestDist","Infinity","getDatasetMeta","pts","j","p1","p2","datasetIndex","pixelDist","lastTooltipIdx","updateSpatialTooltip","pointerEvents","activeIdx","valuesHtml","anchorColor","spatialChart","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","axis","onHover","display","text","size","afterBuildTicks","visibleAnchors","ticks","callback","val","toLocaleString","plugins","legend","tooltip","enabled","parentElement","origXMin","origXMax","addEventListener","preventDefault","rect","getBoundingClientRect","yScale","factor","deltaY","cursorX","getValueForPixel","clientX","cursorY","clientY","passive","panStartX","panStartY","panXMin","panXMax","panYMin","panYMax","cursor","xPxRange","yPxRange","onPanEnd","set","willDestroyElement","destroy","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","zoomPlugin","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","yAxisUnit","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","yAxisUnitParam","get","set","seismicEventsChartData","computed","map","event","type","x","timestamp","momentMagnitude","location","blastEventsChartData","tonnes","anchorDistances","anchors","arr","content","anchor","modelName","midPoints","i","length","toFixed","fullRangeChartLinesData","sourceData","isStrain","lines","chartLineName","chartLineIndex","key","values","item","vals","Array","isArray","y","zoomTempData","push","yAxis","hidden","rawValues","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","Promise","resolve","then","instrument","toString","forEach","id","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","filter","v","xMin","Math","min","xMax","max","datasets","line","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","pt","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","e","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","val","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","_buildOverviewChartLEGACY","fullXMin","fullXMax","EDGE_HIT_PX","dragMode","selLeft","selWidth","pixelToTimestamp","scale","clamped","ratio","timestampToPixel","ts","clampToChartArea","applySelection","clientXToOverlayPx","getDragMode","withinLeft","withinRight","inside","updateCursor","cursor","applyMainChartZoom","tsStart","tsEnd","mainChart","yMin","yMax","pad","commitSelection","allPts","p","dataMin","dataMax","clampedStart","clampedEnd","dragAnchorX","prevDragX","delta","chartL","chartR","newLeft","newWidth","_e","startTimestamp","endTimestamp","setTimeout","x0","x1","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","destroy","actions","saveImage","html2canvas","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewInstrumentObject","_this","set","CreatePackInstrument","Component","constructor","args","_defineProperty","setProject","value","selectedId","foundObject","projectLookupList","find","lookup","id","setLevel","levelLookupList","createInstrument","object","store","get","newInstrumentObject","setError","error","instrumentType","peekRecord","headAt","active","strokeLength","zeroTimestamp","moment","format","installDate","newInstrument","dup","createRecord","err","message","includes","save","then","results","catch","reason","init","arguments","_exports","default","resetNewRawDataValueObject","_this","displacementValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newDisplacementValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newDisplacementValueObjectValues","actions","setNewDisplacementValue","event","vals","target","value","setNewTimestampValue","setTemperatureValue","saveNew","displacementValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newDisplacementValues","savedDisplacementValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","Component","extend","didReceiveAttrs","_super","arguments","router","service","store","api","session","editing","selectedVendor","selectedModel","project","level","activeActionTab","ordering","paginationSearchConfig","searchObject","calibrationDateOrdering","pagination","page","pageSize","totalPages","alertProfilePaginationList","anchorDiagramInputInitalValue","batchSelectedAlertsID","isAlertsListVisible","isEditAnchorDiagram","init","getAlertsList","payload","instrumentId","get","id","page_size","url","getApiBaseUrl","queryString","URLSearchParams","toString","response","fetch","method","headers","Authorization","localStorage","token","status","responseData","json","metaPaginationData","set","processAlertsList","data","updatePaginationList","rawList","list","forEach","element","rawElement","push","counter","createdAt","evaluationType","isAcknowledged","isActive","isMuted","lastDataReceivedAt","lastEvaluatedAt","lastTriggeredAt","name","channels","note","parameters","softResetCounter","range","maxPageToShow","paginationObj","i","orderingObserver","observer","anchorDiagramLabelInitalValue","computed","_a","content","anchors","anchorObj","distance","licenceIsValid","valid","authenticated","isValid","actions","saveAnchors","anchorMap","anchor","savePromises","channelsNum","anchorNumber","newDistance","existingAnchor","save","newAnchor","createRecord","instrument","number","Promise","all","window","location","reload","error","console","log","updateChannelInput","key","value","cycleEditAnchorDiagram","cycleActionBar","tabName","jumpToPage","Number","parseInt","err","cycleAlertsListVisibility","sortBy","property","setProject","event","selectedId","target","foundObject","projectLookupList","find","lookup","setLevel","levelLookupList","viewData","endDateObj","moment","startDateObj","subtract","format","formattedEndDateObj","baseUnit","transitionTo","queryParams","tGraph","sGraph","editField","stopEditField","Component","extend","store","service","chartId","startTimestamp","endTimestamp","progressAnimationDuration","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","tonnes","zoomDataPoints","item","chartData","modelName","unshift","error","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","firstObject","dataValuesCount","length","anchors","content","anchor","splice","anchorMidDistances","copy","midDistances","i","mid","push","toFixed","anchorColors","d3","scale","category10","range","anchorDistancesChartReferencePoints","anchorDistance","inlineHoverValuesSideOffset","zoomChartLinesData","_this","anchorDist","chartLine","chartLineIndex","dataPoint","dataPointIndex","concat","fullRangeChartLinesData","chartLineName","numLines","lineDrawDelay","chartDataModelName","query","model_name","yAxisLegend","promise","queryRecord","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","instrument","toString","forEach","id","axisName","units","zoomChart","nv","models","lineChartProgressAnimationAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","distXAxisScale","duration","showDistX","showLegend","showXAxis","noData","ex","forceX","addGraph","xAxis","tickPadding","showMaxMin","yAxis","axisLabel","tickFormat","distXAxis","fullRangeChartXDomainLength","utils","getDateAutoscaleFormat","Date","distX","size","distXTooltipBottomOffset","distXRiseUpAnimationDelay","lineWidth","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","activeTooltipContent","windowResize","update","e","log","JSON","stringify","state","focus","line","syncBrushing","independentBrushing","showYAxis","getQueryParams","_default","_exports","default","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","yAxisUnit","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","actions","saveImage","console","log","html2canvas","document","querySelector","then","canvas","downloadLink","createElement","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","lineIndex","lineSettings","JSON","parse","localStorage","getItem","setItem","stringify","d3","select","style","seismicEventsChartDistXData","computed","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","data_set","tonnes","zoomTempPoints","item","rawValues","chartData","Array","isArray","slice","zoomDataPoints","modelName","push","e","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","instType","instrument","dataValuesCount","length","error","anchors","arr","content","anchor","midPoints","ctr","toFixed","unshift","zoomChartLinesData","_this","chartLineName","chartLineIndex","yAxis","dataPoint","dataPointIndex","pop","shift","temp","concat","fullRangeChartLinesData","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","promise","queryRecord","title","didInsertElement","zoomChartSVG","fullRangeChartSVG","apiCallsPromises","Promise","all","results","toString","forEach","id","axisName","units","raw","usesPoints","chartName","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","scale","category10","range","duration","showDistX","noData","legend","rightAlign","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","utils","getDateAutoscaleFormat","Date","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","numDecimals","some","datum","filter","Boolean","call","dispatch","on","brushExtent","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","ppv","ppa","freq","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","distX2","activeTooltipContent","windowResize","update","state","setData","setChart","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","ex","getQueryParams","Component","extend","store","service","router","isModalOpen","modalMode","modalEditingRowId","anchorLabels","computed","anchors","get","arr","content","validCounter","map","anchor","idx","distance","isUnset","index","tableLabel","modalLabel","String","columnSpecs","out","a","key","label","valuesIndex","push","isTemp","tableRows","dispData","tempData","specs","fmt","tempById","forEach","r","id","dispRow","dispValues","values","tempRow","tempValues","cells","spec","value","formattedDate","moment","format","date","modalFields","mode","editingId","existingRow","find","dateField","type","cellByKey","c","channelFields","modalTitle","verb","actions","openAdd","set","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","adapterOptions","promises","deleteRecord","save","Promise","all","then","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","Number","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","oldTemp","oldDisp","tempRecord","createRecord","dispRecord","updateProperty","propertyName","propertyValue","_default","_exports","default","Component","extend","_default","_exports","default","Component","extend","Component","extend","router","service","paginatorSize","newPage","currentPage","computed","get","pagination","page","totalPages","totalVisibleLinksCount","halfOfTotalVisibleLinksCount","Math","ceil","firstPageLink","queryParams","Object","assign","isQueryParams","values","lastPageLink","paginationLinks","routeLink","startPageOffset","endPageOffset","i","push","linkName","params","actions","updateNewPage","value","set","goToPage","new_page","pages","id","transitionTo","keyDown","e","keyCode","send","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","_spatialChart","anchorDistances","computed","firstObject","get","dataValuesCount","length","values","anchors","content","map","anchor","modelName","splice","anchorMidDistances","midDistances","unshift","i","push","toFixed","spatialXValues","spatialChartLinesData","fullRangeChartData","xValues","item","key","timestamp","v","idx","x","y","filter","pt","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","seismicEventsChartData","event","type","momentMagnitude","blastEventsChartData","tonnes","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","_super","arguments","spatialLinesData","Promise","resolve","then","instrument","toString","forEach","id","yAxisTitle","_buildSpatialChart","linesData","canvas","element","querySelector","infoPanel","instrumentLength","e","anchorXValues","lineCount","getLineColor","total","t","r","Math","round","g","lineDatasets","line","label","data","borderColor","backgroundColor","borderWidth","max","pointRadius","pointHoverRadius","tension","parsing","_isLine","anchorDatasets","dist","String","showLine","_isRef","datasets","noDataPlugin","afterDraw","chart","hasData","ds","hidden","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","anchorDotsPlugin","xScale","scales","yArea","px","getPixelForValue","beginPath","arc","PI","fill","crosshairX","crosshairPlugin","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","externalTooltipHandler","context","tooltip","opacity","lineItems","dataPoints","dataset","innerHTML","depth","parsed","html","toLocaleString","color","val","join","spatialChart","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","onHover","min","display","text","size","afterBuildTicks","axis","visibleAnchors","ticks","callback","plugins","legend","position","align","labels","generateLabels","pointStyle","datasetIndex","onClick","enabled","external","origXMin","origXMax","addEventListener","preventDefault","rect","getBoundingClientRect","yScale","factor","deltaY","cursorX","getValueForPixel","clientX","cursorY","clientY","update","passive","panStartX","panStartY","panXMin","panXMax","panYMin","panYMax","style","cursor","xPxRange","yPxRange","onPanEnd","document","set","willDestroyElement","destroy","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","KPA_TO_MMH20","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","yAxisUnit","chartType","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","chartTypeParam","seismicEventsChartData","computed","map","event","type","x","timestamp","momentMagnitude","blastEventsChartData","tonnes","anchorDistances","instType","instrument","anchors","numPorts","ctr","push","arr","content","anchor","modelName","midPoints","length","mid","toFixed","splice","headExclusion","leftAnchors","rightAnchors","center","Math","ceil","concat","slice","midLeft","midRight","shift","pop","unshift","sort","fullRangeChartLinesData","fullRangeChartData","isStrain","isPressureRate","isMmH20","dataItems","item","id","values","lines","chartLineName","chartLineIndex","key","i","vals","Array","isArray","y","prevVals","prevArr","prevY","timeDiffDays","zoomTempData","yAxis","hidden","rawValues","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","Promise","resolve","then","toString","forEach","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","filter","v","xMin","min","xMax","max","datasets","line","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","pt","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","e","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","val","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewInstrumentObject","_this","set","CreatePackInstrument","Component","constructor","args","_defineProperty","setProject","value","selectedId","foundObject","projectLookupList","find","lookup","id","setLevel","levelLookupList","createInstrument","object","store","get","newInstrumentObject","setError","error","zeroTimestamp","installDate","instrumentType","peekRecord","headAt","active","instrumentStiffness","moment","format","newInstrument","dup","createRecord","err","message","includes","save","then","results","anchorCount","getAnchorCountFromId","ctr","number","distance","instrument","catch","reason","init","arguments","_exports","default","resetNewRawDataValueObject","_this","displacementValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newDisplacementValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newDisplacementValueObjectValues","actions","setNewDisplacementValue","event","vals","target","value","setNewTimestampValue","setTemperatureValue","saveNew","displacementValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newDisplacementValues","savedDisplacementValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","EditInstrument","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","viewData","id","get","transitionTo","tGraph","sGraph","editField","set","stopEditField","saveInstrument","_this","t","confirm","window","location","href","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Component","extend","store","service","chartId","startTimestamp","endTimestamp","progressAnimationDuration","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","tonnes","zoomDataPoints","item","chartData","modelName","plated","error","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","dataValuesCount","length","anchors","content","anchor","splice","anchorAXDistances","midPoints","headExclusion","leftAnchors","center","Math","ceil","concat","slice","midLeft","ctr","$","v","i","unshift","mid_temp","push","shift","pop","anchorBXDistances","anchorMidDistances","copy","midDistances","mid","toFixed","len","anchorColors","d3","scale","category10","range","anchorDistancesChartReferencePoints","anchorDistance","inlineHoverValuesSideOffset","zoomChartLinesData","_this","chartLine","chartLineIndex","dataPoint","dataPointIndex","fullRangeChartLinesData","forEach","element","chartLineName","numLines","lineDrawDelay","chartDataModelName","query","model_name","yAxisLegend","promise","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","instrument","toString","id","axisName","units","zoomChart","nv","models","lineChartProgressAnimationAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","distXAxisScale","duration","showDistX","showLegend","showXAxis","noData","ex","forceX","addGraph","xAxis","tickPadding","showMaxMin","yAxis","axisLabel","tickFormat","distXAxis","fullRangeChartXDomainLength","utils","getDateAutoscaleFormat","Date","distX","size","distXTooltipBottomOffset","distXRiseUpAnimationDelay","lineWidth","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","activeTooltipContent","windowResize","update","e","log","JSON","stringify","state","focus","line","syncBrushing","independentBrushing","showYAxis","getQueryParams","_default","_exports","default","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","vibeEventsChartDistXData","events","blastEventsChartDistXData","seismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","location","sort","a","b","blastEventsArray","data_set","tonnes","vibeEventsArray","ppa","ppv","freq","zoomTempPoints","item","rawValues","chartData","Array","isArray","slice","zoomDataPoints","KPA_TO_MMH20","modelName","chartType","attrs","getQueryParams","console","log","plated","push","e","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","instType","instrument","anchors","numPorts","startVal","maxVal","ctr","dataValuesCount","length","error","arr","content","anchor","midPoints","mid","toFixed","splice","headExclusion","leftAnchors","rightAnchors","center","Math","ceil","concat","midLeft","midRight","shift","pop","unshift","pressureRateDataPoints","curr","i","prev","timeDiffDays","val","idx","zoomChartLinesData","_this","isPressureRate","mName","forEach","element","chartLineName","chartLineIndex","yAxis","dataPoint","dataPointIndex","temp","fullRangeChartLinesData","chartDataModelName","query","model_name","yAxisLegend","promise","queryRecord","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","toString","id","axisName","units","undefined","raw","usesPoints","chartName","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","scale","category10","range","duration","showDistX","noData","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","utils","getDateAutoscaleFormat","Date","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","numDecimals","some","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","distXMouseMove","distX2","onDistXTooltipShowCall","distX0","distX1","distXIndex","activeTooltipContent","windowResize","update","JSON","stringify","state","setData","setChart","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","ex","_default","_exports","default","Component","extend","store","service","router","isModalOpen","modalMode","modalEditingRowId","columnSpecs","computed","key","label","tableLabel","isTemp","isKPa","tableRows","dispData","get","tempData","fmt","tempById","forEach","r","id","map","dispRow","dispValues","values","tempRow","tempValues","kpaValue","tempValue","date","formattedDate","moment","format","cells","value","modalFields","specs","mode","editingId","existingRow","find","dateField","type","cellByKey","c","channelFields","spec","modalTitle","verb","actions","openAdd","set","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","adapterOptions","promises","deleteRecord","push","save","Promise","all","then","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","Number","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","oldTemp","oldDisp","tempRecord","createRecord","dispRecord","updateProperty","propertyName","propertyValue","_default","_exports","default","Component","extend","_default","_exports","default","Component","extend","Component","extend","isShowingModal","host","computed","document","location","split","carrierList","data","get","carrierValue","item","atIndex","indexOf","substring","length","actions","close","set","selectGateway","phoneNumber","concatenatedValue","console","log","sendAction","toggleModal","toggleProperty","closeTargetSelector","gateways","sortedData","Object","values","carrier_list","sort","a","b","Country","localeCompare","reduce","acc","curr","Carrier","_firstTruthy","obj","keys","undefined","k","getCalibrationProgressObject","profile","computeCalibrationProgress","progressObj","done","total","isCertificateReady","conclusion","test","doneStr","totalStr","split","parseInt","phaseI","phaseII","percent","Math","round","color","getSensorCalibrationProgressColor","label","trackStyle","htmlSafe","fillStyle","_default","_exports","default","Component","extend","store","service","router","session","settingsConfig","softwareVersion","internalVersion","BATCH_SENSORS_COUNT","UNFILLEDCONSTANT","CALIBRATIONSPECIFICPERMISSIONS","APPROVEDINSTRUMENTTYPES","APPROVEDRIGCATEGORIES","stepper","pump","chatLocked","streamingTextBox","phaseITextbox","phaseIITextbox","MAX_TIMEOUT_AWAITING_SAMPLING","ASCENDING_CONST","DESCENDING_CONST","isShowConfig","tabs","home","calibSensorList","isShowSettings","isShowCalibForm","isShowRigForm","isShowPopupNotification","isShowCommandConsole","isShowLiveGraphs","isFormEditing","paginationSearchConfig","searchObject","calibrationDateOrdering","pagination","page","pageSize","totalPages","paginationPageSizes","calibrationInstrumentProfilePaginationList","searchProgression","searchIsRedone","userInputtedData","selectedRigProfile","selectedCalibrationProfile","selectedSensorData","batchSensorData","batchCheckboxData","selectedAnchorData","isForInventory","frontendData","packValidationCompletedProfileList","calibrationInstrumentProfileList","rigNotificationData","calibrationData","phaseISampleLookupData","phaseILookupData","phaseIISampleCalibrationDataValueData","phaseIICalibrationDataValueData","phaseIISampleCurrentData","phaseIICurrentData","phaseIISlopeData","phaseIIOffsetData","calibrationIsSamplingData","isPhaseISampling","isPhaseIICalibrationDataValueSampling","isPhaseIISampling","dashboardStatusBarData","status","connectionStatusLibrary","connection","calibration","calibrationStatusLibrary","current","generalStatusLibrary","target","formRigData","formCalibData","emergencyController","AbortController","showIrretrivableWarning","progressInterval","isTriggered","init","_super","arguments","getCalibrationSpecificPermission","getSensorProfileList","getCompletedPackProfileList","setTimeout","set","scheduleOnce","pageSizeComp","document","getElementById","value","get","forEach","rigObj","index","data","messages","approvedObject","typeObject","sendCommandFromConsoleTxtbox","cmdConsole","trim","showHelpNotificationBoard","buildRigActivityNotificationBoard","showPopup","cmd","outgoingMessageLibrary","buildAnchorDiagram","type","channels","masterDiagramSection","upperMasterSection","anchorMasterSection","lowerMasterSection","dCable","typeValue","dExto","dMPBX","style","display","dRebar","visualAnchorPoints","i","push","e","console","log","upperTBSection","anchorPointsSection","lowerTBSection","innerHTML","firstBufferSection","createElement","width","height","appendChild","channel","tdElement","classList","add","inputElement","setAttribute","id","fontSize","padding","addEventListener","event","formatted","formatAnchor3dp","headDiv","background","borderRadius","anchorSpace","justifyContent","alignItems","flexDirection","anchorPoint","borderStyle","borderWidth","anchorUpperTBComponent","channelArray","visualAnchorMidPointPosition","upperHalfValues","slice","lowerHalfvalues","anchorPointPosition","anchorLowerTBComponent","applyInventoryStateToAnchorTextboxes","applyInventoryState","isInv","jobIDComp","disabled","sensorNameComp","anchorData","newAnchorData","Object","key","anchorTBComp","buildValidationPopupContent","failedObjects","popupContentSectionComponent","subtitleSection","textContent","hasOwnProperty","call","length","rigCheckerSection","paddingLeft","rigLabelCheckerSection","paddingRight","rigValueCheckerSection","buildAnchorLiveViews","anchorSections","textDiv","borderSection","border","borderColor","getTabKeys","computed","getApprovedInstrumentTypeList","title","getApprovedRigCategoryList","getPaginationPageSizesList","pageSizeList","responseData","sendGETRequest","permissionObj","error","payload","page_size","progression","is_redone","rawSensorProfileList","element","convertDBDateToTableDate","metaPaginationData","totalRowsComp","updatePaginationList","rawCompletedPackProfileList","packProfileObject","range","maxPageToShow","paginationObj","clearBatchCBData","batchMasterElement","checked","currBatchCheckboxData","constructor","schedule","calibrationID","batchCBElement","getRigList","rigList","dbID","rigName","rigIP","getTypeList","sensorTypeList","getCalibrationProfileList","calibProfList","minLimit","maxLimit","calibrationConfigButton","observer","rigConfigButton","calibProfileCalibFormLoad","selectedCalibFormCalibData","calibTypeComp","channelsComp","minLimitComp","maxLimitComp","checkpointSampleSizeComp","checkpointSpeedComp","typeIDComp","checkpointUnit","checkpointCurrentTargetBufferComp","checkpointDelayComp","checkpointPositionsComp","calibCreationEmployeeComp","calibData","calibProf","toString","calibType","unit","typeID","checkpointSampleSize","checkpointSpeed","checkpointCurrentTargetBuffer","checkpointDelay","checkpointPositions","calibCreationEmployee","rigProfileRigFormLoad","selectedRigFormRigData","rigIPComp","rigNameComp","rigCategoryComp","rigReferenceIDComp","rigReferenceCalibrationValueComp","rigReferenceCalibrationDateComp","rigData","rigProf","date","time","toLowerCase","rigCategory","creationEmployee","rigReferenceID","rigReferenceCalibrationValue","rigReferenceCalibrationDate","calibProfileLoad","resetDataCalibProfile","selectedProfile","currentDate","Date","month","getMonth","padStart","year","getFullYear","message","currArr","sensorData","sensorID","sensorName","sampleDataDump","sampleCurrentDataDump","lookupData","calibrationDataData","currentData","slopeData","offsetData","isSamplingData","isSamplingCurrentData","isSamplingCalibrationData","sensorIDTBComponent","chart","labels","datasets","update","datasetArr","getDataSetColor","fill","tension","rigProfileLoad","webSocketDisconnect","rig","initializeConnection","dashboardStatusBarObserver","updateRigActivity","statusObj","statusComponent","connectionComponent","calibrationComponent","dashboardStatusBarObserver2","currentComponent","targetComponent","actions","cycleInternalHotButton","startVerificationPress","elementID","holdDuration","mode","button","startTime","now","setInterval","elapsedTime","progress","min","toFixed","send","clearInterval","err","cancelVerificationPress","triggerAction","JSON","stringify","getV2CalibrationSchematics","abort","resetLog","updateCalibrationStatusModule","hardResetModule","getSensorPhaseIISchematics","getSensorPhaseISchematics","assistiveTooltip","assistiveToolTipLibrary","reconnectWebSocket","websocketReconnect","viewCalibratedData","buildAndGetDataFormat1","anchorDataValue","packProfileData","packID","validationID","buildSensorProfileNotificationBoard","viewPhaseIICalibratedData","buildPhaseIIConclusionNotificationBoard","showBatchSensors","buildBatchSensorBoard","cycleView","viewRigNotifications","buildRigNotificationNotificationBoard","viewPhaseIIConclusionCalibrationSheet","buildPhaseIIConclusionNotificationBoardV2","viewFromInventoryEditSheet","phaseStatus","buildInventoryUpdateBoard","viewCalibrationSheet","buildCalibrationSheet","getCalibProfile","sensorProfile","assign","Progress","packProfile","phaseIICompleted","scrollTop","window","scrollTo","top","behavior","scrollDashboard","scrollIntoView","block","copyChatToClipboard","chatBox","createRange","selectNodeContents","selection","getSelection","removeAllRanges","addRange","execCommand","unlockChatScroll","lockChatScroll","scrollHeight","showLiveGraphs","curr","showCommandConsole","sendCommand","onKeyDown","exportChatToFile","chatContent","innerText","blob","Blob","downloadLink","href","URL","createObjectURL","download","click","controlPanel","closeNotificationPopup","notificationPopupContentBody","cycleVisualSettings","validatePriorCalibration","validateAllForms","checkoutSensor","buildCheckoutBoard","toggleForInventory","updateRigFormData","toUpperCase","formatDateTimeFromInputField","updateCalibFormData","updateSensorFormData","selectedPackProfile","Number","resetSort","calibrationIDColumnComp","jobIDColumnComp","calibrationDateColumnComp","sensorIDColumnComp","updateSearchObjData","choseRig","oldRigObject","choseSensorType","cycleEditMode","cycleAddNewRigMode","cycleAddNewCalibProfileMode","cycleShowAnchorDiagramMode","isShowAnchorDiagram","formDeleteButton","calibSubmittedObject","sendDELETERequest","resetProfile","location","reload","rigSubmittedObject","formSaveButton","validationKeys","getCurrentDateTime","missingKeysMsgArr","userProfile","authenticated","sendPATCHRequest","sendPOSTRequest","validationKeys2","missingKeysMsgArr2","userProfile2","activityLog","jumpToPage","search","changeCertificateManagerPageSize","newSize","changeProgressionFilter","allowed","next","indexOf","changeIsRedoneFilter","resetPage","resetSearch","calibrationIDFilter","searchCalibrationIDComponent","searchJobIDComponent","searchSensorIDComponent","batchCertificate","isVisiblePopup","buildBatchCalibrationSheet","rowCheckbox","checkboxElementID","cbElement","columnCycleOrdering","didInsertElement","ctx","getContext","Chart","options","responsive","maintainAspectRatio","scales","x","y","plugins","legend","position","usePointStyle","generateLabels","map","dataset","text","strokeStyle","lineWidth","hidden","isDatasetVisible","datasetIndex","font","size","family","weight","boxWidth","boxHeight","tooltip","enabled","elements","point","radius","Component","extend","store","service","router","session","userInputtedData","selectedRigProfile","selectedPackType","selectedPackData","batchCheckboxData","frontendData","packsValidationProfileList","rigNotificationData","manufacturedPacksData","completedFullPacksData","searchPhase","searchIsUsed","isContractor","computed","profile","get","department","settingsConfig","tabs","home","calibSensorList","phaseENV","phase","canCycle","isRepairing","softwareVersion","internalVersion","APPROVEDRIGCATEGORIES","stepper","pump","chatLocked","streamingTextBox","phaseITextbox","phaseIITextbox","MAX_TIMEOUT_AWAITING_SAMPLING","ASCENDING_CONST","DESCENDING_CONST","paginationSearchConfig","searchObject","validationIdOrdering","packIdOrdering","phase1ValidationDateOrdering","phase2ValidationDateOrdering","rigIDOrdering","pagination","page","pageSize","totalPages","paginationPageSizes","packsValidationInstrumentProfilePaginationList","packsValidationData","phase1UnloadData","phase1LoadData","phase2UnloadData1","phase2LoadData1","phase2LoadData2","phase2UnloadData2","phase1ValidityData","unload","load","final","p1StopwatchValues","p2StopwatchValues","phase2ValidityData","load1","unload1","unload2","load2","packValidationIsSamplingData","currentStage","isPhaseISampling","isPhaseIISampling","isShowConfig","isShowRigForm","isShowPackTypeForm","isShowCommandConsole","isShowLiveGraphs","isFormEditing","isShowPopupNotification","isShowSettings","isPopupDismissable","dashboardStatusBarData","status","connectionStatusLibrary","connection","calibration","packStatusLibrary","current","generalStatusLibrary","target","formRigData","formPackTypeData","emergencyController","AbortController","showIrretrivableWarning","progressInterval","isTriggered","isForAnotherUser","packTypeFilterPackNumber","packTypeFilterMaxLength","userListForRig","init","_super","arguments","set","getPackProfileList","setTimeout","scheduleOnce","pageSizeComp","document","getElementById","value","forEach","rigObj","index","data","messages","userProfile","authenticated","phaseIDLabelComponent","style","fontSize","fontStyle","marginLeft","console","log","cycleViewComp","display","controlPanelComp","textContent","getCompletedP1PackProfiles","buildValidationPopupContent","failedObjects","popupContentSectionComponent","innerHTML","subtitleSection","createElement","appendChild","key","Object","hasOwnProperty","call","split","length","rigCheckerSection","width","flexDirection","alignItems","paddingLeft","rigLabelCheckerSection","paddingRight","color","rigValueCheckerSection","buildAnchorLiveViews","channels","anchorSections","i","textDiv","borderSection","border","borderWidth","borderRadius","borderColor","id","responseData","sendGETRequest","responseArr","element","attributes","title","push","dbID","packID","packId","validationID","validationId","rigID","rigId","getCompletedFullPackProfiles","getTabKeys","getApprovedRigCategoryList","payload","page_size","rawSensorProfileList","clearBatchCBData","metaPaginationData","totalRowsComp","updatePaginationList","error","batchMasterElement","checked","currBatchCheckboxData","keys","schedule","batchCBElement","range","maxPageToShow","paginationObj","sendCommandFromConsoleTxtbox","cmdConsole","trim","showHelpNotificationBoard","buildRigActivityNotificationBoard","dataTranslatorVersion","showPopup","cmd","outgoingMessageLibrary","getPaginationPageSizesList","pageSizeList","getRigList","rigList","rigName","rigIP","getTypeList","packTypeList","name","max","packTypeConfigButton","observer","isForAnotherUserObserver","undefined","response","users","err","message","rigConfigButton","isForAnotherUserSection","selectedPackTypeDPCalibFormObserver","selectedPackTypeFormTypeData","minComp","maxComp","phase1LoadMinRangeComp","phase1LoadMaxRangeComp","phase1UnloadMinRangeComp","phase1UnloadMaxRangeComp","phase2LoadMinRange2Comp","phase2LoadMaxRange2Comp","phase2UnloadMinRange2Comp","phase2UnloadMaxRange2Comp","acceptedUnloadVarianceComp","acceptedLoadVarianceComp","checkpointDelayComp","activeCoilsCountComp","totalCoilsCountComp","referenceUnfilledCoilsPositionsComp","generalCoilsPositionsComp","packTypeComp","packTypeProf","toString","join","typeValue","includes","packTypeName","coilsNumber","min","phase1LoadMinRange","phase1LoadMaxRange","phase1UnloadMinRange","phase1UnloadMaxRange","phase2LoadMinRange2","phase2LoadMaxRange2","phase2UnloadMinRange2","phase2UnloadMaxRange2","acceptedUnloadVariance","acceptedLoadVariance","packType","checkpointDelay","activeCoilsCount","totalCoilsCount","referenceUnfilledCoilsPositions","generalCoilsPositions","rigProfileRigFormLoad","selectedRigFormRigData","rigIPComp","rigNameComp","rigCategoryComp","rigReferenceIDComp","rigReferenceCalibrationValueComp","rigReferenceCalibrationDateComp","rigData","rigProf","date","time","toLowerCase","rigCategory","creationEmployee","rigReferenceID","rigReferenceCalibrationValue","rigReferenceCalibrationDate","packProfileLoadPhaseI","resetDataSelectedPackTypeProfile","resetPackProgressionBar","packTypeData","typeProf","selectedProfile","progressBarSection","progressValueText","initializeAndCreateAnchorLiveView","Number","parseInt","coilsProfile","packProfileLoadPhaseII","resetDataCompletedPackTypeProfile","manufacturedPackType","packTypeObj","packProfileLoadCompleted","completedPacksData","rigProfileLoad","webSocketDisconnect","rig","initializeConnection","dashboardStatusBarObserver","updateRigActivity","statusObj","statusComponent","connectionComponent","calibrationComponent","phaseENVObeserver1","currPhase","actions","resetPackTypeFilter","send","applyPackTypeFilter","rawPackNumber","rawMaxLength","query","pn","isFinite","packNumber","ml","maxLength","result","selectComp","startVerificationPress","elementID","holdDuration","mode","button","startTime","Date","now","setInterval","elapsedTime","progress","Math","toFixed","clearInterval","cancelVerificationPress","triggerAction","abort","resetLog","chart","labels","datasets","update","updatePacksValidationStatusModule","hardResetModule","JSON","stringify","created","createPhaseIPackProfile","getPacksValidationPhaseISchematics","getPacksValidationPhaseIISchematics","assistiveTooltip","type","assistiveToolTipLibrary","packIdHeaderPressStart","_packIdLongPressed","_packIdPressTimer","packIdHeaderPressEnd","clearTimeout","packIdHeaderClick","reconnectWebSocket","websocketReconnect","viewPacksData","buildAndGetDataFormat1","sensorData","minLimit","maxLimit","packProfileDetailBoard","viewPhaseIICalibratedData","cycleView","viewRigNotifications","buildRigNotificationNotificationBoard","viewPhaseIIConclusionCalibrationSheet","batchProfile","isVisiblePopup","buildBatchProfileSheet","rowCheckbox","checkboxElementID","cbElement","getPackProfile","packProfile","rigProfile","packData","scrollTop","window","scrollTo","top","behavior","scrollDashboard","scrollIntoView","block","copyChatToClipboard","chatBox","createRange","selectNodeContents","selection","getSelection","removeAllRanges","addRange","execCommand","unlockChatScroll","lockChatScroll","scrollHeight","showLiveGraphs","curr","showCommandConsole","sendCommand","onKeyDown","event","exportChatToFile","chatContent","innerText","blob","Blob","downloadLink","href","URL","createObjectURL","download","click","controlPanel","dismissPopupViaBackdrop","closeNotificationPopup","_activeTimerCleanup","cleanup","notificationPopupContentBody","cycleVisualSettings","cycleIsRepair","validatePriorCalibration","validateAllForms","updateRigFormData","toUpperCase","formatDateTimeFromInputField","updatePackTypeFormData","sizeValue","updatePackFormData","updateSearchObjData","choseRig","oldRigObject","choseSensorType","cycleEditMode","cyclePhase","destroyAndClearAnchorLiveView","cycleAddNewRigMode","cycleAddNewPackTypeMode","cycleInternalHotButton","formDeleteButton","packTypeSubmittedObject","sendDELETERequest","resetProfile","location","reload","rigSubmittedObject","formSaveButton","validationKeys","getCurrentDateTime","missingKeysMsgArr","map","sendPATCHRequest","sendPOSTRequest","validationKeys2","missingKeysMsgArr2","userProfile2","activityLog","patchResult","ok","reason","jumpToPage","changePhaseFilter","allowed","fallback","next","indexOf","changeIsUsedFilter","search","resetPage","resetSearch","calibrationIDFilter","searchValidationIDComponent","searchPackIDComponent","searchPackNameComponent","searchCompanyComponent","resetSort","validationIdColumnComp","packIdColumnColumnComp","phase1ValidationDateColumnComp","phase2ValidationDateColumnComp","overruledColumnComp","columnCycleOrdering","didInsertElement","ctx","getContext","Chart","options","responsive","maintainAspectRatio","scales","x","y","plugins","legend","position","usePointStyle","generateLabels","dataset","text","label","fillStyle","strokeStyle","lineWidth","hidden","isDatasetVisible","datasetIndex","font","size","family","weight","boxWidth","boxHeight","padding","tooltip","enabled","elements","point","radius","Component","extend","session","service","init","_super","arguments","currRate","get","dispPart","split","timePart","set","getDispPart","computed","getTimePart","buildRate","error","console","log","actions","updateDispDropdownUnit","value","onChange","updateTimeDropdownUnit","RawDropDown","Component","constructor","args","_defineProperty","_exports","default","RawDropDown","Component","constructor","args","_defineProperty","_exports","default","RawPortDropDown","Component","constructor","args","_defineProperty","showPort","_exports","default","_adapters","_date","override","parse","value","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","_spatialChart","anchorDistances","computed","firstObject","get","dataValuesCount","length","values","anchors","content","map","modelName","console","log","JSON","stringify","splice","half_anchors","gauge","pop","last","sort","forEach","item","index","shift","push","anchorAXDistances","midPoints","headExclusion","leftAnchors","center","Math","ceil","concat","slice","ctr","left","right","flatMap","v","i","undefined","unshift","mid_temp","anchorBXDistances","anchorMidDistances","midDistances","finalSize","toFixed","spatialXValues","spatialChartLinesData","zoomChartData","xValues","pts","idx","x","y","filter","pt","key","timestamp","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","seismicEventsChartData","event","type","momentMagnitude","blastEventsChartData","tonnes","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","_super","arguments","spatialLinesData","Promise","resolve","then","instrument","toString","id","yAxisTitle","_buildSpatialChart","linesData","canvas","element","querySelector","instrumentLength","e","anchorXValues","max","lineDatasets","line","label","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","tension","parsing","_isLine","anchorDatasets","dist","String","showLine","_isRef","datasets","noDataPlugin","afterDraw","chart","hasData","ds","hidden","ctx","chartArea","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","anchorDotsPlugin","xScale","scales","yArea","px","getPixelForValue","beginPath","arc","PI","fill","crosshairX","crosshairPlugin","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","legendTooltipEl","highlightedIndex","lastTooltipIdx","buildSpatialLegendItems","indexOf","color","join","highlightLine","skipUpdate","update","restoreLines","attachSpatialLegendHandlers","el","onmouseover","target","closest","parseInt","dataset","onmouseout","initSpatialLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","distToSegment","py","x1","y1","x2","y2","dx","dy","lenSq","t","min","projX","projY","ex","ey","sqrt","findClosestLine","mouseX","mouseY","closestIdx","closestDist","Infinity","getDatasetMeta","j","p1","p2","datasetIndex","pixelDist","updateSpatialTooltip","pointerEvents","activeIdx","valuesHtml","anchorColor","spatialChart","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","onHover","display","text","size","afterBuildTicks","axis","visibleAnchors","ticks","callback","val","toLocaleString","plugins","legend","tooltip","enabled","parentElement","origXMin","origXMax","addEventListener","preventDefault","rect","getBoundingClientRect","yScale","factor","deltaY","cursorX","getValueForPixel","clientX","cursorY","clientY","passive","panStartX","panStartY","panXMin","panXMax","panYMin","panYMax","cursor","xPxRange","yPxRange","onPanEnd","set","willDestroyElement","destroy","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","yAxisUnit","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartData","computed","map","event","type","x","timestamp","momentMagnitude","blastEventsChartData","tonnes","anchorDistances","anchors","arr","content","anchor","modelName","midPoints","ctr","length","mid","toFixed","splice","push","headExclusion","leftAnchors","rightAnchors","center","Math","ceil","concat","slice","midLeft","midRight","shift","pop","unshift","sort","fullRangeChartLinesData","fullRangeChartData","isStrain","lines","chartLineName","chartLineIndex","key","values","item","vals","Array","isArray","y","zoomTempData","yAxis","hidden","rawValues","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","Promise","resolve","then","instrument","toString","forEach","id","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","filter","v","xMin","min","xMax","max","datasets","line","i","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","pt","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","e","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","val","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewInstrumentObject","_this","set","CreatePackInstrument","Component","constructor","args","_defineProperty","createInstrument","object","store","get","newInstrumentObject","setError","error","id","zeroTimestamp","installDate","instrumentType","peekRecord","headAt","stacked","active","strokeLength","moment","format","newInstrument","dup","createRecord","err","message","includes","save","then","results","number","distance","instrument","anchorCount","getAnchorCountFromId","ctr","gauge","parseInt","gaugeLength","headExclusionLength","isNaN","catch","reason","stackedChanged","document","getElementById","checked","init","arguments","_exports","default","resetNewRawDataValueObject","_this","displacementValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newDisplacementValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newDisplacementValueObjectValues","actions","setNewDisplacementValue","event","vals","target","value","setNewTimestampValue","setTemperatureValue","saveNew","displacementValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newDisplacementValues","savedDisplacementValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","Component","extend","didReceiveAttrs","_super","arguments","router","service","store","api","session","selectedVendor","selectedModel","editing","activeActionTab","ordering","paginationSearchConfig","searchObject","calibrationDateOrdering","pagination","page","pageSize","totalPages","alertProfilePaginationList","anchorDiagramInputInitalValue","batchSelectedAlertsID","isAlertsListVisible","isEditAnchorDiagram","init","getAlertsList","payload","instrumentId","get","id","page_size","url","getApiBaseUrl","queryString","URLSearchParams","toString","response","fetch","method","headers","Authorization","localStorage","token","status","responseData","json","metaPaginationData","set","processAlertsList","data","updatePaginationList","rawList","list","forEach","element","rawElement","push","counter","createdAt","evaluationType","isAcknowledged","isActive","isMuted","lastDataReceivedAt","lastEvaluatedAt","lastTriggeredAt","level","name","channels","note","parameters","softResetCounter","range","maxPageToShow","paginationObj","i","orderingObserver","observer","anchorDiagramLabelInitalValue","computed","_a","content","anchors","anchorObj","distance","licenceIsValid","valid","authenticated","isValid","actions","saveAnchors","anchorMap","anchor","savePromises","channelsNum","anchorNumber","newDistance","existingAnchor","save","newAnchor","createRecord","instrument","number","Promise","all","window","location","reload","error","console","log","updateChannelInput","key","value","cycleEditAnchorDiagram","cycleActionBar","tabName","jumpToPage","Number","parseInt","err","cycleAlertsListVisibility","sortBy","property","updatePage","index","total","length","gauge","isNaN","setTimeout","alert","viewData","endDateObj","moment","startDateObj","subtract","format","formattedEndDateObj","baseUnit","transitionTo","queryParams","tGraph","sGraph","editField","stopEditField","saveInstrument","_this","t","confirm","href","Component","extend","store","service","chartId","startTimestamp","endTimestamp","progressAnimationDuration","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","tonnes","zoomDataPoints","item","chartData","modelName","plated","splice","unshift","push","length","error","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","dataValuesCount","anchors","content","anchor","half_anchors","gauge","pop","last","sort","a","b","forEach","index","shift","anchorAXDistances","midPoints","headExclusion","leftAnchors","center","Math","ceil","concat","slice","midLeft","ctr","$","v","i","mid_temp","anchorBXDistances","anchorMidDistances","copy","midDistances","finalSize","mid","toFixed","len","anchorColors","d3","scale","category10","range","anchorDistancesChartReferencePoints","anchorDistance","inlineHoverValuesSideOffset","zoomChartLinesData","_this","chartLine","chartLineIndex","dataPoint","dataPointIndex","fullRangeChartLinesData","element","chartLineName","numLines","lineDrawDelay","chartDataModelName","query","model_name","yAxisLegend","promise","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","instrument","toString","id","axisName","units","zoomChart","nv","models","lineChartProgressAnimationAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","distXAxisScale","duration","showDistX","showLegend","showXAxis","noData","ex","forceX","addGraph","xAxis","tickPadding","showMaxMin","yAxis","axisLabel","tickFormat","distXAxis","fullRangeChartXDomainLength","utils","getDateAutoscaleFormat","Date","distX","size","distXTooltipBottomOffset","distXRiseUpAnimationDelay","lineWidth","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","activeTooltipContent","windowResize","update","e","log","JSON","stringify","state","focus","line","syncBrushing","independentBrushing","showYAxis","getQueryParams","_default","_exports","default","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","yAxisUnit","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartDistXData","computed","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","sort","a","b","blastEventsArray","data_set","tonnes","zoomTempPoints","item","rawValues","chartData","Array","isArray","slice","zoomDataPoints","modelName","plated","push","e","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","instType","instrument","anchors","numPorts","startVal","maxVal","ctr","dataValuesCount","length","error","arr","content","anchor","midPoints","mid","toFixed","splice","headExclusion","leftAnchors","rightAnchors","center","Math","ceil","concat","midLeft","midRight","shift","pop","unshift","zoomChartLinesData","_this","mName","forEach","element","chartLineName","chartLineIndex","yAxis","dataPoint","dataPointIndex","temp","fullRangeChartLinesData","chartDataModelName","query","model_name","yAxisLegend","promise","queryRecord","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","toString","id","axisName","units","raw","usesPoints","chartName","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","scale","category10","range","duration","showDistX","noData","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","utils","getDateAutoscaleFormat","Date","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","numDecimals","some","datum","filter","Boolean","call","dispatch","on","brushExtent","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","ppv","ppa","freq","distXMouseMove","distXIndex","distX0","distX1","distX2","activeTooltipContent","onDistXTooltipShowCall","windowResize","update","log","JSON","stringify","state","setData","setChart","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","ex","getQueryParams","Component","extend","store","service","router","isModalOpen","modalMode","modalEditingRowId","anchorLabels","computed","anchors","get","arr","content","validCounter","map","anchor","idx","distance","isUnset","index","tableLabel","modalLabel","String","columnSpecs","out","a","key","label","valuesIndex","push","isTemp","tableRows","dispData","tempData","specs","fmt","tempById","forEach","r","id","dispRow","dispValues","values","tempRow","tempValues","cells","spec","value","formattedDate","moment","format","date","modalFields","mode","editingId","existingRow","find","dateField","type","cellByKey","c","channelFields","modalTitle","verb","actions","openAdd","set","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","adapterOptions","promises","deleteRecord","save","Promise","all","then","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","Number","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","oldTemp","oldDisp","tempRecord","createRecord","dispRecord","updateProperty","propertyName","propertyValue","_default","_exports","default","Component","extend","_default","_exports","default","Component","extend","_adapters","_date","override","parse","value","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","_spatialChart","isStacked","computed","get","chartDataModelName","query","model_name","zoomDataPoints","map","item","chartData","values","modelName","side","attrs","getQueryParams","length","splice","push","shift","ch1","ch2","ch3","ch4","ch5","ch6","error","zoomTimePoints","anchorDistances","dataValuesCount","counter","side_a","side_b","midPoints","anchors","arr","content","anchor","indx","unshift","sort","forEach","point","instrument","ex","set","spatialChartLinesData","anchorMidDistances","chartLine","chartLineIndex","rawValues","pts","dataPoint","dataPointIndex","x","undefined","y","filter","pt","key","timestamp","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","seismicEventsChartData","event","type","momentMagnitude","blastEventsChartData","tonnes","_buildYAxisTitle","axisName","getAttr","units","switchTitle","didInsertElement","_super","arguments","spatialLinesData","Promise","resolve","then","toString","id","yAxisTitle","_buildSpatialChart","linesData","canvas","element","querySelector","instrumentLength","e","anchorXValues","lineDatasets","line","i","label","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","tension","parsing","_isLine","anchorDatasets","dist","String","showLine","_isRef","datasets","noDataPlugin","afterDraw","chart","hasData","ds","hidden","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","anchorDotsPlugin","xScale","scales","yArea","px","getPixelForValue","beginPath","arc","Math","PI","fill","crosshairX","crosshairPlugin","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","legendTooltipEl","highlightedIndex","lastTooltipIdx","buildSpatialLegendItems","indexOf","color","join","highlightLine","idx","skipUpdate","update","restoreLines","attachSpatialLegendHandlers","el","onmouseover","target","closest","parseInt","dataset","onmouseout","initSpatialLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","distToSegment","py","x1","y1","x2","y2","dx","dy","lenSq","t","max","min","ey","sqrt","findClosestLine","mouseX","mouseY","closestIdx","closestDist","Infinity","getDatasetMeta","j","p1","p2","datasetIndex","pixelDist","updateSpatialTooltip","pointerEvents","activeIdx","valuesHtml","c","toFixed","spatialChart","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","onHover","display","text","size","afterBuildTicks","axis","va","v","ticks","callback","val","toLocaleString","plugins","legend","tooltip","enabled","parentElement","origXMin","origXMax","addEventListener","preventDefault","rect","getBoundingClientRect","yScale","factor","deltaY","cursorX","getValueForPixel","clientX","cursorY","clientY","passive","panStartX","panStartY","panXMin","panXMax","panYMin","panYMax","cursor","xPxRange","yPxRange","onPanEnd","willDestroyElement","destroy","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","yAxisUnit","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartData","computed","map","event","type","x","timestamp","momentMagnitude","blastEventsChartData","tonnes","anchorDistances","chartData","dataValuesCount","firstObj","objectAt","vals","values","length","error","anchors","arr","content","anchor","modelName","side_a","side_b","push","midPoints","forEach","index","indx","shift","anchorCount","newAnchorDistances","halfIndex","Math","floor","obj","String","fullRangeChartLinesData","fullRangeChartData","isStrain","lines","chartLineName","chartLineIndex","key","item","Array","isArray","y","zoomTempData","yAxis","hidden","rawValues","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_buildYAxisTitle","axisName","getAttr","units","didInsertElement","Promise","resolve","then","instrument","toString","id","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","filter","v","xMin","min","xMax","max","datasets","line","i","label","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","pt","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","e","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","toFixed","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","val","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewInstrumentObject","_this","set","setAxialStiffness","stiffness","get","toFixed","CreatePackInstrument","Component","constructor","args","_defineProperty","observer","youngsModulus","console","log","bolt","setProject","value","selectedId","foundObject","projectLookupList","find","lookup","id","setLevel","levelLookupList","handleBoltDiameterChange","event","boltDiameter","target","area","Math","PI","pow","axialStiffness","createInstrument","object","store","newInstrumentObject","setError","error","zeroTimestamp","installDate","instrumentType","peekRecord","headAt","stacked","active","crossSectionalArea","elasticLimitFce","strokeLength","moment","format","newInstrument","dup","existingRecord","unloadRecord","createRecord","err","message","includes","save","then","results","number","distance","instrument","anchorCount","getAnchorCountFromId","ctr","gauge","parseInt","gaugeLength","headExclusionLength","isNaN","catch","reason","stackedChanged","document","getElementById","checked","init","arguments","_exports","default","resetNewRawDataValueObject","_this","displacementValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newDisplacementValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newDisplacementValueObjectValues","actions","setNewDisplacementValue","event","vals","target","value","setNewTimestampValue","setTemperatureValue","saveNew","displacementValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newDisplacementValues","savedDisplacementValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","Component","extend","didReceiveAttrs","_super","arguments","router","service","store","api","session","selectedVendor","selectedModel","editing","activeActionTab","ordering","paginationSearchConfig","searchObject","calibrationDateOrdering","pagination","page","pageSize","totalPages","alertProfilePaginationList","anchorDiagramInputInitalValue","batchSelectedAlertsID","isAlertsListVisible","isEditAnchorDiagram","init","get","set","getAlertsList","payload","instrumentId","id","page_size","url","getApiBaseUrl","queryString","URLSearchParams","toString","response","fetch","method","headers","Authorization","localStorage","token","status","responseData","json","metaPaginationData","processAlertsList","data","updatePaginationList","rawList","list","forEach","element","rawElement","push","counter","createdAt","evaluationType","isAcknowledged","isActive","isMuted","lastDataReceivedAt","lastEvaluatedAt","lastTriggeredAt","level","name","channels","note","parameters","softResetCounter","range","maxPageToShow","paginationObj","i","orderingObserver","observer","anchorDiagramLabelInitalValue","computed","_a","content","anchors","anchorObj","distance","licenceIsValid","valid","authenticated","isValid","onYoungsModulusChanged","youngsModulus","console","log","bolt","handleElastLimitForce","elf","toFixed","actions","saveAnchors","anchorMap","anchor","savePromises","channelsNum","anchorNumber","newDistance","existingAnchor","save","newAnchor","createRecord","instrument","number","Promise","all","window","location","reload","error","updateChannelInput","key","value","cycleEditAnchorDiagram","cycleActionBar","tabName","jumpToPage","Number","parseInt","err","cycleAlertsListVisibility","sortBy","property","updateCrossSectionalArea","diameter","boltDiameter","area","Math","PI","pow","crossSectionalArea","axialStiffness","then","updatePage","index","total","length","viewData","endDateObj","moment","startDateObj","subtract","format","formattedEndDateObj","baseUnit","transitionTo","queryParams","tGraph","sGraph","editField","stopEditField","saveInstrument","_this","t","confirm","href","isStacked","stackChanged","toggleProperty","object","Component","extend","store","service","chartId","startTimestamp","endTimestamp","progressAnimationDuration","isDistXTooltip","distXRiseUpAnimationDuration","isStacked","computed","get","zoomDataPoints","map","item","index","chartData","values","modelName","console","log","JSON","parse","stringify","side","attrs","getQueryParams","length","splice","push","shift","ch1","ch2","ch3","ch4","ch5","ch6","error","fullRangeDataPoints","zoomTimePoints","itemTime","fullRangeTimePoints","anchorDistances","instType","instrument","dataValuesCount","counter","side_a","side_b","midPoints","anchors","arr","content","anchor","indx","unshift","sort","a","b","forEach","point","ex","set","anchorColors","d3","scale","category10","range","anchorDistancesChartReferencePoints","anchorMidDistances","anchDist","anchorDistance","key","type","inlineHoverValuesSideOffset","offSet","zoomChartLinesData","_this","chartLine","chartLineIndex","dp","timestamp","dataPoint","dataPointIndex","sortBy","concat","fullRangeChartLinesData","ad","chartLineName","moment","valueOf","numLines","lineDrawDelay","chartDataModelName","query","model_name","yAxisLegend","promise","queryRecord","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","toString","id","axisName","units","switchTitle","zoomChart","nv","models","lineChartProgressAnimationAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","distXAxisScale","color","duration","showDistX","showLegend","showXAxis","noData","forceX","addGraph","xAxis","tickPadding","showMaxMin","ticks","yAxis","axisLabel","tickFormat","format","distXAxis","fullRangeChartXDomainLength","utils","getDateAutoscaleFormat","Date","distX","size","distXTooltipBottomOffset","distXRiseUpAnimationDelay","lineWidth","legend","datumData","filter","Boolean","datum","call","dispatch","on","brushExtent","tooltip","hidden","updateProperties","extent","fullRangeChart","onBrushCall","windowResize","update","e","state","focus","line","syncBrushing","independentBrushing","showYAxis","_default","_exports","default","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","yAxisUnit","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartDistXData","computed","key","type","color","values","map","event","moment","valueOf","vibeEventsChartDistXData","events","console","log","blastEventsChartDistXData","seismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","data_set","tonnes","vibeEventsArray","ppa","ppv","freq","zoomTempPoints","item","rawValues","chartData","Array","isArray","slice","isStacked","zoomDataPoints","modelName","side","attrs","getQueryParams","length","splice","push","shift","e","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","instType","instrument","dataValuesCount","error","anchors","arr","content","anchor","singleAnchorDistance","side_a","side_b","midPoints","forEach","value","index","indx","anchorCount","newAnchorDistances","obj","sideA","sideB","zoomChartLinesData","_this","mName","chartLineName","chartLineIndex","yAxis","dataPoint","dataPointIndex","pop","temp","concat","fullRangeChartLinesData","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","promise","queryRecord","title","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","toString","id","axisName","units","raw","usesPoints","chartName","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","scale","category10","range","duration","showDistX","noData","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","utils","getDateAutoscaleFormat","Date","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","some","datum","filter","Boolean","call","dispatch","on","brushExtent","tooltip","hidden","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distX2","distXIndex","activeTooltipContent","windowResize","update","JSON","stringify","state","setData","setChart","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","ex","Component","extend","store","service","router","isModalOpen","modalMode","modalEditingRowId","anchorLabels","computed","anchors","get","arr","content","validCounter","map","anchor","idx","distance","isUnset","index","tableLabel","modalLabel","String","columnSpecs","out","a","key","label","valuesIndex","push","isTemp","tableRows","dispData","tempData","specs","fmt","tempById","forEach","r","id","dispRow","dispValues","values","tempRow","tempValues","cells","spec","value","formattedDate","moment","format","date","modalFields","mode","editingId","existingRow","find","dateField","type","cellByKey","c","channelFields","modalTitle","verb","actions","openAdd","set","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","adapterOptions","promises","deleteRecord","save","Promise","all","then","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","Number","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","oldTemp","oldDisp","tempRecord","createRecord","dispRecord","updateProperty","propertyName","propertyValue","_default","_exports","default","Component","extend","_default","_exports","default","Component","extend","TargetSelectorComponent","_exports","default","_class","Component","constructor","args","_defineProperty","openModal","showModal","closeModal","selectRecord","record","onSelect","handleRecordSelection","getCarriers","_applyDecoratedDescriptor","prototype","action","Object","getOwnPropertyDescriptor","Component","extend","tagName","classNameBindings","attributeBindings","option","optionLabelKey","optionDisabledKey","selected","searchText","isDisabled","computed","get","Ember","isSelected","Array","isArray","A","includes","tabindex","keyDown","event","keyCode","send","click","actions","selectItem","attrs","Component","extend","classNames","classNameBindings","content","selected","optionLabelKey","optionDisabledKey","sortBy","limitSearchToWordBoundary","multiple","closeOnSelection","prompt","searchPrompt","noResultsMessage","isClearable","clearLabel","addLabel","isLoading","loadingMessage","_searchText","_isShowingMenu","_hasSelection","notEmpty","_isShowingClear","and","_hasNoResults","empty","_hasResults","not","_isNotLoading","_isSingleSelect","_hasMultipleSelection","_hasSingleSelection","_isShowingAddNew","_isShowingNoResultsMessage","_canAddNew","bool","_hasOnSearchAction","_isFilterActive","_selected","computed","get","Ember","A","Array","isArray","Error","set","key","value","_sortArray","replace","split","_sortedContent","sort","_filterRegex","searchText","regex","RegExp","_filteredContent","filterRegex","filter","item","test","_filteredKeys","optKey","mapBy","_hasMatchedKey","length","_hasNoMatchedKeys","didInsertElement","_super","arguments","element","addEventListener","e","_handleKeyboardControls","willDestroyElement","_unbindOutsideClicks","_bindOutsideClicks","componentElem","_outsideClickHandler","contains","target","send","label","querySelector","blur","window","removeEventListener","focussable","from","querySelectorAll","i","indexOf","keyCode","preventDefault","focus","classList","action","getAttribute","_toggleSelection","includes","removeFromSelected","addToSelected","newSelection","slice","concat","checkForFunction","attr","actions","updateSearch","text","call","selectItem","disabledKey","toggleMenu","showMenu","scheduleOnce","input","next","hideMenu","clear","removeOption","option","addNew","noop","Component","extend","session","service","userProfileService","Component","extend","session","service","router","userProfileService","loading","actions","navigateToLicenseKeys","set","transitionTo","navigateToBackendLogs","Component","extend","session","service","userProfileService","init","_super","arguments","actions","close","get","save","type","console","log","Component","extend","session","service","router","userProfileService","api","selectedDatetimeFormat","selectTimezone","isShowClearLogsConfirmationModal","clearLogsConfirmationModalType","confirmMessage","all","log_viewer","user_logs","NA_CONSTANT","generalUsedValue","generalUsedPercent","generalFreeValue","generalFreePercent","generalTotalValue","postgresGeneralLogsValue","postgresGeneralLogsPercent","postgresUserLogsValue","postgresUserLogsPercent","postgresInstrValue","postgresInstrPercent","postgresGWValue","postgresGWPercent","postgresOthersValue","postgresOthersPercent","postgresTotalValue","showStorageMessage","updateStorageMessage","testRecipientSMTPMessage","awsSNSSMSMessage","loading","init","_super","arguments","records","get","toArray","i","length","set","console","log","getStorage","url","getApiBaseUrl","response","fetch","method","headers","Authorization","localStorage","token","status","responseData","json","processGeneralData","data","general","processPostGresData","postgres","processInfluxData","influx","errorGeneralData","errorPostGresData","errorInfluxData","usedData","used","freeData","free","totalData","total","toFixed","unit","e","tableLabel","colorLabel","database","parentStorageBarSection","document","getElementById","parentLabelSection","label","value","title","percentage","bar","createElement","className","style","width","backgroundColor","appendChild","text","color","whiteSpace","textContent","totalText","innerHTML","note","isMasterProfile","computed","profile","is_master_key_account","err","isStaffUser","is_staff","datetimeFormatArray","id","timeZones","getCurrentSMSAlertStatus","isEnabledSMSAlerts","getWarningMessage","clearLogs","key","dataobj","body","JSON","stringify","result","message","ok","setTimeout","testSMTPRecipientEmail","recipient","close","confirm","type","actions","testGoogleAuthCode","comp","activateDeactivateSMSAlerts","setting","find","r","error","save","then","window","location","reload","catch","setClearLogsType","navigateToLookups","transitionTo","updateDatetimeFormat","newValue","updateTimezone","Component","extend","userProfileService","service","init","_super","arguments","actions","updateTab","value","set","Component","extend","isChecked","computed","get","key","instrument","set","value","actions","change","object","_this","save","catch","reason","editError","document","getElementById","hidden","field","checked","window","scrollTo","update","originVal","field","_default","_exports","default","Component","extend","datetimeLabel","init","_super","arguments","set","formattedField","object","get","editChanged","observer","editField","stopEditField","rawValue","standardizedFormat","format","parsedMoment","moment","isValid","isEditing","dateTimePicker","showClear","actions","edit","currentValue","Date","element","tabindex","focus","save","value","newDate","catch","reason","editError","document","getElementById","hidden","window","scrollTo","cancel","willDestroyElement","datetimepicker","keyDown","e","keyCode","send","ctrlKey","Component","extend","isEditing","tagName","classNameBindings","isRowDeleteConfirmationDialog","rdcd","gatewayType","setRDCD","value","get","set","notifyPropertyChange","valueOver","computed","self","tableRowIndexString","String","gatewayValueObjectValues","obj","Object","assign","actions","edit","save","_this","values","gatewayValueObj","adapterOptions","then","results","_internalModel","_record","gatewayTime","catch","reason","console","log","errors","status","setProp","window","location","reload","cancel","remove","gatewayValuesModel","gatewayValueObject","badValues","undefined","originalValue","deleteRecord","removeObject","toggleRowDeleteConfirmationDialog","id","list","didRender","keyDown","e","keyCode","send","originEast","originNorth","originDepth","_default","_exports","default","Component","extend","editChanged","observer","get","editField","stopEditField","isEditing","east","north","depth","actions","edit","set","element","tabindex","focus","save","object","catch","reason","editError","document","getElementById","hidden","undefined","window","scrollTo","cancel","keyDown","e","keyCode","send","Component","extend","isEditable","isEditing","isTextInput","computed","get","isTextarea","actions","edit","set","element","tabindex","focus","save","object","cancel","keyDown","e","keyCode","send","ctrlKey","Component","extend","editChanged","observer","get","editField","stopEditField","isEditable","isEditing","isTextInput","computed","isTextarea","actions","edit","set","element","tabindex","focus","save","object","parseFloat","then","update","cancel","keyDown","e","keyCode","send","ctrlKey","originVal","field","_default","_exports","default","Component","extend","editChanged","observer","get","editField","stopEditField","isEditable","isEditing","isTextInput","computed","isTextarea","actions","edit","set","element","tabindex","focus","save","object","catch","reason","editError","document","getElementById","hidden","undefined","window","scrollTo","cancel","keyDown","e","keyCode","send","ctrlKey","originVal","field","_default","_exports","default","Component","extend","editChanged","observer","get","editField","stopEditField","isEditable","isEditing","isTextInput","computed","isTextarea","actions","edit","set","element","tabindex","focus","save","object","console","log","catch","reason","editError","document","getElementById","hidden","undefined","window","scrollTo","cancel","keyDown","e","keyCode","send","ctrlKey","Component","extend","isEditing","tagName","classNameBindings","isRowDeleteConfirmationDialog","instrumentType","valueOver","computed","self","value","tableRowIndexString","String","get","displacementValueObjectValues","obj","Object","assign","temperatureValuesObject","objectAt","temperatureObjectValue","temporaryTemperature","e","actions","edit","set","save","_this","values","unshift","adapterOptions","then","results","instType","_internalModel","_record","shift","cancel","remove","displacementValueObject","displacementValuesModel","temperatureValuesModel","deleteRecord","removeObject","toggleRowDeleteConfirmationDialog","id","curVal","didRender","keyDown","keyCode","send","Component","extend","isEditing","datetimeLabel","init","_super","arguments","set","formattedField","temperatureValueObject","get","tagName","classNameBindings","isRowDeleteConfirmationDialog","loading","setRDCD","value","rdcd","notifyPropertyChange","rawDate","standardizedFormat","formatObj","format","parsed","moment","isValid","temperatureValues","computed","vals","obj","i","length","String","actions","edit","setNewTimestamp","event","target","save","Object","values","record","newTs","_this","store","instrumentId","formatted","temperatureValuesModel","deleteRecord","adapterOptions","then","removeObject","newRecord","createRecord","id","window","location","reload","catch","reason","console","log","router","getOwner","lookup","cancel","remove","e","toggleRowDeleteConfirmationDialog","list","keyDown","keyCode","send","Component","extend","isEditing","datetimeLabel","init","_super","arguments","set","formattedField","displacementValueObject","get","tagName","classNameBindings","isRowDeleteConfirmationDialog","rdcd","instrumentType","loading","setRDCD","value","notifyPropertyChange","rawDate","standardizedFormat","formatObj","format","formattedValue","parsed","moment","isValid","valueOver","computed","self","tableRowIndexString","String","displacementValueObjectValues","arr","Object","assign","temperatureValuesObject","objectAt","temperatureObjectValue","edited","undefined","temporaryTemperature","tempObject","vals","toFixed","e","console","log","isCheckedHelper","batchSelectedRowsObj","index","convertMMToAdictBits","arrayMMs","bitsArray","forEach","mmValue","push","parseFloat","actions","setNewTimestampValue","event","target","setDisplacementValue","key","setTemperatureValue","toggleIndivSwitch","document","getElementById","checked","edit","save","_this","newTs","instrumentId","obj","values","unshift","oldObj","formatted","displacementRecord","temperatureRecord","displacementValuesModel","temperatureValuesModel","store","tempVal","Promise","all","deleteRecord","adapterOptions","resolve","then","removeObject","newDisp","createRecord","id","newTemp","window","location","reload","catch","reason","results","instType","_internalModel","_record","shift","errors","status","setProp","cancel","remove","toggleRowDeleteConfirmationDialog","list","didRender","keyDown","keyCode","send","Component","extend","editChanged","observer","get","editField","stopEditField","isEditing","store","service","channelsNum","isToe","computed","isCollar","anchorsAmount","length","isAllAnchorsPopulated","allPopulated","objectLength","map","obj","indexOf","sortProperties","sortedInstrumentAnchors","sort","listedAnchors","object","newSet","anchorCount","forEach","anchor","hash","push","shift","temp","reverse","anchorsCSSCounteStyle","htmlSafe","actions","updateAnchorsCounter","j","set","edit","element","tabindex","focus","inputNewValue","currentAnchor","anchorKey","anchorValue","anchKeyPart","substring","currentAnchorNumber","replace","trim","notifyPropertyChange","prePopulateAnchors","anchorsArray","emptyAnchorsAmount","i","newAnchor","createRecord","number","distance","a","pushObject","send","isAnchorNumbersCorrupted","save","currentObject","objectAt","cancel","rollbackAttributes","didRender","keyDown","e","keyCode","Component","extend","editChanged","observer","get","editField","stopEditField","isEditing","store","service","channelsNum","instrument","isToe","computed","isCollar","anchorsAmount","_anchorCount","set","key","value","isAllAnchorsPopulated","object","map","objectLength","obj","indexOf","sortProperties","sortedInstrumentAnchors","sort","anchorsCSSCounteStyle","htmlSafe","actions","updateAnchorsCounter","j","forEach","edit","element","tabindex","focus","inputNewValue","currentAnchor","newValue","notifyPropertyChange","prePopulateAnchors","emptyAnchorsAmount","i","createRecord","number","distance","send","save","length","currentObject","cancel","rollbackAttributes","didRender","keyDown","e","keyCode","Component","extend","originVal","field","_default","_exports","default","Component","extend","editChanged","observer","get","editField","stopEditField","store","service","isEditable","isEditing","isRelational","isNew","selectOptionsArray","map","item","selectOptionsKyes","split","key","value","modelName","computed","actions","selectNewValue","set","send","onSelectionChange","edit","element","tabindex","focus","save","object","newSelectValue","findRecord","camelize","catch","reason","editError","document","getElementById","hidden","window","scrollTo","cancel","keyDown","e","keyCode","Component","extend","editChanged","observer","get","editField","stopEditField","store","service","isEditable","isEditing","isRelational","selectOptionsArray","map","item","selectOptionsKyes","split","key","value","modelName","computed","actions","selectNewValue","set","edit","element","tabindex","focus","save","object","cancel","didRender","keyDown","e","keyCode","send","originVal","field","_default","_exports","default","Component","extend","editChanged","observer","get","editField","stopEditField","store","service","isEditable","isEditing","isRelational","selectOptionsArray","computed","valueArray","items","selectOptionsKyes","split","selectOptions","map","item","key","value","modelName","getOption","selectOptionKey","object","getProperties","queryValue","find","id","getOptionValue","actions","getNewOptionValue","selectNewValue","set","parent","send","edit","element","tabindex","focus","save","newSelectValue","catch","reason","editError","document","getElementById","hidden","camelize","window","scrollTo","cancel","keyDown","e","keyCode","originVal","field","_default","_exports","default","Component","extend","editChanged","observer","get","editField","stopEditField","store","service","isEditable","isEditing","isRelational","selectOptionsArray","map","item","selectOptionsKyes","split","key","value","modelName","computed","options","type","actions","selectNewValue","set","onSelectionChange","send","edit","element","tabindex","focus","save","object","newSelectValue","peekRecord","camelize","catch","reason","editError","document","getElementById","hidden","window","scrollTo","cancel","keyDown","e","keyCode","originVal","field","_default","_exports","default","Component","extend","editChanged","observer","get","editField","stopEditField","isEditing","dateTimePicker","showClear","actions","edit","object","set","moment","Date","format","element","tabindex","focus","save","value","newDate","catch","reason","editError","document","getElementById","hidden","window","scrollTo","cancel","willDestroyElement","datetimepicker","keyDown","e","keyCode","send","ctrlKey","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","_spatialChart","anchorDistances","computed","firstObject","get","dataValuesCount","length","values","anchors","content","map","anchor","modelName","splice","anchorMidDistances","midDistances","unshift","i","push","toFixed","spatialXValues","spatialChartLinesData","zoomChartData","xValues","item","key","timestamp","v","idx","x","y","filter","pt","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","seismicEventsChartData","event","type","momentMagnitude","blastEventsChartData","tonnes","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","_super","arguments","spatialLinesData","Promise","resolve","then","instrument","toString","forEach","id","yAxisTitle","_buildSpatialChart","linesData","canvas","element","querySelector","instrumentLength","e","anchorXValues","lineDatasets","line","label","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","tension","parsing","_isLine","anchorDatasets","dist","String","showLine","_isRef","datasets","noDataPlugin","afterDraw","chart","hasData","ds","hidden","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","anchorDotsPlugin","xScale","scales","yArea","px","getPixelForValue","beginPath","arc","Math","PI","fill","crosshairX","crosshairPlugin","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","legendTooltipEl","highlightedIndex","lastTooltipIdx","buildSpatialLegendItems","indexOf","color","join","highlightLine","skipUpdate","update","restoreLines","attachSpatialLegendHandlers","el","onmouseover","target","closest","parseInt","dataset","onmouseout","initSpatialLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","distToSegment","py","x1","y1","x2","y2","dx","dy","lenSq","t","max","min","projX","projY","ex","ey","sqrt","findClosestLine","mouseX","mouseY","closestIdx","closestDist","Infinity","getDatasetMeta","pts","j","p1","p2","datasetIndex","pixelDist","updateSpatialTooltip","pointerEvents","activeIdx","valuesHtml","anchorColor","spatialChart","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","onHover","display","text","size","afterBuildTicks","axis","visibleAnchors","ticks","callback","val","toLocaleString","plugins","legend","tooltip","enabled","parentElement","origXMin","origXMax","addEventListener","preventDefault","rect","getBoundingClientRect","yScale","factor","deltaY","cursorX","getValueForPixel","clientX","cursorY","clientY","passive","panStartX","panStartY","panXMin","panXMax","panYMin","panYMax","cursor","xPxRange","yPxRange","onPanEnd","set","willDestroyElement","destroy","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","yAxisUnit","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartData","computed","map","event","type","x","timestamp","momentMagnitude","blastEventsChartData","tonnes","anchorDistances","instType","instrument","anchors","numPorts","ctr","push","arr","content","anchor","modelName","midPoints","length","mid","toFixed","splice","headExclusion","leftAnchors","rightAnchors","center","Math","ceil","concat","slice","midLeft","midRight","shift","pop","unshift","sort","fullRangeChartLinesData","fullRangeChartData","isStrain","lines","chartLineName","chartLineIndex","key","values","item","vals","Array","isArray","y","zoomTempData","yAxis","hidden","rawValues","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","Promise","resolve","then","toString","forEach","id","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","filter","v","xMin","min","xMax","max","datasets","line","i","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","pt","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","e","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","val","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewInstrumentObject","_this","set","CreatePackInstrument","Component","constructor","args","_defineProperty","setProject","value","selectedId","foundObject","projectLookupList","find","lookup","id","setLevel","levelLookupList","createInstrument","object","store","get","newInstrumentObject","setError","error","zeroTimestamp","installDate","instrumentType","peekRecord","headAt","bulbed","plated","stacked","active","instrumentStiffness","moment","format","newInstrument","dup","createRecord","err","message","includes","save","then","results","catch","reason","init","arguments","_exports","default","resetNewRawDataValueObject","_this","displacementValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newDisplacementValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newDisplacementValueObjectValues","actions","setNewDisplacementValue","event","vals","target","value","setNewTimestampValue","setTemperatureValue","saveNew","displacementValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newDisplacementValues","savedDisplacementValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","EditInstrument","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","viewData","id","get","transitionTo","tGraph","sGraph","editField","set","stopEditField","saveInstrument","_this","t","confirm","window","location","href","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Component","extend","store","service","chartId","startTimestamp","endTimestamp","progressAnimationDuration","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","tonnes","zoomDataPoints","item","chartData","modelName","plated","splice","unshift","push","length","error","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","dataValuesCount","anchors","content","anchor","half_anchors","gauge","pop","last","sort","a","b","forEach","index","shift","anchorAXDistances","midPoints","headExclusion","leftAnchors","center","Math","ceil","concat","slice","midLeft","ctr","$","v","i","mid_temp","anchorBXDistances","anchorMidDistances","copy","midDistances","finalSize","mid","toFixed","len","anchorColors","d3","scale","category10","range","anchorDistancesChartReferencePoints","anchorDistance","inlineHoverValuesSideOffset","zoomChartLinesData","_this","chartLine","chartLineIndex","dataPoint","dataPointIndex","fullRangeChartLinesData","element","chartLineName","numLines","lineDrawDelay","chartDataModelName","query","model_name","yAxisLegend","promise","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","instrument","toString","id","axisName","units","zoomChart","nv","models","lineChartProgressAnimationAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","distXAxisScale","duration","showDistX","showLegend","showXAxis","noData","ex","forceX","addGraph","xAxis","tickPadding","showMaxMin","yAxis","axisLabel","tickFormat","distXAxis","fullRangeChartXDomainLength","utils","getDateAutoscaleFormat","Date","distX","size","distXTooltipBottomOffset","distXRiseUpAnimationDelay","lineWidth","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","activeTooltipContent","windowResize","update","e","log","JSON","stringify","state","focus","line","syncBrushing","independentBrushing","showYAxis","getQueryParams","_default","_exports","default","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","location","sort","a","b","blastEventsArray","data_set","tonnes","zoomTempPoints","item","rawValues","chartData","Array","isArray","slice","zoomDataPoints","modelName","plated","push","e","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","instType","instrument","anchors","numPorts","startVal","maxVal","ctr","dataValuesCount","length","error","arr","content","anchor","midPoints","mid","toFixed","splice","headExclusion","leftAnchors","rightAnchors","center","Math","ceil","concat","midLeft","midRight","shift","pop","unshift","zoomChartLinesData","_this","mName","forEach","element","chartLineName","chartLineIndex","yAxis","dataPoint","dataPointIndex","temp","fullRangeChartLinesData","chartDataModelName","query","model_name","yAxisLegend","promise","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","toString","id","axisName","units","raw","usesPoints","chartName","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","scale","category10","range","duration","showDistX","noData","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","utils","getDateAutoscaleFormat","Date","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","numDecimals","some","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","ppv","ppa","freq","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","distX2","activeTooltipContent","windowResize","update","log","JSON","stringify","state","setData","setChart","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","ex","getQueryParams","Component","extend","store","service","router","isModalOpen","modalMode","modalEditingRowId","anchorLabels","computed","anchors","get","arr","content","validCounter","map","anchor","idx","distance","isUnset","index","tableLabel","modalLabel","String","columnSpecs","out","a","key","label","valuesIndex","push","isTemp","tableRows","dispData","tempData","specs","fmt","tempById","forEach","r","id","dispRow","dispValues","values","tempRow","tempValues","cells","spec","value","formattedDate","moment","format","date","modalFields","mode","editingId","existingRow","find","dateField","type","cellByKey","c","channelFields","modalTitle","verb","actions","openAdd","set","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","adapterOptions","promises","deleteRecord","save","Promise","all","then","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","Number","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","oldTemp","oldDisp","tempRecord","createRecord","dispRecord","updateProperty","propertyName","propertyValue","_default","_exports","default","Component","extend","_default","_exports","default","Component","extend","Component","extend","tagName","orderingAscending","isSelectedSort","computed","selectedSortProperty","get","indexOf","substring","actions","sortBy","sortProperty","toggleProperty","sort","Component","extend","Component","extend","Component","extend","Component","extend","Component","extend","Component","extend","SvgInstrumentComponent","Component","height","args","width","orientation","anchors","type","_exports","default","Component","extend","router","service","init","_super","arguments","actions","Component","extend","session","service","init","_super","arguments","getTempUnitsArr","computed","arrayCastString","get","value","error","console","log","strArr","split","actions","selectedValue","onChange","Component","extend","BaseTemporalChartDropdownComponent","Component","constructor","arguments","_exports","default","Component","extend","Component","extend","Component","extend","Component","extend","Component","extend","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","_spatialChart","anchorDistances","computed","firstObject","get","dataValuesCount","length","values","anchors","content","map","anchor","modelName","splice","anchorMidDistances","midDistances","unshift","i","push","toFixed","spatialXValues","spatialChartLinesData","zoomChartData","xValues","item","key","timestamp","v","idx","x","y","filter","pt","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","seismicEventsChartData","event","type","momentMagnitude","blastEventsChartData","tonnes","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","_super","arguments","spatialLinesData","Promise","resolve","then","instrument","toString","forEach","id","yAxisTitle","_buildSpatialChart","linesData","canvas","element","querySelector","instrumentLength","e","anchorXValues","lineDatasets","line","label","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","tension","parsing","_isLine","anchorDatasets","dist","String","showLine","_isRef","datasets","noDataPlugin","afterDraw","chart","hasData","ds","hidden","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","anchorDotsPlugin","xScale","scales","yArea","px","getPixelForValue","beginPath","arc","Math","PI","fill","crosshairX","crosshairPlugin","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","legendTooltipEl","highlightedIndex","lastTooltipIdx","buildSpatialLegendItems","indexOf","color","join","highlightLine","skipUpdate","update","restoreLines","attachSpatialLegendHandlers","el","onmouseover","target","closest","parseInt","dataset","onmouseout","initSpatialLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","distToSegment","py","x1","y1","x2","y2","dx","dy","lenSq","t","max","min","projX","projY","ex","ey","sqrt","findClosestLine","mouseX","mouseY","closestIdx","closestDist","Infinity","getDatasetMeta","pts","j","p1","p2","datasetIndex","pixelDist","updateSpatialTooltip","pointerEvents","activeIdx","valuesHtml","anchorColor","spatialChart","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","onHover","display","text","size","afterBuildTicks","axis","visibleAnchors","ticks","callback","val","toLocaleString","plugins","legend","tooltip","enabled","parentElement","origXMin","origXMax","addEventListener","preventDefault","rect","getBoundingClientRect","yScale","factor","deltaY","cursorX","getValueForPixel","clientX","cursorY","clientY","passive","panStartX","panStartY","panXMin","panXMax","panYMin","panYMax","cursor","xPxRange","yPxRange","onPanEnd","set","willDestroyElement","destroy","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","yAxisUnit","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartData","computed","map","event","type","x","timestamp","momentMagnitude","blastEventsChartData","tonnes","anchorDistances","instType","instrument","anchors","numPorts","ctr","push","arr","content","anchor","modelName","midPoints","length","mid","toFixed","splice","headExclusion","leftAnchors","rightAnchors","center","Math","ceil","concat","slice","midLeft","midRight","shift","pop","unshift","sort","fullRangeChartLinesData","fullRangeChartData","isStrain","zoomTempData","firstObj","objectAt","firstVals","values","numChannels","channelName","channelIndex","key","String","item","vals","y","lines","chartLineName","chartLineIndex","Array","isArray","yAxis","hidden","rawValues","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","Promise","resolve","then","toString","forEach","id","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","filter","v","xMin","min","xMax","max","datasets","line","i","label","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","pt","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","e","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","val","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewInstrumentObject","_this","set","CreatePackInstrument","Component","constructor","args","_defineProperty","setProject","value","selectedId","foundObject","projectLookupList","find","lookup","id","setLevel","levelLookupList","createInstrument","object","store","get","newInstrumentObject","setError","error","zeroTimestamp","installDate","instrumentType","peekRecord","headAt","active","instrumentStiffness","moment","format","newInstrument","dup","createRecord","err","message","includes","save","then","results","catch","reason","init","arguments","_exports","default","resetNewRawDataValueObject","_this","displacementValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newDisplacementValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newDisplacementValueObjectValues","actions","setNewDisplacementValue","event","vals","target","value","setNewTimestampValue","setTemperatureValue","saveNew","displacementValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newDisplacementValues","savedDisplacementValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","EditInstrument","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","viewData","id","get","transitionTo","tGraph","sGraph","editField","set","stopEditField","saveInstrument","_this","t","confirm","window","location","href","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Component","extend","store","service","chartId","startTimestamp","endTimestamp","progressAnimationDuration","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","tonnes","zoomDataPoints","item","chartData","modelName","plated","splice","unshift","push","length","error","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","dataValuesCount","anchors","content","anchor","half_anchors","gauge","pop","last","sort","a","b","forEach","index","shift","anchorAXDistances","midPoints","headExclusion","leftAnchors","center","Math","ceil","concat","slice","midLeft","ctr","$","v","i","mid_temp","anchorBXDistances","anchorMidDistances","copy","midDistances","finalSize","mid","toFixed","len","anchorColors","d3","scale","category10","range","anchorDistancesChartReferencePoints","anchorDistance","inlineHoverValuesSideOffset","zoomChartLinesData","_this","chartLine","chartLineIndex","dataPoint","dataPointIndex","fullRangeChartLinesData","element","chartLineName","numLines","lineDrawDelay","chartDataModelName","query","model_name","yAxisLegend","promise","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","instrument","toString","id","axisName","units","zoomChart","nv","models","lineChartProgressAnimationAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","distXAxisScale","duration","showDistX","showLegend","showXAxis","noData","ex","forceX","addGraph","xAxis","tickPadding","showMaxMin","yAxis","axisLabel","tickFormat","distXAxis","fullRangeChartXDomainLength","utils","getDateAutoscaleFormat","Date","distX","size","distXTooltipBottomOffset","distXRiseUpAnimationDelay","lineWidth","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","activeTooltipContent","windowResize","update","e","log","JSON","stringify","state","focus","line","syncBrushing","independentBrushing","showYAxis","getQueryParams","_default","_exports","default","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","location","sort","a","b","blastEventsArray","data_set","tonnes","zoomTempPoints","item","rawValues","chartData","Array","isArray","slice","zoomDataPoints","modelName","plated","push","e","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","instType","instrument","anchors","numPorts","startVal","maxVal","ctr","dataValuesCount","length","error","arr","content","anchor","midPoints","mid","toFixed","splice","headExclusion","leftAnchors","rightAnchors","center","Math","ceil","concat","midLeft","midRight","shift","pop","unshift","zoomChartLinesData","_this","vibeEventsChartDistXData","mName","forEach","element","chartLineName","chartLineIndex","yAxis","dataPoint","dataPointIndex","temp","fullRangeChartLinesData","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","promise","queryRecord","title","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","toString","id","axisName","units","raw","usesPoints","chartName","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","scale","category10","range","duration","showDistX","noData","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","utils","getDateAutoscaleFormat","Date","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","numDecimals","some","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","ppv","ppa","freq","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","distX2","activeTooltipContent","windowResize","update","log","JSON","stringify","state","setData","setChart","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","ex","getQueryParams","_default","_exports","default","Component","extend","store","service","router","isModalOpen","modalMode","modalEditingRowId","anchorLabels","computed","anchors","get","arr","content","validCounter","map","anchor","idx","distance","isUnset","index","tableLabel","modalLabel","String","columnSpecs","a","key","label","valuesIndex","tableRows","tempData","specs","fmt","row","id","values","cells","spec","value","formattedDate","moment","format","date","modalFields","mode","editingId","existingRow","find","r","dateField","type","cellByKey","forEach","c","channelFields","modalTitle","verb","actions","openAdd","set","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","tempRow","adapterOptions","deleteRecord","save","then","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","tempValues","Number","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","oldTemp","tempRecord","createRecord","updateProperty","propertyName","propertyValue","_default","_exports","default","Component","extend","_default","_exports","default","Component","extend","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","_default","_exports","default","Component","extend","store","service","yAxisUnit","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartData","computed","map","event","type","x","timestamp","momentMagnitude","blastEventsChartData","tonnes","anchorDistances","val","fullRangeChartLinesData","fullRangeChartData","modelName","lines","chartLineName","chartLineIndex","key","values","item","vals","y","zoomTempData","length","push","yAxis","hidden","rawValues","arr","Array","isArray","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_buildYAxisTitle","chartData","axisName","getAttr","units","didInsertElement","Promise","resolve","then","instrument","toString","forEach","id","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","filter","v","xMin","Math","min","xMax","max","datasets","line","i","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","pt","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","e","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","toFixed","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","isStrain","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewInstrumentObject","_this","set","CreatePackInstrument","Component","constructor","args","_defineProperty","setProject","value","selectedId","foundObject","projectLookupList","find","lookup","id","setLevel","levelLookupList","createInstrument","object","store","get","newInstrumentObject","setError","error","zeroTimestamp","installDate","strokeLength","instrumentType","peekRecord","headAt","active","instrumentStiffness","moment","format","newInstrument","dup","createRecord","err","message","includes","save","then","results","number","distance","instrument","catch","reason","init","arguments","_exports","default","resetNewRawDataValueObject","_this","displacementValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newDisplacementValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","shift","newDisplacementValueObjectValues","actions","setNewDisplacementValue","event","vals","target","value","setNewTimestampValue","setTemperatureValue","saveNew","displacementValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","unshift","newDisplacementValues","savedDisplacementValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","EditInstrument","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","viewData","id","get","transitionTo","tGraph","sGraph","editField","set","stopEditField","saveInstrument","_this","t","confirm","window","location","href","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","_default","_exports","default","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","location","sort","a","b","blastEventsArray","data_set","tonnes","zoomTempPoints","item","rawValues","chartData","Array","isArray","slice","zoomDataPoints","modelName","push","e","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","val","zoomChartLinesData","_this","chartLineName","chartLineIndex","yAxis","dataPoint","dataPointIndex","length","pop","shift","temp","concat","fullRangeChartLinesData","chartDataModelName","query","model_name","yAxisLegend","promise","queryRecord","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","instrument","toString","forEach","id","instType","axisName","units","raw","usesPoints","chartName","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","scale","category10","range","duration","showDistX","noData","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","utils","getDateAutoscaleFormat","Date","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","numDecimals","some","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","ppv","ppa","freq","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","distX2","activeTooltipContent","windowResize","update","log","JSON","stringify","state","setData","setChart","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","ex","getQueryParams","MODE_LABELS","DEFAULT_AXIS_LABELS","AXIS_CHANNEL_COUNT","_default","_exports","default","Component","extend","store","service","router","isModalOpen","modalMode","modalEditingRowId","_readOffset","dispValues","length","activeAxisLabels","computed","dispData","get","last","values","offset","mode","Number","columnSpecs","labels","out","map","label","i","key","tableLabel","valuesIndex","isMode","isTemp","push","tableRows","tempData","specs","fmt","tempById","forEach","r","id","dispRow","tempRow","tempValues","cells","spec","v","value","raw","date","formattedDate","moment","format","modalFields","editingId","find","dateField","type","channelFields","modalTitle","verb","actions","openAdd","set","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","adapterOptions","promises","deleteRecord","save","Promise","all","then","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","safeNum","n","isFinite","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","existingTempAtNew","existingDispAtNew","hasExistingAtNewId","oldTemp","oldDisp","createRecord","tempRecord","dispRecord","updateProperty","propertyName","propertyValue","_default","_exports","default","Component","extend","Component","extend","session","service","init","_super","arguments","getTimeUnitsArr","computed","arrayCastString","get","value","error","console","log","strArr","split","actions","selectedValue","onChange","toriiIframePlaceholder","Chart","register","registerables","CHART_COLORS","colorPalette","blue28","orange2","green3","red1","FREQ_INDICES","PPV_INDICES","PPA_INDICES","_default","_exports","default","Component","extend","store","service","_chart","chartMetric","computed","chartType","attrs","getQueryParams","chart_type","recordsToDisplay","r","parseInt","_getXYValueObj","q","URLSearchParams","window","location","search","advancedXMax","get","parseFloat","advancedXMin","advancedYLeftMax","advancedYLeftMin","advancedYAxisUnit","_pointPassesFilter","xyObj","x","y","hasX","hasY","_buildScatterData","zoomChartData","isPpl","valueIndices","channelLabels","records","map","item","vals","timestamp","moment","valueOf","freqs","i","metricVals","sort","a","b","maxA","Math","max","filter","v","maxB","length","slice","label","chIdx","points","forEach","rec","freq","val","log10","push","rawY","data","backgroundColor","pointRadius","pointHoverRadius","_xAxisTitle","ct","_yAxisTitle","metric","unit","u","didInsertElement","_super","arguments","canvas","element","querySelector","datasets","pinnedElements","pinnedTooltipPlugin","id","afterEvent","chart","args","event","type","setActiveElements","tooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","position","align","onClick","_e","legendItem","meta","getDatasetMeta","datasetIndex","hidden","update","onHover","ds","onLeave","_li","callbacks","title","items","raw","format","pt","toFixed","dataset","scales","text","min","undefined","ticks","callback","grid","set","setData","setChart","addEventListener","e","preventDefault","xScale","left","right","chartArea","ratio","clientX","getBoundingClientRect","span","ZOOM","delta","deltaY","passive","panStartX","panXMin","panXMax","style","cursor","xPxRange","dxData","onPanEnd","document","elements","getElementsAtEventForMode","el","index","offsetX","offsetY","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","GATEWAY_ENUM","Object","freeze","Firmware","Coordinator","Voltage","RSSI","carrier","Readings","Uptime","Reconnection","Uploads","var_1","var_2","var_3","Temperature","AXIS_LABELS","buildGatewayLines","sourceData","tempData","leftAxis","rightAxis","leftIndex","rightIndex","tempValues","forEach","item","vals","get","push","leftLine","key","yAxis","values","map","i","val","length","x","y","rightLine","_default","_exports","default","Component","extend","store","service","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","computed","attrs","getQueryParams","fullRangeChartLinesData","overviewChartLinesData","didInsertElement","_super","arguments","linesData","y1Title","y2Title","_buildMainChart","_buildOverviewChart","_this","canvas","element","querySelector","xMin","xMax","l","v","datasets","line","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","hidden","noDataPlugin","id","afterDraw","chart","xScale","scales","hasData","ds","pt","min","max","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","crosshairX","pinnedX","crosshairPlugin","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","toFixed","buildLegendItems","color","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","e","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","px","targetX","getValueForPixel","items","bestDist","Infinity","d","Math","abs","setPinnedTooltip","type","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","title","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","set","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","startQP","endQP","getPixelForValue","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","Array","isArray","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","axisScaleObserver2","autoAxis2","axisMin2","axisMax2","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","then","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","METRIC_INDICES","_default","_exports","default","Component","extend","store","service","yAxisUnit","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","chartMetric","computed","chartType","trim","toUpperCase","isScatterMode","includes","seismicEventsChartData","map","event","type","x","timestamp","momentMagnitude","blastEventsChartData","tonnes","fullRangeChartLinesData","fullRangeChartData","indices","dataPoints","item","vals","ch","idx","sort","lines","i","key","values","pt","y","zoomTempData","length","push","yAxis","hidden","rawValues","arr","Array","isArray","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_buildYAxisTitle","_yAxisLegend","_chartData","didInsertElement","Promise","resolve","then","instrument","toString","chartData","forEach","id","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","filter","v","xMin","Math","min","xMax","max","isScatter","datasets","line","isChannelLine","useScatter","label","String","data","borderColor","backgroundColor","borderWidth","showLine","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","e","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","toFixed","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","val","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","onmouseout","externalTooltipHandler","context","tooltip","opacity","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewGatewayObject","_this","set","CreateBluCellGateway","Component","constructor","args","_defineProperty","createGateway","object","store","get","newGatewayObject","error","id","installDate","depth","active","interval_upload","query","filter","interval_value","interval_group_name","then","r","at","catch","interval_read","moment","format","newGateway","dup","createRecord","peekRecord","err","message","includes","save","results","reason","init","arguments","_exports","default","resetNewInstrumentObject","_this","set","CreatePackInstrument","Component","constructor","args","_defineProperty","setProject","value","selectedId","foundObject","projectLookupList","find","lookup","id","setLevel","levelLookupList","createInstrument","object","store","get","newInstrumentObject","setError","error","zeroTimestamp","installDate","instrumentType","peekRecord","headAt","active","instrumentStiffness","moment","format","newInstrument","dup","createRecord","err","message","includes","save","then","results","number","distance","instrument","catch","reason","init","arguments","_exports","default","resetNewRawDataValueObject","_this","displacementValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newDisplacementValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","shift","newDisplacementValueObjectValues","actions","setNewDisplacementValue","event","vals","target","value","setNewTimestampValue","setTemperatureValue","saveNew","displacementValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","unshift","newDisplacementValues","savedDisplacementValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","resetNewRawDataValueObject","_this","gatewayValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newGatewayValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newGatewayValueObjectValues","actions","saveNew","gatewayValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","newGatewayValues","savedGatewayValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","console","log","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","Component","extend","is3D","controlsText","playbackOptions","isVisible","isPlayLoop","playbackSpeed","playbackSpeedData","graphScaling","x","min","max","y","z","init","_super","arguments","isShowConfig","isShowXYZ3DInstructions","getTimestamp","computed","bluvibeV2ModelProfile","getCurrentBluvibeV2ModelProfile","timestamp","get","globalDatetimeFormat","standardizedFormat","parsed","moment","convertedTimestamp","format","getControlsText","tab","subTab","subSubTab","ctrlsKey","textLibrary","v","bluvibeV2ModelProfiles","obj","forEach","profileObj","String","trim","rebuildEChartsComponent","chartDom","document","getElementById","setGraphVisibleScaling","setPlaybackVisible","echarts","dispose","data","parseDataForEChartsXYZFocus3DLine","buildEChartsXYZFocus3DLineForBluVibe","xAxisLabel","getGraphUnit","yAxisLabel","zAxisLabel","xDataLabel","yDataLabel","zDataLabel","parseDataForEChartsXFocusYFocusZFocus3DLine","buildEChartsXFocusYFocusZFocus3DLineForBluVibe","parseDataForEChartsXFocusYFocusZFocus2DLine","buildEChartsXFocusYFocusZFocus2DLineForBluVibe","parseDataForEChartsXFocusYFocusZFocus3DBar","buildECharts3DBarForBluVibe","parseDataForEChartsXFocusYFocusZFocus2DBar","buildECharts2DBarForBluVibe","get3DAnimationData","buildEChartsBluVibeSimulation","set","integrationMethodButton","textContent","xGraphScaling","yGraphScaling","zGraphScaling","style","display","visibility","getPlaybackSpeed","getGraphTitle","title_key","setVisibleIntegrationMethod","visible","showLoadingObserver","observer","actions","cyclePlayLoop","cyclePlaybackSpeed","value","Number","console","log","updateSimulationIndex","parseInt","updateChartPosition","toggleSimulationPlay","toggleProperty","isPlaying","animate","cancelAnimationFrame","animationFrame","resetGraphScaling","maxXGraph","minXGraph","maxYGraph","minYGraph","maxZGraph","minZGraph","applyGraphScaling","updateGraphScaling","component","tbID","target","id","tbValue","parseFloat","handleToggle3D","curr3D","handleToggleIntegrationMethod","buttonElement","EditInstrument","_exports","default","_class","Component","extend","gatewayReadingsIntervals","init","_super","arguments","store","service","isAuthenticated","selectedModel","editing","getGatewayUploadIntervalID","computed","gw","get","gatewayUploadInterval","id","toString","getGatewayReadIntervalID","gatewayReadInterval","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","setGatewayInterval","event","gateway","selectedOptions","Array","from","target","selectedValue","parseInt","map","option","value","intervalType","notSelected","findRecord","then","interval","notSelectedIntervalValue","group_name","query","filter","interval_value","interval_group_name","results","set","save","console","log","catch","error","updatePage","viewData","transitionTo","tGraph","editField","stopEditField","saveGateway","_this","t","confirm","window","location","href","sortBy","property","_applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","EditInstrument","_exports","default","_class","Component","extend","init","_super","arguments","set","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","viewData","id","subModel","get","endDateObj","moment","startDateObj","subtract","format","formattedEndDateObj","baseUnit","console","log","transitionTo","queryParams","undefined","tGraph","fEvent","fGraph","editField","stopEditField","saveInstrument","_this","t","confirm","window","location","href","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Component","extend","Component","extend","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","worker","Worker","capitalizeFirstLetter","string","charAt","toUpperCase","slice","getXYValueObj","xyValueObj","queryParams","URLSearchParams","window","location","search","advancedEndDate","get","advancedStartDate","advancedXMax","advancedXMin","advancedYAxisUnit","advancedYLeftMax","advancedYLeftMin","Number","parseFloat","chartMetric","computed","attrs","getQueryParams","recordsToDisplay","chDataPoints","chartData","ordinalValue","filteredData","firstValue","secondValue","map","item","anchorDistances","zoomDataPoints","zoomChartData","zoomTimePoints","i","temporaryObject","Object","moment","valueOf","values","swap","items","leftIndex","rightIndex","temp","partition","left","right","pivot","maxValue","Math","floor","j","quickSort","index","length","_data","out","max","sortBy","getData","itemID","zoomChartLinesData","graphPointValidator","x","y","xMin","xMax","yLeftMin","yLeftMax","points","data","channels","frequency","chart_type","valuesOfValues","log10","push","timestamp","size","shape","xGraphIndex","yGraphIndex","key","chartDataModelName","query","model_name","yAxisLegend","measurementTitle","substr","lastIndexOf","replace","promise","queryRecord","title","y1AxisTitle","units","axisName","trim","mainPartTitle","x1AxisTitle","didInsertElement","_this","zoomChartSVG","d3","select","apiCallsPromises","Promise","all","then","results","x_axisName","type","zoomChart","nv","models","scatterChart","margin","top","bottom","d","color","scale","category10","range","duration","showDistX","showDistY","showLegend","noData","addGraph","xAxis","axisLabel","axisLabelDistance","tickPadding","showMaxMin","tickFormat","format","yAxis","forceY","yScale","linear","xScale","distX","tooltip","contentGenerator","obj","toolTipText","timestampFormatter","time","newDate","Date","datum","transition","call","utils","windowResize","update","dispatch","on","e","log","JSON","stringify","sendAction","captureLargeDOM","element","chunkHeight","canvas","document","createElement","context","getContext","totalHeight","scrollHeight","totalWidth","scrollWidth","width","height","yOffset","console","viewport","cloneNode","style","overflow","transform","chunkCanvas","html2canvas","drawImage","resolve","toBlob","blob","actions","downloadScreenshot","getElementById","toJpeg","quality","dataUrl","link","download","href","click","error","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","temperaturePoints","distXRiseUpAnimationDuration","leftAxis","computed","attrs","getQueryParams","rightAxis","GATEWAY_ENUM","Object","freeze","Firmware","Coordinator","Voltage","RSSI","carrier","Readings","Uptime","Reconnection","Uploads","var_1","var_2","var_3","Temperature","zoomDataPointsLeftAxis","zoomChartData","get","console","log","leftAxisIndex","zoomLeftAxis","map","item","i","values","zoomDataPointsRightAxis","zoomRightAxis","rightAxisIndex","zoomDataPoints","left","fullRangeDataPoints","fullRangePoints","itemHolder","zoomTimePoints","fullRangeTimePoints","anchorDistances","zoomChartLinesData","_this","seismicEventsChartDistXData","blastEventsChartDistXData","tempPoints","mName","chartLineName","chartLineIndex","key","type","yAxis","dataPoint","dataPointIndex","moment","valueOf","zoomTempPoints","temp","push","concat","fullRangeChartLinesData","fullRangeTempPoints","sortBy","temperature","chartDataModelName","query","model_name","yAxisLegend","chartTitle","promise","queryRecord","title","getTitleAndUnits","axis","axisValues","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","useInteractiveGuideline","x","d","y","color","scale","category10","range","duration","showLegend","showDistX","noData","showYAxis","y2Axis","legend","addGraph","xAxis","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","length","utils","getDateAutoscaleFormat","Date","axis1Title","axis2Title","y1Axis","axisLabel","axisLabelDistance","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","format","some","datum","filter","Boolean","call","controls","forEach","disabled","dispatch","on","brushExtent","set","tooltip","hidden","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","eventSize","timestamp","distXMouseMove","seismicEventsArray","distX0","onDistXTooltipShowCall","blastEventsArray","distX1","vibeEventsArray","distX2","distXIndex","data_set","activeTooltipContent","windowResize","update","usesPoints","chartName","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","fullRangeChartXDomainLength","ex","_default","_exports","default","Component","extend","store","service","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","yAxisUnit","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","seismicEventsChartDistXData","computed","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","sort","a","b","blastEventsArray","data_set","tonnes","zoomTempPoints","zoomTempData","zoomChartData","item","chartData","getProperties","filterArray","filter","elem","some","ele","capitalizeFirstLetter","string","charAt","toUpperCase","slice","chartMetric","attrs","getQueryParams","trim","recordsToDisplay","chDataPoints","metric","filteredData","zoomDataPoints","zoomTimePoints","i","temporaryObject","Object","swap","items","leftIndex","rightIndex","temp","partition","left","right","pivot","maxValue","Math","floor","j","quickSort","index","length","_data","out","max","fullRangeDataPoints_OLD","fullRangeDataPoints","fullRangeChartData","fullRangeTimePoints","itemID","anchorDistances","zoomChartLinesData","_this","zoomChannelData","channelChartBarData","push","chartDataModelName","channelCount","forEach","barChartData","yAxis","dataPoint","dataPointIndex","dataPointValue","fullRangeChartLinesData","fullRangeChannelData","fullChartData","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","promise","queryRecord","title","y1AxisTitle","units","axisName","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","bottom","useInteractiveGuideline","x","d","y","scale","category10","range","duration","showDistX","noData","legend","addGraph","mainHeight","attr","mainMargin","customTickFunction","xAxis","tickPadding","ticks","showMaxMin","tickFormat","zoomChartXDomainLength","first","last","tickDate","utils","getDateAutoscaleFormat","Date","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","numDecimals","datum","call","getData","points","data","channels","valuesOfValues","shape","dispatch","on","brushExtent","tooltip","hidden","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","ppv","ppa","freq","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","distX2","activeTooltipContent","windowResize","update","e","log","JSON","stringify","state","setData","setChart","graph_type","scatter","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","ex","CHANNEL_LABELS","SUB_INSTRUMENT_COUNT","AXIS_GLYPHS","_default","_exports","default","Component","extend","store","service","router","isModalOpen","modalMode","modalEditingRowId","columnSpecs","computed","specs","s","forEach","label","c","colIdx","length","push","key","tableLabel","valuesIndex","isAxis","isTemp","_readOffset","dispValues","tableRows","dispData","get","tempData","fmt","tempById","r","id","map","dispRow","values","tempRow","tempValues","offset","cells","spec","v","value","raw","glyph","Number","date","formattedDate","moment","format","modalFields","mode","editingId","find","dateField","type","channelFields","modalTitle","verb","actions","openAdd","set","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","adapterOptions","promises","deleteRecord","save","Promise","all","then","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","safeNum","n","isFinite","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","existingTempAtNew","existingDispAtNew","hasExistingAtNewId","oldTemp","oldDisp","createRecord","tempRecord","dispRecord","updateProperty","propertyName","propertyValue","Component","extend","router","service","batchSelectedRows","isMaxBatch","isVisibleCreateNewForm","init","_super","arguments","getVisibleReadings","computed","get","length","getTotalReadings","pagination","total","anchorDistances","dist","getFreqEventData","instrumentFreqEventProfiles","instrumentFreqEventData","globalDatetimeFormat","standardizedFormat","data","forEach","dataObj","index","rowObj","parsed","moment","format","push","maxBatchSwitchObserver","observer","isCheckedRowsValues","i","set","actions","handleAction","actionCategory","rowDataObj","instrument","transitionTo","queryParams","page","selectedFreqEventDate","advancedYAxisUnit","analysis_category","updateProperty","propertyName","propertyValue","Component","extend","isVisibleCreateNewForm","anchorDistances","computed","getGatewayData","fields","items","filteredData","get","forEach","item","values","firmware","voltage","rssi","carrier","readings","uptime","recon","uploads","temperature","length","push","id","originalValue","save_values","actions","updateProperty","propertyName","propertyValue","set","_default","_exports","default","Component","extend","_default","_exports","default","Component","extend","LeftAxisDropdown","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","tGraph","id","modelName","params","get","transitionTo","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","TemporalGatewayRightAxisDropdown","_exports","default","_class","Component","extend","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","setSelection","selected","set","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Component","extend","isEditing","tagName","classNameBindings","isRowDeleteConfirmationDialog","rdcd","instrumentType","setRDCD","value","get","set","notifyPropertyChange","valueOver","computed","self","tableRowIndexString","String","displacementValueObjectValues","obj","instType","Object","assign","temperatureValuesObject","objectAt","temperatureObjectValue","temporaryTemperature","toFixed","e","actions","edit","save","_this","values","unshift","adapterOptions","then","results","_internalModel","_record","shift","catch","reason","console","log","errors","status","setProp","cancel","remove","instrument_id","displacementValueObject","displacementValuesModel","temperatureValuesModel","list","id","deleteRecord","removeObject","toggleRowDeleteConfirmationDialog","didRender","keyDown","keyCode","send","_adapters","_date","override","parse","value","undefined","moment","isValid","valueOf","format","time","fmt","add","amount","unit","diff","a","b","startOf","endOf","formats","datetime","millisecond","second","minute","hour","day","week","month","quarter","year","Chart","register","registerables","CHART_LINE_COLORS","colorPalette","blue28","orange2","green3","red1","purple7","beige22","pink6","gray5","teal6","cyan4","OUTLIER_MODEL_NAMES","vw2100","jms","_default","_exports","default","Component","extend","store","service","yAxisUnit","calibColLabel","linColLabel","_mainChart","_overviewChart","_brushDragStartPx","_brushLastRange","init","_super","arguments","queryParams","URLSearchParams","window","location","search","yAxisUnitParam","get","set","updateCalibColLabel","updateLinColLabel","currentPort","vwPropertyArr","forEach","vwProp","model","modelName","property","toArray","seismicEventsChartData","computed","map","event","type","x","timestamp","momentMagnitude","blastEventsChartData","tonnes","anchorDistances","fullRangeChartLinesData","fullRangeChartData","isStrain","lines","chartLineName","chartLineIndex","key","values","item","vals","arr","Array","isArray","y","zoomTempData","length","push","yAxis","hidden","rawValues","chartDataModelName","query","model_name","yAxisLegend","chartTitle","substr","lastIndexOf","replace","queryRecord","title","_buildYAxisTitle","_yAxisLegend","_chartData","didInsertElement","Promise","resolve","then","instrument","toString","chartData","id","yAxisTitle","_buildMainChart","_buildOverviewChart","linesData","_this","canvas","element","querySelector","seismicEvents","blastEvents","allTs","flatMap","l","filter","v","xMin","Math","min","xMax","max","datasets","line","i","label","String","data","borderColor","backgroundColor","borderWidth","pointRadius","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","tension","yAxisID","noDataPlugin","afterDraw","chart","xScale","scales","hasData","ds","pt","ctx","chartArea","left","right","top","bottom","save","font","fillStyle","textAlign","textBaseline","fillText","restore","eventMarkersPlugin","drawLine","color","px","getPixelForValue","beginPath","strokeStyle","lineWidth","setLineDash","moveTo","lineTo","stroke","e","cyan3","crosshairX","pinnedX","crosshairPlugin","pointLabelsPlugin","totalVisible","dsIndex","meta","getDatasetMeta","ptIndex","toFixed","buildLegendItems","join","buildTooltipItems","tooltipItems","dateStr","parsed","datasetIndex","val","dataset","legendTooltipEl","initLegendTooltip","container","document","createElement","className","style","position","appendChild","innerHTML","attachLegendHandlers","oncontextmenu","preventDefault","clearPinnedTooltip","el","onclick","target","closest","parseInt","update","onmouseover","idx","onmouseout","externalTooltipHandler","context","tooltip","opacity","dataPoints","pointerEvents","getDataPointsAtPx","targetX","getValueForPixel","items","bestDist","Infinity","d","abs","setPinnedTooltip","options","responsive","maintainAspectRatio","animation","duration","interaction","mode","intersect","plugins","legend","display","enabled","external","callbacks","tooltipFormat","displayFormats","ticks","maxTicksLimit","maxRotation","grid","text","parseFloat","callback","y2","drawOnChartArea","parentElement","setData","setChart","mainCanvas","mainSelectionEl","dragStartPx","getCanvasX","rect","getBoundingClientRect","clientX","addEventListener","width","curX","w","onMouseUp","startPx","endPx","leftPx","rightPx","startTs","endTs","_submitBrush","overviewSelectionEl","overlayEl","selectionEl","fullRange","spanGaps","overviewChart","size","_restoreBrushFromQueryParams","_attachBrushHandlers","qp","attrs","getQueryParams","startQP","endQP","getOverlayX","evt","onMove","onUp","isDestroyed","isDestroying","prev","updateProperties","dataObserver","observer","newLines","clearPin","dsIdx","findIndex","overviewDataObserver","axisScaleObserver","autoAxis","axisMin","axisMax","willDestroyElement","mainChart","destroy","actions","saveImage","html2canvas","downloadLink","setAttribute","toBlob","blob","url","URL","createObjectURL","click","toggleLine","seriesIndex","resetNewInstrumentObject","_this","set","CreatePackInstrument","Component","extend","modelList","computed","get","shortModelList","toArray","forEach","element","id","push","getModelById","modelId","find","model","is4500HH","selectedModel","modelName","isTypeGeoPt","selectedVendor","isTypeRocPws","vwProperties","authError","isAuthenticated","newInstrumentObject","headAt","zeroTimestamp","installDate","calcCoef1","calcCoef2","calcCoef3","calcCoef4","calcCoef5","project","level","actions","setProject","value","selectedId","foundObject","projectLookupList","lookup","setLevel","levelLookupList","setVendor","vendorID","send","setModel","modelID","setValue","prop","val","createInstrument","object","store","setError","error","instrumentType","peekRecord","active","moment","format","console","log","newInstrument","dup","createRecord","err","message","includes","save","then","results","findBy","anchorCount","getAnchorCountFromId","ctr","number","distance","instrument","createVwProperties","vwPropertyData","index","vwp","port","propertyResults","catch","reason","channelsNum","parseInt","channel","vwProperty","init","arguments","_exports","default","resetNewRawDataValueObject","_this","displacementValueObjectValues","get","set","moment","format","Object","keys","forEach","key","index","_default","_exports","default","Component","extend","store","service","router","isVisibleCreateNewForm","dateFormat","dateTimePicker","temperatureObjectValue","newTimestampValue","newDisplacementValuesObject","computed","id","newTemperatureValuesObject","handleIsVisibleCreateNewFormChange","observer","i","length","newDisplacementValueObjectValues","actions","setNewDisplacementValue","event","vals","target","value","setNewTimestampValue","setTemperatureValue","saveNew","displacementValues","temperatureValues","values","newTemperatureValues","createRecord","savedTemperatureValuesObject","save","adapterOptions","then","results","unshift","newDisplacementValues","savedDisplacementValuesObject","currentRouteName","currentRouteInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","cancelNew","object","didRender","willDestroyElement","datetimepicker","EditInstrumentPortDropDown","_exports","default","_class","Component","extend","editing","selectedVendor","selectedModel","selectedVendorID","computed","vendor","get","toArray","set","id","ex","selectedModelID","model","modelList","shortModelList","forEach","element","push","vendorName","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","EditInstrument","_exports","default","_class","Component","extend","editing","selectedVendor","selectedModel","modelList","vwProperties","project","level","init","_super","arguments","inst","get","set","length","console","log","createVwProperties","vwproperty","undefined","prop","toArray","model","vendor","modelTypes","id","pushObject","getSubRoctestModel","computed","models","vendorId","shortModelList","forEach","element","push","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","setProject","event","selectedId","target","value","foundObject","projectLookupList","find","lookup","setLevel","levelLookupList","willDestroyElement","selectProperty","findBy","serial","viewData","endDateObj","moment","startDateObj","subtract","format","formattedEndDateObj","baseUnit","transitionTo","queryParams","tGraph","fGraph","setVendor","vwProperty","index","indexOf","setModel","vwmodel","save","ex","editField","stopEditField","saveInstrument","_this","t","confirm","window","location","href","instrument","channelsNum","parseInt","channel","vwp","store","createRecord","port","then","propertyResults","catch","reason","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Component","extend","gVariableUnit2","kVariableUnit2","gPressureUnit","kPressureUnit","store","service","router","init","_super","arguments","vwProperty","get","initUnit","next","dropdown","document","getElementById","value","buildAndUpdateGUnit","buildAndUpdateKUnit","getPressureUnit","computed","console","log","pressureUnit","getGPressureUnit","newUnit","newU","set","didInsertElement","actions","handlePressureUnitChange","event","newValue","target","correspondingVWProperty","save","then","Component","extend","store","service","chartId","startTimestamp","endTimestamp","progressAnimationDuration","isDistXTooltip","distXRiseUpAnimationDuration","seismicEventsChartDistXData","computed","get","key","type","color","values","map","event","moment","valueOf","blastEventsChartDistXData","seismicEventsArray","timestamp","format","eventSize","momentMagnitude","sortBy","blastEventsArray","tonnes","zoomDataPoints","item","chartData","modelName","unshift","error","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","dataValuesCount","length","anchors","content","anchor","splice","anchorMidDistances","copy","midDistances","i","mid","push","toFixed","anchorColors","d3","scale","category10","range","anchorDistancesChartReferencePoints","anchorDistance","inlineHoverValuesSideOffset","zoomChartLinesData","_this","chartLine","chartLineIndex","dataPoint","dataPointIndex","concat","fullRangeChartLinesData","chartLineName","numLines","lineDrawDelay","chartDataModelName","query","model_name","yAxisLegend","promise","title","substr","lastIndexOf","replace","didInsertElement","zoomChartSVG","select","fullRangeChartSVG","apiCallsPromises","Promise","all","then","results","instrument","toString","forEach","id","axisName","units","zoomChart","nv","models","lineChartProgressAnimationAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","distXAxisScale","duration","showDistX","showLegend","showXAxis","noData","ex","forceX","addGraph","xAxis","tickPadding","showMaxMin","yAxis","axisLabel","tickFormat","distXAxis","fullRangeChartXDomainLength","utils","getDateAutoscaleFormat","Date","distX","size","distXTooltipBottomOffset","distXRiseUpAnimationDelay","lineWidth","datum","filter","Boolean","call","dispatch","on","brushExtent","set","tooltip","hidden","attrs","updateProperties","extent","fullRangeChart","onBrushCall","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","activeTooltipContent","windowResize","update","e","log","JSON","stringify","state","focus","line","syncBrushing","independentBrushing","showYAxis","getQueryParams","Component","extend","store","service","modelName","init","_super","arguments","loadModelName","updateCalibColLabel","get","updateLinColLabel","filterEventsByAttributes","events","instrumentAttributes","eventAttributes","filter","event","i","length","instrumentAttr","eventAttr","eventAttrValue","calibColLabel","linColLabel","chartId","startTimestamp","endTimestamp","isDistXTooltip","distXRiseUpAnimationDuration","RST_MODEL_NAMES","vw2100","seismicEventsChartDistXData","computed","key","type","color","values","map","moment","valueOf","blastEventsChartDistXData","instrument","blastEvents","seismicEventsArray","time","timestamp","format","eventSize","momentMagnitude","location","sort","a","b","getLevelId","instrumentLevelId","id","error","getProjectId","instrumentProject","fetchValueFromStore","record","findRecord","console","blastEventsArray","instrumentProjectId","levelValue","projectValue","data_set","tonnes","project","level","zoomTempPoints","chartDataResult","zoomTempData","item","toJSON","chartData","currentPort","port","attrs","getQueryParams","zoomDataPoints","zoomData","rawValues","Array","isArray","slice","push","fullRangeDataPoints","zoomTimePoints","fullRangeTimePoints","anchorDistances","zoomChartLinesData","_this","chartLineName","chartLineIndex","yAxis","dataPoint","dataPointIndex","pop","shift","temp","concat","fullRangeChartLinesData","chartDataModelName","query","model_name","yAxisLegend","promise","queryRecord","title","substr","lastIndexOf","replace","modelNames","vwmodelName","then","vwproperties","forEach","vwproperty","log","vwPropertyArr","set","vwProp","property","toArray","model","didInsertElement","zoomChartSVG","d3","select","fullRangeChartSVG","apiCallsPromises","Promise","all","results","toString","instType","axisName","linAxisName","units","usesPoints","chartName","zoomChart","nv","models","lineChartWithFocusAPI","margin","top","right","bottom","left","useInteractiveGuideline","x","d","y","scale","category10","range","duration","showDistX","noData","legend","addGraph","xAxis","ticks","tickPadding","showMaxMin","tickFormat","zoomChartXDomainLength","utils","getDateAutoscaleFormat","Date","y1Axis","axisLabel","axisLabelDistance","y2Axis","distX","size","distXTooltipBottomOffset","isFixedDistXTooltip","distXRiseUpAnimationDelay","lineWidth","numDecimals","some","datum","Boolean","call","dispatch","on","brushExtent","tooltip","hidden","updateProperties","extent","fullRangeChart","onBrushCall","selectControls","series","disabled","updateDistXTooltip","tooltipContent","tooltipText","tooltipClass","ppv","ppa","freq","distXMouseMove","distX0","onDistXTooltipShowCall","distX1","distXIndex","distX2","activeTooltipContent","windowResize","update","e","JSON","stringify","state","setData","setChart","graph_type","scatter","line","focus","syncBrushing","independentBrushing","showXAxis","showYAxis","fullRangeChartXDomainLength","ex","DropdownComponent","_exports","default","_class","Component","constructor","arguments","_initializerDefineProperty","_descriptor","_descriptor2","loadInstrument","sortedProperties","instrument","vwproperty","sort","a","b","port","args","instrumentId","store","findRecord","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","tracked","_default","_exports","default","Component","extend","store","service","router","calibColLabel","linColLabel","OUTLIER_MODEL_NAMES","vw2100","jms","isModalOpen","modalMode","modalEditingId","init","_super","arguments","updateCalibColLabel","get","updateLinColLabel","isRawMode","computed","modelNames","vwmodelName","query","then","vwproperties","length","forEach","vwproperty","console","log","columnLabelObserver","observer","currentPort","set","vwProp","property","toArray","model","modelName","anchorDistances","channelsNum","push","linear","calib","depth","channel","tableRows","dispData","tempData","anchors","fmt","strokeLength","meta","zeroTimestamp","tempById","r","id","map","dispRow","index","dispValues","values","tempRow","objectAt","tempValues","tempValue","cells","label","i","v","hasValue","value","aboveStroke","Number","formattedDate","moment","format","toFixed","isZeroTimestampClass","modalFields","mode","editingId","find","dateField","key","type","tempField","freqFields","modalTitle","verb","actions","openAdd","openEdit","rowId","closeModal","removeRow","window","confirm","instrumentId","adapterOptions","promises","deleteRecord","save","Promise","all","routeName","routeInstance","getOwner","lookup","refresh","catch","reason","errors","status","setProp","saveRow","snapshot","safeNum","n","isFinite","freqValues","newId","isEdit","originalId","findRow","collection","refreshRoute","handleErr","oldTemp","oldDisp","existingTemp","existingDisp","createRecord","updateProperty","propertyName","propertyValue","Component","extend","hzSquared","hz","unitA","unitB","unitC","store","service","router","init","_super","arguments","vwProperty","get","initUnit","next","dropdown","document","getElementById","value","buildUnitA","buildUnitB","buildUnitC","getUnitA","computed","pressureUnit","getUnitB","getUnitC","newUnit","set","actions","handleUnitChange","event","newValue","target","correspondingVWProperty","save","then","console","log","Component","extend","ctPressureTempUnit","tempUnit","store","service","router","init","_super","arguments","vwProperty","get","initUnit","next","dropdown","document","getElementById","value","buildAndUpdateCTUnit","getPressureUnit","computed","console","log","pressureUnit","getGPressureUnit","newUnit","set","actions","handleUnitChange","event","newValue","target","correspondingVWProperty","save","then","Component","extend","cfVariableUnit2","tkVariableUnit2","cfPressureUnit","tkPressureUnit","store","service","router","init","_super","arguments","vwProperty","get","initUnit","next","dropdown","document","getElementById","value","buildAndUpdateCFUnit","buildAndUpdateTKUnit","getPressureUnit","computed","console","log","pressureUnit","getGPressureUnit","newUnit","newU","set","didInsertElement","actions","handlePressureUnitChange","event","newValue","target","correspondingVWProperty","save","then","_default","_exports","default","Component","extend","DropdownComponent","_exports","default","_class","Component","constructor","arguments","_initializerDefineProperty","_descriptor","_descriptor2","loadInstrument","args","instrumentId","instrument","store","findRecord","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","tracked","Controller","extend","page_size","page","search","batchSelectedAlertsID","activeActionTab","alertsBatch","service","session","breadCrumbs","label","path","typeBatch","isShowBatchConfirmationModal","batchWarningMessage","licenceIsValid","computed","valid","data","authenticated","isValid","actions","close","set","confirm","type","alertProfileIDs","get","length","alert","batchDelete","batchEdit","route","getOwner","lookup","refresh","err","console","error","cycleActionBar","tabName","sortBy","property","updateProperty","propertyName","propertyValue","refreshRoute","send","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","ApplicationController","_exports","default","_class","Controller","constructor","args","_descriptor","invalidateSession","localStorage","clear","session","invalidate","prototype","service","action","getOwnPropertyDescriptor","Controller","extend","init","_super","arguments","scheduleOnce","queryParams","page_size","eventsMeta","ordering","search","isVisibleRowDetails","isRowDeleteConfirmationDialog","isVisibleCreateNewForm","permissionError","project","level","breadCrumbs","label","path","actions","updateProperty","propertyName","propertyValue","set","vewRowDetails","id","curVal","get","toggleRowDeleteConfirmationDialog","remove","model","object","_this","deleteRecord","save","then","removeObject","catch","reason","errors","status","send","sortBy","property","setProject","event","selectedId","target","value","foundObjects","foundObject","find","lookup","console","log","setLevel","Controller","extend","breadCrumbs","label","path","Controller","extend","session","service","alertProfileFormFinalData","alertProfileFormChannelsData","alertProfileFormParametersData","breadCrumbs","label","path","init","_super","arguments","resetAlertProfileFormFinalData","set","resetAlertProfileFormChannelsData","resetAlertProfileFormParametersData","licenceIsValid","computed","valid","data","authenticated","isValid","actions","CreateGatewayController","_exports","default","_class","Controller","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","label","path","choseForm","value","console","log","set","submit","id","router","transitionTo","setError","error","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","CreateInstrumentController","_exports","default","_dec","computed","_class","Controller","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_defineProperty","label","path","choseForm","value","set","store","query","instrument_type","then","vendors","submit","id","router","transitionTo","setError","error","sortTypesByTitle","typesArray","sort","a","b","title","getInstrumentTypes","types","model","instrumentTypes","newTypesArr","forEach","element","push","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","tracked","Object","getOwnPropertyDescriptor","resetNewLookupObject","_this","set","CreateInstrumentController","_exports","default","_class","Controller","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","label","path","choseType","value","submit","id","transitionToRoute","createLookup","object","store","get","newLookupObject","name","type","alert","console","log","JSON","stringify","newLookup","dup","createRecord","err","setError","message","save","then","results","error","catch","reason","init","arguments","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","tracked","Controller","extend","session","service","currentTab","breadCrumbs","computed","get","alert","obj","label","path","model","init","_super","arguments","licenceIsValid","valid","data","authenticated","isValid","actions","updateTab","value","set","Controller","extend","session","service","router","queryParams","init","_super","arguments","queryParamParentGateway","parentGateway","window","localStorage","setItem","storedParentGateway","getItem","set","computed","get","_parentGateway","key","value","breadCrumbs","gateway","obj","label","path","model","gatewayTypeLabel","modelTemp","gatewayType","title","hasGraphs","getPerms","undefined","perms","data","authenticated","modules","actions","viewData","id","transitionTo","tGraph","chart","saveToLocalStorage","loadFromLocalStorage","Controller","extend","session","service","breadCrumbs","computed","get","instrument","obj","label","path","model","hasGraphs","getPerms","undefined","perms","data","authenticated","modules","ports","channelsNum","parseInt","ex","numberOfPorts","channel","push","route","console","log","JSON","stringify","actions","selectProperty","value","inst","prop","toArray","findBy","vendor","serial","viewData","id","transitionToRoute","tGraph","chart","sGraph","fGraph","Controller","extend","breadCrumbs","computed","get","alert","obj","label","path","model","instrumentTypeName","set","instrument","actions","saved","setError","error","value","ForgotPasswordController","_exports","default","_class","Controller","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_descriptor6","resetPassword","loading","response","api","fetch","getApiBaseUrl","method","headers","body","JSON","stringify","email","json","isSentResetRequest","err","console","log","errorMessage","updateInfo","type","e","target","value","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","service","action","Object","getOwnPropertyDescriptor","Controller","extend","router","service","session","isRowDeleteConfirmationDialog","showLoading","init","_super","arguments","on","handleRouteChange","bind","transition","to","name","set","isShowConfig","isShowPopupNotification","licenceIsValid","computed","valid","data","authenticated","isValid","getVisibleReadings","get","length","getTotalReadings","pagination","total","breadCrumbs","instrument","obj","label","path","id","model","displayData","instrumentId","getbluvibev2ProfileList","list","actions","closeNotificationPopup","notificationPopupContentBody","document","getElementById","innerHTML","actionsHotKey","key","profile_obj","buildFrequencyEventsOverviewBoard","transitionTo","parent","endDateObj","moment","startDateObj","subtract","format","formattedEndDateObj","queryParams","profile_id","advancedYAxisUnit","analysis_category","buildFrequencyEventsEditBoard","buildDeleteWarningBoard","Controller","extend","router","service","session","init","_super","arguments","actions","Controller","extend","router","service","session","showLoading","integrationMethod","selectedFreqEventTabKey","selectedFreqEventSubTabKey","selectedFreqEventSubSubTabKey","advancedYAxisUnit","raw","tabs","isShowConfig","isShowPopupNotification","init","_super","arguments","initializeGraphDataFromTabKeys","key","profiles","get","profileObj","objectAt","endPoint","timestamp","profileID","instrID","method","analysisCategory","set","sendGETRequest","instrument_id","selectedFreqEventDate","profile_id","analysis_category","run_analysis","then","response1","data","catch","error","console","response","response2","next","err","log","message","stack","updateRedWarning","computed","hasOwnProperty","length","subTabObserver","observer","subTab","loadProfiles","tab","breadCrumbs","instrument","obj","label","path","id","model","getProfileID","bluvibeV2ModelProfiles","displayData","instrumentId","buildTabsInstrTypeDependent","instrumentType","actions","closeNotificationPopup","notificationPopupContentBody","document","getElementById","innerHTML","redWarningNotification","buildRedWarningNotificationBoard","updateProperties","propertyNames","propertyValues","_this","forEach","propertyName","i","getQueryParams","variable","toggleProperty","property","Controller","extend","xyRangeObj","router","service","instrumentId","instrumentType","instrumentTypeId","name","location","level","borehole","project","modelName","activeInstrumentMeta","frequencyGraphController","controller","chartDataValueName","frequency","chartData","chart","chartDataPoints","adjust_scales","auto_scale","x_min","x_max","x_min_old","x_max_old","x_min_auto","x_max_auto","y_min","y_max","y_min_old","y_max_old","y_min_auto","y_max_auto","auto_scale_2","y_min_2","y_max_2","y_min_old_2","y_max_old_2","y_min_auto_2","y_max_auto_2","lastClick","instrumentAnchors","instrumentAnchorsSorting","chart_type","log_frequency","display_records","breadCrumbs","computed","get","mName","instID","instrument","toUpperCase","obj","label","path","query","model","linkable","chartChanged","observer","xyRangeValues","yAxis","scale","yDomain","domain","xDomain","xAxis","set","toFixed","xValueChanged","update","error","console","valueChanged","autoScaleChanged","getInstrumentObject","displayData","details","detailString","projectId","projectName","levelId","levelName","badCodes","includes","undefined","substr","length","bluVibe","instrumentAnchorsSorted","sort","refHeadPosition","rawData","timeRef","flipSigns","allInstruments","filter","instruments","map","title","value","initialInstrumentSelection","id","writeCookie","findBy","actions","updateNav","licence","modules","isValid","withinLimit","temporal","document","getElementById","style","display","spatial","updateProperties","propertyNames","propertyValues","_this","forEach","propertyName","i","toggleProperty","property","send","toggleLocalProperty","onUpdateTransitionTo","selection","RouterService","transitionTo","setChart","setData","data","selectTemps","points","ctr","disabled","userDisabled","selectReadings","activate","inst","readCookie","scheduleOnce","days","date","expires","Date","setTime","getTime","toGMTString","cookie","c","ca","nameEQ","split","charAt","substring","indexOf","Controller","extend","queryParams","start_timestamp","end_timestamp","num_points_requested","ref_head_position","ref_anchor","zeroed","modelName","flip_signs","frequency","chart","chart_type","display_records","raw","actions","setData","data","send","setChart","updateProperties","propertyNames","propertyValues","_this","length","forEach","propertyName","i","set","getQueryParams","variable","get","toggleProperty","property","Controller","extend","page_size","page","search","breadCrumbs","label","path","actions","sortBy","property","set","updateProperty","propertyName","propertyValue","refreshRoute","send","Controller","extend","breadCrumbs","label","path","Controller","extend","init","_super","arguments","scheduleOnce","store","service","queryParams","page_size","instrumentsMeta","ordering","search","searchTgt","page","lat","lng","zoom","mapBounds","computed","actions","sortByA","property","set","sortByI","sortByG","Controller","extend","page_size","page","search","breadCrumbs","label","path","actions","sortBy","property","set","updateProperty","propertyName","propertyValue","KeysController","_exports","default","_class","Controller","constructor","args","_defineProperty","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","updateActive","theModel","valid","active","ctr","tooltip","licenceKeys","forEach","theItem","id","isValidKey","count","numInst","modules","key","type","capitalizeFirstLetter","key2","set","remove","model","object","destroyRecord","window","location","reload","toggleRowDeleteConfirmationDialog","curVal","get","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","action","Object","getOwnPropertyDescriptor","string","charAt","toUpperCase","slice","ListLookupController","_exports","default","_class","Controller","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","computed","valid","session","data","authenticated","isValid","startEditing","lookupId","lookup","console","log","set","stopEditing","setRDCD","value","rdcd","get","notifyPropertyChange","createLookup","router","transitionTo","updateActive","model","lookups","forEach","item","id","toggleRowDeleteConfirmationDialog","list","save","_this","_store","then","catch","reason","status","errors","errBox","hidden","remove","object","deleteRecord","unloadRecord","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","action","Object","getOwnPropertyDescriptor","Controller","extend","page_size","page","search","breadCrumbs","label","path","actions","sortBy","property","set","updateProperty","propertyName","propertyValue","refreshRoute","send","LoginController","_exports","default","_class","Controller","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","registerNewAccount","url","router","urlFor","window","open","forgotPassword","onLoginKeydown","event","key","authenticateWithProvider","providerName","errorMessage","session","authenticate","username","identification","password","provider","isAuthenticated","loading","handleAuthentication","Configuration","routeAfterAuthentication","error","msg","message","console","log","includes","showResendVerification","resendVerification","alert","payload","email","response","api","fetch","getApiBaseUrl","method","headers","body","JSON","stringify","data","json","updateIdentification","e","target","value","updatePassword","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","service","action","Object","getOwnPropertyDescriptor","MyProfileController","_exports","default","_class","Controller","constructor","args","_initializerDefineProperty","_descriptor","_defineProperty","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Controller","extend","page_size","page","search","breadCrumbs","label","path","actions","sortBy","property","set","updateProperty","propertyName","propertyValue","refreshRoute","send","Controller","extend","page_size","page","search","breadCrumbs","label","path","actions","sortBy","property","set","updateProperty","propertyName","propertyValue","refreshRoute","send","ApplicationController","_exports","default","_class","Controller","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","addTask","taskName","tasks","pushObject","name","percentage","updateTask","task","findBy","removeTask","removeObject","updateTaskStatus","taskId","response","api","fetch","status","json","setTimeout","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","service","Controller","extend","isVisibleExportDataForm","isVisibleImportDataForm","displacementValuesMeta","permissionError","linear","calib","depth","port_number","port","breadCrumbs","computed","get","instrument","obj","label","path","id","model","hasPorts","channelsNum","parseInt","ports","numberOfPorts","channel","push","linearData","calibData","depthData","isWire","prop","actions","updateProperty","propertyName","propertyValue","set","toggleDataType","property","toggleProperty","Controller","extend","router","service","session","isVisibleExportDataForm","isVisibleImportDataForm","permissionError","showLoading","init","_super","arguments","on","handleRouteChange","bind","transition","to","name","set","breadCrumbs","computed","get","instrument","obj","label","path","id","model","actions","updateProperty","propertyName","propertyValue","toggleProperty","property","Controller","extend","queryParams","isVisibleExportDataForm","isVisibleImportDataForm","gatewayValuesMeta","permissionError","linear","calib","depth","raw_parent_gateway","breadCrumbs","computed","get","console","log","gateway","obj","label","path","id","model","actions","updateProperty","propertyName","propertyValue","set","toggleProperty","property","RegisterController","_exports","default","_class","Controller","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","_descriptor9","_defineProperty","_descriptor0","_descriptor1","_descriptor10","_descriptor11","_descriptor12","_descriptor13","resendVerification","loading","email","errorMessage","url","getApiBaseUrl","response","api","fetch","method","headers","body","JSON","stringify","data","json","ok","alert","error","message","err","submitRegistration","event","console","log","username","first_name","firstName","last_name","lastName","password","isSuccessful","updateEmailsSent","updateUsername","validateUsername","target","value","set","inputUsername","length","usernameRegex","test","updateEmail","validateEmail","emailRegex","updatePassword","calculateStrength","score","pw","passwordStrength","emailsSentArr","result","forEach","element","passwordStrengthText","passwordStrengthBarStyle","width","color","barWidth","barColor","c","updateFirstName","e","updateLastName","updateInfo","type","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","service","action","Object","getOwnPropertyDescriptor","ResetPasswordController","_exports","default","_class","Controller","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","updateField","field","event","target","value","submit","errorMessage","password","passwordConfirm","token","model","response","api","fetch","getApiBaseUrl","method","headers","body","JSON","stringify","data","json","ok","error","success","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","service","action","Object","getOwnPropertyDescriptor","Controller","extend","init","_super","arguments","scheduleOnce","queryParams","page_size","eventsMeta","ordering","search","isVisibleImportDataForm","isVisibleRowDetails","isRowDeleteConfirmationDialog","isVisibleCreateNewForm","permissionError","breadCrumbs","label","path","actions","updateProperty","propertyName","propertyValue","set","vewRowDetails","id","curVal","get","toggleRowDeleteConfirmationDialog","toggleProperty","property","remove","model","object","_this","deleteRecord","save","then","removeObject","catch","reason","errors","status","send","sortBy","Controller","extend","page_size","page","search","breadCrumbs","label","path","actions","sortBy","property","set","updateProperty","propertyName","propertyValue","refreshRoute","send","Controller","extend","page_size","page","search","breadCrumbs","label","path","actions","sortBy","property","set","updateProperty","propertyName","propertyValue","refreshRoute","send","SettingsController","Controller","constructor","args","_defineProperty","resetLoading","set","_exports","default","Controller","extend","store","service","init","_super","arguments","scheduleOnce","instrumentId","instrumentType","instrumentTypeId","name","location","level","project","borehole","modelName","activeInstrumentMeta","spatialGraphController","controller","eventType","blastType","seismicType","chartDataValueName","chartData","instrumentAnchors","instrumentAnchorsSorting","vendor","breadCrumbs","computed","get","chart","mName","instID","instrument","obj","label","path","query","model","id","peekRecord","isThermo","isRebar","displayData","details","detailString","projectId","projectName","levelId","levelName","badCodes","includes","undefined","substr","length","isAdictMDT","toLowerCase","vendorType","instrumentAnchorsSorted","sort","instrumentAnchorsForAdictMDT","pop","allInstruments","filter","refHeadPosition","timeRef","flipSigns","instruments","map","title","value","frequencySelect","groupTime","groupWindow","initialInstrumentSelection","writeCookie","findBy","actions","updateNav","licence","modules","isValid","withinLimit","temporal","document","getElementById","style","display","spatial","frequency","updateProperties","propertyNames","propertyValues","_this","forEach","propertyName","i","set","toggleProperty","property","send","updateActivefrequency","charAt","toUpperCase","slice","frequency_num","events_only","updateGroupMode","group_window","freq","group_time","onUpdateTransitionTo","selection","typeID","isRebarGraph","RouterService","transitionTo","setChart","setData","data","activate","inst","readCookie","days","date","expires","Date","setTime","getTime","toGMTString","cookie","c","ca","nameEQ","split","substring","indexOf","Controller","extend","queryParams","start_timestamp","end_timestamp","num_points_requested","ref_head_position","ref_anchor","zeroed","modelName","flip_signs","event_type","blast_type","seismic_type","frequency","frequency_num","events_only","group_time","group_window","side","actions","setData","data","send","setChart","chart","updateProperties","propertyNames","propertyValues","_this","length","forEach","propertyName","i","set","getQueryParams","variable","get","toggleProperty","property","Controller","extend","queryParams","init","_super","arguments","scheduleOnce","gatewayId","gatewayType","gatewayTypeId","name","location","level","project","modelName","activeGatewayMeta","temporalGatewayGraphController","controller","chartDataValueName","chartData","chart","chartDataPoints","adjust_scales","auto_scale","y_min","y_max","y_min_old","y_max_old","y_min_auto","y_max_auto","auto_scale_2","y_min_2","y_max_2","y_min_old_2","y_max_old_2","y_min_auto_2","y_max_auto_2","lastClick","gatewayAnchors","gatewayAnchorsSorting","depthChecked","chart_type","display_records","left_axis_field","right_axis_field","port","chart_parent_gateway","parentGateway","rawChecked","computed","get","breadCrumbs","badCodes","mName","gateway","gatewayID","id","includes","obj","label","path","query","model","_isChartJS","y1Axis","chartChanged","observer","set","domain","scale","toFixed","domain2","y2Axis","send","valueChanged","yMin","yMax","options","scales","y","min","parseFloat","undefined","max","update","yDomain1","autoScaleChanged","valueChanged2","yMin2","yMax2","y2","yDomain2","autoScaleChanged2","window_value","window","displayData","details","detailString","substring","length","temperatureIsValid","gatewayAnchorsSorted","sort","depthData","depth","timeRef","allGateway","filter","map","title","value","initialGatewaySelection","writeCookie","findBy","actions","selectAxis","setDepth","updateNav","licence","modules","isValid","withinLimit","temporal","document","getElementById","style","display","spatial","frequency","updateProperties","propertyNames","propertyValues","_this","forEach","propertyName","i","toggleDataType","property","toggleProperty","toggleLocalProperty","propValue","updateLocalProperty","propertyValue","onUpdateTransitionTo","selection","tra","setChart","setData","data","disableTemp","points","element","yAxis","disabled","userDisabled","saveImage","html2canvas","querySelector","allowTaint","foreignObjectRendering","onrendered","canvas","downloadLink","createElement","setAttribute","toBlob","blob","url","URL","createObjectURL","click","selectTemps","ctr","selectReadings","activate","readCookie","transitionToRoute","numDecimals","roundVal","Math","pow","answer","ceil","floor","days","date","expires","Date","setTime","getTime","toGMTString","cookie","c","ca","nameEQ","split","charAt","indexOf","Controller","extend","queryParams","start_timestamp","end_timestamp","num_points_requested","ref_anchor","zeroed","depth","modelName","window","chart","chart_type","display_records","right_axis_field","left_axis_field","port","chart_parent_gateway","temporalGraphsController","controller","depthObserver","observer","get","send","actions","toggleDataType","property","set","setData","data","setChart","updateWindow","updateProperties","propertyNames","propertyValues","_this","length","forEach","propertyName","i","getQueryParams","variable","toggleProperty","propValue","_default","_exports","default","Controller","extend","store","service","willDestroy","_super","arguments","init","console","log","instrumentId","instrumentTypeId","name","location","level","borehole","project","modelName","activeInstrumentMeta","temporalGraphController","controller","eventType","blastType","seismicType","chartDataValueName","advancedYAxisUnit","chartData","frequency","tiltMode","chart","chartDataPoints","adjust_scales","zeroed","auto_scale","y_min","y_max","y_min_old","y_max_old","y_min_auto","y_max_auto","auto_scale_2","y_min_2","y_max_2","y_min_old_2","y_max_old_2","y_min_auto_2","y_max_auto_2","lastClick","instrumentAnchors","instrumentAnchorsSorting","test","linearChecked","calibChecked","depthChecked","tiltZUp","chart_type","display_records","previousAnchor","router","vendor","port","selectedAnchor","shouldRerender","instrument","computed","content","getAnchor","get","instrumentType","title","set","key","value","getInstrumentTypeToLower","toLowerCase","isDPPC","rawChecked","id","peekRecord","breadCrumbs","mName","instID","obj","label","path","query","model","chartChanged","observer","update","y1Axis","domain","scale","toFixed","y2Axis","send","valueChanged","yMin","yMax","options","scales","y","min","parseFloat","undefined","max","yDomain1","autoScaleChanged","valueChanged2","yDomain2","autoScaleChanged2","isVelocityGraph","bluVibeEvent","window_value","typeSelect","isThermo","isPiezo","isWire","displayData","details","detailString","projectId","projectName","levelId","levelName","badCodes","includes","substr","length","displacementIsValid","axialDisplacementIsValid","velocityIsValid","temporalVelocityName","accelerationIsValid","temporalAccelerationName","strainIsValid","temporalStrainName","strainRateIsValid","temporalStrainRateName","axialIsValid","bendingIsValid","loadIsValid","temporalLoadName","temperatureIsValid","bluVibe","isAdictMDT","vendorType","e","instSelectedAnchor","_instrumentAnchorsSortedRaw","sort","instrumentAnchorsSorted","subModel","getSubModelFromId","count","getAnchorCountFromId","out","i","push","number","distance","defaultAnchorOnLoad","anchors","current","first","firstNumber","instrumentAnchorsForAdictMDT","pop","refHeadPosition","linearData","calibData","depthData","depth","timeRef","flipSigns","allInstruments","filter","instruments","map","initialInstrumentSelection","writeCookie","findBy","randomValue","actions","setRandomValue","Math","floor","random","updatePort","newPortValue","currentPortValue","resetZoom","start_timestamp","end_timestamp","transitionTo","queryParams","handleAnchorSelection","event","save","setDepth","setLinear","setCalib","updateNav","licence","modules","isValid","withinLimit","temporal","document","getElementById","style","display","spatial","updateProperties","propertyNames","propertyValues","_this","forEach","propertyName","toggleDataType","property","toggleProperty","setCheckboxProperty","target","checked","sub","toggleZeroedGraph","toggleLocalProperty","propValue","updateLocalProperty","propertyValue","onUpdateTransitionTo","selection","RouterService","onUpdateTransitionToVibe","setChart","setData","data","disableTemp","points","element","yAxis","disabled","userDisabled","saveImage","html2canvas","querySelector","allowTaint","foreignObjectRendering","then","canvas","downloadLink","createElement","setAttribute","toBlob","blob","url","URL","createObjectURL","click","selectTemps","ctr","selectReadings","activate","inst","readCookie","scheduleOnce","numDecimals","roundVal","pow","answer","ceil","days","date","expires","Date","setTime","getTime","toGMTString","cookie","c","ca","nameEQ","split","charAt","substring","indexOf","Controller","extend","queryParams","start_timestamp","end_timestamp","num_points_requested","ref_head_position","ref_anchor","zeroed","linear","calib","depth","modelName","flip_signs","event_type","blast_type","tiltMode","window","seismic_type","frequency","chart","chart_type","display_records","port","selectedAnchor","advancedYAxisUnit","temporalGraphsController","controller","linearObserver","observer","get","send","calibObserver","depthObserver","actions","toggleDataType","property","set","setData","data","setChart","updateVibe","vibeID","updateWindow","updateProperties","propertyNames","propertyValues","_this","length","forEach","propertyName","i","getQueryParams","variable","toggleProperty","propValue","queryParamsDidChange","changes","from","to","Controller","extend","init","_super","arguments","scheduleOnce","headerTitles","computed","titles","queryParams","page_size","eventsMeta","ordering","search","isVisibleRowDetails","isRowDeleteConfirmationDialog","isVisibleCreateNewForm","permissionError","breadCrumbs","label","path","actions","updateProperty","propertyName","propertyValue","set","vewRowDetails","id","curVal","get","toggleRowDeleteConfirmationDialog","remove","model","object","_this","deleteRecord","save","then","removeObject","catch","reason","errors","status","send","sortBy","property","activeClass","val","_default","_exports","default","helper","helper","alertGetId","alertRow","gw","get","gwId","appVersion","_","hash","version","config","APP","versionOnly","hideSha","shaOnly","hideVersion","match","showExtended","versionExtendedRegExp","versionRegExp","shaRegExp","_default","_exports","default","helper","arrayAt","params","arr","index","undefined","anchorDistances","_default","_exports","default","helper","buttonclass","anchor","ref_anchor","String","_default","_exports","default","helper","assistiveToolTipLibrary","key","SENSOR_CALIBRATION_PALETTE","_exports","danger","colorPalette","red2","warning","orange1","caution","yellow1","success","green29","neutral","gray24","info","green1","SENSOR_CALIBRATION_PROGRESS_RAMP","BE_SENTINEL","FOR_INVENTORY","getSensorCalibrationProgressColor","done","total","tryPickExportDirectory","window","showDirectoryPicker","mode","err","name","code","console","warn","writeBlobToDirectory","directoryHandle","filename","blob","finalName","resolveUniqueFilename","fileHandle","getFileHandle","create","writable","createWritable","write","close","dot","lastIndexOf","base","slice","ext","candidate","n","Date","now","_saveBlobWithPicker","suggestedName","accept","description","showSaveFilePicker","handle","types","saved","cancelled","saveAs","error","saveZipWithPicker","res","savePdfWithPicker","connectionStatusLibrary","statusObject","key","value","color","calibrationStatusLibrary","generalStatusLibrary","incomingMessageLibrary","context","rigProfile","get","hasOwnProperty","push","getCurrentDateTime","parsedData","parseMessage","updateAnchorBoardLiveViewData","updateAnchorChartLiveViewData","calculateAveragePhaseIModule","calculateAverageCalibrationDataPhaseIIModule","batchSensorData","i","sensorObj","sensorIsSamplingData","sensorData","trim","calculateAveragePhaseIV2Module","calculateAverageCalibrationDataPhaseIIV2Module","customStatusObj1","set","calculateAverageCurrentPhaseIIModule","calculateAverageCurrentPhaseIIV2Module","customStatusObj2","outgoingMessageLibrary","cmd","type","calibProfile","msg","data","checkpointSpeed","showPopup","sendBatchCommands","ws","appendLiveLog","send","generalPermissionLibrary","messageArray","seconds","popup","document","getElementById","popupBody","existingStyles","querySelectorAll","forEach","styleElement","remove","animationName","replace","styleSheet","createElement","id","innerHTML","head","appendChild","style","animation","offsetHeight","borderColor","visibility","opacity","message","subtitleSection","fontSize","textAlign","textContent","overflowWrap","fadeOutTimeout","closeButton","cursor","textDecoration","onclick","clearTimeout","setTimeout","fadeOut","setInterval","clearInterval","buildRigActivityNotificationBoard","responseData","sendGETRequest","scheduleOnce","masterPopupContent","calibTableTitle","marginTop","fontWeight","table","thead","borderBottom","trColumns","row1HeaderObject","label","columnObject","index","thColumn","border","borderWidth","tbody","length","rigID","activityJSON","trRows","tdRowData","refreshButtonComponent","display","marginRight","okButtonComponent","buildRigNotificationNotificationBoard","popupContentSectionComponent","Object","entries","rigObject","messagesArray","rigLabelSection","paddingLeft","pressTimer","addEventListener","event","messages","rigMessage","buildPhaseIIConclusionNotificationBoard","userProfile","authenticated","selectedRigProfile","selectedCalibrationProfile","selectedSensorData","selectedAnchorData","calibrationData","log","JSON","stringify","selectedRigData","selectedCalibrationData","selectedSensorObj","subTitleSection","paddingBottom","row1Section","width","justifyContent","sensorIDSection","flexDirection","alignItems","sensorIDSectionLabelSection","sensorIDSectionValueSection","packIdSection","packIdSectionLabelSection","packIdSectionValueSection","rigSection","rigValueSection","calibSection","calibLabelSection","calibValueSection","jobIDSection","jobIDLabelSection","jobIDValueSection","row2Section","latestDateTime","calibrationDateSection","calibrationDateLabelSection","calibrationDateValueSection","row3Section","sensorNameSection","sensorNameLabelSection","sensorNameValueSection","sensorDescriptionSection","sensorDescriptionLabelSection","sensorDescriptionValueSection","employeeSection","employeeLabelSection","employeeValueSection","row4Section","checkpointPositionsSection","checkpointPositionsLabelSection","checkpointPositionsValueSection","memoSectionLabelSection","memoSectionValueSection","marginLeft","whiteSpace","settingsConfig","APPROVEDINSTRUMENTTYPES","dExto","typeValue","dRebar","anchorSectionLabelSection","anchorSectionValueSection","channels","phaseILookUpLabelSection","lookup","phaseIValueSection","toString","phaseIILookUpLabelSection","phaseIIValueSection","phaseIICalibratedCurrentLabelSection","phaseIICalibratedCurrentValueSection","phaseIICalibratedSlopeLabelSection","phaseIICalibratedSlopeValueSection","phaseIICalibratedOffsetLabelSection","phaseIICalibratedOffsetValueSection","saveButtonComponent","confirmCheckBoxComponent","checked","saveAndSendPhaseIIData","confirmCheckBoxComponentSection","oninput","messageArr","buildPhaseIIConclusionNotificationBoardV2","sensorTitleSection","saveAndSendPhaseIIV2Data","buildBatchCalibrationSheet","isVisiblePopup","batchCBData","payload","rawData","_firstTruthy","obj","keys","undefined","k","skipped","c","sp","progress","phaseI","phaseII","isReady","conclusion","sensorID","p1","p2","lines","concat","map","s","conc","masterContent","fontFamily","certificateObj","sensorProfile","phaseILookupData","phaseIICalibrationDataValueData","phaseIICurrentData","phaseIISlopeData","phaseIIOffsetData","assign","paddingRight","logoComponent","alignSelf","src","mainComponent","quickDetailTitle","jobIDComponent","sensorNameComponent","sensorDescriptionComponent","calibrationDateComponent","split","technicalDetailTitle","row2ASection","employeeComponent","sensorIDComponent","sensorTypeComponent","sensorUnitComponent","row2BSection","refSNComponent","refCertValueComponent","refCertDateComponent","columns","columnLabel","checkpointPositionsLength","tdRowCurr","channelArray","tdRowDisp","trSlopeRows","tdSlopeCol","slopeVal","trOffsetRows","tdoffsetCol","offsetVal","constructor","anchorDiagramTitle","masterDiagramSection","className","upperMasterSection","anchorDummyHeadComponent1","anchorUpperTextBoxSection","anchorDummyTailComponent1","anchorMasterSection","anchorHeadComponent","anchorPointsComponent","anchorToeTextComponent","lowerMasterSection","anchorDummyHeadComponent2","anchorLowerTextBoxSection","anchorDummyTailComponent2","dCable","dMPBX","visualAnchorPoints","e","firstBufferSection","height","channel","inputElement","headDiv","background","borderRadius","anchorSpace","anchorPoint","borderStyle","append","schedule","upperAnchorElement","formatAnchor3dp","lowerAnchorElement","stack","memoTitle","memoValue","pageBreakDiv","pageBreakAfter","breakAfter","createCalibrationGraphs","exportButtonComponent","container","opts","margin","image","quality","html2canvas","scale","useCORS","jsPDF","unit","format","orientation","pagebreak","pdfBlob","html2pdf","from","outputPdf","clearBatchCBData","buildCalibrationSheet","calibrationID","sensorProfileList","selectedSensorProfileObj","phaseStatus","concText","paddingTop","watermark","cssText","top","left","position","printButtonComponent","element","opt","allowTaint","avoid","overflowX","overflowY","roundDownAuto","number","digits","Math","floor","log10","place","pow","stepSize","arrayY","xValues","displacementUnit","pressureUnit","row","typeCategory","yValues","calibrationGraphsDiv","calibrationGraphs","Chart","labels","datasets","pointRadius","pointBackgroundColor","fill","options","responsive","maintainAspectRatio","aspectRatio","scales","x","getAxisChartOption","y","plugins","title","text","legend","tooltip","enabled","elements","option","max","dMicro","font","size","weight","autoSkip","callback","val","ctx","some","abs","tick","buildMissingPhaseIIDataNotice","notice","fontStyle","buildSensorProfileNotificationBoard","allowPrint","packProfile","phaseIICompleted","hasPack","row1ASection","reportTitleSection","calibrationTitleSection","calibIDSection","calibIDLabelSection","calibIDValueSection","calibDateSection","calibDateLabelSection","calibDateValueSection","row1BSection","_firstTruthyProg","_progress","_done","_total","test","d","t","parseInt","_p1","_p2","_percent","round","_color","progressionSection","progressionLabelSection","progressionValueSection","_track","_fill","rigTitleSection","rigCalibIDSection","rigCalibIDLabelSection","rigCalibIDValueSection","rigCalibValueSection","rigCalibValueLabelSection","rigCalibValueValueSection","rigCalibDateSection","rigCalibDateLabelSection","rigICalibDateValueSection","rigIDSection","rigIDLabelSection","rigIDValueSection","rigNameSection","rigNameLabelSection","rigNameValueSection","rigIPSection","rigIPLabelSection","rigIPValueSection","row3ASection","typeSection","typeLabelSection","typeValueSection","unitSection","unitLabelSection","unitValueSection","row3BSection","sensorIDLabelSection","sensorIDValueSection","technicalTitleSection","row4ASection","sampleSizeSection","sampleSizeLabelSection","sampleSizeValueSection","speedSection","speedLabelSection","speedValueSection","delaySection","delayLabelSection","delayValueSection","row4BSection","limitSection","limitLabelSection","limitValueSection","row4CSection","packIDSection","packIDLabelSection","packIDValueSection","packNameSection","packNameLabelSection","packNameValueSection","packCompanySection","packCompanyLabelSection","packCompanyValueSection","row5Section","phaseITitleSection","lookupSection","lookupLabelSection","lookupDataSection","lookupArr","lookupRowValueSection","channelLabelSection","lookupData","lookupTranslatedSection","lookupTranslatedLabelSection","lookupTranslatedDataSection","lookupBodyStructure","row6Section","phaseIITitleSection","calibratedDataSection","calibratedDataLabelSection","calibratedDataDataSection","calibratedDataArray","calibratedDataRowValueSection","dataSection","currentDataSection","currentDataLabelSection","currentDataValueSection","slopeDataSection","slopeDataLabelSection","slopeDataValueSection","offsetDataSection","offsetDataLabelSection","offsetDataValueSection","memoSection","memoLabelSection","memoValueSection","row7Section","activityLogTitleSection","employee","activityObj","activityElement","padding","marginBottom","activityEmployeeElement","activityDateElement","activityMsgElement","popupContent","inlineStyles","styleTag","setAttribute","parentNode","removeChild","buildBatchSensorBoard","titleSection","masterDivSection","master1DivSection","subRow1Section","col1SensorObjSection","sensorIDLabel","tdsensorIDElement","classList","add","inputSensorIDElement","userInputtedSensorID","col2SensorObjSection","sensorNameLabel","tdsensorNameElement","inputSensorNameElement","userInputtedSensorName","packIDLabel","tdInput","select","maxWidth","defaultOption","innerText","packValidationCompletedProfileList","selectOption","selectedValue","target","selectedPackProfile","Number","col3SensorObjSection","trashIconComp","inputSensorIDElementElement","inputSensorNameElementElement","validationIDComponent","notificationCancelButton","notificationSaveButton","currCalibrationProcessData","showHelpNotificationBoard","Promise","resolve","rawCodeSubTitleComponent","subsection1Component","subRawCode1","subsubsection1Component","commandMode","subRawCode2","subsubsection2Component","modeSettingComponent","channelsSettingComponent","strokeSettingComponent","idSettingComponent","typeSettingComponent","descriptionSettingComponent","tableToROMSettingComponent","romToTableSettingComponent","exitSettingComponent","subRawCode3","subsubsection3Component","setValueComponent","easterEggTitleComponent","subsection2Component","getRigActivityComponent","getInternalVersionComponent","removeEventListener","enterKeyHandler","buildCalibrationV2IntermissionNotificationBoard","timer","xButtonComponent","timerWarningComponent1","interval","progressBarSection","progressBarFill","progressPercentage","min","timerBarSection","class","timerBarBar","timerBarValue","subtitle1","calibrationDataArr","timerWarningComponent2","timerWarningComponent3","readyButtonComponent","closePopupAndResolve","abortButtonComponent","backgroundColor","abortResolve","abort","buildCheckoutBoard","profile","sensorName","sensorId","buildInventoryUpdateBoard","titleText","isCheckout","jobIDLabel","tdJobIDElement","inputJobIDElement","userInputtedJobID","tdMemoElement","textareaElement","tdElement","anchorUpperTBComponent","anchorLowerTBComponent","requestBody","anchorDataValue","sensorNameElement","jobIDElement","memoElement","response","sendPATCHRequest","getSensorProfileList","endpoint","queryParams","url","getApiBaseUrl","queryString","URLSearchParams","fetch","method","headers","Authorization","localStorage","token","status","statusText","json","newData","convertKeysToCamelCase","Array","isArray","v","fromEntries","_","char","toUpperCase","sendPOSTRequest","body","sendDELETERequest","resetProfile","resetProfileForm","rigIPComponent","rigNameComponent","rigCategoryComponent","comp1","comp2","comp3","comp4","comp5","comp6","comp7","comp8","resetDataRigProfile","chatBox","stepperComponent","pointerEvents","pumpComponent","pressureCalibHotKeysSectionComponent","dataVer","resetDataCalibProfile","chart","update","sensorIDTBComponent","clearBatchSensorCalibrationData","getChart","tempLabel","dispLabel","currentIndex","maxDataPoints","shift","validateAllForms","failedState","neutralState","labelState","passedState","indent","failedObjects","permData","hasPermission","required","perm","idx","isForInventory","anchorComponent","getAttribute","sensorIDValue","includes","buildValidationPopupContent","scrollIntoView","behavior","block","sendV2BatchCommands1","initializeConnection","ip","readyState","WebSocket","CLOSED","webSocketDisconnect","resetLog","CONNECTING","onopen","updateStepperPressureControlPanel","onmessage","onerror","onclose","component","websocketReconnect","updateRigActivity","dashboardStatusObj","formSensorData","formRigData","calibrationObj","connectionObj","currentObj","statusObj","targetObj","activityLog","newMessage","direction","maxNumLines","join","scrollTop","scrollHeight","appendPhaseILog","appendPhaseIILog","stepperPanelComponent","pumpPanelComponent","pressureCalibHotKeysPanelComponent","typeOfLog","liveChatBox","pIChatBox","pIIChatBox","getSensorPhaseISchematics","websocket","checkpointDelay","checkpointPositions","checkpointSampleSize","checkpointCurrentTargetBuffer","maxLimit","minLimit","dPPC","softResetPhaseIModule","setRigUnit","emergencyCheckOrThrow","updateCalibrationStatusModule","setTargetModule","awaitReachAcensionStageResult","awaitUntilCheckPointPositionReachedAcensionStage","delayTimeModule","phaseISampleResult","phaseISampleModule","postPhaseProceduralModule","getSensorPhaseIISchematics","softResetPhaseIIModule","phaseIISampleModule","getV2CalibrationSchematics","softResetV2PhaseIModule","awaitUntilCheckPointPositionReachedAcensionV2Stage","sampleV2PhaseIModule","postP1Result","postPhaseCalibrationV2Module","popupResult","sendV2BatchCommands2","sampleV2PhaseIIModule","postP2Result","phase","rigResetCMD","sensorDescription","buildSensorDescription","specialPhaseILogText","getLookupBody","transformedLookupArrayPI","transformLookUpDataObj","phaseIResponse","buildAndGetDataFormat1","transformedLookupArrayPII","getSlopeAndOffset","dataValueArr","stashedCalibrationID","calibData","phaseIICalibratedDataArray","phaseIICalibratedCurrentArray","phaseIICalibratedSlopeArray","phaseIICalibratedOffsetArray","fallbackResponse","transformResponse1","transformLookUpV2","calibrationDate","isSamplingData","transformResponse2","requestData","requestArrData","buildAndGetDataFormat2","calibratedData","currentData","slopeArr","offsetArr","calibratedDataArr","result","linearRegression","roundToDecimalPlaces","calibrationDataData","checkPointPositions","jobID","sensorTypeNumber","transformedLookupArray","subArray","phaseType","calibProfileData","currentPointComponent","AWAIT_FLEXIBILITY","timeoutCounter","current","parseFloat","upperBufferTargetLimit","areNumbersEqual","Error","statusCode","quantity","unitID","checkpointPositionIndex","checkpointPositionArray","checkpointPositionValue","doneSamplingCount","doneCurrentSamplingCount","doneCalibrationDataSamplingCount","trimmedSensorData","updatedSampleArr","lookupValues","batchSensorPosition","calibratedDataValues","updatedCurrArr","finalValue","sampleValue","calibDataValues","calibDataSubArray","numberSeconds","chatBoxP1","chatBoxPII","hardResetModule","phaseISampleLookupData","phaseIISampleCalibrationDataValueData","phaseIISampleCurrentData","isPhaseISampling","isPhaseIISampling","isSamplingCurrentData","isSamplingCalibrationData","sampleDataDump","sampleCurrentDataDump","slopeData","offsetData","errCategory","DOMException","calibrationProfileData","channelBoard","strokeBoard","cmdArray","cmdArray1","sensorCalibrationData","j","lookupDataArray","cmdArray2","cmdValueArray","cmdValueString","transformedArray","channelID","dataKey","getRandomNumber","randomNumber","random","toFixed","decimalPlaces","roundedValue","isFinite","instrumentID","instrumentType","temperatureValue","displacementValues","displacementValue","finalArr","dataParts","part","sensorTypeCombination","temperatureRaw","isNaN","getDataSetColor","colors","year","getFullYear","month","String","getMonth","padStart","day","getDate","hours","getHours","minutes","getMinutes","getSeconds","milliseconds","getMilliseconds","num1","num2","epsilon","formatDateTimeFromInputField","dateTimeString","date","time","sumX","reduce","a","b","sumY","sumXY","sum","xi","sumX2","slope","offset","convertDBDateToTableDate","DBDate","INVENTORY_SENTINEL","calibrationRequestData","requestArr","permissionCodeArray","failedPermissions","helper","refAnchor","anchorNumber","result","toString","console","log","helper","currentDate","params","moment","format","formatNumber","params","parseFloat","toFixed","_default","_exports","default","helper","textLibrary","key","buildRedWarningNotificationBoard","context","profile_obj","set","analytics","scheduleOnce","masterPopupContent","document","getElementById","innerHTML","mainTitle","createElement","style","marginTop","fontSize","color","fontWeight","textContent","appendChild","defaultTabIndex","length","clippingDataSection","marginLeft","clippingDiscretionSection1","textLibrary","clippingDiscretionSection2","clippingBreakDownExandButton","alignSelf","textDecoration","cursor","clippingBreakdownSection","display","i","clippingEvent","clippingBreakdownRow2","toUpperCase","JSON","stringify","addEventListener","okButtonComponent","onclick","send","applyGraphScaling","zGraphScaling","chartDom","chartInstance","echarts","getInstanceByDom","x","y","z","graphScaling","setOption","xAxis","min","max","yAxis","xAxis3D","yAxis3D","zAxis3D","buildECharts3DBarForBluVibe","data","decorationParameters","init","seriesData","map","yValue","option","tooltip","backgroundColor","textStyle","formatter","params","value","grid3D","boxWidth","boxHeight","boxDepth","viewControl","projection","autoRotate","panSensitivity","rotateSensitivity","zoomSensitivity","damping","alpha","beta","minAlpha","maxAlpha","minBeta","maxBeta","center","distance","minDistance","maxDistance","panMouseButton","rotateMouseButton","zoomMouseButton","type","name","xAxisLabel","yAxisLabel","zAxisLabel","visualMap","Math","inRange","dataZoom","start","end","series","shading","barSize","window","resize","buildECharts2DBarForBluVibe","grid","containLabel","legend","axisTick","alignWithLabel","xDataLabel","barWidth","buildEChartsXFocusYFocusZFocus2DLineForBluVibe","lineData","d","clippingPoints","filter","hasOwnProperty","isXClipping","isYClipping","isZClipping","coord","symbol","symbolSize","itemStyle","xVal","yVal","label","Array","isArray","axisLabel","sampling","smooth","lineStyle","width","markPoint","symbolKeepAspect","buildEChartsXFocusYFocusZFocus3DLineForBluVibe","surfaceData","thickness","yOffset","row","push","flatData","flat","zValues","point","zMin","zMax","show","dimension","dataName","wireframe","buildEChartsXYZFocus3DLineForBluVibe","dataObj","xData","yData","zData","xSeriesData","p","ySeriesData","zSeriesData","getClippingPoints","dataArr","xClippingPoints","yClippingPoints","zClippingPoints","orient","left","top","yDataLabel","zDataLabel","time","axisIdx","accel","seriesName","buildEChartsBluVibeSimulation","pathData","scrubber","console","warn","index","playing","animationFrame","updatePosition","frameIndex","e","parseInt","target","animate","startTime","playbackSpeed","get","isInfPlayback","currentTime","performance","now","elapsedSeconds","frameTime","floor","requestAnimationFrame","playButton","cancelAnimationFrame","sendGETRequest","endpoint","queryParams","Promise","resolve","reject","url","getApiBaseUrl","queryString","URLSearchParams","toString","response","fetch","method","headers","Authorization","localStorage","token","status","showPopup","statusText","Error","ok","responseData","json","newData","convertKeysToCamelCase","error","obj","v","Object","fromEntries","entries","key","replace","_","char","sendPOSTRequest","body","sendPOSTRequest2","sendPATCHRequest","sendDELETERequest","get3DAnimationData","pitchRollYawData","log","forEach","pitchRollYawDataObj","pitch","roll","yaw","message","stack","parseDataForEChartsXYZFocus3DLine","xAxisDataKey","yAxisDataKey","dataCollection","parseDataForEChartsXFocusYFocusZFocus2DLine","axisFocus","result","parseDataForEChartsXFocusYFocusZFocus3DLine","parseDataForEChartsXFocusYFocusZFocus2DBar","parseDataForEChartsXFocusYFocusZFocus3DBar","getGraphUnit","category","buildFrequencyEventsOverviewBoard","context","profile_obj","set","responseData","sendGETRequest","profileID","id","responseObj","analytics","scheduleOnce","masterPopupContent","document","getElementById","innerHTML","mainTitle","createElement","style","marginTop","fontSize","textDecoration","fontWeight","textContent","appendChild","row1","marginLeft","row2","display","flexDirection","justifyContent","sensorIDSection","timestampSection","row3","row4","rangeSection","durationSection","sampleSection","triggerSection","table","thead","borderBottom","trColumns","row1HeaderObject","key","label","axisArray","forEach","columnObject","index","thColumn","border","borderWidth","borderColor","textAlign","tbody","i","length","trRows","tdRowData","row5","defaultTabIndex","hasOwnProperty","clippingDataSection","okButtonComponent","onclick","send","buildDeleteWarningBoard","warning1Section","alignSelf","warning2Section","yesButtonComponent","marginRight","sendDELETERequest","window","location","reload","cancelButtonComponent","buildFrequencyEventsEditBoard","data","alignItems","sampleElement","classList","add","inputSampleElement","setAttribute","value","sample","rangeElement","inputRangeElement","range","triggerElement","inputTriggerElement","trigger","saveButtonComponent","tbIDs","objBody","split","parseInt","sendPATCHRequest","err","console","log","message","endpoint","queryParams","url","getApiBaseUrl","queryString","URLSearchParams","toString","response","fetch","method","headers","Authorization","localStorage","token","status","showPopup","statusText","json","newData","convertKeysToCamelCase","error","obj","Array","isArray","map","v","Object","fromEntries","entries","replace","_","char","toUpperCase","sendPOSTRequest","body","JSON","stringify","sendPOSTRequest2","freqEventsValidateForRedWarning","params","profileObj","hasOwnProperty","length","_default","_exports","default","helper","getArrayElement","params","undefined","index","_default","_exports","default","helper","getArrayValue","array","idx","_default","_exports","default","helper","STAGE_KEYS","TOTAL","length","getPacksValidationProgression","packProfile","completed","progression","key","pct","Math","round","htmlSafe","_default","_exports","default","helper","getPacksValidationProgression","packProfile","packData","phase1VerdictString","phase2VerdictString","isAllDataProvided1","length","isAllDataProvided","_default","_exports","default","helper","ifEmptyStringOrNull","params","undefined","_default","_exports","default","helper","ifMeetSubModelRequirement","params","instr","actionType","subModelA","subModelB","includes","_default","_exports","default","helper","isGreaterThan","params","_default","_exports","default","helper","helper","array","value","Array","isArray","includes","isInstrumentAnchorsSet","instrumentAnchors","anchors","content","instrumentAnchorsDistances","map","obj","get","indexOf","length","_default","_exports","default","helper","isStrokeLengthRequiredAndSet","instrument","type","get","stroke","_default","_exports","default","helper","isAlertChecked","params","alert","batchSelectedAlertsID","includes","_default","_exports","default","helper","logger","obj","_default","_exports","default","helper","makeTimestampGlobalFormatAwareBluvibe","params","timestamp","globalDatetimeFormat","standardizedFormat","parsed","moment","convertedTimestamp","format","_default","_exports","default","helper","sendGETRequest","endpoint","url","getApiBaseUrl","response","fetch","method","headers","Authorization","localStorage","token","responseData","json","error","console","sendPOSTRequest","data","body","JSON","stringify","sendPATCHRequest","sendDELETERequest","COLOR_PALETTE","COLORS","vpBlue","orange2","green2","red1","purple7","teal6","pink6","yellow12","indigo6","cyan4","beige7","blue22","orange21","green14","purple17","red15","refreshMainChartData","context","params","URLSearchParams","set","get","company","endpoint","toString","response","sendGETRequest","data","Array","isArray","labels","datasets","meta","updateChart","renderChart","container","document","getElementById","console","error","innerHTML","ctx","getContext","chart","Chart","type","options","responsive","maintainAspectRatio","scales","x","title","display","text","stacked","barPercentage","categoryPercentage","maxBarThickness","y","beginAtZero","plugins","legend","position","usePointStyle","font","size","family","weight","color","boxWidth","boxHeight","padding","tooltip","enabled","elements","point","radius","rawLabels","map","s","formatDateLabel","applyColors","stack","xAxisLabel","yAxisLabel","update","yScaleMax","getYAxisScaleMax","yAxisComp","value","min","Number","parseInt","err","iso","format","m","match","replace","length","ds","colors","_","i","Object","assign","backgroundColor","borderColor","borderWidth","max","disableEnableBarChartLengend","isShowLegend","assistiveToolTipLibrary","key","connectionStatusLibrary","code","statusObject","key","value","color","packStatusLibrary","generalStatusLibrary","incomingMessageLibrary","context","rigProfile","get","hasOwnProperty","push","getCurrentDateTime","parsedData","includes","parseMessage2","parseMessage1","updateAnchorBoardLiveViewData","updateAnchorChartLiveViewData","handleSampleValidityPhaseIModule","handleSampleValidityPhaseIIModule","outgoingMessageLibrary","cmd","type","msg","console","log","calibProfile","data","checkpointSpeed","customStatusObj2","set","sendBatchCommands","ws","appendLiveLog","showPopup","send","generalPermissionLibrary","messageArray","mode","seconds","popup","document","getElementById","popupBody","existingStyles","querySelectorAll","forEach","styleElement","remove","animationName","replace","styleSheet","createElement","id","innerHTML","head","appendChild","style","animation","offsetHeight","borderColor","visibility","opacity","message","subtitleSection","fontSize","textAlign","textContent","overflowWrap","fadeOutTimeout","closeButton","cursor","textDecoration","onclick","clearTimeout","setTimeout","fadeOut","setInterval","clearInterval","buildRigActivityNotificationBoard","responseData","sendGETRequest","scheduleOnce","masterPopupContent","calibTableTitle","marginTop","fontWeight","table","thead","borderBottom","trColumns","row1HeaderObject","label","columnObject","index","thColumn","border","borderWidth","tbody","i","length","rigID","activityJSON","trRows","tdRowData","refreshButtonComponent","display","marginRight","okButtonComponent","buildRigNotificationNotificationBoard","popupContentSectionComponent","Object","entries","rigObject","messagesArray","rigLabelSection","paddingLeft","pressTimer","addEventListener","event","messages","rigMessage","reflashPopup","Promise","resolve","xButtonComponent","mainComponent","alignSelf","reflashWarningComponent1","readyButtonComponent","closePopupAndResolve","removeEventListener","enterKeyHandler","abortButtonComponent","backgroundColor","abortResolve","abort","error","PHASE_I_LOAD_UNLOAD_TIMER_SECONDS","PHASE_II_LOAD_UNLOAD_TIMER_SECONDS","unloadLoadPopup","phaseText","timerSeconds","timer","timerWarningComponent1","interval","progressBarSection","progressBarFill","_activeTimerCleanup","timerMinutes","Math","floor","max","timerSecondsRemainder","String","padStart","progressPercentage","min","width","timerBarSection","class","timerBarBar","className","timerBarValue","timerWarningComponent2","timerWarningComponent3","packValidationConclusion","packID","title","packIDComponent","row1A","flexDirection","alignItems","justifyContent","dataValueUnload","toString","dataValidityUnload","row1B","dataValueLoad","dataValidityLoad","conclusionValidity","mathBreakdownSection","getPhaseIValidationMath","row","lineComp","ok","e","row2A","dataValueUnload1","dataValidityUnload1","row2B","dataValueLoad1","dataValidityLoad1","row2C","dataValueLoad2","dataValidityLoad2","row2D","dataValueUnload2","dataValidityUnload2","getPhaseIIValidationMath","row2E","overruleUsernameText","tdUsernameElement","classList","add","inputUsernameElement","setAttribute","padding","overrulePasswordText","tdPassowrdElement","inputPasswordElement","row2F","phase2SectionLabel","td","phase2SectionValue","minHeight","target","err","overrruleButtonComponent","overruleResult","overrulePhaseIIConclusion","packProfileDetailBoard","allowPrint","packProfile","packType","packData","exportMode","targetContainer","reportTitleSection","finalVerdictSection","phase1VerdictString","phase2VerdictString","isAllDataProvided1","isAllDataProvided","finalVerdict1","finalVerdict2","p1VerdictSection","verdictBufferSection","p2VerdictSection","overruledWarningSection","quickDetailTitleSection","row1ASection","marginLeft","validationIDSection","validationIDLabelSection","validationIDValueSection","packIDSection","packIDLabelSection","packIDValueSection","companySection","companyLabelSection","companyValueSection","row1BSection","phase1EmployeeSection","phase1EmployeeLabelSection","phase1EmployeeValueSection","phase1ValidationDateSection","phase1ValidationDateLabelSection","phase1ValidationDateValueSection","row1CSection","phase2EmployeeSection","phase2EmployeeLabelSection","phase2EmployeeValueSection","phase2ValidationDateSection","phase2ValidationDateLabelSection","phase2ValidationDateValueSection","row2ASection","rigTitleSection","rigIDSection","rigIDLabelSection","rigIDValueSection","rigNameSection","rigNameLabelSection","rigNameValueSection","rigIPSection","rigIPLabelSection","rigIPValueSection","row3ASection","packDetailTitleSection","append","packNameSection","packNameLabelSection","packNameValueSection","overruleSection","overruleLabelSection","overruleValueSection","progressionSection","progressionLabelSection","progressionValueSection","progression","isDone","p1Progression","filter","p2Progression","row3BSection","activeCoilsCountSection","activeCoilsCountLabelSection","activeCoilsCountValueSection","totalCoilsCountSection","totalCoilsCountLabelSection","totalCoilsCountValueSection","activeCoilsPositionsSection","activeCoilsPositionsLabelSection","activeCoilsPositionsValueSection","unfilledCoilsPositionsSection","unfilledCoilsPositionsLabelSection","unfilledCoilsPositionsValueSection","row3CSection","typeIDSection","typeIDLabelSection","typeIDValueSection","typeSection","typeLabelSection","typeValueSection","row3DSection","limitSection","limitLabelSection","limitValueSection","acceptedLoadVarianceSection","acceptedLoadVarianceLabelSection","acceptedLoadVarianceValueSection","acceptedUnloadVarianceSection","acceptedUnloadVarianceLabelSection","acceptedUnloadVarianceValueSection","row3ESection","phase1LoadSection","phase1LoadLabelSection","phase1LoadValueSection","phase1UnloadSection","phase1UnloadLabelSection","phase1UnloadValueSection","phase2Load2Section","phase2Load2LabelSection","phase2Load2ValueSection","phase2Unload2Section","phase2Unload2LabelSection","phase2Unload2ValueSection","watermark","cssText","top","left","position","phaseITitleSection","row4ASection","row4BSection","row4B2Section","row4CSection","row4DSection","phase1UnloadDataSection","phase1UnloadDataLabelSection","phase1UnloadDataValueSection","phase1LoadDataSection","phase1LoadDataLabelSection","phase1LoadDataValueSection","phase1MathSection","phase1MathLabelSection","whiteSpace","phase1MathValueSection","phase1MathRows","buildPhaseIMathRows","r","p1ValidityString","phase1LoadValiditySection","phase1LoadValidityLabelSection","phase1LoadValidityValueSection","phase1FinalValiditySection","phase1FinalValidityLabelSection","phase1FinalValidityValueSection","phaseIITitleSection","row5ASection","row5BSection","row5CSection","row5DSection","row5D2Section","row5ESection","row5FSection","phase2UnloadData1Section","phase2UnloadData1LabelSection","phase2UnloadData1ValueSection","phase2LoadData1Section","phase2LoadData1LabelSection","phase2LoadData1ValueSection","phase2LoadData2Section","phase2LoadData2LabelSection","phase2LoadData2ValueSection","phase2UnloadData2Section","phase2UnloadData2LabelSection","phase2UnloadData2ValueSection","phase2MathSection","phase2MathLabelSection","phase2MathValueSection","phase2MathRows","buildPhaseIIMathRows","phase2ValidityString","phase2ValiditySection","phase2ValidityLabelSection","phase2ValidityValueSection","phase2FinalValiditySection","phase2FinalValidityLabelSection","phase2FinalValidityValueSection","phase1MemoLabelSection","phase1MemoValueSection","phase2MemoLabelSection","phase2MemoValueSection","printButtonComponent","popupContent","overflowX","overflowY","inlineStyles","printJS","printable","scanStyles","buildBatchProfileSheet","isVisiblePopup","DETAIL_ROW_IDS","batchCBData","validationIds","keys","map","k","profiles","validationID","d","exportAll","directoryHandle","tryPickExportDirectory","exported","container","el","querySelector","filename","opt","margin","image","quality","html2canvas","scale","useCORS","allowTaint","jsPDF","unit","format","orientation","pagebreak","avoid","pdfBlob","html2pdf","from","outputPdf","writeBlobToDirectory","res","savePdfWithPicker","saved","clearBatchCBData","assign","paddingRight","fontFamily","borderTop","paddingTop","exportBtn","okBtn","showHelpNotificationBoard","rawCodeSubTitleComponent","subsection1Component","subRawCode1","subsubsection1Component","commandMode","subRawCode2","subsubsection2Component","modeSettingComponent","channelsSettingComponent","strokeSettingComponent","idSettingComponent","typeSettingComponent","descriptionSettingComponent","tableToROMSettingComponent","romToTableSettingComponent","exitSettingComponent","subRawCode3","subsubsection3Component","setValueComponent","showRequestErrorPopup","url","response","rawBody","clone","json","lines","missing","Array","isArray","missing_permissions","p","legacyMessage","status","statusText","endpoint","queryParams","getApiBaseUrl","queryString","URLSearchParams","fetch","method","headers","Authorization","localStorage","token","newData","convertKeysToCamelCase","obj","v","fromEntries","_","char","toUpperCase","sendPOSTRequest","body","JSON","stringify","sendPOSTRequest2","sendPATCHRequest","returnDetails","errBody","detail","sendDELETERequest","resetProfile","resetProfileForm","rigIPComponent","rigNameComponent","rigCategoryComponent","comp1","comp2","comp3","comp4","comp5","comp6","comp7","comp8","comp9","resetDataRigProfile","chatBox","stepperComponent","pointerEvents","pumpComponent","resetDataSelectedPackTypeProfile","destroyAndClearAnchorLiveView","resetDataCompletedPackTypeProfile","chart","Chart","getChart","datasets","tempLabel","dispLabel","currentIndex","labels","maxDataPoints","shift","update","validateAllForms","failedState","neutralState","labelState","passedState","indent","failedObjects","phase","requiredFlag","permissionLabel","permData","hasPermission","required","perm","idx","buildValidationPopupContent","element","scrollIntoView","behavior","block","initializeConnection","ip","readyState","WebSocket","CLOSED","warn","webSocketDisconnect","resetLog","CONNECTING","onopen","onmessage","trim","onerror","onclose","window","component","close","websocketReconnect","updateRigActivity","dashboardStatusObj","formSensorData","formRigData","calibrationObj","connectionObj","currentObj","statusObj","targetObj","latestDateTime","userProfile","authenticated","activityLog","newMessage","direction","split","maxNumLines","slice","join","scrollTop","scrollHeight","logPhaseLiveError","step","reason","ts","Date","toLocaleTimeString","buildValidationFailedBoard","failInfo","_lastValidationFailReason","titleSection","stepSection","Boolean","reasonSection","maxWidth","noteSection","updateStepperPressureControlPanel","stepperPanelComponent","pumpPanelComponent","typeOfLog","liveChatBox","getPacksValidationPhaseISchematics","packTypeProfile","websocket","phase1Steps","checkpointDelay","softResetPhaseIModule","updatePacksValidationStatusModule","stepIndexValue","stepStartMs","now","emergencyCheckOrThrow","popupResult","delayTimeModule","phaseISampleResultUnload","phaseISampleModule","isCoilsWithinRange","verifyAcceptedRange","tickProgressionBreadcrumb","p1StepStopwatches","round","postPhaseProceduralModule","stage","stepLabel","stepUnloadOrLoad","name","getPacksValidationPhaseIISchematics","phase2Steps","softResetPhaseIIModule","stepIndexValueID","phaseIISampleResultUnload","phaseIISampleModule","manufacturedPackTypeData","channels","initializeAndCreateAnchorLiveView","reflashResult","p2StepStopwatches","selectedPackType","manufacturedPackType","phase1UnloadDataArray","phase1LoadDataArray","phase2UnloadData1Array","phase2LoadData1Array","phase2UnloadData2Array","phase2LoadData2Array","activeCoilsCount","totalCoilsCount","referenceUnfilledCoilsPositions","generalCoilsPositions","referenceUnfilledCoilsIndices","generalCoilsIndices","phase1UnloadMaxRange","phase1UnloadMinRange","phase1LoadMaxRange","phase1LoadMinRange","phase2LoadMaxRange2","phase2LoadMinRange2","phase2UnloadMaxRange2","phase2UnloadMinRange2","indices1","isValid1","failed1","coilIndex","reading","reason1","indices2","isValid2","failed2","reason2","failed3","isOutOfRange3","reason3","failed4","isOutOfRange4","reason4","isValid5","failed5","reason5","isValid6","failed6","reason6","phaseLabel","startsWith","checkFinalValidity","saveAndSendPhaseIData","newPackID","response2","saveAndPatchPhaseIIData","newPackID2","DATA_KEY_TO_PROGRESSION_STAGE","phase1UnloadData","phase1LoadData","phase2UnloadData1","phase2LoadData1","phase2LoadData2","phase2UnloadData2","dataKey","stageKey","isPhase1","createPhaseIPackProfile","selectedRigProfile","completedPackProfile","isRepairing","requestData","buildAndGetDataFormat5","buildAndGetDataFormat1","phaseISessionPackProfile","buildAndGetDataFormat4","patchResult","authoritativePackID","pack_id","buildAndGetDataFormat3","requestData2","buildAndGetDataFormat2","username","password","packProfileData","credentials","btoa","response1","response1Data","statusCode","stepENV","timeoutCounter","Error","sensorData","trimmedSensorData","currentStage","updatedSampleArr","updatePackProgressionBar","unloadArr","loadArr","rows","round2","n","pushStep","arr","rangeMin","rangeMax","variance","spread","buildArrayForValidation","unload1Arr","load1Arr","load2Arr","unload2Arr","pushRangeAndSpread","unloadCONST","loadCONST","minValue1","maxValue1","spread1","check1","result","minValue2","maxValue2","spread2","check2","result2","minValue3","maxValue3","spread3","check3","result3","minValue4","maxValue4","spread4","check4","result4","minValue6","maxValue6","spread6","check6","result6","minValue5","maxValue5","spread5","check5","result5","numberSeconds","resetPackProgressionBar","unload","load","final","unload1","load1","load2","unload2","hardResetModule","phase1LoadDataSampleData","phase1UnloadDataSampleData","phase2LoadData1SampleData","phase2UnloadData1SampleData","phase2UnloadData2SampleData","phase2LoadData2SampleData","phase1ValidityData","phase2ValidityData","isPhaseISampling","isPhaseIISampling","errCategory","DOMException","cmdValueArray","cmdValueString","requireTrim","sampledArray","finalArray","indexValue","numberOfSections","buildAnchorLiveViews","datasetArr","getDataSetColor","fill","tension","progressValueText","maxProgress","currentProgress","getRandomNumber","randomNumber","random","toFixed","phase1TestMessage","roundToDecimalPlaces","decimalPlaces","pow","roundedValue","temperatureValue","parseFloat","displacementValues","displacementValue","finalArr","colors","year","getFullYear","month","getMonth","day","getDate","hours","getHours","minutes","getMinutes","getSeconds","milliseconds","getMilliseconds","areNumbersEqual","num1","num2","epsilon","abs","formatDateTimeFromInputField","dateTimeString","date","time","convertDBDateToTableDate","DBDate","selectedPackData","packsValidationData","Number","parseInt","p2StopwatchValues","p1StopwatchValues","source","parseint","params","parseInt","_default","_exports","default","helper","pluralize","dispRadioGroupIsChecked","params","selectedRadioValue","refValue","_default","_exports","default","helper","range","values","start","count","ret","i","push","_default","_exports","default","helper","refreshMainChartData","context","endpoint","console","log","get","Object","entries","forEach","key","value","index","slice","requestData","sendGETRequest","set","updateChart","resetDataAndSearch","dateDataSelectComp","document","getElementById","startRangeDateComponent","endRangeDateComponent","employeeGroupDataSelectComp","mainDataComp","labels","currentMainObj","currentKey","y","x","is_distinct","secondary","date_min","date_max","renderChart","chartContainer","error","innerHTML","ctx","getContext","chart","Chart","type","data","datasets","options","responsive","maintainAspectRatio","scales","title","display","text","barPercentage","categoryPercentage","maxBarThickness","beginAtZero","plugins","legend","position","usePointStyle","font","size","family","weight","color","boxWidth","boxHeight","padding","tooltip","enabled","elements","point","radius","buildChartDataSet","dataArray","xParam","colorPalette","xAxisLabel","dataObj","map","entry","push","label","count","backgroundColor","_","length","borderColor","borderWidth","Set","date","sort","groupedData","groupValue","keys","employee","Math","round","rate","max","sensorID","abandonCount","distinctEmployeeCount","recalibrationCount","calibrationCount","warn","getYAxisScaleMax","chartInstance","yAxisScale","update","yScaleMax","yAxisMaxComponent","min","Number","parseInt","manageCustomUIDateData","mainDataObj","dateDataObj","employeeDataObj","isDistinctBooleanComp","startDateRng","endDateRng","dateDataSectionComp","style","dateRangeSection","isDistinctCheckbox","target","checked","disableEnableBarChartLengend","isShowLegend","singularize","sum","params","reduce","a","b","_default","_exports","default","helper","validateDExto","params","key","value","displacementObj","data","tempData","slice","refInstrument","masterInstrument","masterDataArray","channels","currentInstrIndex","i","instr_position_index","instrumenPositionObj","id","instrumentID","Number","subExtoID","getChannelsFromId","slaveDataArray","push","length","_default","_exports","default","helper","validateInitialChannels","params","channelString","referenceAnchorObj","console","log","_default","_exports","default","helper","name","version","config","APP","_default","_exports","default","initialize","initializerFactory","_default","_exports","default","name","initialize","application","registerOptionsForType","singleton","name","before","initialize","application","arguments","config","torii","disableRedirectInitializer","deferReadiness","RedirectHandler","handle","window","catch","advanceReadiness","name","after","initialize","application","arguments","configuration","getConfiguration","sessionServiceName","bootstrapSession","initializer","name","initialize","application","arguments","configure","config","torii","bootstrapTorii","_default","_exports","default","initialize","Config","load","ENV","registerLibrary","_default","_exports","default","name","name","initialize","_default","_exports","default","name","initialize","applicationInstance","configuration","getConfiguration","sessionServiceName","_router","getRouterInstance","router","lookup","setupRoutes","routerLib","getRouterLib","authenticatedRoutes","hasAuthenticatedRoutes","Ember","isEmpty","bootstrapRouting","off","on","_default","_exports","default","name","initialize","applicationInstance","configuration","getConfiguration","key","providers","hasOwnProperty","lookup","DS","Model","extend","values","attr","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","AlertEventModel","_exports","default","_dec","belongsTo","async","inverse","_dec2","attr","_dec3","_dec4","_dec5","_class","Model","constructor","args","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","prototype","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","AlertProfileModel","_exports","default","_dec","attr","_dec2","_dec3","_dec4","_dec5","_dec6","_dec7","_dec8","_dec9","_dec0","_class","Model","constructor","args","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","_descriptor9","_descriptor0","prototype","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","AlertModel","_exports","default","_dec","attr","_dec2","_dec3","_dec4","_dec5","_dec6","_dec7","_dec8","_dec9","_dec0","_dec1","_dec10","_dec11","_dec12","_dec13","_dec14","_dec15","_dec16","_dec17","_dec18","_dec19","_dec20","_class","Model","constructor","args","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","_descriptor9","_descriptor0","_descriptor1","_descriptor10","_descriptor11","_descriptor12","_descriptor13","_descriptor14","_descriptor15","_descriptor16","_descriptor17","_descriptor18","_descriptor19","_descriptor20","prototype","DS","Model","extend","number","attr","distance","instrument","belongsTo","async","inverse","DS","Model","extend","values","attr","DS","Model","extend","values","attr","DS","Model","extend","values","attr","DS","Model","extend","timestamp","attr","defaultValue","location","east","north","depth","comments","isVisible","delay","level","belongsTo","async","inverse","project","stope","tonnes","size","blastType","DS","Model","extend","title","attr","blastEvent","hasMany","async","inverse","BluVibeV2DataModel2","_exports","default","_dec","attr","_dec2","_dec3","_dec4","_dec5","belongsTo","async","inverse","_class","Model","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","BluVibev2ProfileModel","_exports","default","_dec","attr","_dec2","_dec3","_dec4","_dec5","_dec6","_dec7","_dec8","_dec9","_dec0","_dec1","_dec10","belongsTo","async","inverse","_class","Model","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","_descriptor9","_descriptor0","_descriptor1","_descriptor10","_applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","BluVibeV2DataModel","_exports","default","_dec","attr","_dec2","_dec3","_dec4","belongsTo","async","inverse","_class","Model","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_descriptor4","_applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","CalibrationCalibrationProfile","_exports","default","_dec","attr","_dec2","_dec3","_dec4","_dec5","_dec6","_dec7","_dec8","_dec9","_dec0","_dec1","_dec10","_class","Model","constructor","args","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","_descriptor9","_descriptor0","_descriptor1","_descriptor10","prototype","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","CalibrationInstrumentDataModel","_exports","default","_dec","belongsTo","async","inverse","_dec2","attr","_class","Model","constructor","args","_descriptor","_descriptor2","prototype","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","CalibrationInstrumentLookupModel","_exports","default","_dec","belongsTo","async","inverse","_dec2","attr","_class","Model","constructor","args","_descriptor","_descriptor2","prototype","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","CalibrationInstrumentProfileModel","_exports","default","_dec","attr","_dec2","_dec3","_dec4","_dec5","_dec6","_dec7","_dec8","_dec9","_dec0","_dec1","_dec10","_dec11","_dec12","_dec13","_dec14","_dec15","_class","Model","constructor","args","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","_descriptor9","_descriptor0","_descriptor1","_descriptor10","_descriptor11","_descriptor12","_descriptor13","_descriptor14","_descriptor15","prototype","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","CalibrationTypeModel","_exports","default","_dec","attr","_dec2","_dec3","_class","Model","constructor","args","_descriptor","_descriptor2","_descriptor3","prototype","DS","Model","extend","instrument","attr","hasTemp","units","temporalDisplacementName","temporalVelocityName","temporalAccelerationName","temporalStrainName","temporalStrainRateName","temporalLoadName","spatialDisplacementName","spatialVelocityName","spatialAccelerationName","spatialStrainName","spatialStrainRateName","spatialLoadName","DS","Model","extend","values","attr","DS","Model","extend","values","attr","DS","Model","extend","values","attr","DS","Model","extend","values","attr","DS","Model","extend","values","attr","DS","Model","extend","frequency","attr","values","DS","Model","extend","frequency","attr","values","DS","Model","extend","parentGateway","belongsTo","async","inverse","childGateway","isCurrent","attr","DS","Model","extend","intervalValue","attr","intervalName","intervalGroupName","DS","Model","extend","active","attr","inactive","total","DS","Model","extend","values","attr","DS","Model","extend","title","attr","DS","Model","extend","values","attr","DS","Model","extend","parentGateway","belongsTo","inverse","async","children","hasMany","name","attr","gatewayType","project","location","depth","level","installDate","installedBy","purpose","notes","gatewayTypeID","active","gatewayReadInterval","gatewayUploadInterval","gatewayMeshCycleInterval","gatewayTransmissionPowerInterval","currentParent","targetUrl","lteBand","uploadStatus","apn","parentGatewayId","meshID","hasChildren","childrenDetails","DS","Model","extend","title","attr","DS","Model","extend","active","attr","inactive","total","DS","Model","extend","title","attr","base_unit","vendor","belongsTo","async","inverse","DS","Model","extend","channelsNum","attr","subModel","portsNum","name","zeroTimestamp","location","east","north","depth","azimuth","dip","project","level","borehole","installDate","installedBy","purpose","notes","anchorCount","anchors","hasMany","async","inverse","vwproperty","headAt","belongsTo","instrumentType","instrumentTypeID","instrumentStiffness","instrumentLength","strokeLength","baseLength","headExclusionLength","gaugeLength","referenceAnchor","bulbed","plated","stacked","active","elasticLimitPct","plasticLimitPct","ultimateLimitPct","elasticLimitFce","plasticLimitFce","ultimateLimitFce","youngsModulus","crossSectionalArea","boltDiameter","selectedAnchor","calculatedElasticLimitForce","computed","elf","axialStiffness","toFixed","console","log","vendor","undefined","ym","stiffness","instrumentPosition1","instrumentPosition2","instrumentPosition3","instrumentPosition4","instrumentPosition5","DS","Model","extend","isValidKey","attr","startDate","endDate","numInst","softwareVersion","companyName","modules","DS","Model","extend","isValid","attr","withinLimit","companyName","modules","DS","Model","extend","values","attr","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","LogViewerModel","_exports","default","_dec","attr","_dec2","belongsTo","async","inverse","_dec3","_dec4","_dec5","_class","Model","constructor","args","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","prototype","DS","Model","extend","name","attr","type","value","DS","Model","extend","title","attr","symbol","unit","_default","_exports","default","DS","Model","extend","providerName","attr","apiKey","clientId","clientSecret","authorizationBaseUrl","tokenUrl","redirectUri","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","ValidationPacksProfileModel","_exports","default","_dec","attr","_dec2","_dec3","_dec4","_dec5","_dec6","_dec7","_dec8","_dec9","_dec0","_dec1","_dec10","_dec11","_dec12","_dec13","_dec14","_dec15","_dec16","_dec17","_class","Model","constructor","args","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","_descriptor9","_descriptor0","_descriptor1","_descriptor10","_descriptor11","_descriptor12","_descriptor13","_descriptor14","_descriptor15","_descriptor16","_descriptor17","prototype","DS","Model","extend","title","attr","isRequired","defaultValue","value","valueType","DS","Model","extend","values","attr","DS","Model","extend","values","attr","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","CalibrationRigModel","_exports","default","_dec","attr","_dec2","_dec3","_dec4","_dec5","_dec6","_dec7","_dec8","_dec9","_dec0","_dec1","_class","Model","constructor","args","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","_descriptor9","_descriptor0","_descriptor1","prototype","DS","Model","extend","values","attr","DS","Model","extend","timestamp","attr","defaultValue","location","east","north","depth","comments","isVisible","momentMagnitude","seismicMoment","sourceRadius","peakParticleVelocity","peakParticleAcceleration","energy","size","seismicType","belongsTo","async","inverse","DS","Model","extend","title","attr","seismicEvent","hasMany","async","inverse","DS","Model","extend","values","attr","DS","Model","extend","values","attr","_default","_exports","default","DS","Model","extend","values","attr","DS","Model","extend","values","attr","DS","Model","extend","values","attr","DS","Model","extend","values","attr","DS","Model","extend","values","attr","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","ValidationPacksProfileModel","_exports","default","_dec","attr","_dec2","_dec3","_dec4","_dec5","_dec6","_dec7","_dec8","_dec9","_dec0","_class","Model","constructor","args","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","_descriptor9","_descriptor0","prototype","DS","Model","extend","values","attr","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","VendorModel","_exports","default","_dec","attr","_dec2","_dec3","_dec4","_dec5","_class","Model","constructor","args","_descriptor","_descriptor2","_descriptor3","_descriptor4","_descriptor5","prototype","DS","Model","extend","timestamp","attr","defaultValue","instrument","ch1","trigger01","frequency01","amplitude01","ppv01","ppa01","duration01","ch2","trigger02","frequency02","amplitude02","ppv02","ppa02","duration02","ch3","trigger03","frequency03","amplitude03","ppv03","ppa03","duration03","ch4","trigger04","frequency04","amplitude04","ppv04","ppa04","duration04","DS","Model","extend","values","attr","DS","Model","extend","modelName","attr","vwproperty","hasMany","async","inverse","vwvendor","belongsTo","DS","Model","extend","port","attr","tempChan","serial","calcCoef1","calcCoef2","calcCoef3","calcCoef4","calcCoef5","calcCoef6","calcCoef7","calcCoef8","instrument","belongsTo","async","inverse","vwmodel","vendor","tracked","modelTypes","DS","Model","extend","vendorName","attr","vwmodel","hasMany","async","inverse","Router","EmberRouter","constructor","args","_defineProperty","config","locationType","rootURL","_exports","default","map","route","path","AuthenticatedRoute","_exports","default","_class","Route","constructor","args","_initializerDefineProperty","_descriptor","beforeModel","transition","session","requireAuthentication","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","AlertsRoute","_exports","default","_class","Route","extend","queryParams","page","refreshModel","page_size","ordering","search","instrumentId","startCreationDate","endCreationDate","startTriggerDate","endTriggerDate","level","actions","refresh","afterModel","resolvedModel","transition","alerts","pageSize","query","alertsMeta","meta","alertsController","controllerFor","session","store","refreshLicence","send","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","requireAuthentication","model","params","_this","Promise","resolve","reject","alertsArr","globalDatetimeFormatProjectSetting","then","settings","find","setting","title","globalDatetimeFormat","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","ApplicationRoute","_exports","default","_class","Route","constructor","args","_initializerDefineProperty","_descriptor","beforeModel","session","setup","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","BlastEventRoute","_exports","default","_class","Route","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","transition","session","requireAuthentication","model","params","_this","Promise","resolve","reject","blast","store","findAll","then","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","BlastsRoute","_exports","default","_class","Route","extend","queryParams","page","refreshModel","page_size","ordering","search","model","params","hash","blastEvents","store","query","blastTypes","findAll","levelLookupList","name","projectLookupList","afterModel","resolvedModel","pageSize","eventsMeta","meta","blastEventsController","controllerFor","send","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","transition","session","requireAuthentication","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","ContactUsRoute","_exports","default","_class","Route","constructor","args","_initializerDefineProperty","_descriptor","beforeModel","transition","session","requireAuthentication","model","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","CreateAlertProfileRoute","_exports","default","_class","Route","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","transition","session","requireAuthentication","model","params","store","hash","globalDatetimeFormat","query","then","settings","find","setting","title","dispUnits","timeUnits","tempUnits","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","CreateGatewayRoute","_exports","default","_class","Route","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_defineProperty","perms","session","data","authenticated","modules","beforeModel","transition","requireAuthentication","afterModel","model","gatewayTypes","Array","from","sort","compare","params","_this","Promise","resolve","reject","gateways","store","query","small","findAll","then","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","a","b","String","id","localeCompare","CreateInstrumentRoute","_exports","default","_class","Route","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_defineProperty","perms","session","data","authenticated","modules","console","log","beforeModel","transition","requireAuthentication","afterModel","model","instrumentTypes","Array","from","sort","compare","params","_this","Promise","resolve","reject","instrument","vendors","store","findAll","vwVendors","vwModels","headAts","levelLookupList","query","name","projectLookupList","then","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","a","b","String","id","localeCompare","CreateLookupRoute","_exports","default","_class","Route","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_defineProperty","perms","session","data","authenticated","modules","beforeModel","transition","requireAuthentication","afterModel","model","params","_this","lookups","store","findAll","counter","allNamesWithIds","seenNames","Set","forEach","lookup","name","get","has","add","push","id","uniqueNames","console","log","JSON","stringify","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","EditAlertProfileRoute","_exports","default","_class","Route","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","transition","session","requireAuthentication","model","params","store","hash","alert","findRecord","id","globalDatetimeFormat","query","then","settings","find","setting","title","dispUnits","timeUnits","tempUnits","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Route","extend","session","service","store","queryParams","parentGateway","refreshModel","beforeModel","transition","requireAuthentication","model","params","localStorage","setItem","_this","Promise","resolve","gateway","findRecord","gateway_id","gatewayTypes","findAll","allIntervals","all","then","intervalResult","intervals","forEach","interval","push","gatewayReadingIntervals","filter","i","get","gatewayUploadIntervals","gatewayMeshCycleIntervals","gatewayRadioPowerLevelIntervals","gateways","setupController","controller","_super","parentId","set","EditInstrumentRoute","_exports","default","_class","Route","extend","queryParams","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","transition","session","requireAuthentication","model","params","_this","Promise","resolve","reject","instrument","store","findRecord","instrument_id","globalDatetimeFormatProjectSetting","query","then","settings","find","setting","title","instrumentTypes","findAll","vendors","headAts","vwVendors","vwModels","levelLookupList","name","projectLookupList","globalDatetimeFormat","anchors","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","ForgotPasswordRoute","_exports","default","_class","Route","constructor","args","_descriptor","beforeModel","transition","model","prototype","service","Route","extend","session","service","store","resetController","controller","isExiting","set","queryParams","page","refreshModel","page_size","advancedStartDate","advancedEndDate","beforeModel","transition","requireAuthentication","model","params","_this","Promise","resolve","globalDatetimeFormatProjectSetting","query","then","settings","find","setting","title","instrument","findRecord","instrument_id","bluvibeV2Profiles","globalDatetimeFormat","setupController","_super","setProperties","content","instrumentId","get","subModel","project","location","level","borehole","instrumentType","afterModel","Route","extend","session","service","store","resetController","controller","isExiting","set","queryParams","page","refreshModel","page_size","selectedFreqEventDate","analysis_category","method","beforeModel","transition","requireAuthentication","model","params","_this","Promise","resolve","undefined","globalDatetimeFormatProjectSetting","query","then","settings","find","setting","title","instrument","findRecord","instrument_id","bluvibeV2ModelProfiles","globalDatetimeFormat","profileId","profile_id","setupController","_super","setProperties","content","instrumentId","get","instrumentType","subModel","afterModel","FrequencyGraphsRoute","_exports","default","_class","Route","extend","model","params","a","store","hash","instrument","queryRecord","instrument_id","setupController","controller","controllerFor","set","activate","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_defineProperty","perms","session","data","authenticated","modules","beforeModel","transition","requireAuthentication","getPerms","get","transitionTo","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Route","extend","store","service","queryParams","start_timestamp","refreshModel","end_timestamp","num_points_requested","ref_head_position","ref_anchor","zeroed","raw","flip_signs","event_type","blast_type","seismic_type","frequency","display_records","chart_type","advancedYAxisUnit","advancedStartDate","advancedEndDate","advancedYLeftMax","advancedYLeftMin","advancedYRightMax","advancedYRightMin","advancedXMax","advancedXMin","model","params","_this","page_size","routeParams","paramsFor","instrument_id","seismicEvents","Promise","resolve","reject","blastEvents","zoomDataQueryParams","copy","query","singularize","model_name","then","zoomData","closestZeroTimestamp","meta","zoomDataStartTimestamp","zoomDataEndTimestamp","typeID","substr","length","prevModel","temperatureParams","console","log","instrument","queryRecord","graphs","findAll","afterModel","resolvedModel","frequencyGraphsController","controllerFor","send","get","obj","type","toString","forEach","item","id","name","chartName","anchors","content","actions","setDataR","data","setChartR","chart","willTransition","GatewayRoute","_exports","default","_class","Route","extend","queryParams","page","refreshModel","page_size","ordering","search","actions","refresh","afterModel","resolvedModel","transition","gateway","pageSize","query","gatewayMeta","meta","gatewayController","controllerFor","session","store","refreshLicence","send","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","requireAuthentication","window","localStorage","removeItem","model","params","parent_gateway","gatewayStats","Promise","all","queryRecord","error","errors","status","invalidate","console","log","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","HaveAnIssueRoute","_exports","default","_class","Route","constructor","args","_initializerDefineProperty","_descriptor","beforeModel","transition","session","requireAuthentication","model","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Route","extend","session","service","store","queryParams","page","refreshModel","page_size","ordering","search","searchTgt","beforeModel","transition","requireAuthentication","model","params","_this","Promise","resolve","test","slice","opt","console","log","instruments","query","instrumentStats","queryRecord","gateway","gatewayStats","levelLookupList","name","projectLookupList","then","afterModel","refreshLicence","InstrumentsRoute","_exports","default","_class","Route","extend","queryParams","page","refreshModel","page_size","ordering","search","afterModel","resolvedModel","transition","instruments","pageSize","query","instrumentMeta","meta","instrumentsController","controllerFor","session","store","refreshLicence","send","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","requireAuthentication","model","params","instrumentStats","levelLookupList","projectLookupList","Promise","all","queryRecord","name","error","console","log","errors","status","invalidate","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","KeysRoute","_exports","default","_class","Route","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","transition","session","requireAuthentication","model","params","_this","Promise","resolve","reject","licenceKeys","store","query","then","afterModel","resolvedModel","controllerFor","send","refreshLicence","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","KeysRoute","_exports","default","_class","Route","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","transition","session","requireAuthentication","model","params","_this","Promise","resolve","reject","lookups","store","findAll","then","afterModel","resolvedModel","controllerFor","send","refreshLicence","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","LogViewerRoute","_exports","default","_class","Route","extend","queryParams","page","refreshModel","page_size","ordering","search","startDate","endDate","actions","refresh","afterModel","resolvedModel","transition","pageSize","logViewer","query","logViewerMeta","meta","logViewerController","controllerFor","session","store","refreshLicence","send","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","requireAuthentication","model","params","_this","Promise","resolve","reject","errorTypeLookups","name","logViewerStats","queryRecord","then","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","LoginRoute","_exports","default","_class","Route","constructor","args","_descriptor","beforeModel","transition","from","session","prohibitAuthentication","model","loginAPI","ENV","API_LOGIN","prototype","service","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","MyProfileRoute","_exports","default","_class","Route","constructor","args","_descriptor","beforeModel","transition","model","prototype","service","CalibrationRoute","_exports","default","_class","Route","extend","queryParams","actions","refreshModel","refresh","afterModel","resolvedModel","transition","constructor","args","_initializerDefineProperty","_descriptor","beforeModel","session","requireAuthentication","activate","window","addEventListener","handleBeforeUnload","deactivate","removeEventListener","event","preventDefault","returnValue","model","params","query","page","page_size","calibrationID","searchCalibrationID","jobID","searchJobID","sensorID","searchSensorID","error","isAdapterError","errors","status","console","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","CalibrationRoute","_exports","default","_class","Route","extend","queryParams","actions","refreshModel","refresh","afterModel","resolvedModel","transition","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","session","requireAuthentication","activate","window","addEventListener","handleBeforeUnload","deactivate","removeEventListener","event","preventDefault","returnValue","model","params","query","page","page_size","calibrationID","searchCalibrationID","jobID","searchJobID","sensorID","searchSensorID","rigProfileListQuery","store","packTypesListQuery","rigProfiles","packTypesList","RSVP","all","rigProfileList","packTypeList","error","isAdapterError","errors","status","console","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Route","extend","session","service","store","resetController","controller","isExiting","set","queryParams","page","refreshModel","page_size","paginate_from_zero","port","linear","calib","depth","port_number","advancedYAxisUnit","advancedStartDate","advancedEndDate","advancedYLeftMax","advancedYLeftMin","advancedYRightMax","advancedYRightMin","advancedXMax","advancedXMin","beforeModel","transition","requireAuthentication","model","params","_this","Promise","resolve","instrument","findRecord","instrument_id","displacementValuesParams","copy","model_name","originator","globalDatetimeFormatProjectSetting","query","then","settings","find","setting","title","temperatureValuesParams","displacementValues","temperatureValues","instrumentTypes","findAll","globalDatetimeFormat","afterModel","resolvedModel","rawDataValuesController","controllerFor","send","id","get","meta","Route","extend","session","service","store","resetController","controller","isExiting","set","queryParams","page","refreshModel","page_size","profile_id","selectedFreqEventDate","advancedStartDate","advancedEndDate","advancedYAxisUnit","analysis_category","method","beforeModel","transition","requireAuthentication","model","params","_this","Promise","resolve","bluvibeV2ProfileData","query","instrument","findRecord","instrument_id","bluvibeV2Profile","globalDatetimeFormatProjectSetting","then","settings","find","setting","title","data","globalDatetimeFormat","instrumentFreqEventProfiles","instrumentFreqEventData","setupController","_super","setProperties","content","afterModel","resolvedModel","ctrl","controllerFor","send","Route","extend","session","service","store","queryParams","page","refreshModel","page_size","paginate_from_zero","raw_parent_gateway","beforeModel","transition","requireAuthentication","model","params","_this","Promise","resolve","gateway","findRecord","gateway_id","gatewayValuesParams","copy","model_name","gatewayValues","query","gatewayTypes","findAll","then","afterModel","resolvedModel","rawDataValuesController","controllerFor","send","id","get","meta","_initializerDefineProperty","e","i","r","l","Object","defineProperty","enumerable","configurable","writable","value","initializer","call","_defineProperty","t","_toPropertyKey","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_applyDecoratedDescriptor","n","a","keys","forEach","slice","reverse","reduce","_initializerWarningHelper","Error","RegisterRoute","_exports","default","_class","Route","constructor","args","_descriptor","beforeModel","transition","model","prototype","service","ResetPasswordRoute","Route","model","params","token","_exports","default","SeismicEventRoute","_exports","default","_class","Route","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","transition","session","requireAuthentication","model","params","_this","Promise","resolve","reject","seismic","store","findAll","then","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","SeismicsRoute","_exports","default","_class","Route","extend","queryParams","page","refreshModel","page_size","ordering","search","model","params","hash","seismicEvents","get","query","seismicTypes","findAll","afterModel","resolvedModel","pageSize","eventsMeta","meta","seismicEventsController","controllerFor","send","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","transition","session","requireAuthentication","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","CalibrationRoute","_exports","default","_class","Route","extend","queryParams","actions","refreshModel","refresh","afterModel","resolvedModel","transition","constructor","args","_initializerDefineProperty","_descriptor","beforeModel","session","requireAuthentication","activate","window","addEventListener","handleBeforeUnload","deactivate","removeEventListener","event","preventDefault","returnValue","model","params","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","CalibrationRoute","_exports","default","_class","Route","extend","queryParams","actions","refreshModel","refresh","afterModel","resolvedModel","transition","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","session","requireAuthentication","activate","window","addEventListener","handleBeforeUnload","deactivate","removeEventListener","event","preventDefault","returnValue","model","params","query","page","page_size","calibrationID","searchCalibrationID","jobID","searchJobID","sensorID","searchSensorID","rigProfileList","store","sensorTypesList","calibrationProfileList","rigProfiles","sensorTypes","calibrationProfiles","RSVP","all","sensorTypeList","error","isAdapterError","errors","status","console","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","SettingsRoute","_exports","default","_class","Route","extend","model","params","store","query","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","transition","controllerFor","resetLoading","session","requireAuthentication","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","FrequencyGraphsRoute","_exports","default","_class","Route","extend","model","params","hash","instrument","store","queryRecord","instrument_id","setupController","controller","controllerFor","set","activate","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_defineProperty","perms","session","data","authenticated","modules","beforeModel","transition","requireAuthentication","getPerms","get","transitionTo","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Route","extend","store","service","queryParams","start_timestamp","refreshModel","end_timestamp","num_points_requested","ref_head_position","ref_anchor","zeroed","flip_signs","event_type","blast_type","seismic_type","frequency","frequency_num","events_only","group_time","group_window","progress_timestamps","side","model","params","_this","page_size","routeParams","paramsFor","instrument_id","seismicEvents","Promise","resolve","reject","blastEvents","zoomDataQueryParams","copy","query","singularize","model_name","then","zoomData","closestZeroTimestamp","meta","zoomDataStartTimestamp","zoomDataEndTimestamp","typeID","substr","length","prevModel","isRebarGraph","window","history","replaceState","zoomDataSecondCall","fullRangeData","instrument","findRecord","graphs","findAll","is_visible","afterModel","resolvedModel","spatialGraphsController","controllerFor","send","get","mName","iName","obj","type","toString","forEach","item","id","name","lastIndexOf","exception","console","log","spatialDisplacementName","spatialVelocityName","spatialAccelerationName","spatialStrainName","spatialStrainRateName","spatialLoadName","chartName","_cap","s","charAt","toUpperCase","slice","chartNameL","indexOf","chartNameR","anchors","content","actions","setDataR","data","temporalGraphsController","setChartR","chart","willTransition","TemporalGatewayGraphsRoute","_exports","default","_class","Route","extend","model","params","a","store","hash","gateway","queryRecord","gateway_id","setupController","controller","controllerFor","set","activate","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_defineProperty","perms","session","data","authenticated","modules","beforeModel","transition","requireAuthentication","getPerms","get","transitionTo","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Route","extend","store","service","queryParams","start_timestamp","refreshModel","end_timestamp","num_points_requested","ref_head_position","ref_anchor","zeroed","linear","calib","depth","flip_signs","event_type","blast_type","seismic_type","frequency","chart_parent_gateway","chart_type","window","display_records","tiltMode","tiltZUp","model","params","_this","page_size","routeParams","paramsFor","gateway_id","Promise","resolve","reject","zoomDataQueryParams","copy","left_axis_field","right_axis_field","parentGateway","set","query","singularize","model_name","then","zoomData","closestZeroTimestamp","meta","zoomDataStartTimestamp","zoomDataEndTimestamp","gatewayID","zoomDataSecondCall","temperatureParams","zoomTempData","fullRangeData","raw","gateway","queryRecord","graphs","findAll","afterModel","resolvedModel","temporalGraphsController","controllerFor","send","get","level","obj","type","newObj","forEach","item","id","name","substr","lastIndexOf","exception","chartName","capitalize","chartNameL","indexOf","chartNameR","actions","setDataR","data","setChartR","chart","willTransition","TemporalGraphsRoute","_exports","default","_class","Route","extend","model","params","a","store","hash","instrument","queryRecord","instrument_id","setupController","controller","controllerFor","set","activate","resetController","isExiting","transition","content","save","e","console","log","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","_defineProperty","perms","session","data","authenticated","modules","beforeModel","requireAuthentication","getPerms","get","transitionTo","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Route","extend","store","service","afterModel","model","transition","_super","arguments","controller","set","instrument","selectedAnchor","queryParams","start_timestamp","refreshModel","end_timestamp","num_points_requested","ref_head_position","ref_anchor","zeroed","linear","calib","depth","flip_signs","event_type","blast_type","seismic_type","frequency","chart_type","window","display_records","port","advancedYAxisUnit","advancedStartDate","advancedEndDate","advancedYLeftMax","advancedYLeftMin","advancedYRightMax","advancedYRightMin","advancedXMax","advancedXMin","tiltMode","tiltZUp","resetController","isExiting","params","_this","page_size","routeParams","paramsFor","instrument_id","seismicEvents","Promise","resolve","reject","blastEvents","vibeEvents","zoomDataQueryParams","copy","SINGLE_QUERY","zoomDataSecondCall","fullRangeData","query","singularize","model_name","then","zoomData","closestZeroTimestamp","meta","zoomDataStartTimestamp","zoomDataEndTimestamp","mName","isVibeGraph","SECOND_QUERY","raw","FULLRANGE_DATA","temperatureParams","zoomTempData","queryRecord","graphs","findAll","is_visible","query_name","vibeEventParams","vibe_id","resolvedModel","temporalGraphsController","controllerFor","send","get","level","obj","type","toString","forEach","item","id","name","substr","lastIndexOf","exception","temporalDisplacementName","undefined","temporalVelocityName","temporalStrainName","temporalStrainRateName","temporalLoadName","chartName","chartNameL","capitalize","substring","indexOf","chartNameR","finalVal","anchors","anchorList","content","current","sorted","first","firstNumber","number","actions","setDataR","data","setChartR","chart","willTransition","VibrationsRoute","_exports","default","_class","Route","extend","queryParams","page","refreshModel","page_size","ordering","search","model","params","hash","vibrationEvents","store","query","afterModel","resolvedModel","pageSize","eventsMeta","meta","vibeEventsController","controllerFor","send","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","beforeModel","transition","session","requireAuthentication","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","ApplicationSerializer","JSONAPISerializer","_exports","default","CustomAjaxService","_exports","default","_dec","computed","_class","Service","constructor","args","_initializerDefineProperty","_descriptor","_defineProperty","getApiBaseUrl","headers","session","data","authenticated","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Object","getOwnPropertyDescriptor","AlertsBatchService","_exports","default","_class","Service","constructor","args","_initializerDefineProperty","_descriptor","batchEdit","mode","profileIds","length","Error","session","isAuthenticated","accessToken","data","authenticated","access","payload","profile_ids","response","fetch","getApiBaseUrl","method","headers","Authorization","body","JSON","stringify","ok","errorText","text","json","batchDelete","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","ApiService","_exports","default","_class","Service","constructor","args","_initializerDefineProperty","_descriptor","_descriptor2","fetch","url","options","response","e","status","includes","_isLoggingOut","console","warn","localStorage","clear","session","invalidate","router","transitionTo","Error","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","_default","_exports","default","Service","extend","loadConfigurations","url","getApiBaseUrl","fetch","then","response","json","data","forEach","providerConfig","providerDetails","redirectUri","redirect_uri","api_key","apiKey","client_id","clientId","authorization_base_url","authorizationBaseURL","token_url","tokenURL","ENV","torii","providers","provider_name","catch","error","console","computedFromConfig","prop","computed","ENV","_default","_exports","default","Service","extend","hasEmberTether","hasLiquidWormhole","hasLiquidTether","destinationElementId","getDestinationElementIdFromConfig","OauthConfigService","Service","loadProviderConfig","providerName","url","getApiBaseUrl","response","fetch","ok","Error","json","_exports","default","Store","DataStore","constructor","args","deprecate","id","for","until","since","enabled","available","_exports","default","UserProfileService","_exports","default","_class","Service","constructor","arguments","_initializerDefineProperty","_descriptor","stored","localStorage","getItem","userProfileService","JSON","parse","e","loadFromServer","serverPayload","setItem","stringify","updateField","key","value","profile","_applyDecoratedDescriptor","prototype","tracked","configurable","enumerable","writable","initializer","ApplicationSessionStore","CookieStore","refreshLicence","cookie","restore","url","getApiBaseUrl","endsWith","response","fetch","method","headers","localStorage","token","ok","licence","json","data","authenticated","isValid","attributes","limit","modules","persist","status","clear","_exports","default","DS","Transform","extend","deserialize","serialized","serialize","deserialized","DeprecatedDateTransform","DateTransform","constructor","args","deprecate","id","for","until","since","enabled","available","_exports","default","DS","Transform","extend","deserialize","serialized","serialize","deserialized","DeprecatedNumberTransform","NumberTransform","constructor","args","deprecate","id","for","until","since","enabled","available","_exports","default","ObjectTransform","Transform","deserialize","serialized","serialize","deserialized","_exports","default","DeprecatedStringTransform","StringTransform","constructor","args","deprecate","id","for","until","since","enabled","available","_exports","default","DS","Transform","extend","deserialize","serialized","serialize","deserialized","getAlertEvaluationTypesDictionary","typeCode","dictionary","isValid","value","undefined","startsWith","getApiConfig","runtime","window","RUNTIME_CONFIG","protocol","API_PROTOCOL","ENV","host","API_URL","port","API_PORT","getApiBaseUrl","getApiBasePort","vpBlue","blue1","blue2","blue3","blue4","blue5","blue6","blue7","blue8","blue9","blue10","blue11","blue12","blue13","blue14","blue15","blue16","blue17","blue18","blue19","blue20","blue21","blue22","blue23","blue24","blue25","blue26","blue27","blue28","blue29","blue30","blue31","blue32","blue33","blue34","blue35","blue36","blue37","blue38","blue39","blue40","beige1","beige2","beige3","beige4","beige5","beige6","beige7","beige8","beige9","beige10","beige11","beige12","beige13","beige14","beige15","beige16","beige17","beige18","beige19","beige20","beige21","beige22","beige23","beige24","beige25","beige26","beige27","beige28","beige29","beige30","orange1","orange2","orange3","orange4","orange5","orange6","orange7","orange8","orange9","orange10","orange11","orange12","orange13","orange14","orange15","orange16","orange17","orange18","orange19","orange20","orange21","orange22","orange23","orange24","orange25","orange26","orange27","orange28","orange29","orange30","yellow1","yellow2","yellow3","yellow4","yellow5","yellow6","yellow7","yellow8","yellow9","yellow10","yellow11","yellow12","yellow13","yellow14","yellow15","yellow16","yellow17","yellow18","yellow19","yellow20","yellow21","yellow22","yellow23","yellow24","yellow25","green1","green2","green3","green4","green5","green6","green7","green8","green9","green10","green11","green12","green13","green14","green15","green16","green17","green18","green19","green20","green21","green22","green23","green24","green25","green26","green27","green28","green29","green30","red1","red2","red3","red4","red5","red6","red7","red8","red9","red10","red11","red12","red13","red14","red15","red16","red17","red18","red19","red20","red21","red22","red23","red24","red25","purple1","purple2","purple3","purple4","purple5","purple6","purple7","purple8","purple9","purple10","purple11","purple12","purple13","purple14","purple15","purple16","purple17","purple18","purple19","purple20","purple21","purple22","purple23","purple24","purple25","teal1","teal2","teal3","teal4","teal5","teal6","teal7","teal8","teal9","teal10","teal11","teal12","teal13","teal14","teal15","teal16","teal17","teal18","teal19","teal20","teal21","teal22","teal23","teal24","teal25","cyan1","cyan2","cyan3","cyan4","cyan5","cyan6","cyan7","cyan8","cyan9","cyan10","cyan11","cyan12","cyan13","cyan14","cyan15","cyan16","cyan17","cyan18","cyan19","cyan20","cyan21","cyan22","cyan23","cyan24","cyan25","pink1","pink2","pink3","pink4","pink5","pink6","pink7","pink8","pink9","pink10","pink11","pink12","pink13","pink14","pink15","pink16","pink17","pink18","pink19","pink20","pink21","pink22","pink23","pink24","pink25","indigo1","indigo2","indigo3","indigo4","indigo5","indigo6","indigo7","indigo8","indigo9","indigo10","indigo11","indigo12","indigo13","indigo14","indigo15","indigo16","indigo17","indigo18","indigo19","indigo20","indigo21","indigo22","indigo23","indigo24","indigo25","gray1","gray2","gray3","gray4","gray5","gray6","gray7","gray8","gray9","gray10","gray11","gray12","gray13","gray14","gray15","gray16","gray17","gray18","gray19","gray20","gray21","gray22","gray23","gray24","gray25","gray26","gray27","MULTI_INSTRUMENT_RE","LEGACY_10_RE","LEGACY_9_RE","isMultiInstrumentId","id","test","isLegacy10CharInstrumentId","length","isLegacy9CharInstrumentId","isValidInstrumentId","CHANNELS_PER_INSTRUMENT","_exports","computeInstrumentSizes","format","channels","sizes","remaining","push","parseInstrumentId","parseInt","substring","instrumentSizes","year","month","instrumentCount","subModel","instrumentTypeID","sequence","getChannelsFromId","parsed","getInstrumentCountFromId","getInstrumentSizesFromId","getAnchorCountFromId","Math","max","getDisplacementChannelCountFromId","getChannelKindAtIndex","channelIndex","cursor","size","validateChannelDataValues","dataValues","valid","expected","actual","Array","isArray","reason","getInstrumentTypeIDFromId","getSubModelFromId","getExpectedTemperatureValueCount","getExpectedDisplacementValueCount","anchor","getInstrumentForDisplacementValueIndex","dispIndex","g","dispCountInInstrument","CHANNELS_PER_GROUP","isGroupedInstrumentId","getGroupCountFromId","getGroupSizesFromId","getGroupForDisplacementValueIndex"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","file":"geotechnical-data-platform-new.js"}