underpost 2.8.846 → 2.8.848

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.
Files changed (34) hide show
  1. package/README.md +15 -2
  2. package/bin/build.js +7 -1
  3. package/bin/deploy.js +7 -1
  4. package/cli.md +17 -2
  5. package/conf.js +1 -1
  6. package/docker-compose.yml +1 -1
  7. package/manifests/deployment/dd-template-development/deployment.yaml +2 -2
  8. package/package.json +1 -1
  9. package/src/api/user/user.service.js +1 -4
  10. package/src/cli/cluster.js +6 -0
  11. package/src/cli/deploy.js +2 -1
  12. package/src/cli/index.js +7 -0
  13. package/src/cli/run.js +9 -1
  14. package/src/cli/ssh.js +32 -0
  15. package/src/client/Default.index.js +6 -2
  16. package/src/client/components/core/Account.js +1 -1
  17. package/src/client/components/core/Css.js +190 -14
  18. package/src/client/components/core/CssCore.js +3 -4
  19. package/src/client/components/core/Docs.js +4 -4
  20. package/src/client/components/core/LoadingAnimation.js +8 -15
  21. package/src/client/components/core/Modal.js +100 -7
  22. package/src/client/components/core/PanelForm.js +2 -3
  23. package/src/client/components/core/Router.js +22 -23
  24. package/src/client/components/core/SocketIo.js +3 -3
  25. package/src/client/components/core/VanillaJs.js +0 -3
  26. package/src/client/components/core/Worker.js +3 -1
  27. package/src/client/components/default/CssDefault.js +17 -3
  28. package/src/client/components/default/MenuDefault.js +241 -48
  29. package/src/client/components/default/RoutesDefault.js +6 -11
  30. package/src/client/public/default/assets/background/dark.jpg +0 -0
  31. package/src/client/public/default/assets/background/dark.svg +557 -0
  32. package/src/client/public/default/assets/logo/underpost.gif +0 -0
  33. package/src/index.js +9 -1
  34. package/src/server/client-build.js +1 -8
@@ -1,7 +1,16 @@
1
1
  import { Account } from '../core/Account.js';
2
2
  import { BtnIcon } from '../core/BtnIcon.js';
3
3
  import { getId, newInstance } from '../core/CommonJs.js';
4
- import { Css, darkTheme, extractBackgroundImageUrl, ThemeEvents, Themes } from '../core/Css.js';
4
+ import {
5
+ borderChar,
6
+ boxShadow,
7
+ Css,
8
+ darkTheme,
9
+ extractBackgroundImageUrl,
10
+ renderCssAttr,
11
+ ThemeEvents,
12
+ Themes,
13
+ } from '../core/Css.js';
5
14
  import { EventsUI } from '../core/EventsUI.js';
6
15
  import { LogIn } from '../core/LogIn.js';
7
16
  import { LogOut } from '../core/LogOut.js';
