unisi 0.1.8__py3-none-any.whl → 0.1.10__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/__init__.py CHANGED
@@ -4,3 +4,4 @@ from .users import User, handle
4
4
  from .server import start
5
5
  from .tables import *
6
6
  from .containers import *
7
+ from .proxy import *
unisi/autotest.py CHANGED
@@ -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.UserType('autotest')
206
+ user.load()
208
207
  errors = []
209
208
  for module in user.screens:
210
209
  errors += check_module(module)
unisi/proxy.py ADDED
@@ -0,0 +1,202 @@
1
+ from websocket import create_connection
2
+ from enum import IntFlag
3
+ import json, requests, os
4
+ from .common import *
5
+
6
+ class Event(IntFlag):
7
+ none = 0
8
+ update = 1
9
+ invalid = 2
10
+ message = 4
11
+ update_message = 5
12
+ progress = 8
13
+ update_progress = 9
14
+ unknown = 16
15
+ unknown_update = 17
16
+ dialog = 32
17
+ screen = 65
18
+ complete = 128
19
+ append = 256
20
+
21
+ ws_header = 'ws://'
22
+ wss_header = 'wss://'
23
+ ws_path = 'ws'
24
+
25
+ message_types = ['error','warning','info']
26
+
27
+ class Proxy:
28
+ """UNISI proxy"""
29
+ def __init__(self, host_port, timeout = 7, ssl = False, session = ''):
30
+ addr_port = f'{wss_header if ssl else ws_header}{host_port}'
31
+ addr_port = f'{addr_port}{"" if addr_port.endswith("/") else "/"}{ws_path}'
32
+ self.host_port = f'{"https" if ssl else "http"}://{host_port}'
33
+ self.conn = create_connection(addr_port, timeout = timeout, header = {'session' : session})
34
+ self.screen = None
35
+ self.screens = {}
36
+ self.dialog = None
37
+ self.event = None
38
+ self.request(None)
39
+
40
+ def close(self):
41
+ self.conn.close()
42
+
43
+ @property
44
+ def screen_menu(self):
45
+ return [name_icon[0] for name_icon in self.screen['menu']] if self.screen else []
46
+
47
+ @property
48
+ def commands(self):
49
+ """return command objects"""
50
+ return self.elements(types=['command'])
51
+
52
+ def element(self, name, block_name = None):
53
+ """return the element only if 1 element has such name"""
54
+ result = None
55
+ name2block = self.screen['name2block']
56
+ for block in [name2block[block_name]] if block_name else name2block.values():
57
+ for el in flatten(block['value']):
58
+ if el['name'] == name:
59
+ if not result:
60
+ result = el
61
+ else:
62
+ return None
63
+ return result
64
+
65
+ def elements(self, block = None, types = None):
66
+ """get elements with filtering types and blocks"""
67
+ if block:
68
+ return [el for el in flatten(block['value']) if not types or el['type'] in types]
69
+ answer = []
70
+ for block in self.screen['name2block'].values():
71
+ answer.extend([el for el in flatten(block['value']) if not types or el['type'] in types])
72
+ return answer
73
+
74
+ def block_name(self, element):
75
+ is_name = isinstance(element, str)
76
+ for block in self.screen['name2block'].values():
77
+ for el in flatten(block['value']):
78
+ if el['name'] == element if is_name else el == element:
79
+ return block['name']
80
+
81
+ def upload(self, fpath):
82
+ """upload file to the server and get its server path"""
83
+ file = open(fpath, "rb")
84
+ response = requests.post(self.host_port, files = {os.path.basename(fpath): file})
85
+ return getattr(response, 'text', '')
86
+
87
+ def command(self, command, value = None):
88
+ return self.interact(self.make_message(command, value))
89
+
90
+ def command_upload(self, command, fpath):
91
+ """upload file to the server and call command"""
92
+ spath = os.path.abspath(fpath) if 'localhost' in self.host_port else self.upload(fpath)
93
+ return self.command(command, spath) if spath else Event.invalid
94
+
95
+ def make_message(self, element, value = None, event = 'changed'):
96
+ if isinstance(element, str):
97
+ element = self.element(element)
98
+ if event != 'changed' and event not in element:
99
+ return None
100
+ return ArgObject(block = self.block_name(element), element = element['name'],
101
+ event = event, value = value)
102
+
103
+ def interact(self, message, progress_callback = None):
104
+ """progress_callback is def (proxy:Proxy)"""
105
+ while self.request(message) & Event.progress:
106
+ if progress_callback:
107
+ progress_callback(self)
108
+ message = None
109
+ return self.event
110
+
111
+ def request(self, message):
112
+ """send message or message list, get responce, return the responce type"""
113
+ if message:
114
+ self.conn.send(toJson(message))
115
+ responce = self.conn.recv()
116
+ message = json.loads(responce)
117
+ return self.process(message)
118
+
119
+ def set_value(self, element, new_value):
120
+ if isinstance(element, str):
121
+ element = self.element(element)
122
+ element['value'] = new_value
123
+ ms = self.make_message(element, new_value)
124
+ return self.interact(ms) if ms else Event.invalid
125
+
126
+ def set_screen(self, name):
127
+ screen = self.screens.get(name)
128
+ if not screen:
129
+ if name in self.screen_menu:
130
+ mtype = self.request(ArgObject(block = 'root', element = None, value = name))
131
+ return mtype == Event.screen
132
+ else:
133
+ return False
134
+ return True
135
+
136
+ @property
137
+ def dialog_commands(self):
138
+ return self.dialog['commands'] if self.dialog else []
139
+
140
+ def dialog_responce(self, command: str | None):
141
+ if not self.dialog:
142
+ self.event = Event.invalid
143
+ return self.event
144
+ return self.interact(ArgObject(block = self.dialog['name'], value = command))
145
+
146
+ def process(self, message):
147
+ self.message = message
148
+ if not message:
149
+ self.event = Event.none
150
+ self.mtype = None
151
+ else:
152
+ mtype = message.get('type')
153
+ self.mtype = mtype
154
+ if mtype == 'screen':
155
+ self.screen = message
156
+ self.screens[self.screen['name']] = message
157
+ name2block = {block['name']: block for block in flatten(message['blocks'])}
158
+ name2block['toolbar'] = {'name': 'toolbar', 'value': message['toolbar']}
159
+ message['name2block'] = name2block
160
+ self.event = Event.screen
161
+ elif mtype == 'dialog':
162
+ self.dialog = message
163
+ self.event = Event.dialog
164
+ elif mtype == 'complete':
165
+ return Event.complete
166
+ elif mtype == 'append':
167
+ self.event = Event.append
168
+ elif mtype == 'update':
169
+ self.update(message)
170
+ self.event = Event.update
171
+ else:
172
+ updates = message.get('updates')
173
+ if updates:
174
+ self.update(message)
175
+ if type in message_types:
176
+ self.event = Event.update_message if updates else Event.message
177
+ if type == 'progress':
178
+ self.event = Event.update_progress if updates else Event.progress
179
+ else:
180
+ self.event = Event.unknown_update if updates else Event.unknown
181
+ return self.event
182
+
183
+ def update(self, message):
184
+ """update screen from the message"""
185
+ result = Event.update
186
+ updates = message.updates
187
+ for update in updates:
188
+ path = update['path']
189
+ name2block = self.screen['name2block']
190
+ if len(path) == 1: #block
191
+ name2block[block] = update['data']
192
+ else:
193
+ block, element = path
194
+ for el in flatten(name2block[block]['value']):
195
+ if el['name'] == element:
196
+ el.__dict__ = update['data'].__dict__
197
+ break
198
+ else:
199
+ result = Event.unknown_update
200
+ return result
201
+
202
+
unisi/server.py CHANGED
@@ -44,60 +44,70 @@ async def static_serve(request):
44
44
 
