@ojiepermana/angular 22.1.14 → 22.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -6
- package/SUPPORT.md +3 -3
- package/chart/README.md +1 -1
- package/component/README.md +2 -2
- package/component/calendar/README.md +3 -15
- package/component/drawer/README.md +1 -2
- package/fesm2022/ojiepermana-angular-chart-area.mjs +352 -137
- package/fesm2022/ojiepermana-angular-chart-bar.mjs +744 -524
- package/fesm2022/ojiepermana-angular-chart-core.mjs +1140 -1344
- package/fesm2022/ojiepermana-angular-chart-line.mjs +393 -147
- package/fesm2022/ojiepermana-angular-chart-pie.mjs +408 -179
- package/fesm2022/ojiepermana-angular-chart-primitives.mjs +1262 -920
- package/fesm2022/ojiepermana-angular-chart-radar.mjs +473 -205
- package/fesm2022/ojiepermana-angular-chart-radial.mjs +425 -182
- package/fesm2022/ojiepermana-angular-chart-scatter.mjs +386 -210
- package/fesm2022/ojiepermana-angular-chart.mjs +3 -19
- package/fesm2022/ojiepermana-angular-component-accordion.mjs +485 -243
- package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +963 -325
- package/fesm2022/ojiepermana-angular-component-alert.mjs +266 -103
- package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +80 -35
- package/fesm2022/ojiepermana-angular-component-avatar.mjs +402 -135
- package/fesm2022/ojiepermana-angular-component-badge.mjs +109 -59
- package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +410 -142
- package/fesm2022/ojiepermana-angular-component-button-group.mjs +249 -96
- package/fesm2022/ojiepermana-angular-component-button.mjs +153 -75
- package/fesm2022/ojiepermana-angular-component-calendar.mjs +531 -418
- package/fesm2022/ojiepermana-angular-component-card.mjs +457 -171
- package/fesm2022/ojiepermana-angular-component-carousel.mjs +642 -272
- package/fesm2022/ojiepermana-angular-component-checkbox.mjs +312 -108
- package/fesm2022/ojiepermana-angular-component-collapsible.mjs +299 -115
- package/fesm2022/ojiepermana-angular-component-combobox.mjs +396 -183
- package/fesm2022/ojiepermana-angular-component-command.mjs +807 -347
- package/fesm2022/ojiepermana-angular-component-composer.mjs +807 -330
- package/fesm2022/ojiepermana-angular-component-context-menu.mjs +196 -161
- package/fesm2022/ojiepermana-angular-component-date-picker.mjs +650 -338
- package/fesm2022/ojiepermana-angular-component-dialog.mjs +710 -316
- package/fesm2022/ojiepermana-angular-component-drawer.mjs +2 -5
- package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +1212 -646
- package/fesm2022/ojiepermana-angular-component-editor.mjs +987 -502
- package/fesm2022/ojiepermana-angular-component-empty.mjs +350 -137
- package/fesm2022/ojiepermana-angular-component-form.mjs +813 -434
- package/fesm2022/ojiepermana-angular-component-hover-card.mjs +486 -277
- package/fesm2022/ojiepermana-angular-component-icon.mjs +241 -140
- package/fesm2022/ojiepermana-angular-component-input-group.mjs +449 -176
- package/fesm2022/ojiepermana-angular-component-input-otp.mjs +891 -488
- package/fesm2022/ojiepermana-angular-component-input.mjs +86 -55
- package/fesm2022/ojiepermana-angular-component-item.mjs +713 -261
- package/fesm2022/ojiepermana-angular-component-kanban.mjs +714 -216
- package/fesm2022/ojiepermana-angular-component-kbd.mjs +124 -52
- package/fesm2022/ojiepermana-angular-component-label.mjs +82 -31
- package/fesm2022/ojiepermana-angular-component-menubar.mjs +479 -329
- package/fesm2022/ojiepermana-angular-component-native-select.mjs +167 -65
- package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs +683 -380
- package/fesm2022/ojiepermana-angular-component-pagination.mjs +277 -94
- package/fesm2022/ojiepermana-angular-component-pillbox.mjs +1283 -607
- package/fesm2022/ojiepermana-angular-component-popover.mjs +291 -204
- package/fesm2022/ojiepermana-angular-component-progress.mjs +176 -53
- package/fesm2022/ojiepermana-angular-component-radio.mjs +449 -142
- package/fesm2022/ojiepermana-angular-component-resizable.mjs +659 -453
- package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +117 -39
- package/fesm2022/ojiepermana-angular-component-segmented-control.mjs +351 -172
- package/fesm2022/ojiepermana-angular-component-select.mjs +475 -345
- package/fesm2022/ojiepermana-angular-component-separator.mjs +102 -35
- package/fesm2022/ojiepermana-angular-component-sheet.mjs +797 -347
- package/fesm2022/ojiepermana-angular-component-skeleton.mjs +62 -29
- package/fesm2022/ojiepermana-angular-component-slider.mjs +592 -376
- package/fesm2022/ojiepermana-angular-component-spinner.mjs +135 -38
- package/fesm2022/ojiepermana-angular-component-switch.mjs +315 -103
- package/fesm2022/ojiepermana-angular-component-table.mjs +440 -153
- package/fesm2022/ojiepermana-angular-component-tabs.mjs +590 -317
- package/fesm2022/ojiepermana-angular-component-textarea.mjs +85 -50
- package/fesm2022/ojiepermana-angular-component-timeline.mjs +609 -231
- package/fesm2022/ojiepermana-angular-component-toast.mjs +229 -243
- package/fesm2022/ojiepermana-angular-component-toggle-group.mjs +573 -288
- package/fesm2022/ojiepermana-angular-component-toggle.mjs +187 -78
- package/fesm2022/ojiepermana-angular-component-tooltip.mjs +798 -517
- package/fesm2022/ojiepermana-angular-component-utils-core.mjs +159 -292
- package/fesm2022/ojiepermana-angular-component-utils-overlay.mjs +46 -58
- package/fesm2022/ojiepermana-angular-component-utils-scale.mjs +76 -38
- package/fesm2022/ojiepermana-angular-component-utils.mjs +2 -8
- package/fesm2022/ojiepermana-angular-component.mjs +0 -10
- package/fesm2022/ojiepermana-angular-navigation-core.mjs +13 -23
- package/fesm2022/ojiepermana-angular-navigation-icon.mjs +35 -24
- package/fesm2022/ojiepermana-angular-navigation-navigation-badge-count.component-BKCeWzml.mjs +129 -0
- package/fesm2022/ojiepermana-angular-navigation-navigation-dockbar-menu.component-DFEJK2jD.mjs +811 -0
- package/fesm2022/{ojiepermana-angular-navigation-navigation-entry-grid.component-COQ-60DS.mjs → ojiepermana-angular-navigation-navigation-entry-grid.component-mpK9Ar08.mjs} +387 -183
- package/fesm2022/ojiepermana-angular-navigation-navigation-flyout-menu.component-BPgH7FJk.mjs +650 -0
- package/fesm2022/ojiepermana-angular-navigation-navigation-horizontal.component-DMpYcD9t.mjs +662 -0
- package/fesm2022/ojiepermana-angular-navigation-navigation-item.component-Basp5SIk.mjs +1228 -0
- package/fesm2022/ojiepermana-angular-navigation-navigation-list.component-YUzHI9Pj.mjs +311 -0
- package/fesm2022/ojiepermana-angular-navigation-service.mjs +542 -724
- package/fesm2022/ojiepermana-angular-navigation-types.mjs +27 -56
- package/fesm2022/ojiepermana-angular-navigation.mjs +3052 -4
- package/fesm2022/ojiepermana-angular-sdk.mjs +91 -201
- package/fesm2022/ojiepermana-angular-theme-component-settings.mjs +1115 -737
- package/fesm2022/ojiepermana-angular-theme-layout-services.mjs +245 -328
- package/fesm2022/ojiepermana-angular-theme-layout-types.mjs +35 -38
- package/fesm2022/ojiepermana-angular-theme-layout-wrapper.mjs +1719 -552
- package/fesm2022/ojiepermana-angular-theme-layout.mjs +847 -496
- package/fesm2022/ojiepermana-angular-theme-page-core.mjs +288 -358
- package/fesm2022/ojiepermana-angular-theme-page-filter.mjs +362 -224
- package/fesm2022/ojiepermana-angular-theme-page-overview.mjs +88 -0
- package/fesm2022/ojiepermana-angular-theme-page-root.mjs +576 -254
- package/fesm2022/ojiepermana-angular-theme-page-side.mjs +317 -177
- package/fesm2022/ojiepermana-angular-theme-page-slots.mjs +256 -112
- package/fesm2022/ojiepermana-angular-theme-page.mjs +7 -12
- package/fesm2022/ojiepermana-angular-theme-shell-services.mjs +215 -326
- package/fesm2022/ojiepermana-angular-theme-shell-types.mjs +68 -129
- package/fesm2022/ojiepermana-angular-theme-shell.mjs +907 -378
- package/fesm2022/ojiepermana-angular-theme-styles.mjs +521 -720
- package/fesm2022/ojiepermana-angular-theme.mjs +0 -10
- package/fesm2022/ojiepermana-angular.mjs +5 -24
- package/navigation/README.md +1 -1
- package/package.json +16 -12
- package/sdk/README.md +1 -1
- package/sdk/src/writer/index.js +2 -2
- package/theme/README.md +1 -1
- package/theme/layout/README.md +2 -4
- package/theme/page/README.md +50 -0
- package/theme/styles/README.md +10 -10
- package/theme/styles/css/base/prefers-dark.css +1 -1
- package/theme/styles/css/base/status.css +1 -1
- package/theme/styles/css/color/amber.css +1 -1
- package/theme/styles/css/color/blue.css +1 -1
- package/theme/styles/css/color/cyan.css +1 -1
- package/theme/styles/css/color/emerald.css +1 -1
- package/theme/styles/css/color/fuchsia.css +1 -1
- package/theme/styles/css/color/green.css +1 -1
- package/theme/styles/css/color/indigo.css +1 -1
- package/theme/styles/css/color/lime.css +1 -1
- package/theme/styles/css/color/orange.css +1 -1
- package/theme/styles/css/color/pink.css +1 -1
- package/theme/styles/css/color/purple.css +1 -1
- package/theme/styles/css/color/red.css +1 -1
- package/theme/styles/css/color/rose.css +1 -1
- package/theme/styles/css/color/sky.css +1 -1
- package/theme/styles/css/color/teal.css +1 -1
- package/theme/styles/css/color/violet.css +1 -1
- package/theme/styles/css/color/yellow.css +1 -1
- package/theme/styles/css/neutral/gray.css +1 -1
- package/theme/styles/css/neutral/mauve.css +1 -1
- package/theme/styles/css/neutral/mist.css +1 -1
- package/theme/styles/css/neutral/neutral.css +1 -1
- package/theme/styles/css/neutral/olive.css +1 -1
- package/theme/styles/css/neutral/slate.css +1 -1
- package/theme/styles/css/neutral/stone.css +1 -1
- package/theme/styles/css/neutral/taupe.css +1 -1
- package/theme/styles/css/neutral/zinc.css +1 -1
- package/types/ojiepermana-angular-chart-area.d.ts +126 -63
- package/types/ojiepermana-angular-chart-bar.d.ts +244 -154
- package/types/ojiepermana-angular-chart-core.d.ts +409 -398
- package/types/ojiepermana-angular-chart-line.d.ts +141 -68
- package/types/ojiepermana-angular-chart-pie.d.ts +192 -121
- package/types/ojiepermana-angular-chart-primitives.d.ts +283 -214
- package/types/ojiepermana-angular-chart-radar.d.ts +189 -108
- package/types/ojiepermana-angular-chart-radial.d.ts +177 -106
- package/types/ojiepermana-angular-chart-scatter.d.ts +166 -110
- package/types/ojiepermana-angular-chart.d.ts +3 -2
- package/types/ojiepermana-angular-component-accordion.d.ts +135 -81
- package/types/ojiepermana-angular-component-alert-dialog.d.ts +271 -123
- package/types/ojiepermana-angular-component-alert.d.ts +69 -39
- package/types/ojiepermana-angular-component-aspect-ratio.d.ts +20 -12
- package/types/ojiepermana-angular-component-avatar.d.ts +103 -49
- package/types/ojiepermana-angular-component-badge.d.ts +36 -24
- package/types/ojiepermana-angular-component-breadcrumb.d.ts +79 -40
- package/types/ojiepermana-angular-component-button-group.d.ts +48 -24
- package/types/ojiepermana-angular-component-button.d.ts +44 -27
- package/types/ojiepermana-angular-component-calendar.d.ts +145 -107
- package/types/ojiepermana-angular-component-card.d.ts +112 -63
- package/types/ojiepermana-angular-component-carousel.d.ts +150 -81
- package/types/ojiepermana-angular-component-checkbox.d.ts +96 -38
- package/types/ojiepermana-angular-component-collapsible.d.ts +65 -39
- package/types/ojiepermana-angular-component-combobox.d.ts +100 -55
- package/types/ojiepermana-angular-component-command.d.ts +206 -121
- package/types/ojiepermana-angular-component-composer.d.ts +184 -84
- package/types/ojiepermana-angular-component-context-menu.d.ts +51 -41
- package/types/ojiepermana-angular-component-date-picker.d.ts +199 -109
- package/types/ojiepermana-angular-component-dialog.d.ts +200 -105
- package/types/ojiepermana-angular-component-drawer.d.ts +2 -1
- package/types/ojiepermana-angular-component-dropdown-menu.d.ts +324 -202
- package/types/ojiepermana-angular-component-editor.d.ts +215 -117
- package/types/ojiepermana-angular-component-empty.d.ts +80 -45
- package/types/ojiepermana-angular-component-form.d.ts +185 -121
- package/types/ojiepermana-angular-component-hover-card.d.ts +130 -72
- package/types/ojiepermana-angular-component-icon.d.ts +87 -57
- package/types/ojiepermana-angular-component-input-group.d.ts +93 -46
- package/types/ojiepermana-angular-component-input-otp.d.ts +243 -150
- package/types/ojiepermana-angular-component-input.d.ts +27 -17
- package/types/ojiepermana-angular-component-item.d.ts +160 -84
- package/types/ojiepermana-angular-component-kanban.d.ts +157 -62
- package/types/ojiepermana-angular-component-kbd.d.ts +24 -15
- package/types/ojiepermana-angular-component-label.d.ts +19 -11
- package/types/ojiepermana-angular-component-menubar.d.ts +120 -90
- package/types/ojiepermana-angular-component-native-select.d.ts +37 -24
- package/types/ojiepermana-angular-component-navigation-menu.d.ts +157 -98
- package/types/ojiepermana-angular-component-pagination.d.ts +78 -28
- package/types/ojiepermana-angular-component-pillbox.d.ts +361 -204
- package/types/ojiepermana-angular-component-popover.d.ts +94 -64
- package/types/ojiepermana-angular-component-progress.d.ts +45 -17
- package/types/ojiepermana-angular-component-radio.d.ts +129 -53
- package/types/ojiepermana-angular-component-resizable.d.ts +160 -112
- package/types/ojiepermana-angular-component-scroll-area.d.ts +33 -15
- package/types/ojiepermana-angular-component-segmented-control.d.ts +94 -50
- package/types/ojiepermana-angular-component-select.d.ts +94 -77
- package/types/ojiepermana-angular-component-separator.d.ts +26 -14
- package/types/ojiepermana-angular-component-sheet.d.ts +226 -116
- package/types/ojiepermana-angular-component-skeleton.d.ts +13 -10
- package/types/ojiepermana-angular-component-slider.d.ts +140 -75
- package/types/ojiepermana-angular-component-spinner.d.ts +31 -13
- package/types/ojiepermana-angular-component-switch.d.ts +97 -40
- package/types/ojiepermana-angular-component-table.d.ts +102 -50
- package/types/ojiepermana-angular-component-tabs.d.ts +174 -115
- package/types/ojiepermana-angular-component-textarea.d.ts +27 -17
- package/types/ojiepermana-angular-component-timeline.d.ts +141 -59
- package/types/ojiepermana-angular-component-toast.d.ts +51 -55
- package/types/ojiepermana-angular-component-toggle-group.d.ts +159 -88
- package/types/ojiepermana-angular-component-toggle.d.ts +47 -25
- package/types/ojiepermana-angular-component-tooltip.d.ts +222 -132
- package/types/ojiepermana-angular-component-utils-core.d.ts +81 -90
- package/types/ojiepermana-angular-component-utils-overlay.d.ts +7 -11
- package/types/ojiepermana-angular-component-utils-scale.d.ts +20 -12
- package/types/ojiepermana-angular-component-utils.d.ts +2 -2
- package/types/ojiepermana-angular-component.d.ts +1 -2
- package/types/ojiepermana-angular-navigation-core.d.ts +46 -50
- package/types/ojiepermana-angular-navigation-icon.d.ts +9 -12
- package/types/ojiepermana-angular-navigation-service.d.ts +112 -115
- package/types/ojiepermana-angular-navigation-types.d.ts +121 -125
- package/types/ojiepermana-angular-navigation.d.ts +663 -374
- package/types/ojiepermana-angular-sdk.d.ts +69 -71
- package/types/ojiepermana-angular-theme-component-settings.d.ts +115 -83
- package/types/ojiepermana-angular-theme-layout-services.d.ts +119 -124
- package/types/ojiepermana-angular-theme-layout-types.d.ts +27 -31
- package/types/ojiepermana-angular-theme-layout-wrapper.d.ts +399 -187
- package/types/ojiepermana-angular-theme-layout.d.ts +201 -113
- package/types/ojiepermana-angular-theme-page-core.d.ts +136 -142
- package/types/ojiepermana-angular-theme-page-filter.d.ts +112 -62
- package/types/ojiepermana-angular-theme-page-overview.d.ts +28 -0
- package/types/ojiepermana-angular-theme-page-root.d.ts +172 -88
- package/types/ojiepermana-angular-theme-page-side.d.ts +89 -49
- package/types/ojiepermana-angular-theme-page-slots.d.ts +58 -37
- package/types/ojiepermana-angular-theme-page.d.ts +7 -5
- package/types/ojiepermana-angular-theme-shell-services.d.ts +119 -125
- package/types/ojiepermana-angular-theme-shell-types.d.ts +38 -41
- package/types/ojiepermana-angular-theme-shell.d.ts +139 -61
- package/types/ojiepermana-angular-theme-styles.d.ts +184 -196
- package/types/ojiepermana-angular-theme.d.ts +1 -2
- package/types/ojiepermana-angular.d.ts +5 -5
- package/fesm2022/ojiepermana-angular-navigation-navigation-badge-count.component-Be3IqzG4.mjs +0 -91
- package/fesm2022/ojiepermana-angular-navigation-navigation-dockbar-menu.component-Bc7DWK3R.mjs +0 -522
- package/fesm2022/ojiepermana-angular-navigation-navigation-flyout-menu.component-DA8VPEn7.mjs +0 -404
- package/fesm2022/ojiepermana-angular-navigation-navigation-horizontal.component-U2TJTzlW.mjs +0 -466
- package/fesm2022/ojiepermana-angular-navigation-ojiepermana-angular-navigation-CIUhmytH.mjs +0 -2668
|
@@ -1,342 +1,231 @@
|
|
|
1
|
-
import * as i0 from
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { isPlatformBrowser } from
|
|
5
|
-
import { globalLocalStorage } from
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
37
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
78
|
+
return provideShellWindowBridge(() => createTauriShellWindowBridge(options));
|
|
110
79
|
}
|
|
111
80
|
function tauriGlobal() {
|
|
112
|
-
|
|
81
|
+
return globalThis.__TAURI__ ?? null;
|
|
113
82
|
}
|
|
114
83
|
function defaultCurrentWindow() {
|
|
115
|
-
|
|
84
|
+
return tauriGlobal()?.window?.getCurrentWindow?.() ?? null;
|
|
116
85
|
}
|
|
117
86
|
function defaultPlatform() {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
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.0",
|
|
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.0",
|
|
219
|
+
ngImport: i0,
|
|
220
|
+
type: ShellService
|
|
221
|
+
});
|
|
222
|
+
};
|
|
223
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
224
|
+
minVersion: "12.0.0",
|
|
225
|
+
version: "22.2.0",
|
|
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 };
|