@@ -35,6 +44,7 @@ const MenuDefault = {
35
44
  await Modal.Render({
36
45
  id: 'modal-menu',
37
46
  html: html`
47
+ <div class="style-lading-render"></div>
38
48
  <div class="fl menu-btn-container">
39
49
  ${await BtnIcon.Render({
40
50
  class: 'in wfa main-btn-menu main-btn-home main-btn-menu-active',
@@ -105,17 +115,6 @@ const MenuDefault = {
105
115
  handleContainerClass: 'handle-btn-container',
106
116
  tooltipHtml: await Badge.Render(buildBadgeToolTipMenuOption('settings')),
107
117
  })}
108
- ${await BtnIcon.Render({
109
- class: 'in wfa main-btn-menu main-btn-docs hide',
110
- label: renderMenuLabel({
111
- icon: html`<i class="fas fa-book"></i>`,
112
- text: html`<span class="menu-label-text">${Translate.Render('docs')}</span>`,
113
- }),
114
- attrs: `data-id="docs"`,
115
- tabHref: `${getProxyPath()}docs`,
116
- handleContainerClass: 'handle-btn-container',
117
- tooltipHtml: await Badge.Render(buildBadgeToolTipMenuOption('docs')),
118
- })}
119
118
  ${await BtnIcon.Render({
120
119
  class: 'in wfa main-btn-menu main-btn-recover hide',
121
120
  label: renderMenuLabel({
@@ -166,21 +165,67 @@ const MenuDefault = {
166
165
  title: NameApp,
167
166
  // titleClass: 'hide',
168
167
  titleRender: () => {
169
- setTimeout(() => {
170
- htmls(`.action-btn-app-icon-render`, html`APP`);
171
- });
168
+ ThemeEvents['titleRender'] = () => {
169
+ const srcLogo = `${getProxyPath()}apple-touch-icon-114x114-precomposed.png`;
170
+
171
+ htmls(
172
+ '.action-btn-app-icon-render',
173
+ html`<img class="inl top-bar-app-icon ${darkTheme ? 'negative-color' : ''}" src="${srcLogo}" />`,
174
+ );
175
+ };
176
+ setTimeout(ThemeEvents['titleRender']);
172
177
  return '';
173
178
  },
174
179
  mode: 'slide-menu',
175
180
  RouterInstance,
176
181
  heightTopBar,
177
182
  heightBottomBar,
178
- htmlMainBody: options?.htmlMainBody ? options.htmlMainBody : undefined,
183
+ htmlMainBody: async () => {
184
+ setTimeout(() => {
185
+ EventsUI.onClick('.get-started-button', (e) => {
186
+ e.preventDefault();
187
+ location.href = `https://www.nexodev.org/docs/?cid=src`;
188
+ });
189
+ });
190
+ return html`
191
+ <div class="landing-container">
192
+ <div class="content-wrapper">
193
+ <h1 class="animated-text">
194
+ <span class="greeting">Hello, World!</span>
195
+ <span class="subtitle">Welcome to Our Platform</span>
196
+ </h1>
197
+
198
+ <div class="features">
199
+ <div class="feature-card">
200
+ <i class="icon">🚀</i>
201
+ <h3>Fast & Reliable</h3>
202
+ <p>Lightning-fast performance with 99.9% uptime</p>
203
+ </div>
204
+ <div class="feature-card">
205
+ <i class="icon">🎨</i>
206
+ <h3>Beautiful UI</h3>
207
+ <p>Modern and intuitive user interface</p>
208
+ </div>
209
+ <div class="feature-card">
210
+ <i class="icon">⚡</i>
211
+ <h3>Powerful Features</h3>
212
+ <p>Everything you need in one place</p>
213
+ </div>
214
+ </div>
215
+
216
+ <button class="cta-button get-started-button">
217
+ Get Started
218
+ <span class="button-icon">→</span>
219
+ </button>
220
+ </div>
221
+ </div>
222
+ `;
223
+ },
179
224
  });
180
225
 