45
45
  def broadcast(message, message_user):
46
46
  screen = message_user.screen_module
47
- for user in User.reflections:
47
+ for user in message_user.reflections:
48
48
  if user is not message_user and screen is user.screen_module:
49
49
  user.sync_send(message)
50
-
50
+ import gc
51
51
  async def websocket_handler(request):
52
52
  ws = web.WebSocketResponse()
53
53
  await ws.prepare(request)
54
- user, ok = make_user()
55
- user.transport = ws._writer.transport if divpath != '/' else None
54
+ user, status = make_user(request)
55
+ if not user:
56
+ await ws.send_str(toJson(status))
57
+ else:
58
+ user.transport = ws._writer.transport if divpath != '/' else None
56
59
 
57
- async def send(res):
58
- if type(res) != str:
59
- res = toJson(user.prepare_result(res))
60
- await ws.send_str(res)
60
+ async def send(res):
61
+ if type(res) != str:
62
+ res = toJson(user.prepare_result(res))
63
+ await ws.send_str(res)
61
64
 
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())
65
+ user.send = send
66
+ await send(user.screen if status else empty_app)
67
+ try:
68
+ async for msg in ws:
69
+ if msg.type == WSMsgType.TEXT:
70
+ if msg.data == 'close':
71
+ await ws.close()
72
+ else:
73
+ raw_message = json.loads(msg.data)
74
+ message = None
75
+ if isinstance(raw_message, list):
76
+ if raw_message:
77
+ for raw_submessage in raw_message:
78
+ message = ReceivedMessage(raw_submessage)
79
+ result = user.result4message(message)
80
+ else:
81
+ result = Warning('Empty command batch!')
82
+ else:
83
+ message = ReceivedMessage(raw_message)
84
+ result = user.result4message(message)
85
+ await send(result)
86
+ if message:
87
+ if recorder.record_file:
88
+ recorder.accept(message, user.prepare_result (result))
89
+ if user.reflections and not is_screen_switch(message):
90
+ if result:
91
+ broadcast(result, user)
92
+ msg_object = user.find_element(message)
93
+ if not isinstance(result, Message) or not result.contains(msg_object):
94
+ broadcast(toJson(user.prepare_result(msg_object)), user)
95
+ elif msg.type == WSMsgType.ERROR:
96
+ user.log('ws connection closed with exception %s' % ws.exception())
97
+ except:
98
+ user.log(traceback.format_exc())
97
99
 
