@octane-xplat/camera 0.15.0 → 0.16.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.
- package/package.json +4 -4
- package/src/CameraView.android.tsrx +3 -17
- package/src/CameraView.ios.tsrx +1 -16
- package/src/CameraView.macos.tsrx +1 -16
- package/src/CameraView.windows.tsrx +3 -17
- package/src/layout-child.ts +39 -18
- package/src/layout-child.windows.ts +5 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@octane-xplat/camera",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.1",
|
|
4
4
|
"description": "Live camera preview for Octane xplat — web getUserMedia + native capture (AVCapture / CameraX)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"android",
|
|
@@ -43,16 +43,16 @@
|
|
|
43
43
|
"access": "public"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@octane-xplat/platform": "0.
|
|
46
|
+
"@octane-xplat/platform": "0.16.1",
|
|
47
47
|
"mediabunny": "1.61.3"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@nativescript-community/octane": "0.2.5",
|
|
51
51
|
"@nativescript/core": "9.1.3",
|
|
52
|
-
"@octane-xplat/macos-renderer": "0.
|
|
52
|
+
"@octane-xplat/macos-renderer": "0.16.1",
|
|
53
53
|
"@octanejs/vite-plugin": "0.1.61",
|
|
54
54
|
"octane": "0.11.0",
|
|
55
|
-
"tsrx-typegen": "0.3.
|
|
55
|
+
"tsrx-typegen": "0.3.1",
|
|
56
56
|
"typescript": "5.9.3",
|
|
57
57
|
"vite": "8.3.0",
|
|
58
58
|
"vitest": "4.1.11"
|
|
@@ -130,21 +130,7 @@ export function CameraView(props: CameraViewProps) @{
|
|
|
130
130
|
|
|
131
131
|
useEffect(() => observePreviewTap(host.current, props.onTap), [props.onTap])
|
|
132
132
|
|
|
133
|
-
<
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
columns="*"
|
|
137
|
-
className={['vx-layers', 'vx-cameraview', props.className]}
|
|
138
|
-
style={{ backgroundColor: '#000', ...props.style }}
|
|
139
|
-
{...layoutChildProps(props)}
|
|
140
|
-
accessible={props.accessible}
|
|
141
|
-
accessibilityLabel={props.accessibilityLabel}
|
|
142
|
-
accessibilityRole={nativeAccessibilityRole(props.accessibilityRole) as any}
|
|
143
|
-
accessibilityHint={props.accessibilityHint}
|
|
144
|
-
accessibilityValue={props.accessibilityValue}
|
|
145
|
-
accessibilityState={nativeAccessibilityState(props.accessibilityState) as any}
|
|
146
|
-
accessibilityLiveRegion={props.accessibilityLiveRegion as any}
|
|
147
|
-
>
|
|
148
|
-
<camerapreview ref={bindHost} row={0} col={0} />
|
|
149
|
-
</gridlayout>
|
|
133
|
+
<masonview id={props.id} className={['vx-layers', 'vx-cameraview', props.className]} {...layoutChildProps(props, {display: "grid", gridTemplateRows: "1fr", gridTemplateColumns: "1fr", ...({ backgroundColor: '#000', ...props.style })})} accessible={props.accessible} accessibilityLabel={props.accessibilityLabel} accessibilityRole={nativeAccessibilityRole(props.accessibilityRole) as any} accessibilityHint={props.accessibilityHint} accessibilityValue={props.accessibilityValue} accessibilityState={nativeAccessibilityState(props.accessibilityState) as any} accessibilityLiveRegion={props.accessibilityLiveRegion as any}>
|
|
134
|
+
<camerapreview ref={bindHost} style={{gridRow: '1', gridColumn: '1'}} />
|
|
135
|
+
</masonview>
|
|
150
136
|
}
|
package/src/CameraView.ios.tsrx
CHANGED
|
@@ -83,20 +83,5 @@ export function CameraView(props: CameraViewProps) @{
|
|
|
83
83
|
|
|
84
84
|
useEffect(() => observePreviewTap(host.current, props.onTap), [props.onTap])
|
|
85
85
|
|
|
86
|
-
<
|
|
87
|
-
ref={bindHost}
|
|
88
|
-
id={props.id}
|
|
89
|
-
rows="*"
|
|
90
|
-
columns="*"
|
|
91
|
-
className={['vx-layers', 'vx-cameraview', props.className]}
|
|
92
|
-
style={{ backgroundColor: '#000', ...props.style }}
|
|
93
|
-
{...layoutChildProps(props)}
|
|
94
|
-
accessible={props.accessible}
|
|
95
|
-
accessibilityLabel={props.accessibilityLabel}
|
|
96
|
-
accessibilityRole={nativeAccessibilityRole(props.accessibilityRole) as any}
|
|
97
|
-
accessibilityHint={props.accessibilityHint}
|
|
98
|
-
accessibilityValue={props.accessibilityValue}
|
|
99
|
-
accessibilityState={nativeAccessibilityState(props.accessibilityState) as any}
|
|
100
|
-
accessibilityLiveRegion={props.accessibilityLiveRegion as any}
|
|
101
|
-
/>
|
|
86
|
+
<masonview ref={bindHost} id={props.id} className={['vx-layers', 'vx-cameraview', props.className]} {...layoutChildProps(props, {display: "grid", gridTemplateRows: "1fr", gridTemplateColumns: "1fr", ...({ backgroundColor: '#000', ...props.style })})} accessible={props.accessible} accessibilityLabel={props.accessibilityLabel} accessibilityRole={nativeAccessibilityRole(props.accessibilityRole) as any} accessibilityHint={props.accessibilityHint} accessibilityValue={props.accessibilityValue} accessibilityState={nativeAccessibilityState(props.accessibilityState) as any} accessibilityLiveRegion={props.accessibilityLiveRegion as any}/>
|
|
102
87
|
}
|
|
@@ -76,20 +76,5 @@ export function CameraView(props: CameraViewProps) @{
|
|
|
76
76
|
|
|
77
77
|
useEffect(() => observePreviewTap(host.current, props.onTap), [props.onTap])
|
|
78
78
|
|
|
79
|
-
<
|
|
80
|
-
ref={bindHost}
|
|
81
|
-
id={props.id}
|
|
82
|
-
rows="*"
|
|
83
|
-
columns="*"
|
|
84
|
-
className={['vx-layers', 'vx-cameraview', props.className]}
|
|
85
|
-
style={{ backgroundColor: '#000000', ...props.style }}
|
|
86
|
-
{...layoutChildProps(props)}
|
|
87
|
-
accessible={props.accessible}
|
|
88
|
-
accessibilityLabel={props.accessibilityLabel}
|
|
89
|
-
accessibilityRole={nativeAccessibilityRole(props.accessibilityRole) as any}
|
|
90
|
-
accessibilityHint={props.accessibilityHint}
|
|
91
|
-
accessibilityValue={props.accessibilityValue}
|
|
92
|
-
accessibilityState={nativeAccessibilityState(props.accessibilityState) as any}
|
|
93
|
-
accessibilityLiveRegion={props.accessibilityLiveRegion as any}
|
|
94
|
-
/>
|
|
79
|
+
<masonview ref={bindHost} id={props.id} className={['vx-layers', 'vx-cameraview', props.className]} {...layoutChildProps(props, {display: "grid", gridTemplateRows: "1fr", gridTemplateColumns: "1fr", ...({ backgroundColor: '#000000', ...props.style })})} accessible={props.accessible} accessibilityLabel={props.accessibilityLabel} accessibilityRole={nativeAccessibilityRole(props.accessibilityRole) as any} accessibilityHint={props.accessibilityHint} accessibilityValue={props.accessibilityValue} accessibilityState={nativeAccessibilityState(props.accessibilityState) as any} accessibilityLiveRegion={props.accessibilityLiveRegion as any}/>
|
|
95
80
|
}
|
|
@@ -106,21 +106,7 @@ export function CameraView(props: CameraViewProps) @{
|
|
|
106
106
|
|
|
107
107
|
useEffect(() => observePreviewTap(host.current, props.onTap), [props.onTap])
|
|
108
108
|
|
|
109
|
-
<
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
columns="*"
|
|
113
|
-
className={['vx-layers', 'vx-cameraview', props.className]}
|
|
114
|
-
style={{ backgroundColor: '#000', ...props.style }}
|
|
115
|
-
{...layoutChildProps(props)}
|
|
116
|
-
accessible={props.accessible}
|
|
117
|
-
accessibilityLabel={props.accessibilityLabel}
|
|
118
|
-
accessibilityRole={nativeAccessibilityRole(props.accessibilityRole) as any}
|
|
119
|
-
accessibilityHint={props.accessibilityHint}
|
|
120
|
-
accessibilityValue={props.accessibilityValue}
|
|
121
|
-
accessibilityState={nativeAccessibilityState(props.accessibilityState) as any}
|
|
122
|
-
accessibilityLiveRegion={props.accessibilityLiveRegion as any}
|
|
123
|
-
>
|
|
124
|
-
<camerapreview ref={bindHost} row={0} col={0} />
|
|
125
|
-
</gridlayout>
|
|
109
|
+
<masonview id={props.id} className={['vx-layers', 'vx-cameraview', props.className]} {...layoutChildProps(props, {display: "grid", gridTemplateRows: "1fr", gridTemplateColumns: "1fr", ...({ backgroundColor: '#000', ...props.style })})} accessible={props.accessible} accessibilityLabel={props.accessibilityLabel} accessibilityRole={nativeAccessibilityRole(props.accessibilityRole) as any} accessibilityHint={props.accessibilityHint} accessibilityValue={props.accessibilityValue} accessibilityState={nativeAccessibilityState(props.accessibilityState) as any} accessibilityLiveRegion={props.accessibilityLiveRegion as any}>
|
|
110
|
+
<camerapreview ref={bindHost} style={{gridRow: '1', gridColumn: '1'}} />
|
|
111
|
+
</masonview>
|
|
126
112
|
}
|
package/src/layout-child.ts
CHANGED
|
@@ -2,27 +2,48 @@ import type { CameraViewProps } from './props'
|
|
|
2
2
|
import { isIOS } from '@nativescript/core'
|
|
3
3
|
|
|
4
4
|
/** NativeScript reads layout fields from a child view during parent layout. */
|
|
5
|
-
export function layoutChildProps(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
5
|
+
export function layoutChildProps(
|
|
6
|
+
props: CameraViewProps,
|
|
7
|
+
baseStyle = props.style,
|
|
8
|
+
): { style: Record<string, any> } {
|
|
9
|
+
const style: Record<string, any> = { ...(typeof baseStyle === 'object' ? baseStyle : {}) }
|
|
10
|
+
if (props.row !== undefined) {
|
|
11
|
+
style.gridRow = `${props.row + 1} / span ${props.rowSpan ?? 1}`
|
|
12
|
+
} else if (props.rowSpan !== undefined) {
|
|
13
|
+
style.gridRow = `span ${props.rowSpan}`
|
|
14
|
+
}
|
|
15
|
+
if (props.col !== undefined) {
|
|
16
|
+
style.gridColumn = `${props.col + 1} / span ${props.colSpan ?? 1}`
|
|
17
|
+
} else if (props.colSpan !== undefined) {
|
|
18
|
+
style.gridColumn = `span ${props.colSpan}`
|
|
19
|
+
}
|
|
20
|
+
if (props.dock !== undefined) {
|
|
21
|
+
style.position = style.position ?? 'absolute'
|
|
22
|
+
if (props.dock === 'left' || props.dock === 'top' || props.dock === 'bottom') {
|
|
23
|
+
style.left = style.left ?? 0
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (props.dock === 'right' || props.dock === 'top' || props.dock === 'bottom') {
|
|
27
|
+
style.right = style.right ?? 0
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (props.dock === 'top' || props.dock === 'left' || props.dock === 'right') {
|
|
31
|
+
style.top = style.top ?? 0
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (props.dock === 'bottom' || props.dock === 'left' || props.dock === 'right') {
|
|
35
|
+
style.bottom = style.bottom ?? 0
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
for (const key of ['left', 'top', 'flexGrow', 'flexShrink', 'alignSelf', 'order'] as const) {
|
|
20
39
|
if (props[key] !== undefined) {
|
|
21
|
-
|
|
40
|
+
style[key] = props[key]
|
|
22
41
|
}
|
|
23
42
|
}
|
|
24
|
-
|
|
25
|
-
|
|
43
|
+
if ((props.left !== undefined || props.top !== undefined) && props.dock === undefined) {
|
|
44
|
+
style.position = style.position ?? 'absolute'
|
|
45
|
+
}
|
|
46
|
+
return { style }
|
|
26
47
|
}
|
|
27
48
|
|
|
28
49
|
export function applyEscapeProps(view: any, props: { ios?: any; android?: any }): void {
|
|
@@ -5,8 +5,11 @@ import type { CameraViewProps } from './props'
|
|
|
5
5
|
* branch. Pure helpers are re-declared here to keep divergence at the file
|
|
6
6
|
* boundary. */
|
|
7
7
|
|
|
8
|
-
export function layoutChildProps(
|
|
9
|
-
|
|
8
|
+
export function layoutChildProps(
|
|
9
|
+
props: CameraViewProps,
|
|
10
|
+
baseStyle = props.style,
|
|
11
|
+
): Record<string, any> {
|
|
12
|
+
const result: Record<string, any> = { style: baseStyle }
|
|
10
13
|
for (const key of [
|
|
11
14
|
'row',
|
|
12
15
|
'col',
|