181
- ThemeEvents['ssr-background-image'] = () => {
226
+ ThemeEvents['main-theme-handler'] = () => {
182
227
  if (darkTheme) {
183
- const backgroundImage = `${getProxyPath()}assets/background/dark.jpg`;
228
+ const backgroundImage = `${getProxyPath()}assets/background/dark.svg`;
184
229
  htmls(
185
230
  `.style-ssr-background-image`,
186
231
  css`
@@ -200,9 +245,186 @@ const MenuDefault = {
200
245
  `,
201
246
  );
202
247
  }
248
+ htmls(
249
+ `.style-lading-render`,
250
+ html` <style>
251
+ .landing-container {
252
+ min-height: calc(100vh - ${heightTopBar + heightBottomBar}px);
253
+ display: flex;
254
+ /* align-items: center; */
255
+ justify-content: center;
256
+
257
+ padding: 2rem;
258
+ color: ${darkTheme ? '#fff' : '#333'};
259
+ transition: all 0.3s ease;
260
+ }
261
+
262
+ .content-wrapper {
263
+ text-align: center;
264
+ max-width: 1200px;
265
+ width: 100%;
266
+ padding: 2rem;
267
+ animation: fadeIn 1s ease-out;
268
+ }
269
+
270
+ .animated-text {
271
+ margin-bottom: 3rem;
272
+ }
273
+
274
+ .greeting {
275
+ display: block;
276
+ font-size: 3.5rem;
277
+ font-weight: 700;
278
+ margin-bottom: 1rem;
279
+ background: linear-gradient(90deg, #4f46e5, #7c3aed);
280
+ -webkit-background-clip: text;
281
+ -webkit-text-fill-color: transparent;
282
+ animation: slideIn 1s ease-out;
283
+ }
284
+
285
+ .subtitle {
286
+ display: block;
287
+ font-size: 1.5rem;
288
+ color: ${darkTheme ? '#a0aec0' : '#4a5568'};
289
+ margin-top: 1rem;
290
+ opacity: 0;
291
+ animation: fadeInUp 0.8s ease-out 0.3s forwards;
292
+ }
293
+
294
+ .features {
295
+ display: grid;
296
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
297
+ gap: 2rem;
298
+ margin: 4rem 0;
299
+ }
300
+
301
+ .feature-card {
302
+ background: ${darkTheme ? 'rgba(255, 255, 255, 0.05)' : 'white'};
303
+ padding: 2rem;
304
+ border-radius: 12px;
305
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
306
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
307
+ opacity: 0;
308
+ animation: fadeInUp 0.6s ease-out forwards;
309
+ }
310
+
311
+ .feature-card:nth-child(1) {
312
+ animation-delay: 0.5s;
313
+ }
314
+ .feature-card:nth-child(2) {
315
+ animation-delay: 0.7s;
316
+ }
317
+ .feature-card:nth-child(3) {
318
+ animation-delay: 0.9s;
319
+ }
320
+
321
+ .feature-card:hover {
322
+ transform: translateY(-5px);
323
+ box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);
324
+ }
325
+
326
+ .feature-card .icon {
327
+ font-size: 2.5rem;
328
+ margin-bottom: 1rem;
329
+ display: inline-block;
330
+ }
331
+
332
+ .feature-card h3 {
333
+ font-size: 1.25rem;
334
+ margin-bottom: 0.75rem;
335
+ color: ${darkTheme ? '#e2e8f0' : '#2d3748'};
336
+ }
337
+
338
+ .feature-card p {
339
+ color: ${darkTheme ? '#a0aec0' : '#4a5568'};
340
+ line-height: 1.6;
341
+ }
342
+
343
+ .cta-button {
344
+ background: linear-gradient(90deg, #4f46e5, #7c3aed);
345
+ color: white;
346
+ border: none;
347
+ padding: 1rem 2.5rem;
348
+ font-size: 1.1rem;
349
+ border-radius: 50px;
350
+ cursor: pointer;
351
+ display: inline-flex;
352
+ align-items: center;
353
+ gap: 0.5rem;
354
+ transition: all 0.3s ease;
355
+ box-shadow: 0 4px 15px rgba(79, 70, 229, 0.3);
356
+ opacity: 0;
357
+ animation: fadeIn 0.8s ease-out 1.2s forwards;
358
+ }
359
+
360
+ .cta-button:hover {
361
+ transform: translateY(-2px);
362
+ box-shadow: 0 6px 20px rgba(79, 70, 229, 0.4);
363
+ background: linear-gradient(90deg, #3e38b4, #602bbc);
364
+ color: white;
365
+ }
366
+
367
+ .cta-button:active {
368
+ transform: translateY(0);
369
+ }
370
+
371
+ .button-icon {
372
+ transition: transform 0.3s ease;
373
+ }
374
+
375
+ .cta-button:hover .button-icon {
376
+ transform: translateX(4px);
377
+ }
378
+
379
+ @keyframes fadeIn {
380
+ from {
381
+ opacity: 0;
382
+ }
383
+ to {
384
+ opacity: 1;
385
+ }
386
+ }
387
+
388
+ @keyframes fadeInUp {
389
+ from {
390
+ opacity: 0;
391
+ transform: translateY(20px);
392
+ }
393
+ to {
394
+ opacity: 1;
395
+ transform: translateY(0);
396
+ }
397
+ }
398
+
399
+ @keyframes slideIn {
400
+ from {
401
+ opacity: 0;
402
+ transform: translateX(-30px);
403
+ }
404
+ to {
405
+ opacity: 1;
406
+ transform: translateX(0);
407
+ }
408
+ }
409
+
410
+ @media (max-width: 768px) {
411
+ .greeting {
412
+ font-size: 2.5rem;
413
+ }
414
+
415
+ .subtitle {
416
+ font-size: 1.25rem;
417
+ }
418
+
419
+ .features {
420
+ grid-template-columns: 1fr;
421
+ }
422
+ }
423
+ </style>`,
424
+ );
203
425
  };
204
426
 
205
- setTimeout(ThemeEvents['ssr-background-image']);
427
+ setTimeout(ThemeEvents['main-theme-handler']);
206
428
 
207
429
  this.Data[id].sortable = new Sortable(s(`.menu-btn-container`), {
208
430
  animation: 150,
@@ -363,35 +585,6 @@ const MenuDefault = {
363
585
  });
364
586
  });