98
- if User.reflections:
99
- User.reflections.remove(user)
100
- return ws
100
+ uss = User.sessions
101
+ if uss and uss.get(user.session):
102
+ del uss[user.session]
103
+
104
+ if user.reflections: #reflections is common array
105
+ if len(user.reflections) == 2:
106
+ user.reflections.clear() #1 element in user.reflections has no sense
107
+ else:
108
+ user.reflections.remove(user)
109
+ gc.collect()
110
+ return ws #?<->
101
111
 
102
112
  def start(appname = None, user_type = User, http_handlers = []):
103
113
  if appname is not None:
unisi/users.py CHANGED
@@ -9,14 +9,27 @@ from threading import Thread
9
9
  import logging
10
10
 
11
11
  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
12
+ def __init__(self, session: str, share = None):
13
+ self.session = session
14
+ self.active_dialog = None
15
+ self.last_message = None
16
+ User.last_user = self
17
+
18
+ if share:
19
+ self.screens = share.screens
20
+ self.screen_module = share.screen_module if share.screens else []
21
+ self.__handlers__ = share.__handlers__
22
+
23
+ if share.reflections:
24
+ share.reflections.append(self)
25
+ else:
26
+ share.reflections = [share, self]
27
+ self.reflections = share.reflections
28
+ else:
29
+ self.screens = []
30
+ self.reflections = []
31
+ self.screen_module = None
32
+ self.__handlers__ = {}
20
33
 
21
34
  async def send_windows(self, obj):
22
35
  await self.send(obj)
@@ -218,32 +231,34 @@ class User:
218
231
  else:
219
232
  self.log(f'{elem} does not contain method for {event} event type!')
220
233
  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
-
234
+
230
235
  def log(self, str, type = 'error'):
231
- scr = self.screen.name if self.screens else 'omitted'
236
+ scr = self.screen.name if self.screens else 'void'
232
237
  str = f"session: {self.session}, screen: {scr}, message: {self.last_message} \n {str}"
233
238
  if type == 'error':
234
239
  logging.error(str)
235
240
  else:
236
241
  logging.warning(str)
237
242
 
238
- def make_user():
239
- if config.mirror and User.last_user:
240
- user = User.last_user.reflect()
243
+ def make_user(request):
244
+ session = f'{request.remote}-{User.count}'
245
+ User.count += 1
246
+ requested_connect = request.headers.get('session', '')
247
+ if requested_connect:
248
+ user = User.sessions.get(requested_connect, None)
249
+ if not user:
250
+ error = f'Session id "{requested_connect}" is unknown. Connection refused!'
251
+ logging.error(error)
252
+ return None, Error(error)
253
+ user = User.UserType(session, user)
254
+ ok = user.screens
255
+ elif config.mirror and User.last_user:
256
+ user = User.UserType(session, User.last_user)
241
257
  ok = user.screens
