@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.
Files changed (226) hide show
  1. package/assets/.gitkeep +0 -0
  2. package/assets/css/primeicons/fonts/primeicons.ttf +0 -0
  3. package/assets/css/primeicons/fonts/primeicons.woff +0 -0
  4. package/assets/css/primeicons/fonts/primeicons.woff2 +0 -0
  5. package/assets/generated/pwa/android-chrome-144x144.png +0 -0
  6. package/assets/generated/pwa/android-chrome-192x192.png +0 -0
  7. package/assets/generated/pwa/android-chrome-256x256.png +0 -0
  8. package/assets/generated/pwa/android-chrome-36x36.png +0 -0
  9. package/assets/generated/pwa/android-chrome-384x384.png +0 -0
  10. package/assets/generated/pwa/android-chrome-48x48.png +0 -0
  11. package/assets/generated/pwa/android-chrome-512x512.png +0 -0
  12. package/assets/generated/pwa/android-chrome-72x72.png +0 -0
  13. package/assets/generated/pwa/android-chrome-96x96.png +0 -0
  14. package/assets/generated/pwa/apple-touch-icon-1024x1024.png +0 -0
  15. package/assets/generated/pwa/apple-touch-icon-114x114.png +0 -0
  16. package/assets/generated/pwa/apple-touch-icon-120x120.png +0 -0
  17. package/assets/generated/pwa/apple-touch-icon-144x144.png +0 -0
  18. package/assets/generated/pwa/apple-touch-icon-152x152.png +0 -0
  19. package/assets/generated/pwa/apple-touch-icon-167x167.png +0 -0
  20. package/assets/generated/pwa/apple-touch-icon-180x180.png +0 -0
  21. package/assets/generated/pwa/apple-touch-icon-57x57.png +0 -0
  22. package/assets/generated/pwa/apple-touch-icon-60x60.png +0 -0
  23. package/assets/generated/pwa/apple-touch-icon-72x72.png +0 -0
  24. package/assets/generated/pwa/apple-touch-icon-76x76.png +0 -0
  25. package/assets/generated/pwa/apple-touch-icon-precomposed.png +0 -0
  26. package/assets/generated/pwa/apple-touch-icon.png +0 -0
  27. package/assets/generated/pwa/apple-touch-startup-image-1125x2436.png +0 -0
  28. package/assets/generated/pwa/apple-touch-startup-image-1136x640.png +0 -0
  29. package/assets/generated/pwa/apple-touch-startup-image-1170x2532.png +0 -0
  30. package/assets/generated/pwa/apple-touch-startup-image-1179x2556.png +0 -0
  31. package/assets/generated/pwa/apple-touch-startup-image-1242x2208.png +0 -0
  32. package/assets/generated/pwa/apple-touch-startup-image-1242x2688.png +0 -0
  33. package/assets/generated/pwa/apple-touch-startup-image-1284x2778.png +0 -0
  34. package/assets/generated/pwa/apple-touch-startup-image-1290x2796.png +0 -0
  35. package/assets/generated/pwa/apple-touch-startup-image-1334x750.png +0 -0
  36. package/assets/generated/pwa/apple-touch-startup-image-1488x2266.png +0 -0
  37. package/assets/generated/pwa/apple-touch-startup-image-1536x2048.png +0 -0
  38. package/assets/generated/pwa/apple-touch-startup-image-1620x2160.png +0 -0
  39. package/assets/generated/pwa/apple-touch-startup-image-1640x2160.png +0 -0
  40. package/assets/generated/pwa/apple-touch-startup-image-1668x2224.png +0 -0
  41. package/assets/generated/pwa/apple-touch-startup-image-1668x2388.png +0 -0
  42. package/assets/generated/pwa/apple-touch-startup-image-1792x828.png +0 -0
  43. package/assets/generated/pwa/apple-touch-startup-image-2048x1536.png +0 -0
  44. package/assets/generated/pwa/apple-touch-startup-image-2048x2732.png +0 -0
  45. package/assets/generated/pwa/apple-touch-startup-image-2160x1620.png +0 -0
  46. package/assets/generated/pwa/apple-touch-startup-image-2160x1640.png +0 -0
  47. package/assets/generated/pwa/apple-touch-startup-image-2208x1242.png +0 -0
  48. package/assets/generated/pwa/apple-touch-startup-image-2224x1668.png +0 -0
  49. package/assets/generated/pwa/apple-touch-startup-image-2266x1488.png +0 -0
  50. package/assets/generated/pwa/apple-touch-startup-image-2388x1668.png +0 -0
  51. package/assets/generated/pwa/apple-touch-startup-image-2436x1125.png +0 -0
  52. package/assets/generated/pwa/apple-touch-startup-image-2532x1170.png +0 -0
  53. package/assets/generated/pwa/apple-touch-startup-image-2556x1179.png +0 -0
  54. package/assets/generated/pwa/apple-touch-startup-image-2688x1242.png +0 -0
  55. package/assets/generated/pwa/apple-touch-startup-image-2732x2048.png +0 -0
  56. package/assets/generated/pwa/apple-touch-startup-image-2778x1284.png +0 -0
  57. package/assets/generated/pwa/apple-touch-startup-image-2796x1290.png +0 -0
  58. package/assets/generated/pwa/apple-touch-startup-image-640x1136.png +0 -0
  59. package/assets/generated/pwa/apple-touch-startup-image-750x1334.png +0 -0
  60. package/assets/generated/pwa/apple-touch-startup-image-828x1792.png +0 -0
  61. package/assets/generated/pwa/browserconfig.xml +12 -0
  62. package/assets/generated/pwa/favicon-16x16.png +0 -0
  63. package/assets/generated/pwa/favicon-32x32.png +0 -0
  64. package/assets/generated/pwa/favicon-48x48.png +0 -0
  65. package/assets/generated/pwa/favicon.ico +0 -0
  66. package/assets/generated/pwa/manifest.webmanifest +69 -0
  67. package/assets/generated/pwa/mstile-144x144.png +0 -0
  68. package/assets/generated/pwa/mstile-150x150.png +0 -0
  69. package/assets/generated/pwa/mstile-310x150.png +0 -0
  70. package/assets/generated/pwa/mstile-310x310.png +0 -0
  71. package/assets/generated/pwa/mstile-70x70.png +0 -0
  72. package/assets/generated/pwa/yandex-browser-50x50.png +0 -0
  73. package/assets/generated/pwa/yandex-browser-manifest.json +9 -0
  74. package/browser/fesm2022/ui-browser.mjs +1 -1
  75. package/browser/fesm2022/ui-browser.mjs.map +1 -1
  76. package/browser/package.json +1 -1
  77. package/browser/types/ui-browser.d.ts +1 -1
  78. package/browser-prod/fesm2022/ui-browser-prod.mjs +1 -1
  79. package/browser-prod/fesm2022/ui-browser-prod.mjs.map +1 -1
  80. package/browser-prod/package.json +1 -1
  81. package/browser-prod/types/ui-browser-prod.d.ts +1 -1
  82. package/full-dts/build-info._auto-generated_.d.ts +1 -1
  83. package/html/assets/generated/pwa/html-pwa.html +53 -53
  84. package/i18n/app.ts.de-DE.po +9 -0
  85. package/i18n/app.ts.en-US.po +9 -0
  86. package/i18n/app.ts.pl-PL.po +9 -0
  87. package/lib/build-info._auto-generated_.d.ts +1 -1
  88. package/lib/build-info._auto-generated_.js +1 -1
  89. package/lib/i18n/my-organization-proj.ts.de-DE.po +9 -0
  90. package/lib/i18n/my-organization-proj.ts.en-US.po +9 -0
  91. package/lib/i18n/my-organization-proj.ts.pl-PL.po +9 -0
  92. package/lib/i18n/start-cli.ts.de-DE.po +9 -0
  93. package/lib/i18n/start-cli.ts.en-US.po +9 -0
  94. package/lib/i18n/start-cli.ts.pl-PL.po +9 -0
  95. package/lib/lib-info.md +8 -0
  96. package/lib/migrations/migrations-info.md +6 -0
  97. package/lib/package.json +1 -1
  98. package/lib/taon-admin-layout/i18n/taon-admin-layout.component.html.de-DE.po +13 -0
  99. package/lib/taon-admin-layout/i18n/taon-admin-layout.component.html.en-US.po +13 -0
  100. package/lib/taon-admin-layout/i18n/taon-admin-layout.component.html.pl-PL.po +13 -0
  101. package/lib/taon-admin-layout/i18n/taon-admin-layout.component.ts.de-DE.po +5 -0
  102. package/lib/taon-admin-layout/i18n/taon-admin-layout.component.ts.en-US.po +5 -0
  103. package/lib/taon-admin-layout/i18n/taon-admin-layout.component.ts.pl-PL.po +5 -0
  104. package/lib/taon-admin-layout/index.d.ts +1 -1
  105. package/lib/taon-admin-layout/index.js +2 -2
  106. package/lib/taon-admin-welcome/i18n/taon-admin-welcome.component.html.de-DE.po +9 -0
  107. package/lib/taon-admin-welcome/i18n/taon-admin-welcome.component.html.en-US.po +9 -0
  108. package/lib/taon-admin-welcome/i18n/taon-admin-welcome.component.html.pl-PL.po +9 -0
  109. package/lib/taon-admin-welcome/i18n/taon-admin-welcome.component.ts.de-DE.po +5 -0
  110. package/lib/taon-admin-welcome/i18n/taon-admin-welcome.component.ts.en-US.po +5 -0
  111. package/lib/taon-admin-welcome/i18n/taon-admin-welcome.component.ts.pl-PL.po +5 -0
  112. package/lib/taon-admin-welcome/index.d.ts +1 -1
  113. package/lib/taon-admin-welcome/index.js +2 -2
  114. package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.de-DE.po +9 -0
  115. package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.po +9 -0
  116. package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.po +9 -0
  117. package/lib/taon-backoffice-notifications/i18n/taon-error-details-dialog.component.html.de-DE.po +26 -0
  118. package/lib/taon-backoffice-notifications/i18n/taon-error-details-dialog.component.html.en-US.po +26 -0
  119. package/lib/taon-backoffice-notifications/i18n/taon-error-details-dialog.component.html.pl-PL.po +26 -0
  120. package/lib/taon-backoffice-notifications/i18n/taon-error-details-dialog.component.ts.de-DE.po +5 -0
  121. package/lib/taon-backoffice-notifications/i18n/taon-error-details-dialog.component.ts.en-US.po +5 -0
  122. package/lib/taon-backoffice-notifications/i18n/taon-error-details-dialog.component.ts.pl-PL.po +5 -0
  123. package/lib/taon-backoffice-notifications/i18n/taon-error-toast.component.ts.de-DE.po +9 -0
  124. package/lib/taon-backoffice-notifications/i18n/taon-error-toast.component.ts.en-US.po +9 -0
  125. package/lib/taon-backoffice-notifications/i18n/taon-error-toast.component.ts.pl-PL.po +9 -0
  126. package/lib/taon-confirm-dialog/i18n/taon-confirm-dialog.component.html.de-DE.po +13 -0
  127. package/lib/taon-confirm-dialog/i18n/taon-confirm-dialog.component.html.en-US.po +13 -0
  128. package/lib/taon-confirm-dialog/i18n/taon-confirm-dialog.component.html.pl-PL.po +13 -0
  129. package/lib/taon-confirm-dialog/i18n/taon-confirm-dialog.component.ts.de-DE.po +5 -0
  130. package/lib/taon-confirm-dialog/i18n/taon-confirm-dialog.component.ts.en-US.po +5 -0
  131. package/lib/taon-confirm-dialog/i18n/taon-confirm-dialog.component.ts.pl-PL.po +5 -0
  132. package/lib/taon-confirm-dialog/taon-confirm-dialog.md +34 -0
  133. package/lib/taon-datatable/i18n/taon-datatable.component.html.de-DE.po +33 -0
  134. package/lib/taon-datatable/i18n/taon-datatable.component.html.en-US.po +33 -0
  135. package/lib/taon-datatable/i18n/taon-datatable.component.html.pl-PL.po +33 -0
  136. package/lib/taon-datatable/i18n/taon-datatable.component.ts.de-DE.po +17 -0
  137. package/lib/taon-datatable/i18n/taon-datatable.component.ts.en-US.po +17 -0
  138. package/lib/taon-datatable/i18n/taon-datatable.component.ts.pl-PL.po +17 -0
  139. package/lib/taon-datatable/index.d.ts +1 -1
  140. package/lib/taon-datatable/index.js +2 -2
  141. package/lib/taon-detachable-dialog-content/i18n/taon-detached-window-content.component.ts.de-DE.po +9 -0
  142. package/lib/taon-detachable-dialog-content/i18n/taon-detached-window-content.component.ts.en-US.po +9 -0
  143. package/lib/taon-detachable-dialog-content/i18n/taon-detached-window-content.component.ts.pl-PL.po +9 -0
  144. package/lib/taon-detachable-dialog-content/taon-detachable-dialog-content.md +429 -0
  145. package/lib/taon-draggable-button-panel/i18n/taon-draggable-button-panel.component.html.de-DE.po +25 -0
  146. package/lib/taon-draggable-button-panel/i18n/taon-draggable-button-panel.component.html.en-US.po +25 -0
  147. package/lib/taon-draggable-button-panel/i18n/taon-draggable-button-panel.component.html.pl-PL.po +25 -0
  148. package/lib/taon-draggable-button-panel/i18n/taon-draggable-button-panel.component.ts.de-DE.po +9 -0
  149. package/lib/taon-draggable-button-panel/i18n/taon-draggable-button-panel.component.ts.en-US.po +9 -0
  150. package/lib/taon-draggable-button-panel/i18n/taon-draggable-button-panel.component.ts.pl-PL.po +9 -0
  151. package/lib/taon-draggable-button-panel/index.d.ts +1 -1
  152. package/lib/taon-draggable-button-panel/index.js +2 -2
  153. package/lib/taon-loading-content/i18n/taon-loading-content.component.html.de-DE.po +9 -0
  154. package/lib/taon-loading-content/i18n/taon-loading-content.component.html.en-US.po +9 -0
  155. package/lib/taon-loading-content/i18n/taon-loading-content.component.html.pl-PL.po +9 -0
  156. package/lib/taon-loading-content/i18n/taon-loading-content.component.ts.de-DE.po +5 -0
  157. package/lib/taon-loading-content/i18n/taon-loading-content.component.ts.en-US.po +5 -0
  158. package/lib/taon-loading-content/i18n/taon-loading-content.component.ts.pl-PL.po +5 -0
  159. package/lib/taon-purchase-status/i18n/taon-purchase-status.dialog.component.html.de-DE.po +19 -0
  160. package/lib/taon-purchase-status/i18n/taon-purchase-status.dialog.component.html.en-US.po +19 -0
  161. package/lib/taon-purchase-status/i18n/taon-purchase-status.dialog.component.html.pl-PL.po +19 -0
  162. package/lib/taon-purchase-status/i18n/taon-purchase-status.dialog.component.ts.de-DE.po +5 -0
  163. package/lib/taon-purchase-status/i18n/taon-purchase-status.dialog.component.ts.en-US.po +5 -0
  164. package/lib/taon-purchase-status/i18n/taon-purchase-status.dialog.component.ts.pl-PL.po +5 -0
  165. package/lib/taon-under-construction/i18n/taon-under-construction.component.html.de-DE.po +9 -0
  166. package/lib/taon-under-construction/i18n/taon-under-construction.component.html.en-US.po +9 -0
  167. package/lib/taon-under-construction/i18n/taon-under-construction.component.html.pl-PL.po +9 -0
  168. package/lib/taon-under-construction/i18n/taon-under-construction.component.ts.de-DE.po +13 -0
  169. package/lib/taon-under-construction/i18n/taon-under-construction.component.ts.en-US.po +13 -0
  170. package/lib/taon-under-construction/i18n/taon-under-construction.component.ts.pl-PL.po +13 -0
  171. package/lib-esm/lib/build-info._auto-generated_.d.ts +1 -1
  172. package/lib-esm/lib/build-info._auto-generated_.js +1 -1
  173. package/lib-esm/lib/taon-admin-layout/index.d.ts +1 -1
  174. package/lib-esm/lib/taon-admin-layout/index.js +1 -1
  175. package/lib-esm/lib/taon-admin-welcome/index.d.ts +1 -1
  176. package/lib-esm/lib/taon-admin-welcome/index.js +1 -1
  177. package/lib-esm/lib/taon-datatable/index.d.ts +1 -1
  178. package/lib-esm/lib/taon-datatable/index.js +1 -1
  179. package/lib-esm/lib/taon-draggable-button-panel/index.d.ts +1 -1
  180. package/lib-esm/lib/taon-draggable-button-panel/index.js +1 -1
  181. package/lib-prod/build-info._auto-generated_.d.ts +1 -1
  182. package/lib-prod/build-info._auto-generated_.js +1 -1
  183. package/lib-prod/package.json +1 -1
  184. package/lib-prod/taon-admin-layout/index.d.ts +1 -1
  185. package/lib-prod/taon-admin-layout/index.js +1 -1
  186. package/lib-prod/taon-admin-welcome/index.d.ts +1 -1
  187. package/lib-prod/taon-admin-welcome/index.js +1 -1
  188. package/lib-prod/taon-datatable/index.d.ts +1 -1
  189. package/lib-prod/taon-datatable/index.js +1 -1
  190. package/lib-prod/taon-draggable-button-panel/index.d.ts +1 -1
  191. package/lib-prod/taon-draggable-button-panel/index.js +1 -1
  192. package/package.json +1 -1
  193. package/ts-source/browser-code/build-info._auto-generated_.ts +1 -1
  194. package/ts-source/browser-code-prod/build-info._auto-generated_.ts +1 -1
  195. package/ts-source/browser-code-prod/i18n/lib.translation.ts +1 -1
  196. package/ts-source/browser-code-prod/taon-admin-layout/i18n/taon-admin-layout.translation.ts +1 -1
  197. package/ts-source/browser-code-prod/taon-admin-welcome/i18n/taon-admin-welcome.translation.ts +1 -1
  198. package/ts-source/browser-code-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.translation.ts +1 -1
  199. package/ts-source/browser-code-prod/taon-confirm-dialog/i18n/taon-confirm-dialog.translation.ts +1 -1
  200. package/ts-source/browser-code-prod/taon-datatable/i18n/taon-datatable.translation.ts +1 -1
  201. package/ts-source/browser-code-prod/taon-detachable-dialog-content/i18n/taon-detachable-dialog-content.translation.ts +1 -1
  202. package/ts-source/browser-code-prod/taon-draggable-button-panel/i18n/taon-draggable-button-panel.translation.ts +1 -1
  203. package/ts-source/browser-code-prod/taon-loading-content/i18n/taon-loading-content.translation.ts +1 -1
  204. package/ts-source/browser-code-prod/taon-purchase-status/i18n/taon-purchase-status.translation.ts +1 -1
  205. package/ts-source/browser-code-prod/taon-under-construction/i18n/taon-under-construction.translation.ts +1 -1
  206. package/ts-source/websql-code/build-info._auto-generated_.ts +1 -1
  207. package/ts-source/websql-code-prod/build-info._auto-generated_.ts +1 -1
  208. package/ts-source/websql-code-prod/i18n/lib.translation.ts +1 -1
  209. package/ts-source/websql-code-prod/taon-admin-layout/i18n/taon-admin-layout.translation.ts +1 -1
  210. package/ts-source/websql-code-prod/taon-admin-welcome/i18n/taon-admin-welcome.translation.ts +1 -1
  211. package/ts-source/websql-code-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.translation.ts +1 -1
  212. package/ts-source/websql-code-prod/taon-confirm-dialog/i18n/taon-confirm-dialog.translation.ts +1 -1
  213. package/ts-source/websql-code-prod/taon-datatable/i18n/taon-datatable.translation.ts +1 -1
  214. package/ts-source/websql-code-prod/taon-detachable-dialog-content/i18n/taon-detachable-dialog-content.translation.ts +1 -1
  215. package/ts-source/websql-code-prod/taon-draggable-button-panel/i18n/taon-draggable-button-panel.translation.ts +1 -1
  216. package/ts-source/websql-code-prod/taon-loading-content/i18n/taon-loading-content.translation.ts +1 -1
  217. package/ts-source/websql-code-prod/taon-purchase-status/i18n/taon-purchase-status.translation.ts +1 -1
  218. package/ts-source/websql-code-prod/taon-under-construction/i18n/taon-under-construction.translation.ts +1 -1
  219. package/websql/fesm2022/ui-websql.mjs +1 -1
  220. package/websql/fesm2022/ui-websql.mjs.map +1 -1
  221. package/websql/package.json +1 -1
  222. package/websql/types/ui-websql.d.ts +1 -1
  223. package/websql-prod/fesm2022/ui-websql-prod.mjs +1 -1
  224. package/websql-prod/fesm2022/ui-websql-prod.mjs.map +1 -1
  225. package/websql-prod/package.json +1 -1
  226. 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.
