UNPKG

@canboat/visual-analyzer

Version:

NMEA 2000 data visualization utility (requires SK Server >= 2.15)

2 lines 20.8 kB
"use strict";(self.webpackChunk_canboat_visual_analyzer=self.webpackChunk_canboat_visual_analyzer||[]).push([[572],{5572:(n,r,o)=>{var a=o(44823),A=o.n(a),e=o(27183),t=o.n(e),s=o(89170),d=o.n(s),i=(o(76378),o(2898),o(85072)),c=o.n(i),l=o(50365);c()(l.A,{insert:"head",singleton:!1}),l.A.locals;const C={openWebsocket:n=>{console.log("Connecting to WebSocket server with options:",n);const r=`${"https:"===window.location.protocol?"wss:":"ws:"}//${window.location.host}`;console.log("WebSocket URL:",r);const o=new WebSocket(r);return o.onopen=()=>{console.log("Connected to Visual Analyzer WebSocket server"),o.send(JSON.stringify({type:"subscribe",subscription:"nmea2000"}))},o.onerror=n=>{console.error("WebSocket error:",n)},o.onclose=()=>{console.log("WebSocket connection closed")},{onmessage:null,send:n=>{o.readyState===WebSocket.OPEN&&o.send(n)},close:()=>{o.close()},_setupForwarding:function(){o.onmessage=n=>{this.onmessage&&this.onmessage({data:n.data})}}}}};t().render(A().createElement(A().StrictMode,null,A().createElement("div",null,A().createElement("nav",{className:"navbar navbar-expand-lg",style:{backgroundColor:"#003399",borderBottom:"1px solid #c2cfd6",marginBottom:"0"}},A().createElement("div",{className:"container-fluid"},A().createElement("span",{className:"navbar-brand mb-0 h1",style:{color:"white",fontWeight:"600"}},"NMEA 2000 Visual Analyzer"),A().createElement("span",{className:"navbar-text",style:{color:"#a4b7c1",fontSize:"0.875rem"}},A().createElement("a",{href:"https://github.com/canboat",target:"_blank",rel:"noopener noreferrer",style:{color:"white"}},"Canboat")))),A().createElement("div",{className:"container-fluid"},A().createElement(d(),{adminUI:{...C,openWebsocket:n=>{const r=C.openWebsocket(n);return r._setupForwarding(),r}}})))),document.getElementById("root"))},50365:(n,r,o)=>{o.d(r,{A:()=>s});var a=o(54991),A=o.n(a),e=o(76314),t=o.n(e)()(A());t.push([n.id,"/* SignalK Server-inspired styles for the NMEA 2000 Visual Analyzer */\n\n/* Color system matching SignalK Server */\n:root {\n --sk-primary: #003399;\n --sk-secondary: #a4b7c1;\n --sk-success: #4dbd74;\n --sk-info: #63c2de;\n --sk-warning: #ffcc00;\n --sk-danger: #f86c6b;\n --sk-light: #f0f3f5;\n --sk-dark: #29363d;\n\n --sk-gray-100: #f0f3f5;\n --sk-gray-200: #c2cfd6;\n --sk-gray-300: #a4b7c1;\n --sk-gray-400: #869fac;\n --sk-gray-500: #678898;\n --sk-gray-600: #536c79;\n --sk-gray-700: #3e515b;\n --sk-gray-800: #29363d;\n --sk-gray-900: #151b1e;\n\n --sk-body-bg: #e4e5e6;\n --sk-card-border: #c2cfd6;\n --sk-card-cap-bg: #f0f3f5;\n}\n\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif;\n background-color: var(--sk-body-bg);\n font-size: 0.875rem;\n}\n\n.container-fluid {\n max-width: 1400px;\n margin: 0 auto;\n padding-top: 1rem;\n}\n\n/* SignalK-style Navigation Tabs */\n.nav-tabs {\n border-bottom: 1px solid var(--sk-card-border);\n margin-bottom: 1.5rem;\n}\n\n.nav-tabs .nav-link {\n color: var(--sk-gray-500);\n font-weight: 500;\n border: 1px solid transparent;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: transparent;\n padding: 0.75rem 1rem;\n}\n\n.nav-tabs .nav-link:hover {\n border-color: var(--sk-gray-200);\n background-color: var(--sk-gray-100);\n color: var(--sk-gray-700);\n}\n\n.nav-tabs .nav-link.active {\n color: var(--sk-dark);\n background-color: #fff;\n border-color: var(--sk-card-border) var(--sk-card-border) #fff;\n border-top: 3px solid var(--sk-primary);\n}\n\n/* SignalK-style Cards */\n.card {\n margin-bottom: 1.5rem;\n border: 1px solid var(--sk-card-border);\n border-radius: 0;\n box-shadow: none;\n background-color: #fff;\n}\n\n.card-header {\n background-color: var(--sk-card-cap-bg);\n border-bottom: 1px solid var(--sk-card-border);\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n font-weight: 600;\n color: var(--sk-gray-700);\n}\n\n.card-body {\n padding: 1.25rem;\n}\n\n/* Filter panel styling */\n.filter-panel {\n background-color: #fff;\n border: 1px solid var(--sk-card-border);\n padding: 1rem;\n margin-bottom: 1.5rem;\n}\n\n.filter-panel .form-group {\n margin-bottom: 1rem;\n}\n\n.filter-panel label {\n color: var(--sk-gray-700);\n font-weight: 500;\n margin-bottom: 0.5rem;\n}\n\n/* Data list styling */\n.data-list {\n background-color: #fff;\n border: 1px solid var(--sk-card-border);\n max-height: 600px;\n overflow-y: auto;\n}\n\n.data-list .table {\n margin-bottom: 0;\n font-size: 0.875rem;\n}\n\n.data-list .table th {\n border-top: none;\n border-bottom: 1px solid var(--sk-card-border);\n background-color: var(--sk-card-cap-bg);\n color: var(--sk-gray-700);\n font-weight: 600;\n padding: 0.75rem;\n}\n\n.data-list .table td {\n border-top: 1px solid var(--sk-gray-100);\n padding: 0.75rem;\n vertical-align: middle;\n}\n\n.data-list .table tbody tr:hover {\n background-color: var(--sk-gray-100);\n cursor: pointer;\n}\n\n.data-list .table tbody tr:nth-of-type(odd) {\n background-color: var(--sk-gray-100);\n}\n\n.data-list .table tbody tr:nth-of-type(odd):hover {\n background-color: var(--sk-gray-200);\n}\n\n/* Sentence panel styling */\n.sentence-panel {\n background-color: #fff;\n border: 1px solid var(--sk-card-border);\n padding: 1rem;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.sentence-panel pre {\n background-color: var(--sk-gray-100);\n border: 1px solid var(--sk-card-border);\n padding: 1rem;\n font-size: 0.8rem;\n color: var(--sk-gray-800);\n border-radius: 0;\n}\n\n/* Buttons */\n.btn {\n border-radius: 0;\n font-weight: 500;\n}\n\n.btn-primary {\n background-color: var(--sk-primary);\n border-color: var(--sk-primary);\n}\n\n.btn-primary:hover {\n background-color: #002266;\n border-color: #002266;\n}\n\n.btn-secondary {\n background-color: var(--sk-secondary);\n border-color: var(--sk-secondary);\n color: var(--sk-dark);\n}\n\n.btn-secondary:hover {\n background-color: var(--sk-gray-400);\n border-color: var(--sk-gray-400);\n color: var(--sk-dark);\n}\n\n/* Form controls */\n.form-control {\n border-radius: 0;\n border-color: var(--sk-card-border);\n font-size: 0.875rem;\n}\n\n.form-control:focus {\n border-color: var(--sk-primary);\n box-shadow: 0 0 0 0.2rem rgba(0, 51, 153, 0.25);\n}\n\n.input-group-text {\n background-color: var(--sk-gray-100);\n border-color: var(--sk-card-border);\n border-radius: 0;\n}\n\n/* Loading states */\n.loading {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 2rem;\n color: var(--sk-gray-500);\n font-style: italic;\n}\n\n/* Alerts */\n.alert {\n border-radius: 0;\n}\n\n.alert-warning {\n background-color: #fff3cd;\n border-color: #ffeaa7;\n color: #856404;\n}\n\n/* Tab content styling */\n.tab-content {\n background-color: transparent;\n}\n\n.tab-pane {\n padding: 0;\n}\n\n/* Special styling for placeholder content */\n.tab-pane h4 {\n color: var(--sk-gray-700);\n margin-bottom: 1rem;\n}\n\n.tab-pane p {\n color: var(--sk-gray-600);\n margin-bottom: 0;\n}\n\n/* Mobile responsiveness */\n@media (max-width: 767px) {\n .container-fluid {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n\n .card-body {\n padding: 1rem;\n }\n\n .nav-tabs .nav-link {\n padding: 0.5rem 0.75rem;\n font-size: 0.8rem;\n }\n\n .data-list .table td,\n .data-list .table th {\n padding: 0.5rem;\n font-size: 0.8rem;\n }\n}\n\n/* Additional SignalK-inspired utility classes */\n.text-sk-primary {\n color: var(--sk-primary) !important;\n}\n.text-sk-secondary {\n color: var(--sk-secondary) !important;\n}\n.text-sk-success {\n color: var(--sk-success) !important;\n}\n.text-sk-info {\n color: var(--sk-info) !important;\n}\n.text-sk-warning {\n color: var(--sk-warning) !important;\n}\n.text-sk-danger {\n color: var(--sk-danger) !important;\n}\n\n.bg-sk-primary {\n background-color: var(--sk-primary) !important;\n}\n.bg-sk-light {\n background-color: var(--sk-light) !important;\n}\n.bg-sk-dark {\n background-color: var(--sk-dark) !important;\n}\n\n/* Badge styles - fix for invisible text in outline badges */\n.badge-outline-primary {\n color: var(--sk-primary) !important;\n border: 1px solid var(--sk-primary);\n background-color: transparent;\n}\n\n.badge-outline-secondary {\n color: var(--sk-gray-600) !important;\n border: 1px solid var(--sk-gray-600);\n background-color: transparent;\n}\n\n.badge-outline-success {\n color: var(--sk-success) !important;\n border: 1px solid var(--sk-success);\n background-color: transparent;\n}\n\n.badge-outline-info {\n color: var(--sk-info) !important;\n border: 1px solid var(--sk-info);\n background-color: transparent;\n}\n\n.badge-outline-warning {\n color: var(--sk-warning) !important;\n border: 1px solid var(--sk-warning);\n background-color: transparent;\n}\n\n.badge-outline-danger {\n color: var(--sk-danger) !important;\n border: 1px solid var(--sk-danger);\n background-color: transparent;\n}\n\n/* Regular badge styles - ensure proper text contrast */\n.badge-primary {\n background-color: var(--sk-primary) !important;\n color: white !important;\n}\n\n.badge-secondary {\n background-color: var(--sk-gray-500) !important;\n color: white !important;\n}\n\n.badge-success {\n background-color: var(--sk-success) !important;\n color: white !important;\n}\n\n.badge-info {\n background-color: var(--sk-info) !important;\n color: white !important;\n}\n\n.badge-warning {\n background-color: var(--sk-warning) !important;\n color: var(--sk-dark) !important;\n}\n\n.badge-danger {\n background-color: var(--sk-danger) !important;\n color: white !important;\n}\n","",{version:3,sources:["webpack://./src/styles.css"],names:[],mappings:"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",sourcesContent:["/* SignalK Server-inspired styles for the NMEA 2000 Visual Analyzer */\n\n/* Color system matching SignalK Server */\n:root {\n --sk-primary: #003399;\n --sk-secondary: #a4b7c1;\n --sk-success: #4dbd74;\n --sk-info: #63c2de;\n --sk-warning: #ffcc00;\n --sk-danger: #f86c6b;\n --sk-light: #f0f3f5;\n --sk-dark: #29363d;\n\n --sk-gray-100: #f0f3f5;\n --sk-gray-200: #c2cfd6;\n --sk-gray-300: #a4b7c1;\n --sk-gray-400: #869fac;\n --sk-gray-500: #678898;\n --sk-gray-600: #536c79;\n --sk-gray-700: #3e515b;\n --sk-gray-800: #29363d;\n --sk-gray-900: #151b1e;\n\n --sk-body-bg: #e4e5e6;\n --sk-card-border: #c2cfd6;\n --sk-card-cap-bg: #f0f3f5;\n}\n\nbody {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif;\n background-color: var(--sk-body-bg);\n font-size: 0.875rem;\n}\n\n.container-fluid {\n max-width: 1400px;\n margin: 0 auto;\n padding-top: 1rem;\n}\n\n/* SignalK-style Navigation Tabs */\n.nav-tabs {\n border-bottom: 1px solid var(--sk-card-border);\n margin-bottom: 1.5rem;\n}\n\n.nav-tabs .nav-link {\n color: var(--sk-gray-500);\n font-weight: 500;\n border: 1px solid transparent;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-color: transparent;\n padding: 0.75rem 1rem;\n}\n\n.nav-tabs .nav-link:hover {\n border-color: var(--sk-gray-200);\n background-color: var(--sk-gray-100);\n color: var(--sk-gray-700);\n}\n\n.nav-tabs .nav-link.active {\n color: var(--sk-dark);\n background-color: #fff;\n border-color: var(--sk-card-border) var(--sk-card-border) #fff;\n border-top: 3px solid var(--sk-primary);\n}\n\n/* SignalK-style Cards */\n.card {\n margin-bottom: 1.5rem;\n border: 1px solid var(--sk-card-border);\n border-radius: 0;\n box-shadow: none;\n background-color: #fff;\n}\n\n.card-header {\n background-color: var(--sk-card-cap-bg);\n border-bottom: 1px solid var(--sk-card-border);\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n font-weight: 600;\n color: var(--sk-gray-700);\n}\n\n.card-body {\n padding: 1.25rem;\n}\n\n/* Filter panel styling */\n.filter-panel {\n background-color: #fff;\n border: 1px solid var(--sk-card-border);\n padding: 1rem;\n margin-bottom: 1.5rem;\n}\n\n.filter-panel .form-group {\n margin-bottom: 1rem;\n}\n\n.filter-panel label {\n color: var(--sk-gray-700);\n font-weight: 500;\n margin-bottom: 0.5rem;\n}\n\n/* Data list styling */\n.data-list {\n background-color: #fff;\n border: 1px solid var(--sk-card-border);\n max-height: 600px;\n overflow-y: auto;\n}\n\n.data-list .table {\n margin-bottom: 0;\n font-size: 0.875rem;\n}\n\n.data-list .table th {\n border-top: none;\n border-bottom: 1px solid var(--sk-card-border);\n background-color: var(--sk-card-cap-bg);\n color: var(--sk-gray-700);\n font-weight: 600;\n padding: 0.75rem;\n}\n\n.data-list .table td {\n border-top: 1px solid var(--sk-gray-100);\n padding: 0.75rem;\n vertical-align: middle;\n}\n\n.data-list .table tbody tr:hover {\n background-color: var(--sk-gray-100);\n cursor: pointer;\n}\n\n.data-list .table tbody tr:nth-of-type(odd) {\n background-color: var(--sk-gray-100);\n}\n\n.data-list .table tbody tr:nth-of-type(odd):hover {\n background-color: var(--sk-gray-200);\n}\n\n/* Sentence panel styling */\n.sentence-panel {\n background-color: #fff;\n border: 1px solid var(--sk-card-border);\n padding: 1rem;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.sentence-panel pre {\n background-color: var(--sk-gray-100);\n border: 1px solid var(--sk-card-border);\n padding: 1rem;\n font-size: 0.8rem;\n color: var(--sk-gray-800);\n border-radius: 0;\n}\n\n/* Buttons */\n.btn {\n border-radius: 0;\n font-weight: 500;\n}\n\n.btn-primary {\n background-color: var(--sk-primary);\n border-color: var(--sk-primary);\n}\n\n.btn-primary:hover {\n background-color: #002266;\n border-color: #002266;\n}\n\n.btn-secondary {\n background-color: var(--sk-secondary);\n border-color: var(--sk-secondary);\n color: var(--sk-dark);\n}\n\n.btn-secondary:hover {\n background-color: var(--sk-gray-400);\n border-color: var(--sk-gray-400);\n color: var(--sk-dark);\n}\n\n/* Form controls */\n.form-control {\n border-radius: 0;\n border-color: var(--sk-card-border);\n font-size: 0.875rem;\n}\n\n.form-control:focus {\n border-color: var(--sk-primary);\n box-shadow: 0 0 0 0.2rem rgba(0, 51, 153, 0.25);\n}\n\n.input-group-text {\n background-color: var(--sk-gray-100);\n border-color: var(--sk-card-border);\n border-radius: 0;\n}\n\n/* Loading states */\n.loading {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 2rem;\n color: var(--sk-gray-500);\n font-style: italic;\n}\n\n/* Alerts */\n.alert {\n border-radius: 0;\n}\n\n.alert-warning {\n background-color: #fff3cd;\n border-color: #ffeaa7;\n color: #856404;\n}\n\n/* Tab content styling */\n.tab-content {\n background-color: transparent;\n}\n\n.tab-pane {\n padding: 0;\n}\n\n/* Special styling for placeholder content */\n.tab-pane h4 {\n color: var(--sk-gray-700);\n margin-bottom: 1rem;\n}\n\n.tab-pane p {\n color: var(--sk-gray-600);\n margin-bottom: 0;\n}\n\n/* Mobile responsiveness */\n@media (max-width: 767px) {\n .container-fluid {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n\n .card-body {\n padding: 1rem;\n }\n\n .nav-tabs .nav-link {\n padding: 0.5rem 0.75rem;\n font-size: 0.8rem;\n }\n\n .data-list .table td,\n .data-list .table th {\n padding: 0.5rem;\n font-size: 0.8rem;\n }\n}\n\n/* Additional SignalK-inspired utility classes */\n.text-sk-primary {\n color: var(--sk-primary) !important;\n}\n.text-sk-secondary {\n color: var(--sk-secondary) !important;\n}\n.text-sk-success {\n color: var(--sk-success) !important;\n}\n.text-sk-info {\n color: var(--sk-info) !important;\n}\n.text-sk-warning {\n color: var(--sk-warning) !important;\n}\n.text-sk-danger {\n color: var(--sk-danger) !important;\n}\n\n.bg-sk-primary {\n background-color: var(--sk-primary) !important;\n}\n.bg-sk-light {\n background-color: var(--sk-light) !important;\n}\n.bg-sk-dark {\n background-color: var(--sk-dark) !important;\n}\n\n/* Badge styles - fix for invisible text in outline badges */\n.badge-outline-primary {\n color: var(--sk-primary) !important;\n border: 1px solid var(--sk-primary);\n background-color: transparent;\n}\n\n.badge-outline-secondary {\n color: var(--sk-gray-600) !important;\n border: 1px solid var(--sk-gray-600);\n background-color: transparent;\n}\n\n.badge-outline-success {\n color: var(--sk-success) !important;\n border: 1px solid var(--sk-success);\n background-color: transparent;\n}\n\n.badge-outline-info {\n color: var(--sk-info) !important;\n border: 1px solid var(--sk-info);\n background-color: transparent;\n}\n\n.badge-outline-warning {\n color: var(--sk-warning) !important;\n border: 1px solid var(--sk-warning);\n background-color: transparent;\n}\n\n.badge-outline-danger {\n color: var(--sk-danger) !important;\n border: 1px solid var(--sk-danger);\n background-color: transparent;\n}\n\n/* Regular badge styles - ensure proper text contrast */\n.badge-primary {\n background-color: var(--sk-primary) !important;\n color: white !important;\n}\n\n.badge-secondary {\n background-color: var(--sk-gray-500) !important;\n color: white !important;\n}\n\n.badge-success {\n background-color: var(--sk-success) !important;\n color: white !important;\n}\n\n.badge-info {\n background-color: var(--sk-info) !important;\n color: white !important;\n}\n\n.badge-warning {\n background-color: var(--sk-warning) !important;\n color: var(--sk-dark) !important;\n}\n\n.badge-danger {\n background-color: var(--sk-danger) !important;\n color: white !important;\n}\n"],sourceRoot:""}]);const s=t}}]); //# sourceMappingURL=572.js.map