242
258
  else:
243
- user = User.UserType()
244
- ok = user.load()
245
- if config.mirror:
246
- User.reflections.append(user)
259
+ user = User.UserType(session)
260
+ ok = user.load()
261
+ User.sessions[session] = user
247
262
  return user, ok
248
263
 
249
264
  #loop and thread is for progress window and sync interactions
@@ -265,4 +280,5 @@ User.extra_loop = loop
265
280
  User.UserType = User
266
281
  User.last_user = None
267
282
  User.toolbar = []
268
- User.reflections = []
283
+ User.sessions = {}
284
+ User.count = 0
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.8224dd96.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.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>
@@ -0,0 +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 +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(847)]).then(r.bind(r,8847)),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",847:"c4ea8fe3"}[e]+".js"})(),(()=>{r.miniCssF=e=>"css/"+({143:"app",736:"vendor"}[e]||e)+"."+{143:"31d6cfe0",736:"9ed7638d",847:"64dbc68c"}[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={847: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(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,17 +1,18 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: unisi
3
- Version: 0.1.8
4
- Summary: UNified System Interface, GUI and proxy
3
+ Version: 0.1.10
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
7
7
  Project-URL: Homepage, https://github.com/unisi-tech/unisi
8
- Requires-Python: >=3.8
8
+ Requires-Python: >=3.10
9
9
  Requires-Dist: aiohttp
10
10
  Requires-Dist: jsonpickle
11
11
  Requires-Dist: pandas
12
12
  Requires-Dist: requests
13
13
  Requires-Dist: watchdog
14
14
  Requires-Dist: websockets
15
+ Requires-Dist: websocket-client
15
16
  Description-Content-Type: text/markdown
16
17
 
17
18
  # UNISI #
@@ -83,7 +84,10 @@ unisi.start('Test app')
83
84
  Unisi builds the interactive app for the code above.
84
85
  Connect a browser to localhast:8000 which are by default and will see:
85
86
 
