@ratiosolver/flick 0.2.1 → 0.2.3

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.
@@ -1,44 +0,0 @@
1
- /**
2
- * Manages a group of `Selector` instances, ensuring that only one selector is active (selected) at a time.
3
- *
4
- * The `SelectorGroup` class allows you to add or remove selectors, and provides a method to set a specific selector as selected.
5
- * When a selector is set as selected, all other selectors in the group are automatically unselected.
6
- *
7
- * @example
8
- * const group = new SelectorGroup();
9
- * group.add_selector(selector1);
10
- * group.add_selector(selector2);
11
- * group.set_selected(selector1); // selector1 is selected, selector2 is unselected
12
- */
13
- export class SelectorGroup {
14
- constructor() {
15
- this.selectors = new Set();
16
- }
17
- /**
18
- * Sets the given selector as the selected one, unselecting all other selectors.
19
- *
20
- * Iterates through all selectors managed by this instance. For each selector that is not the one provided,
21
- * it calls `unselect()`. Finally, it calls `select()` on the provided selector to mark it as selected.
22
- *
23
- * @param s - The {@link Selector} instance to be set as selected.
24
- */
25
- set_selected(s) {
26
- for (const c_s of this.selectors)
27
- if (c_s != s)
28
- c_s.unselect();
29
- s.select();
30
- }
31
- /**
32
- * Adds a selector to the current set of selectors.
33
- *
34
- * @param s - The selector to add.
35
- */
36
- add_selector(s) { this.selectors.add(s); }
37
- /**
38
- * Removes the specified selector from the collection of selectors.
39
- *
40
- * @param s - The selector to be removed.
41
- */
42
- remove_selector(s) { this.selectors.delete(s); }
43
- }
44
- //# sourceMappingURL=selector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selector.js","sourceRoot":"","sources":["../../src/utils/selector.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,aAAa;IAIxB;QAFQ,cAAS,GAAG,IAAI,GAAG,EAAY,CAAC;IAExB,CAAC;IAEjB;;;;;;;OAOG;IACH,YAAY,CAAC,CAAW;QACtB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS;YAC9B,IAAI,GAAG,IAAI,CAAC;gBACV,GAAG,CAAC,QAAQ,EAAE,CAAC;QACnB,CAAC,CAAC,MAAM,EAAE,CAAC;IACb,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,CAAW,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD;;;;OAIG;IACH,eAAe,CAAC,CAAW,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3D"}
@@ -1,61 +0,0 @@
1
- export declare class Settings {
2
- private secure;
3
- private hostname;
4
- private port;
5
- private ws_path;
6
- private static instance;
7
- private constructor();
8
- static get_instance(): Settings;
9
- /**
10
- * Checks if the connection is secure.
11
- *
12
- * @returns {boolean} Returns true if the connection is secure, otherwise false.
13
- */
14
- is_secure(): boolean;
15
- /**
16
- * Returns the protocol based on the `secure` property.
17
- *
18
- * @returns `'https'` if the connection is secure, otherwise `'http'`.
19
- */
20
- get_protocol(): string;
21
- /**
22
- * Retrieves the current hostname.
23
- *
24
- * @returns The hostname as a string.
25
- */
26
- get_hostname(): string;
27
- /**
28
- * Retrieves the current port.
29
- *
30
- * @returns The port number as a number.
31
- */
32
- get_port(): number;
33
- /**
34
- * Returns the appropriate WebSocket protocol based on the security setting.
35
- *
36
- * @returns {string} Returns 'wss' if the connection is secure, otherwise returns 'ws'.
37
- */
38
- get_ws_protocol(): string;
39
- /**
40
- * Retrieves the current WebSocket path.
41
- *
42
- * @returns {string} The WebSocket path stored in the instance.
43
- */
44
- get_ws_path(): string;
45
- /**
46
- * Constructs and returns the full host URL as a string, including the protocol, hostname, and port.
47
- *
48
- * @returns {string} The complete host URL in the format: protocol://hostname:port
49
- */
50
- get_host(): string;
51
- /**
52
- * Constructs and returns the full WebSocket host URL as a string.
53
- *
54
- * The URL is composed of the WebSocket protocol (as determined by `get_ws_protocol()`),
55
- * the hostname, port, and WebSocket path.
56
- *
57
- * @returns {string} The complete WebSocket host URL (e.g., `ws://hostname:port/path`).
58
- */
59
- get_ws_host(): string;
60
- load_settings(settings: any): void;
61
- }
@@ -1,72 +0,0 @@
1
- export class Settings {
2
- constructor() {
3
- this.secure = location.protocol === 'https:';
4
- this.hostname = location.hostname;
5
- this.port = Number(location.port);
6
- this.ws_path = '/ws';
7
- }
8
- static get_instance() {
9
- if (!Settings.instance) {
10
- Settings.instance = new Settings();
11
- }
12
- return Settings.instance;
13
- }
14
- /**
15
- * Checks if the connection is secure.
16
- *
17
- * @returns {boolean} Returns true if the connection is secure, otherwise false.
18
- */
19
- is_secure() { return this.secure; }
20
- /**
21
- * Returns the protocol based on the `secure` property.
22
- *
23
- * @returns `'https'` if the connection is secure, otherwise `'http'`.
24
- */
25
- get_protocol() { return this.secure ? 'https' : 'http'; }
26
- /**
27
- * Retrieves the current hostname.
28
- *
29
- * @returns The hostname as a string.
30
- */
31
- get_hostname() { return this.hostname; }
32
- /**
33
- * Retrieves the current port.
34
- *
35
- * @returns The port number as a number.
36
- */
37
- get_port() { return this.port; }
38
- /**
39
- * Returns the appropriate WebSocket protocol based on the security setting.
40
- *
41
- * @returns {string} Returns 'wss' if the connection is secure, otherwise returns 'ws'.
42
- */
43
- get_ws_protocol() { return this.secure ? 'wss' : 'ws'; }
44
- /**
45
- * Retrieves the current WebSocket path.
46
- *
47
- * @returns {string} The WebSocket path stored in the instance.
48
- */
49
- get_ws_path() { return this.ws_path; }
50
- /**
51
- * Constructs and returns the full host URL as a string, including the protocol, hostname, and port.
52
- *
53
- * @returns {string} The complete host URL in the format: protocol://hostname:port
54
- */
55
- get_host() { return this.get_protocol() + '://' + this.hostname + ':' + this.port; }
56
- /**
57
- * Constructs and returns the full WebSocket host URL as a string.
58
- *
59
- * The URL is composed of the WebSocket protocol (as determined by `get_ws_protocol()`),
60
- * the hostname, port, and WebSocket path.
61
- *
62
- * @returns {string} The complete WebSocket host URL (e.g., `ws://hostname:port/path`).
63
- */
64
- get_ws_host() { return this.get_ws_protocol() + '://' + this.hostname + ':' + this.port + this.ws_path; }
65
- load_settings(settings) {
66
- this.secure = settings.secure || this.secure;
67
- this.hostname = settings.host || this.hostname;
68
- this.port = settings.port || this.port;
69
- this.ws_path = settings.ws_path || this.ws_path;
70
- }
71
- }
72
- //# sourceMappingURL=settings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/utils/settings.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAQ;IAQnB;QANQ,WAAM,GAAY,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC;QACjD,aAAQ,GAAW,QAAQ,CAAC,QAAQ,CAAC;QACrC,SAAI,GAAW,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrC,YAAO,GAAW,KAAK,CAAC;IAGR,CAAC;IAElB,MAAM,CAAC,YAAY;QACxB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,QAAQ,CAAC,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,QAAQ,CAAC,QAAQ,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACI,SAAS,KAAc,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnD;;;;OAIG;IACI,YAAY,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE;;;;OAIG;IACI,YAAY,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvD;;;;OAIG;IACI,QAAQ,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/C;;;;OAIG;IACI,eAAe,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE;;;;OAIG;IACI,WAAW,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAErD;;;;OAIG;IACI,QAAQ,KAAa,OAAO,IAAI,CAAC,YAAY,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnG;;;;;;;OAOG;IACI,WAAW,KAAa,OAAO,IAAI,CAAC,eAAe,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEjH,aAAa,CAAC,QAAa;QAChC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QAC7C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;IAClD,CAAC;CACF"}
@@ -1,83 +0,0 @@
1
- import { ButtonComponent } from '../components/button';
2
- import { ConnectionListener } from './connection';
3
- import { Component } from '../component';
4
- /**
5
- * Button to create a new user.
6
- */
7
- export declare class NewUserButton extends ButtonComponent<void> implements ConnectionListener {
8
- /**
9
- * Creates a new button element for triggering the display of a modal dialog.
10
- *
11
- * @param modal_id - The ID of the modal element to be shown when the button is clicked. Defaults to 'newUserModal'.
12
- */
13
- constructor(modal_id?: string);
14
- connected(): void;
15
- logged_in(_info: any): void;
16
- received_message(_message: any): void;
17
- logged_out(): void;
18
- disconnected(): void;
19
- connection_error(_error: any): void;
20
- unmounting(): void;
21
- }
22
- /**
23
- * Button to log in.
24
- */
25
- export declare class LogInButton extends ButtonComponent<void> implements ConnectionListener {
26
- /**
27
- * Creates a new button element for triggering the display of a login modal dialog.
28
- *
29
- * @param modal_id - The ID of the modal element to be shown when the button is clicked. Defaults to 'loginModal'.
30
- */
31
- constructor(modal_id?: string);
32
- connected(): void;
33
- logged_in(_info: any): void;
34
- received_message(_message: any): void;
35
- logged_out(): void;
36
- disconnected(): void;
37
- connection_error(_error: any): void;
38
- unmounting(): void;
39
- }
40
- /**
41
- * Button to log out.
42
- */
43
- export declare class LogOutButton extends ButtonComponent<void> implements ConnectionListener {
44
- /**
45
- * Creates a new button element for logging out the user.
46
- */
47
- constructor();
48
- connected(): void;
49
- logged_in(_info: any): void;
50
- received_message(_message: any): void;
51
- logged_out(): void;
52
- disconnected(): void;
53
- connection_error(_error: any): void;
54
- unmounting(): void;
55
- }
56
- /**
57
- * Modal to log in.
58
- */
59
- export declare class LogInModal extends Component<HTMLDivElement> {
60
- private username_input;
61
- private password_input;
62
- private remember_input;
63
- /**
64
- * Optional callback to run when the modal is hiding.
65
- */
66
- on_hide: () => void;
67
- constructor();
68
- private login;
69
- }
70
- /**
71
- * Modal to create a new user.
72
- */
73
- export declare class NewUserModal extends Component<HTMLDivElement> {
74
- private username_input;
75
- private password_input;
76
- private confirm_password_input;
77
- /**
78
- * Optional callback to run when the modal is hiding.
79
- */
80
- on_hide: () => void;
81
- constructor();
82
- private create_user;
83
- }
@@ -1,358 +0,0 @@
1
- import { Modal } from 'bootstrap';
2
- import { ButtonComponent } from '../components/button';
3
- import { Connection } from './connection';
4
- import { Component } from '../component';
5
- import { App } from '../app';
6
- /**
7
- * Button to create a new user.
8
- */
9
- export class NewUserButton extends ButtonComponent {
10
- /**
11
- * Creates a new button element for triggering the display of a modal dialog.
12
- *
13
- * @param modal_id - The ID of the modal element to be shown when the button is clicked. Defaults to 'newUserModal'.
14
- */
15
- constructor(modal_id = 'newUserModal') {
16
- super();
17
- this.node.type = 'button';
18
- this.node.classList.add('btn', 'btn-primary');
19
- this.node.textContent = 'New User';
20
- this.node.style.marginLeft = 'auto';
21
- this.node.style.display = 'inline-block';
22
- this.node.addEventListener('click', () => Modal.getOrCreateInstance(document.getElementById(modal_id)).show());
23
- Connection.get_instance().add_connection_listener(this);
24
- }
25
- connected() { }
26
- logged_in(_info) {
27
- // Hide the button if the user is already logged in
28
- this.node.style.display = 'none';
29
- }
30
- received_message(_message) { }
31
- logged_out() {
32
- // Show the button if the user is logged out
33
- this.node.style.display = 'inline-block';
34
- }
35
- disconnected() { }
36
- connection_error(_error) { }
37
- unmounting() {
38
- Connection.get_instance().remove_connection_listener(this);
39
- }
40
- }
41
- /**
42
- * Button to log in.
43
- */
44
- export class LogInButton extends ButtonComponent {
45
- /**
46
- * Creates a new button element for triggering the display of a login modal dialog.
47
- *
48
- * @param modal_id - The ID of the modal element to be shown when the button is clicked. Defaults to 'loginModal'.
49
- */
50
- constructor(modal_id = 'loginModal') {
51
- super();
52
- this.node.type = 'button';
53
- this.node.classList.add('btn', 'btn-primary');
54
- this.node.textContent = 'Log In';
55
- this.node.style.marginLeft = '10px';
56
- this.node.style.display = 'inline-block';
57
- this.node.addEventListener('click', () => Modal.getOrCreateInstance(document.getElementById(modal_id)).show());
58
- Connection.get_instance().add_connection_listener(this);
59
- }
60
- connected() { }
61
- logged_in(_info) {
62
- // Hide the button if the user is already logged in
63
- this.node.style.display = 'none';
64
- }
65
- received_message(_message) { }
66
- logged_out() {
67
- // Show the button if the user is logged out
68
- this.node.style.display = 'inline-block';
69
- }
70
- disconnected() { }
71
- connection_error(_error) { }
72
- unmounting() {
73
- Connection.get_instance().remove_connection_listener(this);
74
- }
75
- }
76
- /**
77
- * Button to log out.
78
- */
79
- export class LogOutButton extends ButtonComponent {
80
- /**
81
- * Creates a new button element for logging out the user.
82
- */
83
- constructor() {
84
- super();
85
- this.node.type = 'button';
86
- this.node.classList.add('btn', 'btn-primary');
87
- this.node.textContent = 'Log Out';
88
- this.node.addEventListener('click', () => Connection.get_instance().logout());
89
- this.node.style.marginLeft = 'auto';
90
- this.node.style.display = 'none';
91
- Connection.get_instance().add_connection_listener(this);
92
- }
93
- connected() { }
94
- logged_in(_info) {
95
- // Show the button if the user is logged in
96
- this.node.style.display = 'inline-block';
97
- }
98
- received_message(_message) { }
99
- logged_out() {
100
- // Hide the button if the user is logged out
101
- this.node.style.display = 'none';
102
- }
103
- disconnected() { }
104
- connection_error(_error) { }
105
- unmounting() {
106
- Connection.get_instance().remove_connection_listener(this);
107
- }
108
- }
109
- /**
110
- * Modal to log in.
111
- */
112
- export class LogInModal extends Component {
113
- constructor() {
114
- super(document.createElement('div'));
115
- this.username_input = '';
116
- this.password_input = '';
117
- this.remember_input = true;
118
- this.on_hide = () => { var _a; (_a = this.node.parentElement) === null || _a === void 0 ? void 0 : _a.focus(); };
119
- this.node.classList.add('modal', 'fade');
120
- this.node.id = 'loginModal';
121
- this.node.setAttribute('tabindex', '-1');
122
- this.node.setAttribute('aria-labelledby', 'loginModalLabel');
123
- this.node.setAttribute('aria-hidden', 'true');
124
- this.node.addEventListener('hide.bs.modal', () => {
125
- if (this.on_hide)
126
- this.on_hide();
127
- });
128
- const dialog = document.createElement('div');
129
- dialog.classList.add('modal-dialog');
130
- const content = document.createElement('div');
131
- content.classList.add('modal-content');
132
- const header = document.createElement('div');
133
- header.classList.add('modal-header');
134
- const title = document.createElement('h5');
135
- title.classList.add('modal-title');
136
- title.id = 'loginModalLabel';
137
- title.textContent = 'Log In';
138
- header.appendChild(title);
139
- const close_button = document.createElement('button');
140
- close_button.type = 'button';
141
- close_button.classList.add('btn-close');
142
- close_button.setAttribute('data-bs-dismiss', 'modal');
143
- close_button.setAttribute('aria-label', 'Close');
144
- header.appendChild(close_button);
145
- content.appendChild(header);
146
- const body = document.createElement('div');
147
- body.classList.add('modal-body');
148
- const form = document.createElement('form');
149
- form.addEventListener('submit', (event) => {
150
- event.preventDefault();
151
- this.login();
152
- });
153
- const username_group = document.createElement('div');
154
- username_group.classList.add('form-floating');
155
- username_group.style.marginBottom = '1rem';
156
- const username_input = document.createElement('input');
157
- username_input.type = 'email';
158
- username_input.autocomplete = 'email';
159
- username_input.classList.add('form-control');
160
- username_input.id = 'login_username';
161
- username_input.placeholder = 'Username';
162
- username_input.required = true;
163
- username_input.addEventListener('input', () => this.username_input = username_input.value);
164
- username_group.appendChild(username_input);
165
- const username_label = document.createElement('label');
166
- username_label.htmlFor = 'login_username';
167
- username_label.textContent = 'Username';
168
- username_group.appendChild(username_label);
169
- form.appendChild(username_group);
170
- const password_group = document.createElement('div');
171
- password_group.classList.add('form-floating');
172
- password_group.style.marginBottom = '1rem';
173
- const password_input = document.createElement('input');
174
- password_input.type = 'password';
175
- password_input.autocomplete = 'current-password';
176
- password_input.classList.add('form-control');
177
- password_input.id = 'login_password';
178
- password_input.placeholder = 'Password';
179
- password_input.required = true;
180
- password_input.addEventListener('input', () => this.password_input = password_input.value);
181
- password_group.appendChild(password_input);
182
- const password_label = document.createElement('label');
183
- password_label.htmlFor = 'login_password';
184
- password_label.textContent = 'Password';
185
- password_group.appendChild(password_label);
186
- form.appendChild(password_group);
187
- const remember_group = document.createElement('div');
188
- remember_group.classList.add('form-check');
189
- remember_group.style.marginBottom = '1rem';
190
- const remember_input = document.createElement('input');
191
- remember_input.type = 'checkbox';
192
- remember_input.classList.add('form-check-input');
193
- remember_input.id = 'remember';
194
- remember_input.checked = this.remember_input;
195
- remember_input.addEventListener('input', () => this.remember_input = remember_input.checked);
196
- remember_group.appendChild(remember_input);
197
- const remember_label = document.createElement('label');
198
- remember_label.classList.add('form-check-label');
199
- remember_label.htmlFor = 'remember';
200
- remember_label.textContent = 'Remember me';
201
- remember_group.appendChild(remember_label);
202
- form.appendChild(remember_group);
203
- body.appendChild(form);
204
- content.appendChild(body);
205
- const footer = document.createElement('div');
206
- footer.classList.add('modal-footer');
207
- const close = document.createElement('button');
208
- close.type = 'button';
209
- close.classList.add('btn', 'btn-secondary');
210
- close.setAttribute('data-bs-dismiss', 'modal');
211
- close.textContent = 'Close';
212
- footer.appendChild(close);
213
- const submit = document.createElement('button');
214
- submit.type = 'submit';
215
- submit.classList.add('btn', 'btn-primary');
216
- submit.textContent = 'Log In';
217
- submit.addEventListener('click', () => this.login());
218
- footer.appendChild(submit);
219
- content.appendChild(footer);
220
- dialog.appendChild(content);
221
- this.node.appendChild(dialog);
222
- }
223
- login() {
224
- Connection.get_instance().login(this.username_input, this.password_input, this.remember_input)
225
- .then((result) => {
226
- if (result)
227
- Modal.getOrCreateInstance(this.node).hide();
228
- });
229
- }
230
- }
231
- /**
232
- * Modal to create a new user.
233
- */
234
- export class NewUserModal extends Component {
235
- constructor() {
236
- super(document.createElement('div'));
237
- this.username_input = '';
238
- this.password_input = '';
239
- this.confirm_password_input = '';
240
- this.on_hide = () => { var _a; (_a = this.node.parentElement) === null || _a === void 0 ? void 0 : _a.focus(); };
241
- this.node.classList.add('modal', 'fade');
242
- this.node.id = 'newUserModal';
243
- this.node.setAttribute('tabindex', '-1');
244
- this.node.setAttribute('aria-labelledby', 'newUserModalLabel');
245
- this.node.setAttribute('aria-hidden', 'true');
246
- this.node.addEventListener('hide.bs.modal', () => {
247
- if (this.on_hide)
248
- this.on_hide();
249
- });
250
- const dialog = document.createElement('div');
251
- dialog.classList.add('modal-dialog');
252
- const content = document.createElement('div');
253
- content.classList.add('modal-content');
254
- const header = document.createElement('div');
255
- header.classList.add('modal-header');
256
- const title = document.createElement('h5');
257
- title.classList.add('modal-title');
258
- title.id = 'newUserModalLabel';
259
- title.textContent = 'Create New User';
260
- header.appendChild(title);
261
- const close_button = document.createElement('button');
262
- close_button.type = 'button';
263
- close_button.classList.add('btn-close');
264
- close_button.setAttribute('data-bs-dismiss', 'modal');
265
- close_button.setAttribute('aria-label', 'Close');
266
- header.appendChild(close_button);
267
- content.appendChild(header);
268
- const body = document.createElement('div');
269
- body.classList.add('modal-body');
270
- const form = document.createElement('form');
271
- form.addEventListener('submit', (event) => {
272
- event.preventDefault();
273
- this.create_user();
274
- });
275
- const username_group = document.createElement('div');
276
- username_group.classList.add('form-floating');
277
- username_group.style.marginBottom = '1rem';
278
- const username_input = document.createElement('input');
279
- username_input.type = 'email';
280
- username_input.autocomplete = 'email';
281
- username_input.classList.add('form-control');
282
- username_input.id = 'newuser_username';
283
- username_input.placeholder = 'Username';
284
- username_input.required = true;
285
- username_input.addEventListener('input', () => this.username_input = username_input.value);
286
- username_group.appendChild(username_input);
287
- const username_label = document.createElement('label');
288
- username_label.htmlFor = 'newuser_username';
289
- username_label.textContent = 'Username';
290
- username_group.appendChild(username_label);
291
- form.appendChild(username_group);
292
- const password_group = document.createElement('div');
293
- password_group.classList.add('form-floating');
294
- password_group.style.marginBottom = '1rem';
295
- const password_input = document.createElement('input');
296
- password_input.type = 'password';
297
- password_input.autocomplete = 'current-password';
298
- password_input.classList.add('form-control');
299
- password_input.id = 'newuser_password';
300
- password_input.placeholder = 'Password';
301
- password_input.required = true;
302
- password_input.addEventListener('input', () => this.password_input = password_input.value);
303
- password_group.appendChild(password_input);
304
- const password_label = document.createElement('label');
305
- password_label.htmlFor = 'newuser_password';
306
- password_label.textContent = 'Password';
307
- password_group.appendChild(password_label);
308
- form.appendChild(password_group);
309
- const confirm_password_group = document.createElement('div');
310
- confirm_password_group.classList.add('form-floating');
311
- confirm_password_group.style.marginBottom = '1rem';
312
- const confirm_password_input = document.createElement('input');
313
- confirm_password_input.type = 'password';
314
- confirm_password_input.autocomplete = 'current-password';
315
- confirm_password_input.classList.add('form-control');
316
- confirm_password_input.id = 'confirm_password';
317
- confirm_password_input.placeholder = 'Confirm Password';
318
- confirm_password_input.required = true;
319
- confirm_password_input.addEventListener('input', () => this.confirm_password_input = confirm_password_input.value);
320
- confirm_password_group.appendChild(confirm_password_input);
321
- const confirm_password_label = document.createElement('label');
322
- confirm_password_label.htmlFor = 'confirm_password';
323
- confirm_password_label.textContent = 'Confirm Password';
324
- confirm_password_group.appendChild(confirm_password_label);
325
- form.appendChild(confirm_password_group);
326
- body.appendChild(form);
327
- content.appendChild(body);
328
- const footer = document.createElement('div');
329
- footer.classList.add('modal-footer');
330
- const close = document.createElement('button');
331
- close.type = 'button';
332
- close.classList.add('btn', 'btn-secondary');
333
- close.setAttribute('data-bs-dismiss', 'modal');
334
- close.textContent = 'Close';
335
- footer.appendChild(close);
336
- const submit = document.createElement('button');
337
- submit.type = 'submit';
338
- submit.classList.add('btn', 'btn-primary');
339
- submit.textContent = 'Create User';
340
- submit.addEventListener('click', () => this.create_user());
341
- footer.appendChild(submit);
342
- content.appendChild(footer);
343
- dialog.appendChild(content);
344
- this.node.appendChild(dialog);
345
- }
346
- create_user() {
347
- if (this.password_input !== this.confirm_password_input) {
348
- App.get_instance().toast('Passwords do not match.');
349
- return;
350
- }
351
- Connection.get_instance().create_user(this.username_input, this.password_input)
352
- .then((result) => {
353
- if (result)
354
- Modal.getOrCreateInstance(this.node).hide();
355
- });
356
- }
357
- }
358
- //# sourceMappingURL=user_components.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user_components.js","sourceRoot":"","sources":["../../src/utils/user_components.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAsB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAE7B;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,eAAqB;IAEtD;;;;OAIG;IACH,YAAY,WAAmB,cAAc;QAC3C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEhH,UAAU,CAAC,YAAY,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,SAAS,KAAW,CAAC;IACrB,SAAS,CAAC,KAAU;QAClB,mDAAmD;QACnD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IACnC,CAAC;IACD,gBAAgB,CAAC,QAAa,IAAU,CAAC;IACzC,UAAU;QACR,4CAA4C;QAC5C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;IAC3C,CAAC;IACD,YAAY,KAAW,CAAC;IACxB,gBAAgB,CAAC,MAAW,IAAU,CAAC;IAE9B,UAAU;QACjB,UAAU,CAAC,YAAY,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,eAAqB;IAEpD;;;;OAIG;IACH,YAAY,WAAmB,YAAY;QACzC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEhH,UAAU,CAAC,YAAY,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,SAAS,KAAW,CAAC;IACrB,SAAS,CAAC,KAAU;QAClB,mDAAmD;QACnD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IACnC,CAAC;IACD,gBAAgB,CAAC,QAAa,IAAU,CAAC;IACzC,UAAU;QACR,4CAA4C;QAC5C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;IAC3C,CAAC;IACD,YAAY,KAAW,CAAC;IACxB,gBAAgB,CAAC,MAAW,IAAU,CAAC;IAE9B,UAAU;QACjB,UAAU,CAAC,YAAY,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,eAAqB;IAErD;;OAEG;IACH;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAEjC,UAAU,CAAC,YAAY,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,SAAS,KAAW,CAAC;IACrB,SAAS,CAAC,KAAU;QAClB,2CAA2C;QAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;IAC3C,CAAC;IACD,gBAAgB,CAAC,QAAa,IAAU,CAAC;IACzC,UAAU;QACR,4CAA4C;QAC5C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IACnC,CAAC;IACD,YAAY,KAAW,CAAC;IACxB,gBAAgB,CAAC,MAAW,IAAU,CAAC;IAE9B,UAAU;QACjB,UAAU,CAAC,YAAY,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,SAAyB;IAWvD;QACE,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAV/B,mBAAc,GAAW,EAAE,CAAC;QAC5B,mBAAc,GAAW,EAAE,CAAC;QAC5B,mBAAc,GAAY,IAAI,CAAC;QASrC,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,WAAG,MAAA,IAAI,CAAC,IAAI,CAAC,aAAa,0CAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,YAAY,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,GAAG,EAAE;YAC/C,IAAI,IAAI,CAAC,OAAO;gBACd,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAEvC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAErC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3C,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACnC,KAAK,CAAC,EAAE,GAAG,iBAAiB,CAAC;QAC7B,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;QAC7B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE1B,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACtD,YAAY,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC7B,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxC,YAAY,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACtD,YAAY,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAEjC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE5B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAEjC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YACxC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrD,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC9C,cAAc,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;QAE3C,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACvD,cAAc,CAAC,IAAI,GAAG,OAAO,CAAC;QAC9B,cAAc,CAAC,YAAY,GAAG,OAAO,CAAC;QACtC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC7C,cAAc,CAAC,EAAE,GAAG,gBAAgB,CAAC;QACrC,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC;QACxC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC/B,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3F,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAE3C,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACvD,cAAc,CAAC,OAAO,GAAG,gBAAgB,CAAC;QAC1C,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC;QACxC,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAE3C,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAEjC,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrD,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC9C,cAAc,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;QAE3C,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACvD,cAAc,CAAC,IAAI,GAAG,UAAU,CAAC;QACjC,cAAc,CAAC,YAAY,GAAG,kBAAkB,CAAC;QACjD,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC7C,cAAc,CAAC,EAAE,GAAG,gBAAgB,CAAC;QACrC,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC;QACxC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC/B,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3F,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAE3C,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACvD,cAAc,CAAC,OAAO,GAAG,gBAAgB,CAAC;QAC1C,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC;QACxC,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAEjC,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrD,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC3C,cAAc,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;QAE3C,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACvD,cAAc,CAAC,IAAI,GAAG,UAAU,CAAC;QACjC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACjD,cAAc,CAAC,EAAE,GAAG,UAAU,CAAC;QAC/B,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;QAC7C,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7F,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAE3C,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACvD,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACjD,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC;QACpC,cAAc,CAAC,WAAW,GAAG,aAAa,CAAC;QAC3C,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAEjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEvB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE1B,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAErC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;QACtB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAC5C,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAC/C,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;QAC5B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE1B,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;QACvB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC;QAC9B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE3B,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE5B,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAEO,KAAK;QACX,UAAU,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC;aAC3F,IAAI,CAAC,CAAC,MAAe,EAAE,EAAE;YACxB,IAAI,MAAM;gBACR,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,SAAyB;IAWzD;QACE,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAV/B,mBAAc,GAAW,EAAE,CAAC;QAC5B,mBAAc,GAAW,EAAE,CAAC;QAC5B,2BAAsB,GAAW,EAAE,CAAC;QAS1C,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,WAAG,MAAA,IAAI,CAAC,IAAI,CAAC,aAAa,0CAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,cAAc,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,GAAG,EAAE;YAC/C,IAAI,IAAI,CAAC,OAAO;gBACd,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAEvC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAErC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3C,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACnC,KAAK,CAAC,EAAE,GAAG,mBAAmB,CAAC;QAC/B,KAAK,CAAC,WAAW,GAAG,iBAAiB,CAAC;QACtC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE1B,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACtD,YAAY,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC7B,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxC,YAAY,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACtD,YAAY,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAEjC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE5B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAEjC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YACxC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrD,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC9C,cAAc,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;QAE3C,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACvD,cAAc,CAAC,IAAI,GAAG,OAAO,CAAC;QAC9B,cAAc,CAAC,YAAY,GAAG,OAAO,CAAC;QACtC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC7C,cAAc,CAAC,EAAE,GAAG,kBAAkB,CAAC;QACvC,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC;QACxC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC/B,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3F,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAE3C,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACvD,cAAc,CAAC,OAAO,GAAG,kBAAkB,CAAC;QAC5C,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC;QACxC,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAE3C,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAEjC,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrD,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC9C,cAAc,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;QAE3C,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACvD,cAAc,CAAC,IAAI,GAAG,UAAU,CAAC;QACjC,cAAc,CAAC,YAAY,GAAG,kBAAkB,CAAC;QACjD,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC7C,cAAc,CAAC,EAAE,GAAG,kBAAkB,CAAC;QACvC,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC;QACxC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC/B,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3F,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAE3C,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACvD,cAAc,CAAC,OAAO,GAAG,kBAAkB,CAAC;QAC5C,cAAc,CAAC,WAAW,GAAG,UAAU,CAAC;QACxC,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAEjC,MAAM,sBAAsB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7D,sBAAsB,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACtD,sBAAsB,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;QAEnD,MAAM,sBAAsB,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/D,sBAAsB,CAAC,IAAI,GAAG,UAAU,CAAC;QACzC,sBAAsB,CAAC,YAAY,GAAG,kBAAkB,CAAC;QACzD,sBAAsB,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACrD,sBAAsB,CAAC,EAAE,GAAG,kBAAkB,CAAC;QAC/C,sBAAsB,CAAC,WAAW,GAAG,kBAAkB,CAAC;QACxD,sBAAsB,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvC,sBAAsB,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACnH,sBAAsB,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAE3D,MAAM,sBAAsB,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/D,sBAAsB,CAAC,OAAO,GAAG,kBAAkB,CAAC;QACpD,sBAAsB,CAAC,WAAW,GAAG,kBAAkB,CAAC;QACxD,sBAAsB,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAEzC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEvB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE1B,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAErC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;QACtB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAC5C,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAC/C,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;QAC5B,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE1B,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;QACvB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC;QACnC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE3B,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE5B,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACxD,GAAG,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QACD,UAAU,CAAC,YAAY,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC;aAC5E,IAAI,CAAC,CAAC,MAAe,EAAE,EAAE;YACxB,IAAI,MAAM;gBACR,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC;CACF"}