unisi 0.1.9__py3-none-any.whl → 0.1.11__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
unisi/autotest.py CHANGED
@@ -1,4 +1,4 @@
1
- import config, os, logging, json
1
+ import config, os, logging, json, asyncio
2
2
  from .utils import *
3
3
  from .guielements import *
4
4
  from .containers import Block, Dialog
@@ -84,7 +84,7 @@ def test(filename, user):
84
84
  message = data[i]
85
85
  expected = data[i + 1]
86
86
 
87
- result = user.result4message(ReceivedMessage(message))
87
+ result = asyncio.run(user.result4message(ReceivedMessage(message)))
88
88
  responce = user.prepare_result(result)
89
89
  jresponce = obj2json(responce)
90
90
 
@@ -202,9 +202,8 @@ def check_module(module):
202
202
  def run_tests():
203
203
  if not os.path.exists(testdir):
204
204
  os.makedirs(testdir)
205
- user = User.UserType()
206
- user.load()
207
- user.session = 'autotest'
205
+ user = User.type('autotest')
206
+ user.load()
208
207
  errors = []
209
208
  for module in user.screens:
210
209
  errors += check_module(module)
unisi/common.py CHANGED
@@ -2,7 +2,7 @@ import jsonpickle
2
2
 
3
3
  def flatten(*arr):
4
4
  for a in arr:
5
- if isinstance(a, list):
5
+ if isinstance(a, list | tuple):
6
6
  yield from flatten(*a)
7
7
  else:
8
8
  yield a
unisi/proxy.py CHANGED
@@ -26,11 +26,11 @@ message_types = ['error','warning','info']
26
26
 
27
27
  class Proxy:
28
28
  """UNISI proxy"""
29
- def __init__(self, host_port, timeout = 7, ssl = False):
29
+ def __init__(self, host_port, timeout = 7, ssl = False, session = ''):
30
30
  addr_port = f'{wss_header if ssl else ws_header}{host_port}'
31
31
  addr_port = f'{addr_port}{"" if addr_port.endswith("/") else "/"}{ws_path}'
32
32
  self.host_port = f'{"https" if ssl else "http"}://{host_port}'
33
- self.conn = create_connection(addr_port, timeout = timeout)
33
+ self.conn = create_connection(addr_port, timeout = timeout, header = {'session' : session})
34
34
  self.screen = None
35
35
  self.screens = {}
36
36
  self.dialog = None
unisi/server.py CHANGED
@@ -42,68 +42,72 @@ async def static_serve(request):
42
42
 
43
43
  return web.FileResponse(file_path) if file_path else web.HTTPNotFound()
44
44
 
45
- def broadcast(message, message_user):
46
- screen = message_user.screen_module
47
- for user in User.reflections:
48
- if user is not message_user and screen is user.screen_module:
49
- user.sync_send(message)
50
-
51
45
  async def websocket_handler(request):
52
46
  ws = web.WebSocketResponse()
53
47
  await ws.prepare(request)
54
- user, ok = make_user()
55
- user.transport = ws._writer.transport if divpath != '/' else None
48
+ user, status = make_user(request)
49
+ if not user:
50
+ await ws.send_str(toJson(status))
51
+ else:
52
+ user.transport = ws._writer.transport if divpath != '/' else None
56
53
 
57
- async def send(res):
58
- if type(res) != str:
59
- res = toJson(user.prepare_result(res))
60
- await ws.send_str(res)
54
+ async def send(res):
55
+ if type(res) != str:
56
+ res = toJson(user.prepare_result(res))
57
+ await ws.send_str(res)
61
58
 
62
- user.send = send
63
- user.session = request.remote
64
- await send(user.screen if ok else empty_app)
65
- try:
66
- async for msg in ws:
67
- if msg.type == WSMsgType.TEXT:
68
- if msg.data == 'close':
69
- await ws.close()
70
- else:
71
- raw_message = json.loads(msg.data)
72
- message = None
73
- if isinstance(raw_message, list):
74
- if raw_message:
75
- for raw_submessage in raw_message:
76
- message = ReceivedMessage(raw_submessage)
77
- result = user.result4message(message)
78
- else:
79
- result = Warning('Empty command batch!')
80
- else:
81
- message = ReceivedMessage(raw_message)
82
- result = user.result4message(message)
83
- await send(result)
84
- if message:
85
- if recorder.record_file:
86
- recorder.accept(message, user.prepare_result (result))
87
- if config.mirror and not is_screen_switch(message):
88
- if result:
89
- broadcast(result, user)
90
- msg_object = user.find_element(message)
91
- if not isinstance(result, Message) or not result.contains(msg_object):
92
- broadcast(toJson(user.prepare_result(msg_object)), user)
93
- elif msg.type == WSMsgType.ERROR:
94
- user.log('ws connection closed with exception %s' % ws.exception())
95
- except:
96
- user.log(traceback.format_exc())
59
+ user.send = send
60
+ await send(user.screen if status else empty_app)
61
+ try:
62
+ async for msg in ws:
63
+ if msg.type == WSMsgType.TEXT:
64
+ if msg.data == 'close':
65
+ await ws.close()
66
+ else:
67
+ raw_message = json.loads(msg.data)
68
+ message = None
69
+ if isinstance(raw_message, list):
70
+ if raw_message:
71
+ for raw_submessage in raw_message:
72
+ message = ReceivedMessage(raw_submessage)
73
+ result = await user.result4message(message)
74
+ else:
75
+ result = Warning('Empty command batch!')
76
+ else:
77
+ message = ReceivedMessage(raw_message)
78
+ result = await user.result4message(message)
79
+ await send(result)
80
+ if message:
81
+ if recorder.record_file:
82
+ recorder.accept(message, user.prepare_result (result))
83
+ await user.reflect(message, result)
84
+ """ if user.reflections and not is_screen_switch(message):
85
+ if result:
86
+ await broadcast(result, user)
87
+ msg_object = user.find_element(message)
88
+ if not isinstance(result, Message) or not result.contains(msg_object):
89
+ await broadcast(toJson(user.prepare_result(msg_object)), user) """
90
+ elif msg.type == WSMsgType.ERROR:
91
+ user.log('ws connection closed with exception %s' % ws.exception())
92
+ except:
93
+ user.log(traceback.format_exc())
97
94
 
98
- if User.reflections:
99
- User.reflections.remove(user)
100
- return ws
95
+ uss = User.sessions
96
+ if uss and uss.get(user.session):
97
+ del uss[user.session]
98
+
99
+ if user.reflections: #reflections is common array
100
+ if len(user.reflections) == 2:
101
+ user.reflections.clear() #1 element in user.reflections has no sense
102
+ else:
103
+ user.reflections.remove(user)
104
+ return ws #?<->
101
105
 
102
106
  def start(appname = None, user_type = User, http_handlers = []):
103
107
  if appname is not None:
104
108
  config.appname = appname
105
109
 
106
- User.UserType = user_type
110
+ User.type = user_type
107
111
 
108
112
  if config.autotest:
109
113
  run_tests()
unisi/users.py CHANGED
@@ -1,37 +1,56 @@
1
- import importlib
2
1
  from .utils import *
3
2
  from .guielements import *
4
3
  from .common import *
5
4
  from .containers import Dialog, Screen
6
- import sys
7
- import asyncio
8
- from threading import Thread
9
- import logging
5
+ import sys, asyncio, logging, importlib
10
6
 
11
7
  class User:
12
- def __init__(self):
13
- self.screens = []
14
- self.active_dialog = None
15
- self.screen_module = None
16
- self.session = None
17
- self.__handlers__ = {}
18
- self.last_message = None
19
- User.last_user = self
8
+ def __init__(self, session: str, share = None):
9
+ self.session = session
10
+ self.active_dialog = None
11
+ self.last_message = None
12
+ User.last_user = self
20
13
 
21
- async def send_windows(self, obj):
22
- await self.send(obj)
23
- self.transport._write_fut = None
24
- self.transport._loop._ready.pop()
14
+ if share:
15
+ self.screens = share.screens
16
+ self.screen_module = share.screen_module if share.screens else []
17
+ self.__handlers__ = share.__handlers__
18
+
19
+ if share.reflections:
20
+ share.reflections.append(self)
21
+ else:
22
+ share.reflections = [share, self]
23
+ self.reflections = share.reflections
24
+ else:
25
+ self.screens = []
26
+ self.reflections = []
27
+ self.screen_module = None
28
+ self.__handlers__ = {}
25
29
 
26
30
  def sync_send(self, obj):
27
- asyncio.run_coroutine_threadsafe(self.send_windows(obj)
28
- if self.transport else self.send(obj), self.extra_loop)
31
+ asyncio.run(self.send(obj))
29
32
 
30
- def progress(self, str, *updates):
31
- """open or update progress window if str != null else close it """
33
+ async def broadcast(self, message):
34
+ screen = self.screen_module
35
+ await asyncio.gather(*[user.send(message)
36
+ for user in self.reflections
37
+ if user is not self and screen is user.screen_module])
38
+
39
+ async def reflect(self, message, result):
40
+ if self.reflections and not is_screen_switch(message):
41
+ if result:
42
+ await self.broadcast(result)
43
+ if message:
44
+ msg_object = self.find_element(message)
45
+ if not isinstance(result, Message) or not result.contains(msg_object):
46
+ await self.broadcast(toJson(self.prepare_result(msg_object)))
47
+
48
+ async def progress(self, str, *updates):
49
+ """open or update progress window if str != null else close it """
32
50
  if not self.testing:
33
- self.sync_send(TypeMessage('progress', str, *updates, user = self))
34
-
51
+ msg = TypeMessage('progress', str, *updates, user = self)
52
+ await asyncio.gather(self.send(msg), self.reflect(None, msg))
53
+
35
54
  def load_screen(self, file):
