@ojiepermana/angular 22.1.14 → 22.2.1

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 (252) hide show
  1. package/README.md +8 -6
  2. package/SUPPORT.md +3 -3
  3. package/chart/README.md +1 -1
  4. package/component/README.md +2 -2
  5. package/component/calendar/README.md +3 -15
  6. package/component/drawer/README.md +1 -2
  7. package/fesm2022/ojiepermana-angular-chart-area.mjs +352 -137
  8. package/fesm2022/ojiepermana-angular-chart-bar.mjs +744 -524
  9. package/fesm2022/ojiepermana-angular-chart-core.mjs +1140 -1344
  10. package/fesm2022/ojiepermana-angular-chart-line.mjs +393 -147
  11. package/fesm2022/ojiepermana-angular-chart-pie.mjs +408 -179
  12. package/fesm2022/ojiepermana-angular-chart-primitives.mjs +1262 -920
  13. package/fesm2022/ojiepermana-angular-chart-radar.mjs +473 -205
  14. package/fesm2022/ojiepermana-angular-chart-radial.mjs +425 -182
  15. package/fesm2022/ojiepermana-angular-chart-scatter.mjs +386 -210
  16. package/fesm2022/ojiepermana-angular-chart.mjs +3 -19
  17. package/fesm2022/ojiepermana-angular-component-accordion.mjs +485 -243
  18. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +963 -325
  19. package/fesm2022/ojiepermana-angular-component-alert.mjs +266 -103
  20. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +80 -35
  21. package/fesm2022/ojiepermana-angular-component-avatar.mjs +402 -135
  22. package/fesm2022/ojiepermana-angular-component-badge.mjs +109 -59
  23. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +410 -142
  24. package/fesm2022/ojiepermana-angular-component-button-group.mjs +249 -96
  25. package/fesm2022/ojiepermana-angular-component-button.mjs +153 -75
  26. package/fesm2022/ojiepermana-angular-component-calendar.mjs +531 -418
  27. package/fesm2022/ojiepermana-angular-component-card.mjs +457 -171
  28. package/fesm2022/ojiepermana-angular-component-carousel.mjs +642 -272
  29. package/fesm2022/ojiepermana-angular-component-checkbox.mjs +312 -108
  30. package/fesm2022/ojiepermana-angular-component-collapsible.mjs +299 -115
  31. package/fesm2022/ojiepermana-angular-component-combobox.mjs +396 -183
  32. package/fesm2022/ojiepermana-angular-component-command.mjs +807 -347
  33. package/fesm2022/ojiepermana-angular-component-composer.mjs +807 -330
  34. package/fesm2022/ojiepermana-angular-component-context-menu.mjs +196 -161
  35. package/fesm2022/ojiepermana-angular-component-date-picker.mjs +650 -338
  36. package/fesm2022/ojiepermana-angular-component-dialog.mjs +710 -316
  37. package/fesm2022/ojiepermana-angular-component-drawer.mjs +1 -5
  38. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +1212 -646
  39. package/fesm2022/ojiepermana-angular-component-editor.mjs +987 -502
  40. package/fesm2022/ojiepermana-angular-component-empty.mjs +350 -137
  41. package/fesm2022/ojiepermana-angular-component-form.mjs +813 -434
  42. package/fesm2022/ojiepermana-angular-component-hover-card.mjs +486 -277
  43. package/fesm2022/ojiepermana-angular-component-icon.mjs +241 -140
  44. package/fesm2022/ojiepermana-angular-component-input-group.mjs +449 -176
  45. package/fesm2022/ojiepermana-angular-component-input-otp.mjs +891 -488
  46. package/fesm2022/ojiepermana-angular-component-input.mjs +86 -55
  47. package/fesm2022/ojiepermana-angular-component-item.mjs +713 -261
  48. package/fesm2022/ojiepermana-angular-component-kanban.mjs +714 -216
  49. package/fesm2022/ojiepermana-angular-component-kbd.mjs +124 -52
  50. package/fesm2022/ojiepermana-angular-component-label.mjs +82 -31
  51. package/fesm2022/ojiepermana-angular-component-menubar.mjs +479 -329
  52. package/fesm2022/ojiepermana-angular-component-native-select.mjs +167 -65
  53. package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs +683 -380
  54. package/fesm2022/ojiepermana-angular-component-pagination.mjs +277 -94
  55. package/fesm2022/ojiepermana-angular-component-pillbox.mjs +1283 -607
  56. package/fesm2022/ojiepermana-angular-component-popover.mjs +291 -204
  57. package/fesm2022/ojiepermana-angular-component-progress.mjs +176 -53
  58. package/fesm2022/ojiepermana-angular-component-radio.mjs +449 -142
  59. package/fesm2022/ojiepermana-angular-component-resizable.mjs +659 -453
  60. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +117 -39
  61. package/fesm2022/ojiepermana-angular-component-segmented-control.mjs +351 -172
  62. package/fesm2022/ojiepermana-angular-component-select.mjs +475 -345
  63. package/fesm2022/ojiepermana-angular-component-separator.mjs +102 -35
  64. package/fesm2022/ojiepermana-angular-component-sheet.mjs +797 -347
  65. package/fesm2022/ojiepermana-angular-component-skeleton.mjs +62 -29
  66. package/fesm2022/ojiepermana-angular-component-slider.mjs +592 -376
  67. package/fesm2022/ojiepermana-angular-component-spinner.mjs +135 -38
  68. package/fesm2022/ojiepermana-angular-component-switch.mjs +315 -103
  69. package/fesm2022/ojiepermana-angular-component-table.mjs +440 -153
  70. package/fesm2022/ojiepermana-angular-component-tabs.mjs +590 -317
  71. package/fesm2022/ojiepermana-angular-component-textarea.mjs +85 -50
  72. package/fesm2022/ojiepermana-angular-component-timeline.mjs +609 -231
  73. package/fesm2022/ojiepermana-angular-component-toast.mjs +229 -243
  74. package/fesm2022/ojiepermana-angular-component-toggle-group.mjs +573 -288
  75. package/fesm2022/ojiepermana-angular-component-toggle.mjs +187 -78
  76. package/fesm2022/ojiepermana-angular-component-tooltip.mjs +798 -517
  77. package/fesm2022/ojiepermana-angular-component-utils-core.mjs +159 -292
  78. package/fesm2022/ojiepermana-angular-component-utils-overlay.mjs +46 -58
  79. package/fesm2022/ojiepermana-angular-component-utils-scale.mjs +76 -38
  80. package/fesm2022/ojiepermana-angular-component-utils.mjs +2 -8
  81. package/fesm2022/ojiepermana-angular-component.mjs +0 -10
  82. package/fesm2022/ojiepermana-angular-navigation-core.mjs +13 -23
  83. package/fesm2022/ojiepermana-angular-navigation-icon.mjs +35 -24
  84. package/fesm2022/ojiepermana-angular-navigation-navigation-badge-count.component-DYuysKVf.mjs +129 -0
  85. package/fesm2022/ojiepermana-angular-navigation-navigation-dockbar-menu.component-COiTaw34.mjs +812 -0
  86. package/fesm2022/{ojiepermana-angular-navigation-navigation-entry-grid.component-COQ-60DS.mjs → ojiepermana-angular-navigation-navigation-entry-grid.component-YIz0IsIb.mjs} +392 -207
  87. package/fesm2022/ojiepermana-angular-navigation-navigation-flyout-menu.component-D2vwEwBY.mjs +650 -0
  88. package/fesm2022/ojiepermana-angular-navigation-navigation-horizontal.component-B5D7yXfb.mjs +662 -0
  89. package/fesm2022/ojiepermana-angular-navigation-navigation-item.component-CUb68MZH.mjs +1219 -0
  90. package/fesm2022/ojiepermana-angular-navigation-navigation-list.component-CrK16trj.mjs +327 -0
  91. package/fesm2022/ojiepermana-angular-navigation-service.mjs +544 -724
  92. package/fesm2022/ojiepermana-angular-navigation-types.mjs +139 -56
  93. package/fesm2022/ojiepermana-angular-navigation.mjs +3256 -4
  94. package/fesm2022/ojiepermana-angular-sdk.mjs +91 -201
  95. package/fesm2022/ojiepermana-angular-theme-component-settings.mjs +1125 -737
  96. package/fesm2022/ojiepermana-angular-theme-layout-services.mjs +245 -328
  97. package/fesm2022/ojiepermana-angular-theme-layout-types.mjs +35 -38
  98. package/fesm2022/ojiepermana-angular-theme-layout-wrapper.mjs +1928 -553
  99. package/fesm2022/ojiepermana-angular-theme-layout.mjs +847 -496
  100. package/fesm2022/ojiepermana-angular-theme-page-core.mjs +288 -358
  101. package/fesm2022/ojiepermana-angular-theme-page-filter.mjs +362 -224
  102. package/fesm2022/ojiepermana-angular-theme-page-overview.mjs +88 -0
  103. package/fesm2022/ojiepermana-angular-theme-page-root.mjs +576 -254
  104. package/fesm2022/ojiepermana-angular-theme-page-side.mjs +317 -177
  105. package/fesm2022/ojiepermana-angular-theme-page-slots.mjs +256 -112
  106. package/fesm2022/ojiepermana-angular-theme-page.mjs +7 -12
  107. package/fesm2022/ojiepermana-angular-theme-shell-services.mjs +215 -326
  108. package/fesm2022/ojiepermana-angular-theme-shell-types.mjs +68 -129
  109. package/fesm2022/ojiepermana-angular-theme-shell.mjs +907 -378
  110. package/fesm2022/ojiepermana-angular-theme-styles.mjs +521 -720
  111. package/fesm2022/ojiepermana-angular-theme.mjs +0 -10
  112. package/fesm2022/ojiepermana-angular.mjs +5 -24
  113. package/navigation/README.md +69 -18
  114. package/package.json +16 -12
  115. package/sdk/README.md +1 -1
  116. package/sdk/src/writer/index.js +2 -2
  117. package/theme/README.md +1 -1
  118. package/theme/layout/README.md +2 -4
  119. package/theme/page/README.md +50 -0
  120. package/theme/styles/README.md +10 -10
  121. package/theme/styles/css/base/prefers-dark.css +1 -1
  122. package/theme/styles/css/base/status.css +1 -1
  123. package/theme/styles/css/color/amber.css +1 -1
  124. package/theme/styles/css/color/blue.css +1 -1
  125. package/theme/styles/css/color/cyan.css +1 -1
  126. package/theme/styles/css/color/emerald.css +1 -1
  127. package/theme/styles/css/color/fuchsia.css +1 -1
  128. package/theme/styles/css/color/green.css +1 -1
  129. package/theme/styles/css/color/indigo.css +1 -1
  130. package/theme/styles/css/color/lime.css +1 -1
  131. package/theme/styles/css/color/orange.css +1 -1
  132. package/theme/styles/css/color/pink.css +1 -1
  133. package/theme/styles/css/color/purple.css +1 -1
  134. package/theme/styles/css/color/red.css +1 -1
  135. package/theme/styles/css/color/rose.css +1 -1
  136. package/theme/styles/css/color/sky.css +1 -1
  137. package/theme/styles/css/color/teal.css +1 -1
  138. package/theme/styles/css/color/violet.css +1 -1
  139. package/theme/styles/css/color/yellow.css +1 -1
  140. package/theme/styles/css/neutral/gray.css +1 -1
  141. package/theme/styles/css/neutral/mauve.css +1 -1
  142. package/theme/styles/css/neutral/mist.css +1 -1
  143. package/theme/styles/css/neutral/neutral.css +1 -1
  144. package/theme/styles/css/neutral/olive.css +1 -1
  145. package/theme/styles/css/neutral/slate.css +1 -1
  146. package/theme/styles/css/neutral/stone.css +1 -1
  147. package/theme/styles/css/neutral/taupe.css +1 -1
  148. package/theme/styles/css/neutral/zinc.css +1 -1
  149. package/types/ojiepermana-angular-chart-area.d.ts +126 -63
  150. package/types/ojiepermana-angular-chart-bar.d.ts +244 -154
  151. package/types/ojiepermana-angular-chart-core.d.ts +409 -398
  152. package/types/ojiepermana-angular-chart-line.d.ts +141 -68
  153. package/types/ojiepermana-angular-chart-pie.d.ts +192 -121
  154. package/types/ojiepermana-angular-chart-primitives.d.ts +283 -214
  155. package/types/ojiepermana-angular-chart-radar.d.ts +189 -108
  156. package/types/ojiepermana-angular-chart-radial.d.ts +177 -106
  157. package/types/ojiepermana-angular-chart-scatter.d.ts +166 -110
  158. package/types/ojiepermana-angular-chart.d.ts +3 -2
  159. package/types/ojiepermana-angular-component-accordion.d.ts +135 -81
  160. package/types/ojiepermana-angular-component-alert-dialog.d.ts +271 -123
  161. package/types/ojiepermana-angular-component-alert.d.ts +69 -39
  162. package/types/ojiepermana-angular-component-aspect-ratio.d.ts +20 -12
  163. package/types/ojiepermana-angular-component-avatar.d.ts +103 -49
  164. package/types/ojiepermana-angular-component-badge.d.ts +36 -24
  165. package/types/ojiepermana-angular-component-breadcrumb.d.ts +79 -40
  166. package/types/ojiepermana-angular-component-button-group.d.ts +48 -24
  167. package/types/ojiepermana-angular-component-button.d.ts +44 -27
  168. package/types/ojiepermana-angular-component-calendar.d.ts +145 -107
  169. package/types/ojiepermana-angular-component-card.d.ts +112 -63
  170. package/types/ojiepermana-angular-component-carousel.d.ts +150 -81
  171. package/types/ojiepermana-angular-component-checkbox.d.ts +96 -38
  172. package/types/ojiepermana-angular-component-collapsible.d.ts +65 -39
  173. package/types/ojiepermana-angular-component-combobox.d.ts +100 -55
  174. package/types/ojiepermana-angular-component-command.d.ts +206 -121
  175. package/types/ojiepermana-angular-component-composer.d.ts +184 -84
  176. package/types/ojiepermana-angular-component-context-menu.d.ts +51 -41
  177. package/types/ojiepermana-angular-component-date-picker.d.ts +199 -109
  178. package/types/ojiepermana-angular-component-dialog.d.ts +200 -105
  179. package/types/ojiepermana-angular-component-drawer.d.ts +2 -1
  180. package/types/ojiepermana-angular-component-dropdown-menu.d.ts +324 -202
  181. package/types/ojiepermana-angular-component-editor.d.ts +215 -117
  182. package/types/ojiepermana-angular-component-empty.d.ts +80 -45
  183. package/types/ojiepermana-angular-component-form.d.ts +185 -121
  184. package/types/ojiepermana-angular-component-hover-card.d.ts +130 -72
  185. package/types/ojiepermana-angular-component-icon.d.ts +87 -57
  186. package/types/ojiepermana-angular-component-input-group.d.ts +93 -46
  187. package/types/ojiepermana-angular-component-input-otp.d.ts +243 -150
  188. package/types/ojiepermana-angular-component-input.d.ts +27 -17
  189. package/types/ojiepermana-angular-component-item.d.ts +160 -84
  190. package/types/ojiepermana-angular-component-kanban.d.ts +157 -62
  191. package/types/ojiepermana-angular-component-kbd.d.ts +24 -15
  192. package/types/ojiepermana-angular-component-label.d.ts +19 -11
  193. package/types/ojiepermana-angular-component-menubar.d.ts +120 -90
  194. package/types/ojiepermana-angular-component-native-select.d.ts +37 -24
  195. package/types/ojiepermana-angular-component-navigation-menu.d.ts +157 -98
  196. package/types/ojiepermana-angular-component-pagination.d.ts +78 -28
  197. package/types/ojiepermana-angular-component-pillbox.d.ts +361 -204
  198. package/types/ojiepermana-angular-component-popover.d.ts +94 -64
  199. package/types/ojiepermana-angular-component-progress.d.ts +45 -17
  200. package/types/ojiepermana-angular-component-radio.d.ts +129 -53
  201. package/types/ojiepermana-angular-component-resizable.d.ts +160 -112
  202. package/types/ojiepermana-angular-component-scroll-area.d.ts +33 -15
  203. package/types/ojiepermana-angular-component-segmented-control.d.ts +94 -50
  204. package/types/ojiepermana-angular-component-select.d.ts +94 -77
  205. package/types/ojiepermana-angular-component-separator.d.ts +26 -14
  206. package/types/ojiepermana-angular-component-sheet.d.ts +226 -116
  207. package/types/ojiepermana-angular-component-skeleton.d.ts +13 -10
  208. package/types/ojiepermana-angular-component-slider.d.ts +140 -75
  209. package/types/ojiepermana-angular-component-spinner.d.ts +31 -13
  210. package/types/ojiepermana-angular-component-switch.d.ts +97 -40
  211. package/types/ojiepermana-angular-component-table.d.ts +102 -50
  212. package/types/ojiepermana-angular-component-tabs.d.ts +174 -115
  213. package/types/ojiepermana-angular-component-textarea.d.ts +27 -17
  214. package/types/ojiepermana-angular-component-timeline.d.ts +141 -59
  215. package/types/ojiepermana-angular-component-toast.d.ts +51 -55
  216. package/types/ojiepermana-angular-component-toggle-group.d.ts +159 -88
  217. package/types/ojiepermana-angular-component-toggle.d.ts +47 -25
  218. package/types/ojiepermana-angular-component-tooltip.d.ts +222 -132
  219. package/types/ojiepermana-angular-component-utils-core.d.ts +81 -90
  220. package/types/ojiepermana-angular-component-utils-overlay.d.ts +7 -11
  221. package/types/ojiepermana-angular-component-utils-scale.d.ts +20 -12
  222. package/types/ojiepermana-angular-component-utils.d.ts +2 -2
  223. package/types/ojiepermana-angular-component.d.ts +1 -2
  224. package/types/ojiepermana-angular-navigation-core.d.ts +46 -50
  225. package/types/ojiepermana-angular-navigation-icon.d.ts +9 -12
  226. package/types/ojiepermana-angular-navigation-service.d.ts +112 -115
  227. package/types/ojiepermana-angular-navigation-types.d.ts +166 -125
  228. package/types/ojiepermana-angular-navigation.d.ts +708 -375
  229. package/types/ojiepermana-angular-sdk.d.ts +69 -71
  230. package/types/ojiepermana-angular-theme-component-settings.d.ts +120 -86
  231. package/types/ojiepermana-angular-theme-layout-services.d.ts +119 -124
  232. package/types/ojiepermana-angular-theme-layout-types.d.ts +27 -31
  233. package/types/ojiepermana-angular-theme-layout-wrapper.d.ts +446 -187
  234. package/types/ojiepermana-angular-theme-layout.d.ts +201 -113
  235. package/types/ojiepermana-angular-theme-page-core.d.ts +136 -142
  236. package/types/ojiepermana-angular-theme-page-filter.d.ts +112 -62
  237. package/types/ojiepermana-angular-theme-page-overview.d.ts +28 -0
  238. package/types/ojiepermana-angular-theme-page-root.d.ts +172 -88
  239. package/types/ojiepermana-angular-theme-page-side.d.ts +89 -49
  240. package/types/ojiepermana-angular-theme-page-slots.d.ts +58 -37
  241. package/types/ojiepermana-angular-theme-page.d.ts +7 -5
  242. package/types/ojiepermana-angular-theme-shell-services.d.ts +119 -125
  243. package/types/ojiepermana-angular-theme-shell-types.d.ts +38 -41
  244. package/types/ojiepermana-angular-theme-shell.d.ts +139 -61
  245. package/types/ojiepermana-angular-theme-styles.d.ts +184 -196
  246. package/types/ojiepermana-angular-theme.d.ts +1 -2
  247. package/types/ojiepermana-angular.d.ts +5 -5
  248. package/fesm2022/ojiepermana-angular-navigation-navigation-badge-count.component-Be3IqzG4.mjs +0 -91
  249. package/fesm2022/ojiepermana-angular-navigation-navigation-dockbar-menu.component-Bc7DWK3R.mjs +0 -522
  250. package/fesm2022/ojiepermana-angular-navigation-navigation-flyout-menu.component-DA8VPEn7.mjs +0 -404
  251. package/fesm2022/ojiepermana-angular-navigation-navigation-horizontal.component-U2TJTzlW.mjs +0 -466
  252. package/fesm2022/ojiepermana-angular-navigation-ojiepermana-angular-navigation-CIUhmytH.mjs +0 -2668
