@taon-dev/ui 21.0.29 → 21.0.30
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/assets/.gitkeep +0 -0
- package/assets/css/primeicons/fonts/primeicons.ttf +0 -0
- package/assets/css/primeicons/fonts/primeicons.woff +0 -0
- package/assets/css/primeicons/fonts/primeicons.woff2 +0 -0
- package/assets/generated/pwa/android-chrome-144x144.png +0 -0
- package/assets/generated/pwa/android-chrome-192x192.png +0 -0
- package/assets/generated/pwa/android-chrome-256x256.png +0 -0
- package/assets/generated/pwa/android-chrome-36x36.png +0 -0
- package/assets/generated/pwa/android-chrome-384x384.png +0 -0
- package/assets/generated/pwa/android-chrome-48x48.png +0 -0
- package/assets/generated/pwa/android-chrome-512x512.png +0 -0
- package/assets/generated/pwa/android-chrome-72x72.png +0 -0
- package/assets/generated/pwa/android-chrome-96x96.png +0 -0
- package/assets/generated/pwa/apple-touch-icon-1024x1024.png +0 -0
- package/assets/generated/pwa/apple-touch-icon-114x114.png +0 -0
- package/assets/generated/pwa/apple-touch-icon-120x120.png +0 -0
- package/assets/generated/pwa/apple-touch-icon-144x144.png +0 -0
- package/assets/generated/pwa/apple-touch-icon-152x152.png +0 -0
- package/assets/generated/pwa/apple-touch-icon-167x167.png +0 -0
- package/assets/generated/pwa/apple-touch-icon-180x180.png +0 -0
- package/assets/generated/pwa/apple-touch-icon-57x57.png +0 -0
- package/assets/generated/pwa/apple-touch-icon-60x60.png +0 -0
- package/assets/generated/pwa/apple-touch-icon-72x72.png +0 -0
- package/assets/generated/pwa/apple-touch-icon-76x76.png +0 -0
- package/assets/generated/pwa/apple-touch-icon-precomposed.png +0 -0
- package/assets/generated/pwa/apple-touch-icon.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1125x2436.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1136x640.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1170x2532.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1179x2556.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1242x2208.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1242x2688.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1284x2778.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1290x2796.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1334x750.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1488x2266.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1536x2048.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1620x2160.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1640x2160.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1668x2224.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1668x2388.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-1792x828.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-2048x1536.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-2048x2732.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-2160x1620.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-2160x1640.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-2208x1242.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-2224x1668.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-2266x1488.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-2388x1668.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-2436x1125.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-2532x1170.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-2556x1179.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-2688x1242.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-2732x2048.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-2778x1284.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-2796x1290.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-640x1136.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-750x1334.png +0 -0
- package/assets/generated/pwa/apple-touch-startup-image-828x1792.png +0 -0
- package/assets/generated/pwa/browserconfig.xml +12 -0
- package/assets/generated/pwa/favicon-16x16.png +0 -0
- package/assets/generated/pwa/favicon-32x32.png +0 -0
- package/assets/generated/pwa/favicon-48x48.png +0 -0
- package/assets/generated/pwa/favicon.ico +0 -0
- package/assets/generated/pwa/manifest.webmanifest +69 -0
- package/assets/generated/pwa/mstile-144x144.png +0 -0
- package/assets/generated/pwa/mstile-150x150.png +0 -0
- package/assets/generated/pwa/mstile-310x150.png +0 -0
- package/assets/generated/pwa/mstile-310x310.png +0 -0
- package/assets/generated/pwa/mstile-70x70.png +0 -0
- package/assets/generated/pwa/yandex-browser-50x50.png +0 -0
- package/assets/generated/pwa/yandex-browser-manifest.json +9 -0
- package/browser/fesm2022/ui-browser.mjs +1 -1
- package/browser/fesm2022/ui-browser.mjs.map +1 -1
- package/browser/package.json +1 -1
- package/browser/types/ui-browser.d.ts +1 -1
- package/browser-prod/fesm2022/ui-browser-prod.mjs +1 -1
- package/browser-prod/fesm2022/ui-browser-prod.mjs.map +1 -1
- package/browser-prod/package.json +1 -1
- package/browser-prod/types/ui-browser-prod.d.ts +1 -1
- package/full-dts/build-info._auto-generated_.d.ts +1 -1
- package/html/assets/generated/pwa/html-pwa.html +53 -53
- package/i18n/app.ts.de-DE.po +9 -0
- package/i18n/app.ts.en-US.po +9 -0
- package/i18n/app.ts.pl-PL.po +9 -0
- package/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib/build-info._auto-generated_.js +1 -1
- package/lib/i18n/my-organization-proj.ts.de-DE.po +9 -0
- package/lib/i18n/my-organization-proj.ts.en-US.po +9 -0
- package/lib/i18n/my-organization-proj.ts.pl-PL.po +9 -0
- package/lib/i18n/start-cli.ts.de-DE.po +9 -0
- package/lib/i18n/start-cli.ts.en-US.po +9 -0
- package/lib/i18n/start-cli.ts.pl-PL.po +9 -0
- package/lib/lib-info.md +8 -0
- package/lib/migrations/migrations-info.md +6 -0
- package/lib/package.json +1 -1
- package/lib/taon-admin-layout/i18n/taon-admin-layout.component.html.de-DE.po +13 -0
- package/lib/taon-admin-layout/i18n/taon-admin-layout.component.html.en-US.po +13 -0
- package/lib/taon-admin-layout/i18n/taon-admin-layout.component.html.pl-PL.po +13 -0
- package/lib/taon-admin-layout/i18n/taon-admin-layout.component.ts.de-DE.po +5 -0
- package/lib/taon-admin-layout/i18n/taon-admin-layout.component.ts.en-US.po +5 -0
- package/lib/taon-admin-layout/i18n/taon-admin-layout.component.ts.pl-PL.po +5 -0
- package/lib/taon-admin-layout/index.d.ts +1 -1
- package/lib/taon-admin-layout/index.js +2 -2
- package/lib/taon-admin-welcome/i18n/taon-admin-welcome.component.html.de-DE.po +9 -0
- package/lib/taon-admin-welcome/i18n/taon-admin-welcome.component.html.en-US.po +9 -0
- package/lib/taon-admin-welcome/i18n/taon-admin-welcome.component.html.pl-PL.po +9 -0
- package/lib/taon-admin-welcome/i18n/taon-admin-welcome.component.ts.de-DE.po +5 -0
- package/lib/taon-admin-welcome/i18n/taon-admin-welcome.component.ts.en-US.po +5 -0
- package/lib/taon-admin-welcome/i18n/taon-admin-welcome.component.ts.pl-PL.po +5 -0
- package/lib/taon-admin-welcome/index.d.ts +1 -1
- package/lib/taon-admin-welcome/index.js +2 -2
- package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.de-DE.po +9 -0
- package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.po +9 -0
- package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.po +9 -0
- package/lib/taon-backoffice-notifications/i18n/taon-error-details-dialog.component.html.de-DE.po +26 -0
- package/lib/taon-backoffice-notifications/i18n/taon-error-details-dialog.component.html.en-US.po +26 -0
- package/lib/taon-backoffice-notifications/i18n/taon-error-details-dialog.component.html.pl-PL.po +26 -0
- package/lib/taon-backoffice-notifications/i18n/taon-error-details-dialog.component.ts.de-DE.po +5 -0
- package/lib/taon-backoffice-notifications/i18n/taon-error-details-dialog.component.ts.en-US.po +5 -0
- package/lib/taon-backoffice-notifications/i18n/taon-error-details-dialog.component.ts.pl-PL.po +5 -0
- package/lib/taon-backoffice-notifications/i18n/taon-error-toast.component.ts.de-DE.po +9 -0
- package/lib/taon-backoffice-notifications/i18n/taon-error-toast.component.ts.en-US.po +9 -0
- package/lib/taon-backoffice-notifications/i18n/taon-error-toast.component.ts.pl-PL.po +9 -0
- package/lib/taon-confirm-dialog/i18n/taon-confirm-dialog.component.html.de-DE.po +13 -0
- package/lib/taon-confirm-dialog/i18n/taon-confirm-dialog.component.html.en-US.po +13 -0
- package/lib/taon-confirm-dialog/i18n/taon-confirm-dialog.component.html.pl-PL.po +13 -0
- package/lib/taon-confirm-dialog/i18n/taon-confirm-dialog.component.ts.de-DE.po +5 -0
- package/lib/taon-confirm-dialog/i18n/taon-confirm-dialog.component.ts.en-US.po +5 -0
- package/lib/taon-confirm-dialog/i18n/taon-confirm-dialog.component.ts.pl-PL.po +5 -0
- package/lib/taon-confirm-dialog/taon-confirm-dialog.md +34 -0
- package/lib/taon-datatable/i18n/taon-datatable.component.html.de-DE.po +33 -0
- package/lib/taon-datatable/i18n/taon-datatable.component.html.en-US.po +33 -0
- package/lib/taon-datatable/i18n/taon-datatable.component.html.pl-PL.po +33 -0
- package/lib/taon-datatable/i18n/taon-datatable.component.ts.de-DE.po +17 -0
- package/lib/taon-datatable/i18n/taon-datatable.component.ts.en-US.po +17 -0
- package/lib/taon-datatable/i18n/taon-datatable.component.ts.pl-PL.po +17 -0
- package/lib/taon-datatable/index.d.ts +1 -1
- package/lib/taon-datatable/index.js +2 -2
- package/lib/taon-detachable-dialog-content/i18n/taon-detached-window-content.component.ts.de-DE.po +9 -0
- package/lib/taon-detachable-dialog-content/i18n/taon-detached-window-content.component.ts.en-US.po +9 -0
- package/lib/taon-detachable-dialog-content/i18n/taon-detached-window-content.component.ts.pl-PL.po +9 -0
- package/lib/taon-detachable-dialog-content/taon-detachable-dialog-content.md +429 -0
- package/lib/taon-draggable-button-panel/i18n/taon-draggable-button-panel.component.html.de-DE.po +25 -0
- package/lib/taon-draggable-button-panel/i18n/taon-draggable-button-panel.component.html.en-US.po +25 -0
- package/lib/taon-draggable-button-panel/i18n/taon-draggable-button-panel.component.html.pl-PL.po +25 -0
- package/lib/taon-draggable-button-panel/i18n/taon-draggable-button-panel.component.ts.de-DE.po +9 -0
- package/lib/taon-draggable-button-panel/i18n/taon-draggable-button-panel.component.ts.en-US.po +9 -0
- package/lib/taon-draggable-button-panel/i18n/taon-draggable-button-panel.component.ts.pl-PL.po +9 -0
- package/lib/taon-draggable-button-panel/index.d.ts +1 -1
- package/lib/taon-draggable-button-panel/index.js +2 -2
- package/lib/taon-loading-content/i18n/taon-loading-content.component.html.de-DE.po +9 -0
- package/lib/taon-loading-content/i18n/taon-loading-content.component.html.en-US.po +9 -0
- package/lib/taon-loading-content/i18n/taon-loading-content.component.html.pl-PL.po +9 -0
- package/lib/taon-loading-content/i18n/taon-loading-content.component.ts.de-DE.po +5 -0
- package/lib/taon-loading-content/i18n/taon-loading-content.component.ts.en-US.po +5 -0
- package/lib/taon-loading-content/i18n/taon-loading-content.component.ts.pl-PL.po +5 -0
- package/lib/taon-purchase-status/i18n/taon-purchase-status.dialog.component.html.de-DE.po +19 -0
- package/lib/taon-purchase-status/i18n/taon-purchase-status.dialog.component.html.en-US.po +19 -0
- package/lib/taon-purchase-status/i18n/taon-purchase-status.dialog.component.html.pl-PL.po +19 -0
- package/lib/taon-purchase-status/i18n/taon-purchase-status.dialog.component.ts.de-DE.po +5 -0
- package/lib/taon-purchase-status/i18n/taon-purchase-status.dialog.component.ts.en-US.po +5 -0
- package/lib/taon-purchase-status/i18n/taon-purchase-status.dialog.component.ts.pl-PL.po +5 -0
- package/lib/taon-under-construction/i18n/taon-under-construction.component.html.de-DE.po +9 -0
- package/lib/taon-under-construction/i18n/taon-under-construction.component.html.en-US.po +9 -0
- package/lib/taon-under-construction/i18n/taon-under-construction.component.html.pl-PL.po +9 -0
- package/lib/taon-under-construction/i18n/taon-under-construction.component.ts.de-DE.po +13 -0
- package/lib/taon-under-construction/i18n/taon-under-construction.component.ts.en-US.po +13 -0
- package/lib/taon-under-construction/i18n/taon-under-construction.component.ts.pl-PL.po +13 -0
- package/lib-esm/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib-esm/lib/build-info._auto-generated_.js +1 -1
- package/lib-esm/lib/taon-admin-layout/index.d.ts +1 -1
- package/lib-esm/lib/taon-admin-layout/index.js +1 -1
- package/lib-esm/lib/taon-admin-welcome/index.d.ts +1 -1
- package/lib-esm/lib/taon-admin-welcome/index.js +1 -1
- package/lib-esm/lib/taon-datatable/index.d.ts +1 -1
- package/lib-esm/lib/taon-datatable/index.js +1 -1
- package/lib-esm/lib/taon-draggable-button-panel/index.d.ts +1 -1
- package/lib-esm/lib/taon-draggable-button-panel/index.js +1 -1
- package/lib-prod/build-info._auto-generated_.d.ts +1 -1
- package/lib-prod/build-info._auto-generated_.js +1 -1
- package/lib-prod/package.json +1 -1
- package/lib-prod/taon-admin-layout/index.d.ts +1 -1
- package/lib-prod/taon-admin-layout/index.js +1 -1
- package/lib-prod/taon-admin-welcome/index.d.ts +1 -1
- package/lib-prod/taon-admin-welcome/index.js +1 -1
- package/lib-prod/taon-datatable/index.d.ts +1 -1
- package/lib-prod/taon-datatable/index.js +1 -1
- package/lib-prod/taon-draggable-button-panel/index.d.ts +1 -1
- package/lib-prod/taon-draggable-button-panel/index.js +1 -1
- package/package.json +1 -1
- package/ts-source/browser-code/build-info._auto-generated_.ts +1 -1
- package/ts-source/browser-code-prod/build-info._auto-generated_.ts +1 -1
- package/ts-source/browser-code-prod/i18n/lib.translation.ts +1 -1
- package/ts-source/browser-code-prod/taon-admin-layout/i18n/taon-admin-layout.translation.ts +1 -1
- package/ts-source/browser-code-prod/taon-admin-welcome/i18n/taon-admin-welcome.translation.ts +1 -1
- package/ts-source/browser-code-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.translation.ts +1 -1
- package/ts-source/browser-code-prod/taon-confirm-dialog/i18n/taon-confirm-dialog.translation.ts +1 -1
- package/ts-source/browser-code-prod/taon-datatable/i18n/taon-datatable.translation.ts +1 -1
- package/ts-source/browser-code-prod/taon-detachable-dialog-content/i18n/taon-detachable-dialog-content.translation.ts +1 -1
- package/ts-source/browser-code-prod/taon-draggable-button-panel/i18n/taon-draggable-button-panel.translation.ts +1 -1
- package/ts-source/browser-code-prod/taon-loading-content/i18n/taon-loading-content.translation.ts +1 -1
- package/ts-source/browser-code-prod/taon-purchase-status/i18n/taon-purchase-status.translation.ts +1 -1
- package/ts-source/browser-code-prod/taon-under-construction/i18n/taon-under-construction.translation.ts +1 -1
- package/ts-source/websql-code/build-info._auto-generated_.ts +1 -1
- package/ts-source/websql-code-prod/build-info._auto-generated_.ts +1 -1
- package/ts-source/websql-code-prod/i18n/lib.translation.ts +1 -1
- package/ts-source/websql-code-prod/taon-admin-layout/i18n/taon-admin-layout.translation.ts +1 -1
- package/ts-source/websql-code-prod/taon-admin-welcome/i18n/taon-admin-welcome.translation.ts +1 -1
- package/ts-source/websql-code-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.translation.ts +1 -1
- package/ts-source/websql-code-prod/taon-confirm-dialog/i18n/taon-confirm-dialog.translation.ts +1 -1
- package/ts-source/websql-code-prod/taon-datatable/i18n/taon-datatable.translation.ts +1 -1
- package/ts-source/websql-code-prod/taon-detachable-dialog-content/i18n/taon-detachable-dialog-content.translation.ts +1 -1
- package/ts-source/websql-code-prod/taon-draggable-button-panel/i18n/taon-draggable-button-panel.translation.ts +1 -1
- package/ts-source/websql-code-prod/taon-loading-content/i18n/taon-loading-content.translation.ts +1 -1
- package/ts-source/websql-code-prod/taon-purchase-status/i18n/taon-purchase-status.translation.ts +1 -1
- package/ts-source/websql-code-prod/taon-under-construction/i18n/taon-under-construction.translation.ts +1 -1
- package/websql/fesm2022/ui-websql.mjs +1 -1
- package/websql/fesm2022/ui-websql.mjs.map +1 -1
- package/websql/package.json +1 -1
- package/websql/types/ui-websql.d.ts +1 -1
- package/websql-prod/fesm2022/ui-websql-prod.mjs +1 -1
- package/websql-prod/fesm2022/ui-websql-prod.mjs.map +1 -1
- package/websql-prod/package.json +1 -1
- package/websql-prod/types/ui-websql-prod.d.ts +1 -1
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
# Taon Detachable Dialog Content
|
|
2
|
+
|
|
3
|
+
`taon-detachable-dialog-content` allows a routed Taon Admin component
|
|
4
|
+
to create a persistent detached copy of itself.
|
|
5
|
+
|
|
6
|
+
Detached windows are independent Angular component instances and survive
|
|
7
|
+
normal Angular Router navigation.
|
|
8
|
+
|
|
9
|
+
This allows Taon Admin to behave like a small desktop workspace:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
TAON ADMIN
|
|
13
|
+
|
|
14
|
+
┌──── Users ──────────────┐
|
|
15
|
+
│ │
|
|
16
|
+
│ │
|
|
17
|
+
└─────────────────────────┘
|
|
18
|
+
|
|
19
|
+
┌──── Posts ──────────────┐
|
|
20
|
+
│ │
|
|
21
|
+
│ │
|
|
22
|
+
└─────────────────────────┘
|
|
23
|
+
|
|
24
|
+
┌──── Post #123 ─────────┐
|
|
25
|
+
│ │
|
|
26
|
+
│ │
|
|
27
|
+
└────────────────────────┘
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
You can detach `/users`, navigate to `/posts`, detach that page,
|
|
31
|
+
open `/cms/posts/123`, detach that page, and then navigate anywhere else.
|
|
32
|
+
|
|
33
|
+
All three detached components remain alive and can continue communicating
|
|
34
|
+
with the backend.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 1. Add the global detached windows host
|
|
39
|
+
|
|
40
|
+
The host MUST live outside the routed component tree.
|
|
41
|
+
|
|
42
|
+
For example, inside the main Taon Admin component:
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
@Component({
|
|
46
|
+
imports: [
|
|
47
|
+
RouterOutlet,
|
|
48
|
+
TaonDetachedWindowsHostComponent,
|
|
49
|
+
],
|
|
50
|
+
template: `
|
|
51
|
+
<router-outlet />
|
|
52
|
+
|
|
53
|
+
`,
|
|
54
|
+
})
|
|
55
|
+
export class TaonAdminComponent {}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Do NOT put `taon-detached-windows-host` inside a component that gets
|
|
59
|
+
destroyed during navigation.
|
|
60
|
+
|
|
61
|
+
There should normally be only one host.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 2. Make a page detachable
|
|
66
|
+
|
|
67
|
+
Example users component:
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
@Component({
|
|
71
|
+
selector: 'app-users',
|
|
72
|
+
standalone: true,
|
|
73
|
+
imports: [
|
|
74
|
+
TaonDetachableDialogContentComponent,
|
|
75
|
+
],
|
|
76
|
+
template: `
|
|
77
|
+
<taon-detachable-dialog-content
|
|
78
|
+
title="Users"
|
|
79
|
+
[component]="UsersComponent">
|
|
80
|
+
|
|
81
|
+
<h1>Users</h1>
|
|
82
|
+
|
|
83
|
+
<app-users-table />
|
|
84
|
+
|
|
85
|
+
</taon-detachable-dialog-content>
|
|
86
|
+
`,
|
|
87
|
+
})
|
|
88
|
+
export class UsersComponent {
|
|
89
|
+
readonly UsersComponent = UsersComponent;
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
The normal page displays:
|
|
94
|
+
|
|
95
|
+
```text
|
|
96
|
+
┌──────────────────────────────────── ↗ ┐
|
|
97
|
+
│ Users │
|
|
98
|
+
│ │
|
|
99
|
+
│ ... │
|
|
100
|
+
└───────────────────────────────────────┘
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Clicking `↗` creates another `UsersComponent`.
|
|
104
|
+
|
|
105
|
+
It does NOT move the existing DOM/component.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 3. Navigate somewhere else
|
|
110
|
+
|
|
111
|
+
After detaching Users:
|
|
112
|
+
|
|
113
|
+
```text
|
|
114
|
+
/users
|
|
115
|
+
↓
|
|
116
|
+
detach
|
|
117
|
+
↓
|
|
118
|
+
[ Users detached window ]
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
You can navigate to:
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
/posts
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
The original routed `UsersComponent` is destroyed normally.
|
|
128
|
+
|
|
129
|
+
The detached `UsersComponent` is NOT destroyed because it belongs to:
|
|
130
|
+
|
|
131
|
+
```text
|
|
132
|
+
TaonAdminComponent
|
|
133
|
+
│
|
|
134
|
+
├── RouterOutlet
|
|
135
|
+
│ └── PostsComponent
|
|
136
|
+
│
|
|
137
|
+
└── TaonDetachedWindowsHostComponent
|
|
138
|
+
└── UsersComponent
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## 4. Detach another page
|
|
144
|
+
|
|
145
|
+
Posts:
|
|
146
|
+
|
|
147
|
+
```ts
|
|
148
|
+
@Component({
|
|
149
|
+
selector: 'app-posts',
|
|
150
|
+
standalone: true,
|
|
151
|
+
imports: [
|
|
152
|
+
TaonDetachableDialogContentComponent,
|
|
153
|
+
],
|
|
154
|
+
template: `
|
|
155
|
+
<taon-detachable-dialog-content
|
|
156
|
+
title="Posts"
|
|
157
|
+
[component]="PostsComponent">
|
|
158
|
+
|
|
159
|
+
<app-posts-table />
|
|
160
|
+
|
|
161
|
+
</taon-detachable-dialog-content>
|
|
162
|
+
`,
|
|
163
|
+
})
|
|
164
|
+
export class PostsComponent {
|
|
165
|
+
readonly PostsComponent = PostsComponent;
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
You can now have:
|
|
170
|
+
|
|
171
|
+
```text
|
|
172
|
+
┌──── Users ──────────────┐
|
|
173
|
+
|
|
174
|
+
┌──── Posts ──────────────┐
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
at the same time.
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 5. Route parameters are copied
|
|
182
|
+
|
|
183
|
+
Consider:
|
|
184
|
+
|
|
185
|
+
```text
|
|
186
|
+
/cms/posts/123
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
with:
|
|
190
|
+
|
|
191
|
+
```ts
|
|
192
|
+
const id = inject(ActivatedRoute)
|
|
193
|
+
.snapshot
|
|
194
|
+
.params['id'];
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
When the page is detached, Taon captures the route state.
|
|
198
|
+
|
|
199
|
+
The detached component receives its own `ActivatedRoute` containing:
|
|
200
|
+
|
|
201
|
+
```ts
|
|
202
|
+
params = {
|
|
203
|
+
id: '123',
|
|
204
|
+
};
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Therefore the new component can load Post #123 normally.
|
|
208
|
+
|
|
209
|
+
Navigating afterward to:
|
|
210
|
+
|
|
211
|
+
```text
|
|
212
|
+
/cms/posts/456
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
does NOT change the detached window.
|
|
216
|
+
|
|
217
|
+
You can therefore have:
|
|
218
|
+
|
|
219
|
+
```text
|
|
220
|
+
┌──── Post #123 ────────┐
|
|
221
|
+
|
|
222
|
+
┌──── Post #456 ────────┐
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
simultaneously.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## 6. Query parameters
|
|
230
|
+
|
|
231
|
+
Query parameters are also captured.
|
|
232
|
+
|
|
233
|
+
For example:
|
|
234
|
+
|
|
235
|
+
```text
|
|
236
|
+
/users?page=5&search=john
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
creates a detached component with:
|
|
240
|
+
|
|
241
|
+
```ts
|
|
242
|
+
route.snapshot.queryParams
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
equivalent to:
|
|
246
|
+
|
|
247
|
+
```ts
|
|
248
|
+
{
|
|
249
|
+
page: '5',
|
|
250
|
+
search: 'john',
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
The detached route is intentionally independent from subsequent browser
|
|
255
|
+
navigation.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## 7. Database operations
|
|
260
|
+
|
|
261
|
+
A detached component is a REAL Angular component.
|
|
262
|
+
|
|
263
|
+
It can continue using normal Taon services/controllers:
|
|
264
|
+
|
|
265
|
+
```ts
|
|
266
|
+
await this.usersController
|
|
267
|
+
.update(user);
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
or:
|
|
271
|
+
|
|
272
|
+
```ts
|
|
273
|
+
this.postsController
|
|
274
|
+
.getAll();
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
There is nothing special about backend communication from a detached
|
|
278
|
+
window.
|
|
279
|
+
|
|
280
|
+
For example:
|
|
281
|
+
|
|
282
|
+
```text
|
|
283
|
+
Browser route:
|
|
284
|
+
|
|
285
|
+
/admin/settings
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
Desktop:
|
|
289
|
+
|
|
290
|
+
┌──── Users ───────────────────┐
|
|
291
|
+
│ John │
|
|
292
|
+
│ Kate │
|
|
293
|
+
│ Mark │
|
|
294
|
+
│ [delete] │
|
|
295
|
+
└──────────────────────────────┘
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
┌──── Posts ───────────────────┐
|
|
299
|
+
│ Hello World │
|
|
300
|
+
│ Taon documentation │
|
|
301
|
+
│ [edit] │
|
|
302
|
+
└─────────────────────────────┘
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
Both windows can still modify database data.
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## 8. Component state
|
|
310
|
+
|
|
311
|
+
Detaching creates a NEW component instance.
|
|
312
|
+
|
|
313
|
+
It does not transfer arbitrary local component state.
|
|
314
|
+
|
|
315
|
+
For example, if the routed component contains:
|
|
316
|
+
|
|
317
|
+
```ts
|
|
318
|
+
form.patchValue({
|
|
319
|
+
title: 'unsaved title',
|
|
320
|
+
});
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
the detached component will initialize normally and usually reload its
|
|
324
|
+
data from the backend.
|
|
325
|
+
|
|
326
|
+
The unsaved form value is NOT automatically copied.
|
|
327
|
+
|
|
328
|
+
This is intentional.
|
|
329
|
+
|
|
330
|
+
Route state is copied.
|
|
331
|
+
|
|
332
|
+
Component state is not.
|
|
333
|
+
|
|
334
|
+
State transfer can be implemented separately later if needed.
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## 9. Multiple instances
|
|
339
|
+
|
|
340
|
+
`TaonDetachedWindowsService` intentionally stores an array:
|
|
341
|
+
|
|
342
|
+
```ts
|
|
343
|
+
readonly windows =
|
|
344
|
+
signal<TaonDetachedWindow[]>([]);
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
There is no single-dialog restriction.
|
|
348
|
+
|
|
349
|
+
The following is valid:
|
|
350
|
+
|
|
351
|
+
```text
|
|
352
|
+
Users
|
|
353
|
+
Users filtered by admin
|
|
354
|
+
Posts
|
|
355
|
+
Post #123
|
|
356
|
+
Post #456
|
|
357
|
+
Permissions
|
|
358
|
+
Database
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
all open simultaneously.
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## Architecture
|
|
366
|
+
|
|
367
|
+
The important ownership model is:
|
|
368
|
+
|
|
369
|
+
```text
|
|
370
|
+
TaonAdminComponent
|
|
371
|
+
│
|
|
372
|
+
├── RouterOutlet
|
|
373
|
+
│
|
|
374
|
+
│ └── current routed page
|
|
375
|
+
│
|
|
376
|
+
│
|
|
377
|
+
└── TaonDetachedWindowsHostComponent
|
|
378
|
+
│
|
|
379
|
+
├── UsersComponent
|
|
380
|
+
│
|
|
381
|
+
├── PostsComponent
|
|
382
|
+
│
|
|
383
|
+
├── PostComponent (id=123)
|
|
384
|
+
│
|
|
385
|
+
└── PostComponent (id=456)
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
Angular Router controls only the first branch.
|
|
389
|
+
|
|
390
|
+
Detached windows belong to the second branch.
|
|
391
|
+
|
|
392
|
+
Therefore:
|
|
393
|
+
|
|
394
|
+
```text
|
|
395
|
+
router navigation
|
|
396
|
+
↓
|
|
397
|
+
destroys routed component
|
|
398
|
+
↓
|
|
399
|
+
does NOT destroy detached windows
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
## Future improvements
|
|
405
|
+
|
|
406
|
+
The detached-window infrastructure can later support:
|
|
407
|
+
|
|
408
|
+
- minimize
|
|
409
|
+
- maximize
|
|
410
|
+
- fullscreen
|
|
411
|
+
- z-index / bring-to-front
|
|
412
|
+
- remembered window position
|
|
413
|
+
- remembered window size
|
|
414
|
+
- taskbar
|
|
415
|
+
- window titles based on entity data
|
|
416
|
+
- restoring workspace after refresh
|
|
417
|
+
- duplicate prevention
|
|
418
|
+
- multiple instances of the same route
|
|
419
|
+
- synchronization/reload events between windows
|
|
420
|
+
- integration with Taon's existing draggable admin panel
|
|
421
|
+
|
|
422
|
+
A useful next abstraction would be:
|
|
423
|
+
|
|
424
|
+
```ts
|
|
425
|
+
TaonWorkspaceWindow
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
where detachable routed content is only one way of creating a workspace
|
|
429
|
+
window.
|
package/lib/taon-draggable-button-panel/i18n/taon-draggable-button-panel.component.html.de-DE.po
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
msgid ""
|
|
2
|
+
msgstr ""
|
|
3
|
+
"Language: de-DE\n"
|
|
4
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
5
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
6
|
+
|
|
7
|
+
#: src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html:58
|
|
8
|
+
msgid "Window mode"
|
|
9
|
+
msgstr "Fenstermodus"
|
|
10
|
+
|
|
11
|
+
#: src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html:68
|
|
12
|
+
msgid "Full screen"
|
|
13
|
+
msgstr "Vollbild"
|
|
14
|
+
|
|
15
|
+
#: src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html:78
|
|
16
|
+
msgid "Lock full screen"
|
|
17
|
+
msgstr "Vollbild sperren"
|
|
18
|
+
|
|
19
|
+
#: src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html:86
|
|
20
|
+
msgid "Unlock"
|
|
21
|
+
msgstr "Entsperren"
|
|
22
|
+
|
|
23
|
+
#: src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html:97
|
|
24
|
+
msgid "Close admin panel"
|
|
25
|
+
msgstr "Schließen Sie das Admin-Panel"
|
package/lib/taon-draggable-button-panel/i18n/taon-draggable-button-panel.component.html.en-US.po
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
msgid ""
|
|
2
|
+
msgstr ""
|
|
3
|
+
"Language: en-US\n"
|
|
4
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
5
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
6
|
+
|
|
7
|
+
#: src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html:58
|
|
8
|
+
msgid "Window mode"
|
|
9
|
+
msgstr ""
|
|
10
|
+
|
|
11
|
+
#: src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html:68
|
|
12
|
+
msgid "Full screen"
|
|
13
|
+
msgstr ""
|
|
14
|
+
|
|
15
|
+
#: src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html:78
|
|
16
|
+
msgid "Lock full screen"
|
|
17
|
+
msgstr ""
|
|
18
|
+
|
|
19
|
+
#: src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html:86
|
|
20
|
+
msgid "Unlock"
|
|
21
|
+
msgstr ""
|
|
22
|
+
|
|
23
|
+
#: src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html:97
|
|
24
|
+
msgid "Close admin panel"
|
|
25
|
+
msgstr "Close admin panel"
|
package/lib/taon-draggable-button-panel/i18n/taon-draggable-button-panel.component.html.pl-PL.po
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
msgid ""
|
|
2
|
+
msgstr ""
|
|
3
|
+
"Language: pl-PL\n"
|
|
4
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
5
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
6
|
+
|
|
7
|
+
#: src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html:58
|
|
8
|
+
msgid "Window mode"
|
|
9
|
+
msgstr "Tryb okna"
|
|
10
|
+
|
|
11
|
+
#: src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html:68
|
|
12
|
+
msgid "Full screen"
|
|
13
|
+
msgstr "Tryb pełnoekranowy"
|
|
14
|
+
|
|
15
|
+
#: src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html:78
|
|
16
|
+
msgid "Lock full screen"
|
|
17
|
+
msgstr "Tryb pełnoekranowy zablokowany"
|
|
18
|
+
|
|
19
|
+
#: src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html:86
|
|
20
|
+
msgid "Unlock"
|
|
21
|
+
msgstr "Odblokuj"
|
|
22
|
+
|
|
23
|
+
#: src/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html:97
|
|
24
|
+
msgid "Close admin panel"
|
|
25
|
+
msgstr "/ Zamknij panel admin"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function
|
|
1
|
+
export declare function dummy1794345890747(): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
function
|
|
3
|
+
exports.dummy1794345890747 = dummy1794345890747;
|
|
4
|
+
function dummy1794345890747() { }
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
msgid ""
|
|
2
|
+
msgstr ""
|
|
3
|
+
"Language: de-DE\n"
|
|
4
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
5
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
6
|
+
|
|
7
|
+
#: src/lib/taon-loading-content/taon-loading-content.component.html:11
|
|
8
|
+
msgid "Loading content..."
|
|
9
|
+
msgstr "Inhalte werden geladen..."
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
msgid ""
|
|
2
|
+
msgstr ""
|
|
3
|
+
"Language: de-DE\n"
|
|
4
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
5
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
6
|
+
|
|
7
|
+
#: src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html:2
|
|
8
|
+
#: src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html:4
|
|
9
|
+
msgid "Payment successful"
|
|
10
|
+
msgstr "Zahlung erfolgreich"
|
|
11
|
+
|
|
12
|
+
#: src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html:2
|
|
13
|
+
#: src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html:5
|
|
14
|
+
msgid "Payment cancelled"
|
|
15
|
+
msgstr "Zahlung storniert"
|
|
16
|
+
|
|
17
|
+
#: src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html:17
|
|
18
|
+
msgid "OK"
|
|
19
|
+
msgstr "- Ich bin in Ordnung."
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
msgid ""
|
|
2
|
+
msgstr ""
|
|
3
|
+
"Language: en-US\n"
|
|
4
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
5
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
6
|
+
|
|
7
|
+
#: src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html:2
|
|
8
|
+
#: src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html:4
|
|
9
|
+
msgid "Payment successful"
|
|
10
|
+
msgstr "Payment successful"
|
|
11
|
+
|
|
12
|
+
#: src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html:2
|
|
13
|
+
#: src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html:5
|
|
14
|
+
msgid "Payment cancelled"
|
|
15
|
+
msgstr "Payment cancelled"
|
|
16
|
+
|
|
17
|
+
#: src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html:17
|
|
18
|
+
msgid "OK"
|
|
19
|
+
msgstr "OK"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
msgid ""
|
|
2
|
+
msgstr ""
|
|
3
|
+
"Language: pl-PL\n"
|
|
4
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
5
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
6
|
+
|
|
7
|
+
#: src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html:2
|
|
8
|
+
#: src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html:4
|
|
9
|
+
msgid "Payment successful"
|
|
10
|
+
msgstr "Wynagrodzenie"
|
|
11
|
+
|
|
12
|
+
#: src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html:2
|
|
13
|
+
#: src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html:5
|
|
14
|
+
msgid "Payment cancelled"
|
|
15
|
+
msgstr "Odwołana płatność"
|
|
16
|
+
|
|
17
|
+
#: src/lib/taon-purchase-status/taon-purchase-status.dialog.component.html:17
|
|
18
|
+
msgid "OK"
|
|
19
|
+
msgstr "- Dobrze."
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
msgid ""
|
|
2
|
+
msgstr ""
|
|
3
|
+
"Language: de-DE\n"
|
|
4
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
5
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
6
|
+
|
|
7
|
+
#: src/lib/taon-under-construction/taon-under-construction.component.html:12
|
|
8
|
+
msgid "Work in progress"
|
|
9
|
+
msgstr "Arbeiten im Vorgang"
|