layerpro 3.1.5 → 3.3.0

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.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # [LayerPro](https://npmjs.com/package/layerpro)
1
+ # LayerPro
2
2
 
3
3
  ![layerpro](https://raw.githubusercontent.com/passariello/container/be0611e9bead336dcec32d522d103e7e3661f502/layerpro/assets/logos/logo.svg)
4
4
 
@@ -7,42 +7,50 @@
7
7
 
8
8
  ![Snyk](https://img.shields.io/badge/Snyk-gray?logo=Snyk)
9
9
  ![Socket](https://img.shields.io/badge/Socket-gray?logo=Socket)
10
-
11
10
  ![Node.js](https://img.shields.io/badge/Node.js-gray?logo=node.js)
12
11
  ![Browser](https://img.shields.io/badge/Browser-gray?logo=google-chrome)
13
12
  ![Deno](https://img.shields.io/badge/Deno-gray?logo=deno)
14
13
  ![tsup](https://img.shields.io/badge/tsup-gray?logo=esbuild)
15
-
16
14
  ![React](https://img.shields.io/badge/React-gray?logo=React)
17
15
  ![TypeScript](https://img.shields.io/badge/TypeScript-gray?logo=typescript)
18
16
  ![Javascript](https://img.shields.io/badge/Javascript-gray?logo=Javascript)
19
-
20
17
  ![Vitest](https://img.shields.io/badge/Vitest-gray?logo=vitest)
21
18
  ![OXlint](https://img.shields.io/badge/Oxlint-gray?logo=oxc)
22
19
  ![Playwright](https://img.shields.io/badge/Playwright-gray?logo=playwright)
23
20
 
24
- ---
25
-
26
- ## What is LayerPro?
27
-
28
- LayerPro replaces the boring browser `alert()`, `confirm()`, and `prompt()` with beautiful, customizable modals that work everywhere.
29
-
30
- No more ugly popup boxes. No more blocking the main thread. Just clean, modern modals that your users will love.
21
+ LayerPro replaces the browser's native `alert()`, `confirm()`, and `prompt()` with beautiful, fully customizable modals that work everywhere — no more blocking the main thread, no more default browser styling.
22
+
23
+ ## Table of Contents
24
+
25
+ - [Features](#features)
26
+ - [Installation](#installation)
27
+ - [Quick Start](#quick-start)
28
+ - [Usage](#usage)
29
+ - [Basic Modals](#basic-modals)
30
+ - [Custom Popups](#custom-popups)
31
+ - [React Components](#react-components)
32
+ - [The `body` Parameter](#the-body-parameter)
33
+ - [Options](#options)
34
+ - [Global Overrides](#global-overrides)
35
+ - [Methods](#methods)
36
+ - [Styling & z-index](#styling--z-index)
37
+ - [Security](#security)
38
+ - [Browser Support](#browser-support)
39
+ - [Contributing](#contributing)
40
+ - [License](#license)
31
41
 
32
42
  ---
33
43
 
34
44
  ## Features
35
45
 
36
- - **Zero runtime dependencies**: no jQuery — pure vanilla DOM helpers; React/react-dom are external and only used to render the modal body
37
- - **Multiple modal types**: alert, confirm, prompt, message
38
- - **Fully customizable**: appearance, behavior, and content
39
- - **Dockable windows (taskbar style)**: click a dock icon to restore, focus, or minimize — just like an OS taskbar
40
- - **Draggable & Resizable**: instant, with no transition lag while resizing
41
- - **Maximize is pure CSS**: uses `position: fixed` + insets, so it follows the viewport with no JS resize listeners
42
- - **Fade in/out** transitions for open/close
43
- - **TypeScript support**: full type definitions
44
-
45
- ---
46
+ - **Zero runtime dependencies** — no jQuery, pure vanilla DOM helpers; `react`/`react-dom` are peer dependencies, only loaded when React bodies are used, powered by [`reattach`](https://npmjs.com/package/reattach)
47
+ - **Multiple modal types** — alert, confirm, prompt, message
48
+ - **Fully customizable** — appearance, behavior, and content
49
+ - **Dockable windows** (taskbar-style) — click a dock icon to restore, focus, or minimize, just like an OS taskbar
50
+ - **Draggable & resizable** — instant, with no transition lag while resizing
51
+ - **CSS-only maximize** — uses `position: fixed` + insets, so it follows the viewport with no JS resize listeners
52
+ - **Fade in/out transitions** for open/close
53
+ - **Full TypeScript support**
46
54
 
47
55
  ## Installation
48
56
 
@@ -56,17 +64,15 @@ Or use directly in HTML:
56
64
  <script src="https://cdn.jsdelivr.net/npm/layerpro"></script>
57
65
  ```
58
66
 
59
- ---
60
-
61
67
  ## Quick Start
62
68
 
63
- Import LayerPro once in your app entry point:
69
+ Import LayerPro once, in your app's entry point:
64
70
 
65
71
  ```javascript
66
72
  import "layerpro";
67
73
  ```
68
74
 
69
- That's it. Now you have `alert()`, `confirm()`, `prompt()`, `message()`, and `popup()` globally available.
75
+ That's it — `alert()`, `confirm()`, `prompt()`, `message()`, and `popup()` are now available globally.
70
76
 
71
77
  The `popup` alias is a shorthand for `layerpro.popup`:
72
78
 
@@ -78,8 +84,6 @@ layerpro.popup.open({ id: 'myPopup', body: 'Hello World' });
78
84
  popup.open({ id: 'myPopup', body: 'Hello World' });
79
85
  ```
80
86
 
81
- ---
82
-
83
87
  ## Usage
84
88
 
85
89
  ### Basic Modals
@@ -100,8 +104,6 @@ message("Operation complete!");
100
104
 
101
105
  ### Custom Popups
102
106
 
103
- You can use either `layerpro.popup.open(...)` or the shorthand `popup.open(...)`:
104
-
105
107
  ```javascript
106
108
  popup.open({
107
109
  id: 'myModal',
@@ -114,38 +116,48 @@ popup.open({
114
116
  cancel: { text: "Cancel", cb: () => {} }
115
117
  }
116
118
  });
117
-
118
- // Or using the global alias:
119
- popup.open({
120
- id: 'myModal',
121
- name: 'My Modal',
122
- body: '<p>Your content here</p>',
123
- width: 450,
124
- height: 350,
125
- buttons: {
126
- confirm: { text: "OK", cb: () => {} },
127
- cancel: { text: "Cancel", cb: () => {} }
128
- }
129
- });
130
119
  ```
131
120
 
132
121
  ### React Components
133
122
 
134
- In a React environment, you can pass React components directly:
123
+ LayerPro's React adapter is powered by [`reattach`](https://npmjs.com/package/reattach), a zero-dependency library for mounting React components anywhere in the DOM. It handles root creation, automatic root reuse on duplicate-id reopen, **Context Bridging** across detached roots, and **auto-healing DOM** recovery — all without extra setup.
135
124
 
136
125
  ```jsx
137
126
  popup.open({
138
127
  id: 'reactModal',
139
128
  name: 'React Modal',
140
- body: <MyComponent />, // React element
129
+ body: <MyComponent />,
141
130
  width: 500,
142
131
  height: 400
143
132
  });
144
133
  ```
145
134
 
146
- ### The `body` Parameter
135
+ #### Advanced Options (React)
136
+
137
+ | Prop | Type | Default | Description |
138
+ |------|------|---------|-------------|
139
+ | `inheritContext` | `boolean` | `false` | Replays captured host React Context into the popup's root. Use `captureContext()` in your app to capture contexts, then set `inheritContext: true` on the popup. |
140
+ | `resilient` | `boolean` | `false` | Enables a `MutationObserver` that auto-heals the React mount container if external DOM mutations (htmx, jQuery, CMS AJAX) remove or replace it. |
141
+
142
+ ```jsx
143
+ // Host app: capture context
144
+ import { captureContext } from 'reattach'
145
+ function App() {
146
+ const theme = useContext(ThemeContext)
147
+ captureContext(ThemeContext, theme)
148
+ return <Toolbar />
149
+ }
150
+
151
+ // Popup: inherit host context
152
+ popup.open({
153
+ id: 'contextual',
154
+ body: <ThemedWidget />,
155
+ inheritContext: true,
156
+ resilient: true,
157
+ });
158
+ ```
147
159
 
148
- The `body` property accepts different content types:
160
+ ### The `body` Parameter
149
161
 
150
162
  | Type | Example |
151
163
  |------|---------|
@@ -153,19 +165,16 @@ The `body` property accepts different content types:
153
165
  | HTML string | `body: "<p>Hello</p>"` |
154
166
  | React element | `body: <Component />` |
155
167
 
156
- > **Note**: In React, always use elements (`<Component />`), not function calls (`Component()`).
157
-
158
- ---
168
+ > **Note**: in React, always use elements (`<Component />`), not function calls (`Component()`).
159
169
 
160
170
  ## Options
161
171
 
162
172
  ```typescript
163
173
  {
164
- id: string, // Unique ID (auto-generated as popup_1, popup_2, ... if omitted)
165
- body: any, // Content (text, HTML, or React)
166
- name: string, // Modal title
167
- icon: string, // Icon glyph — HTML entity (e.g. "&#9888;") or an HTML
168
- // string (e.g. '<i class="fa fa-star"></i>')
174
+ id: string, // Unique ID (auto-generated as popup_1, popup_2, ... if omitted)
175
+ body: any, // Content (text, HTML, or React)
176
+ name: string, // Modal title
177
+ icon: string, // Icon glyph — HTML entity (e.g. "&#9888;") or HTML string
169
178
 
170
179
  // Dimensions (defaults: width 340, height 220; minWidth 340, minHeight 220)
171
180
  width: number,
@@ -175,32 +184,34 @@ The `body` property accepts different content types:
175
184
  maxWidth: number,
176
185
  maxHeight: number,
177
186
 
178
- // Remote content (same-origin only for security)
179
- source: string, // URL to fetch HTML content from (same-origin enforced)
187
+ // Remote content (same-origin only, enforced)
188
+ source: string,
189
+
190
+ // React adapter (via reattach)
191
+ inheritContext: boolean,
192
+ resilient: boolean,
180
193
 
181
194
  // Position (numbers are px; strings applied as-is, e.g. "10%")
182
195
  top: number | string,
183
196
  left: number | string,
184
197
  right: number | string,
185
198
  bottom: number | string,
186
- center: boolean, // Center the popup in the viewport (adds a small
187
- // cascade offset per open window so stacks don't overlap)
199
+ center: boolean, // Center the popup (adds a small cascade offset per open window)
188
200
 
189
201
  // Animation
190
- fadeIn: number, // open fade duration (ms, default 100)
191
- fadeOut: number, // close fade duration (ms, default 100)
192
- timer: number, // auto-close after N ms
202
+ fadeIn: number, // open fade duration (ms, default 100)
203
+ fadeOut: number, // close fade duration (ms, default 100)
204
+ timer: number, // auto-close after N ms
193
205
 
194
206
  // Features
195
- movable: boolean, // draggable by the title bar
196
- resizable: boolean, // resize handles
197
- maximize: boolean, // double-click title bar to maximize
198
- iconize: boolean, // allow minimize to dock
199
- dockable: boolean, // show an icon in the dock bar
200
- close: boolean, // show the close button
201
- raised: boolean, // alias: modal — show a full-screen overlay that blocks
202
- // pointer events to the page underneath
203
- modal: boolean, // alias of raised
207
+ movable: boolean,
208
+ resizable: boolean,
209
+ maximize: boolean, // double-click title bar to maximize
210
+ iconize: boolean, // allow minimize to dock
211
+ dockable: boolean, // show an icon in the dock bar
212
+ close: boolean, // show the close button
213
+ raised: boolean, // alias: modal — full-screen overlay that blocks pointer events beneath
214
+ modal: boolean, // alias of raised
204
215
 
205
216
  // Buttons
206
217
  buttons: {
@@ -210,19 +221,13 @@ The `body` property accepts different content types:
210
221
  }
211
222
  ```
212
223
 
213
- > **`raised` / `modal`** injects a full-viewport overlay (`popup_raised_<id>`) that
214
- > intercepts every pointer event — the page underneath becomes unclickable until the
215
- > popup closes. This is modal behavior; both names are accepted.
224
+ > **`raised` / `modal`** injects a full-viewport overlay (`popup_raised_<id>`) that intercepts every pointer event — the page underneath becomes unclickable until the popup closes. Both names are accepted.
216
225
 
217
- > **Duplicate id** — opening a popup whose `id` already exists brings that window to
218
- > the front and refreshes its `body`/`buttons` instead of doing nothing.
219
-
220
- ---
226
+ > **Duplicate id** — opening a popup whose `id` already exists brings that window to the front and refreshes its `body`/`buttons` instead of doing nothing.
221
227
 
222
228
  ## Global Overrides
223
229
 
224
- Importing LayerPro replaces the native `alert`, `confirm`, and `prompt` globals with
225
- callback-based versions, and adds a `message` global:
230
+ Importing LayerPro replaces the native `alert`, `confirm`, and `prompt` globals with callback-based versions, and adds a `message` global:
226
231
 
227
232
  ```javascript
228
233
  import "layerpro";
@@ -233,49 +238,37 @@ prompt("Name?", name => {...}); // LayerPro prompt (callback, not a string r
233
238
  message("Done!"); // LayerPro message
234
239
  ```
235
240
 
236
- > **⚠️ Important:** the overridden `confirm()` no longer returns a `boolean` and
237
- > `prompt()` no longer returns a `string`. They are callback-based and return
238
- > `undefined`. Any third-party code that does `if (confirm("..."))` will silently
239
- > fall into the falsy branch. If your codebase depends on the native synchronous
240
- > return values, call **`layerpro.noGlobals()`** right after importing LayerPro to
241
- > restore the originals:
241
+ > **⚠️ Important:** the overridden `confirm()` no longer returns a `boolean`, and `prompt()` no longer returns a `string` — they are callback-based and return `undefined`. Any third-party code that does `if (confirm("..."))` will silently fall into the falsy branch. If your codebase depends on native synchronous return values, call **`layerpro.noGlobals()`** right after importing LayerPro to restore the originals:
242
242
  >
243
243
  > ```javascript
244
244
  > import "layerpro";
245
245
  > layerpro.noGlobals(); // restores native alert/confirm/prompt, drops `message`
246
246
  > ```
247
247
 
248
- ---
249
-
250
248
  ## Methods
251
249
 
252
250
  | Method | Description |
253
251
  |--------|-------------|
254
- | `popup.open(props)` | Open a modal; returns the props. Re-opens a same-id window to front + refreshes body. |
252
+ | `popup.open(props)` | Open a modal; returns the props. Re-opens a same-id window to front and refreshes its body. |
255
253
  | `popup.close(id)` | Close (and unmount) a modal. |
256
- | `popup.center(id, offset?)` | Center a modal in the viewport; optional pixel offset |
257
- | `popup.maximize(props)` | Toggle maximize (pure CSS) |
258
- | `popup.iconize(id)` | Toggle minimize to the dock |
259
- | `popup.index(id)` | Bring a modal to the front (select) |
260
- | `popup.zIndex()` | Get the next z-index counter value |
261
- | `popup.movable(props)` | Enable dragging |
262
- | `popup.resizable(props)` | Enable resizing |
263
- | `layerpro.noGlobals()` | Restore native `alert`/`confirm`/`prompt`; remove `message` |
264
-
265
- ---
254
+ | `popup.center(id, offset?)` | Center a modal in the viewport; optional pixel offset. |
255
+ | `popup.maximize(props)` | Toggle maximize (pure CSS). |
256
+ | `popup.iconize(id)` | Toggle minimize to the dock. |
257
+ | `popup.index(id)` | Bring a modal to the front (select). |
258
+ | `popup.zIndex()` | Get the next z-index counter value. |
259
+ | `popup.movable(props)` | Enable dragging. |
260
+ | `popup.resizable(props)` | Enable resizing. |
261
+ | `layerpro.noGlobals()` | Restore native `alert`/`confirm`/`prompt`; remove `message`. |
266
262
 
267
263
  ## Styling & z-index
268
264
 
269
- Popups live in a `#popup` container whose base z-index comes from the
270
- `--popup-z-index` CSS variable (default `1000`). Apps with their own stacking
271
- contexts can override it to shift the whole stack:
265
+ Popups live in a `#popup` container whose base z-index comes from the `--popup-z-index` CSS variable (default `1000`). Apps with their own stacking contexts can override it to shift the whole stack:
272
266
 
273
267
  ```scss
274
268
  :root { --popup-z-index: 100000; }
275
269
  ```
276
270
 
277
- The title bar, window surface, internal area, and body all read from CSS custom
278
- properties, so theming needs no `!important` or `[class^=popup_…]` selectors:
271
+ The title bar, window surface, internal area, and body all read from CSS custom properties, so theming needs no `!important` or fragile class selectors:
279
272
 
280
273
  | Variable | Applies to |
281
274
  |----------|-----------|
@@ -290,58 +283,25 @@ properties, so theming needs no `!important` or `[class^=popup_…]` selectors:
290
283
  | `--raised-background` | modal overlay |
291
284
  | `--popup-z-index` | base z-index for the stack |
292
285
 
293
- ---
294
-
295
- ## Methods
296
-
297
- | Method | Description |
298
- |--------|-------------|
299
- | `popup.open(props)` | Open a modal |
300
- | `popup.close(id)` | Close a modal |
301
- | `popup.center(id)` | Center modal |
302
- | `popup.maximize(id)` | Maximize modal |
303
- | `popup.iconize(id)` | Minimize to dock |
304
- | `popup.movable(id)` | Enable drag |
305
- | `popup.resizable(id)` | Enable resize |
286
+ ## Security
306
287
 
307
- ---
288
+ - **Same-origin fetch guard** — the `source` prop only accepts same-origin URLs; cross-origin requests are rejected before any network call is made, preventing SSRF and data exfiltration.
289
+ - **HTML escaping** — all user-provided text content (button labels, body content, titles) is automatically escaped via `escapeHtml()` to prevent XSS.
290
+ - **CSP-friendly** — no inline scripts or `eval()` are used. React components are rendered via `reattach.mount()` (backed by `createRoot()`).
291
+ - **Opt-out of global overrides** — call `layerpro.noGlobals()` after import to restore native `alert`, `confirm`, `prompt`, and remove the `message` global if your codebase depends on synchronous return values.
308
292
 
309
293
  ## Browser Support
310
294
 
311
295
  Chrome 80+ • Firefox 75+ • Safari 13+ • Edge 80+
312
296
 
313
- ---
314
-
315
- ## Security
316
-
317
- LayerPro includes several security measures:
318
-
319
- - **Same-origin fetch guard**: The `source` prop only accepts same-origin URLs. Cross-origin requests are rejected before any network call is made, preventing SSRF and data exfiltration.
320
-
321
- - **HTML escaping**: All user-provided text content (button labels, body content, titles) is automatically escaped via `escapeHtml()` to prevent XSS. HTML entities like `<`, `>`, `&`, `"` are converted to their safe equivalents.
322
-
323
- - **Content Security Policy friendly**: No inline scripts or `eval()` are used. React components are rendered via `createRoot()` with proper sanitization.
324
-
325
- - **No global pollution option**: Call `layerpro.noGlobals()` after import to restore native `alert`, `confirm`, `prompt` and remove the `message` global if your codebase depends on synchronous return values.
326
-
327
- ---
328
-
329
297
  ## Contributing
330
298
 
331
- LayerPro is **open source** and free for everyone. The current source is private,
332
- but **anyone is welcome to join**. If you'd like to contribute, propose changes,
333
- or just talk about the project, get in touch:
299
+ LayerPro's source is currently private, but contributions and discussion are welcome. Get in touch:
334
300
 
335
301
  - **Dario Passariello** — https://dario.passariello.ca/ — dariopassariello@gmail.com
336
302
 
337
- Participation is voluntary and free — everyone is free to take part.
338
-
339
- ---
340
-
341
303
  ## License
342
304
 
343
305
  MIT License
344
306
 
345
- ## Credits
346
-
347
- Copyrigth (c) [Dario Passariello](https://dario.passariello.ca/)
307
+ Copyright (c) [Dario Passariello](https://dario.passariello.ca/)
package/index.cjs CHANGED
@@ -1,6 +1,4 @@
1
- ;(()=>{const s=document.createElement("style");s.textContent="@layer layerpro {:root{--input-background-color:#444;--input-color:white;--button-background-color:#444;--button-color:white;--inputButton-fontSize:.8em;--resize-background-color:rgba(30,150,255,.5);--resize-shadow:0 0 10px rgba(30,150,255,.5);--dock-background-color:black;--dock-height:35px;--dock-sideLeft:10px;--dock-sideCenter:auto;--dock-sideRight:10px;--dock-icon-width:140px;--bar-background:linear-gradient( 45deg,#4a4a4f 60%,#AAA 100%);--bar-selected-background:linear-gradient( 45deg,#162858 60%,#224e918a 100%);--bar-color:#eee;--bar-border-bottom:2px solid #555;--bar-shadow:0 1px 1px #888;--window-background:gray;--window-shadow:0 0 10px rgba(0,0,0,.3);--window-border-radius:10px;--window-z-high-border:#278ed0;--window-z-high-shadow:0 0 15px rgba(0,0,0,.7);--internal-background:linear-gradient( 0deg,rgba(60,60,60,1) 0%,#4a4a4f 100%);--body-color:#eee;--body-background:transparent;--raised-background:rgba(0,0,0,.3);--popup-z-index:1000;--transition-time:.5s;--border-radius:25px;--corner-size:14px;--corner-border-radius:50%;--hover-opacity:1;--hover-filter:blur(3px);}#popup > [class^=popup_overflow],#popup > [class^=popup_bar_],#popup > [class^=popup_window_],#popup > [class^=popup_internal],#popup > [class^=popup_body],#popup{position:static;}#popup > [class^=popup_overflow],#popup > [class^=popup_bar_],#popup > [class^=popup_window_],#popup > [class^=popup_internal],#popup > [class^=popup_body],#popup,#popup_dock{will-change:transform,opacity,top,left,height,width;}#popup{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;}#popup .buttons{display:flex;position:absolute;left:0;right:0;bottom:0;height:40px;justify-content:space-evenly;align-items:center;}#popup .buttons button{all:unset;width:100%;height:100%;border-right:2px solid #636363;background:linear-gradient( 180deg,#000 0%,rgb(60,60,60) 100%);overflow:hidden;position:relative;color:var(--button-color);}#popup .buttons button:last-child{border-right:none;}#popup .buttons button img{filter:invert(1);opacity:0.5;width:15px;height:auto;margin-top:2px;}#popup .buttons button:hover{transition:all 0.3s ease;box-shadow:inset 0 0 5px rgb(0,0,0);text-shadow:0 0 15px rgb(255,255,255),0 0 3px rgb(255,255,255);}#popup .popup_bar_selected{background:var(--bar-selected-background) !important;}#popup .zHigh{border-top-color:var(--window-z-high-border) !important;box-shadow:var(--window-z-high-shadow) !important;border:1px solid rgba(0,0,0,0.05);}#popup [class*=popup_raised_]{position:absolute;inset:0;width:100%;height:100%;background-color:var(--raised-background);z-index:1;}#popup [class*=popup_window_]{position:absolute;inset:0;width:100%;height:100%;z-index:2;border-radius:var(--window-border-radius);box-shadow:var(--window-shadow);overflow:hidden;}#popup [class*=popup_overflow_]{position:absolute;inset:auto;z-index:3;border-radius:var(--window-border-radius);background:var(--window-background);}#popup .popup_bar,#popup [class*=popup_bar_]{display:flex;width:100%;height:36px;background:var(--bar-background);border-bottom:var(--bar-border-bottom);box-shadow:var(--bar-shadow);z-index:2;}#popup [class*=popup_drag_]{width:100%;padding:10px 0 0 10px;color:var(--bar-color);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}#popup [class*=popup_icon_]{padding:8px 0 0 10px;color:var(--bar-color);font-size:1.1em;}#popup [class*=popup_option_]{display:flex;margin-right:15px;}#popup [class*=popup_option_] button{position:relative;display:inline-block;width:36px;height:28px;color:white;border-radius:5px;margin:4px;transition:all 0.3s ease;background:transparent;}#popup [class*=popup_option_] button img{filter:invert(1);opacity:0.5;width:15px;height:auto;margin-top:2px;}#popup [class*=popup_option_] button:after{content:\"\";inset:0;display:block;position:absolute;background:linear-gradient( 180deg,#000 0%,rgb(60,60,60) 100%);border-radius:5px;z-index:-1;}#popup [class*=popup_option_] button:after{opacity:0;transition:opacity 0.3s ease-in-out;}#popup [class*=popup_option_] button:hover{background:rgba(255,255,255,0.1);box-shadow:inset 0 0 5px rgb(0,0,0);text-shadow:0 0 15px rgb(255,255,255),0 0 3px rgb(255,255,255);}#popup [class*=popup_option_] button:hover::after{opacity:1;}#popup [class*=popup_option_] button [class*=button_close_]:hover{background:rgb(255,0,0) !important;box-shadow:inset 0 0 25px rgb(255,255,255),0 0 35px rgb(255,0,0) !important;}#popup [class*=button_close_]:hover{background:rgb(255,0,0) !important;box-shadow:inset 0 0 25px rgb(255,255,255),0 0 35px rgb(255,0,0) !important;}#popup [class*=popup_internal_]{position:absolute;inset:37px 0 0 0;z-index:1;background:var(--internal-background);}#popup .popup_body,#popup [class*=popup_body_]{position:absolute;inset:0;color:var(--body-color);background:var(--body-background);text-align:center;}.popupMaxSize{position:absolute !important;width:100% !important;height:100% !important;inset:0 !important;margin:0 !important;padding:0 !important;border-radius:0 !important;}#popup_dock{position:absolute;bottom:0;left:0;right:0;height:var(--dock-height);background-color:var(--dock-background-color);border-top:1px solid rgba(255,255,255,0.521);}#popup_dock #popup_dock_icon{position:absolute;top:3px;left:3px;width:70px;height:var(--dock-height);}#popup_dock #popup_dock_list{position:absolute;top:3px;left:var(--dock-sideLeft);right:var(--dock-sideLeft);height:calc(var(--dock-height) - 5px);overflow-y:auto;text-align:right;display:flex;flex-direction:row;justify-content:flex-end;}#popup_dock #popup_dock_list [class^=icon_]{width:var(--dock-icon-width);float:left;padding:4px;color:white;margin:2px 3px 0 0;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start;filter:saturate(400%);}#popup_dock #popup_dock_list [class^=icon_]:hover{background-color:rgb(77,77,77);}#popup_dock #popup_dock_list [class^=icon_] span:nth-child(1){width:20%;text-align:center;color:#F60;}#popup_dock #popup_dock_list [class^=icon_] span:nth-child(2){width:80%;text-align:left;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}#popup_dock #popup_dock_list [class^=icon_] button{width:20px;height:20px;color:white;padding:4px;margin:0;display:flex;align-content:center;justify-content:center;font-size:0.7em;border:none;background:none;}#popup_dock #popup_dock_options{position:absolute;top:3px;right:10px;width:var(--dock-sideRight);height:var(--dock-height);}#popup .iconize:before,#popup .maximize:before,#popup .close:before{content:\"\";position:absolute;inset:0;background-repeat:no-repeat !important;background-position:center !important;background-size:50% !important;filter:invert(1);opacity:0.5;margin:0;padding:0;}#popup .iconize:before{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMjAiCiAgIGhlaWdodD0iMjAiCiAgIHZpZXdCb3g9IjAgMCA1LjI5MTY2NjUgNS4yOTE2NjY4IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmczNzY4IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjEuMSAoM2JmNWFlMGQyNSwgMjAyMS0wOS0yMCkiCiAgIHNvZGlwb2RpOmRvY25hbWU9Imljb25pemUuc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzMzc2MiIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iNS42IgogICAgIGlua3NjYXBlOmN4PSI5LjkxMDcxNDMiCiAgICAgaW5rc2NhcGU6Y3k9IjY4LjM5Mjg1NyIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICB1bml0cz0icHgiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMjciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhMzc2NSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtMjkxLjcwODMyKSI+CiAgICA8cmVjdAogICAgICAgcnk9IjAuNjk5MTc0MjMiCiAgICAgICB5PSIyOTMuNjkyNzgiCiAgICAgICB4PSIwLjI3NDg0NjczIgogICAgICAgaGVpZ2h0PSIxLjM5ODM0ODUiCiAgICAgICB3aWR0aD0iNC43NjI0OTk4IgogICAgICAgaWQ9InJlY3QzNzM2LTciCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZS13aWR0aDowLjEzMjk5MTg1IiAvPgogIDwvZz4KPC9zdmc+Cg==) !important;}#popup .maximize:before{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMjAiCiAgIGhlaWdodD0iMjAiCiAgIHZpZXdCb3g9IjAgMCA1LjI5MTY2NjUgNS4yOTE2NjY4IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmczNzY4IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjEuMSAoM2JmNWFlMGQyNSwgMjAyMS0wOS0yMCkiCiAgIHNvZGlwb2RpOmRvY25hbWU9Im1heGltaXplLnN2ZyIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczM3NjIiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSIKICAgICBpbmtzY2FwZTpjeD0iNC45ODc2MjgyIgogICAgIGlua3NjYXBlOmN5PSIyNS4zODAwODMiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgdW5pdHM9InB4IgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDI3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTM3NjUiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTI5MS43MDgzMikiPgogICAgPHJlY3QKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuMTQ3MDQ1NCIKICAgICAgIGlkPSJyZWN0MzczMiIKICAgICAgIHdpZHRoPSI0Ljc2MjQ5OTgiCiAgICAgICBoZWlnaHQ9IjQuNzYyNDk5OCIKICAgICAgIHg9IjAuMjkxODUyNTMiCiAgICAgICB5PSIyOTIuMDEwNDQiCiAgICAgICByeT0iMC42NjcxMjEyMyIgLz4KICA8L2c+Cjwvc3ZnPgo=) !important;}#popup .close:before{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMjAiCiAgIGhlaWdodD0iMjAiCiAgIHZpZXdCb3g9IjAgMCA1LjI5MTY2NjUgNS4yOTE2NjY4IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmczNzY4IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjEuMSAoM2JmNWFlMGQyNSwgMjAyMS0wOS0yMCkiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImNsb3NlLnN2ZyIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczM3NjIiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSIKICAgICBpbmtzY2FwZTpjeD0iNC45ODc2MjgyIgogICAgIGlua3NjYXBlOmN5PSIyNS4zODAwODMiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgdW5pdHM9InB4IgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDI3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTM3NjUiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTI5MS43MDgzMikiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuMTQ5MDI2NjMiCiAgICAgICBkPSJtIDAuOTY5NDI2NTUsMjkxLjk4MjY1IGMgLTAuMTczMTcsMCAtMC4zNDYzMSwwLjA2NjYgLTAuNDc5LDAuMTk5MjcgLTAuMjY1MzgsMC4yNjUzNyAtMC4yNjUzOCwwLjY5MjQ0IDAsMC45NTc4MSBsIDEuMjI0MjA5OTUsMS4yMjQxNyAtMS4yMjQyMDk5NSwxLjIyNDE3IGMgLTAuMjY1MzgsMC4yNjUzNyAtMC4yNjUzOCwwLjY5MjQ0IDAsMC45NTc4MSAwLjI2NTM4LDAuMjY1MzcgMC42OTI2MDk5NSwwLjI2NTM3IDAuOTU3OTg5OTUsMCBsIDEuMjI0MjEsLTEuMjI0MTcgMS4yMjQyMDgsMS4yMjQxNyBjIDAuMTMyNjkyLDAuMTMyNjggMC4zMDU4MywwLjE5OTI3IDAuNDc4OTkxLDAuMTk5MjcgMC4wNDMzLDAgMC4wODY3LC0wLjAwNCAwLjEyOTM3OSwtMC4wMTI1IDAuMTI3OTcxLC0wLjAyNDkgMC4yNTAxLC0wLjA4NzIgMC4zNDk2MiwtMC4xODY3NiAwLjAzMzIsLTAuMDMzMiAwLjA2MjMsLTAuMDY4NiAwLjA4NzEsLTAuMTA2MTQgMC4xNzQxNiwtMC4yNjMxOSAwLjE0NTA2OSwtMC42MTk0NiAtMC4wODcxLC0wLjg1MTY2IGwgLTEuMjI0MjA4LC0xLjIyNDE3IDEuMjI0MjA4LC0xLjIyNDE3IGMgMC4yNjUzNywtMC4yNjUzNyAwLjI2NTM3LC0wLjY5MjQ0IDAsLTAuOTU3ODEgLTAuMjY1Mzc5LC0wLjI2NTM3IC0wLjY5MjYxLC0wLjI2NTM3IC0wLjk1Nzk5LDAgbCAtMS4yMjQyMDgsMS4yMjQxNyAtMS4yMjQyMSwtMS4yMjQxNyBjIC0wLjEzMjY5LC0wLjEzMjY5IC0wLjMwNTgzLC0wLjE5OTI3IC0wLjQ3ODk4OTk1LC0wLjE5OTI3IHoiCiAgICAgICBpZD0icmVjdDM3MTUiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogIDwvZz4KPC9zdmc+Cg==) !important;}#popup > input,#popup > button,#popup > textarea,#popup > select{all:unset;}.popup_alert,.popup_message,.popup_prompt,.popup_confirm{height:calc(100% - 41px);box-shadow:0 1px 1px #888;overflow:auto;padding:20px;word-break:break-all;}.popup_alert input[type=text],.popup_message input[type=text],.popup_prompt input[type=text],.popup_confirm input[type=text]{position:relative;width:90%;height:35px;padding:5px;font-size:1.05em;border:2px solid rgba(0,0,0,0.3);border-radius:6px;color:#ddd;background-color:#4a4a4f;}.popup_window___alert #a___alert,.popup_window___alert #a___message,.popup_window___message #a___alert,.popup_window___message #a___message{width:100% !important;}.popup_window___prompt #a___alert,.popup_window___prompt #b___alert,.popup_window___prompt #a___message,.popup_window___prompt #b___message,.popup_window___confirm #a___alert,.popup_window___confirm #b___alert,.popup_window___confirm #a___message,.popup_window___confirm #b___message{width:50% !important;}.resize_0,.resize_1,.resize_2,.resize_3{position:absolute;background-color:var(--resize-background-color);border-radius:var(--border-radius);opacity:0;z-index:5000;transition:var(--transition-time);}.resize_0{top:-4px;left:0;width:100%;height:10px;cursor:n-resize;}.resize_1{top:0;right:-4px;width:10px;height:100%;cursor:e-resize;}.resize_2{bottom:-4px;left:0;width:100%;height:10px;cursor:n-resize;}.resize_3{top:0;left:-4px;width:10px;height:100%;cursor:e-resize;}.resize_corner_0,.resize_corner_1,.resize_corner_2,.resize_corner_3{position:absolute;background-color:var(--resize-background-color);border-radius:var(--border-radius);opacity:0;z-index:5000;transition:var(--transition-time);width:var(--corner-size);height:var(--corner-size);border-radius:var(--corner-border-radius);}.resize_corner_0{top:-4px;left:-4px;cursor:nw-resize;}.resize_corner_1{top:-4px;right:-4px;cursor:ne-resize;}.resize_corner_2{bottom:-4px;right:-4px;cursor:nw-resize;}.resize_corner_3{bottom:-4px;left:-4px;cursor:ne-resize;}.resize_0:hover,.resize_1:hover,.resize_2:hover,.resize_3:hover,.resize_corner_0:hover,.resize_corner_1:hover,.resize_corner_2:hover,.resize_corner_3:hover{opacity:var(--hover-opacity);filter:var(--hover-filter);box-shadow:var(--resize-shadow);transition:var(--transition-time);}#popup{}#popup::-webkit-scrollbar{width:10px;scroll-behavior:smooth;}#popup{}#popup::-webkit-scrollbar-track{-webkit-border-radius:2px;border-radius:2px;margin:5px;}#popup{}#popup::-webkit-scrollbar-thumb{-webkit-border-radius:2px;border-radius:2px;background:rgb(30,150,255) !important;}}";document.head.appendChild(s)})();"use strict";
2
-
3
- var e = Object.defineProperty, t = (t, o, i) => ((t, o, i) => o in t ? e(t, o, {
1
+ ;(()=>{const s=document.createElement("style");s.textContent="@layer layerpro {:root{--input-background-color:#444;--input-color:white;--button-background-color:#444;--button-color:white;--inputButton-fontSize:.8em;--resize-background-color:rgba(30,150,255,.5);--resize-shadow:0 0 10px rgba(30,150,255,.5);--dock-background-color:black;--dock-height:40px;--dock-sideLeft:10px;--dock-sideCenter:auto;--dock-sideRight:10px;--dock-icon-width:140px;--bar-background:linear-gradient( 45deg,#4a4a4f 60%,#AAA 100%);--bar-selected-background:linear-gradient( 45deg,#162858 60%,#224e918a 100%);--bar-color:#eee;--bar-border-bottom:2px solid #555;--bar-shadow:0 1px 1px #888;--window-background:gray;--window-shadow:0 0 10px rgba(0,0,0,.3);--window-border-radius:10px;--window-z-high-border:#278ed0;--window-z-high-shadow:0 0 15px rgba(0,0,0,.7);--internal-background:linear-gradient( 0deg,rgba(60,60,60,1) 0%,#4a4a4f 100%);--body-color:#eee;--body-background:transparent;--raised-background:rgba(0,0,0,.3);--popup-z-index:1000;--transition-time:.5s;--border-radius:25px;--corner-size:14px;--corner-border-radius:50%;--hover-opacity:1;--hover-filter:blur(3px);}#popup > [class^=popup_overflow],#popup > [class^=popup_bar_],#popup > [class^=popup_window_],#popup > [class^=popup_internal],#popup > [class^=popup_body],#popup{position:static;}#popup > [class^=popup_overflow],#popup > [class^=popup_bar_],#popup > [class^=popup_window_],#popup > [class^=popup_internal],#popup > [class^=popup_body],#popup,#popup_dock{will-change:transform,opacity,top,left,height,width;}#popup{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;}#popup .buttons{display:flex;position:absolute;left:0;right:0;bottom:0;height:40px;justify-content:space-evenly;align-items:center;}#popup .buttons button{all:unset;width:100%;height:100%;border-right:2px solid #636363;background:linear-gradient( 180deg,#000 0%,rgb(60,60,60) 100%);overflow:hidden;position:relative;color:var(--button-color);}#popup .buttons button:last-child{border-right:none;}#popup .buttons button img{filter:invert(1);opacity:0.5;width:15px;height:auto;margin-top:2px;}#popup .buttons button:hover{transition:all 0.3s ease;box-shadow:inset 0 0 5px rgb(0,0,0);text-shadow:0 0 15px rgb(255,255,255),0 0 3px rgb(255,255,255);}#popup .popup_bar_selected{background:var(--bar-selected-background) !important;}#popup .zHigh{border-top-color:var(--window-z-high-border) !important;box-shadow:var(--window-z-high-shadow) !important;border:1px solid rgba(0,0,0,0.05);}#popup [class*=popup_raised_]{position:absolute;inset:0;width:100%;height:100%;background-color:var(--raised-background);z-index:1;}#popup [class*=popup_window_]{position:absolute;inset:0;width:100%;height:100%;z-index:2;border-radius:var(--window-border-radius);box-shadow:var(--window-shadow);overflow:hidden;}#popup [class*=popup_overflow_]{position:absolute;inset:auto;z-index:3;border-radius:var(--window-border-radius);background:var(--window-background);}#popup .popup_bar,#popup [class*=popup_bar_]{display:flex;width:100%;height:36px;background:var(--bar-background);border-bottom:var(--bar-border-bottom);box-shadow:var(--bar-shadow);z-index:2;}#popup [class*=popup_drag_]{width:100%;padding:10px 0 0 10px;color:var(--bar-color);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}#popup [class*=popup_icon_]{padding:8px 0 0 10px;color:var(--bar-color);font-size:1.1em;}#popup [class*=popup_option_]{display:flex;margin-right:15px;}#popup [class*=popup_option_] button{position:relative;display:inline-block;width:36px;height:28px;color:white;border-radius:5px;margin:4px;transition:all 0.3s ease;background:transparent;}#popup [class*=popup_option_] button img{filter:invert(1);opacity:0.5;width:15px;height:auto;margin-top:2px;}#popup [class*=popup_option_] button:after{content:\"\";inset:0;display:block;position:absolute;background:linear-gradient( 180deg,#000 0%,rgb(60,60,60) 100%);border-radius:5px;z-index:-1;}#popup [class*=popup_option_] button:after{opacity:0;transition:opacity 0.3s ease-in-out;}#popup [class*=popup_option_] button:hover{background:rgba(255,255,255,0.1);box-shadow:inset 0 0 5px rgb(0,0,0);text-shadow:0 0 15px rgb(255,255,255),0 0 3px rgb(255,255,255);}#popup [class*=popup_option_] button:hover::after{opacity:1;}#popup [class*=popup_option_] button [class*=button_close_]:hover{background:rgb(255,0,0) !important;box-shadow:inset 0 0 25px rgb(255,255,255),0 0 35px rgb(255,0,0) !important;}#popup [class*=button_close_]:hover{background:rgb(255,0,0) !important;box-shadow:inset 0 0 25px rgb(255,255,255),0 0 35px rgb(255,0,0) !important;}#popup [class*=popup_internal_]{position:absolute;inset:37px 0 0 0;z-index:1;background:var(--internal-background);}#popup .popup_body,#popup [class*=popup_body_]{position:absolute;inset:0;color:var(--body-color);background:var(--body-background);text-align:center;}.popupMaxSize{position:absolute !important;width:100% !important;height:100% !important;inset:0 !important;margin:0 !important;padding:0 !important;border-radius:0 !important;}#popup_dock{position:absolute;bottom:0;left:0;right:0;height:var(--dock-height);background-color:var(--dock-background-color);border-top:1px solid rgba(255,255,255,0.521);}#popup_dock #popup_dock_icon{position:absolute;top:3px;left:3px;width:70px;height:var(--dock-height);}#popup_dock #popup_dock_list{position:absolute;top:3px;left:var(--dock-sideLeft);right:var(--dock-sideLeft);height:calc(var(--dock-height) - 5px);overflow-y:auto;text-align:right;display:flex;flex-direction:row;justify-content:flex-end;height:30px;}#popup_dock #popup_dock_list [class^=icon_]{width:var(--dock-icon-width);float:left;padding:4px;color:white;margin:2px 3px 0 0;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:flex-start;filter:saturate(400%);}#popup_dock #popup_dock_list [class^=icon_]:hover{background-color:rgb(77,77,77);}#popup_dock #popup_dock_list [class^=icon_] span:nth-child(1){width:20%;text-align:center;color:#F60;}#popup_dock #popup_dock_list [class^=icon_] span:nth-child(2){width:80%;text-align:left;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;}#popup_dock #popup_dock_list [class^=icon_] button{width:20px;height:20px;color:white;padding:4px;margin:0;display:flex;align-content:center;justify-content:center;font-size:0.7em;border:none;background:none;}#popup_dock #popup_dock_options{position:absolute;top:3px;right:10px;width:var(--dock-sideRight);height:var(--dock-height);}#popup .iconize:before,#popup .maximize:before,#popup .close:before{content:\"\";position:absolute;inset:0;background-repeat:no-repeat !important;background-position:center !important;background-size:50% !important;filter:invert(1);opacity:0.5;margin:0;padding:0;}#popup .iconize:before{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMjAiCiAgIGhlaWdodD0iMjAiCiAgIHZpZXdCb3g9IjAgMCA1LjI5MTY2NjUgNS4yOTE2NjY4IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmczNzY4IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjEuMSAoM2JmNWFlMGQyNSwgMjAyMS0wOS0yMCkiCiAgIHNvZGlwb2RpOmRvY25hbWU9Imljb25pemUuc3ZnIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzMzc2MiIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iNS42IgogICAgIGlua3NjYXBlOmN4PSI5LjkxMDcxNDMiCiAgICAgaW5rc2NhcGU6Y3k9IjY4LjM5Mjg1NyIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICB1bml0cz0icHgiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxOTIwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMjciCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiIC8+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhMzc2NSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtMjkxLjcwODMyKSI+CiAgICA8cmVjdAogICAgICAgcnk9IjAuNjk5MTc0MjMiCiAgICAgICB5PSIyOTMuNjkyNzgiCiAgICAgICB4PSIwLjI3NDg0NjczIgogICAgICAgaGVpZ2h0PSIxLjM5ODM0ODUiCiAgICAgICB3aWR0aD0iNC43NjI0OTk4IgogICAgICAgaWQ9InJlY3QzNzM2LTciCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZS13aWR0aDowLjEzMjk5MTg1IiAvPgogIDwvZz4KPC9zdmc+Cg==) !important;}#popup .maximize:before{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMjAiCiAgIGhlaWdodD0iMjAiCiAgIHZpZXdCb3g9IjAgMCA1LjI5MTY2NjUgNS4yOTE2NjY4IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmczNzY4IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjEuMSAoM2JmNWFlMGQyNSwgMjAyMS0wOS0yMCkiCiAgIHNvZGlwb2RpOmRvY25hbWU9Im1heGltaXplLnN2ZyIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczM3NjIiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSIKICAgICBpbmtzY2FwZTpjeD0iNC45ODc2MjgyIgogICAgIGlua3NjYXBlOmN5PSIyNS4zODAwODMiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgdW5pdHM9InB4IgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDI3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTM3NjUiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTI5MS43MDgzMikiPgogICAgPHJlY3QKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuMTQ3MDQ1NCIKICAgICAgIGlkPSJyZWN0MzczMiIKICAgICAgIHdpZHRoPSI0Ljc2MjQ5OTgiCiAgICAgICBoZWlnaHQ9IjQuNzYyNDk5OCIKICAgICAgIHg9IjAuMjkxODUyNTMiCiAgICAgICB5PSIyOTIuMDEwNDQiCiAgICAgICByeT0iMC42NjcxMjEyMyIgLz4KICA8L2c+Cjwvc3ZnPgo=) !important;}#popup .close:before{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMjAiCiAgIGhlaWdodD0iMjAiCiAgIHZpZXdCb3g9IjAgMCA1LjI5MTY2NjUgNS4yOTE2NjY4IgogICB2ZXJzaW9uPSIxLjEiCiAgIGlkPSJzdmczNzY4IgogICBpbmtzY2FwZTp2ZXJzaW9uPSIxLjEuMSAoM2JmNWFlMGQyNSwgMjAyMS0wOS0yMCkiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImNsb3NlLnN2ZyIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczM3NjIiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjcuOTE5NTk1OSIKICAgICBpbmtzY2FwZTpjeD0iNC45ODc2MjgyIgogICAgIGlua3NjYXBlOmN5PSIyNS4zODAwODMiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9Im1tIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgdW5pdHM9InB4IgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDI3IgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIiAvPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTM3NjUiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTI5MS43MDgzMikiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAuMTQ5MDI2NjMiCiAgICAgICBkPSJtIDAuOTY5NDI2NTUsMjkxLjk4MjY1IGMgLTAuMTczMTcsMCAtMC4zNDYzMSwwLjA2NjYgLTAuNDc5LDAuMTk5MjcgLTAuMjY1MzgsMC4yNjUzNyAtMC4yNjUzOCwwLjY5MjQ0IDAsMC45NTc4MSBsIDEuMjI0MjA5OTUsMS4yMjQxNyAtMS4yMjQyMDk5NSwxLjIyNDE3IGMgLTAuMjY1MzgsMC4yNjUzNyAtMC4yNjUzOCwwLjY5MjQ0IDAsMC45NTc4MSAwLjI2NTM4LDAuMjY1MzcgMC42OTI2MDk5NSwwLjI2NTM3IDAuOTU3OTg5OTUsMCBsIDEuMjI0MjEsLTEuMjI0MTcgMS4yMjQyMDgsMS4yMjQxNyBjIDAuMTMyNjkyLDAuMTMyNjggMC4zMDU4MywwLjE5OTI3IDAuNDc4OTkxLDAuMTk5MjcgMC4wNDMzLDAgMC4wODY3LC0wLjAwNCAwLjEyOTM3OSwtMC4wMTI1IDAuMTI3OTcxLC0wLjAyNDkgMC4yNTAxLC0wLjA4NzIgMC4zNDk2MiwtMC4xODY3NiAwLjAzMzIsLTAuMDMzMiAwLjA2MjMsLTAuMDY4NiAwLjA4NzEsLTAuMTA2MTQgMC4xNzQxNiwtMC4yNjMxOSAwLjE0NTA2OSwtMC42MTk0NiAtMC4wODcxLC0wLjg1MTY2IGwgLTEuMjI0MjA4LC0xLjIyNDE3IDEuMjI0MjA4LC0xLjIyNDE3IGMgMC4yNjUzNywtMC4yNjUzNyAwLjI2NTM3LC0wLjY5MjQ0IDAsLTAuOTU3ODEgLTAuMjY1Mzc5LC0wLjI2NTM3IC0wLjY5MjYxLC0wLjI2NTM3IC0wLjk1Nzk5LDAgbCAtMS4yMjQyMDgsMS4yMjQxNyAtMS4yMjQyMSwtMS4yMjQxNyBjIC0wLjEzMjY5LC0wLjEzMjY5IC0wLjMwNTgzLC0wLjE5OTI3IC0wLjQ3ODk4OTk1LC0wLjE5OTI3IHoiCiAgICAgICBpZD0icmVjdDM3MTUiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogIDwvZz4KPC9zdmc+Cg==) !important;}#popup > input,#popup > button,#popup > textarea,#popup > select{all:unset;}.popup_alert,.popup_message,.popup_prompt,.popup_confirm{height:calc(100% - 41px);box-shadow:0 1px 1px #888;overflow:auto;padding:20px;word-break:break-all;}.popup_alert input[type=text],.popup_message input[type=text],.popup_prompt input[type=text],.popup_confirm input[type=text]{position:relative;width:90%;height:35px;padding:5px;font-size:1.05em;border:2px solid rgba(0,0,0,0.3);border-radius:6px;color:#ddd;background-color:#4a4a4f;}.popup_window___alert #a___alert,.popup_window___alert #a___message,.popup_window___message #a___alert,.popup_window___message #a___message{width:100% !important;}.popup_window___prompt #a___alert,.popup_window___prompt #b___alert,.popup_window___prompt #a___message,.popup_window___prompt #b___message,.popup_window___confirm #a___alert,.popup_window___confirm #b___alert,.popup_window___confirm #a___message,.popup_window___confirm #b___message{width:50% !important;}.resize_0,.resize_1,.resize_2,.resize_3{position:absolute;background-color:var(--resize-background-color);border-radius:var(--border-radius);opacity:0;z-index:5000;transition:var(--transition-time);}.resize_0{top:-4px;left:0;width:100%;height:10px;cursor:n-resize;}.resize_1{top:0;right:-4px;width:10px;height:100%;cursor:e-resize;}.resize_2{bottom:-4px;left:0;width:100%;height:10px;cursor:n-resize;}.resize_3{top:0;left:-4px;width:10px;height:100%;cursor:e-resize;}.resize_corner_0,.resize_corner_1,.resize_corner_2,.resize_corner_3{position:absolute;background-color:var(--resize-background-color);border-radius:var(--border-radius);opacity:0;z-index:5000;transition:var(--transition-time);width:var(--corner-size);height:var(--corner-size);border-radius:var(--corner-border-radius);}.resize_corner_0{top:-4px;left:-4px;cursor:nw-resize;}.resize_corner_1{top:-4px;right:-4px;cursor:ne-resize;}.resize_corner_2{bottom:-4px;right:-4px;cursor:nw-resize;}.resize_corner_3{bottom:-4px;left:-4px;cursor:ne-resize;}.resize_0:hover,.resize_1:hover,.resize_2:hover,.resize_3:hover,.resize_corner_0:hover,.resize_corner_1:hover,.resize_corner_2:hover,.resize_corner_3:hover{opacity:var(--hover-opacity);filter:var(--hover-filter);box-shadow:var(--resize-shadow);transition:var(--transition-time);}#popup{}#popup::-webkit-scrollbar{width:10px;scroll-behavior:smooth;}#popup{}#popup::-webkit-scrollbar-track{-webkit-border-radius:2px;border-radius:2px;margin:5px;}#popup{}#popup::-webkit-scrollbar-thumb{-webkit-border-radius:2px;border-radius:2px;background:rgb(30,150,255) !important;}}";document.head.appendChild(s)})();var e = Object.defineProperty, t = (t, o, i) => ((t, o, i) => o in t ? e(t, o, {
4
2
  enumerable: !0,
5
3
  configurable: !0,
6
4
  writable: !0,
@@ -282,7 +280,8 @@ var b = e => {
282
280
  const t = document.querySelector(".popup_body_" + e.id);
283
281
  if (!t) return;
284
282
  "function" == typeof layerpro.popup.useReactAdapter ? layerpro.popup.useReactAdapter(e, t) : import("layerpro/react").then(o => {
285
- o.default && o.default(e, t, null);
283
+ const i = o.default;
284
+ i && i(e, t);
286
285
  }).catch(e => {});
287
286
  } else if ("string" == typeof e.body && e.body.trim().startsWith("<")) {
288
287
  const t = z(e.body);
@@ -351,8 +350,7 @@ var M = e => {
351
350
  "pointer-events": "none",
352
351
  "z-index": Y.zIndex() + 1
353
352
  });
354
- return f(".popup_window_" + e.id, "#popup") ? (Y.index(e), layerpro.popup.unmount(String(e.id)),
355
- k(e), T(e)) : (e => {
353
+ return f(".popup_window_" + e.id, "#popup") ? (Y.index(e), k(e), T(e)) : (e => {
356
354
  if ("function" == typeof e.body) return;
357
355
  const t = !0 === e.raised ? ".popup_raised_" + e.id : "#popup";
358
356
  m('[class^="popup_window_"]', t).forEach(e => e.removeClass("zHigh")), m('[class^="popup_bar_"]', t).forEach(e => e.removeClass("popup_bar_selected")),
@@ -383,11 +381,10 @@ var M = e => {
383
381
  layerpro.popup.center(e, o);
384
382
  }
385
383
  layerpro.popup.unmount = e => {
386
- const t = layerpro.popup.getReactRoots();
387
- if (t) {
388
- const o = t.get(e);
389
- o && (o.unmount(), t.delete(e));
390
- }
384
+ import("layerpro/react").then(t => {
385
+ const o = t.default;
386
+ o.unmount && o.unmount(String(e));
387
+ }).catch(() => {});
391
388
  }, layerpro.popup.cleanupEvents = e => {
392
389
  const t = y.get(e);
393
390
  t && (t.iconClick && f(`.icon_${e}`, "#popup_dock")?.off("click"), t.iconClose && f(`.icon_close_${e}`, "#popup_dock")?.off("click"),
@@ -395,7 +392,7 @@ var M = e => {
395
392
  t.buttonClose && f(`.button_close_${e}`)?.off("click"), t.escKey && g.off("keydown", {
396
393
  ns: `esc-${e}`
397
394
  }), y.delete(e));
398
- }, layerpro.popup.getReactRoots = () => null, layerpro.popup.abortSource = e => {
395
+ }, layerpro.popup.abortSource = e => {
399
396
  const t = v.get(e);
400
397
  t && (t.abort(), v.delete(e));
401
398
  }, b(`<div class="popup_bar_${e.id} popup_bar">`).appendTo(o).addClass("popup_bar_selected"),
package/index.css CHANGED
@@ -8,7 +8,7 @@
8
8
  --resize-background-color: rgba(30, 150, 255, .5);
9
9
  --resize-shadow: 0 0 10px rgba(30, 150, 255, .5);
10
10
  --dock-background-color: black;
11
- --dock-height: 35px;
11
+ --dock-height: 40px;
12
12
  --dock-sideLeft: 10px;
13
13
  --dock-sideCenter: auto;
14
14
  --dock-sideRight: 10px;
@@ -279,6 +279,7 @@
279
279
  display: flex;
280
280
  flex-direction: row;
281
281
  justify-content: flex-end;
282
+ height: 30px;
282
283
  }
283
284
  #popup_dock #popup_dock_list [class^=icon_] {
284
285
  width: var(--dock-icon-width);