@@ -1,342 +1,231 @@
1
- import * as i0 from '@angular/core';
2
- import { InjectionToken, makeEnvironmentProviders, inject, PLATFORM_ID, DestroyRef, signal, computed, Service } from '@angular/core';
3
- import { SHELL_DEFAULT_WINDOW_STATE, normalizeShellDevice, defaultShellDeviceForMode, SHELL_MODE_STORAGE_KEY, SHELL_DEVICE_STORAGE_KEY, SHELL_COLOR_STORAGE_KEY, SHELL_FRAME_STORAGE_KEY, isShellMode, isShellDevice, isShellColor, isShellFrame, SHELL_DEFAULT_MODE, SHELL_DEFAULT_COLOR, SHELL_DEFAULT_FRAME } from '@ojiepermana/angular/theme/shell/types';
4
- import { isPlatformBrowser } from '@angular/common';
5
- import { globalLocalStorage } from '@ojiepermana/angular/component/utils/core';
6
-
7
- const SHELL_WINDOW_BRIDGE = new InjectionToken('SHELL_WINDOW_BRIDGE');
8
- /**
9
- * Browser fallback used when no bridge is provided: a page has no window to
10
- * drive, so it reports the web platform, no device opinion, and every command is
11
- * a no-op. This is what keeps `<Shell>` renderable (and testable) outside a
12
- * desktop runtime.
13
- */
1
+ import * as i0 from "@angular/core";
2
+ import { DestroyRef, InjectionToken, PLATFORM_ID, Service, computed, inject, makeEnvironmentProviders, signal } from "@angular/core";
3
+ import { SHELL_COLOR_STORAGE_KEY, SHELL_DEFAULT_COLOR, SHELL_DEFAULT_FRAME, SHELL_DEFAULT_MODE, SHELL_DEFAULT_WINDOW_STATE, SHELL_DEVICE_STORAGE_KEY, SHELL_FRAME_STORAGE_KEY, SHELL_MODE_STORAGE_KEY, defaultShellDeviceForMode, isShellColor, isShellDevice, isShellFrame, isShellMode, normalizeShellDevice } from "@ojiepermana/angular/theme/shell/types";
4
+ import { isPlatformBrowser } from "@angular/common";
5
+ import { globalLocalStorage } from "@ojiepermana/angular/component/utils/core";
6
+ const SHELL_WINDOW_BRIDGE = new InjectionToken("SHELL_WINDOW_BRIDGE");
14
7
  const WEB_SHELL_WINDOW_BRIDGE = {
15
- platform: 'web',
16
- device: () => null,
17
- snapshot: () => ({ state: SHELL_DEFAULT_WINDOW_STATE, focused: true }),
18
- minimize: () => undefined,
19
- toggleMaximize: () => undefined,
20
- close: () => undefined,
8
+ platform: "web",
9
+ device: () => null,
10
+ snapshot: () => ({
11
+ state: SHELL_DEFAULT_WINDOW_STATE,
12
+ focused: true
13
+ }),
14
+ minimize: () => void 0,
15
+ toggleMaximize: () => void 0,
16
+ close: () => void 0
21
17
  };
