@ankhorage/studio 1.1.0 → 1.3.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 +1 -1
- package/dist/core/StudioProvider.d.ts.map +1 -1
- package/dist/core/StudioProvider.js +18 -2
- package/dist/core/StudioProvider.js.map +1 -1
- package/dist/core/mediaAuthoringHostClient.d.ts +5 -1
- package/dist/core/mediaAuthoringHostClient.d.ts.map +1 -1
- package/dist/core/mediaAuthoringHostClient.js +16 -1
- package/dist/core/mediaAuthoringHostClient.js.map +1 -1
- package/dist/core/mediaRemovalCoordinator.d.ts +15 -0
- package/dist/core/mediaRemovalCoordinator.d.ts.map +1 -0
- package/dist/core/mediaRemovalCoordinator.js +33 -0
- package/dist/core/mediaRemovalCoordinator.js.map +1 -0
- package/dist/host/http/mediaRoutes.d.ts.map +1 -1
- package/dist/host/http/mediaRoutes.js +54 -15
- package/dist/host/http/mediaRoutes.js.map +1 -1
- package/dist/host/layout/templates/rootLayout.d.ts.map +1 -1
- package/dist/host/layout/templates/rootLayout.js +13 -1
- package/dist/host/layout/templates/rootLayout.js.map +1 -1
- package/dist/host/media/projectAuthoringAssetWriter.d.ts +2 -0
- package/dist/host/media/projectAuthoringAssetWriter.d.ts.map +1 -0
- package/dist/host/media/projectAuthoringAssetWriter.js +12 -0
- package/dist/host/media/projectAuthoringAssetWriter.js.map +1 -0
- package/dist/host/media/projectBundledMediaRegistry.d.ts +2 -0
- package/dist/host/media/projectBundledMediaRegistry.d.ts.map +1 -0
- package/dist/host/media/projectBundledMediaRegistry.js +46 -0
- package/dist/host/media/projectBundledMediaRegistry.js.map +1 -0
- package/dist/host/media/projectBundledMediaService.d.ts +20 -0
- package/dist/host/media/projectBundledMediaService.d.ts.map +1 -0
- package/dist/host/media/projectBundledMediaService.js +51 -0
- package/dist/host/media/projectBundledMediaService.js.map +1 -0
- package/dist/host/media/projectMediaService.d.ts +1 -0
- package/dist/host/media/projectMediaService.d.ts.map +1 -1
- package/dist/host/media/projectMediaService.js +13 -3
- package/dist/host/media/projectMediaService.js.map +1 -1
- package/dist/host/media/removeProjectAuthoringAsset.d.ts +2 -0
- package/dist/host/media/removeProjectAuthoringAsset.d.ts.map +1 -0
- package/dist/host/media/removeProjectAuthoringAsset.js +33 -0
- package/dist/host/media/removeProjectAuthoringAsset.js.map +1 -0
- package/dist/host/orchestrator/generatedAppFiles.d.ts.map +1 -1
- package/dist/host/orchestrator/generatedAppFiles.js +2 -0
- package/dist/host/orchestrator/generatedAppFiles.js.map +1 -1
- package/dist/host/orchestrator/templates.d.ts +1 -1
- package/dist/host/orchestrator/templates.js +2 -2
- package/dist/host/orchestrator/templates.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mediaAuthoringModel.d.ts +18 -0
- package/dist/mediaAuthoringModel.d.ts.map +1 -1
- package/dist/mediaAuthoringModel.js.map +1 -1
- package/dist/mediaPickerAuthoring.d.ts +1 -0
- package/dist/mediaPickerAuthoring.d.ts.map +1 -1
- package/dist/ui/AnkhStudio.d.ts +3 -1
- package/dist/ui/AnkhStudio.d.ts.map +1 -1
- package/dist/ui/AnkhStudio.js +11 -3
- package/dist/ui/AnkhStudio.js.map +1 -1
- package/dist/ui/admin/pages/MediaAdminPage.d.ts.map +1 -1
- package/dist/ui/admin/pages/MediaAdminPage.js +21 -3
- package/dist/ui/admin/pages/MediaAdminPage.js.map +1 -1
- package/dist/ui/admin/pages/MediaDeviceImportCard.d.ts.map +1 -1
- package/dist/ui/admin/pages/MediaDeviceImportCard.js +3 -3
- package/dist/ui/admin/pages/MediaDeviceImportCard.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediaPickerAuthoring.d.ts","sourceRoot":"","sources":["../src/mediaPickerAuthoring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEvE,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"mediaPickerAuthoring.d.ts","sourceRoot":"","sources":["../src/mediaPickerAuthoring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEvE,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,eAAe,CAAC;AAC/D,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,8BAA8B,GACxC,WAAW,GAAG,iBAAiB,GAAG,eAAe,GAAG,aAAa,GAAG,kBAAkB,CAAC;AAEzF,MAAM,MAAM,uBAAuB,GAC/B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,0BAA0B,CAAA;CAAE,GACrE;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,8BAA8B,CAAA;CAAE,CAAC;AAE5E,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;CACvE;AAED,MAAM,MAAM,uBAAuB,GAC/B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
package/dist/ui/AnkhStudio.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { type ExpoBundledMediaRegistry } from '@ankhorage/expo-runtime/bundled-media';
|
|
1
2
|
import { type RuntimeRendererConfig } from '@ankhorage/runtime';
|
|
2
3
|
import React from 'react';
|
|
3
4
|
export interface AnkhStudioProps {
|
|
4
5
|
children: React.ReactNode;
|
|
5
6
|
runtimeRegistry?: unknown;
|
|
6
7
|
runtimeConfig?: unknown;
|
|
8
|
+
bundledMediaRegistry?: ExpoBundledMediaRegistry;
|
|
7
9
|
}
|
|
8
|
-
export declare const AnkhStudio: ({ children }: AnkhStudioProps) => React.FunctionComponentElement<React.FragmentProps> | React.FunctionComponentElement<{
|
|
10
|
+
export declare const AnkhStudio: ({ children, bundledMediaRegistry }: AnkhStudioProps) => React.FunctionComponentElement<React.FragmentProps> | React.FunctionComponentElement<{
|
|
9
11
|
value: RuntimeRendererConfig;
|
|
10
12
|
children: React.ReactNode;
|
|
11
13
|
}> | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnkhStudio.d.ts","sourceRoot":"","sources":["../../src/ui/AnkhStudio.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"AnkhStudio.d.ts","sourceRoot":"","sources":["../../src/ui/AnkhStudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,KAAK,qBAAqB,EAE3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAkB,MAAM,OAAO,CAAC;AAMvC,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD;AAED,eAAO,MAAM,UAAU,GAAI,oCAAyC,eAAe;;;SAmBlF,CAAC"}
|
package/dist/ui/AnkhStudio.js
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createExpoBundledMediaResolver, } from '@ankhorage/expo-runtime/bundled-media';
|
|
2
|
+
import { RuntimeRendererConfigProvider, } from '@ankhorage/runtime';
|
|
2
3
|
import React, { useMemo } from 'react';
|
|
3
4
|
import { API_BASE } from '../core/constants';
|
|
4
5
|
import { useStudio } from '../core/StudioContext';
|
|
5
6
|
import { createStudioMediaAssetResolver } from '../runtime/studioMediaResolver';
|
|
6
|
-
export const AnkhStudio = ({ children }) => {
|
|
7
|
+
export const AnkhStudio = ({ children, bundledMediaRegistry = {} }) => {
|
|
7
8
|
const studio = useStudio();
|
|
8
|
-
const resolveMediaAsset = useMemo(() =>
|
|
9
|
+
const resolveMediaAsset = useMemo(() => {
|
|
10
|
+
const bundledResolver = createExpoBundledMediaResolver(bundledMediaRegistry);
|
|
11
|
+
const storageResolver = createStudioMediaAssetResolver({
|
|
12
|
+
apiBase: API_BASE,
|
|
13
|
+
projectId: studio.projectId,
|
|
14
|
+
});
|
|
15
|
+
return async (args) => bundledResolver(args) ?? (await storageResolver(args));
|
|
16
|
+
}, [bundledMediaRegistry, studio.projectId]);
|
|
9
17
|
const mediaConfig = useMemo(() => ({ mediaAssets: studio.manifest?.media?.assets, resolveMediaAsset }), [resolveMediaAsset, studio.manifest?.media?.assets]);
|
|
10
18
|
if (studio.error)
|
|
11
19
|
return React.createElement(React.Fragment, null, studio.error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnkhStudio.js","sourceRoot":"","sources":["../../src/ui/AnkhStudio.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"AnkhStudio.js","sourceRoot":"","sources":["../../src/ui/AnkhStudio.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,GAE/B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAGL,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAShF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,QAAQ,EAAE,oBAAoB,GAAG,EAAE,EAAmB,EAAE,EAAE;IACrF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,iBAAiB,GAAG,OAAO,CAA4B,GAAG,EAAE;QAChE,MAAM,eAAe,GAAG,8BAA8B,CAAC,oBAAoB,CAAC,CAAC;QAC7E,MAAM,eAAe,GAAG,8BAA8B,CAAC;YACrD,OAAO,EAAE,QAAQ;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;QACH,OAAO,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,CAAC,EAAE,CAAC,oBAAoB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,EAC1E,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CACpD,CAAC;IAEF,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACjF,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEtD,OAAO,KAAK,CAAC,aAAa,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC9F,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaAdminPage.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/MediaAdminPage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MediaAdminPage.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/MediaAdminPage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAmBjD,wBAAgB,cAAc,sBA2F7B"}
|
|
@@ -17,6 +17,7 @@ export function MediaAdminPage() {
|
|
|
17
17
|
const [url, setUrl] = useState('');
|
|
18
18
|
const [kind, setKind] = useState('image');
|
|
19
19
|
const [error, setError] = useState(null);
|
|
20
|
+
const [deleteNotice, setDeleteNotice] = useState(null);
|
|
20
21
|
const assets = useMemo(() => (studio.manifest ? listStudioMediaAssets(studio.manifest) : []), [studio.manifest]);
|
|
21
22
|
if (!studio.manifest) {
|
|
22
23
|
return (_jsx(AdminScroll, { children: _jsx(AdminHeader, { title: "Media", description: "The app media pool is available after the manifest loads." }) }));
|
|
@@ -33,13 +34,30 @@ export function MediaAdminPage() {
|
|
|
33
34
|
setUrl('');
|
|
34
35
|
setError(null);
|
|
35
36
|
};
|
|
36
|
-
return (_jsxs(AdminScroll, { children: [_jsx(AdminHeader, { title: "Media", description: "Canonical app-authoring media. Runtime user uploads are intentionally not shown here." }), _jsx(MediaDeviceImportCard, {}), _jsx(Card, { title: "Import external URL", description: "The URL remains remote and is stored as a stable media source.", children: _jsxs(View, { style: styles.formStack, children: [_jsx(Field, { label: "Name", children: _jsx(Input, { value: name, placeholder: "Hero image", onChangeText: setName }) }), _jsx(Field, { label: "Kind", children: _jsx(Select, { value: kind, options: MEDIA_KIND_OPTIONS, onValueChange: setKind }) }), _jsx(Field, { label: "HTTP(S) URL", children: _jsx(Input, { value: url, placeholder: "https://\u2026", onChangeText: setUrl, autoCapitalize: "none" }) }), error ? (_jsx(Text, { color: "danger", variant: "bodySmall", children: error })) : null, _jsx(Button, { disabled: !url.trim(), onPress: importUrl, children: "Import URL" })] }) }), assets.length === 0 ? (_jsx(Card, { title: "No media yet", children: _jsx(Text, { color: "neutral", emphasis: "muted", children: "Import a device file, photo-library item, or stable external URL." }) })) : null, assets.map((asset) => (_jsx(MediaAssetCard, { asset: asset }, asset.id)))] }));
|
|
37
|
+
return (_jsxs(AdminScroll, { children: [_jsx(AdminHeader, { title: "Media", description: "Canonical app-authoring media. Runtime user uploads are intentionally not shown here." }), _jsx(MediaDeviceImportCard, {}), _jsx(Card, { title: "Import external URL", description: "The URL remains remote and is stored as a stable media source.", children: _jsxs(View, { style: styles.formStack, children: [_jsx(Field, { label: "Name", children: _jsx(Input, { value: name, placeholder: "Hero image", onChangeText: setName }) }), _jsx(Field, { label: "Kind", children: _jsx(Select, { value: kind, options: MEDIA_KIND_OPTIONS, onValueChange: setKind }) }), _jsx(Field, { label: "HTTP(S) URL", children: _jsx(Input, { value: url, placeholder: "https://\u2026", onChangeText: setUrl, autoCapitalize: "none" }) }), error ? (_jsx(Text, { color: "danger", variant: "bodySmall", children: error })) : null, _jsx(Button, { disabled: !url.trim(), onPress: importUrl, children: "Import URL" })] }) }), deleteNotice ? (_jsx(Card, { title: "Media lifecycle notice", children: _jsx(Text, { color: "danger", variant: "bodySmall", children: deleteNotice }) })) : null, assets.length === 0 ? (_jsx(Card, { title: "No media yet", children: _jsx(Text, { color: "neutral", emphasis: "muted", children: "Import a device file, photo-library item, or stable external URL." }) })) : null, assets.map((asset) => (_jsx(MediaAssetCard, { asset: asset, onDeleteNotice: setDeleteNotice }, asset.id)))] }));
|
|
37
38
|
}
|
|
38
|
-
function MediaAssetCard({ asset }) {
|
|
39
|
+
function MediaAssetCard({ asset, onDeleteNotice, }) {
|
|
39
40
|
const studio = useStudio();
|
|
40
41
|
const usages = studio.manifest ? collectStudioMediaAssetUsages(studio.manifest, asset.id) : [];
|
|
41
42
|
const metadata = asset.metadata;
|
|
42
|
-
|
|
43
|
+
const removeAsset = async () => {
|
|
44
|
+
const result = await studio.deleteMediaAsset(asset.id);
|
|
45
|
+
onDeleteNotice(formatDeleteNotice(result));
|
|
46
|
+
};
|
|
47
|
+
return (_jsx(Card, { title: asset.name, description: formatMediaSource(asset), children: _jsxs(View, { style: styles.details, children: [_jsx(KeyValue, { label: "ID", value: asset.id }), _jsx(KeyValue, { label: "Kind", value: asset.kind }), asset.contentType ? _jsx(KeyValue, { label: "Content type", value: asset.contentType }) : null, metadata?.sizeBytes !== undefined ? (_jsx(KeyValue, { label: "Size", value: `${metadata.sizeBytes} bytes` })) : null, metadata?.width !== undefined && metadata.height !== undefined ? (_jsx(KeyValue, { label: "Dimensions", value: `${metadata.width} × ${metadata.height}` })) : null, metadata?.durationMs !== undefined ? (_jsx(KeyValue, { label: "Duration", value: `${metadata.durationMs} ms` })) : null, _jsx(KeyValue, { label: "Usage", value: usages.length === 0 ? 'Unused' : `${usages.length} reference(s)` }), _jsx(Button, { disabled: usages.length > 0, onPress: () => void removeAsset(), children: "Remove media" }), usages.length > 0 ? (_jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: "Remove references from component properties before deleting this media item." })) : null] }) }));
|
|
48
|
+
}
|
|
49
|
+
function formatDeleteNotice(result) {
|
|
50
|
+
if (result.ok)
|
|
51
|
+
return null;
|
|
52
|
+
if (result.reason === 'save-failed') {
|
|
53
|
+
return `The manifest did not save, so no physical media source was removed: ${result.message}`;
|
|
54
|
+
}
|
|
55
|
+
if (result.reason === 'cleanup-failed') {
|
|
56
|
+
return `The media item was removed safely, but an orphaned authoring source may remain: ${result.message}`;
|
|
57
|
+
}
|
|
58
|
+
if (result.reason === 'in-use')
|
|
59
|
+
return 'The media item is still referenced by component properties.';
|
|
60
|
+
return 'The media item no longer exists in the authoring pool.';
|
|
43
61
|
}
|
|
44
62
|
function formatMediaSource(asset) {
|
|
45
63
|
if (asset.source.kind === 'url')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaAdminPage.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/MediaAdminPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAwC,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"MediaAdminPage.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/MediaAdminPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaDeviceImportCard.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/MediaDeviceImportCard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAmB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MediaDeviceImportCard.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/MediaDeviceImportCard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAmB,MAAM,OAAO,CAAC;AASxC,wBAAgB,qBAAqB,sBAgEpC"}
|
|
@@ -7,15 +7,15 @@ export function MediaDeviceImportCard() {
|
|
|
7
7
|
const studio = useStudio();
|
|
8
8
|
const [busy, setBusy] = useState(false);
|
|
9
9
|
const [error, setError] = useState(null);
|
|
10
|
-
const importMedia = async (source) => {
|
|
10
|
+
const importMedia = async (source, target) => {
|
|
11
11
|
setBusy(true);
|
|
12
12
|
setError(null);
|
|
13
|
-
const result = await studio.ingestMediaFromPicker(source);
|
|
13
|
+
const result = await studio.ingestMediaFromPicker(source, target);
|
|
14
14
|
setBusy(false);
|
|
15
15
|
if (!result.ok && result.reason !== 'cancelled')
|
|
16
16
|
setError(result.reason);
|
|
17
17
|
};
|
|
18
|
-
return (_jsxs(Card, { title: "Import from device", description: "
|
|
18
|
+
return (_jsxs(Card, { title: "Import from device", description: "Use managed storage for remote authoring media, or bundle files into the app under /assets.", children: [_jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: "Managed storage" }), _jsxs(View, { style: styles.actions, children: [_jsx(Button, { disabled: busy || !studio.mediaPickerAvailable, onPress: () => void importMedia('file', 'storage'), children: "Upload file" }), _jsx(Button, { disabled: busy || !studio.mediaPickerAvailable, onPress: () => void importMedia('photo-library', 'storage'), children: "Upload photo" })] }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: "App bundle" }), _jsxs(View, { style: styles.actions, children: [_jsx(Button, { disabled: busy || !studio.mediaPickerAvailable, onPress: () => void importMedia('file', 'bundled'), children: "Bundle file" }), _jsx(Button, { disabled: busy || !studio.mediaPickerAvailable, onPress: () => void importMedia('photo-library', 'bundled'), children: "Bundle photo" })] }), !studio.mediaPickerAvailable ? (_jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: "This Studio host has no platform media picker adapter." })) : null, error ? (_jsx(Text, { color: "danger", variant: "bodySmall", children: error })) : null] }));
|
|
19
19
|
}
|
|
20
20
|
const styles = StyleSheet.create({ actions: { flexDirection: 'row', flexWrap: 'wrap', gap: 8 } });
|
|
21
21
|
//# sourceMappingURL=MediaDeviceImportCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaDeviceImportCard.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/MediaDeviceImportCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"MediaDeviceImportCard.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/MediaDeviceImportCard.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ankhorage/studio",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Studio authoring package for Ankhorage apps",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/ankhorage/studio#readme",
|
|
@@ -205,7 +205,7 @@
|
|
|
205
205
|
"@ankhorage/color-theory": "^0.0.8",
|
|
206
206
|
"@ankhorage/contracts": "^7.6.0",
|
|
207
207
|
"@ankhorage/data-sources": "^1.0.1",
|
|
208
|
-
"@ankhorage/expo-runtime": "^2.1
|
|
208
|
+
"@ankhorage/expo-runtime": "^2.2.1",
|
|
209
209
|
"@ankhorage/infra": "^3.2.0",
|
|
210
210
|
"@ankhorage/orchestrator": "^0.3.0",
|
|
211
211
|
"@ankhorage/orchestrator-module-expo-google-fonts": "^0.2.0",
|