@mpgd/target-config 0.3.4 → 0.4.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/dist/viewport.d.ts +22 -0
- package/dist/viewport.js +57 -0
- package/package.json +1 -1
package/dist/viewport.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { TargetConfig, TargetRuntimeKind } from './runtime';
|
|
2
2
|
export type TargetViewportOrientation = 'portrait' | 'landscape';
|
|
3
|
+
export type TargetViewportOrientationPolicyMode = 'responsive' | 'prefer-landscape' | 'prefer-portrait' | 'lock-landscape' | 'lock-portrait';
|
|
4
|
+
export type TargetViewportOrientationMismatchBehavior = 'continue' | 'letterbox' | 'show-rotate-prompt';
|
|
3
5
|
export type TargetViewportSizeClass = 'compact' | 'medium' | 'expanded';
|
|
4
6
|
export type TargetViewportShell = 'browser' | 'mobile-webview' | 'embedded-webview';
|
|
5
7
|
export type TargetViewportMeasurementSource = 'container' | 'visual-viewport' | 'window' | 'unknown';
|
|
@@ -14,6 +16,7 @@ export interface TargetViewportInput {
|
|
|
14
16
|
readonly height: number;
|
|
15
17
|
readonly runtime?: TargetRuntimeKind;
|
|
16
18
|
readonly source?: TargetViewportMeasurementSource;
|
|
19
|
+
readonly orientationPolicy?: TargetViewportOrientationPolicy;
|
|
17
20
|
}
|
|
18
21
|
export interface TargetViewportLayout {
|
|
19
22
|
readonly width: number;
|
|
@@ -31,17 +34,36 @@ export interface TargetViewportRecommendation {
|
|
|
31
34
|
readonly secondaryPanels: TargetViewportPanelPlacement;
|
|
32
35
|
readonly safeAreaAware: boolean;
|
|
33
36
|
}
|
|
37
|
+
export interface TargetViewportOrientationPolicy {
|
|
38
|
+
readonly mode: TargetViewportOrientationPolicyMode;
|
|
39
|
+
readonly mismatchBehavior?: TargetViewportOrientationMismatchBehavior;
|
|
40
|
+
}
|
|
41
|
+
export interface TargetViewportOrientationPlan {
|
|
42
|
+
readonly mode: TargetViewportOrientationPolicyMode;
|
|
43
|
+
readonly preferredOrientation?: TargetViewportOrientation;
|
|
44
|
+
readonly lockedOrientation?: TargetViewportOrientation;
|
|
45
|
+
readonly mismatchBehavior: TargetViewportOrientationMismatchBehavior;
|
|
46
|
+
readonly isMismatch: boolean;
|
|
47
|
+
readonly shouldLetterbox: boolean;
|
|
48
|
+
readonly shouldShowRotatePrompt: boolean;
|
|
49
|
+
}
|
|
34
50
|
export interface TargetViewportPlan {
|
|
35
51
|
readonly layout: TargetViewportLayout;
|
|
36
52
|
readonly recommendation: TargetViewportRecommendation;
|
|
53
|
+
readonly orientation: TargetViewportOrientationPlan;
|
|
37
54
|
}
|
|
38
55
|
export declare const defaultTargetViewportBreakpoints: {
|
|
39
56
|
readonly compactMaxWidth: 599;
|
|
40
57
|
readonly expandedMinWidth: 900;
|
|
41
58
|
};
|
|
59
|
+
export declare const defaultTargetViewportOrientationPolicy: {
|
|
60
|
+
readonly mode: 'responsive';
|
|
61
|
+
readonly mismatchBehavior: 'continue';
|
|
62
|
+
};
|
|
42
63
|
export declare function targetViewportShellForRuntime(runtime: TargetRuntimeKind): TargetViewportShell;
|
|
43
64
|
export declare function targetViewportShellForConfig(config: Pick<TargetConfig, 'runtime'>): TargetViewportShell;
|
|
44
65
|
export declare function resolveTargetViewportLayout(input: TargetViewportInput, breakpoints?: TargetViewportBreakpoints): TargetViewportLayout;
|
|
45
66
|
export declare function resolveTargetViewportSizeClass(width: number, breakpoints?: TargetViewportBreakpoints): TargetViewportSizeClass;
|
|
46
67
|
export declare function resolveTargetViewportRecommendation(layout: TargetViewportLayout): TargetViewportRecommendation;
|
|
68
|
+
export declare function resolveTargetViewportOrientationPlan(layout: Pick<TargetViewportLayout, 'orientation'>, policy?: TargetViewportOrientationPolicy): TargetViewportOrientationPlan;
|
|
47
69
|
export declare function resolveTargetViewportPlan(input: TargetViewportInput, breakpoints?: TargetViewportBreakpoints): TargetViewportPlan;
|
package/dist/viewport.js
CHANGED
|
@@ -2,6 +2,37 @@ export const defaultTargetViewportBreakpoints = {
|
|
|
2
2
|
compactMaxWidth: 599,
|
|
3
3
|
expandedMinWidth: 900,
|
|
4
4
|
};
|
|
5
|
+
export const defaultTargetViewportOrientationPolicy = {
|
|
6
|
+
mode: 'responsive',
|
|
7
|
+
mismatchBehavior: 'continue',
|
|
8
|
+
};
|
|
9
|
+
const targetViewportOrientationPolicyModeDescriptors = {
|
|
10
|
+
responsive: {
|
|
11
|
+
preferredOrientation: undefined,
|
|
12
|
+
lockedOrientation: undefined,
|
|
13
|
+
isLocked: false,
|
|
14
|
+
},
|
|
15
|
+
'prefer-landscape': {
|
|
16
|
+
preferredOrientation: 'landscape',
|
|
17
|
+
lockedOrientation: undefined,
|
|
18
|
+
isLocked: false,
|
|
19
|
+
},
|
|
20
|
+
'prefer-portrait': {
|
|
21
|
+
preferredOrientation: 'portrait',
|
|
22
|
+
lockedOrientation: undefined,
|
|
23
|
+
isLocked: false,
|
|
24
|
+
},
|
|
25
|
+
'lock-landscape': {
|
|
26
|
+
preferredOrientation: 'landscape',
|
|
27
|
+
lockedOrientation: 'landscape',
|
|
28
|
+
isLocked: true,
|
|
29
|
+
},
|
|
30
|
+
'lock-portrait': {
|
|
31
|
+
preferredOrientation: 'portrait',
|
|
32
|
+
lockedOrientation: 'portrait',
|
|
33
|
+
isLocked: true,
|
|
34
|
+
},
|
|
35
|
+
};
|
|
5
36
|
export function targetViewportShellForRuntime(runtime) {
|
|
6
37
|
switch (runtime) {
|
|
7
38
|
case 'capacitor-android':
|
|
@@ -51,11 +82,29 @@ export function resolveTargetViewportRecommendation(layout) {
|
|
|
51
82
|
safeAreaAware: layout.shell !== 'browser' || layout.sizeClass === 'compact' || browserSafeAreaRisk,
|
|
52
83
|
};
|
|
53
84
|
}
|
|
85
|
+
export function resolveTargetViewportOrientationPlan(layout, policy = defaultTargetViewportOrientationPolicy) {
|
|
86
|
+
const normalizedPolicy = normalizeTargetViewportOrientationPolicy(policy);
|
|
87
|
+
const descriptor = targetViewportOrientationPolicyModeDescriptors[normalizedPolicy.mode];
|
|
88
|
+
const preferredOrientation = descriptor.preferredOrientation;
|
|
89
|
+
const lockedOrientation = descriptor.lockedOrientation;
|
|
90
|
+
const isMismatch = preferredOrientation !== undefined && layout.orientation !== preferredOrientation;
|
|
91
|
+
const mismatchBehavior = normalizedPolicy.mismatchBehavior;
|
|
92
|
+
return {
|
|
93
|
+
mode: normalizedPolicy.mode,
|
|
94
|
+
...(preferredOrientation === undefined ? {} : { preferredOrientation }),
|
|
95
|
+
...(lockedOrientation === undefined ? {} : { lockedOrientation }),
|
|
96
|
+
mismatchBehavior,
|
|
97
|
+
isMismatch,
|
|
98
|
+
shouldLetterbox: isMismatch && mismatchBehavior === 'letterbox',
|
|
99
|
+
shouldShowRotatePrompt: isMismatch && mismatchBehavior === 'show-rotate-prompt',
|
|
100
|
+
};
|
|
101
|
+
}
|
|
54
102
|
export function resolveTargetViewportPlan(input, breakpoints = defaultTargetViewportBreakpoints) {
|
|
55
103
|
const layout = resolveTargetViewportLayout(input, breakpoints);
|
|
56
104
|
return {
|
|
57
105
|
layout,
|
|
58
106
|
recommendation: resolveTargetViewportRecommendation(layout),
|
|
107
|
+
orientation: resolveTargetViewportOrientationPlan(layout, input.orientationPolicy),
|
|
59
108
|
};
|
|
60
109
|
}
|
|
61
110
|
function classifyTargetViewportSize(width, breakpoints) {
|
|
@@ -76,6 +125,14 @@ function resolveTargetViewportPanelPlacement(layout) {
|
|
|
76
125
|
}
|
|
77
126
|
return 'side';
|
|
78
127
|
}
|
|
128
|
+
function normalizeTargetViewportOrientationPolicy(policy) {
|
|
129
|
+
const descriptor = targetViewportOrientationPolicyModeDescriptors[policy.mode];
|
|
130
|
+
return {
|
|
131
|
+
mode: policy.mode,
|
|
132
|
+
mismatchBehavior: policy.mismatchBehavior ??
|
|
133
|
+
(descriptor.isLocked ? 'show-rotate-prompt' : 'continue'),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
79
136
|
function normalizeTargetViewportBreakpoints(breakpoints) {
|
|
80
137
|
const compactMaxWidth = normalizeViewportDimension(breakpoints.compactMaxWidth, 'compactMaxWidth');
|
|
81
138
|
const expandedMinWidth = normalizeViewportDimension(breakpoints.expandedMinWidth, 'expandedMinWidth');
|