diff --git a/data_svelte/build/bundle.css b/data_svelte/build/bundle.css index 7f28816d..5c5c667a 100644 --- a/data_svelte/build/bundle.css +++ b/data_svelte/build/bundle.css @@ -11,4 +11,4 @@ Consolas, 'Liberation Mono', Menlo, - monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}button,[type='button']{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}button{background-color:transparent;background-image:none}fieldset{margin:0;padding:0}ol,ul{list-style:none;margin:0;padding:0}html{font-family:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";line-height:1.5}body{font-family:inherit;line-height:inherit}*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}pre,code,kbd,samp{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}*,::before,::after{--tw-border-opacity:1;border-color:rgba(229, 231, 235, var(--tw-border-opacity))}.container{width:100%}@media(min-width: 640px){.container{max-width:640px}}@media(min-width: 768px){.container{max-width:768px}}@media(min-width: 1024px){.container{max-width:1024px}}@media(min-width: 1280px){.container{max-width:1280px}}@media(min-width: 1536px){.container{max-width:1536px}}.btn-indigo{border-radius:0.5rem;--tw-bg-opacity:1;background-color:rgba(99, 102, 241, var(--tw-bg-opacity))}.btn-indigo:hover{--tw-bg-opacity:1;background-color:rgba(67, 56, 202, var(--tw-bg-opacity))}.btn-indigo{padding-left:1rem;padding-right:1rem;padding-top:0.5rem;padding-bottom:0.5rem;font-weight:600;--tw-text-opacity:1;color:rgba(255, 255, 255, var(--tw-text-opacity));--tw-shadow:0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.btn-indigo:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);--tw-ring-opacity:1;--tw-ring-color:rgba(129, 140, 248, var(--tw-ring-opacity));--tw-ring-opacity:0.75}.widget-input-indigo{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;align-content:center;border-radius:0.25rem;border-width:2px;--tw-border-opacity:1;border-color:rgba(229, 231, 235, var(--tw-border-opacity))}.widget-input-indigo:focus{--tw-border-opacity:1;border-color:rgba(99, 102, 241, var(--tw-border-opacity))}.widget-input-indigo{--tw-bg-opacity:1;background-color:rgba(229, 231, 235, var(--tw-bg-opacity))}.widget-input-indigo:focus{--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity))}.widget-input-indigo{padding-top:0.25rem;padding-bottom:0.25rem;padding-right:1rem;line-height:1.25;--tw-text-opacity:1;color:rgba(55, 65, 81, var(--tw-text-opacity))}.widget-input-indigo:focus{outline:2px solid transparent;outline-offset:2px}.cards-grid{display:grid;grid-template-columns:repeat(1, minmax(0, 1fr));justify-items:center}@media(min-width: 640px){.cards-grid{grid-template-columns:repeat(2, minmax(0, 1fr))}}@media(min-width: 1024px){.cards-grid{grid-template-columns:repeat(3, minmax(0, 1fr))}}@media(min-width: 1280px){.cards-grid{grid-template-columns:repeat(3, minmax(0, 1fr))}}@media(min-width: 1536px){.cards-grid{grid-template-columns:repeat(3, minmax(0, 1fr))}}.card{margin-top:0.5rem;margin-bottom:0.5rem;width:91.666667%;border-radius:0.5rem;--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity));padding:0.5rem;--tw-shadow:0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}@media(min-width: 640px){.card{padding:0.5rem}}@media(min-width: 768px){.card{padding:0.5rem}}@media(min-width: 1024px){.card{padding:0.5rem;--tw-shadow:0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}}@media(min-width: 1280px){.card{padding-left:2rem;padding-right:2rem;padding-top:1rem;padding-bottom:1rem}}@media(min-width: 1536px){.card{padding-left:2rem;padding-right:2rem;padding-top:1rem;padding-bottom:1rem}}.card-title-gray{padding-bottom:1.5rem;text-align:center;font-size:1.125rem;line-height:1.75rem;font-weight:700;--tw-text-opacity:1;color:rgba(107, 114, 128, var(--tw-text-opacity))}.card-items{margin-bottom:1.5rem}@media(min-width: 768px){.card-items{display:flex;align-items:center}}.widget-descr-gray-left{display:block;align-content:center;padding-right:1rem;font-weight:700;--tw-text-opacity:1;color:rgba(107, 114, 128, var(--tw-text-opacity))}@media(min-width: 768px){.widget-descr-gray-left{text-align:left}}.fixed{position:fixed}.m-0{margin:0px}.mx-2{margin-left:0.5rem;margin-right:0.5rem}.my-2{margin-top:0.5rem;margin-bottom:0.5rem}.mr-2{margin-right:0.5rem}.block{display:block}.table{display:table}.grid{display:grid}.h-10{height:2.5rem}.w-11\/12{width:91.666667%}.w-full{width:100%}.transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes spin{to{transform:rotate(360deg)}}@keyframes spin{to{transform:rotate(360deg)}}@-webkit-keyframes ping{75%,100%{transform:scale(2);opacity:0}}@keyframes ping{75%,100%{transform:scale(2);opacity:0}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,100%{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(0.8,0,1,1);animation-timing-function:cubic-bezier(0.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,0.2,1);animation-timing-function:cubic-bezier(0,0,0.2,1)}}@keyframes bounce{0%,100%{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(0.8,0,1,1);animation-timing-function:cubic-bezier(0.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,0.2,1);animation-timing-function:cubic-bezier(0,0,0.2,1)}}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr))}.place-items-center{place-items:center}.content-center{align-content:center}.rounded{border-radius:0.25rem}.rounded-lg{border-radius:0.5rem}.border-2{border-width:2px}.border-gray-200{--tw-border-opacity:1;border-color:rgba(229, 231, 235, var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(249, 250, 251, var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(243, 244, 246, var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(229, 231, 235, var(--tw-bg-opacity))}.bg-indigo-500{--tw-bg-opacity:1;background-color:rgba(99, 102, 241, var(--tw-bg-opacity))}.hover\:bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgba(67, 56, 202, var(--tw-bg-opacity))}.focus\:bg-white:focus{--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity))}.bg-cover{background-size:cover}.p-2{padding:0.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-top:0.25rem;padding-bottom:0.25rem}.py-2{padding-top:0.5rem;padding-bottom:0.5rem}.pt-16{padding-top:4rem}.pr-4{padding-right:1rem}.text-center{text-align:center}.text-right{text-align:right}.text-sm{font-size:0.875rem;line-height:1.25rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.font-semibold{font-weight:600}.font-bold{font-weight:700}.leading-tight{line-height:1.25}.text-white{--tw-text-opacity:1;color:rgba(255, 255, 255, var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(107, 114, 128, var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(55, 65, 81, var(--tw-text-opacity))}*,::before,::after{--tw-shadow:0 0 #0000}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}*,::before,::after{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59, 130, 246, 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000)}.focus\:ring-indigo-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(129, 140, 248, var(--tw-ring-opacity))}#menu__toggle{opacity:0}#menu__toggle:checked~.menu__btn>span{transform:rotate(45deg)}#menu__toggle:checked~.menu__btn>span::before{top:0;transform:rotate(0)}#menu__toggle:checked~.menu__btn>span::after{top:0;transform:rotate(90deg)}#menu__toggle:checked~.menu__box{visibility:visible;left:0}#menu__toggle:checked~.menu__main{margin-left:150px;transition-duration:0.25s}.menu__btn{display:flex;align-items:center;position:fixed;z-index:1;top:10px;left:20px;width:20px;height:20px;cursor:pointer}.menu__btn>span,.menu__btn>span::before,.menu__btn>span::after{display:block;position:absolute;width:100%;height:2px;background-color:#616161;transition-duration:0.25s}.menu__btn>span::before{content:"";top:-8px}.menu__btn>span::after{content:"";top:8px}.menu__box{display:block;position:fixed;visibility:hidden;top:0;left:-100%;width:150px;height:100%;margin:0;padding:80px 0;list-style:none;background-color:#eceff1;box-shadow:1px 0px 6px rgba(0, 0, 0, 0.2);transition-duration:0.25s}.menu__ham{position:fixed}.menu__item{display:block;padding:12px 24px;color:rgba(51, 51, 51, 0.788);font-family:"Roboto", sans-serif;font-size:15px;font-weight:600;text-decoration:none;transition-duration:0.25s}.menu__item:hover{background-color:#cfd8dc}.upper__bar{background-color:rgba(51, 51, 51, 0.144);height:70px;position:fixed;z-index:-1;top:0px;left:0;width:100%;margin:0;padding:0;box-shadow:1px 0px 3px rgba(0, 0, 0, 0.2)}input[type="date"]::-webkit-calendar-picker-indicator{margin-left:5px;margin-right:-8px}input[type="time"]::-webkit-calendar-picker-indicator{margin-left:5px;margin-right:-8px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{margin-left:7px;margin-right:-6px;width:30px;height:30px;opacity:1}@media(min-width: 640px){.sm\:w-8\/12{width:66.666667%}.sm\:grid-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr))}.sm\:p-2{padding:0.5rem}}@media(min-width: 768px){.md\:flex{display:flex}.md\:w-1\/3{width:33.333333%}.md\:w-2\/3{width:66.666667%}.md\:w-6\/12{width:50%}.md\:items-center{align-items:center}.md\:p-2{padding:0.5rem}}@media(min-width: 1024px){.lg\:w-1\/3{width:33.333333%}.lg\:w-2\/3{width:66.666667%}.lg\:w-5\/12{width:41.666667%}.lg\:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}.lg\:p-2{padding:0.5rem}}@media(min-width: 1280px){.xl\:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}.xl\:px-8{padding-left:2rem;padding-right:2rem}.xl\:py-4{padding-top:1rem;padding-bottom:1rem}}@media(min-width: 1536px){.\32xl\:w-1\/3{width:33.333333%}.\32xl\:w-2\/3{width:66.666667%}.\32xl\:w-4\/12{width:33.333333%}.\32xl\:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}.\32xl\:px-8{padding-left:2rem;padding-right:2rem}.\32xl\:py-4{padding-top:1rem;padding-bottom:1rem}} \ No newline at end of file + monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}button,[type='button']{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}button{background-color:transparent;background-image:none}fieldset{margin:0;padding:0}ol,ul{list-style:none;margin:0;padding:0}html{font-family:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";line-height:1.5}body{font-family:inherit;line-height:inherit}*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}pre,code,kbd,samp{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}*,::before,::after{--tw-border-opacity:1;border-color:rgba(229, 231, 235, var(--tw-border-opacity))}.cards-grid{display:grid;grid-template-columns:repeat(1, minmax(0, 1fr));justify-items:center;gap:1rem}@media(min-width: 640px){.cards-grid{grid-template-columns:repeat(2, minmax(0, 1fr))}}@media(min-width: 1024px){.cards-grid{grid-template-columns:repeat(3, minmax(0, 1fr))}}@media(min-width: 1280px){.cards-grid{grid-template-columns:repeat(3, minmax(0, 1fr))}}@media(min-width: 1536px){.cards-grid{grid-template-columns:repeat(3, minmax(0, 1fr))}}.cards-grid-inline{display:grid;grid-template-columns:repeat(1, minmax(0, 1fr));justify-items:center}.card{width:100%;border-radius:0.5rem;--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity));padding:0.5rem;--tw-shadow:0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}@media(min-width: 640px){.card{padding:0.5rem}}@media(min-width: 768px){.card{padding:0.5rem}}@media(min-width: 1024px){.card{padding:0.5rem;--tw-shadow:0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}}@media(min-width: 1280px){.card{padding-left:2rem;padding-right:2rem;padding-top:1rem;padding-bottom:1rem}}@media(min-width: 1536px){.card{padding-left:2rem;padding-right:2rem;padding-top:1rem;padding-bottom:1rem}}.card-header{padding-bottom:1rem;text-align:center;font-size:1.125rem;line-height:1.75rem;font-weight:700;--tw-text-opacity:1;color:rgba(107, 114, 128, var(--tw-text-opacity))}.card-items-psn{margin-bottom:1rem;display:flex;height:2rem;align-items:center}.widget-descr-width{width:66.666667%}.widget-descr-style{padding-right:1rem;font-weight:700;--tw-text-opacity:1;color:rgba(107, 114, 128, var(--tw-text-opacity))}.widget-width{display:flex;width:33.333333%;justify-content:flex-end}.widget-input{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;align-content:center;border-radius:0.25rem;border-width:2px;--tw-border-opacity:1;border-color:rgba(229, 231, 235, var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgba(229, 231, 235, var(--tw-bg-opacity))}.widget-input:focus{--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity))}.widget-input{padding-top:0.25rem;padding-bottom:0.25rem;padding-right:1rem;text-align:right;line-height:1.25;--tw-text-opacity:1;color:rgba(55, 65, 81, var(--tw-text-opacity))}.widget-input:focus{outline:2px solid transparent;outline-offset:2px}.json-input{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;align-content:center;border-radius:0.25rem;border-width:2px;--tw-border-opacity:1;border-color:rgba(229, 231, 235, var(--tw-border-opacity))}.json-input:focus{--tw-border-opacity:1;border-color:rgba(99, 102, 241, var(--tw-border-opacity))}.json-input{--tw-bg-opacity:1;background-color:rgba(229, 231, 235, var(--tw-bg-opacity))}.json-input:focus{--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity))}.json-input{padding-top:0.25rem;padding-bottom:0.25rem;padding-right:1rem;line-height:1.25;--tw-text-opacity:1;color:rgba(55, 65, 81, var(--tw-text-opacity))}.json-input:focus{outline:2px solid transparent;outline-offset:2px}.widget-anydata-style{text-align:center;font-weight:700;--tw-text-opacity:1;color:rgba(107, 114, 128, var(--tw-text-opacity))}.table-head-element{width:25%;overflow-wrap:break-word;border-width:1px;--tw-border-opacity:1;border-color:rgba(209, 213, 219, var(--tw-border-opacity));text-align:center;font-weight:700;--tw-text-opacity:1;color:rgba(107, 114, 128, var(--tw-text-opacity))}.table-body-element{width:25%;overflow-wrap:break-word;border-width:1px;--tw-border-opacity:1;border-color:rgba(209, 213, 219, var(--tw-border-opacity));text-align:center}.table-input{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;align-content:center;border-width:2px;--tw-border-opacity:1;border-color:rgba(229, 231, 235, var(--tw-border-opacity))}.table-input:focus{--tw-border-opacity:1;border-color:rgba(99, 102, 241, var(--tw-border-opacity))}.table-input{--tw-bg-opacity:1;background-color:rgba(243, 244, 246, var(--tw-bg-opacity))}.table-input:focus{--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity))}.table-input{text-align:center;line-height:1.25;--tw-text-opacity:1;color:rgba(55, 65, 81, var(--tw-text-opacity))}.table-input:focus{outline:2px solid transparent;outline-offset:2px}.long-button{margin-top:1rem;display:flex;height:2rem;width:100%;align-content:center;justify-content:center;overflow-wrap:break-word;border-radius:0.25rem;border-width:1px;--tw-border-opacity:1;border-color:rgba(209, 213, 219, var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgba(219, 234, 254, var(--tw-bg-opacity))}.long-button:hover{--tw-bg-opacity:1;background-color:rgba(191, 219, 254, var(--tw-bg-opacity))}.long-button{font-weight:700;--tw-text-opacity:1;color:rgba(107, 114, 128, var(--tw-text-opacity))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.top-1{top:0.25rem}.left-1{left:0.25rem}.m-0{margin:0px}.mt-4{margin-top:1rem}.mb-4{margin-bottom:1rem}.block{display:block}.flex{display:flex}.table{display:table}.grid{display:grid}.h-4{height:1rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-10{height:2.5rem}.w-4{width:1rem}.w-8{width:2rem}.w-10{width:2.5rem}.w-1\/4{width:25%}.w-full{width:100%}.table-fixed{table-layout:fixed}.transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes spin{to{transform:rotate(360deg)}}@keyframes spin{to{transform:rotate(360deg)}}@-webkit-keyframes ping{75%,100%{transform:scale(2);opacity:0}}@keyframes ping{75%,100%{transform:scale(2);opacity:0}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,100%{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(0.8,0,1,1);animation-timing-function:cubic-bezier(0.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,0.2,1);animation-timing-function:cubic-bezier(0,0,0.2,1)}}@keyframes bounce{0%,100%{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(0.8,0,1,1);animation-timing-function:cubic-bezier(0.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,0.2,1);animation-timing-function:cubic-bezier(0,0,0.2,1)}}.cursor-pointer{cursor:pointer}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr))}.content-center{align-content:center}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.gap-4{gap:1rem}.break-words{overflow-wrap:break-word}.rounded{border-radius:0.25rem}.rounded-lg{border-radius:0.5rem}.rounded-full{border-radius:9999px}.border-2{border-width:2px}.border{border-width:1px}.border-gray-200{--tw-border-opacity:1;border-color:rgba(229, 231, 235, var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(209, 213, 219, var(--tw-border-opacity))}.border-red-500{--tw-border-opacity:1;border-color:rgba(239, 68, 68, var(--tw-border-opacity))}.focus\:border-indigo-500:focus{--tw-border-opacity:1;border-color:rgba(99, 102, 241, var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(249, 250, 251, var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(243, 244, 246, var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(229, 231, 235, var(--tw-bg-opacity))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgba(75, 85, 99, var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgba(254, 226, 226, var(--tw-bg-opacity))}.bg-red-400{--tw-bg-opacity:1;background-color:rgba(248, 113, 113, var(--tw-bg-opacity))}.bg-green-100{--tw-bg-opacity:1;background-color:rgba(209, 250, 229, var(--tw-bg-opacity))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgba(219, 234, 254, var(--tw-bg-opacity))}.bg-indigo-500{--tw-bg-opacity:1;background-color:rgba(99, 102, 241, var(--tw-bg-opacity))}.hover\:bg-blue-200:hover{--tw-bg-opacity:1;background-color:rgba(191, 219, 254, var(--tw-bg-opacity))}.hover\:bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgba(67, 56, 202, var(--tw-bg-opacity))}.focus\:bg-white:focus{--tw-bg-opacity:1;background-color:rgba(255, 255, 255, var(--tw-bg-opacity))}.bg-cover{background-size:cover}.p-2{padding:0.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.py-1{padding-top:0.25rem;padding-bottom:0.25rem}.py-2{padding-top:0.5rem;padding-bottom:0.5rem}.pt-8{padding-top:2rem}.pr-4{padding-right:1rem}.text-center{text-align:center}.text-lg{font-size:1.125rem;line-height:1.75rem}.font-semibold{font-weight:600}.font-bold{font-weight:700}.leading-tight{line-height:1.25}.text-black{--tw-text-opacity:1;color:rgba(0, 0, 0, var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgba(255, 255, 255, var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(107, 114, 128, var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(55, 65, 81, var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgba(239, 68, 68, var(--tw-text-opacity))}.text-green-500{--tw-text-opacity:1;color:rgba(16, 185, 129, var(--tw-text-opacity))}*,::before,::after{--tw-shadow:0 0 #0000}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}*,::before,::after{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59, 130, 246, 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000)}.focus\:ring-indigo-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(129, 140, 248, var(--tw-ring-opacity))}.transition{transition-property:background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;transition-property:background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;transition-property:background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}#menu__toggle{opacity:0}#menu__toggle:checked~.menu__btn>span{transform:rotate(45deg)}#menu__toggle:checked~.menu__btn>span::before{top:0;transform:rotate(0)}#menu__toggle:checked~.menu__btn>span::after{top:0;transform:rotate(90deg)}#menu__toggle:checked~.menu__box{visibility:visible;left:0}#menu__toggle:checked~.menu__main{margin-left:150px;transition-duration:0.25s}.menu__btn{display:flex;align-items:center;position:fixed;z-index:1;top:10px;left:20px;width:20px;height:20px;cursor:pointer}.menu__btn>span,.menu__btn>span::before,.menu__btn>span::after{display:block;position:absolute;width:100%;height:2px;background-color:#616161;transition-duration:0.25s}.menu__btn>span::before{content:"";top:-8px}.menu__btn>span::after{content:"";top:8px}.menu__box{display:block;position:fixed;visibility:hidden;top:0;left:-100%;width:150px;height:100%;margin:0;padding:80px 0;list-style:none;background-color:#eceff1;box-shadow:1px 0px 6px rgba(0, 0, 0, 0.2);transition-duration:0.25s}.menu__item{display:block;padding:12px 24px;color:rgba(51, 51, 51, 0.788);font-family:"Roboto", sans-serif;font-size:15px;font-weight:600;text-decoration:none;transition-duration:0.25s}.menu__item:hover{background-color:#cfd8dc}.upper__bar{background-color:rgba(51, 51, 51, 0.144);height:70px;position:fixed;z-index:-1;top:0px;left:0;width:100%;margin:0;padding:0;box-shadow:1px 0px 3px rgba(0, 0, 0, 0.2)}input[type="date"]::-webkit-calendar-picker-indicator{margin-left:5px;margin-right:-8px}input[type="time"]::-webkit-calendar-picker-indicator{margin-left:5px;margin-right:-8px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{margin-left:7px;margin-right:-6px;width:30px;height:30px;opacity:1}input:checked~.dot{transform:translateX(100%)}@media(min-width: 640px){.sm\:grid-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr))}.sm\:p-2{padding:0.5rem}}@media(min-width: 768px){.md\:p-2{padding:0.5rem}}@media(min-width: 1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}.lg\:p-2{padding:0.5rem}}@media(min-width: 1280px){.xl\:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}.xl\:px-8{padding-left:2rem;padding-right:2rem}.xl\:py-4{padding-top:1rem;padding-bottom:1rem}}@media(min-width: 1536px){.\32xl\:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}.\32xl\:px-8{padding-left:2rem;padding-right:2rem}.\32xl\:py-4{padding-top:1rem;padding-bottom:1rem}} \ No newline at end of file diff --git a/data_svelte/build/bundle.js b/data_svelte/build/bundle.js index 4398b6b1..ab6ec331 100644 --- a/data_svelte/build/bundle.js +++ b/data_svelte/build/bundle.js @@ -1,2 +1,2 @@ -var app=function(){"use strict";function t(){}function e(t){return t()}function n(){return Object.create(null)}function r(t){t.forEach(e)}function c(t){return"function"==typeof t}function i(t,e){return t!=t?e==e:t!==e||t&&"object"==typeof t||"function"==typeof t}function o(t,e,n,r){if(t){const c=a(t,e,n,r);return t[0](c)}}function a(t,e,n,r){return t[1]&&r?function(t,e){for(const n in e)t[n]=e[n];return t}(n.ctx.slice(),t[1](r(e))):n.ctx}function l(t,e,n,r){if(t[2]&&r){const c=t[2](r(n));if(void 0===e.dirty)return c;if("object"==typeof c){const t=[],n=Math.max(e.dirty.length,c.length);for(let r=0;r32){const e=[],n=t.ctx.length/32;for(let t=0;tt.removeEventListener(e,n,r)}function y(t,e,n){null==n?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function x(t){return""===t?null:+t}function v(t,e){e=""+e,t.wholeText!==e&&(t.data=e)}function _(t,e){t.value=null==e?"":e}let k;function S(t){k=t}function E(){if(!k)throw new Error("Function called outside component initialization");return k}function O(t){E().$$.on_mount.push(t)}function H(t){return E().$$.context.get(t)}const N=[],A=[],M=[],C=[],R=Promise.resolve();let z=!1;function T(){z||(z=!0,R.then(j))}function q(){return T(),R}function I(t){M.push(t)}function F(t){C.push(t)}let L=!1;const W=new Set;function j(){if(!L){L=!0;do{for(let t=0;t{J.delete(t),r&&(n&&t.d(1),r())})),t.o(e)}}function G(t,e,n){const r=t.$$.props[e];void 0!==r&&(t.$$.bound[r]=n,n(t.$$.ctx[r]))}function Q(t){t&&t.c()}function U(t,n,i,o){const{fragment:a,on_mount:l,on_destroy:s,after_update:u}=t.$$;a&&a.m(n,i),o||I((()=>{const n=l.map(e).filter(c);s?s.push(...n):r(n),t.$$.on_mount=[]})),u.forEach(I)}function V(t,e){const n=t.$$;null!==n.fragment&&(r(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function X(e,c,i,o,a,l,s,u=[-1]){const p=k;S(e);const f=e.$$={fragment:null,ctx:null,props:l,update:t,not_equal:a,bound:n(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(p?p.$$.context:c.context||[]),callbacks:n(),dirty:u,skip_bound:!1,root:c.target||p.$$.root};s&&s(f.root);let m=!1;if(f.ctx=i?i(e,c.props||{},((t,n,...r)=>{const c=r.length?r[0]:n;return f.ctx&&a(f.ctx[t],f.ctx[t]=c)&&(!f.skip_bound&&f.bound[t]&&f.bound[t](c),m&&function(t,e){-1===t.$$.dirty[0]&&(N.push(t),T(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<{const t=n.indexOf(e);-1!==t&&n.splice(t,1)}}$set(t){var e;this.$$set&&(e=t,0!==Object.keys(e).length)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}}const et=[];function nt(e,n=t){let r;const c=new Set;function o(t){if(i(e,t)&&(e=t,r)){const t=!et.length;for(const t of c)t[1](),et.push(t,e);if(t){for(let t=0;t{c.delete(l),0===c.size&&(r(),r=null)}}}}function rt(t,e=!1){return(t=t.slice(t.startsWith("/#")?2:0,t.endsWith("/*")?-2:void 0)).startsWith("/")||(t="/"+t),"/"===t&&(t=""),e&&!t.endsWith("/")&&(t+="/"),t}function ct(t,e,n){if(""===n)return t;if("/"===n[0])return n;let r=t=>t.split("/").filter((t=>""!==t)),c=r(t);return"/"+(e?r(e):[]).map(((t,e)=>c[e])).join("/")+"/"+n}function it(t,e,n,r){let c=[e,"data-"+e].reduce(((e,r)=>{let c=t.getAttribute(r);return n&&t.removeAttribute(r),null===c?e:c}),!1);return!r&&""===c||(c||r||!1)}function ot(t){let e=t.split("&").map((t=>t.split("="))).reduce(((t,e)=>{let n=e[0];if(!n)return t;let r=!(e.length>1)||e[e.length-1];return"string"==typeof r&&r.includes(",")&&(r=r.split(",")),void 0===t[n]?t[n]=[r]:t[n].push(r),t}),{});return Object.entries(e).reduce(((t,e)=>(t[e[0]]=e[1].length>1?e[1]:e[1][0],t)),{})}var at,lt,st={HISTORY:1,HASH:2,MEMORY:3,OFF:4,run:function(t,e,n,r){return 1===t?e&&e():2===t?n&&n():r&&r()},getDeafault:function(){return window&&"srcdoc"!==window.location.pathname?1:3}},ut=function(){let t,e=st.getDeafault(),n=n=>t&&t(pt(e));function r(t){t&&(e=t),window.onhashchange=window.onpopstate=lt=null,e!==st.OFF&&st.run(e,(t=>window.onpopstate=n),(t=>window.onhashchange=n))&&n()}return{mode:t=>r(t),get:t=>pt(e),go(t,r){(function(t,e,n){let r=t=>history[n?"replaceState":"pushState"]({},"",t);st.run(t,(t=>r(e)),(t=>r(`#${e}`)),(t=>lt=e))})(e,t,r),n()},start(e){t=e,r()},stop(){t=null,r(st.OFF)}}}();function pt(t){let e=at,n=at=st.run(t,(t=>window.location.pathname+window.location.search),(t=>String(window.location.hash.slice(1)||"/")),(t=>lt||"/")),r=n.match(/^([^?#]+)(?:\?([^#]+))?(?:\#(.+))?$/);return{url:n,from:e,path:r[1]||"",query:ot(r[2]||""),hash:r[3]||""}}function ft(t){let e=H("tinro");e&&(e.exact||e.fallback)&&function(t){throw new Error("[Tinro] "+t)}(`${t.fallback?"":``} can't be inside ${e.fallback?"":` with exact path`}`);let n=t.fallback?"fallbacks":"childs",r=nt({}),c={router:{},exact:!1,pattern:null,meta:{},parent:e,fallback:t.fallback,redirect:!1,firstmatch:!1,breadcrumb:null,matched:!1,childs:new Set,activeChilds:new Set,fallbacks:new Set,update(t){c.exact=!t.path.endsWith("/*"),c.pattern=rt(`${c.parent&&c.parent.pattern||""}${t.path}`),c.redirect=t.redirect,c.firstmatch=t.firstmatch,c.breadcrumb=t.breadcrumb,c.match()},register:()=>{if(c.parent)return c.parent[n].add(c),()=>{c.parent[n].delete(c),c.router.un&&c.router.un()}},show:()=>{t.onShow(),!c.fallback&&c.parent&&c.parent.activeChilds.add(c)},hide:()=>{t.onHide(),!c.fallback&&c.parent&&c.parent.activeChilds.delete(c)},match:async()=>{c.matched=!1;let{path:e,url:n,from:i,query:o}=c.router,a=function(t,e){t=rt(t,!0),e=rt(e,!0);let n=[],r={},c=!0,i=t.split("/").map((t=>t.startsWith(":")?(n.push(t.slice(1)),"([^\\/]+)"):t)).join("\\/"),o=e.match(new RegExp(`^${i}$`));return o||(c=!1,o=e.match(new RegExp(`^${i}`))),o?(n.forEach(((t,e)=>r[t]=o[e+1])),{exact:c,params:r,part:o[0].slice(0,-1)}):null}(c.pattern,e);if(!c.fallback&&a&&c.redirect&&(!c.exact||c.exact&&a.exact)){await q();let t=ct(e,c.parent&&c.parent.pattern,c.redirect);return mt.goto(t,!0)}if(c.meta=a&&{from:i,url:n,query:o,match:a.part,pattern:c.pattern,breadcrumbs:c.parent&&c.parent.meta&&c.parent.meta.breadcrumbs.slice()||[],params:a.params,subscribe:r.subscribe},c.breadcrumb&&c.meta&&c.meta.breadcrumbs.push({name:c.breadcrumb,path:a.part}),r.set(c.meta),!a||c.fallback||!(!c.exact||c.exact&&a.exact)||c.parent&&c.parent.firstmatch&&c.parent.matched?c.hide():(t.onMeta(c.meta),c.parent&&(c.parent.matched=!0),c.show()),await q(),a&&!c.fallback&&(c.childs.size>0&&0==c.activeChilds.size||0==c.childs.size&&c.fallbacks.size>0)){let t=c;for(;0==t.fallbacks.size;)if(t=t.parent,!t)return;t&&t.fallbacks.forEach((t=>{if(t.redirect){let e=ct("/",t.parent&&t.parent.pattern,t.redirect);mt.goto(e,!0)}else t.show()}))}}};return i="tinro",o=c,E().$$.context.set(i,o),O((()=>c.register())),c.router.un=mt.subscribe((t=>{c.router.path=t.path,c.router.url=t.url,c.router.query=t.query,c.router.from=t.from,null!==c.pattern&&c.match()})),c;var i,o}function dt(){return H("tinro").meta}var mt=function(){let{subscribe:t}=nt(ut.get(),(t=>{ut.start(t);let e=function(t){let e=e=>{let n=e.target.closest("a[href]"),r=n&&it(n,"target",!1,"_self"),c=n&&it(n,"tinro-ignore"),i=e.ctrlKey||e.metaKey||e.altKey||e.shiftKey;if("_self"==r&&!c&&!i&&n){let r=n.getAttribute("href").replace(/^\/#/,"");/^\/\/|^[a-zA-Z]+:/.test(r)||(e.preventDefault(),t(r.startsWith("/")?r:n.href.replace(window.location.origin,"")))}};return addEventListener("click",e),()=>removeEventListener("click",e)}(ut.go);return()=>{ut.stop(),e()}}));return{subscribe:t,goto:ut.go,params:$t,meta:dt,useHashNavigation:t=>ut.mode(t?st.HASH:st.HISTORY),mode:{hash:()=>ut.mode(st.HASH),history:()=>ut.mode(st.HISTORY),memory:()=>ut.mode(st.MEMORY)}}}();function $t(){return H("tinro").meta.params}const ht=t=>({params:2&t,meta:4&t}),gt=t=>({params:t[1],meta:t[2]});function bt(t){let e;const n=t[9].default,r=o(n,t,t[8],gt);return{c(){r&&r.c()},m(t,n){r&&r.m(t,n),e=!0},p(t,c){r&&r.p&&(!e||262&c)&&s(r,n,t,t[8],e?l(n,t[8],c,ht):u(t[8]),gt)},i(t){e||(P(r,t),e=!0)},o(t){Z(r,t),e=!1},d(t){r&&r.d(t)}}}function wt(t){let e,n,r=t[0]&&bt(t);return{c(){r&&r.c(),e=b()},m(t,c){r&&r.m(t,c),f(t,e,c),n=!0},p(t,[n]){t[0]?r?(r.p(t,n),1&n&&P(r,1)):(r=bt(t),r.c(),P(r,1),r.m(e.parentNode,e)):r&&(D(),Z(r,1,1,(()=>{r=null})),K())},i(t){n||(P(r),n=!0)},o(t){Z(r),n=!1},d(t){r&&r.d(t),t&&d(e)}}}function yt(t,e,n){let{$$slots:r={},$$scope:c}=e,{path:i="/*"}=e,{fallback:o=!1}=e,{redirect:a=!1}=e,{firstmatch:l=!1}=e,{breadcrumb:s=null}=e,u=!1,p={},f={};const d=ft({fallback:o,onShow(){n(0,u=!0)},onHide(){n(0,u=!1)},onMeta(t){n(2,f=t),n(1,p=f.params)}});return t.$$set=t=>{"path"in t&&n(3,i=t.path),"fallback"in t&&n(4,o=t.fallback),"redirect"in t&&n(5,a=t.redirect),"firstmatch"in t&&n(6,l=t.firstmatch),"breadcrumb"in t&&n(7,s=t.breadcrumb),"$$scope"in t&&n(8,c=t.$$scope)},t.$$.update=()=>{232&t.$$.dirty&&d.update({path:i,redirect:a,firstmatch:l,breadcrumb:s})},[u,p,f,i,o,a,l,s,c,r]}class xt extends tt{constructor(t){super(),X(this,t,yt,wt,i,{path:3,fallback:4,redirect:5,firstmatch:6,breadcrumb:7})}}function vt(t){let e,n,r,c,i;const a=t[2].default,m=o(a,t,t[1],null);return{c(){e=$("div"),n=$("h1"),r=h(t[0]),c=g(),m&&m.c(),y(n,"class","card-title-gray"),y(e,"class","card")},m(t,o){f(t,e,o),p(e,n),p(n,r),p(e,c),m&&m.m(e,null),i=!0},p(t,[e]){(!i||1&e)&&v(r,t[0]),m&&m.p&&(!i||2&e)&&s(m,a,t,t[1],i?l(a,t[1],e,null):u(t[1]),null)},i(t){i||(P(m,t),i=!0)},o(t){Z(m,t),i=!1},d(t){t&&d(e),m&&m.d(t)}}}function _t(t,e,n){let{$$slots:r={},$$scope:c}=e,{title:i}=e;return t.$$set=t=>{"title"in t&&n(0,i=t.title),"$$scope"in t&&n(1,c=t.$$scope)},[i,c,r]}class kt extends tt{constructor(t){super(),X(this,t,_t,vt,i,{title:0})}}function St(e){let n,i,o,a,l,s,u,m,b,x;return{c(){n=$("div"),i=$("div"),o=$("div"),a=$("label"),l=h(e[1]),s=g(),u=$("div"),m=$("input"),y(a,"class","descr-gray"),y(o,"class","md:w-1/3"),y(m,"class","widget-input-indigo"),y(m,"type","text"),y(u,"class","md:w-2/3"),y(i,"class","card-items"),y(n,"class","container")},m(t,r){f(t,n,r),p(n,i),p(i,o),p(o,a),p(a,l),p(i,s),p(i,u),p(u,m),_(m,e[0]),b||(x=[w(m,"input",e[2]),w(m,"change",(function(){c(te(e[0]))&&te(e[0]).apply(this,arguments)}))],b=!0)},p(t,[n]){e=t,2&n&&v(l,e[1]),1&n&&m.value!==e[0]&&_(m,e[0])},i:t,o:t,d(t){t&&d(n),b=!1,r(x)}}}function Et(t,e,n){let{title:r}=e,{value:c}=e;return t.$$set=t=>{"title"in t&&n(1,r=t.title),"value"in t&&n(0,c=t.value)},[c,r,function(){c=this.value,n(0,c)}]}class Ot extends tt{constructor(t){super(),X(this,t,Et,St,i,{title:1,value:0})}}function Ht(t){let e,n,i;return{c(){e=$("input"),y(e,"class","widget-input-indigo text-right"),y(e,"step","0.1"),y(e,"type","number")},m(r,o){f(r,e,o),_(e,t[0]),n||(i=[w(e,"change",(function(){c(te(t[3],t[2],t[0]))&&te(t[3],t[2],t[0]).apply(this,arguments)})),w(e,"input",t[5])],n=!0)},p(n,r){t=n,1&r&&x(e.value)!==t[0]&&_(e,t[0])},d(t){t&&d(e),n=!1,r(i)}}}function Nt(t){let e,n,i;return{c(){e=$("input"),y(e,"class","widget-input-indigo text-right"),y(e,"type","text")},m(r,o){f(r,e,o),_(e,t[0]),n||(i=[w(e,"change",(function(){c(te(t[3],t[2],t[0]))&&te(t[3],t[2],t[0]).apply(this,arguments)})),w(e,"input",t[6])],n=!0)},p(n,r){t=n,1&r&&e.value!==t[0]&&_(e,t[0])},d(t){t&&d(e),n=!1,r(i)}}}function At(t){let e,n,i;return{c(){e=$("input"),y(e,"class","widget-input-indigo text-right"),y(e,"type","date")},m(r,o){f(r,e,o),_(e,t[0]),n||(i=[w(e,"change",(function(){c(te(t[3],t[2],t[0]))&&te(t[3],t[2],t[0]).apply(this,arguments)})),w(e,"input",t[7])],n=!0)},p(n,r){t=n,1&r&&_(e,t[0])},d(t){t&&d(e),n=!1,r(i)}}}function Mt(t){let e,n,i;return{c(){e=$("input"),y(e,"class","widget-input-indigo text-right"),y(e,"type","time")},m(r,o){f(r,e,o),_(e,t[0]),n||(i=[w(e,"change",(function(){c(te(t[3],t[2],t[0]))&&te(t[3],t[2],t[0]).apply(this,arguments)})),w(e,"input",t[8])],n=!0)},p(n,r){t=n,1&r&&_(e,t[0])},d(t){t&&d(e),n=!1,r(i)}}}function Ct(e){let n,r,c,i,o,a,l,s,u,m=(e[1]?e[1]:"")+"",b="number"==e[4]&&Ht(e),w="text"==e[4]&&Nt(e),x="date"==e[4]&&At(e),_="time"==e[4]&&Mt(e);return{c(){n=$("div"),r=$("div"),c=$("label"),i=h(m),o=g(),a=$("div"),b&&b.c(),l=g(),w&&w.c(),s=g(),x&&x.c(),u=g(),_&&_.c(),y(c,"class","widget-descr-gray-left"),y(r,"class","md:w-2/3 lg:w-2/3 2xl:w-2/3"),y(a,"class","md:w-1/3 lg:w-1/3 2xl:w-1/3"),y(n,"class","card-items")},m(t,e){f(t,n,e),p(n,r),p(r,c),p(c,i),p(n,o),p(n,a),b&&b.m(a,null),p(a,l),w&&w.m(a,null),p(a,s),x&&x.m(a,null),p(a,u),_&&_.m(a,null)},p(t,[e]){2&e&&m!==(m=(t[1]?t[1]:"")+"")&&v(i,m),"number"==t[4]?b?b.p(t,e):(b=Ht(t),b.c(),b.m(a,l)):b&&(b.d(1),b=null),"text"==t[4]?w?w.p(t,e):(w=Nt(t),w.c(),w.m(a,s)):w&&(w.d(1),w=null),"date"==t[4]?x?x.p(t,e):(x=At(t),x.c(),x.m(a,u)):x&&(x.d(1),x=null),"time"==t[4]?_?_.p(t,e):(_=Mt(t),_.c(),_.m(a,null)):_&&(_.d(1),_=null)},i:t,o:t,d(t){t&&d(n),b&&b.d(),w&&w.d(),x&&x.d(),_&&_.d()}}}function Rt(t,e,n){let{value:r}=e,{descr:c}=e,{topic:i}=e,{ws:o}=e,{type:a}=e;return t.$$set=t=>{"value"in t&&n(0,r=t.value),"descr"in t&&n(1,c=t.descr),"topic"in t&&n(2,i=t.topic),"ws"in t&&n(3,o=t.ws),"type"in t&&n(4,a=t.type)},[r,c,i,o,a,function(){r=x(this.value),n(0,r)},function(){r=this.value,n(0,r)},function(){r=this.value,n(0,r)},function(){r=this.value,n(0,r)}]}class zt extends tt{constructor(t){super(),X(this,t,Rt,Ct,i,{value:0,descr:1,topic:2,ws:3,type:4})}}function Tt(t,e,n){const r=t.slice();return r[7]=e[n],r[8]=e,r[9]=n,r}function qt(t,e,n){const r=t.slice();return r[7]=e[n],r[10]=e,r[9]=n,r}function It(t,e,n){const r=t.slice();return r[7]=e[n],r[11]=e,r[9]=n,r}function Ft(t){let e,n,r;function c(e){t[3](e,t[7])}let i={descr:t[7].descr,topic:t[7].topic,ws:1,type:t[7].type};return void 0!==t[7].status&&(i.value=t[7].status),e=new zt({props:i}),A.push((()=>G(e,"value",c))),{c(){Q(e.$$.fragment)},m(t,n){U(e,t,n),r=!0},p(r,c){t=r;const i={};1&c&&(i.descr=t[7].descr),1&c&&(i.topic=t[7].topic),1&c&&(i.type=t[7].type),!n&&1&c&&(n=!0,i.value=t[7].status,F((()=>n=!1))),e.$set(i)},i(t){r||(P(e.$$.fragment,t),r=!0)},o(t){Z(e.$$.fragment,t),r=!1},d(t){V(e,t)}}}function Lt(t){let e,n,r="input"===t[7].widget&&Ft(t);return{c(){r&&r.c(),e=b()},m(t,c){r&&r.m(t,c),f(t,e,c),n=!0},p(t,n){"input"===t[7].widget?r?(r.p(t,n),1&n&&P(r,1)):(r=Ft(t),r.c(),P(r,1),r.m(e.parentNode,e)):r&&(D(),Z(r,1,1,(()=>{r=null})),K())},i(t){n||(P(r),n=!0)},o(t){Z(r),n=!1},d(t){r&&r.d(t),t&&d(e)}}}function Wt(t){let e,n,r=t[0],c=[];for(let e=0;eZ(c[t],1,1,(()=>{c[t]=null}));return{c(){for(let t=0;tG(e,"value",c))),{c(){Q(e.$$.fragment)},m(t,n){U(e,t,n),r=!0},p(r,c){t=r;const i={};1&c&&(i.descr=t[7].descr),1&c&&(i.topic=t[7].topic),1&c&&(i.type=t[7].type),!n&&1&c&&(n=!0,i.value=t[7].status,F((()=>n=!1))),e.$set(i)},i(t){r||(P(e.$$.fragment,t),r=!0)},o(t){Z(e.$$.fragment,t),r=!1},d(t){V(e,t)}}}function Bt(t){let e,n,r="input"===t[7].widget&&jt(t);return{c(){r&&r.c(),e=b()},m(t,c){r&&r.m(t,c),f(t,e,c),n=!0},p(t,n){"input"===t[7].widget?r?(r.p(t,n),1&n&&P(r,1)):(r=jt(t),r.c(),P(r,1),r.m(e.parentNode,e)):r&&(D(),Z(r,1,1,(()=>{r=null})),K())},i(t){n||(P(r),n=!0)},o(t){Z(r),n=!1},d(t){r&&r.d(t),t&&d(e)}}}function Jt(t){let e,n,r=t[0],c=[];for(let e=0;eZ(c[t],1,1,(()=>{c[t]=null}));return{c(){for(let t=0;tG(e,"value",c))),{c(){Q(e.$$.fragment)},m(t,n){U(e,t,n),r=!0},p(r,c){t=r;const i={};1&c&&(i.descr=t[7].descr),1&c&&(i.topic=t[7].topic),1&c&&(i.type=t[7].type),!n&&1&c&&(n=!0,i.value=t[7].status,F((()=>n=!1))),e.$set(i)},i(t){r||(P(e.$$.fragment,t),r=!0)},o(t){Z(e.$$.fragment,t),r=!1},d(t){V(e,t)}}}function Dt(t){let e,n,r="input"===t[7].widget&&Yt(t);return{c(){r&&r.c(),e=b()},m(t,c){r&&r.m(t,c),f(t,e,c),n=!0},p(t,n){"input"===t[7].widget?r?(r.p(t,n),1&n&&P(r,1)):(r=Yt(t),r.c(),P(r,1),r.m(e.parentNode,e)):r&&(D(),Z(r,1,1,(()=>{r=null})),K())},i(t){n||(P(r),n=!0)},o(t){Z(r),n=!1},d(t){r&&r.d(t),t&&d(e)}}}function Kt(t){let e,n,r=t[0],c=[];for(let e=0;eZ(c[t],1,1,(()=>{c[t]=null}));return{c(){for(let t=0;t \n Включить светодиод статуса подключения',a=g(),l=$("div"),l.innerHTML='
',y(o,"class","card-items"),y(l,"class","md:flex md:items-center")},m(t,e){U(n,t,e),f(t,r,e),U(c,t,e),f(t,i,e),f(t,o,e),f(t,a,e),f(t,l,e),s=!0},p:t,i(t){s||(P(n.$$.fragment,t),P(c.$$.fragment,t),s=!0)},o(t){Z(n.$$.fragment,t),Z(c.$$.fragment,t),s=!1},d(t){V(n,t),t&&d(r),V(c,t),t&&d(i),t&&d(o),t&&d(a),t&&d(l)}}}function Qt(t){let e,n;return e=new kt({props:{title:"Подключение к WiFi роутеру",$$slots:{default:[Gt]},$$scope:{ctx:t}}}),{c(){Q(e.$$.fragment)},m(t,r){U(e,t,r),n=!0},p(t,n){const r={};8192&n&&(r.$$scope={dirty:n,ctx:t}),e.$set(r)},i(t){n||(P(e.$$.fragment,t),n=!0)},o(t){Z(e.$$.fragment,t),n=!1},d(t){V(e,t)}}}function Ut(t){let e,n,r,c;return{c(){e=$("textarea"),y(e,"rows","10"),y(e,"class","widget-input-indigo w-full"),y(e,"id","text1"),e.value=n=t[1](JSON.stringify(t[0]))},m(n,i){f(n,e,i),r||(c=w(e,"input",t[2]),r=!0)},p(t,r){1&r&&n!==(n=t[1](JSON.stringify(t[0])))&&(e.value=n)},d(t){t&&d(e),r=!1,c()}}}function Vt(t){let e,n,r;return n=new kt({props:{title:"Редактор JSON",$$slots:{default:[Ut]},$$scope:{ctx:t}}}),{c(){e=$("div"),Q(n.$$.fragment),y(e,"class","cards-grid")},m(t,c){f(t,e,c),U(n,e,null),r=!0},p(t,e){const r={};8193&e&&(r.$$scope={dirty:e,ctx:t}),n.$set(r)},i(t){r||(P(n.$$.fragment,t),r=!0)},o(t){Z(n.$$.fragment,t),r=!1},d(t){t&&d(e),V(n)}}}function Xt(t){let e,n,r,c,i,o,a,l,s,u,m,h,b,w,x,v,_,k,S,E,O,H,N,A,M,C,R,z,T,q,I,F,L,W,j,B,J;return q=new xt({props:{path:"/",$$slots:{default:[Pt]},$$scope:{ctx:t}}}),F=new xt({props:{path:"/config",$$slots:{default:[Zt]},$$scope:{ctx:t}}}),W=new xt({props:{path:"/connection",$$slots:{default:[Qt]},$$scope:{ctx:t}}}),B=new xt({props:{path:"/utilities",$$slots:{default:[Vt]},$$scope:{ctx:t}}}),{c(){e=$("main"),n=$("div"),n.innerHTML='',r=g(),c=$("ul"),i=$("input"),o=g(),a=$("label"),a.innerHTML="",l=g(),s=$("ul"),u=$("li"),m=$("a"),m.textContent="Управление",h=g(),b=$("li"),w=$("a"),w.textContent="Конфигуратор",x=g(),v=$("li"),_=$("a"),_.textContent="Подключение",k=g(),S=$("li"),E=$("a"),E.textContent="Утилиты",O=g(),H=$("li"),N=$("a"),N.textContent="Лог",A=g(),M=$("li"),C=$("a"),C.textContent="О проекте",R=g(),z=$("ul"),T=$("div"),Q(q.$$.fragment),I=g(),Q(F.$$.fragment),L=g(),Q(W.$$.fragment),j=g(),Q(B.$$.fragment),y(n,"class","fixed m-0 h-10 w-full bg-gray-100 shadow-md"),y(i,"id","menu__toggle"),y(i,"type","checkbox"),y(a,"class","menu__btn"),y(a,"for","menu__toggle"),y(m,"class","menu__item"),y(m,"href","/"),y(w,"class","menu__item"),y(w,"href","/config"),y(_,"class","menu__item"),y(_,"href","/connection"),y(E,"class","menu__item"),y(E,"href","/utilities"),y(N,"class","menu__item"),y(N,"href","/log"),y(C,"class","menu__item"),y(C,"href","/about"),y(s,"class","menu__box"),y(c,"class","menu__ham"),y(T,"class","bg-cover bg-gray-50 pt-16"),y(z,"class","menu__main")},m(t,d){f(t,e,d),p(e,n),p(e,r),p(e,c),p(c,i),p(c,o),p(c,a),p(c,l),p(c,s),p(s,u),p(u,m),p(s,h),p(s,b),p(b,w),p(s,x),p(s,v),p(v,_),p(s,k),p(s,S),p(S,E),p(s,O),p(s,H),p(H,N),p(s,A),p(s,M),p(M,C),p(e,R),p(e,z),p(z,T),U(q,T,null),p(T,I),U(F,T,null),p(T,L),U(W,T,null),p(T,j),U(B,T,null),J=!0},p(t,[e]){const n={};8193&e&&(n.$$scope={dirty:e,ctx:t}),q.$set(n);const r={};8192&e&&(r.$$scope={dirty:e,ctx:t}),F.$set(r);const c={};8192&e&&(c.$$scope={dirty:e,ctx:t}),W.$set(c);const i={};8193&e&&(i.$$scope={dirty:e,ctx:t}),B.$set(i)},i(t){J||(P(q.$$.fragment,t),P(F.$$.fragment,t),P(W.$$.fragment,t),P(B.$$.fragment,t),J=!0)},o(t){Z(q.$$.fragment,t),Z(F.$$.fragment,t),Z(W.$$.fragment,t),Z(B.$$.fragment,t),J=!1},d(t){t&&d(e),V(q),V(F),V(W),V(B)}}}function te(t,e,n){console.log(t,e,n)}function ee(t,e,n){mt.mode.hash(),O((async()=>{console.log("mounted")}));let r=[];return r=[{widget:"input",type:"time",status:"12:00",page:"Inputs",order:"3",descr:"Switch on boiler time",topic:"/prefix/00000-00003/temp3"},{widget:"input",type:"number",status:"30.5",after:"°С",page:"Inputs",order:"1",descr:"Boiler temperature",topic:"/prefix/00000-00001/temp1"},{widget:"input",type:"text",status:"Hello",page:"Inputs",order:"3",descr:"Massage to be send",topic:"/prefix/00000-00003/temp3"},{widget:"input",type:"date",status:"2021.09.15",page:"Inputs",order:"2",descr:"Switch on boiler date",topic:"/prefix/00000-00002/temp2"}],[r,t=>{try{t=JSON.stringify(JSON.parse(t),null,4)}catch(e){return t}return t=(t=t.replace(/&/g,"&").replace(//g,">")).replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,(function(t){return t}))},function(){n(0,r=JSON.parse(document.getElementById("text1").value))},function(e,c){t.$$.not_equal(c.status,e)&&(c.status=e,n(0,r))},function(e,c){t.$$.not_equal(c.status,e)&&(c.status=e,n(0,r))},function(e,c){t.$$.not_equal(c.status,e)&&(c.status=e,n(0,r))}]}return new class extends tt{constructor(t){super(),X(this,t,ee,Xt,i,{})}}({target:document.body,props:{name:"world"}})}(); +var app=function(){"use strict";function t(){}function e(t){return t()}function n(){return Object.create(null)}function r(t){t.forEach(e)}function s(t){return"function"==typeof t}function o(t,e){return t!=t?e==e:t!==e||t&&"object"==typeof t||"function"==typeof t}function a(e,n,r){e.$$.on_destroy.push(function(e,...n){if(null==e)return t;const r=e.subscribe(...n);return r.unsubscribe?()=>r.unsubscribe():r}(n,r))}function l(t,e,n,r){if(t){const s=i(t,e,n,r);return t[0](s)}}function i(t,e,n,r){return t[1]&&r?function(t,e){for(const n in e)t[n]=e[n];return t}(n.ctx.slice(),t[1](r(e))):n.ctx}function c(t,e,n,r){if(t[2]&&r){const s=t[2](r(n));if(void 0===e.dirty)return s;if("object"==typeof s){const t=[],n=Math.max(e.dirty.length,s.length);for(let r=0;r32){const e=[],n=t.ctx.length/32;for(let t=0;tt.removeEventListener(e,n,r)}function v(t,e,n){null==n?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function _(t){return""===t?null:+t}function k(t,e){e=""+e,t.wholeText!==e&&(t.data=e)}function S(t,e){t.value=null==e?"":e}function E(t,e){for(let n=0;n{K.delete(t),r&&(n&&t.d(1),r())})),t.o(e)}}function V(t,e,n){const r=t.$$.props[e];void 0!==r&&(t.$$.bound[r]=n,n(t.$$.ctx[r]))}function X(t){t&&t.c()}function tt(t,n,o,a){const{fragment:l,on_mount:i,on_destroy:c,after_update:u}=t.$$;l&&l.m(n,o),a||q((()=>{const n=i.map(e).filter(s);c?c.push(...n):r(n),t.$$.on_mount=[]})),u.forEach(q)}function et(t,e){const n=t.$$;null!==n.fragment&&(r(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function nt(e,s,o,a,l,i,c,u=[-1]){const d=P;N(e);const p=e.$$={fragment:null,ctx:null,props:i,update:t,not_equal:l,bound:n(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(s.context||(d?d.$$.context:[])),callbacks:n(),dirty:u,skip_bound:!1,root:s.target||d.$$.root};c&&c(p.root);let f=!1;if(p.ctx=o?o(e,s.props||{},((t,n,...r)=>{const s=r.length?r[0]:n;return p.ctx&&l(p.ctx[t],p.ctx[t]=s)&&(!p.skip_bound&&p.bound[t]&&p.bound[t](s),f&&function(t,e){-1===t.$$.dirty[0]&&(C.push(t),R(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<{const t=n.indexOf(e);-1!==t&&n.splice(t,1)}}$set(t){var e;this.$$set&&(e=t,0!==Object.keys(e).length)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}}const st=[];function ot(e,n=t){let r;const s=new Set;function a(t){if(o(e,t)&&(e=t,r)){const t=!st.length;for(const t of s)t[1](),st.push(t,e);if(t){for(let t=0;t{s.delete(i),0===s.size&&(r(),r=null)}}}}function at(t,e=!1){return(t=t.slice(t.startsWith("/#")?2:0,t.endsWith("/*")?-2:void 0)).startsWith("/")||(t="/"+t),"/"===t&&(t=""),e&&!t.endsWith("/")&&(t+="/"),t}function lt(t,e,n){if(""===n)return t;if("/"===n[0])return n;let r=t=>t.split("/").filter((t=>""!==t)),s=r(t);return"/"+(e?r(e):[]).map(((t,e)=>s[e])).join("/")+"/"+n}function it(t,e,n,r){let s=[e,"data-"+e].reduce(((e,r)=>{let s=t.getAttribute(r);return n&&t.removeAttribute(r),null===s?e:s}),!1);return!r&&""===s||(s||r||!1)}function ct(t){let e=t.split("&").map((t=>t.split("="))).reduce(((t,e)=>{let n=e[0];if(!n)return t;let r=!(e.length>1)||e[e.length-1];return"string"==typeof r&&r.includes(",")&&(r=r.split(",")),void 0===t[n]?t[n]=[r]:t[n].push(r),t}),{});return Object.entries(e).reduce(((t,e)=>(t[e[0]]=e[1].length>1?e[1]:e[1][0],t)),{})}var ut,dt,pt={HISTORY:1,HASH:2,MEMORY:3,OFF:4,run:function(t,e,n,r){return 1===t?e&&e():2===t?n&&n():r&&r()},getDeafault:function(){return window&&"srcdoc"!==window.location.pathname?1:3}},ft=function(){let t,e=pt.getDeafault(),n=n=>t&&t(gt(e));function r(t){t&&(e=t),window.onhashchange=window.onpopstate=dt=null,e!==pt.OFF&&pt.run(e,(t=>window.onpopstate=n),(t=>window.onhashchange=n))&&n()}return{mode:t=>r(t),get:t=>gt(e),go(t,r){(function(t,e,n){let r=t=>history[n?"replaceState":"pushState"]({},"",t);pt.run(t,(t=>r(e)),(t=>r(`#${e}`)),(t=>dt=e))})(e,t,r),n()},start(e){t=e,r()},stop(){t=null,r(pt.OFF)}}}();function gt(t){let e=ut,n=ut=pt.run(t,(t=>window.location.pathname+window.location.search),(t=>String(window.location.hash.slice(1)||"/")),(t=>dt||"/")),r=n.match(/^([^?#]+)(?:\?([^#]+))?(?:\#(.+))?$/);return{url:n,from:e,path:r[1]||"",query:ct(r[2]||""),hash:r[3]||""}}function mt(t){let e=H("tinro");e&&(e.exact||e.fallback)&&function(t){throw new Error("[Tinro] "+t)}(`${t.fallback?"":``} can't be inside ${e.fallback?"":` with exact path`}`);let n=t.fallback?"fallbacks":"childs",r=ot({}),s={router:{},exact:!1,pattern:null,meta:{},parent:e,fallback:t.fallback,redirect:!1,firstmatch:!1,breadcrumb:null,matched:!1,childs:new Set,activeChilds:new Set,fallbacks:new Set,update(t){s.exact=!t.path.endsWith("/*"),s.pattern=at(`${s.parent&&s.parent.pattern||""}${t.path}`),s.redirect=t.redirect,s.firstmatch=t.firstmatch,s.breadcrumb=t.breadcrumb,s.match()},register:()=>{if(s.parent)return s.parent[n].add(s),()=>{s.parent[n].delete(s),s.router.un&&s.router.un()}},show:()=>{t.onShow(),!s.fallback&&s.parent&&s.parent.activeChilds.add(s)},hide:()=>{t.onHide(),!s.fallback&&s.parent&&s.parent.activeChilds.delete(s)},match:async()=>{s.matched=!1;let{path:e,url:n,from:o,query:a}=s.router,l=function(t,e){t=at(t,!0),e=at(e,!0);let n=[],r={},s=!0,o=t.split("/").map((t=>t.startsWith(":")?(n.push(t.slice(1)),"([^\\/]+)"):t)).join("\\/"),a=e.match(new RegExp(`^${o}$`));return a||(s=!1,a=e.match(new RegExp(`^${o}`))),a?(n.forEach(((t,e)=>r[t]=a[e+1])),{exact:s,params:r,part:a[0].slice(0,-1)}):null}(s.pattern,e);if(!s.fallback&&l&&s.redirect&&(!s.exact||s.exact&&l.exact)){await j();let t=lt(e,s.parent&&s.parent.pattern,s.redirect);return $t.goto(t,!0)}if(s.meta=l&&{from:o,url:n,query:a,match:l.part,pattern:s.pattern,breadcrumbs:s.parent&&s.parent.meta&&s.parent.meta.breadcrumbs.slice()||[],params:l.params,subscribe:r.subscribe},s.breadcrumb&&s.meta&&s.meta.breadcrumbs.push({name:s.breadcrumb,path:l.part}),r.set(s.meta),!l||s.fallback||!(!s.exact||s.exact&&l.exact)||s.parent&&s.parent.firstmatch&&s.parent.matched?s.hide():(t.onMeta(s.meta),s.parent&&(s.parent.matched=!0),s.show()),await j(),l&&!s.fallback&&(s.childs.size>0&&0==s.activeChilds.size||0==s.childs.size&&s.fallbacks.size>0)){let t=s;for(;0==t.fallbacks.size;)if(t=t.parent,!t)return;t&&t.fallbacks.forEach((t=>{if(t.redirect){let e=lt("/",t.parent&&t.parent.pattern,t.redirect);$t.goto(e,!0)}else t.show()}))}}};return o="tinro",a=s,O().$$.context.set(o,a),A((()=>s.register())),s.router.un=$t.subscribe((t=>{s.router.path=t.path,s.router.url=t.url,s.router.query=t.query,s.router.from=t.from,null!==s.pattern&&s.match()})),s;var o,a}function ht(){return H("tinro").meta}var $t=function(){let{subscribe:t}=ot(ft.get(),(t=>{ft.start(t);let e=function(t){let e=e=>{let n=e.target.closest("a[href]"),r=n&&it(n,"target",!1,"_self"),s=n&&it(n,"tinro-ignore"),o=e.ctrlKey||e.metaKey||e.altKey||e.shiftKey;if("_self"==r&&!s&&!o&&n){let r=n.getAttribute("href").replace(/^\/#/,"");/^\/\/|^[a-zA-Z]+:/.test(r)||(e.preventDefault(),t(r.startsWith("/")?r:n.href.replace(window.location.origin,"")))}};return addEventListener("click",e),()=>removeEventListener("click",e)}(ft.go);return()=>{ft.stop(),e()}}));return{subscribe:t,goto:ft.go,params:bt,meta:ht,useHashNavigation:t=>ft.mode(t?pt.HASH:pt.HISTORY),mode:{hash:()=>ft.mode(pt.HASH),history:()=>ft.mode(pt.HISTORY),memory:()=>ft.mode(pt.MEMORY)}}}();function bt(){return H("tinro").meta.params}const wt=t=>({params:2&t,meta:4&t}),yt=t=>({params:t[1],meta:t[2]});function xt(t){let e;const n=t[9].default,r=l(n,t,t[8],yt);return{c(){r&&r.c()},m(t,n){r&&r.m(t,n),e=!0},p(t,s){r&&r.p&&(!e||262&s)&&u(r,n,t,t[8],e?c(n,t[8],s,wt):d(t[8]),yt)},i(t){e||(G(r,t),e=!0)},o(t){U(r,t),e=!1},d(t){r&&r.d(t)}}}function vt(t){let e,n,r=t[0]&&xt(t);return{c(){r&&r.c(),e=y()},m(t,s){r&&r.m(t,s),f(t,e,s),n=!0},p(t,[n]){t[0]?r?(r.p(t,n),1&n&&G(r,1)):(r=xt(t),r.c(),G(r,1),r.m(e.parentNode,e)):r&&(Z(),U(r,1,1,(()=>{r=null})),Q())},i(t){n||(G(r),n=!0)},o(t){U(r),n=!1},d(t){r&&r.d(t),t&&g(e)}}}function _t(t,e,n){let{$$slots:r={},$$scope:s}=e,{path:o="/*"}=e,{fallback:a=!1}=e,{redirect:l=!1}=e,{firstmatch:i=!1}=e,{breadcrumb:c=null}=e,u=!1,d={},p={};const f=mt({fallback:a,onShow(){n(0,u=!0)},onHide(){n(0,u=!1)},onMeta(t){n(2,p=t),n(1,d=p.params)}});return t.$$set=t=>{"path"in t&&n(3,o=t.path),"fallback"in t&&n(4,a=t.fallback),"redirect"in t&&n(5,l=t.redirect),"firstmatch"in t&&n(6,i=t.firstmatch),"breadcrumb"in t&&n(7,c=t.breadcrumb),"$$scope"in t&&n(8,s=t.$$scope)},t.$$.update=()=>{232&t.$$.dirty&&f.update({path:o,redirect:l,firstmatch:i,breadcrumb:c})},[u,d,p,o,a,l,i,c,s,r]}class kt extends rt{constructor(t){super(),nt(this,t,_t,vt,o,{path:3,fallback:4,redirect:5,firstmatch:6,breadcrumb:7})}}function St(t){let e,n,r,s,o;const a=t[2].default,i=l(a,t,t[1],null);return{c(){e=h("div"),n=h("h1"),r=b(t[0]),s=w(),i&&i.c(),v(n,"class","card-header"),v(e,"class","card")},m(t,a){f(t,e,a),p(e,n),p(n,r),p(e,s),i&&i.m(e,null),o=!0},p(t,[e]){(!o||1&e)&&k(r,t[0]),i&&i.p&&(!o||2&e)&&u(i,a,t,t[1],o?c(a,t[1],e,null):d(t[1]),null)},i(t){o||(G(i,t),o=!0)},o(t){U(i,t),o=!1},d(t){t&&g(e),i&&i.d(t)}}}function Et(t,e,n){let{$$slots:r={},$$scope:s}=e,{title:o}=e;return t.$$set=t=>{"title"in t&&n(0,o=t.title),"$$scope"in t&&n(1,s=t.$$scope)},[o,s,r]}class Pt extends rt{constructor(t){super(),nt(this,t,Et,St,o,{title:0})}}function Nt(t){let e,n,s,o;return{c(){e=h("input"),v(e,"class",n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500"),v(e,"step","0.1"),v(e,"type","number")},m(n,r){f(n,e,r),S(e,t[0].status),s||(o=[x(e,"change",t[2]),x(e,"input",t[3])],s=!0)},p(t,r){1&r&&n!==(n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500")&&v(e,"class",n),1&r&&_(e.value)!==t[0].status&&S(e,t[0].status)},d(t){t&&g(e),s=!1,r(o)}}}function Ot(t){let e,n,s,o;return{c(){e=h("input"),v(e,"class",n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500"),v(e,"type","text")},m(n,r){f(n,e,r),S(e,t[0].status),s||(o=[x(e,"change",t[4]),x(e,"input",t[5])],s=!0)},p(t,r){1&r&&n!==(n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500")&&v(e,"class",n),1&r&&e.value!==t[0].status&&S(e,t[0].status)},d(t){t&&g(e),s=!1,r(o)}}}function At(t){let e,n,s,o;return{c(){e=h("input"),v(e,"class",n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500"),v(e,"type","date")},m(n,r){f(n,e,r),S(e,t[0].status),s||(o=[x(e,"change",t[6]),x(e,"input",t[7])],s=!0)},p(t,r){1&r&&n!==(n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500")&&v(e,"class",n),1&r&&S(e,t[0].status)},d(t){t&&g(e),s=!1,r(o)}}}function Ht(t){let e,n,s,o;return{c(){e=h("input"),v(e,"class",n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500"),v(e,"type","time")},m(n,r){f(n,e,r),S(e,t[0].status),s||(o=[x(e,"change",t[8]),x(e,"input",t[9])],s=!0)},p(t,r){1&r&&n!==(n=1==t[0].send?"widget-input border-red-500":"widget-input focus:border-indigo-500")&&v(e,"class",n),1&r&&S(e,t[0].status)},d(t){t&&g(e),s=!1,r(o)}}}function Ct(e){let n,r,s,o,a,l,i,c,u,d=(e[0].descr?e[0].descr:"")+"",m="number"==e[0].type&&Nt(e),$="text"==e[0].type&&Ot(e),y="date"==e[0].type&&At(e),x="time"==e[0].type&&Ht(e);return{c(){n=h("div"),r=h("div"),s=h("label"),o=b(d),a=w(),l=h("div"),m&&m.c(),i=w(),$&&$.c(),c=w(),y&&y.c(),u=w(),x&&x.c(),v(s,"class","widget-descr-style"),v(r,"class","widget-descr-width"),v(l,"class","widget-width"),v(n,"class","card-items-psn")},m(t,e){f(t,n,e),p(n,r),p(r,s),p(s,o),p(n,a),p(n,l),m&&m.m(l,null),p(l,i),$&&$.m(l,null),p(l,c),y&&y.m(l,null),p(l,u),x&&x.m(l,null)},p(t,[e]){1&e&&d!==(d=(t[0].descr?t[0].descr:"")+"")&&k(o,d),"number"==t[0].type?m?m.p(t,e):(m=Nt(t),m.c(),m.m(l,i)):m&&(m.d(1),m=null),"text"==t[0].type?$?$.p(t,e):($=Ot(t),$.c(),$.m(l,c)):$&&($.d(1),$=null),"date"==t[0].type?y?y.p(t,e):(y=At(t),y.c(),y.m(l,u)):y&&(y.d(1),y=null),"time"==t[0].type?x?x.p(t,e):(x=Ht(t),x.c(),x.m(l,null)):x&&(x.d(1),x=null)},i:t,o:t,d(t){t&&g(n),m&&m.d(),$&&$.d(),y&&y.d(),x&&x.d()}}}function Tt(t,e,n){let{widget:r}=e,{wsPushProp:s=((t,e,n)=>{})}=e;return t.$$set=t=>{"widget"in t&&n(0,r=t.widget),"wsPushProp"in t&&n(1,s=t.wsPushProp)},[r,s,()=>(n(0,r.send=!0,r),s(r.ws,r.topic,r.status)),function(){r.status=_(this.value),n(0,r)},()=>(n(0,r.send=!0,r),s(r.ws,r.topic,r.status)),function(){r.status=this.value,n(0,r)},()=>(n(0,r.send=!0,r),s(r.ws,r.topic,r.status)),function(){r.status=this.value,n(0,r)},()=>(n(0,r.send=!0,r),s(r.ws,r.topic,r.status)),function(){r.status=this.value,n(0,r)}]}class Lt extends rt{constructor(t){super(),nt(this,t,Tt,Ct,o,{widget:0,wsPushProp:1})}}function Mt(e){let n,s,o,a,l,i,c,u,d,m,$,y,_,E,P,N,O,A,H=(e[0].descr?e[0].descr:"")+"";return{c(){n=h("div"),s=h("div"),o=h("label"),a=b(H),l=w(),i=h("div"),c=h("label"),u=h("div"),d=h("input"),$=w(),y=h("div"),_=w(),E=h("div"),v(o,"class","widget-descr-style"),v(s,"class","widget-descr-width"),v(d,"id",m=e[0].topic),v(d,"type","checkbox"),v(d,"class","sr-only"),v(y,"class","block bg-gray-600 w-10 h-6 rounded-full"),v(E,"class",P="dot "+(1==e[0].send?"bg-red-400":"bg-white")+" absolute left-1 top-1 w-4 h-4 rounded-full transition"),v(u,"class","relative"),v(c,"for",N=e[0].topic),v(c,"class","items-center cursor-pointer"),v(i,"class","widget-width"),v(n,"class","card-items-psn")},m(t,r){f(t,n,r),p(n,s),p(s,o),p(o,a),p(n,l),p(n,i),p(i,c),p(c,u),p(u,d),S(d,e[0].status),p(u,$),p(u,y),p(u,_),p(u,E),O||(A=[x(d,"change",e[2]),x(d,"change",e[3])],O=!0)},p(t,[e]){1&e&&H!==(H=(t[0].descr?t[0].descr:"")+"")&&k(a,H),1&e&&m!==(m=t[0].topic)&&v(d,"id",m),1&e&&S(d,t[0].status),1&e&&P!==(P="dot "+(1==t[0].send?"bg-red-400":"bg-white")+" absolute left-1 top-1 w-4 h-4 rounded-full transition")&&v(E,"class",P),1&e&&N!==(N=t[0].topic)&&v(c,"for",N)},i:t,o:t,d(t){t&&g(n),O=!1,r(A)}}}function zt(t,e,n){let{widget:r}=e,{wsPushProp:s=((t,e,n)=>{})}=e;return t.$$set=t=>{"widget"in t&&n(0,r=t.widget),"wsPushProp"in t&&n(1,s=t.wsPushProp)},[r,s,()=>(n(0,r.send=!0,r),s(r.ws,r.topic,r.status)),function(){r.status=this.value,n(0,r)}]}class It extends rt{constructor(t){super(),nt(this,t,zt,Mt,o,{widget:0,wsPushProp:1})}}function Rt(e){let n,r,s,o,a,l,i,c,u,d,m,$,y=(e[0].descr?e[0].descr:"")+"",x=(e[0].status?e[0].status:"")+"",_=(e[0].after?e[0].after:"")+"";return{c(){n=h("div"),r=h("div"),s=h("label"),o=b(y),a=w(),l=h("div"),i=h("label"),c=b(x),u=w(),d=h("label"),m=b(" "),$=b(_),v(s,"class","widget-descr-style"),v(r,"class","widget-descr-width"),v(i,"class","widget-anydata-style"),v(d,"class","widget-anydata-style"),v(l,"class","widget-width"),v(n,"class","card-items-psn")},m(t,e){f(t,n,e),p(n,r),p(r,s),p(s,o),p(n,a),p(n,l),p(l,i),p(i,c),p(l,u),p(l,d),p(d,m),p(d,$)},p(t,[e]){1&e&&y!==(y=(t[0].descr?t[0].descr:"")+"")&&k(o,y),1&e&&x!==(x=(t[0].status?t[0].status:"")+"")&&k(c,x),1&e&&_!==(_=(t[0].after?t[0].after:"")+"")&&k($,_)},i:t,o:t,d(t){t&&g(n)}}}function jt(t,e,n){let{widget:r}=e;return t.$$set=t=>{"widget"in t&&n(0,r=t.widget)},[r]}class qt extends rt{constructor(t){super(),nt(this,t,jt,Rt,o,{widget:0})}}function Wt(t,e,n){const r=t.slice();return r[44]=e[n],r}function Ft(t,e,n){const r=t.slice();return r[47]=e[n],r[49]=n,r}function Jt(t,e,n){const r=t.slice();return r[50]=e[n],r}function Bt(t,e,n){const r=t.slice();return r[53]=e[n],r[49]=n,r}function Yt(t,e,n){const r=t.slice();return r[55]=e[n],r[56]=e,r[49]=n,r}function Kt(t,e,n){const r=t.slice();return r[44]=e[n],r}function Dt(t){let e,n,r,s,o=t[44].name+"";return{c(){e=h("option"),n=b(o),r=w(),e.__value=s=t[44],e.value=e.__value},m(t,s){f(t,e,s),p(e,n),p(e,r)},p(t,r){64&r[0]&&o!==(o=t[44].name+"")&&k(n,o),64&r[0]&&s!==(s=t[44])&&(e.__value=s,e.value=e.__value)},d(t){t&&g(e)}}}function Zt(t){let e,n,r,s,o="input"===t[55].widget&&Qt(t),a="toggle"===t[55].widget&&Gt(t),l="anydata"===t[55].widget&&Ut(t);return{c(){o&&o.c(),e=w(),a&&a.c(),n=w(),l&&l.c(),r=y()},m(t,i){o&&o.m(t,i),f(t,e,i),a&&a.m(t,i),f(t,n,i),l&&l.m(t,i),f(t,r,i),s=!0},p(t,s){"input"===t[55].widget?o?(o.p(t,s),2&s[0]&&G(o,1)):(o=Qt(t),o.c(),G(o,1),o.m(e.parentNode,e)):o&&(Z(),U(o,1,1,(()=>{o=null})),Q()),"toggle"===t[55].widget?a?(a.p(t,s),2&s[0]&&G(a,1)):(a=Gt(t),a.c(),G(a,1),a.m(n.parentNode,n)):a&&(Z(),U(a,1,1,(()=>{a=null})),Q()),"anydata"===t[55].widget?l?(l.p(t,s),2&s[0]&&G(l,1)):(l=Ut(t),l.c(),G(l,1),l.m(r.parentNode,r)):l&&(Z(),U(l,1,1,(()=>{l=null})),Q())},i(t){s||(G(o),G(a),G(l),s=!0)},o(t){U(o),U(a),U(l),s=!1},d(t){o&&o.d(t),t&&g(e),a&&a.d(t),t&&g(n),l&&l.d(t),t&&g(r)}}}function Qt(t){let e,n,r;function s(e){t[17](e,t[55])}let o={widget:t[55],wsPushProp:t[16]};return void 0!==t[55].status&&(o.value=t[55].status),e=new Lt({props:o}),T.push((()=>V(e,"value",s))),{c(){X(e.$$.fragment)},m(t,n){tt(e,t,n),r=!0},p(r,s){t=r;const o={};2&s[0]&&(o.widget=t[55]),!n&&2&s[0]&&(n=!0,o.value=t[55].status,W((()=>n=!1))),e.$set(o)},i(t){r||(G(e.$$.fragment,t),r=!0)},o(t){U(e.$$.fragment,t),r=!1},d(t){et(e,t)}}}function Gt(t){let e,n,r;function s(e){t[19](e,t[55])}let o={widget:t[55],wsPushProp:t[18]};return void 0!==t[55].status&&(o.value=t[55].status),e=new It({props:o}),T.push((()=>V(e,"value",s))),{c(){X(e.$$.fragment)},m(t,n){tt(e,t,n),r=!0},p(r,s){t=r;const o={};2&s[0]&&(o.widget=t[55]),!n&&2&s[0]&&(n=!0,o.value=t[55].status,W((()=>n=!1))),e.$set(o)},i(t){r||(G(e.$$.fragment,t),r=!0)},o(t){U(e.$$.fragment,t),r=!1},d(t){et(e,t)}}}function Ut(t){let e,n,r;function s(e){t[20](e,t[55])}let o={widget:t[55]};return void 0!==t[55].status&&(o.value=t[55].status),e=new qt({props:o}),T.push((()=>V(e,"value",s))),{c(){X(e.$$.fragment)},m(t,n){tt(e,t,n),r=!0},p(r,s){t=r;const o={};2&s[0]&&(o.widget=t[55]),!n&&2&s[0]&&(n=!0,o.value=t[55].status,W((()=>n=!1))),e.$set(o)},i(t){r||(G(e.$$.fragment,t),r=!0)},o(t){U(e.$$.fragment,t),r=!1},d(t){et(e,t)}}}function Vt(t){let e,n,r=t[55].page===t[53].page&&Zt(t);return{c(){r&&r.c(),e=y()},m(t,s){r&&r.m(t,s),f(t,e,s),n=!0},p(t,n){t[55].page===t[53].page?r?(r.p(t,n),6&n[0]&&G(r,1)):(r=Zt(t),r.c(),G(r,1),r.m(e.parentNode,e)):r&&(Z(),U(r,1,1,(()=>{r=null})),Q())},i(t){n||(G(r),n=!0)},o(t){U(r),n=!1},d(t){r&&r.d(t),t&&g(e)}}}function Xt(t){let e,n,r=t[1],s=[];for(let e=0;eU(s[t],1,1,(()=>{s[t]=null}));return{c(){for(let t=0;tU(a[t],1,1,(()=>{a[t]=null}));return r=new Pt({props:{title:"Редактор JSON",$$slots:{default:[ee]},$$scope:{ctx:t}}}),{c(){e=h("div");for(let t=0;tТип \n Подтип \n Id \n 4',r=w(),s=h("tbody");for(let t=0;tНазвание устройства \n IP адрес \n Идентификатор \n Состояние',r=w(),s=h("tbody");for(let t=0;t",P=w(),N=h("ul"),O=h("li"),A=h("a"),A.textContent="Управление",H=w(),C=h("li"),T=h("a"),T.textContent="Конфигуратор",L=w(),M=h("li"),z=h("a"),z.textContent="Подключение",I=w(),R=h("li"),j=h("a"),j.textContent="Утилиты",W=w(),F=h("li"),J=h("a"),J.textContent="Лог",B=w(),Y=h("li"),K=h("a"),K.textContent="Устройства",D=w(),Z=h("li"),Q=h("a"),Q.textContent="О проекте",V=w(),nt=h("ul"),rt=h("div"),X(st.$$.fragment),ot=w(),X(at.$$.fragment),lt=w(),X(it.$$.fragment),ct=w(),X(ut.$$.fragment),dt=w(),X(pt.$$.fragment),ft=w(),X(gt.$$.fragment),mt=w(),X(ht.$$.fragment),void 0===t[5]&&q((()=>t[14].call(a))),v(o,"class","px-15 py-2"),v(u,"stroke","none"),v(u,"d","M0 0h24v24H0z"),v(d,"d","M7 18a4.6 4.4 0 0 1 0 -9h0a5 4.5 0 0 1 11 2h1a3.5 3.5 0 0 1 0 7h-12"),v(c,"class",b="h-8 w-8 "+(!0===t[4]?"text-green-500":"text-red-500")),v(c,"width","24"),v(c,"height","24"),v(c,"viewBox","0 0 24 24"),v(c,"stroke-width","2"),v(c,"stroke","currentColor"),v(c,"fill","none"),v(c,"stroke-linecap","round"),v(c,"stroke-linejoin","round"),v(i,"class","px-10 py-1"),v(s,"class","flex justify-end content-center"),v(n,"class","fixed m-0 h-10 w-full bg-gray-100 shadow-md"),v(_,"id","menu__toggle"),v(_,"type","checkbox"),v(S,"class","menu__btn"),v(S,"for","menu__toggle"),v(A,"class","menu__item"),v(A,"href","/"),v(T,"class","menu__item"),v(T,"href","/config"),v(z,"class","menu__item"),v(z,"href","/connection"),v(j,"class","menu__item"),v(j,"href","/utilities"),v(J,"class","menu__item"),v(J,"href","/log"),v(K,"class","menu__item"),v(K,"href","/list"),v(Q,"class","menu__item"),v(Q,"href","/about"),v(N,"class","menu__box"),v(rt,"class","bg-cover bg-gray-50 pt-8 px-4"),v(nt,"class","menu__main")},m(r,g){f(r,e,g),p(e,n),p(n,s),p(s,o),p(o,a);for(let t=0;tn(29,r=t))),$t.mode.hash();let s=document.location.hostname,o=!1,l=[],i=[];l=[{widget:"input",type:"date",status:"2021-10-17",page:"Inputs",order:"4",descr:"Switch on boiler date",topic:"/prefix/00000-00004/date1",ws:0},{widget:"input",type:"time",status:"12:00",page:"Inputs",order:"1",descr:"Switch on boiler time",topic:"/prefix/00000-00001/time",ws:0},{widget:"input",type:"number",status:"30.5",after:"°С",page:"Inputs",order:"2",descr:"Boiler temperature",topic:"/prefix/00000-00002/temp",ws:0},{widget:"input",type:"text",status:"Hello",page:"Inputs",order:"3",descr:"Message to be send",topic:"/prefix/00000-00003/text",ws:0},{widget:"toggle",status:0,page:"Toggles",order:"3",descr:"Light in my room",topic:"/prefix/00000-00003/btn1",ws:0},{widget:"toggle",status:0,page:"Toggles",order:"3",descr:"Light in my room",topic:"/prefix/00000-00003/btn2",ws:0},{widget:"toggle",status:0,page:"Toggles",order:"3",descr:"Light in my room",topic:"/prefix/00000-00003/btn3",ws:0},{widget:"anydata",status:30.5,after:"°С",page:"Any data",order:"3",descr:"Temperature",topic:"/prefix/00000-00003/tmp10",ws:0},{widget:"anydata",status:1032,after:"mm",page:"Any data",order:"3",descr:"Pressure",topic:"/prefix/00000-00003/tmp10",ws:0},{widget:"anydata",status:50,after:"%",page:"Any data",order:"3",descr:"Level",topic:"/prefix/00000-00003/tmp10",ws:0},{widget:"anydata",status:"opened",page:"Any data",order:"3",descr:"Status",topic:"/prefix/00000-00003/tmp10",ws:0}];let c,u,d=[],p=[],f=!1,g={},m=[],h=!0,$={};function b(){let t=0;m.forEach((e=>{e.ws=t,e.status||(y(t),v(t)),t++})),n(6,m),n(4,f=g.status)}function w(t,e){m.forEach((n=>{n.ws===t&&(n.status=e,n.status?console.log("[i]",n.ip,"status online"):console.log("[i]",n.ip,"status offline"))})),n(6,m),n(4,f=g.status)}function y(t){let e=x(t);"error"===e?console.log("[e]","device list wrong"):(p[t]=new WebSocket("ws://"+e+"/ws"),console.log("[i]",e,"started connecting..."))}function x(t){let e="error";return m.forEach((n=>{t===n.ws&&(e=n.ip)})),e}function v(t){if(p[t]){let e=x(t);console.log("[i]",e,"web socket events added"),p[t].addEventListener("open",(function(n){console.log("[i]",e,"completed connecting"),w(t,!0),O()})),p[t].addEventListener("message",(function(t){let e=t.data.toString();console.log("[i]","data:",e)})),p[t].addEventListener("close",(n=>{console.log("[e]",e,"connection closed"),w(t,!1)})),p[t].addEventListener("error",(function(n){console.log("[e]",e,"connection error"),w(t,!1)}))}else console.log("[e]","socket not exist")}function _(t,e,n){let r=e+" "+n;console.log("[i]","send to ws msg:",r),S(t,r)}function k(){setTimeout(k,1e4),console.log("[i]","----timer tick----"),h||m.forEach((t=>{!function(t){let e=!1;return m.forEach((n=>{t===n.ws&&(e=n.status)})),e}(t.ws)?(y(t.ws),v(t.ws)):S(t.ws,"tst")})),h=!1}function S(t,e){p[t]&&1===p[t].readyState?(p[t].send(e),console.log("[i]",x(t),"msg send success",e)):console.log("[e]",x(t),"msg not send",e)}function E(){n(2,i=[]);Array.from(new Set(Array.from(l,(({page:t})=>t)))).forEach((function(t,e,r){n(2,i=[...i,JSON.parse(JSON.stringify({page:t}))])})),i.sort((function(t,e){return t.pagee.page?1:0}))}function P(){n(4,f=g.status),c=g.ws,console.log("[i]","user selected device:",g.name),g.ip===s&&console.log("[i]","user selected original device",g.name)}function N(){o||(void 0!==$.name&&void 0!==$.ip&&void 0!==$.id?(n(7,$.status=!1,$),m.push($),n(6,m),n(7,$={}),b(),console.log("[i]","selected device:",g)):console.log("[e]","wrong data"))}function O(){void 0!==c&&S(c,u)}m=[{name:"Устройство 1",id:"987654321",ip:"192.168.88.235",status:!1}],$t.subscribe((function(){n(3,d=[]),u=r.path.toString(),console.log("[i]","user on page:",u),O()}));A((async()=>{console.log("[i]","mounted"),b(),k(),n(4,f=g.status),P(),E()}));return[o,l,i,d,f,g,m,$,[],_,function(){n(1,l=JSON.parse(document.getElementById("text1").value)),E()},P,N,t=>{try{t=JSON.stringify(JSON.parse(t),null,4)}catch(e){return t}return t=(t=t.replace(/&/g,"&").replace(//g,">")).replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g,(function(t){return t}))},function(){g=function(t){const e=t.querySelector(":checked")||t.options[0];return e&&e.__value}(this),n(5,g),n(6,m)},()=>P(),(t,e,n)=>_(t,e,n),function(e,r){t.$$.not_equal(r.status,e)&&(r.status=e,n(1,l))},(t,e,n)=>_(t,e,n),function(e,r){t.$$.not_equal(r.status,e)&&(r.status=e,n(1,l))},function(e,r){t.$$.not_equal(r.status,e)&&(r.status=e,n(1,l))},function(){$.name=this.value,n(7,$)},function(){$.ip=this.value,n(7,$)},function(){$.id=this.value,n(7,$)},()=>(n(0,o=!o),N())]}return new class extends rt{constructor(t){super(),nt(this,t,me,ge,o,{},null,[-1,-1])}}({target:document.body,props:{name:"world"}})}(); //# sourceMappingURL=bundle.js.map diff --git a/include/EspFileSystem.h b/include/EspFileSystem.h index 6b558a0d..a93afe19 100644 --- a/include/EspFileSystem.h +++ b/include/EspFileSystem.h @@ -11,3 +11,6 @@ extern FS* filesystem; extern bool fileSystemInit(); extern void globalVarsSync(); + +void saveSettingsFlashJson(); +void saveParamsFlashJson(); diff --git a/include/Global.h b/include/Global.h index c4926902..54cea528 100644 --- a/include/Global.h +++ b/include/Global.h @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -15,6 +16,7 @@ //глобальные объекты классов extern TickerScheduler ts; +extern AsyncWebServer server; //глобальные переменные extern String settingsFlashJson; diff --git a/include/WebServer.h b/include/WebServer.h index 5818624b..ac0b41bf 100644 --- a/include/WebServer.h +++ b/include/WebServer.h @@ -1,8 +1,10 @@ -//#pragma once -// -//#include "Global.h" -// -// -// -// void initWS(); -// void init(); +#pragma once + +#include "Global.h" + +extern AsyncWebSocket ws; +extern AsyncEventSource events; + +void webServerInit(); +void webSocketsInit(); +void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len); diff --git a/include/main.h b/include/main.h index e006ecab..5d31b3e9 100644 --- a/include/main.h +++ b/include/main.h @@ -3,3 +3,4 @@ #include "Global.h" #include "Utils/Pretty.h" #include "Utils/WiFiUtils.h" +#include "WebServer.h" diff --git a/include/utils/JsonUtils.h b/include/utils/JsonUtils.h index 105067b4..0f78276e 100644 --- a/include/utils/JsonUtils.h +++ b/include/utils/JsonUtils.h @@ -19,6 +19,3 @@ bool jsonWriteStr_(String& json, String name, String value); bool jsonWriteBool_(String& json, String name, bool value); bool jsonWriteInt_(String& json, String name, int value); bool jsonWriteFloat_(String& json, String name, float value); - -void saveConfig(); -void saveStore(); \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index 6f23b121..2d9b964f 100644 --- a/platformio.ini +++ b/platformio.ini @@ -16,6 +16,7 @@ data_dir = data_svelte [common_env_data] lib_deps_external = bblanchon/ArduinoJson @6.18.0 + me-no-dev/ESP Async WebServer [env:esp8266_4mb] build_flags = -Desp8266_4mb="esp8266_4mb" diff --git a/src/EspFileSystem.cpp b/src/EspFileSystem.cpp index 51db7652..5ce1f333 100644 --- a/src/EspFileSystem.cpp +++ b/src/EspFileSystem.cpp @@ -12,4 +12,12 @@ bool fileSystemInit() { void globalVarsSync() { settingsFlashJson = readFile("settings.json", 4096); settingsFlashJson.replace("\r\n", ""); +} + +void saveSettingsFlashJson() { + writeFile(String("config.json"), settingsFlashJson); +} + +void saveParamsFlashJson() { + writeFile(String("store.json"), paramsFlashJson); } \ No newline at end of file diff --git a/src/Global.cpp b/src/Global.cpp index a3bdb6fe..659e2acc 100644 --- a/src/Global.cpp +++ b/src/Global.cpp @@ -2,6 +2,7 @@ //глобальные объекты классов TickerScheduler ts(MYTEST + 1); +AsyncWebServer server(80); //глобальные переменные String settingsFlashJson = "{}"; //переменная в которой хранятся все настройки, находится в оперативной памяти только и синхронизированна с flash памятью diff --git a/src/WebServer.cpp b/src/WebServer.cpp index a690cf9c..f5c3db3c 100644 --- a/src/WebServer.cpp +++ b/src/WebServer.cpp @@ -1,213 +1,147 @@ -// -// -// -// AsyncWebSocket ws("/ws"); -// AsyncEventSource events("/events"); -// -// -// -// -// -// void init() { -// String login = jsonReadStr(settingsFlashJson, "weblogin"); -// String pass = jsonReadStr(settingsFlashJson, "webpass"); -//#ifdef ESP32 -// server.addHandler(new FSEditor(FileFS, login, pass)); -//#else -// server.addHandler(new FSEditor(login, pass)); -//#endif -// -// server.serveStatic("/css/", FileFS, "/css/").setCacheControl("max-age=600"); -// server.serveStatic("/js/", FileFS, "/js/").setCacheControl("max-age=600"); -// server.serveStatic("/favicon.ico", FileFS, "/favicon.ico").setCacheControl("max-age=600"); -// server.serveStatic("/icon.jpeg", FileFS, "/icon.jpeg").setCacheControl("max-age=600"); -// server.serveStatic("/edit", FileFS, "/edit").setCacheControl("max-age=600"); -// -//#ifdef svelte -// server.serveStatic("/", FileFS, "/").setDefaultFile("index.html").setAuthentication(login.c_str(), pass.c_str()); -//#else -// server.serveStatic("/", FileFS, "/").setDefaultFile("index.htm").setAuthentication(login.c_str(), pass.c_str()); -//#endif -// -// server.onNotFound([](AsyncWebServerRequest *request) { -// SerialPrint("[E]", "WebServer", "not found:\n" + getRequestInfo(request)); -// request->send(404); -// }); -// -// server.onFileUpload([](AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len, bool final) { -// // TODO -// if (!index) { -// SerialPrint("I", "WebServer", "start upload " + filename); -// } -// if (final) { -// SerialPrint("I", "WebServer", "finish upload: " + prettyBytes(index + len)); -// } -// }); -// -// // динамические данные -// server.on("/config.live.json", HTTP_GET, [](AsyncWebServerRequest *request) { -// request->send(200, "application/json", configLiveJson); -// }); -// -// server.on("/config.store.json", HTTP_GET, [](AsyncWebServerRequest *request) { -// request->send(200, "application/json", paramsFlashJson); -// }); -// -// // данные не являющиеся событиями -// server.on("/config.option.json", HTTP_GET, [](AsyncWebServerRequest *request) { -// request->send(200, "application/json", paramsHeapJson); -// }); -// -// // для хранения постоянных данных -// server.on("/config.setup.json", HTTP_GET, [](AsyncWebServerRequest *request) { -// request->send(200, "application/json", settingsFlashJson); -// }); -// -// server.on("/cmd", HTTP_GET, [](AsyncWebServerRequest *request) { -// String cmdStr = request->getParam("command")->value(); -// SerialPrint("I", "WebServer", "do: " + cmdStr); -// loopCmdAdd(cmdStr); -// request->send(200, "text/html", "OK"); -// }); -// -// server.begin(); -// -// initOta(); -// initMDNS(); -// initWS(); -// -// SerialPrint("I", F("HTTP"), F("HttpServer Init")); -//} -// -// void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { -//#ifdef WEBSOCKET_ENABLED -// if (type == WS_EVT_CONNECT) { -// SerialPrint("I", F("WS"), F("CONNECTED")); -// Serial.printf("ws[%s][%u] connect\n", server->url(), client->id()); -// // client->printf(json.c_str(), client->id()); -// // client->ping(); -// } else if (type == WS_EVT_DISCONNECT) { -// Serial.printf("ws[%s][%u] disconnect\n", server->url(), client->id()); -// } else if (type == WS_EVT_ERROR) { -// Serial.printf("ws[%s][%u] error(%u): %s\n", server->url(), client->id(), *((uint16_t *)arg), (char *)data); -// } else if (type == WS_EVT_PONG) { -// Serial.printf("ws[%s][%u] pong[%u]: %s\n", server->url(), client->id(), len, (len) ? (char *)data : ""); -// } else if (type == WS_EVT_DATA) { -// AwsFrameInfo *info = (AwsFrameInfo *)arg; -// String msg = ""; -// if (info->final && info->index == 0 && info->len == len) { -// // the whole message is in a single frame and we got all of it's data -// Serial.printf("ws[%s][%u] %s-message[%llu]: ", server->url(), client->id(), (info->opcode == WS_TEXT) ? "text" : "binary", info->len); -// -// if (info->opcode == WS_TEXT) { -// for (size_t i = 0; i < info->len; i++) { -// msg += (char)data[i]; -// } -// } else { -// char buff[3]; -// for (size_t i = 0; i < info->len; i++) { -// sprintf(buff, "%02x ", (uint8_t)data[i]); -// msg += buff; -// } -// } -// Serial.printf("%s\n", msg.c_str()); -// -// if (msg.startsWith("HELLO")) { -// SerialPrint("I", F("WS"), F("Full update")); -// // publishWidgetsWS(); -// // publishStateWS(); -// // choose_log_date_and_send(); // функцию выгрузки архива с графиком я не сделал. Забираю при выгрузке по MQTT -// } -// -// if (info->opcode == WS_TEXT) -// client->text("{}"); -// else -// client->binary("{}"); -// } else { -// // message is comprised of multiple frames or the frame is split into multiple packets -// if (info->index == 0) { -// if (info->num == 0) -// Serial.printf("ws[%s][%u] %s-message start\n", server->url(), client->id(), (info->message_opcode == WS_TEXT) ? "text" : "binary"); -// Serial.printf("ws[%s][%u] frame[%u] start[%llu]\n", server->url(), client->id(), info->num, info->len); -// } -// -// Serial.printf("ws[%s][%u] frame[%u] %s[%llu - %llu]: ", server->url(), client->id(), info->num, (info->message_opcode == WS_TEXT) ? "text" : "binary", info->index, info->index + len); -// -// if (info->opcode == WS_TEXT) { -// for (size_t i = 0; i < len; i++) { -// msg += (char)data[i]; -// } -// } else { -// char buff[3]; -// for (size_t i = 0; i < len; i++) { -// sprintf(buff, "%02x ", (uint8_t)data[i]); -// msg += buff; -// } -// } -// Serial.printf("%s\n", msg.c_str()); -// -// if ((info->index + len) == info->len) { -// Serial.printf("ws[%s][%u] frame[%u] end[%llu]\n", server->url(), client->id(), info->num, info->len); -// if (info->final) { -// Serial.printf("ws[%s][%u] %s-message end\n", server->url(), client->id(), (info->message_opcode == WS_TEXT) ? "text" : "binary"); -// if (info->message_opcode == WS_TEXT) -// client->text("I got your text message"); -// else -// client->binary("I got your binary message"); -// } -// } -// } -// } -//#endif -// ; -//} -// -// void initMDNS() { -//#ifdef MDNS_ENABLED -// MDNS.addService("http", "tcp", 80); -// // TODO Add Adduino OTA -//#endif -// ; -//} -// -// void initOta() { -//#ifdef OTA_UPDATES_ENABLED -// ArduinoOTA.onStart([]() { -// events.send("Update Start", "ota"); -// }); -// ArduinoOTA.onEnd([]() { -// events.send("Update End", "ota"); -// }); -// ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { -// char p[32]; -// sprintf(p, "Progress: %u%%\n", (progress / (total / 100))); -// events.send(p, "ota"); -// }); -// ArduinoOTA.onError([](ota_error_t error) { -// if (error == OTA_AUTH_ERROR) -// events.send("Auth Failed", "ota"); -// else if (error == OTA_BEGIN_ERROR) -// events.send("Begin Failed", "ota"); -// else if (error == OTA_CONNECT_ERROR) -// events.send("Connect Failed", "ota"); -// else if (error == OTA_RECEIVE_ERROR) -// events.send("Recieve Failed", "ota"); -// else if (error == OTA_END_ERROR) -// events.send("End Failed", "ota"); -// }); -// ArduinoOTA.setHostname(hostName); -// ArduinoOTA.begin(); -//#endif -// ; -//} -// -// void initWS() { -//#ifdef WEBSOCKET_ENABLED -// ws.onEvent(onWsEvent); -// server.addHandler(&ws); -// events.onConnect([](AsyncEventSourceClient *client) { -// client->send("", NULL, millis(), 1000); -// }); -// server.addHandler(&events); -//#endif -//} +#include "WebServer.h" + +AsyncWebSocket ws("/ws"); +AsyncEventSource events("/events"); + +void webServerInit() { + String login = jsonReadStr(settingsFlashJson, "weblogin"); + String pass = jsonReadStr(settingsFlashJson, "webpass"); +#ifdef ESP32 + // server.addHandler(new FSEditor(FileFS, login, pass)); +#else + // server.addHandler(new FSEditor(login, pass)); +#endif + + server.serveStatic("/css/", FileFS, "/css/").setCacheControl("max-age=600"); + server.serveStatic("/js/", FileFS, "/js/").setCacheControl("max-age=600"); + server.serveStatic("/favicon.ico", FileFS, "/favicon.ico").setCacheControl("max-age=600"); + server.serveStatic("/icon.jpeg", FileFS, "/icon.jpeg").setCacheControl("max-age=600"); + server.serveStatic("/edit", FileFS, "/edit").setCacheControl("max-age=600"); + + server.serveStatic("/", FileFS, "/").setDefaultFile("index.html").setAuthentication(login.c_str(), pass.c_str()); + + server.onNotFound([](AsyncWebServerRequest *request) { + // SerialPrint("[E]", "WebServer", "not found:\n" + getRequestInfo(request)); + request->send(404); + }); + + server.onFileUpload([](AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len, bool final) { + // TODO + if (!index) { + // SerialPrint("i", "WebServer", "start upload " + filename); + } + if (final) { + // SerialPrint("i", "WebServer", "finish upload: " + prettyBytes(index + len)); + } + }); + + // динамические данные + // server.on("/config.live.json", HTTP_GET, [](AsyncWebServerRequest *request) { + // request->send(200, "application/json", configLiveJson); + //}); + // + // server.on("/config.store.json", HTTP_GET, [](AsyncWebServerRequest *request) { + // request->send(200, "application/json", paramsFlashJson); + //}); + // + // server.on("/config.option.json", HTTP_GET, [](AsyncWebServerRequest *request) { + // request->send(200, "application/json", paramsHeapJson); + //}); + // + // server.on("/config.setup.json", HTTP_GET, [](AsyncWebServerRequest *request) { + // request->send(200, "application/json", settingsFlashJson); + //}); + // + // server.on("/cmd", HTTP_GET, [](AsyncWebServerRequest *request) { + // String cmdStr = request->getParam("command")->value(); + // SerialPrint("i", "WebServer", "do: " + cmdStr); + // // loopCmdAdd(cmdStr); + // request->send(200, "text/html", "OK"); + //}); + + server.begin(); + + SerialPrint("i", F("WEB"), F("WebServer Init")); +} + +void webSocketsInit() { + ws.onEvent(onWsEvent); + server.addHandler(&ws); + events.onConnect([](AsyncEventSourceClient *client) { + client->send("", NULL, millis(), 1000); + }); + server.addHandler(&events); + SerialPrint("i", F("WEB"), F("WebSockets Init")); +} + +void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { + if (type == WS_EVT_CONNECT) { + Serial.printf("ws[%s][%u] connect\n", server->url(), client->id()); + client->printf("Hello Client %u :)", client->id()); + client->ping(); + } else if (type == WS_EVT_DISCONNECT) { + Serial.printf("ws[%s][%u] disconnect\n", server->url(), client->id()); + } else if (type == WS_EVT_ERROR) { + Serial.printf("ws[%s][%u] error(%u): %s\n", server->url(), client->id(), *((uint16_t *)arg), (char *)data); + } else if (type == WS_EVT_PONG) { + Serial.printf("ws[%s][%u] pong[%u]: %s\n", server->url(), client->id(), len, (len) ? (char *)data : ""); + } else if (type == WS_EVT_DATA) { + AwsFrameInfo *info = (AwsFrameInfo *)arg; + String msg = ""; + if (info->final && info->index == 0 && info->len == len) { + // the whole message is in a single frame and we got all of it's data + Serial.printf("ws[%s][%u] %s-message[%llu]: ", server->url(), client->id(), (info->opcode == WS_TEXT) ? "text" : "binary", info->len); + + if (info->opcode == WS_TEXT) { + for (size_t i = 0; i < info->len; i++) { + msg += (char)data[i]; + } + } else { + char buff[3]; + for (size_t i = 0; i < info->len; i++) { + sprintf(buff, "%02x ", (uint8_t)data[i]); + msg += buff; + } + } + Serial.printf("%s\n", msg.c_str()); + + if (info->opcode == WS_TEXT) + client->text("I got your text message"); + else + client->binary("I got your binary message"); + } else { + // message is comprised of multiple frames or the frame is split into multiple packets + if (info->index == 0) { + if (info->num == 0) + Serial.printf("ws[%s][%u] %s-message start\n", server->url(), client->id(), (info->message_opcode == WS_TEXT) ? "text" : "binary"); + Serial.printf("ws[%s][%u] frame[%u] start[%llu]\n", server->url(), client->id(), info->num, info->len); + } + + Serial.printf("ws[%s][%u] frame[%u] %s[%llu - %llu]: ", server->url(), client->id(), info->num, (info->message_opcode == WS_TEXT) ? "text" : "binary", info->index, info->index + len); + + if (info->opcode == WS_TEXT) { + for (size_t i = 0; i < len; i++) { + msg += (char)data[i]; + } + } else { + char buff[3]; + for (size_t i = 0; i < len; i++) { + sprintf(buff, "%02x ", (uint8_t)data[i]); + msg += buff; + } + } + Serial.printf("%s\n", msg.c_str()); + + if ((info->index + len) == info->len) { + Serial.printf("ws[%s][%u] frame[%u] end[%llu]\n", server->url(), client->id(), info->num, info->len); + if (info->final) { + Serial.printf("ws[%s][%u] %s-message end\n", server->url(), client->id(), (info->message_opcode == WS_TEXT) ? "text" : "binary"); + if (info->message_opcode == WS_TEXT) + client->text("I got your text message"); + else + client->binary("I got your binary message"); + } + } + } + } +} diff --git a/src/main.cpp b/src/main.cpp index e19199d0..619d0f88 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,11 +12,20 @@ void setup() { //синхронизация глобальных переменных с flash globalVarsSync(); + //инициализация асинхронного веб сервера + webServerInit(); + + //инициализация веб сокетов асинхронного веб сервера + webSocketsInit(); + //подключаемся к роутеру routerConnect(); //выводим остаток оперативной памяти после старта - // 22.12.21 пустой код без wifi остаток = 50.28 kB + // 22.12.21 пустой код без wifi остаток = 50.28 kB + // 22.12.21 запустил wifi остаток = 48.59 kB + // 22.12.21 добавил асинхронный веб сервер = 38.36 kB + // 22.12.21 добавил web sockets = 37.63 kB SerialPrint(F("i"), F("HEAP"), prettyBytes(ESP.getFreeHeap())); } diff --git a/src/utils/JsonUtils.cpp b/src/utils/JsonUtils.cpp index b47a9d72..8306a4b9 100644 --- a/src/utils/JsonUtils.cpp +++ b/src/utils/JsonUtils.cpp @@ -166,11 +166,5 @@ bool jsonWriteFloat_(String& json, String key, float value) { serializeJson(doc, json); return ret; } -//================================================================================= -void saveConfig() { - writeFile(String("config.json"), settingsFlashJson); -} -void saveStore() { - writeFile(String("store.json"), paramsFlashJson); -} \ No newline at end of file +//================================================================================= diff --git a/src/utils/TimeUtils.cpp b/src/utils/TimeUtils.cpp index 6aa08f05..9ad671a1 100644 --- a/src/utils/TimeUtils.cpp +++ b/src/utils/TimeUtils.cpp @@ -124,9 +124,9 @@ void breakEpochToTime(unsigned long epoch, Time_t& tm) { // prevTime = timenow; // jsonWriteStr(configLiveJson, "timenow", timenow); // eventGen2("timenow", timenow); -// SerialPrint("I", F("NTP"), timenow); +// SerialPrint("i", F("NTP"), timenow); // } // }, // nullptr, true); -// SerialPrint("I", F("NTP"), F("Handle time init")); +// SerialPrint("i", F("NTP"), F("Handle time init")); //} diff --git a/src/utils/WiFiUtils.cpp b/src/utils/WiFiUtils.cpp index 5e57d25c..54880164 100644 --- a/src/utils/WiFiUtils.cpp +++ b/src/utils/WiFiUtils.cpp @@ -19,8 +19,8 @@ void routerConnect() { #else WiFi.setOutputPower(20.5); #endif - SerialPrint("I", "WIFI", "ssid: " + _ssid); - SerialPrint("I", "WIFI", "pass: " + _password); + SerialPrint("i", "WIFI", "ssid: " + _ssid); + SerialPrint("i", "WIFI", "pass: " + _password); } while (--tries && WiFi.status() != WL_CONNECTED) { @@ -38,16 +38,16 @@ void routerConnect() { startAPMode(); } else { Serial.println(""); - SerialPrint("I", "WIFI", "http://" + WiFi.localIP().toString()); + SerialPrint("i", "WIFI", "http://" + WiFi.localIP().toString()); jsonWriteStr(settingsFlashJson, "ip", WiFi.localIP().toString()); //mqttInit(); } - SerialPrint("I", F("WIFI"), F("Network Init")); + SerialPrint("i", F("WIFI"), F("Network Init")); } bool startAPMode() { - SerialPrint("I", "WIFI", "AP Mode"); + SerialPrint("i", "WIFI", "AP Mode"); WiFi.disconnect(); WiFi.mode(WIFI_AP); @@ -58,7 +58,7 @@ bool startAPMode() { WiFi.softAP(_ssidAP.c_str(), _passwordAP.c_str()); IPAddress myIP = WiFi.softAPIP(); - SerialPrint("I", "WIFI", "AP IP: " + myIP.toString()); + SerialPrint("i", "WIFI", "AP IP: " + myIP.toString()); jsonWriteStr(settingsFlashJson, "ip", myIP.toString()); // if (jsonReadInt(paramsHeapJson, "pass_status") != 1) { @@ -66,7 +66,7 @@ bool startAPMode() { WIFI_SCAN, 10 * 1000, [&](void*) { String sta_ssid = jsonReadStr(settingsFlashJson, "routerssid"); - SerialPrint("I", "WIFI", "scanning for " + sta_ssid); + SerialPrint("i", "WIFI", "scanning for " + sta_ssid); if (RouterFind(sta_ssid)) { ts.remove(WIFI_SCAN); @@ -82,19 +82,19 @@ bool startAPMode() { boolean RouterFind(String ssid) { bool res = false; int n = WiFi.scanComplete(); - SerialPrint("I", "WIFI", "scan result: " + String(n, DEC)); + SerialPrint("i", "WIFI", "scan result: " + String(n, DEC)); if (n == -2) { //Сканирование не было запущено, запускаем - SerialPrint("I", "WIFI", "start scanning"); + SerialPrint("i", "WIFI", "start scanning"); WiFi.scanNetworks(true, false); // async, show_hidden } else if (n == -1) { //Сканирование все еще выполняется - SerialPrint("I", "WIFI", "scanning in progress"); + SerialPrint("i", "WIFI", "scanning in progress"); } else if (n == 0) { //ни одна сеть не найдена - SerialPrint("I", "WIFI", "no networks found"); + SerialPrint("i", "WIFI", "no networks found"); WiFi.scanNetworks(true, false); } @@ -103,7 +103,7 @@ boolean RouterFind(String ssid) { if (WiFi.SSID(i) == ssid) { res = true; } - SerialPrint("I", "WIFI", (res ? "*" : "") + String(i, DEC) + ") " + WiFi.SSID(i)); + SerialPrint("i", "WIFI", (res ? "*" : "") + String(i, DEC) + ") " + WiFi.SSID(i)); } } WiFi.scanDelete(); @@ -138,7 +138,7 @@ uint8_t RSSIquality() { void wifiSignalInit() { ts.add( SYGNAL, 1000 * 60, [&](void*) { - //SerialPrint("I", "System", printMemoryStatus()); + //SerialPrint("i", "System", printMemoryStatus()); //getFSInfo();