22
- /**
23
- * Register the bridge `ShellService` drives. Pass a factory to defer any runtime
24
- * probing until the injector is created.
25
- */
26
18
  function provideShellWindowBridge(bridge) {
27
- return makeEnvironmentProviders([
28
- typeof bridge === 'function'
29
- ? { provide: SHELL_WINDOW_BRIDGE, useFactory: bridge }
30
- : { provide: SHELL_WINDOW_BRIDGE, useValue: bridge },
31
- ]);
19
+ return makeEnvironmentProviders([typeof bridge === "function" ? {
20
+ provide: SHELL_WINDOW_BRIDGE,
21
+ useFactory: bridge
22
+ } : {
23
+ provide: SHELL_WINDOW_BRIDGE,
24
+ useValue: bridge
25
+ }]);
32
26
  }
33
-
34
- /** `true` when the page is running inside a Tauri webview. */
35
27
  function isTauriRuntime() {
36
- const scope = globalThis;
37
- return scope.__TAURI__ !== undefined || scope.__TAURI_INTERNALS__ !== undefined;
28
+ const scope = globalThis;
29
+ return scope.__TAURI__ !== void 0 || scope.__TAURI_INTERNALS__ !== void 0;
38
30
  }
39
- /**
40
- * Adapter from a Tauri window onto {@link ShellWindowBridge}.
41
- *
42
- * Every call resolves the window lazily and tolerates its absence, so the same
43
- * bridge can be registered unconditionally: run the app in a browser and the
44
- * commands become no-ops rather than errors.
45
- */
46
31
  function createTauriShellWindowBridge(options = {}) {
47
- const resolveWindow = options.currentWindow ?? defaultCurrentWindow;
48
- const resolvePlatform = options.platform ?? defaultPlatform;
49
- const withWindow = async (command) => {
50
- const handle = await resolveWindow();
51
- if (handle) {
52
- await command(handle);
53
- }
54
- };
55
- return {
56
- platform: 'tauri',
57
- async device() {
58
- try {
59
- return normalizeShellDevice(await resolvePlatform());
60
- }
61
- catch {
62
- return null;
63
- }
64
- },
65
- async snapshot() {
66
- const handle = await resolveWindow();
67
- if (!handle) {
68
- return { state: 'normal', focused: true };
69
- }
70
- // Fullscreen wins: a fullscreen window also reports itself maximized on
71
- // some platforms, and the shell chrome differs for the two.
72
- const [fullscreen, maximized, focused] = await Promise.all([
73
- handle.isFullscreen(),
74
- handle.isMaximized(),
75
- handle.isFocused?.() ?? Promise.resolve(true),
76
- ]);
77
- return {
78
- state: fullscreen ? 'fullscreen' : maximized ? 'maximized' : 'normal',
79
- focused,
80
- };
81
- },
82
- minimize: () => withWindow((handle) => handle.minimize()),
83
- toggleMaximize: () => withWindow((handle) => handle.toggleMaximize()),
84
- close: () => withWindow((handle) => handle.close()),
85
- startDragging: () => withWindow((handle) => handle.startDragging()),
86
- async watch(onChange) {
87
- const handle = await resolveWindow();
88
- if (!handle) {
89
- return () => undefined;
90
- }
91
- const unsubscribes = await Promise.all([
92
- handle.onResized?.(onChange) ?? Promise.resolve(undefined),
93
- handle.onFocusChanged?.(onChange) ?? Promise.resolve(undefined),
94
- ]);
95
- return () => {
96
- for (const unsubscribe of unsubscribes) {
97
- unsubscribe?.();
98
- }
99
- };
100
- },
101
- };
32
+ const resolveWindow = options.currentWindow ?? defaultCurrentWindow;
33
+ const resolvePlatform = options.platform ?? defaultPlatform;
34
+ const withWindow = async (command) => {
35
+ const handle = await resolveWindow();
36
+ if (handle) await command(handle);
37
+ };
38
+ return {
39
+ platform: "tauri",
40
+ async device() {
41
+ try {
42
+ return normalizeShellDevice(await resolvePlatform());
43
+ } catch {
44
+ return null;
45
+ }
46
+ },
47
+ async snapshot() {
48
+ const handle = await resolveWindow();
49
+ if (!handle) return {
50
+ state: "normal",
51
+ focused: true
52
+ };
53
+ const [fullscreen, maximized, focused] = await Promise.all([
54
+ handle.isFullscreen(),
55
+ handle.isMaximized(),
56
+ handle.isFocused?.() ?? Promise.resolve(true)
57
+ ]);
58
+ return {
59
+ state: fullscreen ? "fullscreen" : maximized ? "maximized" : "normal",
60
+ focused
61
+ };
62
+ },
63
+ minimize: () => withWindow((handle) => handle.minimize()),
64
+ toggleMaximize: () => withWindow((handle) => handle.toggleMaximize()),
65
+ close: () => withWindow((handle) => handle.close()),
66
+ startDragging: () => withWindow((handle) => handle.startDragging()),
67
+ async watch(onChange) {
68
+ const handle = await resolveWindow();
69
+ if (!handle) return () => void 0;
70
+ const unsubscribes = await Promise.all([handle.onResized?.(onChange) ?? Promise.resolve(void 0), handle.onFocusChanged?.(onChange) ?? Promise.resolve(void 0)]);
71
+ return () => {
72
+ for (const unsubscribe of unsubscribes) unsubscribe?.();
73
+ };
74
+ }
75
+ };
102
76
  }