36
55
  screen_vars = {
37
56
  'icon' : None,
@@ -103,21 +122,25 @@ class User:
103
122
  return self.screen_module.screen
104
123
 
105
124
  def set_screen(self,name):
106
- return self.process(ArgObject(block = 'root', element = None, value = name))
125
+ return asyncio.run(self.process(ArgObject(block = 'root', element = None, value = name)))
107
126
 
108
- def result4message(self, message):
127
+ async def result4message(self, message):
109
128
  result = None
110
129
  dialog = self.active_dialog
111
130
  if dialog:
112
131
  if message.element is None: #button pressed
113
- self.active_dialog = None
114
- result = dialog.changed(dialog, message.value)
132
+ self.active_dialog = None
133
+ if self.reflections:
134
+ await self.broadcast(TypeMessage('action', 'close'))
135
+ handler = dialog.changed
136
+ result = (await handler(dialog, message.value)) if asyncio.iscoroutinefunction(handler)\
137
+ else handler(dialog, message.value)
115
138
  else:
116
139
  el = self.find_element(message)
117
140
  if el:
118
- result = self.process_element(el, message)
141
+ result = await self.process_element(el, message)
119
142
  else:
120
- result = self.process(message)
143
+ result = await self.process(message)
121
144
  if result and isinstance(result, Dialog):
122
145
  self.active_dialog = result
123
146
  return result
@@ -137,24 +160,16 @@ class User:
137
160
  else:
138
161
  for bl in flatten(self.blocks):
139
162
  if bl.name == blname:
140
- for c in bl.value:
141
- if isinstance(c, list):
142
- for sub in c:
143
- if sub.name == elname:
144
- return sub
145
- elif c.name == elname:
163
+ for c in flatten(bl.value):
164
+ if c.name == elname:
146
165
  return c
147
166
 
148
167
  def find_path(self, elem):
149
168
  for bl in flatten(self.blocks):
150
169
  if bl == elem:
151
170
  return [bl.name]
152
- for c in bl.value:
153
- if isinstance(c, list):
154
- for sub in c:
155
- if sub == elem:
156
- return [bl.name, sub.name]
157
- elif c == elem:
171
+ for c in flatten(bl.value):
172
+ if c == elem:
158
173
  return [bl.name, c.name]
159
174
  for e in self.screen.toolbar:
160
175
  if e == elem:
@@ -173,7 +188,7 @@ class User:
173
188
  raw = Message(*raw, user = self)
174
189
  return raw
175
190
 
176
- def process(self, message):
191
+ async def process(self, message):
177
192
  self.last_message = message
178
193
  screen_change_message = getattr(message, 'screen',None) and self.screen.name != message.screen
179
194
  if is_screen_switch(message) or screen_change_message:
@@ -181,7 +196,7 @@ class User:
181
196
  if s.name == message.value:
182
197
  self.screen_module = s
183
198
  if screen_change_message:
184
- break
199
+ break
185
200
  if getattr(s.screen,'prepare', False):
186
201
  s.screen.prepare()
187
202
  return True
@@ -192,77 +207,71 @@ class User:
192
207
 
193
208
  elem = self.find_element(message)
194
209
  if elem:
195
- return self.process_element(elem, message)
210
+ return await self.process_element(elem, message)
196
211
 
197
- error = f'Element {message.block}>>{message.element} does not exist!'
212
+ error = f'Element {message.block}/{message.element} does not exist!'
198
213
  self.log(error)
199
214
  return Error(error)
200
215
 
201
- def process_element(self, elem, message):
216
+ async def process_element(self, elem, message):
202
217
  event = message.event
203
- query = event in ['complete', 'append']
218
+ query = event == 'complete' or event == 'append'
204
219
 
205
220
  handler = self.__handlers__.get((elem, event), None)
206
221
  if handler:
207
- result = handler(elem, message.value)
208
- return result
209
-
222
+ return (await handler(elem, message.value)) if asyncio.iscoroutinefunction(handler)\
223
+ else handler(elem, message.value)
224
+
210
225
  handler = getattr(elem, event, False)
211
226
  if handler:
212
- result = handler(elem, message.value)
227
+ result = (await handler(elem, message.value)) if asyncio.iscoroutinefunction(handler)\
228
+ else handler(elem, message.value)
213
229
  if query:
214
230
  result = Answer(event, message, result)
215
231
  return result
216
232
  elif event == 'changed':
217
233
  elem.value = message.value
218
234
  else:
219
- self.log(f'{elem} does not contain method for {event} event type!')
220
- return Error(f'Invalid {event} event type for {message.block}>>{message.element} is received!')
221
-
222
- def reflect(self):
223
- user = User.UserType()
224
- user.screens = self.screens
225
- if self.screens:
226
- user.screen_module = self.screens[0]
227
- user.__handlers__ = self.__handlers__
228
- return user
229
-
235
+ error = f"{message.block}/{message.element} doesn't contain '{event}' method type!"
236
+ self.log(error)
237
+ return Error(error)
238
+
230
239
  def log(self, str, type = 'error'):
231
- scr = self.screen.name if self.screens else 'omitted'
232
- str = f"session: {self.session}, screen: {scr}, message: {self.last_message} \n {str}"
240
+ scr = self.screen.name if self.screens else 'void'
241
+ str = f"session: {self.session}, screen: {scr}, message: {self.last_message}\n {str}"
233
242
  if type == 'error':
234
243
  logging.error(str)
235
244
  else:
236
245
  logging.warning(str)
237
246
 
238
- def make_user():
239
- if config.mirror and User.last_user:
240
- user = User.last_user.reflect()
247
+ User.type = User
248
+ User.last_user = None
249
+ User.toolbar = []
250
+ User.sessions = {}
251
+ User.count = 0
252
+
253
+ def make_user(request):
254
+ session = f'{request.remote}-{User.count}'
255
+ User.count += 1
256
+ requested_connect = request.headers.get('session')
257
+ if requested_connect:
258
+ user = User.sessions.get(requested_connect, None)
259
+ if not user:
260
+ error = f'Session id "{requested_connect}" is unknown. Connection refused!'
261
+ logging.error(error)
262
+ return None, Error(error)
263
+ user = User.type(session, user)
264
+ ok = user.screens
265
+ elif config.mirror and User.last_user:
266
+ user = User.type(session, User.last_user)
241
267
  ok = user.screens
242
268
  else:
243
- user = User.UserType()
244
- ok = user.load()
245
- if config.mirror:
246
- User.reflections.append(user)
269
+ user = User.type(session)
270
+ ok = user.load()
271
+ User.sessions[session] = user
247
272
  return user, ok
248
273
 
249
- #loop and thread is for progress window and sync interactions
250
- loop = asyncio.new_event_loop()
251
-
252
- def f(loop):
253
- asyncio.set_event_loop(loop)
254
- loop.run_forever()
255
-
256
- async_thread = Thread(target=f, args=(loop,))
257
- async_thread.start()
258
-
259
274
  def handle(elem, event):
260
275
  def h(fn):
261
276
  User.last_user.__handlers__[elem, event] = fn
262
- return h
263
-
264
- User.extra_loop = loop
265
- User.UserType = User
266
- User.last_user = None
267
- User.toolbar = []
268
- User.reflections = []
277
+ return h
unisi/utils.py CHANGED
@@ -27,7 +27,7 @@ appname = 'Unisi app'
27
27
  print("Config with default parameters is created!")
28
28
 
29
29
  def is_screen_switch(message):
30
- return message.block == 'root' and message.element is None
30
+ return message and message.block == 'root' and message.element is None
31
31
 
32
32
  def filename2url(fn):
33
33
  if fn[0] == '/' or fn[1] == ':': #if full path
unisi/web/index.html CHANGED
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><title>UNISI</title><meta charset=utf-8><meta name=description content="UNISI on Quasar"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width"><link rel=icon type=image/png sizes=128x128 href=icons/favicon-128x128.png><link rel=icon type=image/png sizes=96x96 href=icons/favicon-96x96.png><link rel=icon type=image/png sizes=32x32 href=icons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=icons/favicon-16x16.png><link rel=icon type=image/ico href=favicon.ico><script defer src=js/vendor.d6797c01.js></script><script defer src=js/app.bf75d7b6.js></script><link href=css/vendor.9ed7638d.css rel=stylesheet><link href=css/app.31d6cfe0.css rel=stylesheet></head><body><div id=q-app></div></body></html>
1
+ <!DOCTYPE html><html><head><title>UNISI</title><meta charset=utf-8><meta name=description content="UNISI on Quasar"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width"><link rel=icon type=image/png sizes=128x128 href=icons/favicon-128x128.png><link rel=icon type=image/png sizes=96x96 href=icons/favicon-96x96.png><link rel=icon type=image/png sizes=32x32 href=icons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=icons/favicon-16x16.png><link rel=icon type=image/ico href=favicon.ico><script defer src=js/vendor.d6797c01.js></script><script defer src=js/app.636fcf8d.js></script><link href=css/vendor.9ed7638d.css rel=stylesheet><link href=css/app.31d6cfe0.css rel=stylesheet></head><body><div id=q-app></div></body></html>
@@ -1 +1 @@
1
- "use strict";(globalThis["webpackChunkuniqua"]=globalThis["webpackChunkuniqua"]||[]).push([[353],{4353:(e,t,a)=>{a.r(t),a.d(t,{default:()=>ua});var l=a(3673),s=a(2323);const i=(0,l._)("div",{class:"q-pa-md"},null,-1),o=(0,l._)("div",{class:"q-pa-md"},null,-1);function n(e,t,a,n,d,r){const c=(0,l.up)("q-item-label"),h=(0,l.up)("element"),u=(0,l.up)("q-tab"),p=(0,l.up)("q-tabs"),g=(0,l.up)("q-space"),m=(0,l.up)("q-tooltip"),f=(0,l.up)("q-btn"),y=(0,l.up)("q-toolbar"),w=(0,l.up)("q-header"),b=(0,l.up)("zone"),v=(0,l.up)("q-page"),k=(0,l.up)("q-page-container"),x=(0,l.up)("q-layout");return(0,l.wg)(),(0,l.j4)(x,{view:"lHh Lpr lFf"},{default:(0,l.w5)((()=>[(0,l.Wm)(w,{elevated:"",class:(0,s.C_)({"bg-deep-purple-9":e.Dark.isActive})},{default:(0,l.w5)((()=>[(0,l.Wm)(y,null,{default:(0,l.w5)((()=>[(0,l.Wm)(c,{class:"text-h5"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.screen.header?e.screen.header:""),1)])),_:1}),i,((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.left_toolbar,(t=>((0,l.wg)(),(0,l.j4)(h,{class:(0,s.C_)(["q-ma-xs",{"bg-blue-grey-7":e.Dark.isActive,"bg-blue-5":!e.Dark.isActive}]),data:t,pdata:e.tooldata},null,8,["class","data","pdata"])))),256)),o,(0,l.Wm)(p,{class:"bold-tabs",align:"center","inline-label":"",dense:"",modelValue:e.tab,"onUpdate:modelValue":t[0]||(t[0]=t=>e.tab=t),style:{float:"center"}},{default:(0,l.w5)((()=>[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.menu,(t=>((0,l.wg)(),(0,l.iD)("div",null,[t.icon?((0,l.wg)(),(0,l.j4)(u,{key:0,class:"justify-center text-white shadow-2","no-caps":"",name:t.name,icon:t.icon,label:t.name,onClick:a=>e.tabclick(t.name)},null,8,["name","icon","label","onClick"])):(0,l.kq)("",!0),t.icon?(0,l.kq)("",!0):((0,l.wg)(),(0,l.j4)(u,{key:1,class:"justify-center text-white shadow-2","no-caps":"",name:t.name,label:t.name,onClick:a=>e.tabclick(t.name)},null,8,["name","label","onClick"]))])))),256))])),_:1},8,["modelValue"]),(0,l.Wm)(g),((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.right_toolbar,(t=>((0,l.wg)(),(0,l.j4)(h,{class:(0,s.C_)(["q-ma-xs",{"bg-blue-grey-7":e.Dark.isActive,"bg-blue-5":!e.Dark.isActive}]),data:t,pdata:e.tooldata},null,8,["class","data","pdata"])))),256)),(0,l.Wm)(f,{class:(0,s.C_)(["q-ma-xs",{"bg-blue-grey-9":e.Dark.isActive}]),dense:"",round:"",icon:e.Dark.isActive?"light_mode":"dark_mode",onClick:e.switchTheme},{default:(0,l.w5)((()=>[(0,l.Wm)(m,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Dark/Light mode")])),_:1})])),_:1},8,["class","icon","onClick"])])),_:1})])),_:1},8,["class"]),(0,l.Wm)(k,{class:"content"},{default:(0,l.w5)((()=>[(0,l.Wm)(v,{class:"flex justify-center centers"},{default:(0,l.w5)((()=>[(0,l.Wm)(b,{data:e.screen.blocks,ref:"page"},null,8,["data"])])),_:1})])),_:1})])),_:1})}function d(e,t,a,i,o,n){const d=(0,l.up)("q-icon"),r=(0,l.up)("q-item-section"),c=(0,l.up)("q-item-label"),h=(0,l.up)("q-item");return(0,l.wg)(),(0,l.j4)(h,{clickable:"",tag:"a",target:"_blank",onClick:e.send},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{avatar:""},{default:(0,l.w5)((()=>[(0,l.Wm)(d,{name:e.icon},null,8,["name"])])),_:1}),(0,l.Wm)(r,null,{default:(0,l.w5)((()=>[(0,l.Wm)(c,null,{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.name),1)])),_:1})])),_:1})])),_:1},8,["onClick"])}a(71);var r=a(698),c=a(8603);let h=null,u={};var p;const g=!1;let m=g;const f=["graph","chart","block","text"],y=["tree","table","list","text","graph","chart"];const w=window.location.host,b=`${window.location.protocol}//${w}`;let v={},k={},x={};function C(e){p=new WebSocket(g?"ws://localhost:8000/ws":`ws://${w}/ws`),p.onopen=()=>e.statusConnect=!0,p.onmessage=t=>{m&&console.log("incoming message",t.data),h.designCycle=0;let a=JSON.parse(t.data);a?e.processMessage(a):e.closeProgress(a)},p.onerror=t=>e.error(t),p.onclose=t=>{t.wasClean?e.info("Connection was finished by the server."):e.error("Connection suddenly closed!"),e.statusConnect=!1,m&&console.info("close code : "+t.code+" reason: "+t.reason)},h=e}function _(e){let t={block:e[0],element:e[1],event:e[2],value:e[3]};m&&console.log("sended",t),p.send(JSON.stringify(t))}let A=!0;function S(e){A=e,e||(x={})}function q(e){if(A){let t=x[e.fullname];if(t)return t.styleSize;A=!1}return null}function D(e,t,a,l="complete"){let s=[e.pdata.name,e.data.name,l,t];_(s),u[s.slice(0,3).toString()]=a}function z(){v={},x=k,A=!0,k={}}function j(e,t){Object.assign(e.data,t),e.updated=t.value,e.value=t.value}function E(e){for(let t of e){let e=t.path;if(e.length>1){e.reverse();let a=e.join("@"),l=k[a];j(l,t.data)}else{let a=v[e[0]];Object.assign(a.data,t.data)}}}function $(e){let t=[e.message.block,e.message.element,e.type].toString();"string"==typeof e.value?h.error(e.value):u[t](e.value),delete u[t]}function Z(e){let t=[];for(let l of e)l instanceof Array?t.push(l):t.push([l]);let a=t.shift();return t.reduce(((e,t)=>e.flatMap((e=>t.map((t=>e instanceof Array?[...e,t]:[e,t]))))),a)}function M(e=!1){W(document.documentElement.scrollWidth>window.innerWidth)}let O=(0,c.debounce)(M,50);function W(e){if(h.designCycle>=1)return;m&&console.log(`------------------recalc design ${h.designCycle}`),h.designCycle++;const t=N(e),a=V(e);for(let[l,s]of Object.entries(t)){let e=k[l],t=a[l];const[i,o]=t||[0,1];let n,d=e.geom(),r=d.el,c=e.pdata?e.pdata.name:e.name,h=v[c];for(let a of h.data.value.slice(1))if(Array.isArray(a)){if(a.find((t=>t.name==e.data.name))){let e=a[a.length-1],t=`${e.name}@${c}`;n=k[t];break}}else if(a.name==e.data.name){n=e;break}let u=i;u/=o;let p=e.only_fixed_elems?"":`width:${Math.ceil(r.clientWidth+u)}px`,g=`height:${Math.floor(s+e.he)}px;${p}`;g!=e.styleSize&&(e.styleSize=g),e.has_recalc=!1}}function N(e){const t=h.screen.blocks;let a=window.innerHeight-60,l={},s=new Map,i=[];for(let n of t){const e=[];let t=n instanceof Array,o=t?Z(n):[[n]],d={};for(let[a,l]of Object.entries(v)){let e=l.$el.getBoundingClientRect(),t=e.bottom;d[a]=t-e.top}for(let a of o){let e=0,t=!0;for(let l of a)e+=d[l.name],v[l.name].only_fixed_elems||(t=!1);if(t){let e=v[a.slice(-1)[0].name];k[e.fullname]=e}i.push([e+8*a.length,a])}i.sort(((e,t)=>e[0]>t[0]?-1:e[0]==t[0]?0:1));for(let a of i){let t=a[1];(0,r.hu)(Array.isArray(t));const l=[];for(let[e,a]of Object.entries(k))if(a.expanding_height){let[i,o]=e.split("@");if(t.find((e=>e.name==o))){let e=!0;const t=a.geom();for(let[i,o]of l.entries()){let n=o.geom();e&&o!==a&&n.top==t.top&&(n.scrollHeight<t.scrollHeight&&(l[i]=a),e=!1,s.set(a.fullname,o.fullname))}e&&l.push(a)}}l.length&&e.push([a[0],l])}for(let[s,i]of e){let e=0,t=[];for(let a of i)if(a.fullname in l)s+=l[a.fullname];else{let l=a.geom(),i=l.bottom-l.top;i<100&&(s+=100-i,i=100),a.he=i,e+=a.he,t.push(a)}let o=(e+a-s)/t.length,n=0;for(let a of t){let e,s=o-a.he;if(1==t.length)e=s;else if(e=Math.floor(s),s-e){n+=s-e;let t=Math.round(n)-n;t<.001&&t>-.001&&(e+=Math.round(n),n=0)}l[a.fullname]=e}}}let o=Array.from(s.entries());o.sort(((e,t)=>e[0]in l||e[1]in l?-1:1));for(let[n,d]of o)d in l?(l[n]=l[d],k[n].he=k[d].he):(l[d]=l[n],k[d].he=k[n].he);return l}function V(e){let t=null;const a=t?[t]:h.screen.blocks;let l=window.innerWidth-20,s=[],i={};for(let n of a)if(0==s.length)if(Array.isArray(n))for(let e of n)s.push(Array.isArray(e)?e:[e]);else s=[[n]];else{let e=[];if(Array.isArray(n))for(let t of n)for(let a of s)e.push(Array.isArray(t)?a.concat(t):[...a,t]);else for(let t of s)e.push([...t,n]);s=e}const o=[];for(let n of s){let e=0;for(let l of n){let t=v[l.name].$el.getBoundingClientRect();e+=t.right-t.left+5}let t=l-e,a=[[]];for(let l of n){let e=[];for(let t of v[l.name].hlevelements)for(let l of a)e.push([...l,...t]);a=e}for(let l of a)o.push([t,l])}o.sort(((e,t)=>t[1].length-e[1].length));for(let[n,d]of o){let t=new Map;for(let e=0;e<d.length;e++){let a=d[e],l=a.parent_name,s=l||a.name,o=a.geom(),r=(a.data.width?a.data.width:o.scrollWidth)-(o.right-o.left);if(r>1&&!f.includes(a.type)&&n>0&&!i[a.fullname]){let e=n>r?r:n;n-=e,i[a.fullname]=[e,1]}if(s=a.parent_name,s){let e=v[s],l=e.$el.getBoundingClientRect().right-6,i=e.free_right_delta4(a,o.right),n=l-i;i&&n>0&&(!t.has(s)||t.get(s)>n)&&t.set(s,n)}}for(let e of t.values())n+=e;let a=[];for(let o of d)if(o.expanding_width&&(e||f.includes(o.type)))if(i[o.fullname]){let[e,t]=i[o.fullname];n-=e/t}else a.push(o);let l=a.length;const s=n/l;for(let e of a)i[e.fullname]||(i[e.fullname]=[Math.floor(s),1]);for(let e of d)i[e.fullname]||(i[e.fullname]=[0,1])}return i}const H=(0,l.aZ)({name:"menubar",methods:{send(){_(["root",null,"changed",this.name])}},props:{name:{type:String,required:!0},icon:{type:String,default:""}}});var K=a(4260),Q=a(3414),U=a(2035),F=a(4554),T=a(2350),P=a(7518),R=a.n(P);const L=(0,K.Z)(H,[["render",d]]),B=L;R()(H,"components",{QItem:Q.Z,QItemSection:U.Z,QIcon:F.Z,QItemLabel:T.Z});const I={key:0,class:"row q-col-gutter-xs q-py-xs"},Y={class:"q-col-gutter-xs"},G={key:0,class:"column q-col-gutter-xs"};function J(e,t,a,s,i,o){const n=(0,l.up)("zone",!0),d=(0,l.up)("block");return e.data instanceof Array?((0,l.wg)(),(0,l.iD)("div",I,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.data,(e=>((0,l.wg)(),(0,l.iD)("div",Y,[e instanceof Array?((0,l.wg)(),(0,l.iD)("div",G,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e,(e=>((0,l.wg)(),(0,l.j4)(n,{class:"q-col-gutter-xs q-py-xs",data:e},null,8,["data"])))),256))])):((0,l.wg)(),(0,l.j4)(d,{key:1,data:e},null,8,["data"]))])))),256))])):((0,l.wg)(),(0,l.j4)(d,{key:1,data:e.data},null,8,["data"]))}const X={class:"row no-wrap"},ee=["data","pdata"],te={key:0,class:"row"},ae=["data","pdata"],le={key:0,class:"row no-wrap"};function se(e,t,a,i,o,n){const d=(0,l.up)("element"),r=(0,l.up)("q-icon"),c=(0,l.up)("q-scroll-area"),h=(0,l.up)("q-card");return(0,l.wg)(),(0,l.j4)(h,{class:"my-card q-ma-xs",style:(0,s.j5)(e.only_fixed_elems?e.styleSize:null),key:e.name},{default:(0,l.w5)((()=>[(0,l._)("div",X,[e.data.logo?((0,l.wg)(),(0,l.j4)(d,{key:0,class:"q-ma-sm",data:e.data.logo,pdata:e.data},null,8,["data","pdata"])):e.data.icon?((0,l.wg)(),(0,l.j4)(r,{key:1,class:"q-mt-sm",size:"sm",name:e.data.icon},null,8,["name"])):(0,l.kq)("",!0),"_"!=e.name[0]?((0,l.wg)(),(0,l.iD)("p",{key:2,class:(0,s.C_)(["q-ma-sm",{"text-info":e.Dark.isActive,"text-cyan-10":!e.Dark.isActive}]),style:{"font-size":"18px"}},(0,s.zw)(e.name),3)):(0,l.kq)("",!0),((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.tops,(t=>((0,l.wg)(),(0,l.j4)(d,{class:"q-ma-xs",data:t,pdata:e.data},null,8,["data","pdata"])))),256))]),e.data.scroll?((0,l.wg)(),(0,l.j4)(c,{key:0,style:(0,s.j5)(e.styleSize),"thumb-style":e.thumbStyle,"bar-style":e.barStyle},{default:(0,l.w5)((()=>[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.data.value.slice(1),(t=>((0,l.wg)(),(0,l.iD)("div",{class:"column",data:t,pdata:e.data},[t instanceof Array?((0,l.wg)(),(0,l.iD)("div",te,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(t,(t=>((0,l.wg)(),(0,l.j4)(d,{class:"q-ma-xs",data:t,pdata:e.data},null,8,["data","pdata"])))),256))])):((0,l.wg)(),(0,l.j4)(d,{key:1,class:"q-ma-xs",data:t,pdata:e.data},null,8,["data","pdata"]))],8,ee)))),256))])),_:1},8,["style","thumb-style","bar-style"])):((0,l.wg)(!0),(0,l.iD)(l.HY,{key:1},(0,l.Ko)(e.data.value.slice(1),(t=>((0,l.wg)(),(0,l.iD)("div",{class:"column",data:t,pdata:e.data},[t instanceof Array?((0,l.wg)(),(0,l.iD)("div",le,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(t,(t=>((0,l.wg)(),(0,l.j4)(d,{class:"q-ma-xs",data:t,pdata:e.data},null,8,["data","pdata"])))),256))])):((0,l.wg)(),(0,l.j4)(d,{key:1,class:"q-ma-xs",data:t,pdata:e.data},null,8,["data","pdata"]))],8,ae)))),256))])),_:1},8,["style"])}var ie=a(8880);const oe=e=>((0,l.dD)("data-v-f48596a0"),e=e(),(0,l.Cn)(),e),ne={key:4},de={key:5,class:"{'bg-blue-grey-9': Dark.isActive}"},re={key:9},ce={key:12},he=["width","height"],ue=["src"],pe={key:19,class:"web-camera-container"},ge={class:"camera-button"},me={key:0},fe={key:1},ye={class:"camera-loading"},we=oe((()=>(0,l._)("ul",{class:"loader-circle"},[(0,l._)("li"),(0,l._)("li"),(0,l._)("li")],-1))),be=[we],ve=["height"],ke=["height"],xe={key:1,class:"camera-shoot"},Ce=oe((()=>(0,l._)("img",{src:"https://img.icons8.com/material-outlined/50/000000/camera--v2.png"},null,-1))),_e=[Ce],Ae={key:2,class:"camera-download"},Se={key:20};function qe(e,t,a,i,o,n){const d=(0,l.up)("q-icon"),r=(0,l.up)("q-img"),c=(0,l.up)("q-select"),h=(0,l.up)("q-checkbox"),u=(0,l.up)("q-toggle"),p=(0,l.up)("q-badge"),g=(0,l.up)("q-slider"),m=(0,l.up)("q-btn"),f=(0,l.up)("q-btn-toggle"),y=(0,l.up)("utable"),w=(0,l.up)("linechart"),b=(0,l.up)("q-input"),v=(0,l.up)("q-tree"),k=(0,l.up)("q-scroll-area"),x=(0,l.up)("q-separator"),C=(0,l.up)("q-uploader"),_=(0,l.up)("sgraph"),A=(0,l.up)("q-tooltip"),S=(0,l.up)("q-spinner-ios");return"image"==e.type?((0,l.wg)(),(0,l.j4)(r,{key:0,src:e.data.url,"spinner-color":"blue",onClick:(0,ie.iM)(e.switchValue,["stop"]),fit:"cover",style:(0,s.j5)(e.elemSize)},{default:(0,l.w5)((()=>[e.data.label?((0,l.wg)(),(0,l.iD)("div",{key:0,class:"absolute-bottom-right text-subtitle2 custom-caption",onClick:t[0]||(t[0]=(0,ie.iM)(((...t)=>e.lens&&e.lens(...t)),["stop"]))},(0,s.zw)(e.data.label),1)):(0,l.kq)("",!0),e.value?((0,l.wg)(),(0,l.j4)(d,{key:1,class:"absolute all-pointer-events",size:"32px",name:"check_circle",color:"light-blue-2",style:{"font-size":"2em",top:"8px",left:"8px"}})):(0,l.kq)("",!0)])),_:1},8,["src","onClick","style"])):"select"==e.type?((0,l.wg)(),(0,l.j4)(c,{key:1,"transition-show":"flip-up",readonly:0==e.data.edit,"transition-hide":"flip-down",dense:"",modelValue:e.value,"onUpdate:modelValue":t[1]||(t[1]=t=>e.value=t),options:e.data.options},(0,l.Nv)({_:2},[e.showname?{name:"prepend",fn:(0,l.w5)((()=>[(0,l._)("p",{class:(0,s.C_)(["text-subtitle1 q-ma-sm",{white:e.Dark.isActive,black:!e.Dark.isActive}])},(0,s.zw)(e.name),3)])),key:"0"}:void 0]),1032,["readonly","modelValue","options"])):"check"==e.type?((0,l.wg)(),(0,l.j4)(h,{key:2,"left-label":"",disable:0==e.data.edit,modelValue:e.value,"onUpdate:modelValue":t[2]||(t[2]=t=>e.value=t),label:e.nameLabel,"checked-icon":"task_alt","unchecked-icon":"highlight_off"},null,8,["disable","modelValue","label"])):"switch"==e.type?((0,l.wg)(),(0,l.j4)(u,{key:3,modelValue:e.value,"onUpdate:modelValue":t[3]||(t[3]=t=>e.value=t),disable:0==e.data.edit,color:"primary",label:e.nameLabel,"left-label":""},null,8,["modelValue","disable","label"])):"range"==e.type?((0,l.wg)(),(0,l.iD)("div",ne,[(0,l.Wm)(p,{outline:"",dense:"",color:e.Dark.isActive?"blue-3":"blue-9"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.name)+": "+(0,s.zw)(e.value)+" ("+(0,s.zw)(e.data.options[0])+" to "+(0,s.zw)(e.data.options[1])+", Δ "+(0,s.zw)(e.data.options[2])+")",1)])),_:1},8,["color"]),(0,l.Wm)(g,{class:"q-pl-sm",dense:"",modelValue:e.value,"onUpdate:modelValue":t[4]||(t[4]=t=>e.value=t),min:e.data.options[0],max:e.data.options[1],step:e.data.options[2],color:"primary"},null,8,["modelValue","min","max","step"])])):"radio"==e.type?((0,l.wg)(),(0,l.iD)("div",de,[e.showname?((0,l.wg)(),(0,l.j4)(m,{key:0,ripple:!1,color:"indigo-10",disable:"",label:e.name,"no-caps":""},null,8,["label"])):(0,l.kq)("",!0),(0,l.Wm)(f,{modelValue:e.value,"onUpdate:modelValue":t[5]||(t[5]=t=>e.value=t),readonly:0==e.data.edit,class:(0,s.C_)({"bg-blue-grey-9":e.Dark.isActive}),"no-caps":"",options:e.data.options.map((e=>({label:e,value:e})))},null,8,["modelValue","readonly","class","options"])])):"table"==e.type?((0,l.wg)(),(0,l.j4)(y,{key:6,data:e.data,pdata:e.pdata,styleSize:e.styleSize},null,8,["data","pdata","styleSize"])):"chart"==e.type?((0,l.wg)(),(0,l.j4)(w,{key:7,data:e.data,pdata:e.pdata,styleSize:e.styleSize},null,8,["data","pdata","styleSize"])):"string"==e.type&&e.data.hasOwnProperty("complete")?((0,l.wg)(),(0,l.j4)(c,{key:8,dense:"",readonly:0==e.data.edit,modelValue:e.value,"onUpdate:modelValue":t[6]||(t[6]=t=>e.value=t),"use-input":"","hide-selected":"",borderless:"",outlined:"","hide-bottom-space":"","fill-input":"","input-debounce":"0",options:e.options,onFilter:e.complete,label:e.name,onKeydown:(0,ie.D2)(e.pressedEnter,["enter"])},null,8,["readonly","modelValue","options","onFilter","label","onKeydown"])):"string"==e.type&&0==e.data.edit?((0,l.wg)(),(0,l.iD)("div",re,[(0,l._)("p",{class:(0,s.C_)(["q-ma-sm",{white:e.Dark.isActive,black:!e.Dark.isActive}])},(0,s.zw)(e.value),3)])):"string"==e.type?((0,l.wg)(),(0,l.j4)(b,{key:10,modelValue:e.value,"onUpdate:modelValue":t[7]||(t[7]=t=>e.value=t),label:e.name2show,ref:"inputRef",autogrow:e.data.autogrow,dense:"",onKeydown:(0,ie.D2)(e.pressedEnter,["enter"]),readonly:0==e.data.edit},null,8,["modelValue","label","autogrow","onKeydown","readonly"])):"number"==e.type?((0,l.wg)(),(0,l.j4)(b,{key:11,modelValue:e.value,"onUpdate:modelValue":t[8]||(t[8]=t=>e.value=t),modelModifiers:{number:!0},label:e.name2show,ref:"inputRef",dense:"",onKeydown:(0,ie.D2)(e.pressedEnter,["enter"]),type:"number",readonly:0==e.data.edit},null,8,["modelValue","label","onKeydown","readonly"])):"tree"==e.type||"list"==e.type?((0,l.wg)(),(0,l.iD)("div",ce,[e.showname?((0,l.wg)(),(0,l.iD)("p",{key:0,class:(0,s.C_)(["text-subtitle1 q-ma-sm text-grey-7",{"text-white":e.Dark.isActive,"text-indigo-10":!e.Dark.isActive}])},(0,s.zw)(e.name),3)):(0,l.kq)("",!0),(0,l.Wm)(k,{style:(0,s.j5)(e.styleSize),"thumb-style":e.thumbStyle,"bar-style":e.barStyle,ref:"scroller"},{default:(0,l.w5)((()=>[(0,l.Wm)(v,{nodes:e.treeNodes,"selected-color":e.Dark.isActive?"blue-3":"blue-9",dense:e.data.dense,ref:"tree",selected:e.value,"onUpdate:selected":t[9]||(t[9]=t=>e.value=t),expanded:e.expandedKeys,"onUpdate:expanded":t[10]||(t[10]=t=>e.expandedKeys=t),"node-key":"label","default-expand-all":""},null,8,["nodes","selected-color","dense","selected","expanded"])])),_:1},8,["style","thumb-style","bar-style"])])):"text"==e.type?(0,l.wy)(((0,l.wg)(),(0,l.iD)("textarea",{key:13,class:(0,s.C_)(["textarea",{"bg-grey-10":e.Dark.isActive,"text-white":e.Dark.isActive}]),"onUpdate:modelValue":t[11]||(t[11]=t=>e.value=t),filled:"",type:"textarea",style:(0,s.j5)(e.elemSize),onKeydown:t[12]||(t[12]=(0,ie.D2)(((...t)=>e.pressedEnter&&e.pressedEnter(...t)),["enter"]))},null,38)),[[ie.nr,e.value]]):"line"==e.type?((0,l.wg)(),(0,l.j4)(x,{key:14,color:"green"})):"video"==e.type?((0,l.wg)(),(0,l.iD)("video",{key:e.fullname,controls:"",width:e.data.width,height:e.data.height},[(0,l._)("source",{src:e.data.url,type:"video/mp4"},null,8,ue)],8,he)):"uploader"==e.type?((0,l.wg)(),(0,l.j4)(C,{key:16,label:e.name,"auto-upload":"",thumbnails:"",url:e.host_path,onUploaded:e.updateDom,onAdded:e.onAdded,style:(0,s.j5)(e.elemSize),ref:"uploaderRef",flat:"",class:(0,s.C_)({"bg-grey-10":e.Dark.isActive}),color:e.Dark.isActive?"purple-10":"blue"},null,8,["label","url","onUploaded","onAdded","style","class","color"])):"image_uploader"==e.type?((0,l.wg)(),(0,l.j4)(C,{key:17,label:e.name,"auto-upload":"",thumbnails:"",url:e.host_path,onUploaded:e.updateDom,onAdded:e.onAdded,ref:"uploaderRef",flat:"",class:(0,s.C_)({"bg-grey-10":e.Dark.isActive}),color:e.Dark.isActive?"purple-10":"blue"},null,8,["label","url","onUploaded","onAdded","class","color"])):"graph"==e.type?((0,l.wg)(),(0,l.j4)(_,{key:18,data:e.data,pdata:e.pdata,styleSize:e.elemSize},null,8,["data","pdata","styleSize"])):"camera"==e.type?((0,l.wg)(),(0,l.iD)("div",pe,[(0,l._)("div",ge,[(0,l._)("button",{class:(0,s.C_)(["button is-rounded",{"is-primary":!e.isCameraOpen,"is-danger":e.isCameraOpen}]),type:"button",onClick:t[13]||(t[13]=(...t)=>e.toggleCamera&&e.toggleCamera(...t))},[e.isCameraOpen?((0,l.wg)(),(0,l.iD)("span",fe,"Close Camera")):((0,l.wg)(),(0,l.iD)("span",me,"Open Camera"))],2)]),(0,l.wy)((0,l._)("div",ye,be,512),[[ie.F8,e.isCameraOpen&&e.isLoading]]),e.isCameraOpen?(0,l.wy)(((0,l.wg)(),(0,l.iD)("div",{key:0,class:(0,s.C_)(["camera-box",{flash:e.isShotPhoto}])},[(0,l._)("div",{class:(0,s.C_)(["camera-shutter",{flash:e.isShotPhoto}])},null,2),(0,l.wy)((0,l._)("video",{ref:"camera",width:450,height:337.5,autoplay:""},null,8,ve),[[ie.F8,!e.isPhotoTaken]]),(0,l.wy)((0,l._)("canvas",{id:"photoTaken",ref:"canvas",width:450,height:337.5},null,8,ke),[[ie.F8,e.isPhotoTaken]])],2)),[[ie.F8,!e.isLoading]]):(0,l.kq)("",!0),e.isCameraOpen&&!e.isLoading?((0,l.wg)(),(0,l.iD)("div",xe,[(0,l._)("button",{class:"button",type:"button",onClick:t[14]||(t[14]=(...t)=>e.takePhoto&&e.takePhoto(...t))},_e)])):(0,l.kq)("",!0),e.isPhotoTaken&&e.isCameraOpen?((0,l.wg)(),(0,l.iD)("div",Ae,[(0,l.Wm)(m,{onClick:e.downloadImage,label:"Send"},null,8,["onClick"])])):(0,l.kq)("",!0)])):""!=e.showname?((0,l.wg)(),(0,l.iD)("div",Se,[(0,l.Wm)(m,{"no-caps":"",disable:0==e.data.edit,class:(0,s.C_)({"bg-blue-grey-8":e.Dark.isActive}),label:e.name,icon:e.data.icon,onClick:e.sendValue},{default:(0,l.w5)((()=>[e.data.tooltip?((0,l.wg)(),(0,l.j4)(A,{key:0,class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.data.tooltip),1)])),_:1})):(0,l.kq)("",!0)])),_:1},8,["disable","class","label","icon","onClick"])])):e.data.spinner?((0,l.wg)(),(0,l.j4)(m,{key:22,"no-caps":"",dense:"",disable:0==e.data.edit,round:"",class:(0,s.C_)({"bg-blue-grey-8":e.Dark.isActive}),onClick:e.sendValue},{default:(0,l.w5)((()=>[(0,l.Wm)(S,{color:e.Dark.isActive?"white":"black"},null,8,["color"]),e.data.tooltip?((0,l.wg)(),(0,l.j4)(A,{key:0,class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.data.tooltip),1)])),_:1})):(0,l.kq)("",!0)])),_:1},8,["disable","class","onClick"])):((0,l.wg)(),(0,l.j4)(m,{key:21,"no-caps":"",disable:0==e.data.edit,dense:"",round:"",class:(0,s.C_)({"bg-blue-grey-8":e.Dark.isActive}),icon:e.data.icon,onClick:e.sendValue},{default:(0,l.w5)((()=>[e.data.tooltip?((0,l.wg)(),(0,l.j4)(A,{key:0,class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.data.tooltip),1)])),_:1})):(0,l.kq)("",!0)])),_:1},8,["disable","class","icon","onClick"]))}const De={key:0},ze={class:"row"},je=["onClick"];function Ee(e,t,a,i,o,n){const d=(0,l.up)("q-icon"),r=(0,l.up)("q-tooltip"),c=(0,l.up)("q-input"),h=(0,l.up)("q-btn"),u=(0,l.up)("q-th"),p=(0,l.up)("q-tr"),g=(0,l.up)("q-checkbox"),m=(0,l.up)("q-select"),f=(0,l.up)("q-td"),y=(0,l.up)("q-table");return(0,l.wg)(),(0,l.j4)(y,{"virtual-scroll":"",dense:e.data.dense,style:(0,s.j5)(e.styleSize?e.styleSize:e.currentStyle()),flat:"",filter:e.search,ref:"table",virtualScrollSliceSize:"100","rows-per-page-options":[0],"virtual-scroll-sticky-size-start":48,"row-key":"iiid",title:e.name,rows:e.rows,columns:e.columns,selection:e.singleMode?"single":"multiple",selected:e.selected,"onUpdate:selected":t[2]||(t[2]=t=>e.selected=t)},{"top-right":(0,l.w5)((()=>[!1!==e.data.tools?((0,l.wg)(),(0,l.iD)("div",De,[(0,l._)("div",ze,[(0,l.Wm)(c,{modelValue:e.search,"onUpdate:modelValue":t[1]||(t[1]=t=>e.search=t),label:"Search",dense:"",ref:"searchField"},(0,l.Nv)({append:(0,l.w5)((()=>[""!=e.search?((0,l.wg)(),(0,l.j4)(d,{key:0,class:"cursor-pointer",name:"close",size:"xs",onClick:t[0]||(t[0]=t=>{e.search="",e.$refs.searchField.focus()})},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Reset search ")])),_:1})])),_:1})):(0,l.kq)("",!0)])),_:2},[""==e.search?{name:"prepend",fn:(0,l.w5)((()=>[(0,l.Wm)(d,{name:"search",size:"xs"})])),key:"0"}:void 0]),1032,["modelValue"]),(0,l._)("div",null,[(0,l.Wm)(h,{class:(0,s.C_)(["q-ml-xs",{"bg-blue-grey-8":e.Dark.isActive}]),dense:"",rounded:"",icon:"select_all","no-caps":"",onClick:e.showSelected},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Show selected ")])),_:1})])),_:1},8,["class","onClick"]),(0,l.Wm)(h,{class:(0,s.C_)(["q-ml-xs",{"bg-blue-grey-8":e.Dark.isActive}]),dense:"",rounded:"",icon:"deselect","no-caps":"",onClick:e.deselectAll},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Deselect all")])),_:1})])),_:1},8,["class","onClick"]),!1!==e.data.multimode?((0,l.wg)(),(0,l.j4)(h,{key:0,class:(0,s.C_)(["q-ml-xs",{"bg-blue-grey-8":e.Dark.isActive}]),dense:"",rounded:"",icon:e.singleMode?"looks_one":"grain","no-caps":"",onClick:e.switchMode},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Multi-single select mode ")])),_:1})])),_:1},8,["class","icon","onClick"])):(0,l.kq)("",!0),e.editable?((0,l.wg)(),(0,l.j4)(h,{key:1,class:(0,s.C_)(["q-ml-xs",{"bg-blue-grey-8":e.Dark.isActive}]),dense:"",rounded:"",icon:e.editMode?"cancel":"edit","no-caps":"",onClick:e.switchEdit},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Edit mode")])),_:1})])),_:1},8,["class","icon","onClick"])):(0,l.kq)("",!0),e.editable&&"append"in e.data?((0,l.wg)(),(0,l.j4)(h,{key:2,class:(0,s.C_)(["q-ml-xs",{"bg-blue-grey-8":e.Dark.isActive}]),dense:"",rounded:"",icon:"add","no-caps":"",onClick:e.append},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Add a new row")])),_:1})])),_:1},8,["class","onClick"])):(0,l.kq)("",!0),"delete"in e.data?((0,l.wg)(),(0,l.j4)(h,{key:3,class:(0,s.C_)(["q-ml-xs",{"bg-blue-grey-8":e.Dark.isActive}]),dense:"",rounded:"",icon:"delete_forever","no-caps":"",onClick:e.delSelected},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Delete selected ")])),_:1})])),_:1},8,["class","onClick"])):(0,l.kq)("",!0),"view"in e.data?((0,l.wg)(),(0,l.j4)(h,{key:4,class:(0,s.C_)(["q-ml-xs",{"bg-blue-grey-8":e.Dark.isActive}]),dense:"",rounded:"",icon:"insights","no-caps":"",onClick:e.chart},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Draw the chart")])),_:1})])),_:1},8,["class","onClick"])):(0,l.kq)("",!0)])])])):(0,l.kq)("",!0)])),header:(0,l.w5)((t=>[(0,l.Wm)(p,{props:t},{default:(0,l.w5)((()=>[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(t.cols,(a=>((0,l.wg)(),(0,l.j4)(u,{class:(0,s.C_)(["text-italic",{"text-grey-9":!e.Dark.isActive,"text-teal-3":e.Dark.isActive}]),key:a.name,props:t},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(a.label),1)])),_:2},1032,["class","props"])))),128))])),_:2},1032,["props"])])),body:(0,l.w5)((t=>[(0,l.Wm)(p,{props:t,onClick:e=>t.selected=!t.selected},{default:(0,l.w5)((()=>[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.columns,((a,i)=>((0,l.wg)(),(0,l.j4)(f,{key:a.name,props:t},{default:(0,l.w5)((()=>["boolean"==typeof t.row[a.name]?((0,l.wg)(),(0,l.j4)(g,{key:0,modelValue:t.row[a.name],"onUpdate:modelValue":[e=>t.row[a.name]=e,l=>e.change_switcher(t.row,a.name,i)],dense:"",disable:!e.editMode},null,8,["modelValue","onUpdate:modelValue","disable"])):e.editMode&&"complete"in e.data&&i==e.cedit&&e.redit==t.row.iiid?((0,l.wg)(),(0,l.j4)(m,{key:1,dense:"","model-value":t.row[a.name],"use-input":"","hide-selected":"","fill-input":"",autofocus:"",outlined:"",borderless:"",onInputValue:e.change,"hide-dropdown-icon":"","input-debounce":"0",options:e.options,onKeydown:e.keyInput,onFilter:e.complete},null,8,["model-value","onInputValue","options","onKeydown","onFilter"])):e.editMode&&i==e.cedit&&e.redit==t.row.iiid?((0,l.wg)(),(0,l.j4)(c,{key:2,modelValue:t.row[a.name],"onUpdate:modelValue":[e=>t.row[a.name]=e,e.change],dense:"",onKeydown:e.keyInput,autofocus:""},null,8,["modelValue","onUpdate:modelValue","onKeydown"])):((0,l.wg)(),(0,l.iD)("div",{key:3,onClick:a=>e.select(t.row.iiid,i)},(0,s.zw)(t.row[a.name]),9,je))])),_:2},1032,["props"])))),128))])),_:2},1032,["props","onClick"])])),_:1},8,["dense","style","filter","title","rows","columns","selection","selected"])}var $e=a(1959),Ze=a(9058);function Me(e,t){return e.length===t.length&&e.every(((e,a)=>t[a]&&e.iiid==t[a].iiid))}const Oe=(0,l.aZ)({name:"utable",setup(e){const{data:t,pdata:a}=(0,$e.BK)(e);let s=(0,l.Fl)((()=>{let e=[],a=t.value;const l=a.headers,s=l.length,i=a.rows,o=i.length;for(var n=0;n<o;n++){const t={},a=i[n];for(var d=0;d<s;d++)t[l[d]]=a[d];t.iiid=n,e.push(t)}return e})),i=()=>{let e=t.value,a=null===e.value||0==s.value.length?[]:Array.isArray(e.value)?e.value.map((e=>s.value[e])):[s.value[e.value]];return a},o=i(),n=(0,$e.iH)(o),d=(0,$e.iH)(o),r=(0,$e.iH)(!Array.isArray(t.value.value)),c=(e,l)=>{_([a.value.name,t.value.name,e,l])},h=(0,l.Fl)((()=>r.value?d.value.length>0?d.value[0].iiid:null:d.value.map((e=>e.iiid)))),u=(0,l.Fl)((()=>t.value.value));return(0,l.YP)(s,((e,t)=>{d.value=i(),n.value=d.value})),(0,l.YP)(t,((e,a)=>{m&&console.log("data update",a.name),d.value=i(),n.value=d.value,r.value=!Array.isArray(t.value.value)})),{rows:s,value:h,selected:d,singleMode:r,sendMessage:c,datavalue:u,updated:n}},data(){return{Dark:Ze.Z,search:"",editMode:!1,options:[],cedit:null}},methods:{currentStyle(){let e=this.data.tablerect;if(e){let t=e.width,a=e.height;return`width: ${t}px; height: ${a}px`}return null},select(e,t){this.editMode&&(this.cedit=t,m&&console.log("selected",e,this.cedit))},change_switcher(e,t,a){if(console.log(e,t,a,e[t]),this.editMode){this.cedit=a;const l=e.iiid;let s=this.data.rows;s[l][a]=e[t],this.sendMessage("modify",[e[t],[l,a]])}},change(e){if(m&&console.log("changed",this.data.headers[this.cedit],e),this.editMode&&this.selected.length){const t=this.selected[0].iiid;let a=this.data.rows;a[t][this.cedit]=e,this.sendMessage("modify",[e,[t,this.cedit]])}},keyInput(e){if("Control"==e.key)return;let t=!1;switch(e.key){case"Enter":"update"in this.data&&this.sendMessage("update",[this.rows[this.redit][this.data.headers[this.cedit]],[this.redit,this.cedit]]),t=!0;case"ArrowRight":if(e.ctrlKey||t)for(let e=this.cedit+1;e<this.data.rows[this.redit].length;e++){let t=typeof this.data.rows[this.redit][e];if("string"==t||"number"==t){this.cedit=e;break}}break;case"Escape":this.switchEdit();break;case"ArrowLeft":if(e.ctrlKey)for(let e=this.cedit-1;e>=0;e--){let t=typeof this.data.rows[this.redit][e];if("string"==t||"number"==t){this.cedit=e;break}}break;case"ArrowUp":if(e.ctrlKey&&this.redit>0){let e=this.redit-1,t=this.data,a=typeof t.rows[e][this.cedit];"string"!=a&&"number"!=a||(t.value=e),this.selected=[this.rows[e]]}break;case"ArrowDown":if(e.ctrlKey&&this.redit+1<this.rows.length){let e=this.redit+1,t=this.data,a=typeof t.rows[e][this.cedit];"string"!=a&&"number"!=a||(t.value=e),this.selected=[this.rows[e]]}break}},complete(e,t,a){D(this,[e,[this.redit,this.cedit]],(e=>t((()=>{this.options=e}))))},append(){let e=this.data.rows,t=e.length,a=this;D(this,[t,this.search],(function(l){if(!Array.isArray(l))return h.error(l);m&&console.log("added row",l),a.search="",e.push(l),setTimeout((()=>{let e=a.rows;a.selected=[e[t]],a.showSelected(),a.editMode||a.switchEdit(),a.select(e[t],0)}),100)}),"append")},showSelected(){let e=this.$refs.table;if(this.selected.length){let t=e.computedRows.findIndex((e=>e.iiid===this.selected[0].iiid));e.scrollTo(t)}},deselectAll(){this.selected=[],this.sendMessage("changed",this.value)},chart(){let e=this.data;e.type="chart",e.tablerect=this.$refs.table.$el.getBoundingClientRect(),k[this.fullname].styleSize=this.currentStyle()},switchMode(){this.singleMode=!this.singleMode,this.singleMode&&this.selected.length>1&&this.selected.splice(1)},switchEdit(){this.editMode=!this.editMode,this.editMode&&!this.singleMode&&this.switchMode()},delSelected(){if(!this.selected.length)return void h.error("Rows are not selected!");this.sendMessage("delete",this.value);let e=this.data.rows;if(this.singleMode){let t=this.selected[0].iiid;this.selected=[],e.splice(t,1)}else{this.selected.length>1&&this.selected.sort(((e,t)=>t.iiid-e.iiid));let t=this.selected.map((e=>e.iiid));this.selected=[];for(let a of t)e.splice(a,1)}}},watch:{selected(e){const t=this.data;if(!Me(this.updated,this.selected)){let e=this.selected.length;t.value=this.singleMode?1==e?this.selected[0].iiid:null:this.selected.map((e=>e.iiid)),this.sendMessage("changed",t.value),this.updated=this.selected}t.show&&(this.showSelected(),t.show=!1)}},computed:{fullname(){return`${this.data.name}@${this.pdata.name}`},redit(){return this.editMode&&this.selected.length?this.selected[0].iiid:null},editable(){return 0!=this.data["edit"]},name(){return"_"==this.data.name?"":this.data.name},columns(){return this.data.headers.map((e=>({name:e,label:e,align:"left",sortable:!0,field:e})))}},props:{data:Object,pdata:Object,styleSize:String}});var We=a(9267),Ne=a(4842),Ve=a(8870),He=a(2165),Ke=a(8186),Qe=a(2414),Ue=a(3884),Fe=a(5735),Te=a(7208);const Pe=(0,K.Z)(Oe,[["render",Ee]]),Re=Pe;function Le(e,t,a,i,o,n){return(0,l.wg)(),(0,l.iD)("div",{ref:"graph",style:(0,s.j5)(a.styleSize),id:"graph"},null,4)}R()(Oe,"components",{QTable:We.Z,QInput:Ne.Z,QIcon:F.Z,QTooltip:Ve.Z,QBtn:He.Z,QTr:Ke.Z,QTh:Qe.Z,QTd:Ue.Z,QCheckbox:Fe.Z,QSelect:Te.Z});var Be=a(130),Ie=a.n(Be),Ye=a(309);var Ge=a(5154),Je=a.n(Ge),Xe=a(4150),et=a.n(Xe);let tt="#091159",at={hideEdgesOnMove:!1,hideLabelsOnMove:!1,renderLabels:!0,renderEdgeLabels:!0,enableEdgeClickEvents:!0,enableEdgeWheelEvents:!1,enableEdgeHoverEvents:!0,enableEdgeHovering:!0,allowInvalidContainer:!0,enableEdgeClickEvents:!0,enableEdgeHoverEvents:!0,defaultNodeColor:"#FCA072",defaultNodeType:"circle",defaultEdgeColor:"#888",defaultEdgeType:"arrow",labelFont:"Arial",labelSize:14,labelWeight:"normal",labelColor:{color:"#00838F",attribute:"#000"},edgeLabelFont:"Arial",edgeLabelSize:14,edgeLabelWeight:"normal",edgeLabelColor:{attribute:"color"},stagePadding:30,labelDensity:1,labelGridCellSize:100,labelRenderedSizeThreshold:6,animationsTime:1e3,borderSize:2,outerBorderSize:3,defaultNodeOuterBorderColor:"rgb(236, 81, 72)",edgeHoverHighlightNodes:"circle",sideMargin:1,edgeHoverColor:"edge",defaultEdgeHoverColor:"#062646",edgeHoverSizeRatio:1,edgeHoverExtremities:!0,scalingMode:"outside"};const lt={name:"sgraph",props:{data:{type:Object,required:!0},pdata:{type:Object,required:!0},styleSize:String},data(){return{Dark:Ze.Z,s:null,state:{searchQuery:""},selectedNodes:[],selectedEdges:[],graph:null,fa2start:null,fa2stop:null,fa2run:null}},methods:{sendMessage(e,t){_([this.pdata["name"],this.data["name"],e,t])},refresh(){let e=this.graph();const t=et().inferSettings(e);let a=new(Je())(e,{settings:t});m&&console.log("refresh graph",this.data.name,this.pdata.name),a.isRunning()||(a.start(),setTimeout((function(){a.stop()}),1e3))},setSelectedEdges(e){this.s.selectEdges(e)},setSearchQuery(e){if(e){const t=e.toLowerCase(),a=this.graph().nodes().map((e=>({id:e,label:graph.getNodeAttribute(e,"label")}))).filter((({label:e})=>e.toLowerCase().includes(t)));if(1===a.length&&a[0].label===e){this.state.selectedNode=a[0].id,this.state.suggestions=void 0;const e=this.s.getNodeDisplayData(this.state.selectedNode);this.s.getCamera().animate(e,{duration:500})}else this.state.selectedNode=void 0,this.state.suggestions=new Set(a.map((({id:e})=>e)))}else this.state.selectedNode=void 0,this.state.suggestions=void 0;this.s.refresh()},load(e){let t=e.value;this.selectedNodes=t.nodes?t.nodes.map((e=>String(e))):[],this.selectedEdges=t.edges?t.edges.map((e=>String(e))):[];let a=e.sizing,l=e.nodes,s=this.graph(),i=[],o=[],n=new Map;for(let h=0;h<l.length;h++){if(!l[h])continue;let e=Object.assign({},l[h]);void 0==e.id&&(e.id=h),void 0!=e.name&&(e.label=e.name);let t={key:String(e.id),attributes:e};e.size=e.size?e.size:10,i.push(t),n.set(e.id,h);let a=s._nodes.get(t.key);a?(e.x=a.attributes.x,e.y=a.attributes.y):(e.x=Math.random(),e.y=Math.random()),this.selectedNodes.includes(t.key)&&(e.highlighted=!0)}let d=[],r=new Map,c=Array(i.length).fill(0);for(let h=0;h<e.edges.length;h++){let t=Object.assign({},e.edges[h]),l=n.get(t.source),s=n.get(t.target);if(void 0==l||void 0==s)continue;if(void 0==t.id&&(t.id=h),t.name&&(t.label=t.name),t.key=String(t.id),o.push(t),a){"in"!=a&&(s=n.get(t.source),l=n.get(t.target)),c[s]++,r.has(s)?r.get(s).push(l):r.set(s,[l]);let e=d.indexOf(l),i=d.indexOf(s);if(-1==e&&(e=d.length,d.push(l)),-1==i&&(i=d.length,d.push(s)),i<e){let t=d[e];d[e]=d[i],d[i]=t}}let i=t.attributes;i||(i={},t.attributes=i),i.id=t.id,i.size=t.size?t.size:5,this.selectedEdges.includes(t.key)?(i.ocolor=i.color?i.color:at.defaultEdgeColor,i.color=tt):t.color&&(i.color=t.color),t.label&&(i.label=t.label)}if(a)for(let h=0;h<d.length;h++){let e=d[h];if(r.has(e))for(let t of r.get(e))c[e]+=c[t];i[e].attributes.size=10+c[e]}s.clear(),s.import({nodes:i,edges:o}),this.refresh()}},computed:{value(){let e=this.graph(),t=this.selectedNodes.map((t=>e._nodes.get(t).attributes.id)),a=this.selectedEdges.map((t=>e._edges.get(t).attributes.id));return{nodes:t,edges:a}}},watch:{data:{handler(e,t){m&&console.log("data update",this.data.name,this.pdata.name),this.load(e)},deep:!0},"Dark.isActive":function(e){this.s.settings.labelColor.color=e?"#00838F":"#000",this.s.refresh()}},updated(){this.s.refresh(),m&&console.log("updated",this.data.name,this.pdata.name)},mounted(){let e=new Ye.MultiDirectedGraph;this.graph=()=>e;let t=this.$refs.graph;this.s=new(Ie())(e,t,at);let a=this.s;var l=this;function s(t){t?l.state.hoveredNeighbors=new Set(e.neighbors(t)):(l.state.hoveredNode=void 0,l.state.hoveredNeighbors=void 0),a.refresh()}function i(t,a=tt){let l=e.getEdgeAttributes(t);l.color!=a&&(l.ocolor||(l.ocolor=l.color?l.color:at.defaultEdgeColor),e.setEdgeAttribute(t,"color",a))}function o(t,a=tt){let l=e.getEdgeAttributes(t);if(l.color==a){let a=e.getEdgeAttribute(t,"ocolor");e.setEdgeAttribute(t,"color",a)}}this.s.settings.labelColor.color=Ze.Z.isActive?"#00838F":"#000",a.on("clickNode",(function(t){let s=t.node;if(!h.shiftKey){for(let e of l.selectedEdges)o(e);l.selectedEdges=[]}if(l.selectedNodes.includes(s))if(e.setNodeAttribute(s,"highlighted",!1),h.shiftKey){let e=l.selectedNodes.indexOf(s);-1!=e&&l.selectedNodes.array.splice(e,1)}else l.selectedNodes=[];else{if(!h.shiftKey&&l.selectedNodes.length>0){for(let t of l.selectedNodes)e.setNodeAttribute(t,"highlighted",!1);l.selectedNodes=[]}e.setNodeAttribute(s,"highlighted",!0),l.selectedNodes.push(s)}a.refresh(),l.sendMessage("changed",l.value)})),a.on("clickEdge",(function({edge:t}){if(!h.shiftKey){for(let t of l.selectedNodes)e.setNodeAttribute(t,"highlighted",!1);l.selectedNodes=[]}if(l.selectedEdges.includes(t))if(o(t),h.shiftKey){let e=l.selectedEdges.indexOf(t);-1!=e&&l.selectedEdges.array.splice(e,1)}else l.selectedEdges=[];else{if(!h.shiftKey&&l.selectedEdges.length>0){for(let e of l.selectedEdges)o(e);l.selectedEdges=[]}i(t),l.selectedEdges.push(t)}a.refresh(),l.sendMessage("changed",l.value)})),a.on("enterNode",(function({node:t}){for(let a of e.edgeEntries())a.target==t?i(a.edge,"#808000"):a.source==t&&i(a.edge,"#2F4F4F");s(t)})),a.on("leaveNode",(function({node:t}){for(let a of e.edgeEntries())a.target==t?l.selectedEdges.includes(a.edge)?e.setEdgeAttribute(a.edge,"color",tt):o(a.edge,"#808000"):a.source==t&&(l.selectedEdges.includes(a.edge)?e.setEdgeAttribute(a.edge,"color",tt):o(a.edge,"#2F4F4F"));s(void 0)})),a.on("enterEdge",(function({edge:e}){l.selectedEdges.includes(e)||i(e)})),a.on("leaveEdge",(function({edge:e}){l.selectedEdges.includes(e)||o(e)}));const n=new ResizeObserver((e=>a.refresh()));n.observe(t);let d=null,r=!1;a.on("downNode",(t=>{r=!0,d=t.node,e.setNodeAttribute(d,"highlighted",!0)})),a.getMouseCaptor().on("mousemovebody",(t=>{if(!r||!d)return;const l=a.viewportToGraph(t);e.setNodeAttribute(d,"x",l.x),e.setNodeAttribute(d,"y",l.y),t.preventSigmaDefault(),t.original.preventDefault(),t.original.stopPropagation()})),a.getMouseCaptor().on("mouseup",(()=>{d&&e.removeNodeAttribute(d,"highlighted"),r=!1,d=null})),a.getMouseCaptor().on("mousedown",(()=>{a.getCustomBBox()||a.setCustomBBox(a.getBBox())})),this.load(this.data)}},st=(0,K.Z)(lt,[["render",Le]]),it=st;function ot(e,t,a,i,o,n){const d=(0,l.up)("v-chart");return(0,l.wg)(),(0,l.iD)("div",{style:(0,s.j5)(a.styleSize?a.styleSize:n.currentStyle())},[(0,l.Wm)(d,{ref:"chart","manual-update":!0,onClick:n.clicked,autoresize:!0},null,8,["onClick"])],4)}var nt=a(9642),dt=a(6938),rt=a(1006),ct=a(6080),ht=a(3526),ut=a(763),pt=a(546),gt=a(6902),mt=a(2826),ft=a(5256),yt=a(3825),wt=a(8825);(0,ut.D)([dt.N,rt.N,ht.N,ct.N]),(0,ut.D)([pt.N,gt.N,mt.N,ft.N,yt.N]);let bt=["","#80FFA5","#00DDFF","#37A2FF","#FF0087","#FFBF00","rgba(128, 255, 165)","rgba(77, 119, 255)"];const vt={name:"linechart",components:{VChart:nt.ZP},props:{data:Object,pdata:Object,styleSize:String},data(){const e=(0,wt.Z)();return{$q:e,model:!1,animation:null,markPoint:null,options:{responsive:!0,maintainAspectRatio:!1,legend:{data:[],bottom:10,textStyle:{color:"#4DD0E1"}},tooltip:{trigger:"axis",position:function(e){return[e[0],"10%"]}},title:{left:"center",text:""},toolbox:{feature:{}},xAxis:{type:"category",boundaryGap:!1,data:null},yAxis:{type:"value",boundaryGap:[0,"100%"]},dataZoom:[{type:"inside",start:0,end:10},{start:0,end:10}],series:[]}}},computed:{fullname(){return`${this.data.name}@${this.pdata.name}`}},methods:{setOptions(){this.$refs.chart.setOption(this.options)},currentStyle(){let e=this.data.tablerect,t=e?e.width:300,a=e?e.height:200;return`width: ${t}px; height: ${a}px`},processCoord(e,t,a){let l=null;for(let s of t)if(e[0]==s.coord[0]){l=s;break}a?l?t.splice(t.indexOf(l),1):t.push({coord:e}):(t.splice(0,t.length),l||t.push({coord:e}))},clicked(e){let t=[e.dataIndex,this.options.series[e.seriesIndex].data[e.dataIndex]];this.processCoord(t,this.markPoint.data,h.shiftKey);let a=this.markPoint.data.map((e=>e.coord[0])),l=this.data;if(l.value=Array.isArray(l.value)||a.length>1?a:a.length?a[0]:null,this.animation){let e=this.options.dataZoom;e[0].start=this.animation.start,e[1].start=this.animation.start,e[0].end=this.animation.end,e[1].end=this.animation.end}this.setOptions(),_([this.pdata.name,this.data.name,"changed",this.data.value])},calcSeries(){this.options.toolbox.feature.mySwitcher={show:!0,title:"Switch view to the table",icon:"image:M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm15 2h-4v3h4V4zm0 4h-4v3h4V8zm0 4h-4v3h3a1 1 0 0 0 1-1v-2zm-5 3v-3H6v3h4zm-5 0v-3H1v2a1 1 0 0 0 1 1h3zm-4-4h4V8H1v3zm0-4h4V4H1v3zm5-3v3h4V4H6zm4 4H6v3h4V8z",onclick:()=>{let e=this.data;e.type="table",e.tablerect=this.$refs.chart.$el.getBoundingClientRect(),k[this.fullname].styleSize=this.currentStyle()}};let e=this.data.view,t=this.data.headers;"_"!=this.data.name[0]&&(this.options.title.text=this.data.name);let a=e.split("-"),l=a[1].split(",");l.unshift(a[0]);let s=[];for(let o=0;o<l.length;o++)l[o]="i"==l[o]?-1:parseInt(l[o]),s.push([]),o&&(this.options.series.push({name:t[l[o]],type:"line",symbol:"circle",symbolSize:10,sampling:"lttb",itemStyle:{color:bt[o]},data:s[o]}),this.options.legend.data.push(t[l[o]]));this.options.xAxis.data=s[0];let i=this.data.rows;for(let o=0;o<i.length;o++)for(let e=0;e<l.length;e++)s[e].push(-1==l[e]?o:i[o][l[e]]);if(this.options.series[1]){let e=[],t=this.options.series[1].data,a=Array.isArray(this.data.value)?this.data.value:null===this.data.value?[]:[this.data.value];for(let l=0;l<a.length;l++)this.processCoord([a[l],t[a[l]]],e,!0);this.markPoint={symbol:"rect",symbolSize:10,animationDuration:300,silent:!0,label:{color:"#fff"},itemStyle:{color:"blue"},data:e},this.options.series[1].markPoint=this.markPoint}this.setOptions()}},mounted(){this.calcSeries();let e=this;this.$refs.chart.chart.on("datazoom",(function(t){(t.start||t.end)&&(e.animation=t)}))}},kt=(0,K.Z)(vt,[["render",ot]]),xt=kt;let Ct={right:"4px",borderRadius:"7px",backgroundColor:"#027be3",width:"4px",opacity:.75},_t={right:"2px",borderRadius:"9px",backgroundColor:"#027be3",width:"8px",opacity:.2};function At(e){let t=new FormData;t.append("image",e);let a=new XMLHttpRequest;a.open("POST",b,!0),a.onload=function(){200===this.status?console.log(this.response):console.error(a)},a.send(t)}const St=(0,l.aZ)({name:"element",components:{utable:Re,sgraph:it,linechart:xt},methods:{log(e){console.log(e)},showSelected(){if("tree"==this.type||"list"==this.type){let e=this.value;e&&requestAnimationFrame((()=>{requestAnimationFrame((()=>{let t=this.$refs.tree.$el,a=this.$refs.scroller.$el;for(let l of t.getElementsByTagName("div"))if(l.innerHTML==e){const{bottom:e,height:t,top:s}=l.getBoundingClientRect();if(s){const l=a.getBoundingClientRect();(s<=l.top?l.top-s<=t:e-l.bottom<=t)||this.$refs.scroller.setScrollPosition("vertical",s-l.top);break}}}))}))}},onAdded(e){0!==e.length&&(0!==this.fileArr.length?(this.$refs.uploaderRef.removeFile(this.fileArr[0]),this.fileArr.splice(0,1,e[0])):this.fileArr.push(e[0]))},sendMessage(e,t){_([this.pdata["name"],this.data["name"],e,t])},pressedEnter(){"update"in this.data&&this.sendMessage("update",this.value)},updateDom(e){let t=e.files.length;t&&this.sendMessage("changed",e.xhr.responseText)},sendValue(){this.sendMessage("changed",this.value)},switchValue(){this.value=!this.value},setValue(e){this.value=e},complete(e,t,a){D(this,e,(e=>t((()=>{this.options=e}))))},lens(){h.lens(this.data)},toggleCamera(){this.isCameraOpen?(this.isCameraOpen=!1,this.isPhotoTaken=!1,this.isShotPhoto=!1,this.stopCameraStream()):(this.isCameraOpen=!0,this.createCameraElement())},createCameraElement(){this.isLoading=!0;const e=window.constraints={audio:!1,video:!0};navigator.mediaDevices.getUserMedia(e).then((e=>{this.isLoading=!1,this.$refs.camera.srcObject=e})).catch((e=>{this.isLoading=!1,alert("May the browser didn't support or there are some errors.")}))},stopCameraStream(){let e=this.$refs.camera.srcObject.getTracks();e.forEach((e=>{e.stop()}))},takePhoto(){if(!this.isPhotoTaken){this.isShotPhoto=!0;const e=50;setTimeout((()=>{this.isShotPhoto=!1}),e)}this.isPhotoTaken=!this.isPhotoTaken;const e=this.$refs.canvas.getContext("2d");e.drawImage(this.$refs.camera,0,0,450,337.5)},downloadImage(){document.getElementById("downloadPhoto"),document.getElementById("photoTaken").toBlob(At,"image/jpeg")},rect(){let e="clientHeight"in this.$el?this.$el:this.$el.nextElementSibling;return e.getBoundingClientRect()},geom(){let e=this.type,t=this.$el;t="tree"==e||"list"==e?t.querySelector(".scroll"):"clientHeight"in t?t:t.nextElementSibling,t||(t=this.$el.previousElementSibling,t="clientHeight"in t?t:t.nextElementSibling);const a="text"==e||"graph"==e||"chart"==e?t:t.querySelector("table"==e?".scroll":".q-tree"),l=t.getBoundingClientRect();return{el:t,inner:a,left:l.left,right:l.right,top:l.top,bottom:l.bottom,scrollHeight:a.scrollHeight,scrollWidth:a.scrollWidth}}},updated(){k[this.fullname]=this,this.showSelected(),m&&console.log("updated",this.fullname)},mounted(){k[this.fullname]=this,this.data.focus&&this.$refs.inputRef.$el.focus(),this.showSelected(),m&&console.log("mounted",this.fullname)},data(){return{Dark:Ze.Z,value:this.data.value,styleSize:A?q(this):null,has_recalc:!0,host_path:b,options:[],expandedKeys:[],thumbStyle:Ct,barStyle:_t,updated:"#027be3sds",isCameraOpen:!1,isPhotoTaken:!1,isShotPhoto:!1,isLoading:!1,link:"#",fileArr:[]}},computed:{elemSize(){let e="";return this.data.width&&(e=`width:${this.data.width}px`),this.data.height&&(""!=e&&(e+="; "),e+=`height:${this.data.height}px`),""==e?this.styleSize:e},parent_name(){return this.pdata?this.pdata.name:null},name(){return this.data.name},fullname(){return`${this.data.name}@${this.pdata.name}`},showname(){let e=this.data.name;return e&&"_"!=e[0]},name2show(){let e=this.data.name;return e&&"_"!=e[0]?e:""},nameLabel(){return this.data.label?this.data.label:"_"!=this.data.name[0]?this.data.name:""},text(){return this.data.text},expanding(){return y.includes(this.type)},expanding_width(){return!this.data.width&&this.expanding},expanding_height(){return!this.data.height&&this.expanding},selection(){return this.data.selection},icon(){return this.data.icon},type(){return this.data.type},treeNodes(){var e=[];if("list"==this.type)return this.data.options.map((e=>({label:e,children:[]})));var t={};for(const[s,i]of Object.entries(this.data.options)){var a=t[s];if(a||(a={label:s,children:[]},t[s]=a),i){var l=t[i];l||(l={label:i,children:[]},t[i]=l),l.children.push(a)}else e.push(a)}return e}},props:{data:{type:Object,required:!0},pdata:{type:Object,required:!0}},watch:{value(e,t){"tree"!=this.type&&"list"!=this.type||(this.data.options[e]==t&&this.expandedKeys.indexOf(t)<0&&this.expandedKeys.push(t),this.showSelected()),e!==this.updated&&(m&&console.log("value changed",e,t),this.sendValue(),this.updated=e)},selection(e){m&&console.log("selection changed",e,this.$refs.inputRef),Array.isArray(e)||(e=[0,0]);let t=this.$refs.inputRef.$el;t.focus();let a=t.getElementsByTagName("textarea");0==a.length&&(a=t.getElementsByTagName("input")),a[0].setSelectionRange(e[0],e[1])},data(e,t){m&&console.log("data update",this.fullname,t.name),this.styleSize||(this.styleSize=null),h.screen.reload&&"tree"==this.type&&this.$refs.tree&&this.$refs.tree.expandAll(),this.value=this.data.value,this.updated=this.value,k[this.fullname]=this}}});var qt=a(4027),Dt=a(8886),zt=a(9721),jt=a(2064),Et=a(8761),$t=a(7704),Zt=a(5551),Mt=a(5869),Ot=a(1745),Wt=a(8506);const Nt=(0,K.Z)(St,[["render",qe],["__scopeId","data-v-f48596a0"]]),Vt=Nt;R()(St,"components",{QImg:qt.Z,QIcon:F.Z,QSelect:Te.Z,QCheckbox:Fe.Z,QToggle:Dt.Z,QBadge:zt.Z,QSlider:jt.Z,QBtn:He.Z,QBtnToggle:Et.Z,QInput:Ne.Z,QScrollArea:$t.Z,QTree:Zt.Z,QSeparator:Mt.Z,QUploader:Ot.Z,QTooltip:Ve.Z,QSpinnerIos:Wt.Z});const Ht=(0,l.aZ)({name:"block",components:{element:Vt},data(){return{Dark:Ze.Z,styleSize:null,thumbStyle:{right:"4px",borderRadius:"7px",backgroundColor:"#027be3",width:"4px",opacity:.75},barStyle:{right:"2px",borderRadius:"9px",backgroundColor:"#027be3",width:"8px",opacity:.2}}},methods:{log(){console.log(Object.keys(v).length,this.name,this.$el.getBoundingClientRect())},geom(){let e="clientHeight"in this.$el?this.$el:this.$el.nextElementSibling,t=e.querySelector(".q-scrollarea");t||(t=e);const a=t.getBoundingClientRect();return{el:e,inner:t,left:a.left,right:a.right,top:a.top,bottom:a.bottom,scrollHeight:window.innerHeight,scrollWidth:window.innerWidth}},free_right_delta4(e,t){for(let a of this.data.value)if(Array.isArray(a)){for(let l of a)if(l==e.data){let l=a[a.length-1];return l==e.data?t:f.includes(l.type)?0:k[`${l.name}@${this.name}`].$el.getBoundingClientRect().right}}else if(a===e)return t;return 0}},mounted(){v[this.data.name]=this,(this.expanding||this.data.width)&&(k[this.fullname]=this)},computed:{name(){return this.data.name},fullname(){return`${this.data.scroll?"_scroll":"_space"}@${this.name}`},icon(){return this.data.icon},type(){return this.data.type},expanding(){return this.data.scroll},expanding_width(){return this.expanding},name_elements(){if(this.expanding)return[this.fullname];let e=[];for(let t of this.data.value)if(Array.isArray(t))for(let a of t)e.push(`${a.name}@${this.name}`);else e.push(`${t.name}@${this.name}`);return e},hlevelements(){if(this.expanding)return[[k[this.fullname]]];let e=[];for(let t of this.data.value)if(Array.isArray(t)){let a=t.map((e=>k[`${e.name}@${this.name}`])).filter((e=>e.expanding));a.length&&e.push(a)}else{let a=k[`${t.name}@${this.name}`];a.expanding&&e.push([a])}return e},only_fixed_elems(){if(this.data.scroll)return!1;for(let e of this.data.value)if(Array.isArray(e)){for(let t of e)if(y.includes(t.type))return!1}else if(y.includes(e.type))return!1;return!0},expanding_height(){return!this.data.height&&(this.expanding||this.only_fixed_elems)},tops(){let e=this.data.value;return e.length?Array.isArray(e[0])?e[0]:[e[0]]:[]}},props:{data:{type:Object,required:!0}},watch:{data(e){m&&console.log("data update",this.name),v[this.name]=this,this.expanding&&(k[this.fullname]=this)}}});var Kt=a(151);const Qt=(0,K.Z)(Ht,[["render",se]]),Ut=Qt;function Ft(){let e=A&&k.size==x.size;if(e)for(let[t,a]of Object.entries(k))if(!x[t]){e=!1;break}e||(W(document.documentElement.scrollWidth>window.innerWidth),(0,l.Y3)((()=>{requestAnimationFrame((()=>{requestAnimationFrame((()=>{h.visible(!0)}))}))})))}R()(Ht,"components",{QCard:Kt.Z,QIcon:F.Z,QScrollArea:$t.Z});const Tt=(0,l.aZ)({name:"zone",components:{block:Ut},props:{data:Object},updated(e){(0,l.Y3)((()=>{requestAnimationFrame((()=>{requestAnimationFrame(Ft)}))}))}}),Pt=(0,K.Z)(Tt,[["render",J]]),Rt=Pt,Lt={class:"row q-gutter-sm row-md"};function Bt(e,t,a,i,o,n){const d=(0,l.up)("block"),r=(0,l.up)("q-item-label"),c=(0,l.up)("q-space"),h=(0,l.up)("q-btn"),u=(0,l.up)("q-card"),p=(0,l.up)("q-dialog");return(0,l.wg)(),(0,l.j4)(p,{ref:"dialog",onHide:n.onDialogHide,onKeyup:(0,ie.D2)(n.pressedEnter,["enter"])},{default:(0,l.w5)((()=>[(0,l.Wm)(u,{class:"q-dialog-plugin q-pa-md items-start q-gutter-md",bordered:"",style:(0,s.j5)(a.data.internal?"width: 800px; max-width: 80vw;":"")},{default:(0,l.w5)((()=>[a.data?((0,l.wg)(),(0,l.j4)(d,{key:0,data:a.data},null,8,["data"])):(0,l.kq)("",!0),(0,l.Wm)(r,{class:"text-h6"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(a.data.text?a.data.text:""),1)])),_:1}),(0,l._)("div",Lt,[(0,l.Wm)(c),((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(a.commands,(e=>((0,l.wg)(),(0,l.j4)(h,{class:"col-md-3",label:e,"no-caps":"",color:a.commands[0]==e?"primary":"secondary",onClick:t=>n.sendMessage(e)},null,8,["label","color","onClick"])))),256))])])),_:1},8,["style"])])),_:1},8,["onHide","onKeyup"])}const It={props:{data:Object,commands:Array},components:{block:Ut},emits:["ok","hide"],data(){return{closed:!1}},methods:{show(){this.$refs.dialog.show()},message4(e){return[this.data["name"],null,"changed",e]},sendMessage(e){this.data.internal||_(this.message4(e)),this.closed=!0,this.hide()},hide(){this.$refs.dialog.hide()},onDialogHide(){this.$emit("hide"),this.closed||this.data.internal||_(this.message4(null))},pressedEnter(){this.sendMessage(this.commands[0])},onOKClick(){this.$emit("ok"),this.hide()},onCancelClick(){this.hide()}}};var Yt=a(5926),Gt=a(2025);const Jt=(0,K.Z)(It,[["render",Bt]]),Xt=Jt;R()(It,"components",{QDialog:Yt.Z,QCard:Kt.Z,QItemLabel:T.Z,QSpace:Gt.Z,QBtn:He.Z});var ea=a(589);let ta="theme";try{Ze.Z.set(ea.Z.getItem(ta))}catch(pa){}let aa=null;const la=(0,l.aZ)({name:"MainLayout",data(){return{leftDrawerOpen:!1,Dark:Ze.Z,menu:[],tab:"",tooldata:{name:"toolbar"},localServer:!0,statusConnect:!1,screen:{blocks:[],toolbar:[]},visibility:!0,designCycle:0,shiftKey:!1}},components:{menubar:B,zone:Rt,element:Vt},created(){C(this)},unmounted(){window.removeEventListener("resize",this.onResize)},computed:{left_toolbar(){return this.screen.toolbar.filter((e=>!e.right))},right_toolbar(){return this.screen.toolbar.filter((e=>e.right))}},methods:{switchTheme(){Ze.Z.set(!Ze.Z.isActive),ea.Z.set(ta,Ze.Z.isActive)},toggleLeftDrawer(){this.leftDrawerOpen=!this.leftDrawerOpen},tabclick(e){_(["root",null,"changed",e])},visible(e){this.visibility!=e&&(this.$refs.page.$el.style.visibility=e?"":"hidden",this.visibility=e)},handleKeyDown(e){"Shift"==e.key&&(this.shiftKey=!0)},handleKeyUp(e){"Shift"==e.key&&(this.shiftKey=!1)},onResize(e){m&&console.log(`window has been resized w = ${window.innerWidth}, h=${window.innerHeight}`),this.designCycle=0,O()},lens(e){let t={title:"Photo lens",message:e.text,cancel:!0,persistent:!0,component:Xt},{height:a,...l}=e;l.width=750;let s={name:`Picture lens of ${e.name}`,value:[[],l],internal:!0};t.componentProps={data:s,commands:["Close"]},this.$q.dialog(t)},notify(e,t){let a=t,l={message:e,type:t,position:"top",icon:a};"progress"==t?null==aa?(l={group:!1,timeout:0,spinner:!0,type:"info",message:e||"Progress..",position:"top",color:"secondary"},aa=this.$q.notify(l)):null==e?(aa(),aa=null):(l={caption:e},aa(l)):("error"==t&&l.type,this.$q.notify(l))},error(e){this.notify(e,"error")},info(e){this.notify(e,"info")},processMessage(e){if("screen"==e.type)z(),this.screen.name!=e.name?(S(!1),m||this.visible(!1)):e.reload&&S(!1),this.screen=e,this.menu=e.menu.map((e=>({name:e[0],icon:e[1],order:e[2]}))),this.tab=this.screen.name;else if("dialog"==e.type){let t={title:e.name,message:e.text,cancel:!0,persistent:!0};t.component=Xt,t.componentProps={data:e,commands:e.commands},this.$q.dialog(t)}else if("complete"==e.type||"append"==e.type)$(e);else{let t=e.updates&&e.updates.length;t&&E(e.updates);let a=!1;["error","progress","warning","info"].includes(e.type)&&(this.notify(e.value,e.type),a=!0),a||t||(this.error("Invalid data came from the server! Look the console."),console.log(`Invalid data came from the server! ${e}`))}this.closeProgress(e)},closeProgress(e){!aa||e&&"progress"==e.type||this.notify(null,"progress")}},mounted(){window.addEventListener("resize",this.onResize);const e=new ResizeObserver((e=>{let t=document.documentElement.scrollWidth>window.innerWidth||document.documentElement.scrollHeight>window.innerHeight;t&&M(!1)}));let t=this.$refs.page.$el;e.observe(t),window.addEventListener("keydown",this.handleKeyDown),window.addEventListener("keyup",this.handleKeyUp)},beforeUnmount(){window.removeEventListener("keydown",this.handleKeyDown),window.removeEventListener("keyup",this.handleKeyUp)}});var sa=a(9214),ia=a(3812),oa=a(9570),na=a(7547),da=a(3269),ra=a(2652),ca=a(4379);const ha=(0,K.Z)(la,[["render",n]]),ua=ha;R()(la,"components",{QLayout:sa.Z,QHeader:ia.Z,QToolbar:oa.Z,QBtn:He.Z,QItemLabel:T.Z,QTabs:na.Z,QTab:da.Z,QSpace:Gt.Z,QTooltip:Ve.Z,QPageContainer:ra.Z,QPage:ca.Z})}}]);
1
+ "use strict";(globalThis["webpackChunkuniqua"]=globalThis["webpackChunkuniqua"]||[]).push([[662],{2662:(e,t,a)=>{a.r(t),a.d(t,{default:()=>ua});var l=a(3673),s=a(2323);const i=(0,l._)("div",{class:"q-pa-md"},null,-1),o=(0,l._)("div",{class:"q-pa-md"},null,-1);function n(e,t,a,n,d,r){const c=(0,l.up)("q-item-label"),h=(0,l.up)("element"),u=(0,l.up)("q-tab"),p=(0,l.up)("q-tabs"),g=(0,l.up)("q-space"),m=(0,l.up)("q-tooltip"),f=(0,l.up)("q-btn"),y=(0,l.up)("q-toolbar"),w=(0,l.up)("q-header"),b=(0,l.up)("zone"),v=(0,l.up)("q-page"),k=(0,l.up)("q-page-container"),x=(0,l.up)("q-layout");return(0,l.wg)(),(0,l.j4)(x,{view:"lHh Lpr lFf"},{default:(0,l.w5)((()=>[(0,l.Wm)(w,{elevated:"",class:(0,s.C_)({"bg-deep-purple-9":e.Dark.isActive})},{default:(0,l.w5)((()=>[(0,l.Wm)(y,null,{default:(0,l.w5)((()=>[(0,l.Wm)(c,{class:"text-h5"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.screen.header?e.screen.header:""),1)])),_:1}),i,((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.left_toolbar,(t=>((0,l.wg)(),(0,l.j4)(h,{class:(0,s.C_)(["q-ma-xs",{"bg-blue-grey-7":e.Dark.isActive,"bg-blue-5":!e.Dark.isActive}]),data:t,pdata:e.tooldata},null,8,["class","data","pdata"])))),256)),o,(0,l.Wm)(p,{class:"bold-tabs",align:"center","inline-label":"",dense:"",modelValue:e.tab,"onUpdate:modelValue":t[0]||(t[0]=t=>e.tab=t),style:{float:"center"}},{default:(0,l.w5)((()=>[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.menu,(t=>((0,l.wg)(),(0,l.iD)("div",null,[t.icon?((0,l.wg)(),(0,l.j4)(u,{key:0,class:"justify-center text-white shadow-2","no-caps":"",name:t.name,icon:t.icon,label:t.name,onClick:a=>e.tabclick(t.name)},null,8,["name","icon","label","onClick"])):(0,l.kq)("",!0),t.icon?(0,l.kq)("",!0):((0,l.wg)(),(0,l.j4)(u,{key:1,class:"justify-center text-white shadow-2","no-caps":"",name:t.name,label:t.name,onClick:a=>e.tabclick(t.name)},null,8,["name","label","onClick"]))])))),256))])),_:1},8,["modelValue"]),(0,l.Wm)(g),((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.right_toolbar,(t=>((0,l.wg)(),(0,l.j4)(h,{class:(0,s.C_)(["q-ma-xs",{"bg-blue-grey-7":e.Dark.isActive,"bg-blue-5":!e.Dark.isActive}]),data:t,pdata:e.tooldata},null,8,["class","data","pdata"])))),256)),(0,l.Wm)(f,{class:(0,s.C_)(["q-ma-xs",{"bg-blue-grey-9":e.Dark.isActive}]),dense:"",round:"",icon:e.Dark.isActive?"light_mode":"dark_mode",onClick:e.switchTheme},{default:(0,l.w5)((()=>[(0,l.Wm)(m,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Dark/Light mode")])),_:1})])),_:1},8,["class","icon","onClick"])])),_:1})])),_:1},8,["class"]),(0,l.Wm)(k,{class:"content"},{default:(0,l.w5)((()=>[(0,l.Wm)(v,{class:"flex justify-center centers"},{default:(0,l.w5)((()=>[(0,l.Wm)(b,{data:e.screen.blocks,ref:"page"},null,8,["data"])])),_:1})])),_:1})])),_:1})}function d(e,t,a,i,o,n){const d=(0,l.up)("q-icon"),r=(0,l.up)("q-item-section"),c=(0,l.up)("q-item-label"),h=(0,l.up)("q-item");return(0,l.wg)(),(0,l.j4)(h,{clickable:"",tag:"a",target:"_blank",onClick:e.send},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{avatar:""},{default:(0,l.w5)((()=>[(0,l.Wm)(d,{name:e.icon},null,8,["name"])])),_:1}),(0,l.Wm)(r,null,{default:(0,l.w5)((()=>[(0,l.Wm)(c,null,{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.name),1)])),_:1})])),_:1})])),_:1},8,["onClick"])}a(71);var r=a(698),c=a(8603);let h=null,u={};var p;const g=!1;let m=g;const f=["graph","chart","block","text"],y=["tree","table","list","text","graph","chart"];const w=window.location.host,b=`${window.location.protocol}//${w}`;let v={},k={},x={};function C(e){p=new WebSocket(g?"ws://localhost:8000/ws":`ws://${w}/ws`),p.onopen=()=>e.statusConnect=!0,p.onmessage=t=>{m&&console.log("incoming message",t.data),h.designCycle=0;let a=JSON.parse(t.data);a?e.processMessage(a):e.closeProgress(a)},p.onerror=t=>e.error(t),p.onclose=t=>{t.wasClean?e.info("Connection was finished by the server."):e.error("Connection suddenly closed!"),e.statusConnect=!1,m&&console.info("close code : "+t.code+" reason: "+t.reason)},h=e}function _(e){let t={block:e[0],element:e[1],event:e[2],value:e[3]};m&&console.log("sended",t),p.send(JSON.stringify(t))}let A=!0;function S(e){A=e,e||(x={})}function q(e){if(A){let t=x[e.fullname];if(t)return t.styleSize;A=!1}return null}function D(e,t,a,l="complete"){let s=[e.pdata.name,e.data.name,l,t];_(s),u[s.slice(0,3).toString()]=a}function z(){v={},x=k,A=!0,k={}}function j(e,t){Object.assign(e.data,t),e.updated=t.value,e.value=t.value}function E(e){for(let t of e){let e=t.path;if(e.length>1){e.reverse();let a=e.join("@"),l=k[a];j(l,t.data)}else{let a=v[e[0]];Object.assign(a.data,t.data)}}}function $(e){let t=[e.message.block,e.message.element,e.type].toString();"string"==typeof e.value?h.error(e.value):u[t](e.value),delete u[t]}function Z(e){let t=[];for(let l of e)l instanceof Array?t.push(l):t.push([l]);let a=t.shift();return t.reduce(((e,t)=>e.flatMap((e=>t.map((t=>e instanceof Array?[...e,t]:[e,t]))))),a)}function M(e=!1){W(document.documentElement.scrollWidth>window.innerWidth)}let O=(0,c.debounce)(M,50);function W(e){if(h.designCycle>=1)return;m&&console.log(`------------------recalc design ${h.designCycle}`),h.designCycle++;const t=N(e),a=V(e);for(let[l,s]of Object.entries(t)){let e=k[l],t=a[l];const[i,o]=t||[0,1];let n,d=e.geom(),r=d.el,c=e.pdata?e.pdata.name:e.name,h=v[c];for(let a of h.data.value.slice(1))if(Array.isArray(a)){if(a.find((t=>t.name==e.data.name))){let e=a[a.length-1],t=`${e.name}@${c}`;n=k[t];break}}else if(a.name==e.data.name){n=e;break}let u=i;u/=o;let p=e.only_fixed_elems?"":`width:${Math.ceil(r.clientWidth+u)}px`,g=`height:${Math.floor(s+e.he)}px;${p}`;g!=e.styleSize&&(e.styleSize=g),e.has_recalc=!1}}function N(e){const t=h.screen.blocks;let a=window.innerHeight-60,l={},s=new Map,i=[];for(let n of t){const e=[];let t=n instanceof Array,o=t?Z(n):[[n]],d={};for(let[a,l]of Object.entries(v)){let e=l.$el.getBoundingClientRect(),t=e.bottom;d[a]=t-e.top}for(let a of o){let e=0,t=!0;for(let l of a)e+=d[l.name],v[l.name].only_fixed_elems||(t=!1);if(t){let e=v[a.slice(-1)[0].name];k[e.fullname]=e}i.push([e+8*a.length,a])}i.sort(((e,t)=>e[0]>t[0]?-1:e[0]==t[0]?0:1));for(let a of i){let t=a[1];(0,r.hu)(Array.isArray(t));const l=[];for(let[e,a]of Object.entries(k))if(a.expanding_height){let[i,o]=e.split("@");if(t.find((e=>e.name==o))){let e=!0;const t=a.geom();for(let[i,o]of l.entries()){let n=o.geom();e&&o!==a&&n.top==t.top&&(n.scrollHeight<t.scrollHeight&&(l[i]=a),e=!1,s.set(a.fullname,o.fullname))}e&&l.push(a)}}l.length&&e.push([a[0],l])}for(let[s,i]of e){let e=0,t=[];for(let a of i)if(a.fullname in l)s+=l[a.fullname];else{let l=a.geom(),i=l.bottom-l.top;i<100&&(s+=100-i,i=100),a.he=i,e+=a.he,t.push(a)}let o=(e+a-s)/t.length,n=0;for(let a of t){let e,s=o-a.he;if(1==t.length)e=s;else if(e=Math.floor(s),s-e){n+=s-e;let t=Math.round(n)-n;t<.001&&t>-.001&&(e+=Math.round(n),n=0)}l[a.fullname]=e}}}let o=Array.from(s.entries());o.sort(((e,t)=>e[0]in l||e[1]in l?-1:1));for(let[n,d]of o)d in l?(l[n]=l[d],k[n].he=k[d].he):(l[d]=l[n],k[d].he=k[n].he);return l}function V(e){let t=null;const a=t?[t]:h.screen.blocks;let l=window.innerWidth-20,s=[],i={};for(let n of a)if(0==s.length)if(Array.isArray(n))for(let e of n)s.push(Array.isArray(e)?e:[e]);else s=[[n]];else{let e=[];if(Array.isArray(n))for(let t of n)for(let a of s)e.push(Array.isArray(t)?a.concat(t):[...a,t]);else for(let t of s)e.push([...t,n]);s=e}const o=[];for(let n of s){let e=0;for(let l of n){let t=v[l.name].$el.getBoundingClientRect();e+=t.right-t.left+5}let t=l-e,a=[[]];for(let l of n){let e=[];for(let t of v[l.name].hlevelements)for(let l of a)e.push([...l,...t]);a=e}for(let l of a)o.push([t,l])}o.sort(((e,t)=>t[1].length-e[1].length));for(let[n,d]of o){let t=new Map;for(let e=0;e<d.length;e++){let a=d[e],l=a.parent_name,s=l||a.name,o=a.geom(),r=(a.data.width?a.data.width:o.scrollWidth)-(o.right-o.left);if(r>1&&!f.includes(a.type)&&n>0&&!i[a.fullname]){let e=n>r?r:n;n-=e,i[a.fullname]=[e,1]}if(s=a.parent_name,s){let e=v[s],l=e.$el.getBoundingClientRect().right-6,i=e.free_right_delta4(a,o.right),n=l-i;i&&n>0&&(!t.has(s)||t.get(s)>n)&&t.set(s,n)}}for(let e of t.values())n+=e;let a=[];for(let o of d)if(o.expanding_width&&(e||f.includes(o.type)))if(i[o.fullname]){let[e,t]=i[o.fullname];n-=e/t}else a.push(o);let l=a.length;const s=n/l;for(let e of a)i[e.fullname]||(i[e.fullname]=[Math.floor(s),1]);for(let e of d)i[e.fullname]||(i[e.fullname]=[0,1])}return i}const H=(0,l.aZ)({name:"menubar",methods:{send(){_(["root",null,"changed",this.name])}},props:{name:{type:String,required:!0},icon:{type:String,default:""}}});var K=a(4260),Q=a(3414),U=a(2035),F=a(4554),T=a(2350),P=a(7518),R=a.n(P);const L=(0,K.Z)(H,[["render",d]]),B=L;R()(H,"components",{QItem:Q.Z,QItemSection:U.Z,QIcon:F.Z,QItemLabel:T.Z});const I={key:0,class:"row q-col-gutter-xs q-py-xs"},Y={class:"q-col-gutter-xs"},G={key:0,class:"column q-col-gutter-xs"};function J(e,t,a,s,i,o){const n=(0,l.up)("zone",!0),d=(0,l.up)("block");return e.data instanceof Array?((0,l.wg)(),(0,l.iD)("div",I,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.data,(e=>((0,l.wg)(),(0,l.iD)("div",Y,[e instanceof Array?((0,l.wg)(),(0,l.iD)("div",G,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e,(e=>((0,l.wg)(),(0,l.j4)(n,{class:"q-col-gutter-xs q-py-xs",data:e},null,8,["data"])))),256))])):((0,l.wg)(),(0,l.j4)(d,{key:1,data:e},null,8,["data"]))])))),256))])):((0,l.wg)(),(0,l.j4)(d,{key:1,data:e.data},null,8,["data"]))}const X={class:"row no-wrap"},ee=["data","pdata"],te={key:0,class:"row"},ae=["data","pdata"],le={key:0,class:"row no-wrap"};function se(e,t,a,i,o,n){const d=(0,l.up)("element"),r=(0,l.up)("q-icon"),c=(0,l.up)("q-scroll-area"),h=(0,l.up)("q-card");return(0,l.wg)(),(0,l.j4)(h,{class:"my-card q-ma-xs",style:(0,s.j5)(e.only_fixed_elems?e.styleSize:null),key:e.name},{default:(0,l.w5)((()=>[(0,l._)("div",X,[e.data.logo?((0,l.wg)(),(0,l.j4)(d,{key:0,class:"q-ma-sm",data:e.data.logo,pdata:e.data},null,8,["data","pdata"])):e.data.icon?((0,l.wg)(),(0,l.j4)(r,{key:1,class:"q-mt-sm",size:"sm",name:e.data.icon},null,8,["name"])):(0,l.kq)("",!0),"_"!=e.name[0]?((0,l.wg)(),(0,l.iD)("p",{key:2,class:(0,s.C_)(["q-ma-sm",{"text-info":e.Dark.isActive,"text-cyan-10":!e.Dark.isActive}]),style:{"font-size":"18px"}},(0,s.zw)(e.name),3)):(0,l.kq)("",!0),((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.tops,(t=>((0,l.wg)(),(0,l.j4)(d,{class:"q-ma-xs",data:t,pdata:e.data},null,8,["data","pdata"])))),256))]),e.data.scroll?((0,l.wg)(),(0,l.j4)(c,{key:0,style:(0,s.j5)(e.styleSize),"thumb-style":e.thumbStyle,"bar-style":e.barStyle},{default:(0,l.w5)((()=>[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.data.value.slice(1),(t=>((0,l.wg)(),(0,l.iD)("div",{class:"column",data:t,pdata:e.data},[t instanceof Array?((0,l.wg)(),(0,l.iD)("div",te,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(t,(t=>((0,l.wg)(),(0,l.j4)(d,{class:"q-ma-xs",data:t,pdata:e.data},null,8,["data","pdata"])))),256))])):((0,l.wg)(),(0,l.j4)(d,{key:1,class:"q-ma-xs",data:t,pdata:e.data},null,8,["data","pdata"]))],8,ee)))),256))])),_:1},8,["style","thumb-style","bar-style"])):((0,l.wg)(!0),(0,l.iD)(l.HY,{key:1},(0,l.Ko)(e.data.value.slice(1),(t=>((0,l.wg)(),(0,l.iD)("div",{class:"column",data:t,pdata:e.data},[t instanceof Array?((0,l.wg)(),(0,l.iD)("div",le,[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(t,(t=>((0,l.wg)(),(0,l.j4)(d,{class:"q-ma-xs",data:t,pdata:e.data},null,8,["data","pdata"])))),256))])):((0,l.wg)(),(0,l.j4)(d,{key:1,class:"q-ma-xs",data:t,pdata:e.data},null,8,["data","pdata"]))],8,ae)))),256))])),_:1},8,["style"])}var ie=a(8880);const oe=e=>((0,l.dD)("data-v-f48596a0"),e=e(),(0,l.Cn)(),e),ne={key:4},de={key:5,class:"{'bg-blue-grey-9': Dark.isActive}"},re={key:9},ce={key:12},he=["width","height"],ue=["src"],pe={key:19,class:"web-camera-container"},ge={class:"camera-button"},me={key:0},fe={key:1},ye={class:"camera-loading"},we=oe((()=>(0,l._)("ul",{class:"loader-circle"},[(0,l._)("li"),(0,l._)("li"),(0,l._)("li")],-1))),be=[we],ve=["height"],ke=["height"],xe={key:1,class:"camera-shoot"},Ce=oe((()=>(0,l._)("img",{src:"https://img.icons8.com/material-outlined/50/000000/camera--v2.png"},null,-1))),_e=[Ce],Ae={key:2,class:"camera-download"},Se={key:20};function qe(e,t,a,i,o,n){const d=(0,l.up)("q-icon"),r=(0,l.up)("q-img"),c=(0,l.up)("q-select"),h=(0,l.up)("q-checkbox"),u=(0,l.up)("q-toggle"),p=(0,l.up)("q-badge"),g=(0,l.up)("q-slider"),m=(0,l.up)("q-btn"),f=(0,l.up)("q-btn-toggle"),y=(0,l.up)("utable"),w=(0,l.up)("linechart"),b=(0,l.up)("q-input"),v=(0,l.up)("q-tree"),k=(0,l.up)("q-scroll-area"),x=(0,l.up)("q-separator"),C=(0,l.up)("q-uploader"),_=(0,l.up)("sgraph"),A=(0,l.up)("q-tooltip"),S=(0,l.up)("q-spinner-ios");return"image"==e.type?((0,l.wg)(),(0,l.j4)(r,{key:0,src:e.data.url,"spinner-color":"blue",onClick:(0,ie.iM)(e.switchValue,["stop"]),fit:"cover",style:(0,s.j5)(e.elemSize)},{default:(0,l.w5)((()=>[e.data.label?((0,l.wg)(),(0,l.iD)("div",{key:0,class:"absolute-bottom-right text-subtitle2 custom-caption",onClick:t[0]||(t[0]=(0,ie.iM)(((...t)=>e.lens&&e.lens(...t)),["stop"]))},(0,s.zw)(e.data.label),1)):(0,l.kq)("",!0),e.value?((0,l.wg)(),(0,l.j4)(d,{key:1,class:"absolute all-pointer-events",size:"32px",name:"check_circle",color:"light-blue-2",style:{"font-size":"2em",top:"8px",left:"8px"}})):(0,l.kq)("",!0)])),_:1},8,["src","onClick","style"])):"select"==e.type?((0,l.wg)(),(0,l.j4)(c,{key:1,"transition-show":"flip-up",readonly:0==e.data.edit,"transition-hide":"flip-down",dense:"",modelValue:e.value,"onUpdate:modelValue":t[1]||(t[1]=t=>e.value=t),options:e.data.options},(0,l.Nv)({_:2},[e.showname?{name:"prepend",fn:(0,l.w5)((()=>[(0,l._)("p",{class:(0,s.C_)(["text-subtitle1 q-ma-sm",{white:e.Dark.isActive,black:!e.Dark.isActive}])},(0,s.zw)(e.name),3)])),key:"0"}:void 0]),1032,["readonly","modelValue","options"])):"check"==e.type?((0,l.wg)(),(0,l.j4)(h,{key:2,"left-label":"",disable:0==e.data.edit,modelValue:e.value,"onUpdate:modelValue":t[2]||(t[2]=t=>e.value=t),label:e.nameLabel,"checked-icon":"task_alt","unchecked-icon":"highlight_off"},null,8,["disable","modelValue","label"])):"switch"==e.type?((0,l.wg)(),(0,l.j4)(u,{key:3,modelValue:e.value,"onUpdate:modelValue":t[3]||(t[3]=t=>e.value=t),disable:0==e.data.edit,color:"primary",label:e.nameLabel,"left-label":""},null,8,["modelValue","disable","label"])):"range"==e.type?((0,l.wg)(),(0,l.iD)("div",ne,[(0,l.Wm)(p,{outline:"",dense:"",color:e.Dark.isActive?"blue-3":"blue-9"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.name)+": "+(0,s.zw)(e.value)+" ("+(0,s.zw)(e.data.options[0])+" to "+(0,s.zw)(e.data.options[1])+", Δ "+(0,s.zw)(e.data.options[2])+")",1)])),_:1},8,["color"]),(0,l.Wm)(g,{class:"q-pl-sm",dense:"",modelValue:e.value,"onUpdate:modelValue":t[4]||(t[4]=t=>e.value=t),min:e.data.options[0],max:e.data.options[1],step:e.data.options[2],color:"primary"},null,8,["modelValue","min","max","step"])])):"radio"==e.type?((0,l.wg)(),(0,l.iD)("div",de,[e.showname?((0,l.wg)(),(0,l.j4)(m,{key:0,ripple:!1,color:"indigo-10",disable:"",label:e.name,"no-caps":""},null,8,["label"])):(0,l.kq)("",!0),(0,l.Wm)(f,{modelValue:e.value,"onUpdate:modelValue":t[5]||(t[5]=t=>e.value=t),readonly:0==e.data.edit,class:(0,s.C_)({"bg-blue-grey-9":e.Dark.isActive}),"no-caps":"",options:e.data.options.map((e=>({label:e,value:e})))},null,8,["modelValue","readonly","class","options"])])):"table"==e.type?((0,l.wg)(),(0,l.j4)(y,{key:6,data:e.data,pdata:e.pdata,styleSize:e.styleSize},null,8,["data","pdata","styleSize"])):"chart"==e.type?((0,l.wg)(),(0,l.j4)(w,{key:7,data:e.data,pdata:e.pdata,styleSize:e.styleSize},null,8,["data","pdata","styleSize"])):"string"==e.type&&e.data.hasOwnProperty("complete")?((0,l.wg)(),(0,l.j4)(c,{key:8,dense:"",readonly:0==e.data.edit,modelValue:e.value,"onUpdate:modelValue":t[6]||(t[6]=t=>e.value=t),"use-input":"","hide-selected":"",borderless:"",outlined:"","hide-bottom-space":"","fill-input":"","input-debounce":"0",options:e.options,onFilter:e.complete,label:e.name,onKeydown:(0,ie.D2)(e.pressedEnter,["enter"])},null,8,["readonly","modelValue","options","onFilter","label","onKeydown"])):"string"==e.type&&0==e.data.edit?((0,l.wg)(),(0,l.iD)("div",re,[(0,l._)("p",{class:(0,s.C_)(["q-ma-sm",{white:e.Dark.isActive,black:!e.Dark.isActive}])},(0,s.zw)(e.value),3)])):"string"==e.type?((0,l.wg)(),(0,l.j4)(b,{key:10,modelValue:e.value,"onUpdate:modelValue":t[7]||(t[7]=t=>e.value=t),label:e.name2show,ref:"inputRef",autogrow:e.data.autogrow,dense:"",onKeydown:(0,ie.D2)(e.pressedEnter,["enter"]),readonly:0==e.data.edit},null,8,["modelValue","label","autogrow","onKeydown","readonly"])):"number"==e.type?((0,l.wg)(),(0,l.j4)(b,{key:11,modelValue:e.value,"onUpdate:modelValue":t[8]||(t[8]=t=>e.value=t),modelModifiers:{number:!0},label:e.name2show,ref:"inputRef",dense:"",onKeydown:(0,ie.D2)(e.pressedEnter,["enter"]),type:"number",readonly:0==e.data.edit},null,8,["modelValue","label","onKeydown","readonly"])):"tree"==e.type||"list"==e.type?((0,l.wg)(),(0,l.iD)("div",ce,[e.showname?((0,l.wg)(),(0,l.iD)("p",{key:0,class:(0,s.C_)(["text-subtitle1 q-ma-sm text-grey-7",{"text-white":e.Dark.isActive,"text-indigo-10":!e.Dark.isActive}])},(0,s.zw)(e.name),3)):(0,l.kq)("",!0),(0,l.Wm)(k,{style:(0,s.j5)(e.styleSize),"thumb-style":e.thumbStyle,"bar-style":e.barStyle,ref:"scroller"},{default:(0,l.w5)((()=>[(0,l.Wm)(v,{nodes:e.treeNodes,"selected-color":e.Dark.isActive?"blue-3":"blue-9",dense:e.data.dense,ref:"tree",selected:e.value,"onUpdate:selected":t[9]||(t[9]=t=>e.value=t),expanded:e.expandedKeys,"onUpdate:expanded":t[10]||(t[10]=t=>e.expandedKeys=t),"node-key":"label","default-expand-all":""},null,8,["nodes","selected-color","dense","selected","expanded"])])),_:1},8,["style","thumb-style","bar-style"])])):"text"==e.type?(0,l.wy)(((0,l.wg)(),(0,l.iD)("textarea",{key:13,class:(0,s.C_)(["textarea",{"bg-grey-10":e.Dark.isActive,"text-white":e.Dark.isActive}]),"onUpdate:modelValue":t[11]||(t[11]=t=>e.value=t),filled:"",type:"textarea",style:(0,s.j5)(e.elemSize),onKeydown:t[12]||(t[12]=(0,ie.D2)(((...t)=>e.pressedEnter&&e.pressedEnter(...t)),["enter"]))},null,38)),[[ie.nr,e.value]]):"line"==e.type?((0,l.wg)(),(0,l.j4)(x,{key:14,color:"green"})):"video"==e.type?((0,l.wg)(),(0,l.iD)("video",{key:e.fullname,controls:"",width:e.data.width,height:e.data.height},[(0,l._)("source",{src:e.data.url,type:"video/mp4"},null,8,ue)],8,he)):"uploader"==e.type?((0,l.wg)(),(0,l.j4)(C,{key:16,label:e.name,"auto-upload":"",thumbnails:"",url:e.host_path,onUploaded:e.updateDom,onAdded:e.onAdded,style:(0,s.j5)(e.elemSize),ref:"uploaderRef",flat:"",class:(0,s.C_)({"bg-grey-10":e.Dark.isActive}),color:e.Dark.isActive?"purple-10":"blue"},null,8,["label","url","onUploaded","onAdded","style","class","color"])):"image_uploader"==e.type?((0,l.wg)(),(0,l.j4)(C,{key:17,label:e.name,"auto-upload":"",thumbnails:"",url:e.host_path,onUploaded:e.updateDom,onAdded:e.onAdded,ref:"uploaderRef",flat:"",class:(0,s.C_)({"bg-grey-10":e.Dark.isActive}),color:e.Dark.isActive?"purple-10":"blue"},null,8,["label","url","onUploaded","onAdded","class","color"])):"graph"==e.type?((0,l.wg)(),(0,l.j4)(_,{key:18,data:e.data,pdata:e.pdata,styleSize:e.elemSize},null,8,["data","pdata","styleSize"])):"camera"==e.type?((0,l.wg)(),(0,l.iD)("div",pe,[(0,l._)("div",ge,[(0,l._)("button",{class:(0,s.C_)(["button is-rounded",{"is-primary":!e.isCameraOpen,"is-danger":e.isCameraOpen}]),type:"button",onClick:t[13]||(t[13]=(...t)=>e.toggleCamera&&e.toggleCamera(...t))},[e.isCameraOpen?((0,l.wg)(),(0,l.iD)("span",fe,"Close Camera")):((0,l.wg)(),(0,l.iD)("span",me,"Open Camera"))],2)]),(0,l.wy)((0,l._)("div",ye,be,512),[[ie.F8,e.isCameraOpen&&e.isLoading]]),e.isCameraOpen?(0,l.wy)(((0,l.wg)(),(0,l.iD)("div",{key:0,class:(0,s.C_)(["camera-box",{flash:e.isShotPhoto}])},[(0,l._)("div",{class:(0,s.C_)(["camera-shutter",{flash:e.isShotPhoto}])},null,2),(0,l.wy)((0,l._)("video",{ref:"camera",width:450,height:337.5,autoplay:""},null,8,ve),[[ie.F8,!e.isPhotoTaken]]),(0,l.wy)((0,l._)("canvas",{id:"photoTaken",ref:"canvas",width:450,height:337.5},null,8,ke),[[ie.F8,e.isPhotoTaken]])],2)),[[ie.F8,!e.isLoading]]):(0,l.kq)("",!0),e.isCameraOpen&&!e.isLoading?((0,l.wg)(),(0,l.iD)("div",xe,[(0,l._)("button",{class:"button",type:"button",onClick:t[14]||(t[14]=(...t)=>e.takePhoto&&e.takePhoto(...t))},_e)])):(0,l.kq)("",!0),e.isPhotoTaken&&e.isCameraOpen?((0,l.wg)(),(0,l.iD)("div",Ae,[(0,l.Wm)(m,{onClick:e.downloadImage,label:"Send"},null,8,["onClick"])])):(0,l.kq)("",!0)])):""!=e.showname?((0,l.wg)(),(0,l.iD)("div",Se,[(0,l.Wm)(m,{"no-caps":"",disable:0==e.data.edit,class:(0,s.C_)({"bg-blue-grey-8":e.Dark.isActive}),label:e.name,icon:e.data.icon,onClick:e.sendValue},{default:(0,l.w5)((()=>[e.data.tooltip?((0,l.wg)(),(0,l.j4)(A,{key:0,class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.data.tooltip),1)])),_:1})):(0,l.kq)("",!0)])),_:1},8,["disable","class","label","icon","onClick"])])):e.data.spinner?((0,l.wg)(),(0,l.j4)(m,{key:22,"no-caps":"",dense:"",disable:0==e.data.edit,round:"",class:(0,s.C_)({"bg-blue-grey-8":e.Dark.isActive}),onClick:e.sendValue},{default:(0,l.w5)((()=>[(0,l.Wm)(S,{color:e.Dark.isActive?"white":"black"},null,8,["color"]),e.data.tooltip?((0,l.wg)(),(0,l.j4)(A,{key:0,class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.data.tooltip),1)])),_:1})):(0,l.kq)("",!0)])),_:1},8,["disable","class","onClick"])):((0,l.wg)(),(0,l.j4)(m,{key:21,"no-caps":"",disable:0==e.data.edit,dense:"",round:"",class:(0,s.C_)({"bg-blue-grey-8":e.Dark.isActive}),icon:e.data.icon,onClick:e.sendValue},{default:(0,l.w5)((()=>[e.data.tooltip?((0,l.wg)(),(0,l.j4)(A,{key:0,class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(e.data.tooltip),1)])),_:1})):(0,l.kq)("",!0)])),_:1},8,["disable","class","icon","onClick"]))}const De={key:0},ze={class:"row"},je=["onClick"];function Ee(e,t,a,i,o,n){const d=(0,l.up)("q-icon"),r=(0,l.up)("q-tooltip"),c=(0,l.up)("q-input"),h=(0,l.up)("q-btn"),u=(0,l.up)("q-th"),p=(0,l.up)("q-tr"),g=(0,l.up)("q-checkbox"),m=(0,l.up)("q-select"),f=(0,l.up)("q-td"),y=(0,l.up)("q-table");return(0,l.wg)(),(0,l.j4)(y,{"virtual-scroll":"",dense:e.data.dense,style:(0,s.j5)(e.styleSize?e.styleSize:e.currentStyle()),flat:"",filter:e.search,ref:"table",virtualScrollSliceSize:"100","rows-per-page-options":[0],"virtual-scroll-sticky-size-start":48,"row-key":"iiid",title:e.name,rows:e.rows,columns:e.columns,selection:e.singleMode?"single":"multiple",selected:e.selected,"onUpdate:selected":t[2]||(t[2]=t=>e.selected=t)},{"top-right":(0,l.w5)((()=>[!1!==e.data.tools?((0,l.wg)(),(0,l.iD)("div",De,[(0,l._)("div",ze,[(0,l.Wm)(c,{modelValue:e.search,"onUpdate:modelValue":t[1]||(t[1]=t=>e.search=t),label:"Search",dense:"",ref:"searchField"},(0,l.Nv)({append:(0,l.w5)((()=>[""!=e.search?((0,l.wg)(),(0,l.j4)(d,{key:0,class:"cursor-pointer",name:"close",size:"xs",onClick:t[0]||(t[0]=t=>{e.search="",e.$refs.searchField.focus()})},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Reset search ")])),_:1})])),_:1})):(0,l.kq)("",!0)])),_:2},[""==e.search?{name:"prepend",fn:(0,l.w5)((()=>[(0,l.Wm)(d,{name:"search",size:"xs"})])),key:"0"}:void 0]),1032,["modelValue"]),(0,l._)("div",null,[(0,l.Wm)(h,{class:(0,s.C_)(["q-ml-xs",{"bg-blue-grey-8":e.Dark.isActive}]),dense:"",rounded:"",icon:"select_all","no-caps":"",onClick:e.showSelected},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Show selected ")])),_:1})])),_:1},8,["class","onClick"]),(0,l.Wm)(h,{class:(0,s.C_)(["q-ml-xs",{"bg-blue-grey-8":e.Dark.isActive}]),dense:"",rounded:"",icon:"deselect","no-caps":"",onClick:e.deselectAll},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Deselect all")])),_:1})])),_:1},8,["class","onClick"]),!1!==e.data.multimode?((0,l.wg)(),(0,l.j4)(h,{key:0,class:(0,s.C_)(["q-ml-xs",{"bg-blue-grey-8":e.Dark.isActive}]),dense:"",rounded:"",icon:e.singleMode?"looks_one":"grain","no-caps":"",onClick:e.switchMode},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Multi-single select mode ")])),_:1})])),_:1},8,["class","icon","onClick"])):(0,l.kq)("",!0),e.editable?((0,l.wg)(),(0,l.j4)(h,{key:1,class:(0,s.C_)(["q-ml-xs",{"bg-blue-grey-8":e.Dark.isActive}]),dense:"",rounded:"",icon:e.editMode?"cancel":"edit","no-caps":"",onClick:e.switchEdit},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Edit mode")])),_:1})])),_:1},8,["class","icon","onClick"])):(0,l.kq)("",!0),e.editable&&"append"in e.data?((0,l.wg)(),(0,l.j4)(h,{key:2,class:(0,s.C_)(["q-ml-xs",{"bg-blue-grey-8":e.Dark.isActive}]),dense:"",rounded:"",icon:"add","no-caps":"",onClick:e.append},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Add a new row")])),_:1})])),_:1},8,["class","onClick"])):(0,l.kq)("",!0),"delete"in e.data?((0,l.wg)(),(0,l.j4)(h,{key:3,class:(0,s.C_)(["q-ml-xs",{"bg-blue-grey-8":e.Dark.isActive}]),dense:"",rounded:"",icon:"delete_forever","no-caps":"",onClick:e.delSelected},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Delete selected ")])),_:1})])),_:1},8,["class","onClick"])):(0,l.kq)("",!0),"view"in e.data?((0,l.wg)(),(0,l.j4)(h,{key:4,class:(0,s.C_)(["q-ml-xs",{"bg-blue-grey-8":e.Dark.isActive}]),dense:"",rounded:"",icon:"insights","no-caps":"",onClick:e.chart},{default:(0,l.w5)((()=>[(0,l.Wm)(r,{class:"text-body2"},{default:(0,l.w5)((()=>[(0,l.Uk)("Draw the chart")])),_:1})])),_:1},8,["class","onClick"])):(0,l.kq)("",!0)])])])):(0,l.kq)("",!0)])),header:(0,l.w5)((t=>[(0,l.Wm)(p,{props:t},{default:(0,l.w5)((()=>[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(t.cols,(a=>((0,l.wg)(),(0,l.j4)(u,{class:(0,s.C_)(["text-italic",{"text-grey-9":!e.Dark.isActive,"text-teal-3":e.Dark.isActive}]),key:a.name,props:t},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(a.label),1)])),_:2},1032,["class","props"])))),128))])),_:2},1032,["props"])])),body:(0,l.w5)((t=>[(0,l.Wm)(p,{props:t,onClick:e=>t.selected=!t.selected},{default:(0,l.w5)((()=>[((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(e.columns,((a,i)=>((0,l.wg)(),(0,l.j4)(f,{key:a.name,props:t},{default:(0,l.w5)((()=>["boolean"==typeof t.row[a.name]?((0,l.wg)(),(0,l.j4)(g,{key:0,modelValue:t.row[a.name],"onUpdate:modelValue":[e=>t.row[a.name]=e,l=>e.change_switcher(t.row,a.name,i)],dense:"",disable:!e.editMode},null,8,["modelValue","onUpdate:modelValue","disable"])):e.editMode&&"complete"in e.data&&i==e.cedit&&e.redit==t.row.iiid?((0,l.wg)(),(0,l.j4)(m,{key:1,dense:"","model-value":t.row[a.name],"use-input":"","hide-selected":"","fill-input":"",autofocus:"",outlined:"",borderless:"",onInputValue:e.change,"hide-dropdown-icon":"","input-debounce":"0",options:e.options,onKeydown:e.keyInput,onFilter:e.complete},null,8,["model-value","onInputValue","options","onKeydown","onFilter"])):e.editMode&&i==e.cedit&&e.redit==t.row.iiid?((0,l.wg)(),(0,l.j4)(c,{key:2,modelValue:t.row[a.name],"onUpdate:modelValue":[e=>t.row[a.name]=e,e.change],dense:"",onKeydown:e.keyInput,autofocus:""},null,8,["modelValue","onUpdate:modelValue","onKeydown"])):((0,l.wg)(),(0,l.iD)("div",{key:3,onClick:a=>e.select(t.row.iiid,i)},(0,s.zw)(t.row[a.name]),9,je))])),_:2},1032,["props"])))),128))])),_:2},1032,["props","onClick"])])),_:1},8,["dense","style","filter","title","rows","columns","selection","selected"])}var $e=a(1959),Ze=a(9058);function Me(e,t){return e.length===t.length&&e.every(((e,a)=>t[a]&&e.iiid==t[a].iiid))}const Oe=(0,l.aZ)({name:"utable",setup(e){const{data:t,pdata:a}=(0,$e.BK)(e);let s=(0,l.Fl)((()=>{let e=[],a=t.value;const l=a.headers,s=l.length,i=a.rows,o=i.length;for(var n=0;n<o;n++){const t={},a=i[n];for(var d=0;d<s;d++)t[l[d]]=a[d];t.iiid=n,e.push(t)}return e})),i=()=>{let e=t.value,a=null===e.value||0==s.value.length?[]:Array.isArray(e.value)?e.value.map((e=>s.value[e])):[s.value[e.value]];return a},o=i(),n=(0,$e.iH)(o),d=(0,$e.iH)(o),r=(0,$e.iH)(!Array.isArray(t.value.value)),c=(e,l)=>{_([a.value.name,t.value.name,e,l])},h=(0,l.Fl)((()=>r.value?d.value.length>0?d.value[0].iiid:null:d.value.map((e=>e.iiid)))),u=(0,l.Fl)((()=>t.value.value));return(0,l.YP)(s,((e,t)=>{d.value=i(),n.value=d.value})),(0,l.YP)(t,((e,a)=>{m&&console.log("data update",a.name),d.value=i(),n.value=d.value,r.value=!Array.isArray(t.value.value)})),{rows:s,value:h,selected:d,singleMode:r,sendMessage:c,datavalue:u,updated:n}},data(){return{Dark:Ze.Z,search:"",editMode:!1,options:[],cedit:null}},methods:{currentStyle(){let e=this.data.tablerect;if(e){let t=e.width,a=e.height;return`width: ${t}px; height: ${a}px`}return null},select(e,t){this.editMode&&(this.cedit=t,m&&console.log("selected",e,this.cedit))},change_switcher(e,t,a){if(console.log(e,t,a,e[t]),this.editMode){this.cedit=a;const l=e.iiid;let s=this.data.rows;s[l][a]=e[t],this.sendMessage("modify",[e[t],[l,a]])}},change(e){if(m&&console.log("changed",this.data.headers[this.cedit],e),this.editMode&&this.selected.length){const t=this.selected[0].iiid;let a=this.data.rows;a[t][this.cedit]=e,this.sendMessage("modify",[e,[t,this.cedit]])}},keyInput(e){if("Control"==e.key)return;let t=!1;switch(e.key){case"Enter":"update"in this.data&&this.sendMessage("update",[this.rows[this.redit][this.data.headers[this.cedit]],[this.redit,this.cedit]]),t=!0;case"ArrowRight":if(e.ctrlKey||t)for(let e=this.cedit+1;e<this.data.rows[this.redit].length;e++){let t=typeof this.data.rows[this.redit][e];if("string"==t||"number"==t){this.cedit=e;break}}break;case"Escape":this.switchEdit();break;case"ArrowLeft":if(e.ctrlKey)for(let e=this.cedit-1;e>=0;e--){let t=typeof this.data.rows[this.redit][e];if("string"==t||"number"==t){this.cedit=e;break}}break;case"ArrowUp":if(e.ctrlKey&&this.redit>0){let e=this.redit-1,t=this.data,a=typeof t.rows[e][this.cedit];"string"!=a&&"number"!=a||(t.value=e),this.selected=[this.rows[e]]}break;case"ArrowDown":if(e.ctrlKey&&this.redit+1<this.rows.length){let e=this.redit+1,t=this.data,a=typeof t.rows[e][this.cedit];"string"!=a&&"number"!=a||(t.value=e),this.selected=[this.rows[e]]}break}},complete(e,t,a){D(this,[e,[this.redit,this.cedit]],(e=>t((()=>{this.options=e}))))},append(){let e=this.data.rows,t=e.length,a=this;D(this,[t,this.search],(function(l){if(!Array.isArray(l))return h.error(l);m&&console.log("added row",l),a.search="",e.push(l),setTimeout((()=>{let e=a.rows;a.selected=[e[t]],a.showSelected(),a.editMode||a.switchEdit(),a.select(e[t],0)}),100)}),"append")},showSelected(){let e=this.$refs.table;if(this.selected.length){let t=e.computedRows.findIndex((e=>e.iiid===this.selected[0].iiid));e.scrollTo(t)}},deselectAll(){this.selected=[],this.sendMessage("changed",this.value)},chart(){let e=this.data;e.type="chart",e.tablerect=this.$refs.table.$el.getBoundingClientRect(),k[this.fullname].styleSize=this.currentStyle()},switchMode(){this.singleMode=!this.singleMode,this.singleMode&&this.selected.length>1&&this.selected.splice(1)},switchEdit(){this.editMode=!this.editMode,this.editMode&&!this.singleMode&&this.switchMode()},delSelected(){if(!this.selected.length)return void h.error("Rows are not selected!");this.sendMessage("delete",this.value);let e=this.data.rows;if(this.singleMode){let t=this.selected[0].iiid;this.selected=[],e.splice(t,1)}else{this.selected.length>1&&this.selected.sort(((e,t)=>t.iiid-e.iiid));let t=this.selected.map((e=>e.iiid));this.selected=[];for(let a of t)e.splice(a,1)}}},watch:{selected(e){const t=this.data;if(!Me(this.updated,this.selected)){let e=this.selected.length;t.value=this.singleMode?1==e?this.selected[0].iiid:null:this.selected.map((e=>e.iiid)),this.sendMessage("changed",t.value),this.updated=this.selected}t.show&&(this.showSelected(),t.show=!1)}},computed:{fullname(){return`${this.data.name}@${this.pdata.name}`},redit(){return this.editMode&&this.selected.length?this.selected[0].iiid:null},editable(){return 0!=this.data["edit"]},name(){return"_"==this.data.name?"":this.data.name},columns(){return this.data.headers.map((e=>({name:e,label:e,align:"left",sortable:!0,field:e})))}},props:{data:Object,pdata:Object,styleSize:String}});var We=a(9267),Ne=a(4842),Ve=a(8870),He=a(2165),Ke=a(8186),Qe=a(2414),Ue=a(3884),Fe=a(5735),Te=a(7208);const Pe=(0,K.Z)(Oe,[["render",Ee]]),Re=Pe;function Le(e,t,a,i,o,n){return(0,l.wg)(),(0,l.iD)("div",{ref:"graph",style:(0,s.j5)(a.styleSize),id:"graph"},null,4)}R()(Oe,"components",{QTable:We.Z,QInput:Ne.Z,QIcon:F.Z,QTooltip:Ve.Z,QBtn:He.Z,QTr:Ke.Z,QTh:Qe.Z,QTd:Ue.Z,QCheckbox:Fe.Z,QSelect:Te.Z});var Be=a(130),Ie=a.n(Be),Ye=a(309);var Ge=a(5154),Je=a.n(Ge),Xe=a(4150),et=a.n(Xe);let tt="#091159",at={hideEdgesOnMove:!1,hideLabelsOnMove:!1,renderLabels:!0,renderEdgeLabels:!0,enableEdgeClickEvents:!0,enableEdgeWheelEvents:!1,enableEdgeHoverEvents:!0,enableEdgeHovering:!0,allowInvalidContainer:!0,enableEdgeClickEvents:!0,enableEdgeHoverEvents:!0,defaultNodeColor:"#FCA072",defaultNodeType:"circle",defaultEdgeColor:"#888",defaultEdgeType:"arrow",labelFont:"Arial",labelSize:14,labelWeight:"normal",labelColor:{color:"#00838F",attribute:"#000"},edgeLabelFont:"Arial",edgeLabelSize:14,edgeLabelWeight:"normal",edgeLabelColor:{attribute:"color"},stagePadding:30,labelDensity:1,labelGridCellSize:100,labelRenderedSizeThreshold:6,animationsTime:1e3,borderSize:2,outerBorderSize:3,defaultNodeOuterBorderColor:"rgb(236, 81, 72)",edgeHoverHighlightNodes:"circle",sideMargin:1,edgeHoverColor:"edge",defaultEdgeHoverColor:"#062646",edgeHoverSizeRatio:1,edgeHoverExtremities:!0,scalingMode:"outside"};const lt={name:"sgraph",props:{data:{type:Object,required:!0},pdata:{type:Object,required:!0},styleSize:String},data(){return{Dark:Ze.Z,s:null,state:{searchQuery:""},selectedNodes:[],selectedEdges:[],graph:null,fa2start:null,fa2stop:null,fa2run:null}},methods:{sendMessage(e,t){_([this.pdata["name"],this.data["name"],e,t])},refresh(){let e=this.graph();const t=et().inferSettings(e);let a=new(Je())(e,{settings:t});m&&console.log("refresh graph",this.data.name,this.pdata.name),a.isRunning()||(a.start(),setTimeout((function(){a.stop()}),1e3))},setSelectedEdges(e){this.s.selectEdges(e)},setSearchQuery(e){if(e){const t=e.toLowerCase(),a=this.graph().nodes().map((e=>({id:e,label:graph.getNodeAttribute(e,"label")}))).filter((({label:e})=>e.toLowerCase().includes(t)));if(1===a.length&&a[0].label===e){this.state.selectedNode=a[0].id,this.state.suggestions=void 0;const e=this.s.getNodeDisplayData(this.state.selectedNode);this.s.getCamera().animate(e,{duration:500})}else this.state.selectedNode=void 0,this.state.suggestions=new Set(a.map((({id:e})=>e)))}else this.state.selectedNode=void 0,this.state.suggestions=void 0;this.s.refresh()},load(e){let t=e.value;this.selectedNodes=t.nodes?t.nodes.map((e=>String(e))):[],this.selectedEdges=t.edges?t.edges.map((e=>String(e))):[];let a=e.sizing,l=e.nodes,s=this.graph(),i=[],o=[],n=new Map;for(let h=0;h<l.length;h++){if(!l[h])continue;let e=Object.assign({},l[h]);void 0==e.id&&(e.id=h),void 0!=e.name&&(e.label=e.name);let t={key:String(e.id),attributes:e};e.size=e.size?e.size:10,i.push(t),n.set(e.id,h);let a=s._nodes.get(t.key);a?(e.x=a.attributes.x,e.y=a.attributes.y):(e.x=Math.random(),e.y=Math.random()),this.selectedNodes.includes(t.key)&&(e.highlighted=!0)}let d=[],r=new Map,c=Array(i.length).fill(0);for(let h=0;h<e.edges.length;h++){let t=Object.assign({},e.edges[h]),l=n.get(t.source),s=n.get(t.target);if(void 0==l||void 0==s)continue;if(void 0==t.id&&(t.id=h),t.name&&(t.label=t.name),t.key=String(t.id),o.push(t),a){"in"!=a&&(s=n.get(t.source),l=n.get(t.target)),c[s]++,r.has(s)?r.get(s).push(l):r.set(s,[l]);let e=d.indexOf(l),i=d.indexOf(s);if(-1==e&&(e=d.length,d.push(l)),-1==i&&(i=d.length,d.push(s)),i<e){let t=d[e];d[e]=d[i],d[i]=t}}let i=t.attributes;i||(i={},t.attributes=i),i.id=t.id,i.size=t.size?t.size:5,this.selectedEdges.includes(t.key)?(i.ocolor=i.color?i.color:at.defaultEdgeColor,i.color=tt):t.color&&(i.color=t.color),t.label&&(i.label=t.label)}if(a)for(let h=0;h<d.length;h++){let e=d[h];if(r.has(e))for(let t of r.get(e))c[e]+=c[t];i[e].attributes.size=10+c[e]}s.clear(),s.import({nodes:i,edges:o}),this.refresh()}},computed:{value(){let e=this.graph(),t=this.selectedNodes.map((t=>e._nodes.get(t).attributes.id)),a=this.selectedEdges.map((t=>e._edges.get(t).attributes.id));return{nodes:t,edges:a}}},watch:{data:{handler(e,t){m&&console.log("data update",this.data.name,this.pdata.name),this.load(e)},deep:!0},"Dark.isActive":function(e){this.s.settings.labelColor.color=e?"#00838F":"#000",this.s.refresh()}},updated(){this.s.refresh(),m&&console.log("updated",this.data.name,this.pdata.name)},mounted(){let e=new Ye.MultiDirectedGraph;this.graph=()=>e;let t=this.$refs.graph;this.s=new(Ie())(e,t,at);let a=this.s;var l=this;function s(t){t?l.state.hoveredNeighbors=new Set(e.neighbors(t)):(l.state.hoveredNode=void 0,l.state.hoveredNeighbors=void 0),a.refresh()}function i(t,a=tt){let l=e.getEdgeAttributes(t);l.color!=a&&(l.ocolor||(l.ocolor=l.color?l.color:at.defaultEdgeColor),e.setEdgeAttribute(t,"color",a))}function o(t,a=tt){let l=e.getEdgeAttributes(t);if(l.color==a){let a=e.getEdgeAttribute(t,"ocolor");e.setEdgeAttribute(t,"color",a)}}this.s.settings.labelColor.color=Ze.Z.isActive?"#00838F":"#000",a.on("clickNode",(function(t){let s=t.node;if(!h.shiftKey){for(let e of l.selectedEdges)o(e);l.selectedEdges=[]}if(l.selectedNodes.includes(s))if(e.setNodeAttribute(s,"highlighted",!1),h.shiftKey){let e=l.selectedNodes.indexOf(s);-1!=e&&l.selectedNodes.array.splice(e,1)}else l.selectedNodes=[];else{if(!h.shiftKey&&l.selectedNodes.length>0){for(let t of l.selectedNodes)e.setNodeAttribute(t,"highlighted",!1);l.selectedNodes=[]}e.setNodeAttribute(s,"highlighted",!0),l.selectedNodes.push(s)}a.refresh(),l.sendMessage("changed",l.value)})),a.on("clickEdge",(function({edge:t}){if(!h.shiftKey){for(let t of l.selectedNodes)e.setNodeAttribute(t,"highlighted",!1);l.selectedNodes=[]}if(l.selectedEdges.includes(t))if(o(t),h.shiftKey){let e=l.selectedEdges.indexOf(t);-1!=e&&l.selectedEdges.array.splice(e,1)}else l.selectedEdges=[];else{if(!h.shiftKey&&l.selectedEdges.length>0){for(let e of l.selectedEdges)o(e);l.selectedEdges=[]}i(t),l.selectedEdges.push(t)}a.refresh(),l.sendMessage("changed",l.value)})),a.on("enterNode",(function({node:t}){for(let a of e.edgeEntries())a.target==t?i(a.edge,"#808000"):a.source==t&&i(a.edge,"#2F4F4F");s(t)})),a.on("leaveNode",(function({node:t}){for(let a of e.edgeEntries())a.target==t?l.selectedEdges.includes(a.edge)?e.setEdgeAttribute(a.edge,"color",tt):o(a.edge,"#808000"):a.source==t&&(l.selectedEdges.includes(a.edge)?e.setEdgeAttribute(a.edge,"color",tt):o(a.edge,"#2F4F4F"));s(void 0)})),a.on("enterEdge",(function({edge:e}){l.selectedEdges.includes(e)||i(e)})),a.on("leaveEdge",(function({edge:e}){l.selectedEdges.includes(e)||o(e)}));const n=new ResizeObserver((e=>a.refresh()));n.observe(t);let d=null,r=!1;a.on("downNode",(t=>{r=!0,d=t.node,e.setNodeAttribute(d,"highlighted",!0)})),a.getMouseCaptor().on("mousemovebody",(t=>{if(!r||!d)return;const l=a.viewportToGraph(t);e.setNodeAttribute(d,"x",l.x),e.setNodeAttribute(d,"y",l.y),t.preventSigmaDefault(),t.original.preventDefault(),t.original.stopPropagation()})),a.getMouseCaptor().on("mouseup",(()=>{d&&e.removeNodeAttribute(d,"highlighted"),r=!1,d=null})),a.getMouseCaptor().on("mousedown",(()=>{a.getCustomBBox()||a.setCustomBBox(a.getBBox())})),this.load(this.data)}},st=(0,K.Z)(lt,[["render",Le]]),it=st;function ot(e,t,a,i,o,n){const d=(0,l.up)("v-chart");return(0,l.wg)(),(0,l.iD)("div",{style:(0,s.j5)(a.styleSize?a.styleSize:n.currentStyle())},[(0,l.Wm)(d,{ref:"chart","manual-update":!0,onClick:n.clicked,autoresize:!0},null,8,["onClick"])],4)}var nt=a(9642),dt=a(6938),rt=a(1006),ct=a(6080),ht=a(3526),ut=a(763),pt=a(546),gt=a(6902),mt=a(2826),ft=a(5256),yt=a(3825),wt=a(8825);(0,ut.D)([dt.N,rt.N,ht.N,ct.N]),(0,ut.D)([pt.N,gt.N,mt.N,ft.N,yt.N]);let bt=["","#80FFA5","#00DDFF","#37A2FF","#FF0087","#FFBF00","rgba(128, 255, 165)","rgba(77, 119, 255)"];const vt={name:"linechart",components:{VChart:nt.ZP},props:{data:Object,pdata:Object,styleSize:String},data(){const e=(0,wt.Z)();return{$q:e,model:!1,animation:null,markPoint:null,options:{responsive:!0,maintainAspectRatio:!1,legend:{data:[],bottom:10,textStyle:{color:"#4DD0E1"}},tooltip:{trigger:"axis",position:function(e){return[e[0],"10%"]}},title:{left:"center",text:""},toolbox:{feature:{}},xAxis:{type:"category",boundaryGap:!1,data:null},yAxis:{type:"value",boundaryGap:[0,"100%"]},dataZoom:[{type:"inside",start:0,end:10},{start:0,end:10}],series:[]}}},computed:{fullname(){return`${this.data.name}@${this.pdata.name}`}},methods:{setOptions(){this.$refs.chart.setOption(this.options)},currentStyle(){let e=this.data.tablerect,t=e?e.width:300,a=e?e.height:200;return`width: ${t}px; height: ${a}px`},processCoord(e,t,a){let l=null;for(let s of t)if(e[0]==s.coord[0]){l=s;break}a?l?t.splice(t.indexOf(l),1):t.push({coord:e}):(t.splice(0,t.length),l||t.push({coord:e}))},clicked(e){let t=[e.dataIndex,this.options.series[e.seriesIndex].data[e.dataIndex]];this.processCoord(t,this.markPoint.data,h.shiftKey);let a=this.markPoint.data.map((e=>e.coord[0])),l=this.data;if(l.value=Array.isArray(l.value)||a.length>1?a:a.length?a[0]:null,this.animation){let e=this.options.dataZoom;e[0].start=this.animation.start,e[1].start=this.animation.start,e[0].end=this.animation.end,e[1].end=this.animation.end}this.setOptions(),_([this.pdata.name,this.data.name,"changed",this.data.value])},calcSeries(){this.options.toolbox.feature.mySwitcher={show:!0,title:"Switch view to the table",icon:"image:M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm15 2h-4v3h4V4zm0 4h-4v3h4V8zm0 4h-4v3h3a1 1 0 0 0 1-1v-2zm-5 3v-3H6v3h4zm-5 0v-3H1v2a1 1 0 0 0 1 1h3zm-4-4h4V8H1v3zm0-4h4V4H1v3zm5-3v3h4V4H6zm4 4H6v3h4V8z",onclick:()=>{let e=this.data;e.type="table",e.tablerect=this.$refs.chart.$el.getBoundingClientRect(),k[this.fullname].styleSize=this.currentStyle()}};let e=this.data.view,t=this.data.headers;"_"!=this.data.name[0]&&(this.options.title.text=this.data.name);let a=e.split("-"),l=a[1].split(",");l.unshift(a[0]);let s=[];for(let o=0;o<l.length;o++)l[o]="i"==l[o]?-1:parseInt(l[o]),s.push([]),o&&(this.options.series.push({name:t[l[o]],type:"line",symbol:"circle",symbolSize:10,sampling:"lttb",itemStyle:{color:bt[o]},data:s[o]}),this.options.legend.data.push(t[l[o]]));this.options.xAxis.data=s[0];let i=this.data.rows;for(let o=0;o<i.length;o++)for(let e=0;e<l.length;e++)s[e].push(-1==l[e]?o:i[o][l[e]]);if(this.options.series[1]){let e=[],t=this.options.series[1].data,a=Array.isArray(this.data.value)?this.data.value:null===this.data.value?[]:[this.data.value];for(let l=0;l<a.length;l++)this.processCoord([a[l],t[a[l]]],e,!0);this.markPoint={symbol:"rect",symbolSize:10,animationDuration:300,silent:!0,label:{color:"#fff"},itemStyle:{color:"blue"},data:e},this.options.series[1].markPoint=this.markPoint}this.setOptions()}},mounted(){this.calcSeries();let e=this;this.$refs.chart.chart.on("datazoom",(function(t){(t.start||t.end)&&(e.animation=t)}))}},kt=(0,K.Z)(vt,[["render",ot]]),xt=kt;let Ct={right:"4px",borderRadius:"7px",backgroundColor:"#027be3",width:"4px",opacity:.75},_t={right:"2px",borderRadius:"9px",backgroundColor:"#027be3",width:"8px",opacity:.2};function At(e){let t=new FormData;t.append("image",e);let a=new XMLHttpRequest;a.open("POST",b,!0),a.onload=function(){200===this.status?console.log(this.response):console.error(a)},a.send(t)}const St=(0,l.aZ)({name:"element",components:{utable:Re,sgraph:it,linechart:xt},methods:{log(e){console.log(e)},showSelected(){if("tree"==this.type||"list"==this.type){let e=this.value;e&&requestAnimationFrame((()=>{requestAnimationFrame((()=>{let t=this.$refs.tree.$el,a=this.$refs.scroller.$el;for(let l of t.getElementsByTagName("div"))if(l.innerHTML==e){const{bottom:e,height:t,top:s}=l.getBoundingClientRect();if(s){const l=a.getBoundingClientRect();(s<=l.top?l.top-s<=t:e-l.bottom<=t)||this.$refs.scroller.setScrollPosition("vertical",s-l.top);break}}}))}))}},onAdded(e){0!==e.length&&(0!==this.fileArr.length?(this.$refs.uploaderRef.removeFile(this.fileArr[0]),this.fileArr.splice(0,1,e[0])):this.fileArr.push(e[0]))},sendMessage(e,t){_([this.pdata["name"],this.data["name"],e,t])},pressedEnter(){"update"in this.data&&this.sendMessage("update",this.value)},updateDom(e){let t=e.files.length;t&&this.sendMessage("changed",e.xhr.responseText)},sendValue(){this.sendMessage("changed",this.value)},switchValue(){this.value=!this.value},setValue(e){this.value=e},complete(e,t,a){D(this,e,(e=>t((()=>{this.options=e}))))},lens(){h.lens(this.data)},toggleCamera(){this.isCameraOpen?(this.isCameraOpen=!1,this.isPhotoTaken=!1,this.isShotPhoto=!1,this.stopCameraStream()):(this.isCameraOpen=!0,this.createCameraElement())},createCameraElement(){this.isLoading=!0;const e=window.constraints={audio:!1,video:!0};navigator.mediaDevices.getUserMedia(e).then((e=>{this.isLoading=!1,this.$refs.camera.srcObject=e})).catch((e=>{this.isLoading=!1,alert("May the browser didn't support or there are some errors.")}))},stopCameraStream(){let e=this.$refs.camera.srcObject.getTracks();e.forEach((e=>{e.stop()}))},takePhoto(){if(!this.isPhotoTaken){this.isShotPhoto=!0;const e=50;setTimeout((()=>{this.isShotPhoto=!1}),e)}this.isPhotoTaken=!this.isPhotoTaken;const e=this.$refs.canvas.getContext("2d");e.drawImage(this.$refs.camera,0,0,450,337.5)},downloadImage(){document.getElementById("downloadPhoto"),document.getElementById("photoTaken").toBlob(At,"image/jpeg")},rect(){let e="clientHeight"in this.$el?this.$el:this.$el.nextElementSibling;return e.getBoundingClientRect()},geom(){let e=this.type,t=this.$el;t="tree"==e||"list"==e?t.querySelector(".scroll"):"clientHeight"in t?t:t.nextElementSibling,t||(t=this.$el.previousElementSibling,t="clientHeight"in t?t:t.nextElementSibling);const a="text"==e||"graph"==e||"chart"==e?t:t.querySelector("table"==e?".scroll":".q-tree"),l=t.getBoundingClientRect();return{el:t,inner:a,left:l.left,right:l.right,top:l.top,bottom:l.bottom,scrollHeight:a.scrollHeight,scrollWidth:a.scrollWidth}}},updated(){k[this.fullname]=this,this.showSelected(),m&&console.log("updated",this.fullname)},mounted(){k[this.fullname]=this,this.data.focus&&this.$refs.inputRef.$el.focus(),this.showSelected(),m&&console.log("mounted",this.fullname)},data(){return{Dark:Ze.Z,value:this.data.value,styleSize:A?q(this):null,has_recalc:!0,host_path:b,options:[],expandedKeys:[],thumbStyle:Ct,barStyle:_t,updated:"#027be3sds",isCameraOpen:!1,isPhotoTaken:!1,isShotPhoto:!1,isLoading:!1,link:"#",fileArr:[]}},computed:{elemSize(){let e="";return this.data.width&&(e=`width:${this.data.width}px`),this.data.height&&(""!=e&&(e+="; "),e+=`height:${this.data.height}px`),""==e?this.styleSize:e},parent_name(){return this.pdata?this.pdata.name:null},name(){return this.data.name},fullname(){return`${this.data.name}@${this.pdata.name}`},showname(){let e=this.data.name;return e&&"_"!=e[0]},name2show(){let e=this.data.name;return e&&"_"!=e[0]?e:""},nameLabel(){return this.data.label?this.data.label:"_"!=this.data.name[0]?this.data.name:""},text(){return this.data.text},expanding(){return y.includes(this.type)},expanding_width(){return!this.data.width&&this.expanding},expanding_height(){return!this.data.height&&this.expanding},selection(){return this.data.selection},icon(){return this.data.icon},type(){return this.data.type},treeNodes(){var e=[];if("list"==this.type)return this.data.options.map((e=>({label:e,children:[]})));var t={};for(const[s,i]of Object.entries(this.data.options)){var a=t[s];if(a||(a={label:s,children:[]},t[s]=a),i){var l=t[i];l||(l={label:i,children:[]},t[i]=l),l.children.push(a)}else e.push(a)}return e}},props:{data:{type:Object,required:!0},pdata:{type:Object,required:!0}},watch:{value(e,t){"tree"!=this.type&&"list"!=this.type||(this.data.options[e]==t&&this.expandedKeys.indexOf(t)<0&&this.expandedKeys.push(t),this.showSelected()),e!==this.updated&&(m&&console.log("value changed",e,t),this.sendValue(),this.updated=e)},selection(e){m&&console.log("selection changed",e,this.$refs.inputRef),Array.isArray(e)||(e=[0,0]);let t=this.$refs.inputRef.$el;t.focus();let a=t.getElementsByTagName("textarea");0==a.length&&(a=t.getElementsByTagName("input")),a[0].setSelectionRange(e[0],e[1])},data(e,t){m&&console.log("data update",this.fullname,t.name),this.styleSize||(this.styleSize=null),h.screen.reload&&"tree"==this.type&&this.$refs.tree&&this.$refs.tree.expandAll(),this.value=this.data.value,this.updated=this.value,k[this.fullname]=this}}});var qt=a(4027),Dt=a(8886),zt=a(9721),jt=a(2064),Et=a(8761),$t=a(7704),Zt=a(5551),Mt=a(5869),Ot=a(1745),Wt=a(8506);const Nt=(0,K.Z)(St,[["render",qe],["__scopeId","data-v-f48596a0"]]),Vt=Nt;R()(St,"components",{QImg:qt.Z,QIcon:F.Z,QSelect:Te.Z,QCheckbox:Fe.Z,QToggle:Dt.Z,QBadge:zt.Z,QSlider:jt.Z,QBtn:He.Z,QBtnToggle:Et.Z,QInput:Ne.Z,QScrollArea:$t.Z,QTree:Zt.Z,QSeparator:Mt.Z,QUploader:Ot.Z,QTooltip:Ve.Z,QSpinnerIos:Wt.Z});const Ht=(0,l.aZ)({name:"block",components:{element:Vt},data(){return{Dark:Ze.Z,styleSize:null,thumbStyle:{right:"4px",borderRadius:"7px",backgroundColor:"#027be3",width:"4px",opacity:.75},barStyle:{right:"2px",borderRadius:"9px",backgroundColor:"#027be3",width:"8px",opacity:.2}}},methods:{log(){console.log(Object.keys(v).length,this.name,this.$el.getBoundingClientRect())},geom(){let e="clientHeight"in this.$el?this.$el:this.$el.nextElementSibling,t=e.querySelector(".q-scrollarea");t||(t=e);const a=t.getBoundingClientRect();return{el:e,inner:t,left:a.left,right:a.right,top:a.top,bottom:a.bottom,scrollHeight:window.innerHeight,scrollWidth:window.innerWidth}},free_right_delta4(e,t){for(let a of this.data.value)if(Array.isArray(a)){for(let l of a)if(l==e.data){let l=a[a.length-1];return l==e.data?t:f.includes(l.type)?0:k[`${l.name}@${this.name}`].$el.getBoundingClientRect().right}}else if(a===e)return t;return 0}},mounted(){v[this.data.name]=this,(this.expanding||this.data.width)&&(k[this.fullname]=this)},computed:{name(){return this.data.name},fullname(){return`${this.data.scroll?"_scroll":"_space"}@${this.name}`},icon(){return this.data.icon},type(){return this.data.type},expanding(){return this.data.scroll},expanding_width(){return this.expanding},name_elements(){if(this.expanding)return[this.fullname];let e=[];for(let t of this.data.value)if(Array.isArray(t))for(let a of t)e.push(`${a.name}@${this.name}`);else e.push(`${t.name}@${this.name}`);return e},hlevelements(){if(this.expanding)return[[k[this.fullname]]];let e=[];for(let t of this.data.value)if(Array.isArray(t)){let a=t.map((e=>k[`${e.name}@${this.name}`])).filter((e=>e.expanding));a.length&&e.push(a)}else{let a=k[`${t.name}@${this.name}`];a.expanding&&e.push([a])}return e},only_fixed_elems(){if(this.data.scroll)return!1;for(let e of this.data.value)if(Array.isArray(e)){for(let t of e)if(y.includes(t.type))return!1}else if(y.includes(e.type))return!1;return!0},expanding_height(){return!this.data.height&&(this.expanding||this.only_fixed_elems)},tops(){let e=this.data.value;return e.length?Array.isArray(e[0])?e[0]:[e[0]]:[]}},props:{data:{type:Object,required:!0}},watch:{data(e){m&&console.log("data update",this.name),v[this.name]=this,this.expanding&&(k[this.fullname]=this)}}});var Kt=a(151);const Qt=(0,K.Z)(Ht,[["render",se]]),Ut=Qt;function Ft(){let e=A&&k.size==x.size;if(e)for(let[t,a]of Object.entries(k))if(!x[t]){e=!1;break}e||(W(document.documentElement.scrollWidth>window.innerWidth),(0,l.Y3)((()=>{requestAnimationFrame((()=>{requestAnimationFrame((()=>{h.visible(!0)}))}))})))}R()(Ht,"components",{QCard:Kt.Z,QIcon:F.Z,QScrollArea:$t.Z});const Tt=(0,l.aZ)({name:"zone",components:{block:Ut},props:{data:Object},updated(e){(0,l.Y3)((()=>{requestAnimationFrame((()=>{requestAnimationFrame(Ft)}))}))}}),Pt=(0,K.Z)(Tt,[["render",J]]),Rt=Pt,Lt={class:"row q-gutter-sm row-md"};function Bt(e,t,a,i,o,n){const d=(0,l.up)("block"),r=(0,l.up)("q-item-label"),c=(0,l.up)("q-space"),h=(0,l.up)("q-btn"),u=(0,l.up)("q-card"),p=(0,l.up)("q-dialog");return(0,l.wg)(),(0,l.j4)(p,{ref:"dialog",onHide:n.onDialogHide,onKeyup:(0,ie.D2)(n.pressedEnter,["enter"])},{default:(0,l.w5)((()=>[(0,l.Wm)(u,{class:"q-dialog-plugin q-pa-md items-start q-gutter-md",bordered:"",style:(0,s.j5)(a.data.internal?"width: 800px; max-width: 80vw;":"")},{default:(0,l.w5)((()=>[a.data?((0,l.wg)(),(0,l.j4)(d,{key:0,data:a.data},null,8,["data"])):(0,l.kq)("",!0),(0,l.Wm)(r,{class:"text-h6"},{default:(0,l.w5)((()=>[(0,l.Uk)((0,s.zw)(a.data.text?a.data.text:""),1)])),_:1}),(0,l._)("div",Lt,[(0,l.Wm)(c),((0,l.wg)(!0),(0,l.iD)(l.HY,null,(0,l.Ko)(a.commands,(e=>((0,l.wg)(),(0,l.j4)(h,{class:"col-md-3",label:e,"no-caps":"",color:a.commands[0]==e?"primary":"secondary",onClick:t=>n.sendMessage(e)},null,8,["label","color","onClick"])))),256))])])),_:1},8,["style"])])),_:1},8,["onHide","onKeyup"])}const It={props:{data:Object,commands:Array},components:{block:Ut},emits:["ok","hide"],data(){return{closed:!1}},methods:{show(){this.$refs.dialog.show(),h.dialog=this},message4(e){return[this.data["name"],null,"changed",e]},sendMessage(e){this.data.internal||_(this.message4(e)),this.closed=!0,this.hide()},hide(){this.$refs.dialog.hide(),h.dialog=null},onDialogHide(){this.$emit("hide"),this.closed||this.data.internal||_(this.message4(null))},pressedEnter(){this.sendMessage(this.commands[0])},onOKClick(){this.$emit("ok"),this.hide()},onCancelClick(){this.hide()}}};var Yt=a(5926),Gt=a(2025);const Jt=(0,K.Z)(It,[["render",Bt]]),Xt=Jt;R()(It,"components",{QDialog:Yt.Z,QCard:Kt.Z,QItemLabel:T.Z,QSpace:Gt.Z,QBtn:He.Z});var ea=a(589);let ta="theme";try{Ze.Z.set(ea.Z.getItem(ta))}catch(pa){}let aa=null;const la=(0,l.aZ)({name:"MainLayout",data(){return{leftDrawerOpen:!1,Dark:Ze.Z,menu:[],tab:"",tooldata:{name:"toolbar"},localServer:!0,statusConnect:!1,screen:{blocks:[],toolbar:[]},visibility:!0,designCycle:0,shiftKey:!1}},components:{menubar:B,zone:Rt,element:Vt},created(){C(this)},unmounted(){window.removeEventListener("resize",this.onResize)},computed:{left_toolbar(){return this.screen.toolbar.filter((e=>!e.right))},right_toolbar(){return this.screen.toolbar.filter((e=>e.right))}},methods:{switchTheme(){Ze.Z.set(!Ze.Z.isActive),ea.Z.set(ta,Ze.Z.isActive)},toggleLeftDrawer(){this.leftDrawerOpen=!this.leftDrawerOpen},tabclick(e){_(["root",null,"changed",e])},visible(e){this.visibility!=e&&(this.$refs.page.$el.style.visibility=e?"":"hidden",this.visibility=e)},handleKeyDown(e){"Shift"==e.key&&(this.shiftKey=!0)},handleKeyUp(e){"Shift"==e.key&&(this.shiftKey=!1)},onResize(e){m&&console.log(`window has been resized w = ${window.innerWidth}, h=${window.innerHeight}`),this.designCycle=0,O()},lens(e){let t={title:"Photo lens",message:e.text,cancel:!0,persistent:!0,component:Xt},{height:a,...l}=e;l.width=750;let s={name:`Picture lens of ${e.name}`,value:[[],l],internal:!0};t.componentProps={data:s,commands:["Close"]},this.$q.dialog(t)},notify(e,t){let a=t,l={message:e,type:t,position:"top",icon:a};"progress"==t?null==aa?(l={group:!1,timeout:0,spinner:!0,type:"info",message:e||"Progress..",position:"top",color:"secondary"},aa=this.$q.notify(l)):null==e?(aa(),aa=null):(l={caption:e},aa(l)):("error"==t&&l.type,this.$q.notify(l))},error(e){this.notify(e,"error")},info(e){this.notify(e,"info")},processMessage(e){if("screen"==e.type)z(),this.screen.name!=e.name?(S(!1),m||this.visible(!1)):e.reload&&S(!1),this.screen=e,this.menu=e.menu.map((e=>({name:e[0],icon:e[1],order:e[2]}))),this.tab=this.screen.name;else if("dialog"==e.type){let t={title:e.name,message:e.text,cancel:!0,persistent:!0};t.component=Xt,t.componentProps={data:e,commands:e.commands},this.$q.dialog(t)}else if("complete"==e.type||"append"==e.type)$(e);else if("action"==e.type&&"close"==e.value)this.dialog&&(this.dialog.data.internal=!0),this.dialog.hide();else{let t=e.updates&&e.updates.length;t&&E(e.updates);let a=!1;["error","progress","warning","info"].includes(e.type)&&(this.notify(e.value,e.type),a=!0),a||t||(this.error("Invalid data came from the server! Look the console."),console.log(`Invalid data came from the server! ${e}`))}this.closeProgress(e)},closeProgress(e){!aa||e&&"progress"==e.type||this.notify(null,"progress")}},mounted(){window.addEventListener("resize",this.onResize);const e=new ResizeObserver((e=>{let t=document.documentElement.scrollWidth>window.innerWidth||document.documentElement.scrollHeight>window.innerHeight;t&&M(!1)}));let t=this.$refs.page.$el;e.observe(t),window.addEventListener("keydown",this.handleKeyDown),window.addEventListener("keyup",this.handleKeyUp)},beforeUnmount(){window.removeEventListener("keydown",this.handleKeyDown),window.removeEventListener("keyup",this.handleKeyUp)}});var sa=a(9214),ia=a(3812),oa=a(9570),na=a(7547),da=a(3269),ra=a(2652),ca=a(4379);const ha=(0,K.Z)(la,[["render",n]]),ua=ha;R()(la,"components",{QLayout:sa.Z,QHeader:ia.Z,QToolbar:oa.Z,QBtn:He.Z,QItemLabel:T.Z,QTabs:na.Z,QTab:da.Z,QSpace:Gt.Z,QTooltip:Ve.Z,QPageContainer:ra.Z,QPage:ca.Z})}}]);
@@ -1 +1 @@
1
- (()=>{"use strict";var e={653:(e,t,r)=>{r(5363),r(71);var o=r(8880),n=r(9592),a=r(3673);const i={id:"q-app"};function l(e,t,r,o,n,l){const s=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",i,[(0,a.Wm)(s)])}const s=(0,a.aZ)({name:"App"});var u=r(4260);const c=(0,u.Z)(s,[["render",l]]),d=c;var p=r(3340),f=r(8339);const h=[{path:"/",component:()=>Promise.all([r.e(736),r.e(353)]).then(r.bind(r,4353)),children:[{path:"",component:()=>Promise.all([r.e(736),r.e(430)]).then(r.bind(r,6430))}]},{path:"/:catchAll(.*)*",component:()=>Promise.all([r.e(736),r.e(193)]).then(r.bind(r,2193))}],v=h,m=(0,p.BC)((function(){const e=f.r5,t=(0,f.p7)({scrollBehavior:()=>({left:0,top:0}),routes:v,history:e("")});return t}));async function g(e,t){const r="function"===typeof m?await m({}):m,o=e(d);return o.use(n.Z,t),{app:o,router:r}}var b=r(6417),y=r(5597),w=r(589),O=r(7153);const k={config:{notify:{}},plugins:{Notify:b.Z,Dialog:y.Z,LocalStorage:w.Z,SessionStorage:O.Z}},C="";async function P({app:e,router:t},r){let o=!1;const n=e=>{try{return t.resolve(e).href}catch(r){}return Object(e)===e?null:e},a=e=>{if(o=!0,"string"===typeof e&&/^https?:\/\//.test(e))return void(window.location.href=e);const t=n(e);null!==t&&(window.location.href=t,window.location.reload())},i=window.location.href.replace(window.location.origin,"");for(let s=0;!1===o&&s<r.length;s++)try{await r[s]({app:e,router:t,ssrContext:null,redirect:a,urlPath:i,publicPath:C})}catch(l){return l&&l.url?void a(l.url):void console.error("[Quasar] boot error:",l)}!0!==o&&(e.use(t),e.mount("#q-app"))}g(o.ri,k).then((e=>Promise.all([Promise.resolve().then(r.bind(r,2390))]).then((t=>{const r=t.map((e=>e.default)).filter((e=>"function"===typeof e));P(e,r)}))))},2390:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n});var o=r(3340);const n=(0,o.xr)((async({app:e})=>{}))}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={id:o,loaded:!1,exports:{}};return e[o].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=e,(()=>{var e=[];r.O=(t,o,n,a)=>{if(!o){var i=1/0;for(c=0;c<e.length;c++){for(var[o,n,a]=e[c],l=!0,s=0;s<o.length;s++)(!1&a||i>=a)&&Object.keys(r.O).every((e=>r.O[e](o[s])))?o.splice(s--,1):(l=!1,a<i&&(i=a));if(l){e.splice(c--,1);var u=n();void 0!==u&&(t=u)}}return t}a=a||0;for(var c=e.length;c>0&&e[c-1][2]>a;c--)e[c]=e[c-1];e[c]=[o,n,a]}})(),(()=>{r.n=e=>{var t=e&&e.__esModule?()=>e["default"]:()=>e;return r.d(t,{a:t}),t}})(),(()=>{r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})}})(),(()=>{r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((t,o)=>(r.f[o](e,t),t)),[]))})(),(()=>{r.u=e=>"js/"+e+"."+{193:"283445be",353:"ddd028b2",430:"591e9a73"}[e]+".js"})(),(()=>{r.miniCssF=e=>"css/"+({143:"app",736:"vendor"}[e]||e)+"."+{143:"31d6cfe0",353:"64dbc68c",736:"9ed7638d"}[e]+".css"})(),(()=>{r.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()})(),(()=>{r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})(),(()=>{var e={},t="uniqua:";r.l=(o,n,a,i)=>{if(e[o])e[o].push(n);else{var l,s;if(void 0!==a)for(var u=document.getElementsByTagName("script"),c=0;c<u.length;c++){var d=u[c];if(d.getAttribute("src")==o||d.getAttribute("data-webpack")==t+a){l=d;break}}l||(s=!0,l=document.createElement("script"),l.charset="utf-8",l.timeout=120,r.nc&&l.setAttribute("nonce",r.nc),l.setAttribute("data-webpack",t+a),l.src=o),e[o]=[n];var p=(t,r)=>{l.onerror=l.onload=null,clearTimeout(f);var n=e[o];if(delete e[o],l.parentNode&&l.parentNode.removeChild(l),n&&n.forEach((e=>e(r))),t)return t(r)},f=setTimeout(p.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=p.bind(null,l.onerror),l.onload=p.bind(null,l.onload),s&&document.head.appendChild(l)}}})(),(()=>{r.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}})(),(()=>{r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e)})(),(()=>{r.p=""})(),(()=>{var e=(e,t,r,o)=>{var n=document.createElement("link");n.rel="stylesheet",n.type="text/css";var a=a=>{if(n.onerror=n.onload=null,"load"===a.type)r();else{var i=a&&("load"===a.type?"missing":a.type),l=a&&a.target&&a.target.href||t,s=new Error("Loading CSS chunk "+e+" failed.\n("+l+")");s.code="CSS_CHUNK_LOAD_FAILED",s.type=i,s.request=l,n.parentNode.removeChild(n),o(s)}};return n.onerror=n.onload=a,n.href=t,document.head.appendChild(n),n},t=(e,t)=>{for(var r=document.getElementsByTagName("link"),o=0;o<r.length;o++){var n=r[o],a=n.getAttribute("data-href")||n.getAttribute("href");if("stylesheet"===n.rel&&(a===e||a===t))return n}var i=document.getElementsByTagName("style");for(o=0;o<i.length;o++){n=i[o],a=n.getAttribute("data-href");if(a===e||a===t)return n}},o=o=>new Promise(((n,a)=>{var i=r.miniCssF(o),l=r.p+i;if(t(i,l))return n();e(o,l,n,a)})),n={143:0};r.f.miniCss=(e,t)=>{var r={353:1};n[e]?t.push(n[e]):0!==n[e]&&r[e]&&t.push(n[e]=o(e).then((()=>{n[e]=0}),(t=>{throw delete n[e],t})))}})(),(()=>{var e={143:0};r.f.j=(t,o)=>{var n=r.o(e,t)?e[t]:void 0;if(0!==n)if(n)o.push(n[2]);else{var a=new Promise(((r,o)=>n=e[t]=[r,o]));o.push(n[2]=a);var i=r.p+r.u(t),l=new Error,s=o=>{if(r.o(e,t)&&(n=e[t],0!==n&&(e[t]=void 0),n)){var a=o&&("load"===o.type?"missing":o.type),i=o&&o.target&&o.target.src;l.message="Loading chunk "+t+" failed.\n("+a+": "+i+")",l.name="ChunkLoadError",l.type=a,l.request=i,n[1](l)}};r.l(i,s,"chunk-"+t,t)}},r.O.j=t=>0===e[t];var t=(t,o)=>{var n,a,[i,l,s]=o,u=0;if(i.some((t=>0!==e[t]))){for(n in l)r.o(l,n)&&(r.m[n]=l[n]);if(s)var c=s(r)}for(t&&t(o);u<i.length;u++)a=i[u],r.o(e,a)&&e[a]&&e[a][0](),e[i[u]]=0;return r.O(c)},o=globalThis["webpackChunkuniqua"]=globalThis["webpackChunkuniqua"]||[];o.forEach(t.bind(null,0)),o.push=t.bind(null,o.push.bind(o))})();var o=r.O(void 0,[736],(()=>r(653)));o=r.O(o)})();
1
+ (()=>{"use strict";var e={653:(e,t,r)=>{r(5363),r(71);var o=r(8880),n=r(9592),a=r(3673);const i={id:"q-app"};function l(e,t,r,o,n,l){const s=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",i,[(0,a.Wm)(s)])}const s=(0,a.aZ)({name:"App"});var u=r(4260);const c=(0,u.Z)(s,[["render",l]]),d=c;var p=r(3340),f=r(8339);const h=[{path:"/",component:()=>Promise.all([r.e(736),r.e(662)]).then(r.bind(r,2662)),children:[{path:"",component:()=>Promise.all([r.e(736),r.e(430)]).then(r.bind(r,6430))}]},{path:"/:catchAll(.*)*",component:()=>Promise.all([r.e(736),r.e(193)]).then(r.bind(r,2193))}],v=h,m=(0,p.BC)((function(){const e=f.r5,t=(0,f.p7)({scrollBehavior:()=>({left:0,top:0}),routes:v,history:e("")});return t}));async function g(e,t){const r="function"===typeof m?await m({}):m,o=e(d);return o.use(n.Z,t),{app:o,router:r}}var b=r(6417),y=r(5597),w=r(589),O=r(7153);const k={config:{notify:{}},plugins:{Notify:b.Z,Dialog:y.Z,LocalStorage:w.Z,SessionStorage:O.Z}},C="";async function P({app:e,router:t},r){let o=!1;const n=e=>{try{return t.resolve(e).href}catch(r){}return Object(e)===e?null:e},a=e=>{if(o=!0,"string"===typeof e&&/^https?:\/\//.test(e))return void(window.location.href=e);const t=n(e);null!==t&&(window.location.href=t,window.location.reload())},i=window.location.href.replace(window.location.origin,"");for(let s=0;!1===o&&s<r.length;s++)try{await r[s]({app:e,router:t,ssrContext:null,redirect:a,urlPath:i,publicPath:C})}catch(l){return l&&l.url?void a(l.url):void console.error("[Quasar] boot error:",l)}!0!==o&&(e.use(t),e.mount("#q-app"))}g(o.ri,k).then((e=>Promise.all([Promise.resolve().then(r.bind(r,2390))]).then((t=>{const r=t.map((e=>e.default)).filter((e=>"function"===typeof e));P(e,r)}))))},2390:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n});var o=r(3340);const n=(0,o.xr)((async({app:e})=>{}))}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={id:o,loaded:!1,exports:{}};return e[o].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=e,(()=>{var e=[];r.O=(t,o,n,a)=>{if(!o){var i=1/0;for(c=0;c<e.length;c++){for(var[o,n,a]=e[c],l=!0,s=0;s<o.length;s++)(!1&a||i>=a)&&Object.keys(r.O).every((e=>r.O[e](o[s])))?o.splice(s--,1):(l=!1,a<i&&(i=a));if(l){e.splice(c--,1);var u=n();void 0!==u&&(t=u)}}return t}a=a||0;for(var c=e.length;c>0&&e[c-1][2]>a;c--)e[c]=e[c-1];e[c]=[o,n,a]}})(),(()=>{r.n=e=>{var t=e&&e.__esModule?()=>e["default"]:()=>e;return r.d(t,{a:t}),t}})(),(()=>{r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})}})(),(()=>{r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((t,o)=>(r.f[o](e,t),t)),[]))})(),(()=>{r.u=e=>"js/"+e+"."+{193:"283445be",430:"591e9a73",662:"5957b792"}[e]+".js"})(),(()=>{r.miniCssF=e=>"css/"+({143:"app",736:"vendor"}[e]||e)+"."+{143:"31d6cfe0",662:"64dbc68c",736:"9ed7638d"}[e]+".css"})(),(()=>{r.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()})(),(()=>{r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})(),(()=>{var e={},t="uniqua:";r.l=(o,n,a,i)=>{if(e[o])e[o].push(n);else{var l,s;if(void 0!==a)for(var u=document.getElementsByTagName("script"),c=0;c<u.length;c++){var d=u[c];if(d.getAttribute("src")==o||d.getAttribute("data-webpack")==t+a){l=d;break}}l||(s=!0,l=document.createElement("script"),l.charset="utf-8",l.timeout=120,r.nc&&l.setAttribute("nonce",r.nc),l.setAttribute("data-webpack",t+a),l.src=o),e[o]=[n];var p=(t,r)=>{l.onerror=l.onload=null,clearTimeout(f);var n=e[o];if(delete e[o],l.parentNode&&l.parentNode.removeChild(l),n&&n.forEach((e=>e(r))),t)return t(r)},f=setTimeout(p.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=p.bind(null,l.onerror),l.onload=p.bind(null,l.onload),s&&document.head.appendChild(l)}}})(),(()=>{r.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}})(),(()=>{r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e)})(),(()=>{r.p=""})(),(()=>{var e=(e,t,r,o)=>{var n=document.createElement("link");n.rel="stylesheet",n.type="text/css";var a=a=>{if(n.onerror=n.onload=null,"load"===a.type)r();else{var i=a&&("load"===a.type?"missing":a.type),l=a&&a.target&&a.target.href||t,s=new Error("Loading CSS chunk "+e+" failed.\n("+l+")");s.code="CSS_CHUNK_LOAD_FAILED",s.type=i,s.request=l,n.parentNode.removeChild(n),o(s)}};return n.onerror=n.onload=a,n.href=t,document.head.appendChild(n),n},t=(e,t)=>{for(var r=document.getElementsByTagName("link"),o=0;o<r.length;o++){var n=r[o],a=n.getAttribute("data-href")||n.getAttribute("href");if("stylesheet"===n.rel&&(a===e||a===t))return n}var i=document.getElementsByTagName("style");for(o=0;o<i.length;o++){n=i[o],a=n.getAttribute("data-href");if(a===e||a===t)return n}},o=o=>new Promise(((n,a)=>{var i=r.miniCssF(o),l=r.p+i;if(t(i,l))return n();e(o,l,n,a)})),n={143:0};r.f.miniCss=(e,t)=>{var r={662:1};n[e]?t.push(n[e]):0!==n[e]&&r[e]&&t.push(n[e]=o(e).then((()=>{n[e]=0}),(t=>{throw delete n[e],t})))}})(),(()=>{var e={143:0};r.f.j=(t,o)=>{var n=r.o(e,t)?e[t]:void 0;if(0!==n)if(n)o.push(n[2]);else{var a=new Promise(((r,o)=>n=e[t]=[r,o]));o.push(n[2]=a);var i=r.p+r.u(t),l=new Error,s=o=>{if(r.o(e,t)&&(n=e[t],0!==n&&(e[t]=void 0),n)){var a=o&&("load"===o.type?"missing":o.type),i=o&&o.target&&o.target.src;l.message="Loading chunk "+t+" failed.\n("+a+": "+i+")",l.name="ChunkLoadError",l.type=a,l.request=i,n[1](l)}};r.l(i,s,"chunk-"+t,t)}},r.O.j=t=>0===e[t];var t=(t,o)=>{var n,a,[i,l,s]=o,u=0;if(i.some((t=>0!==e[t]))){for(n in l)r.o(l,n)&&(r.m[n]=l[n]);if(s)var c=s(r)}for(t&&t(o);u<i.length;u++)a=i[u],r.o(e,a)&&e[a]&&e[a][0](),e[i[u]]=0;return r.O(c)},o=globalThis["webpackChunkuniqua"]=globalThis["webpackChunkuniqua"]||[];o.forEach(t.bind(null,0)),o.push=t.bind(null,o.push.bind(o))})();var o=r.O(void 0,[736],(()=>r(653)));o=r.O(o)})();
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unisi
3
- Version: 0.1.9
3
+ Version: 0.1.11
4
4
  Summary: Unified System Interface, GUI and Remote API
5
5
  Author-Email: UNISI Tech <g.dernovoy@gmail.com>
6
6
  License: Apache-2.0
@@ -84,7 +84,10 @@ unisi.start('Test app')
84
84
  Unisi builds the interactive app for the code above.
85
85
  Connect a browser to localhast:8000 which are by default and will see:
86
86
 
87
- ![image](https://github.com/unisi-tech/unisi/assets/1247062/dafebd1f-ae48-4790-9282-dea83d986749)
87
+ ![image](https://github.com/unisi-tech/unisi/assets/1247062/dafebd1f-ae48-4790-9282-dea83d986749)
88
+
89
+ ### 'The fastest way to create Web applications in Python.' is a free crash course video how to use UNISI ###
90
+ https://www.unisi.tech/learn
88
91
 
89
92
  ### Handling events ###
90
93
  All handlers are functions which have a signature
@@ -110,25 +113,37 @@ clean_button = Button('Clean the table’, clean_table)
110
113
  | Gui object array or tuple | Objects to update |
111
114
  | None | Nothing to update, Ok |
112
115
  | Error(...), Warning(...), Info(...) | Show to user info about a state. |
113
- | UpdateScreen, True | Redraw whole screen |
116
+ | True | Redraw whole screen |
117
+
114
118
  | Dialog(..) | Open a dialog with parameters |
115
119
  | user.set_screen(screen_name) | switch to another screen |
116
120
 
117
-
118
- Unisi synchronizes GUI state on frontend-end automatically after calling a handler.
121
+ Unisi synchronizes GUI state on frontend-end automatically after calling a handler.
119
122
 
120
123
  If a Gui object doesn't have 'changed' handler the object accepts incoming value automatically to the 'value' variable of gui object.
121
124
 
122
125
  If 'value' is not acceptable instead of returning an object possible to return Error or Warning or Info. That functions can update a object list passed after the message argument.
123
126
 
124
127
  ```
125
- def changed_range(guirange, value):
126
- if value < 0.5 and value > 1.0:
127
- return Error(f‘The value of {guirange.name} has to be > 0.5 and < 1.0!', guirange)
128
+ def changed(elem, value):
129
+ if value == 4:
130
+ return Error(f‘The value can not be 4!', elem)
128
131
  #accept value othewise
129
- guirange.value = value
132
+ elem.value = value
130
133
 
131
- edit = Edit('Range of involving', 0.6, changed_range, type = 'number')
134
+ edit = Edit('Involving', 0.6, changed)
135
+ ```
136
+
137
+ #### Events interception of shared blocks ####
138
+ Interception handlers have the same in/out format as usual handlers.
139
+ #### They are called before the inner element handler call. They cancel the call of inner element handler but you can call it as shown below.
140
+ For example above interception of select_mode changed event will be:
141
+ ```
142
+ @handle(select_mode, 'changed')
143
+ def do_not_select_mode_x(selector, value):
144
+ if value == 'Mode X':
145
+ return Error('Do not select Mode X in this context', selector) # send old value for update select_mode to the previous state
146
+ return _.accept(value) #otherwise accept the value
132
147
  ```
133
148
 
134
149
  ### Block details ###
@@ -159,18 +174,6 @@ from blocks.tblock import concept_block
159
174
  blocks = [.., concept_block]
160
175
  ```
161
176
 
162
- #### Events interception of shared elements ####
163
- Interception handlers have the same in/out format as usual handlers.
164
- #### They are called before the inner element handler call. They cancel the call of inner element handler but you can call it as shown below.
165
- For example above interception of select_mode changed event will be:
166
- ```
167
- @handle(select_mode, 'changed')
168
- def do_not_select_mode_x(selector, value):
169
- if value == 'Mode X':
170
- return Error('Do not select Mode X in this context', selector) # send old value for update select_mode to the previous state
171
- return _.accept(value) #otherwise accept the value
172
- ```
173
-
174
177
  #### Layout of blocks. ####
175
178
  If the blocks are simply listed Unisi draws them from left to right or from top to bottom depending on the orientation setting. If a different layout is needed, it can be set according to the following rule: if the vertical area must contain more than one block, then the enumeration in the array will arrange the elements vertically one after another. If such an element enumeration is an array of blocks, then they will be drawn horizontally in the corresponding area.
176
179
 
@@ -180,6 +183,24 @@ blocks = [ [b1,b2], [b3, [b4, b5]]]
180
183
 
181
184
  ![image](https://github.com/unisi-tech/unisi/assets/1247062/aa0c3623-ef57-45ce-a179-7ba53df119c3)
182
185
 
186
+ ### ParamBlock ###
187
+ ParamBlock(name, *gui_elements, row = 3, **parameters)
188
+
189
+ ParamBlock creates blocks with Gui elements formed from parameters. Parameters can be string, bool, number and optional types. Example:
190
+ ```
191
+ block = ParamBlock('Learning parameters', Button('Start learning', learn_nn)
192
+ per_device_eval_batch_size=16, num_train_epochs=10, warmup_ratio=0.1,
193
+ logging_steps=10, device = (‘cpu’,['cpu', 'gpu']),load_best = True)
194
+ ```
195
+
196
+ If a string parameter has several options as a device in the example, its value is expressed as an option list and the first value is the initial value.
197
+ For optional types Select, Tree, Range the value has to contain the current value and its options. In the example
198
+ ```
199
+ device = (‘cpu’,['cpu', 'gpu'])
200
+ ```
201
+ means the current value of 'device' is 'cpu' and options are ['cpu', 'gpu'] .
202
+
203
+
183
204
  ### Basic gui elements ###
184
205
  Normally they have type property which says unisi what data it contains and optionally how to draw the element.
185
206
  #### If the element name starts from _ , unisi will hide its name on the screen. ####
@@ -200,34 +221,34 @@ causes a call changed handler if it defined, otherwise just save value to self.
200
221
  ### Button ###
201
222
  Normal button.
202
223
  ```
203
- Button('Push me', changed = push_callback)
224
+ Button('Push me', changed = push_callback, icon = None)
204
225
  ```
205
226
  Short form
206
227
  ```
207
- Button('Push me', push_callback)
228
+ Button('Push me', push_callback = None, icon = None)
208
229
  ```
209
- Icon button
230
+ Icon button, the name has to be started from _ for hiding
210
231
  ```
211
- Button('_Check', push_callback, icon = 'check')
232
+ Button('_Check', push_callback = None, icon = None)
212
233
  ```
213
234
 
214
235
  ### Load to server Button ###
215
236
  Special button provides file loading from user device or computer to the Unisi server.
216
237
  ```
217
- UploadButton('Load', handler_when_loading_finish, icon='photo_library')
238
+ UploadButton('Load', handler_when_loading_finish, icon = 'photo_library')
218
239
  ```
219
240
  handler_when_loading_finish(button_, the_loaded_file_filename) where the_loaded_file_filename is a file name in upload server folder. This folder name is defined in config.py .
220
241
 
221
242
  ### Edit and Text field. ###
222
243
  ```
223
- Edit('Some field', '') #for string value
224
- Edit('Number field', 0.9, type = 'number') #changed handler will get a number
244
+ Edit(name,value = '', changed_handler = None) #for string value
245
+ Edit(name, value: number, changed_handler = None) #changed handler gets a number in the value parameter
225
246
  ```
226
- If set edit = false it will be readonly field.
247
+ If set edit = false the element will be readonly.
227
248
  ```
228
249
  Edit('Some field', '', edit = false)
229
- #text
230
- Text('Some text')
250
+ #text, it is equal
251
+ Text('Some field')
231
252
  ```
232
253
  complete handler is optional function which accepts the current edit value and returns a string list for autocomplete.
233
254
 
@@ -241,23 +262,30 @@ Edit('Edit me', 'value', complete = get_complete_list) #value has to be string o
241
262
  Optional 'update' handler is called when the user press Enter in the field.
242
263
  It can return None if OK or objects for updating as usual 'changed' handler.
243
264
 
244
- Optional selection property with parameters (start, end) is called when selection is happened.
245
- Optional autogrow property uses for serving multiline fileds.
265
+ ### Range ###
266
+ Number field for limited in range values.
267
+
268
+ Range('Name', value = 0, changed_handler = None, options=[min,max, step])
269
+
270
+ Example:
271
+ ```
272
+ Range('Scale content', 1, options=[0.25, 3, 0.25])
273
+ ```
246
274
 
247
275
 
248
276
  ### Radio button ###
249
277
  ```
250
- Switch(name, value, changed, type = ...)
251
- value is boolean, changed is an optional handler.
278
+ Switch(name, value = False, changed_handler = None, type = 'radio')
279
+ value is boolean, changed_handler is an optional handler.
252
280
  Optional type can be 'check' for a status button or 'switch' for a switcher .
253
281
  ```
254
282
 
255
283
  ### Select group. Contains options field. ###
256
284
  ```
257
- Select('Select something', "choice1", selection_is_changed, options = ["choice1","choice2", "choice3"])
285
+ Select(name, value = None, changed_handler = None, options = ["choice1","choice2", "choice3"])
258
286
  ```
259
- Optional type parameter can be 'toggles','list','dropdown'. Unisi automatically chooses between toogles and dropdown, if type is omitted,
260
- if type = 'list' then Unisi build it as vertical select list.
287
+ Optional type parameter can be 'radio','list','select'. Unisi automatically chooses between 'radio' and 'select', if type is omitted.
288
+ If type = 'list' then Unisi build it as vertical select list.
261
289
 
262
290
 
263
291
  ### Image. ###
@@ -265,28 +293,30 @@ width,changed,height,header are optional, changed is called if the user select o
265
293
  When the user click the image, a check mark is appearing on the image, showning select status of the image.
266
294
  It is usefull for image list, gallery, e.t.c
267
295
  ```
268
- Image(image_name, selecting_changed, header = 'description',url = ..., width = .., height = ..)
296
+ Image(image_path, value = False, changed_handler, header = 'description', url = ..., width = .., height = ..)
269
297
  ```
270
298
 
271
299
  ### Video. ###
272
300
  width and height are optional.
273
301
  ```
274
- Video(video_url, width = .., height = ..)
302
+ Video(video_url, width = None, height = None)
275
303
  ```
276
304
 
277
305
  ### Tree. The element for tree-like data. ###
278
306
  ```
279
- Tree(name, selected_item_name, changed_handler, options = {name1: parent1, name2 : None, .})
307
+ Tree(name, value = None, changed_handler = None, options = {name1: parent1, name2 : None, .})
280
308
  ```
281
309
  options is a tree structure, a dictionary {item_name:parent_name}.
282
310
  parent_name is None for root items. changed_handler gets item key (name) as value.
283
311
 
284
312
  ### Table. ###
285
313
  Tables is common structure for presenting 2D data and charts.
286
- Optional append, delete, update handlers are called for adding, deleting and updating rows.
287
314
 
315
+ Table(name, value = None, changed_handler = None, **options)
316
+
317
+ Optional append, delete, update handlers are called for adding, deleting and updating handlers for a table.
288
318
 
289
- Assigning a handler for such action causes Unii to draw and activate an appropriate action icon button in the table header automatically.
319
+ Auto assigning handlers for such action can be blocked by assigning edit = False to the Table constructor.
290
320
  ```
291
321
  table = Table('Videos', [0], row_changed, headers = ['Video', 'Duration', 'Owner', 'Status'],
292
322
  rows = [
@@ -315,7 +345,6 @@ value = [0] means 0 row is selected in multiselect mode (in array). multimode is
315
345
  ### Table handlers. ###
316
346
  complete, modify and update have the same format as the others handlers, but value is consisted from the cell value and its position in the table.
317
347
 
318
-
319
348
  ```
320
349
  def table_updated(table_, tabval):
321
350
  value, position = tabval
@@ -323,6 +352,7 @@ def table_updated(table_, tabval):
323
352
  ...
324
353
  if error_found:
325
354
  return Error('Can not accept the value!')
355
+ #call a standart handler
326
356
  accept_rowvalue(table_, tabval)
327
357
  ```
328
358
 
@@ -333,45 +363,40 @@ Chart is a table with additional Table constructor parameter 'view' which explai
333
363
  ### Graph ###
334
364
  Graph supports an interactive graph.
335
365
  ```
336
- graph = Graph('X graph', graph_value, graph_selection,
337
- nodes = [
338
- { 'id' : 'node1', 'name': "Node 1" },
339
- { 'id' : 'node2', 'name': "Node 2" },
340
- { 'id' : 'node3', 'name': "Node 3" }
341
- ], edges = [
342
- { 'id' : 'edge1', 'source': "node1", 'target': "node2", 'name' : 'extending' },
343
- { 'id' :'edge2' , 'source': "node2", 'target': "node3" , 'name' : 'extending'}
344
- ])
345
- ```
346
- where graph_value is a dictionary like {'nodes' : ["node1"], 'edges' : ['edge3']}, where enumerations are selected nodes and edges.
366
+ graph = Graph('X graph', value = None, changed_handler = None,
367
+ nodes = [ Node("Node 1"),Node("Node 2", size = 20),None, Node("Node 3", color = "#3CA072")],
368
+ edges = [ Edge(0,1, color = "#3CA072"), Edge(1,3,'extending', size = 6),Edge(3,4, size = 2), Edge(2,4)]])
369
+ ```
370
+ where value is None or a dictionary like {'nodes' : [id1, ..], 'edges' : [id2, ..]}, where enumerations are selected nodes and edges.
347
371
  Constant graph_default_value == {'nodes' : [], 'edges' : []} i.e. nothing to select.
348
372
 
349
- 'changed' method graph_selector called when user (de)selected nodes or edges:
373
+ 'changed_handler' is called when the user (de)selected nodes or edges:
350
374
  ```
351
- def graph_selection(_, val):
352
- _.value = val
375
+ def changed_handler(graph, val):
376
+ graph.value = val
353
377
  if 'nodes' in val:
354
378
  return Info(f'Nodes {val["nodes"]}')
355
379
  if 'edges' in val:
356
380
  return Info(f"Edges {val['edges']}")
357
381
  ```
358
- With pressed 'Shift' multi select works for nodes and edges.
382
+ With pressed 'Shift' multi (de)select works for nodes and edges.
359
383
 
360
384
  id nodes and edges are optinal, if node ids are ommited then edge 'source' and 'target' have to point node index in nodes array.
385
+ Graph can handle invalid edges and null nodes in the nodes array.
361
386
 
362
387
  ### Dialog ###
363
388
  ```
364
- Dialog(text, dialog_callback, commands = ['Ok', 'Cancel'], *content)
389
+ Dialog(question, dialog_callback, commands = ['Ok', 'Cancel'], *content)
365
390
  ```
366
391
  where buttons is a list of the dialog button names,
367
392
  Dialog callback has the signature as other with a pushed button name value
368
393
  ```
369
- def dialog_callback(current_dialog, pushed_button_name):
370
- if pushed_button_name == 'Yes':
394
+ def dialog_callback(current_dialog, command_button_name):
395
+ if command_button_name == 'Yes':
371
396
  do_this()
372
397
  elif ..
373
398
  ```
374
- content can be filled with Gui elements for additional dialog functionality.
399
+ content can be filled with Gui elements for additional dialog functionality like a Block.
375
400
 
376
401
 
377
402
  ### Popup windows ###
@@ -399,8 +424,8 @@ Unisi automatically creates and serves an environment for every user.
399
424
  The management class is User contains all required methods for processing and handling the user activity. A programmer can redefine methods in the inherited class, point it as system user class and that is all. Such methods suit for history navigation, undo/redo and initial operations. The screen folder contains screens which are recreated for every user. The same about blocks. The code and modules outside that folders are common for all users as usual. By default Unisi uses the system User class and you do not need to point it.
400
425
  ```
401
426
  class Hello_user(unisi.User):
402
- def __init__(self):
403
- super().__init__()
427
+ def __init__(self, session, share = None):
428
+ super().__init__(session, share)
404
429
  print('New Hello user connected and created!')
405
430
 
406
431
  unisi.start('Hello app', user_type = Hello_user)
@@ -457,10 +482,19 @@ if proxy.set_screen("Image analysis"):
457
482
  proxy.close()
458
483
  ```
459
484
 
485
+ ### REST ##
460
486
 
487
+ The REST service facilitates the REST interface through the following approach: a programmer is required to define aiohttp routes, which consist of routes and handlers, such as web.get('/', hello), and then pass it to the Unisi start function.
461
488
 
462
- ### 'Become a serious web programmer in 1 hour.' is a crash course how to use UNISI ###
463
- https://www.unisi.tech/learn
489
+ ```
490
+ from aiohttp import web
491
+ import unisi
492
+ async def handle_get(request):
493
+ print(request.query_string)
494
+ http_handlers = [web.get('/get', handle_get)]
495
+ unisi.start(http_handlers = http_handlers)
496
+ ```
497
+ #### REST is redundant because UNISI automatically provides the Unified Remote API without programming. Can use Proxy for accessing and querying. ####
464
498
 
465
499
  Examples are in tests folder.
466
500
 
@@ -1,9 +1,9 @@
1
- unisi-0.1.9.dist-info/METADATA,sha256=4JSNUcDiQsUS00Fzwb1rN2BFURciTyOX44HfaYkn5Nc,19754
2
- unisi-0.1.9.dist-info/WHEEL,sha256=N2J68yzZqJh3mI_Wg92rwhw0rtJDFpZj9bwQIMJgaVg,90
3
- unisi-0.1.9.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1
+ unisi-0.1.11.dist-info/METADATA,sha256=jZe5qOclohUz6WKqpAxwXDXNRxyolhto6eBrHcGnh5I,21428
2
+ unisi-0.1.11.dist-info/WHEEL,sha256=N2J68yzZqJh3mI_Wg92rwhw0rtJDFpZj9bwQIMJgaVg,90
3
+ unisi-0.1.11.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
4
4
  unisi/__init__.py,sha256=bQ7yTDcgybkbIGTjxkajTbBJXtgyryrCvt3nXg8QxlQ,175
5
- unisi/autotest.py,sha256=mkvfUuxO7co9QcninjBSS9u-zJSva9H_51k3m6sd3rw,9485
6
- unisi/common.py,sha256=jsZpOkZIQdfPZjrTIoO1OLiZfQ_spEpMCX3td269RR0,635
5
+ unisi/autotest.py,sha256=QHNVBD4sMx9cn94RIbwQhwuX9H72hB69pZwS7yqhiZw,9487
6
+ unisi/common.py,sha256=tdvHvEgZ5vzvLVjGGGIeZq5xHBYNBOydKjzDWoZWCSA,643
7
7
  unisi/containers.py,sha256=Me28aZkhchWJA5OExtXoFzl2u5bc6p0m2Cww7CfKIbA,4200
8
8
  unisi/guielements.py,sha256=svPMIEMbhW5uH4jz5rsjTeVVFl_P7VrMniTFFQvpmzs,5998
9
9
  unisi/jsoncomparison/__init__.py,sha256=lsWkYEuL6v3Qol-lwSUvB6y63tm6AKcCMUd4DZDx3Cg,350
@@ -11,13 +11,13 @@ unisi/jsoncomparison/compare.py,sha256=qPDaxd9n0GgiNd2SgrcRWvRDoXGg7NStViP9PHk2t
11
11
  unisi/jsoncomparison/config.py,sha256=LbdLJE1KIebFq_tX7zcERhPvopKhnzcTqMCnS3jN124,381
12
12
  unisi/jsoncomparison/errors.py,sha256=wqphE1Xn7K6n16uvUhDC45m2BxbsMUhIF2olPbhqf4o,1192
13
13
  unisi/jsoncomparison/ignore.py,sha256=xfF0a_BBEyGdZBoq-ovpCpawgcX8SRwwp7IrGnu1c2w,2634
14
- unisi/proxy.py,sha256=34Ql_UbqvBowc8V7qjDUSK3KhyxpcSyzjJV1iUOPo4A,7614
14
+ unisi/proxy.py,sha256=meZ4-26KXefuaZ04Gfrexij7rreBPKLPJSwPCIqftx0,7660
15
15
  unisi/reloader.py,sha256=B0f9GU452epFvdih8sH7_NiIJrXnC5i27uw2imGQxMg,6585
16
- unisi/server.py,sha256=5oax_OGWGPNm1smQM_8EpCb1jKia2s7IBnIfjIr1Z2w,4583
16
+ unisi/server.py,sha256=UKRm6ZUQb9gvlRMdH6EWtfih3B00uSvKGNj3QNl8TAw,4979
17
17
  unisi/tables.py,sha256=v7Fio5iIN7u1t7cE4Yvl4ewn7jTmmNPyWigoKW1Mj8U,4239
18
- unisi/users.py,sha256=JD4AD0WyuJQK31juWURqHwbeHF-016nifGQBZutHSPI,9818
19
- unisi/utils.py,sha256=6iDXECQE_44v8m6fvte_PXM0Ku6ZV-8LkAqMcNSMYdk,2975
20
- unisi/web/css/353.64dbc68c.css,sha256=ckeNz4l2QkIp60LdV_-cEXf9orp0ZVklEbrQfjkAG5M,2691
18
+ unisi/users.py,sha256=dYNOx5X1Yvj6475zqqVKQjyAe1pHtKvm_rz_7Qgnp0Y,11100
19
+ unisi/utils.py,sha256=hxwCCPZla1iSz9Y1CseDpE5K5JOdOyDlXtXuxpEAviw,2987
20
+ unisi/web/css/662.64dbc68c.css,sha256=ckeNz4l2QkIp60LdV_-cEXf9orp0ZVklEbrQfjkAG5M,2691
21
21
  unisi/web/css/app.31d6cfe0.css,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  unisi/web/css/vendor.9ed7638d.css,sha256=p_6HvcTaHu2zmOmfGxEGiGu5TIFZ75_XKHJZWA0eGCE,220597
23
23
  unisi/web/favicon.ico,sha256=2ZcJaY_4le4w5NSBzWjaj3yk1faLAX0XqioI-Tjscbs,64483
@@ -33,10 +33,10 @@ unisi/web/icons/favicon-128x128.png,sha256=zmGg0n6RZ5OM4gg-E5HeHuUUtA2KD1w2AqegT
33
33
  unisi/web/icons/favicon-16x16.png,sha256=3ynBFHJjwaUFKcZVC2rBs27b82r64dmcvfFzEo52-sU,859
34
34
  unisi/web/icons/favicon-32x32.png,sha256=lhGXZOqIhjcKDymmbKyo4mrVmKY055LMD5GO9eW2Qjk,2039
35
35
  unisi/web/icons/favicon-96x96.png,sha256=0PbP5YF01VHbwwP8z7z8jjltQ0q343C1wpjxWjj47rY,9643
36
- unisi/web/index.html,sha256=ZGWHTsn2jaSuLD5zD48wEb2n0pkaVENOwq_2xY8ZoS8,905
36
+ unisi/web/index.html,sha256=ZD1kM0f05QWnccWMNKQZxb1cL8yv2zwHPFBN48qvZGc,905
37
37
  unisi/web/js/193.283445be.js,sha256=FID-PRjvjbe_OHxm7L2NC92Cj_5V7AtDQ2WvKxLZ0lw,763
38
- unisi/web/js/353.ddd028b2.js,sha256=DQGZ3nBM5feVYkLf3293CmnNfIcKs8WKq8MySyO9HQA,56593
39
38
  unisi/web/js/430.591e9a73.js,sha256=7S1CJTwGdE2EKXzeFRcaYuTrn0QteoVI03Hykz8qh3s,6560
40
- unisi/web/js/app.bf75d7b6.js,sha256=2tat-f-LfOgU17bsIx4OrmVZbVdQNRhlh-cYWjPEohk,5923
39
+ unisi/web/js/662.5957b792.js,sha256=9zsZsZXeiTYgvB6RbF7guuqOXcb5DAQp31Djl52Y-ow,56727
40
+ unisi/web/js/app.636fcf8d.js,sha256=THmpgdBjzB_6O3LqK0biyFfeqKg3UNwP32R7Tu7oifE,5923
41
41
  unisi/web/js/vendor.d6797c01.js,sha256=2aKM3Lfxc0pHSirrcUReL1LcvDYWnfeBj2c67XsSELk,1279477
42
- unisi-0.1.9.dist-info/RECORD,,
42
+ unisi-0.1.11.dist-info/RECORD,,
File without changes
File without changes