365
587
 
366
- EventsUI.onClick(`.main-btn-docs`, async () => {
367
- const { barConfig } = await Themes[Css.currentTheme]();
368
- await Modal.Render({
369
- id: 'modal-docs',
370
- route: 'docs',
371
- barConfig,
372
- title: renderViewTitle({
373
- icon: html`<i class="fas fa-book"></i>`,
374
- text: Translate.Render('docs'),
375
- }),
376
- html: async () =>
377
- await Docs.Init({
378
- idModal: 'modal-docs',
379
- modalOptions: {
380
- barMode: undefined,
381
- },
382
- }),
383
- handleType: 'bar',
384
- observer: true,
385
- maximize: true,
386
- mode: 'view',
387
- slideMenu: 'modal-menu',
388
- RouterInstance,
389
- heightTopBar,
390
- heightBottomBar,
391
- barMode,
392
- });
393
- });
394
-
395
588
  EventsUI.onClick(`.main-btn-recover`, async () => {
396
589
  const { barConfig } = await Themes[Css.currentTheme]();
397
590
  await Modal.Render({
@@ -4,7 +4,7 @@ import { getProxyPath, s } from '../core/VanillaJs.js';
4
4
 
5
5
  const logger = loggerFactory(import.meta);
6
6
 
7
- const NameApp = html`Default`;
7
+ const NameApp = html`<strong class="inl" style="font-family: system-ui">PWA</strong>`;
8
8
 
9
9
  // Router
10
10
  const RoutesDefault = () => {
@@ -15,27 +15,22 @@ const RoutesDefault = () => {
15
15
  upperCase: false,
16
16
  },
17
17
  '/home': { title: 'home', render: () => Modal.onHomeRouterEvent() },
18
- '/settings': { title: 'settings', render: () => s(`.main-btn-settings`).click(), translateTitle: true },
19
- '/log-in': { title: 'log-in', render: () => s(`.main-btn-log-in`).click(), translateTitle: true },
20
- '/sign-up': { title: 'sign-up', render: () => s(`.main-btn-sign-up`).click(), translateTitle: true },
18
+ '/settings': { title: 'settings', render: () => s(`.main-btn-settings`).click() },
19
+ '/log-in': { title: 'log-in', render: () => s(`.main-btn-log-in`).click() },
20
+ '/sign-up': { title: 'sign-up', render: () => s(`.main-btn-sign-up`).click() },
21
21
  '/log-out': {
22
22
  title: 'log-out',
23
23
  render: () => s(`.main-btn-log-out`).click(),
24
- hideDisplay: true,
25
- translateTitle: true,
26
24
  },
27
25
  '/account': {
28
26
  title: 'account',
29
27
  render: () => s(`.main-btn-account`).click(),
30
- hideDisplay: true,
31
- translateTitle: true,
32
28
  },
33
- '/docs': { title: 'docs', render: () => s(`.main-btn-docs`).click(), translateTitle: true },
34
- '/recover': { title: 'recover', render: () => s(`.main-btn-recover`).click(), translateTitle: true },
29
+ '/docs': { title: 'docs', render: () => s(`.main-btn-docs`).click() },
30
+ '/recover': { title: 'recover', render: () => s(`.main-btn-recover`).click() },
35
31
  '/default-management': {
36
32
  title: 'default-management',
37
33
  render: () => s(`.main-btn-default-management`).click(),
38
- translateTitle: true,
39
34
  },
40
35
  '/404': { title: '404 Not Found', render: () => s(`.main-btn-404`).click() },
41
36
  '/500': { title: '500 Server Error', render: () => s(`.main-btn-500`).click() },