103
- /**
104
- * Register the Tauri window bridge for `ShellService`. Safe to call in a build
105
- * that also ships to the browser — outside a Tauri webview the bridge resolves
106
- * no window and the shell falls back to inert commands.
107
- */
108
77
  function provideTauriShellWindowBridge(options = {}) {
109
- return provideShellWindowBridge(() => createTauriShellWindowBridge(options));
78
+ return provideShellWindowBridge(() => createTauriShellWindowBridge(options));
110
79
  }
111
80
  function tauriGlobal() {
112
- return globalThis.__TAURI__ ?? null;
81
+ return globalThis.__TAURI__ ?? null;
113
82
  }
114
83
  function defaultCurrentWindow() {
115
- return tauriGlobal()?.window?.getCurrentWindow?.() ?? null;
84
+ return tauriGlobal()?.window?.getCurrentWindow?.() ?? null;
116
85
  }
117
86
  function defaultPlatform() {
118
- const fromPlugin = tauriGlobal()?.os?.platform?.();
119
- if (fromPlugin !== undefined) {
120
- return fromPlugin;
121
- }
122
- const navigatorRef = globalThis
123
- .navigator;
124
- return navigatorRef?.userAgent ?? navigatorRef?.platform ?? '';
87
+ const fromPlugin = tauriGlobal()?.os?.platform?.();
88
+ if (fromPlugin !== void 0) return fromPlugin;
89
+ const navigatorRef = globalThis.navigator;
90
+ return navigatorRef?.userAgent ?? navigatorRef?.platform ?? "";
125
91
  }