@@ -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"
@@ -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"
@@ -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"
@@ -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-draggable-button-panel/taon-draggable-button-panel.component.ts:74
8
+ msgid "Admin"
9
+ msgstr "Admin"
@@ -0,0 +1,9 @@
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.ts:74
8
+ msgid "Admin"
9
+ msgstr "Admin"
@@ -0,0 +1,9 @@
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.ts:74
8
+ msgid "Admin"
9
+ msgstr "Admin"
@@ -1 +1 @@
1
- export declare function dummy1794099530088(): void;
1
+ export declare function dummy1794345890747(): void;
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.dummy1794099530088 = dummy1794099530088;
4
- function dummy1794099530088() { }
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,9 @@
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-loading-content/taon-loading-content.component.html:11
8
+ msgid "Loading content..."
9
+ msgstr ""
@@ -0,0 +1,9 @@
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-loading-content/taon-loading-content.component.html:11
8
+ msgid "Loading content..."
9
+ msgstr "Ładowanie treści..."
@@ -0,0 +1,5 @@
1
+ msgid ""
2
+ msgstr ""
3
+ "Language: de-DE\n"
4
+ "Content-Type: text/plain; charset=UTF-8\n"
5
+ "Content-Transfer-Encoding: 8bit\n"
@@ -0,0 +1,5 @@
1
+ msgid ""
2
+ msgstr ""
3
+ "Language: en-US\n"
4
+ "Content-Type: text/plain; charset=UTF-8\n"
5
+ "Content-Transfer-Encoding: 8bit\n"
@@ -0,0 +1,5 @@
1
+ msgid ""
2
+ msgstr ""
3
+ "Language: pl-PL\n"
4
+ "Content-Type: text/plain; charset=UTF-8\n"
5
+ "Content-Transfer-Encoding: 8bit\n"
@@ -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,5 @@
1
+ msgid ""
2
+ msgstr ""
3
+ "Language: de-DE\n"
4
+ "Content-Type: text/plain; charset=UTF-8\n"
5
+ "Content-Transfer-Encoding: 8bit\n"
@@ -0,0 +1,5 @@
1
+ msgid ""
2
+ msgstr ""
3
+ "Language: en-US\n"
4
+ "Content-Type: text/plain; charset=UTF-8\n"
5
+ "Content-Transfer-Encoding: 8bit\n"
@@ -0,0 +1,5 @@
1
+ msgid ""
2
+ msgstr ""
3
+ "Language: pl-PL\n"
4
+ "Content-Type: text/plain; charset=UTF-8\n"
5
+ "Content-Transfer-Encoding: 8bit\n"
@@ -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"