86
- ![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
87
91
 
88
92
  ### Handling events ###
89
93
  All handlers are functions which have a signature
@@ -109,25 +113,37 @@ clean_button = Button('Clean the table’, clean_table)
109
113
  | Gui object array or tuple | Objects to update |
110
114
  | None | Nothing to update, Ok |
111
115
  | Error(...), Warning(...), Info(...) | Show to user info about a state. |
112
- | UpdateScreen, True | Redraw whole screen |
116
+ | True | Redraw whole screen |
117
+
113
118
  | Dialog(..) | Open a dialog with parameters |
114
119
  | user.set_screen(screen_name) | switch to another screen |
115
120
 
116
-
117
- 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.
118
122
 
119
123
  If a Gui object doesn't have 'changed' handler the object accepts incoming value automatically to the 'value' variable of gui object.
120
124
 
121
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.
122
126
 
123
127
  ```
124
- def changed_range(guirange, value):
125
- if value < 0.5 and value > 1.0:
126
- 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)
127
131
  #accept value othewise
128
- guirange.value = value
132
+ elem.value = value
129
133
 
130
- 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
131
147
  ```
132
148
 
133
149
  ### Block details ###
@@ -158,18 +174,6 @@ from blocks.tblock import concept_block
158
174
  blocks = [.., concept_block]
159
175
  ```
160
176
 
161
- #### Events interception of shared elements ####
162
- Interception handlers have the same in/out format as usual handlers.
163
- #### 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.
164
- For example above interception of select_mode changed event will be:
165
- ```
166
- @handle(select_mode, 'changed')
167
- def do_not_select_mode_x(selector, value):
168
- if value == 'Mode X':
169
- return Error('Do not select Mode X in this context', selector) # send old value for update select_mode to the previous state
170
- return _.accept(value) #otherwise accept the value
171
- ```
172
-
173
177
  #### Layout of blocks. ####
174
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.
175
179
 
@@ -179,6 +183,24 @@ blocks = [ [b1,b2], [b3, [b4, b5]]]
179
183
 
180
184
  ![image](https://github.com/unisi-tech/unisi/assets/1247062/aa0c3623-ef57-45ce-a179-7ba53df119c3)
181
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
+
182
204
  ### Basic gui elements ###
183
205
  Normally they have type property which says unisi what data it contains and optionally how to draw the element.
184
206
  #### If the element name starts from _ , unisi will hide its name on the screen. ####
@@ -199,34 +221,34 @@ causes a call changed handler if it defined, otherwise just save value to self.
199
221
  ### Button ###
200
222
  Normal button.
201
223
  ```
202
- Button('Push me', changed = push_callback)
224
+ Button('Push me', changed = push_callback, icon = None)
203
225
  ```
204
226
  Short form
205
227
  ```
206
- Button('Push me', push_callback)
228
+ Button('Push me', push_callback = None, icon = None)
207
229
  ```
208
- Icon button
230
+ Icon button, the name has to be started from _ for hiding
209
231
  ```
210
- Button('_Check', push_callback, icon = 'check')
232
+ Button('_Check', push_callback = None, icon = None)
211
233
  ```
212
234
 
213
235
  ### Load to server Button ###
214
236
  Special button provides file loading from user device or computer to the Unisi server.
215
237
  ```
216
- UploadButton('Load', handler_when_loading_finish, icon='photo_library')
238
+ UploadButton('Load', handler_when_loading_finish, icon = 'photo_library')
217
239
  ```
218
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 .
219
241
 
220
242
  ### Edit and Text field. ###
221
243
  ```
222
- Edit('Some field', '') #for string value
223
- 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
224
246
  ```
225
- If set edit = false it will be readonly field.
247
+ If set edit = false the element will be readonly.
226
248
  ```
227
249
  Edit('Some field', '', edit = false)
228
- #text
229
- Text('Some text')
250
+ #text, it is equal
251
+ Text('Some field')
230
252
  ```
231
253
  complete handler is optional function which accepts the current edit value and returns a string list for autocomplete.
232
254
 
@@ -240,23 +262,30 @@ Edit('Edit me', 'value', complete = get_complete_list) #value has to be string o
240
262
  Optional 'update' handler is called when the user press Enter in the field.
241
263
  It can return None if OK or objects for updating as usual 'changed' handler.
242
264
 
243
- Optional selection property with parameters (start, end) is called when selection is happened.
244
- 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
+ ```
245
274
 
246
275
 
247
276
  ### Radio button ###
248
277
  ```
249
- Switch(name, value, changed, type = ...)
250
- 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.
251
280
  Optional type can be 'check' for a status button or 'switch' for a switcher .
252
281
  ```
253
282
 
254
283
  ### Select group. Contains options field. ###
255
284
  ```
256
- Select('Select something', "choice1", selection_is_changed, options = ["choice1","choice2", "choice3"])
285
+ Select(name, value = None, changed_handler = None, options = ["choice1","choice2", "choice3"])
257
286
  ```
258
- Optional type parameter can be 'toggles','list','dropdown'. Unisi automatically chooses between toogles and dropdown, if type is omitted,
259
- 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.
260
289
 
261
290
 
262
291
  ### Image. ###
@@ -264,28 +293,30 @@ width,changed,height,header are optional, changed is called if the user select o
264
293
  When the user click the image, a check mark is appearing on the image, showning select status of the image.
265
294
  It is usefull for image list, gallery, e.t.c
266
295
  ```
267
- Image(image_name, selecting_changed, header = 'description',url = ..., width = .., height = ..)
296
+ Image(image_path, value = False, changed_handler, header = 'description', url = ..., width = .., height = ..)
268
297
  ```
269
298
 
270
299
  ### Video. ###
271
300
  width and height are optional.
272
301
  ```
273
- Video(video_url, width = .., height = ..)
302
+ Video(video_url, width = None, height = None)
274
303
  ```
275
304
 
276
305
  ### Tree. The element for tree-like data. ###
277
306
  ```
278
- 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, .})
279
308
  ```
280
309
  options is a tree structure, a dictionary {item_name:parent_name}.
281
310
  parent_name is None for root items. changed_handler gets item key (name) as value.
282
311
 
283
312
  ### Table. ###
284
313
  Tables is common structure for presenting 2D data and charts.
285
- Optional append, delete, update handlers are called for adding, deleting and updating rows.
286
314
 
315
+ Table(name, value = None, changed_handler = None, **options)
287
316
 
288
- Assigning a handler for such action causes Unii to draw and activate an appropriate action icon button in the table header automatically.
317
+ Optional append, delete, update handlers are called for adding, deleting and updating handlers for a table.
318
+
319
+ Auto assigning handlers for such action can be blocked by assigning edit = False to the Table constructor.
289
320
  ```
290
321
  table = Table('Videos', [0], row_changed, headers = ['Video', 'Duration', 'Owner', 'Status'],
291
322
  rows = [
@@ -314,7 +345,6 @@ value = [0] means 0 row is selected in multiselect mode (in array). multimode is
314
345
  ### Table handlers. ###
315
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.
316
347
 
317
-
318
348
  ```
319
349
  def table_updated(table_, tabval):
320
350
  value, position = tabval
@@ -322,6 +352,7 @@ def table_updated(table_, tabval):
322
352
  ...
323
353
  if error_found:
324
354
  return Error('Can not accept the value!')
355
+ #call a standart handler
325
356
  accept_rowvalue(table_, tabval)
326
357
  ```
327
358
 
@@ -332,45 +363,40 @@ Chart is a table with additional Table constructor parameter 'view' which explai
332
363
  ### Graph ###
333
364
  Graph supports an interactive graph.
334
365
  ```
335
- graph = Graph('X graph', graph_value, graph_selection,
336
- nodes = [
337
- { 'id' : 'node1', 'name': "Node 1" },
338
- { 'id' : 'node2', 'name': "Node 2" },
339
- { 'id' : 'node3', 'name': "Node 3" }
340
- ], edges = [
341
- { 'id' : 'edge1', 'source': "node1", 'target': "node2", 'name' : 'extending' },
342
- { 'id' :'edge2' , 'source': "node2", 'target': "node3" , 'name' : 'extending'}
343
- ])
344
- ```
345
- 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.
346
371
  Constant graph_default_value == {'nodes' : [], 'edges' : []} i.e. nothing to select.
347
372
 
348
- '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:
349
374
  ```
350
- def graph_selection(_, val):
351
- _.value = val
375
+ def changed_handler(graph, val):
376
+ graph.value = val
352
377
  if 'nodes' in val:
353
378
  return Info(f'Nodes {val["nodes"]}')
354
379
  if 'edges' in val:
355
380
  return Info(f"Edges {val['edges']}")
356
381
  ```
357
- With pressed 'Shift' multi select works for nodes and edges.
382
+ With pressed 'Shift' multi (de)select works for nodes and edges.
358
383
 
359
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.
360
386
 
361
387
  ### Dialog ###
362
388
  ```
363
- Dialog(text, dialog_callback, commands = ['Ok', 'Cancel'], *content)
389
+ Dialog(question, dialog_callback, commands = ['Ok', 'Cancel'], *content)
364
390
  ```
365
391
  where buttons is a list of the dialog button names,
366
392
  Dialog callback has the signature as other with a pushed button name value
367
393
  ```
368
- def dialog_callback(current_dialog, pushed_button_name):
369
- if pushed_button_name == 'Yes':
394
+ def dialog_callback(current_dialog, command_button_name):
395
+ if command_button_name == 'Yes':
370
396
  do_this()
371
397
  elif ..
372
398
  ```
373
- 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.
374
400
 
375
401
 
376
402
  ### Popup windows ###
@@ -391,15 +417,15 @@ Update window message
391
417
  ```
392
418
  user.progress(" 1% is done..")
393
419
  ```
394
- Close window user.progress(None) or automatically when the handler returns something.
420
+ Progree window is automatically closed when the handler is finished.
395
421
 
396
422
  ### Milti-user support. ###
397
423
  Unisi automatically creates and serves an environment for every user.
398
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.
399
425
  ```
400
- class Hello_user(unisi.User):
426
+ class Hello_user(unisi.User, session, share = None):
401
427
  def __init__(self):
402
- super().__init__()
428
+ super().__init__(session, share)
403
429
  print('New Hello user connected and created!')
404
430
 
405
431
  unisi.start('Hello app', user_type = Hello_user)
@@ -409,8 +435,66 @@ In screens and blocks sources we can access the user by 'user' variable
409
435
  print(isinstance(user, Hello_user))
410
436
  ```
411
437
 
412
- 'Become a serious web programmer in 1 hour.' is a crash course how to use UNISI
413
- https://www.unisi.tech/learn
438
+ ### Unified Remote API ###
439
+ For using UNISI apps from remote programs Unified Remote API is an optimal choice.
440
+
441
+ | Proxy methods, properties | Description |
442
+ | :---: | :---: |
443
+ | close() | Close session. |
444
+ | command_upload(element: str or dict, file_name: str) | upload file_name file to the server and execute element command (push the button). |
445
+ | command(element: str or dict) | Executes the element command.The element type is Button. |
446
+ | element(name:str) | returns an element with such name |
447
+ | elements(block’ :str or dict, types’ : list[str]) | returns screen elements in json format, filtered by optional block and list of types. |
448
+ | interact(message: Object, pcallback`) | Sends a message, gets an answer and returns the type of response. pcallback is an optional progress callback. |
449
+ | screen_menu | Returns the screen names. |
450
+ | set_screen(screen_name: str) | Set active screen. |
451
+ | set_value(element: str or dict, value: any) | Set the value to the element |
452
+
453
+ ‘ after a variable means it’s optional.
454
+ The UNISI Proxy creates a user session and operates in the same manner as a browsing user.
455
+
456
+ For example access to UNISI Vision :
457
+ ```
458
+ #Interact with https://github.com/unisi-tech/vision
459
+ from unisi import Proxy, Event
460
+
461
+ proxy = Proxy('localhost:8000')
462
+
463
+ #image for analysis
464
+ image_file = '/home/george/Projects/save/animals/badger/0cf04d0dab.jpg'
465
+
466
+ #It has Screen "Image analysis"
467
+ if proxy.set_screen("Image analysis"):
468
+ #optional: turn off search images for perfomance, we only need to classify the image
469
+ #for that find Switch 'Search' and set it to False
470
+ proxy.set_value('Search', False)
471
+
472
+ #push with parameter UploadButton 'Load an image' on the screen
473
+ if proxy.command_upload('Load an image', image_file) & Event.update:
474
+ #get result table after responce
475
+ table = proxy.element('Image classification')
476
+
477
+ #and take parameters from the result table.
478
+ print(' Answer:')
479
+ for row in table['rows']:
480
+ print(row)
481
+
482
+ proxy.close()
483
+ ```
484
+
485
+ ### REST ##
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.
488
+
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. ####
414
498
 
415
499
  Examples are in tests folder.
416
500
 
@@ -1,8 +1,8 @@
1
- unisi-0.1.8.dist-info/METADATA,sha256=rBUW89zbtC9urbRQ1mzUAcdU786z5oJyYT1QCHMx860,17684
2
- unisi-0.1.8.dist-info/WHEEL,sha256=N2J68yzZqJh3mI_Wg92rwhw0rtJDFpZj9bwQIMJgaVg,90
3
- unisi-0.1.8.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
4
- unisi/__init__.py,sha256=z7fP6b-R1l4VZmc0tFXz4-Uay5y1kSzMm3xbWl5Zh-g,154
5
- unisi/autotest.py,sha256=mkvfUuxO7co9QcninjBSS9u-zJSva9H_51k3m6sd3rw,9485
1
+ unisi-0.1.10.dist-info/METADATA,sha256=VJYe06r0OBYZAx_YSCYGL5RiOZECwl0TcUn0Yw2iwTY,21428
2
+ unisi-0.1.10.dist-info/WHEEL,sha256=N2J68yzZqJh3mI_Wg92rwhw0rtJDFpZj9bwQIMJgaVg,90
3
+ unisi-0.1.10.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
4
+ unisi/__init__.py,sha256=bQ7yTDcgybkbIGTjxkajTbBJXtgyryrCvt3nXg8QxlQ,175
5
+ unisi/autotest.py,sha256=sB4WCyxp9TB5r0OkxeO8_jlj3END4xKOr12l2gen6Yg,9469
6
6
  unisi/common.py,sha256=jsZpOkZIQdfPZjrTIoO1OLiZfQ_spEpMCX3td269RR0,635
7
7
  unisi/containers.py,sha256=Me28aZkhchWJA5OExtXoFzl2u5bc6p0m2Cww7CfKIbA,4200
8
8
  unisi/guielements.py,sha256=svPMIEMbhW5uH4jz5rsjTeVVFl_P7VrMniTFFQvpmzs,5998
@@ -11,12 +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=meZ4-26KXefuaZ04Gfrexij7rreBPKLPJSwPCIqftx0,7660
14
15
  unisi/reloader.py,sha256=B0f9GU452epFvdih8sH7_NiIJrXnC5i27uw2imGQxMg,6585
15
- unisi/server.py,sha256=5oax_OGWGPNm1smQM_8EpCb1jKia2s7IBnIfjIr1Z2w,4583
16
+ unisi/server.py,sha256=v17oT4smLi4XZpsf7lVazisYOH3Ak3GPBFmsSrGt8-8,5136
16
17
  unisi/tables.py,sha256=v7Fio5iIN7u1t7cE4Yvl4ewn7jTmmNPyWigoKW1Mj8U,4239
17
- unisi/users.py,sha256=JD4AD0WyuJQK31juWURqHwbeHF-016nifGQBZutHSPI,9818
18
+ unisi/users.py,sha256=g8YMOvDmibgu-kxvl884_WdlMAcrN2UNQseSqHGFBzc,10636
18
19
  unisi/utils.py,sha256=6iDXECQE_44v8m6fvte_PXM0Ku6ZV-8LkAqMcNSMYdk,2975
19
- unisi/web/css/847.64dbc68c.css,sha256=ckeNz4l2QkIp60LdV_-cEXf9orp0ZVklEbrQfjkAG5M,2691
20
+ unisi/web/css/353.64dbc68c.css,sha256=ckeNz4l2QkIp60LdV_-cEXf9orp0ZVklEbrQfjkAG5M,2691
20
21
  unisi/web/css/app.31d6cfe0.css,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
22
  unisi/web/css/vendor.9ed7638d.css,sha256=p_6HvcTaHu2zmOmfGxEGiGu5TIFZ75_XKHJZWA0eGCE,220597
22
23
  unisi/web/favicon.ico,sha256=2ZcJaY_4le4w5NSBzWjaj3yk1faLAX0XqioI-Tjscbs,64483
@@ -32,10 +33,10 @@ unisi/web/icons/favicon-128x128.png,sha256=zmGg0n6RZ5OM4gg-E5HeHuUUtA2KD1w2AqegT
32
33
  unisi/web/icons/favicon-16x16.png,sha256=3ynBFHJjwaUFKcZVC2rBs27b82r64dmcvfFzEo52-sU,859
33
34
  unisi/web/icons/favicon-32x32.png,sha256=lhGXZOqIhjcKDymmbKyo4mrVmKY055LMD5GO9eW2Qjk,2039
34
35
  unisi/web/icons/favicon-96x96.png,sha256=0PbP5YF01VHbwwP8z7z8jjltQ0q343C1wpjxWjj47rY,9643
35
- unisi/web/index.html,sha256=Re9S_tV_2F1v4bOCCrziPV1FUlqfa2s87nJUtLwTA6U,905
36
+ unisi/web/index.html,sha256=ZGWHTsn2jaSuLD5zD48wEb2n0pkaVENOwq_2xY8ZoS8,905
36
37
  unisi/web/js/193.283445be.js,sha256=FID-PRjvjbe_OHxm7L2NC92Cj_5V7AtDQ2WvKxLZ0lw,763
38
+ unisi/web/js/353.ddd028b2.js,sha256=DQGZ3nBM5feVYkLf3293CmnNfIcKs8WKq8MySyO9HQA,56593
37
39
  unisi/web/js/430.591e9a73.js,sha256=7S1CJTwGdE2EKXzeFRcaYuTrn0QteoVI03Hykz8qh3s,6560
38
- unisi/web/js/847.c4ea8fe3.js,sha256=el_JqiK9zS97V_UDUjlkbwIM8NQ4Y0Yt2WMMRoNm3UM,56531
39
- unisi/web/js/app.8224dd96.js,sha256=aKvusY5mySDAmto_L53gUEV2njTSU6JZKWGe_TXtlK8,5923
40
+ unisi/web/js/app.bf75d7b6.js,sha256=2tat-f-LfOgU17bsIx4OrmVZbVdQNRhlh-cYWjPEohk,5923
40
41
  unisi/web/js/vendor.d6797c01.js,sha256=2aKM3Lfxc0pHSirrcUReL1LcvDYWnfeBj2c67XsSELk,1279477
41
- unisi-0.1.8.dist-info/RECORD,,
42
+ unisi-0.1.10.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- "use strict";(globalThis["webpackChunkuniqua"]=globalThis["webpackChunkuniqua"]||[]).push([[847],{8847:(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)},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}`))}aa&&"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})}}]);
File without changes
File without changes