126
-
127
- /**
128
- * State behind `<Shell>`: the persisted `mode` / `device` / `color` / `frame`
129
- * axes, plus
130
- * live window state read from whichever {@link ShellWindowBridge} the app
131
- * registered.
132
- *
133
- * Every axis resolves through a fallback chain, so an app can declare as much or
134
- * as little as it knows — and each is readable *and* writable through
135
- * localStorage, so a target can be flipped without a rebuild:
136
- *
137
- * - `mode` — stored `shell-mode`, else `desktop` when a desktop runtime is
138
- * registered (a Tauri window *is* a desktop shell), else `web`.
139
- * - `device` — stored `shell-device`, else whatever the bridge reports, else the
140
- * mode's default device.
141
- * - `color` — stored `shell-color`, else `sync`.
142
- * - `frame` — stored `shell-frame`, else `classic`.
143
- *
144
- * `<Shell>`'s own inputs sit in front of all of them, and `<Shell>` is also where
145
- * the pairs are forced to stay coherent (device with mode, frame with mode) — the values here are preferences,
146
- * so a stored `macos` survives a temporary switch to `mode='web'` instead of being
147
- * erased.
148
- *
149
- * With no bridge registered this resolves to the inert web bridge, so the same
150
- * component tree renders in a browser tab, in a unit test, and under SSR.
151
- */
152
- class ShellService {
153
- platformId = inject(PLATFORM_ID);
154
- storage = globalLocalStorage(isPlatformBrowser(this.platformId));
155
- destroyRef = inject(DestroyRef);
156
- bridge = inject(SHELL_WINDOW_BRIDGE, { optional: true }) ?? WEB_SHELL_WINDOW_BRIDGE;
157
- /** Runtime hosting the shell; `web` whenever no bridge is registered. */
158
- platform = this.bridge.platform;
159
- /** `true` for any non-browser runtime — i.e. there is a real OS window to drive. */
160
- isDesktopRuntime = this.bridge.platform !== 'web';
161
- modeState = signal(this.storedMode(), /* @ts-ignore */
162
- ...(ngDevMode ? [{ debugName: "modeState" }] : /* istanbul ignore next */ []));
163
- deviceState = signal(this.storedDevice(), /* @ts-ignore */
164
- ...(ngDevMode ? [{ debugName: "deviceState" }] : /* istanbul ignore next */ []));
165
- colorState = signal(this.storedColor(), /* @ts-ignore */
166
- ...(ngDevMode ? [{ debugName: "colorState" }] : /* istanbul ignore next */ []));
167
- frameState = signal(this.storedFrame(), /* @ts-ignore */
168
- ...(ngDevMode ? [{ debugName: "frameState" }] : /* istanbul ignore next */ []));
169
- reportedDeviceState = signal(null, /* @ts-ignore */
170
- ...(ngDevMode ? [{ debugName: "reportedDeviceState" }] : /* istanbul ignore next */ []));
171
- windowStateState = signal(SHELL_DEFAULT_WINDOW_STATE, /* @ts-ignore */
172
- ...(ngDevMode ? [{ debugName: "windowStateState" }] : /* istanbul ignore next */ []));
173
- focusedState = signal(true, /* @ts-ignore */
174
- ...(ngDevMode ? [{ debugName: "focusedState" }] : /* istanbul ignore next */ []));
175
- mode = this.modeState.asReadonly();
176
- /**
177
- * Preferred device: the stored choice, else what the runtime reports, else the
178
- * current mode's default. Not forced to match `mode()` — see the class note.
179
- */
180
- device = computed(() => this.deviceState() ??
181
- this.reportedDeviceState() ??
182
- defaultShellDeviceForMode(this.modeState()), /* @ts-ignore */
183
- ...(ngDevMode ? [{ debugName: "device" }] : /* istanbul ignore next */ []));
184
- /** Where the shell's chrome takes its colors from: the design system, or the device's native look. */
185
- color = this.colorState.asReadonly();
186
- /** How the app sits in its window: flush (`classic`) or inset as a panel (`modern`). */
187
- frame = this.frameState.asReadonly();
188
- windowState = this.windowStateState.asReadonly();
189
- focused = this.focusedState.asReadonly();
190
- isMaximized = computed(() => this.windowStateState() === 'maximized', /* @ts-ignore */
191
- ...(ngDevMode ? [{ debugName: "isMaximized" }] : /* istanbul ignore next */ []));
192
- isFullscreen = computed(() => this.windowStateState() === 'fullscreen', /* @ts-ignore */
193
- ...(ngDevMode ? [{ debugName: "isFullscreen" }] : /* istanbul ignore next */ []));
194
- constructor() {
195
- // Nothing to probe on the server, and the bridge would have no window yet.
196
- if (!isPlatformBrowser(this.platformId)) {
197
- return;
198
- }
199
- void this.sync();
200
- void this.watchWindow();
201
- }
202
- setMode(mode, options = {}) {
203
- this.modeState.set(mode);
204
- if (options.persist !== false) {
205
- this.storage.write(SHELL_MODE_STORAGE_KEY, mode);
206
- }
207
- }
208
- setDevice(device, options = {}) {
209
- this.deviceState.set(device);
210
- if (options.persist !== false) {
211
- this.storage.write(SHELL_DEVICE_STORAGE_KEY, device);
212
- }
213
- }
214
- setColor(color, options = {}) {
215
- this.colorState.set(color);
216
- if (options.persist !== false) {
217
- this.storage.write(SHELL_COLOR_STORAGE_KEY, color);
218
- }
219
- }
220
- setFrame(frame, options = {}) {
221
- this.frameState.set(frame);
222
- if (options.persist !== false) {
223
- this.storage.write(SHELL_FRAME_STORAGE_KEY, frame);
224
- }
225
- }
226
- /** Adopt `mode` as the default, unless a choice is already stored. */
227
- registerMode(mode) {
228
- if (!isShellMode(this.storage.read(SHELL_MODE_STORAGE_KEY))) {
229
- this.setMode(mode, { persist: false });
230
- }
231
- }
232
- /** Adopt `device` as the default, unless a choice is already stored. */
233
- registerDevice(device) {
234
- if (!isShellDevice(this.storage.read(SHELL_DEVICE_STORAGE_KEY))) {
235
- this.setDevice(device, { persist: false });
236
- }
237
- }
238
- /** Adopt `color` as the default, unless a choice is already stored. */
239
- registerColor(color) {
240
- if (!isShellColor(this.storage.read(SHELL_COLOR_STORAGE_KEY))) {
241
- this.setColor(color, { persist: false });
242
- }
243
- }
244
- /** Adopt `frame` as the default, unless a choice is already stored. */
245
- registerFrame(frame) {
246
- if (!isShellFrame(this.storage.read(SHELL_FRAME_STORAGE_KEY))) {
247
- this.setFrame(frame, { persist: false });
248
- }
249
- }
250
- /** Re-read the device and window state from the bridge. */
251
- async sync() {
252
- try {
253
- const [device, snapshot] = await Promise.all([this.bridge.device(), this.bridge.snapshot()]);
254
- this.reportedDeviceState.set(device);
255
- this.windowStateState.set(snapshot.state);
256
- this.focusedState.set(snapshot.focused);
257
- }
258
- catch {
259
- // A runtime can vanish mid-session (a window closing tears down its IPC).
260
- // Keep the last known state rather than failing the render.
261
- }
262
- }
263
- async minimize() {
264
- await this.command(() => this.bridge.minimize());
265
- }
266
- async toggleMaximize() {
267
- await this.command(() => this.bridge.toggleMaximize());
268
- }
269
- async close() {
270
- // No resync: the window is going away, and the bridge's IPC with it.
271
- await this.command(() => this.bridge.close(), { resync: false });
272
- }
273
- /** Start a pointer-driven window move, for runtimes that need an explicit call. */
274
- async startDragging() {
275
- await this.command(() => this.bridge.startDragging?.(), { resync: false });
276
- }
277
- async command(run, options = {}) {
278
- try {
279
- await run();
280
- }
281
- catch {
282
- return;
283
- }
284
- if (options.resync !== false) {
285
- await this.sync();
286
- }
287
- }
288
- async watchWindow() {
289
- const watch = this.bridge.watch;
290
- if (!watch) {
291
- return;
292
- }
293
- let unsubscribe;
294
- let destroyed = false;
295
- this.destroyRef.onDestroy(() => {
296
- destroyed = true;
297
- unsubscribe?.();
298
- });
299
- try {
300
- unsubscribe = await watch.call(this.bridge, () => void this.sync());
301
- }
302
- catch {
303
- return;
304
- }
305
- // The service may have been torn down while the subscription was in flight.
306
- if (destroyed) {
307
- unsubscribe();
308
- }
309
- }
310
- storedMode() {
311
- const stored = this.storage.read(SHELL_MODE_STORAGE_KEY);
312
- if (isShellMode(stored)) {
313
- return stored;
314
- }
315
- // A registered desktop runtime is itself the declaration: a Tauri or Electron
316
- // window is a desktop shell whether or not the app spelled it out.
317
- return this.isDesktopRuntime ? 'desktop' : SHELL_DEFAULT_MODE;
318
- }
319
- storedDevice() {
320
- const stored = this.storage.read(SHELL_DEVICE_STORAGE_KEY);
321
- return isShellDevice(stored) ? stored : null;
322
- }
323
- storedColor() {
324
- const stored = this.storage.read(SHELL_COLOR_STORAGE_KEY);
325
- return isShellColor(stored) ? stored : SHELL_DEFAULT_COLOR;
326
- }
327
- storedFrame() {
328
- const stored = this.storage.read(SHELL_FRAME_STORAGE_KEY);
329
- return isShellFrame(stored) ? stored : SHELL_DEFAULT_FRAME;
330
- }
331
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ShellService, deps: [], target: i0.ɵɵFactoryTarget.Service });
332
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.6", ngImport: i0, type: ShellService });
333
- }
334
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ShellService, decorators: [{
335
- type: Service
336
- }], ctorParameters: () => [] });
337
-
338
- /**
339
- * Generated bundle index. Do not edit.
340
- */
341
-
342
- export { SHELL_WINDOW_BRIDGE, ShellService, WEB_SHELL_WINDOW_BRIDGE, createTauriShellWindowBridge, isTauriRuntime, provideShellWindowBridge, provideTauriShellWindowBridge };
92
+ var ShellService = class ShellService {
93
+ platformId = inject(PLATFORM_ID);
94
+ storage = globalLocalStorage(isPlatformBrowser(this.platformId));
95
+ destroyRef = inject(DestroyRef);
96
+ bridge = inject(SHELL_WINDOW_BRIDGE, { optional: true }) ?? WEB_SHELL_WINDOW_BRIDGE;
97
+ platform = this.bridge.platform;
98
+ isDesktopRuntime = this.bridge.platform !== "web";
99
+ modeState = signal(this.storedMode(), ...ngDevMode ? [{ debugName: "modeState" }] : /* istanbul ignore next */ []);
100
+ deviceState = signal(this.storedDevice(), ...ngDevMode ? [{ debugName: "deviceState" }] : /* istanbul ignore next */ []);
101
+ colorState = signal(this.storedColor(), ...ngDevMode ? [{ debugName: "colorState" }] : /* istanbul ignore next */ []);
102
+ frameState = signal(this.storedFrame(), ...ngDevMode ? [{ debugName: "frameState" }] : /* istanbul ignore next */ []);
103
+ reportedDeviceState = signal(null, ...ngDevMode ? [{ debugName: "reportedDeviceState" }] : /* istanbul ignore next */ []);
104
+ windowStateState = signal(SHELL_DEFAULT_WINDOW_STATE, ...ngDevMode ? [{ debugName: "windowStateState" }] : /* istanbul ignore next */ []);
105
+ focusedState = signal(true, ...ngDevMode ? [{ debugName: "focusedState" }] : /* istanbul ignore next */ []);
106
+ mode = this.modeState.asReadonly();
107
+ device = computed(() => this.deviceState() ?? this.reportedDeviceState() ?? defaultShellDeviceForMode(this.modeState()), ...ngDevMode ? [{ debugName: "device" }] : /* istanbul ignore next */ []);
108
+ color = this.colorState.asReadonly();
109
+ frame = this.frameState.asReadonly();
110
+ windowState = this.windowStateState.asReadonly();
111
+ focused = this.focusedState.asReadonly();
112
+ isMaximized = computed(() => this.windowStateState() === "maximized", ...ngDevMode ? [{ debugName: "isMaximized" }] : /* istanbul ignore next */ []);
113
+ isFullscreen = computed(() => this.windowStateState() === "fullscreen", ...ngDevMode ? [{ debugName: "isFullscreen" }] : /* istanbul ignore next */ []);
114
+ constructor() {
115
+ if (!isPlatformBrowser(this.platformId)) return;
116
+ this.sync();
117
+ this.watchWindow();
118
+ }
119
+ setMode(mode, options = {}) {
120
+ this.modeState.set(mode);
121
+ if (options.persist !== false) this.storage.write(SHELL_MODE_STORAGE_KEY, mode);
122
+ }
123
+ setDevice(device, options = {}) {
124
+ this.deviceState.set(device);
125
+ if (options.persist !== false) this.storage.write(SHELL_DEVICE_STORAGE_KEY, device);
126
+ }
127
+ setColor(color, options = {}) {
128
+ this.colorState.set(color);
129
+ if (options.persist !== false) this.storage.write(SHELL_COLOR_STORAGE_KEY, color);
130
+ }
131
+ setFrame(frame, options = {}) {
132
+ this.frameState.set(frame);
133
+ if (options.persist !== false) this.storage.write(SHELL_FRAME_STORAGE_KEY, frame);
134
+ }
135
+ registerMode(mode) {
136
+ if (!isShellMode(this.storage.read(SHELL_MODE_STORAGE_KEY))) this.setMode(mode, { persist: false });
137
+ }
138
+ registerDevice(device) {
139
+ if (!isShellDevice(this.storage.read(SHELL_DEVICE_STORAGE_KEY))) this.setDevice(device, { persist: false });
140
+ }
141
+ registerColor(color) {
142
+ if (!isShellColor(this.storage.read(SHELL_COLOR_STORAGE_KEY))) this.setColor(color, { persist: false });
143
+ }
144
+ registerFrame(frame) {
145
+ if (!isShellFrame(this.storage.read(SHELL_FRAME_STORAGE_KEY))) this.setFrame(frame, { persist: false });
146
+ }
147
+ async sync() {
148
+ try {
149
+ const [device, snapshot] = await Promise.all([this.bridge.device(), this.bridge.snapshot()]);
150
+ this.reportedDeviceState.set(device);
151
+ this.windowStateState.set(snapshot.state);
152
+ this.focusedState.set(snapshot.focused);
153
+ } catch {}
154
+ }
155
+ async minimize() {
156
+ await this.command(() => this.bridge.minimize());
157
+ }
158
+ async toggleMaximize() {
159
+ await this.command(() => this.bridge.toggleMaximize());
160
+ }
161
+ async close() {
162
+ await this.command(() => this.bridge.close(), { resync: false });
163
+ }
164
+ async startDragging() {
165
+ await this.command(() => this.bridge.startDragging?.(), { resync: false });
166
+ }
167
+ async command(run, options = {}) {
168
+ try {
169
+ await run();
170
+ } catch {
171
+ return;
172
+ }
173
+ if (options.resync !== false) await this.sync();
174
+ }
175
+ async watchWindow() {
176
+ const watch = this.bridge.watch;
177
+ if (!watch) return;
178
+ let unsubscribe;
179
+ let destroyed = false;
180
+ this.destroyRef.onDestroy(() => {
181
+ destroyed = true;
182
+ unsubscribe?.();
183
+ });
184
+ try {
185
+ unsubscribe = await watch.call(this.bridge, () => void this.sync());
186
+ } catch {
187
+ return;
188
+ }
189
+ if (destroyed) unsubscribe();
190
+ }
191
+ storedMode() {
192
+ const stored = this.storage.read(SHELL_MODE_STORAGE_KEY);
193
+ if (isShellMode(stored)) return stored;
194
+ return this.isDesktopRuntime ? "desktop" : SHELL_DEFAULT_MODE;
195
+ }
196
+ storedDevice() {
197
+ const stored = this.storage.read(SHELL_DEVICE_STORAGE_KEY);
198
+ return isShellDevice(stored) ? stored : null;
199
+ }
200
+ storedColor() {
201
+ const stored = this.storage.read(SHELL_COLOR_STORAGE_KEY);
202
+ return isShellColor(stored) ? stored : SHELL_DEFAULT_COLOR;
203
+ }
204
+ storedFrame() {
205
+ const stored = this.storage.read(SHELL_FRAME_STORAGE_KEY);
206
+ return isShellFrame(stored) ? stored : SHELL_DEFAULT_FRAME;
207
+ }
208
+ static ɵfac = i0.ɵɵngDeclareFactory({
209
+ minVersion: "12.0.0",
210
+ version: "22.2.2",
211
+ ngImport: i0,
212
+ type: ShellService,
213
+ deps: [],
214
+ target: i0.ɵɵFactoryTarget.Service
215
+ });
216
+ static ɵprov = i0.ɵɵngDeclareService({
217
+ minVersion: "22.0.0",
218
+ version: "22.2.2",
219
+ ngImport: i0,
220
+ type: ShellService
221
+ });
222
+ };
223
+ i0.ɵɵngDeclareClassMetadata({
224
+ minVersion: "12.0.0",
225
+ version: "22.2.2",
226
+ ngImport: i0,
227
+ type: ShellService,
228
+ decorators: [{ type: Service }],
229
+ ctorParameters: () => []
230
+ });
231
+ export { SHELL_WINDOW_BRIDGE, ShellService, WEB_SHELL_WINDOW_BRIDGE, createTauriShellWindowBridge, isTauriRuntime, provideShellWindowBridge, provideTauriShellWindowBridge };