@adminide-stack/yantra-mobile 12.0.125-alpha.1 → 12.0.126
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/lib/features/canvas/AudioEditorExperience.js +207 -109
- package/lib/features/canvas/AudioEditorExperience.js.map +1 -1
- package/lib/features/canvas/CanvasAgentChatPane.js +87 -72
- package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -1
- package/lib/features/canvas/CanvasBoardsGrid.js +494 -387
- package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
- package/lib/features/canvas/CanvasChatResultCard.js +78 -59
- package/lib/features/canvas/CanvasChatResultCard.js.map +1 -1
- package/lib/features/canvas/CanvasEditToolsPanel.js +126 -84
- package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -1
- package/lib/features/canvas/CanvasExperience.js +108 -126
- package/lib/features/canvas/CanvasExperience.js.map +1 -1
- package/lib/features/canvas/CanvasGeneratePanel.js +178 -166
- package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -1
- package/lib/features/canvas/CanvasLibrarySheet.js +119 -123
- package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -1
- package/lib/features/canvas/CanvasLooksPanel.js +113 -89
- package/lib/features/canvas/CanvasLooksPanel.js.map +1 -1
- package/lib/features/canvas/CanvasModelPicker.js +79 -79
- package/lib/features/canvas/CanvasModelPicker.js.map +1 -1
- package/lib/features/canvas/CanvasTasksPanel.js +193 -128
- package/lib/features/canvas/CanvasTasksPanel.js.map +1 -1
- package/lib/features/canvas/CanvasTemplatesPanel.js +106 -94
- package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -1
- package/lib/features/canvas/CanvasToolDock.js +195 -127
- package/lib/features/canvas/CanvasToolDock.js.map +1 -1
- package/lib/features/canvas/FrameExtractorExperience.js +163 -100
- package/lib/features/canvas/FrameExtractorExperience.js.map +1 -1
- package/lib/features/canvas/GeneratorReferenceSlots.js +132 -69
- package/lib/features/canvas/GeneratorReferenceSlots.js.map +1 -1
- package/lib/features/canvas/ImageEditorExperience.js +278 -209
- package/lib/features/canvas/ImageEditorExperience.js.map +1 -1
- package/lib/features/canvas/InfluencerStudioExperience.js +167 -125
- package/lib/features/canvas/InfluencerStudioExperience.js.map +1 -1
- package/lib/features/canvas/MoodboardExperience.js +102 -85
- package/lib/features/canvas/MoodboardExperience.js.map +1 -1
- package/lib/features/canvas/NativeCanvasViewer.js +203 -192
- package/lib/features/canvas/NativeCanvasViewer.js.map +1 -1
- package/lib/features/canvas/PromoContextFields.js +125 -92
- package/lib/features/canvas/PromoContextFields.js.map +1 -1
- package/lib/features/canvas/SetStudioExperience.js +225 -143
- package/lib/features/canvas/SetStudioExperience.js.map +1 -1
- package/lib/features/canvas/VideoClipsExperience.js +126 -92
- package/lib/features/canvas/VideoClipsExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditExperience.js +154 -142
- package/lib/features/canvas/VideoEditExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditorExperience.js +551 -492
- package/lib/features/canvas/VideoEditorExperience.js.map +1 -1
- package/lib/features/canvas/VideoGeneratorExperience.js +284 -131
- package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -1
- package/lib/features/canvas/canvasTasks.js +7 -3
- package/lib/features/canvas/canvasTasks.js.map +1 -1
- package/lib/features/canvas/canvasTheme.js +265 -0
- package/lib/features/canvas/canvasTheme.js.map +1 -0
- package/lib/features/canvas/canvasUi.js +381 -0
- package/lib/features/canvas/canvasUi.js.map +1 -0
- package/lib/features/canvas/recorder/CameraRecorderExperience.js +109 -52
- package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -1
- package/lib/features/canvas/serverTasks.js +1 -1
- package/lib/features/canvas/serverTasks.js.map +1 -1
- package/lib/features/canvas/set/SetViewportWebView.js +1 -1
- package/lib/features/canvas/set/SetViewportWebView.js.map +1 -1
- package/lib/features/canvas/videoEditor/BlurBoxOverlay.js +8 -7
- package/lib/features/canvas/videoEditor/BlurBoxOverlay.js.map +1 -1
- package/lib/features/canvas/videoEditor/ExportTaskCard.js +44 -41
- package/lib/features/canvas/videoEditor/ExportTaskCard.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +50 -45
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -1
- package/lib/features/canvas/videoEditor/exportTask.js +3 -2
- package/lib/features/canvas/videoEditor/exportTask.js.map +1 -1
- package/lib/features/canvas/videoEditor/formWidgets.js +116 -64
- package/lib/features/canvas/videoEditor/formWidgets.js.map +1 -1
- package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js +77 -63
- package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js.map +1 -1
- package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js +95 -79
- package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js.map +1 -1
- package/lib/features/design/DesignEditorExperience.js +241 -160
- package/lib/features/design/DesignEditorExperience.js.map +1 -1
- package/lib/features/design/DesignExperience.js +300 -143
- package/lib/features/design/DesignExperience.js.map +1 -1
- package/lib/features/health/HealthSyncRunner.js +9 -1
- package/lib/features/health/HealthSyncRunner.js.map +1 -1
- package/lib/features/health/backgroundSync.js +41 -0
- package/lib/features/health/backgroundSync.js.map +1 -0
- package/lib/features/health/healthConnectBackground.js +32 -0
- package/lib/features/health/healthConnectBackground.js.map +1 -0
- package/lib/features/health/healthConnectReader.js +16 -2
- package/lib/features/health/healthConnectReader.js.map +1 -1
- package/lib/features/health/healthSync.js +31 -3
- package/lib/features/health/healthSync.js.map +1 -1
- package/lib/features/health/healthSyncStore.js +89 -5
- package/lib/features/health/healthSyncStore.js.map +1 -1
- package/lib/features/health/healthkitBackground.js +17 -0
- package/lib/features/health/healthkitBackground.js.map +1 -0
- package/lib/features/health/reader.js.map +1 -1
- package/lib/features/health/sessionVault.js +38 -0
- package/lib/features/health/sessionVault.js.map +1 -0
- package/lib/features/health/syncState.js.map +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
- package/lib/features/webbuilder/buildFragments.js +3 -2
- package/lib/features/webbuilder/buildFragments.js.map +1 -1
- package/lib/features/webbuilder/components/PublishSheet.js +1 -1
- package/lib/features/webbuilder/components/PublishSheet.js.map +1 -1
- package/lib/features/webbuilder/webbuilderPrompts.js +2 -5
- package/lib/features/webbuilder/webbuilderPrompts.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/screens/Health/index.js +12 -2
- package/lib/screens/Health/index.js.map +1 -1
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js +120 -0
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -0
- package/lib/screens/WebBuilderNative/useRestoredSandboxes.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js +26 -4
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
- package/lib/screens/WebBuilderNative/webbuilderTransport.js +110 -7
- package/lib/screens/WebBuilderNative/webbuilderTransport.js.map +1 -1
- package/package.json +6 -4
|
@@ -1,4 +1,23 @@
|
|
|
1
|
-
import {jsxs,jsx}from'react/jsx-runtime';import {useState,useCallback,useEffect}from'react';import {
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {useMemo,useState,useCallback,useEffect}from'react';import {View,Text,TextInput,ActivityIndicator,FlatList,Image,StyleSheet}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {listStudioLooks,LOOKS_PAGE_SIZE}from'./studioLooks.js';import {useCanvasTheme,themedStyles}from'./canvasTheme.js';import {IconButton,Pressable,pressedStyle,RADIUS,SPACE,HIT,TYPE}from'./canvasUi.js';var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
function CanvasLooksPanel({
|
|
2
21
|
runAction,
|
|
3
22
|
apolloClient,
|
|
4
23
|
token,
|
|
@@ -6,6 +25,8 @@ import {jsxs,jsx}from'react/jsx-runtime';import {useState,useCallback,useEffect}
|
|
|
6
25
|
onRecreate,
|
|
7
26
|
onClose
|
|
8
27
|
}) {
|
|
28
|
+
const theme = useCanvasTheme();
|
|
29
|
+
const styles = useMemo(() => makeStyles(theme), [theme]);
|
|
9
30
|
const [query, setQuery] = useState("");
|
|
10
31
|
const [search, setSearch] = useState("");
|
|
11
32
|
const [looks, setLooks] = useState([]);
|
|
@@ -49,136 +70,139 @@ import {jsxs,jsx}from'react/jsx-runtime';import {useState,useCallback,useEffect}
|
|
|
49
70
|
}, [load]);
|
|
50
71
|
return /* @__PURE__ */ jsxs(View, { style: styles.root, children: [
|
|
51
72
|
/* @__PURE__ */ jsxs(View, { style: styles.head, children: [
|
|
52
|
-
/* @__PURE__ */ jsx(Text, { style: styles.title, children: "Looks" }),
|
|
53
|
-
/* @__PURE__ */ jsx(
|
|
73
|
+
/* @__PURE__ */ jsx(Text, { style: styles.title, accessibilityRole: "header", children: "Looks" }),
|
|
74
|
+
/* @__PURE__ */ jsx(IconButton, { icon: "close", label: "Close looks", tone: "filled", size: 36, onPress: onClose })
|
|
54
75
|
] }),
|
|
55
76
|
/* @__PURE__ */ jsxs(View, { style: styles.search, children: [
|
|
56
|
-
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "magnify", size:
|
|
57
|
-
/* @__PURE__ */ jsx(TextInput, { value: query, onChangeText: setQuery, onSubmitEditing: () => setSearch(query.trim()), placeholder: "Search looks\u2026", placeholderTextColor:
|
|
77
|
+
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "magnify", size: 18, color: theme.mutedForeground }),
|
|
78
|
+
/* @__PURE__ */ jsx(TextInput, { value: query, onChangeText: setQuery, onSubmitEditing: () => setSearch(query.trim()), placeholder: "Search looks\u2026", placeholderTextColor: theme.mutedForeground, style: styles.searchInput, returnKeyType: "search" })
|
|
58
79
|
] }),
|
|
59
80
|
error ? /* @__PURE__ */ jsx(Text, { style: styles.error, children: error }) : null,
|
|
60
|
-
loading && looks.length === 0 ? /* @__PURE__ */ jsx(ActivityIndicator, { style: {
|
|
61
|
-
|
|
62
|
-
}
|
|
81
|
+
loading && looks.length === 0 ? /* @__PURE__ */ jsx(ActivityIndicator, { style: styles.spinner, color: theme.mutedForeground }) : /* @__PURE__ */ jsx(FlatList, { data: looks, keyExtractor: (item) => item.id, numColumns: 2, columnWrapperStyle: styles.row, contentContainerStyle: styles.list, ListEmptyComponent: /* @__PURE__ */ jsx(Text, { style: styles.empty, children: search ? "No looks match." : "No looks yet." }), ListFooterComponent: hasMore ? /* @__PURE__ */ jsx(Pressable, { onPress: () => void load(looks.length, true), disabled: loadingMore, style: ({
|
|
82
|
+
pressed
|
|
83
|
+
}) => [styles.more, pressedStyle(pressed)], children: loadingMore ? /* @__PURE__ */ jsx(ActivityIndicator, { color: theme.foreground }) : /* @__PURE__ */ jsx(Text, { style: styles.moreLabel, children: "Load more" }) }) : null, renderItem: ({
|
|
63
84
|
item
|
|
64
85
|
}) => /* @__PURE__ */ jsxs(View, { style: styles.card, children: [
|
|
65
86
|
item.cover ? /* @__PURE__ */ jsx(Image, { source: {
|
|
66
87
|
uri: item.cover
|
|
67
|
-
}, style: styles.cover }) : /* @__PURE__ */ jsx(View, { style: [styles.cover, styles.coverFallback], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "movie-open-outline", size:
|
|
68
|
-
/* @__PURE__ */
|
|
69
|
-
|
|
70
|
-
/* @__PURE__ */
|
|
71
|
-
|
|
88
|
+
}, style: styles.cover }) : /* @__PURE__ */ jsx(View, { style: [styles.cover, styles.coverFallback], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "movie-open-outline", size: 28, color: theme.mutedForeground }) }),
|
|
89
|
+
/* @__PURE__ */ jsxs(View, { style: styles.caption, children: [
|
|
90
|
+
/* @__PURE__ */ jsx(Text, { style: styles.name, numberOfLines: 2, children: item.name }),
|
|
91
|
+
/* @__PURE__ */ jsxs(Pressable, { onPress: () => onRecreate(item), hitSlop: 6, style: ({
|
|
92
|
+
pressed
|
|
93
|
+
}) => [styles.recreate, pressedStyle(pressed)], accessibilityRole: "button", accessibilityLabel: `Recreate ${item.name}`, children: [
|
|
94
|
+
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "auto-fix", size: 14, color: "#0a0a0a" }),
|
|
95
|
+
/* @__PURE__ */ jsx(Text, { style: styles.recreateLabel, children: "Recreate" })
|
|
96
|
+
] })
|
|
72
97
|
] })
|
|
73
98
|
] }) })
|
|
74
99
|
] });
|
|
75
100
|
}
|
|
76
|
-
const
|
|
101
|
+
const makeStyles = themedStyles((theme) => StyleSheet.create({
|
|
77
102
|
root: {
|
|
78
103
|
flex: 1,
|
|
79
104
|
minHeight: 280
|
|
80
105
|
},
|
|
106
|
+
spinner: {
|
|
107
|
+
marginTop: SPACE.xl
|
|
108
|
+
},
|
|
81
109
|
head: {
|
|
82
110
|
flexDirection: "row",
|
|
83
111
|
alignItems: "center",
|
|
84
112
|
justifyContent: "space-between",
|
|
85
|
-
paddingHorizontal:
|
|
86
|
-
paddingBottom:
|
|
87
|
-
},
|
|
88
|
-
title: {
|
|
89
|
-
fontSize: 15,
|
|
90
|
-
fontWeight: "700",
|
|
91
|
-
color: "#0f172a"
|
|
113
|
+
paddingHorizontal: SPACE.lg + 4,
|
|
114
|
+
paddingBottom: SPACE.md
|
|
92
115
|
},
|
|
116
|
+
title: __spreadProps(__spreadValues({}, TYPE.title), {
|
|
117
|
+
color: theme.foreground
|
|
118
|
+
}),
|
|
93
119
|
search: {
|
|
94
120
|
flexDirection: "row",
|
|
95
121
|
alignItems: "center",
|
|
96
|
-
gap:
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
},
|
|
105
|
-
searchInput: {
|
|
122
|
+
gap: SPACE.sm,
|
|
123
|
+
minHeight: HIT,
|
|
124
|
+
marginHorizontal: SPACE.lg + 4,
|
|
125
|
+
marginBottom: SPACE.md,
|
|
126
|
+
borderRadius: RADIUS.pill,
|
|
127
|
+
paddingHorizontal: SPACE.lg - 2,
|
|
128
|
+
backgroundColor: theme.card
|
|
129
|
+
},
|
|
130
|
+
searchInput: __spreadProps(__spreadValues({}, TYPE.body), {
|
|
106
131
|
flex: 1,
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
},
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
empty: {
|
|
132
|
+
paddingVertical: SPACE.sm + 2,
|
|
133
|
+
color: theme.foreground
|
|
134
|
+
}),
|
|
135
|
+
error: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
136
|
+
paddingHorizontal: SPACE.lg + 4,
|
|
137
|
+
color: theme.destructiveText,
|
|
138
|
+
marginBottom: SPACE.sm
|
|
139
|
+
}),
|
|
140
|
+
empty: __spreadProps(__spreadValues({}, TYPE.body), {
|
|
141
|
+
fontSize: 14,
|
|
118
142
|
textAlign: "center",
|
|
119
|
-
color:
|
|
120
|
-
paddingVertical:
|
|
121
|
-
|
|
122
|
-
},
|
|
143
|
+
color: theme.mutedForeground,
|
|
144
|
+
paddingVertical: SPACE.xxl
|
|
145
|
+
}),
|
|
123
146
|
list: {
|
|
124
|
-
paddingHorizontal:
|
|
125
|
-
paddingBottom:
|
|
147
|
+
paddingHorizontal: SPACE.lg + 4,
|
|
148
|
+
paddingBottom: SPACE.xl
|
|
126
149
|
},
|
|
127
150
|
row: {
|
|
128
|
-
gap:
|
|
151
|
+
gap: SPACE.sm + 2
|
|
129
152
|
},
|
|
130
153
|
card: {
|
|
131
154
|
flex: 1,
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
borderColor: "#e2e8f0",
|
|
155
|
+
aspectRatio: 4 / 5,
|
|
156
|
+
marginBottom: SPACE.sm + 2,
|
|
157
|
+
borderRadius: RADIUS.lg,
|
|
136
158
|
overflow: "hidden",
|
|
137
|
-
backgroundColor:
|
|
138
|
-
},
|
|
139
|
-
cover: {
|
|
140
|
-
width: "100%",
|
|
141
|
-
height: 96,
|
|
142
|
-
backgroundColor: "#f1f5f9"
|
|
159
|
+
backgroundColor: theme.card
|
|
143
160
|
},
|
|
161
|
+
cover: __spreadProps(__spreadValues({}, StyleSheet.absoluteFillObject), {
|
|
162
|
+
backgroundColor: theme.card
|
|
163
|
+
}),
|
|
144
164
|
coverFallback: {
|
|
145
165
|
alignItems: "center",
|
|
146
166
|
justifyContent: "center"
|
|
147
167
|
},
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
168
|
+
caption: {
|
|
169
|
+
position: "absolute",
|
|
170
|
+
left: 0,
|
|
171
|
+
right: 0,
|
|
172
|
+
bottom: 0,
|
|
173
|
+
gap: SPACE.sm,
|
|
174
|
+
paddingHorizontal: SPACE.md - 2,
|
|
175
|
+
paddingTop: SPACE.sm + 2,
|
|
176
|
+
paddingBottom: SPACE.md - 2,
|
|
177
|
+
backgroundColor: "rgba(10,10,10,0.55)"
|
|
178
|
+
},
|
|
179
|
+
name: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
180
|
+
color: "#fafafa"
|
|
181
|
+
}),
|
|
155
182
|
recreate: {
|
|
156
183
|
flexDirection: "row",
|
|
157
184
|
alignItems: "center",
|
|
158
|
-
gap:
|
|
185
|
+
gap: SPACE.xs + 1,
|
|
159
186
|
alignSelf: "flex-start",
|
|
160
|
-
|
|
161
|
-
paddingHorizontal:
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
backgroundColor: "#ea580c"
|
|
165
|
-
},
|
|
166
|
-
recreateLabel: {
|
|
167
|
-
fontSize: 11,
|
|
168
|
-
fontWeight: "700",
|
|
169
|
-
color: "#fff7ed"
|
|
187
|
+
minHeight: 30,
|
|
188
|
+
paddingHorizontal: SPACE.md,
|
|
189
|
+
borderRadius: RADIUS.pill,
|
|
190
|
+
backgroundColor: "rgba(255,255,255,0.92)"
|
|
170
191
|
},
|
|
192
|
+
recreateLabel: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
193
|
+
fontWeight: "600",
|
|
194
|
+
color: "#0a0a0a"
|
|
195
|
+
}),
|
|
171
196
|
more: {
|
|
172
197
|
alignSelf: "center",
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
});export{CanvasLooksPanel};//# sourceMappingURL=CanvasLooksPanel.js.map
|
|
198
|
+
minHeight: HIT,
|
|
199
|
+
justifyContent: "center",
|
|
200
|
+
marginVertical: SPACE.sm,
|
|
201
|
+
paddingHorizontal: SPACE.xl,
|
|
202
|
+
borderRadius: RADIUS.pill,
|
|
203
|
+
backgroundColor: theme.card
|
|
204
|
+
},
|
|
205
|
+
moreLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
206
|
+
color: theme.foreground
|
|
207
|
+
})
|
|
208
|
+
}));export{CanvasLooksPanel};//# sourceMappingURL=CanvasLooksPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanvasLooksPanel.js","sources":["../../../src/features/canvas/CanvasLooksPanel.tsx"],"sourcesContent":["/**\n * Looks gallery — native twin of canvas-surface LooksBrowser.\n * Recreate seeds the Generate video lane with the look's prompt + aspect.\n */\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { ActivityIndicator, FlatList, Image, Pressable, StyleSheet, Text, TextInput, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport type { RunMediaAction } from './videoEditor/mediaActions';\nimport { LOOKS_PAGE_SIZE, listStudioLooks, type StudioLook } from './studioLooks';\nimport type { StudioCatalogClient } from './useStudioCatalogTemplates';\n\nexport function CanvasLooksPanel({\n runAction,\n apolloClient,\n token,\n indexUrl,\n onRecreate,\n onClose,\n}: {\n runAction?: RunMediaAction;\n apolloClient?: StudioCatalogClient | null;\n token?: string | null;\n indexUrl?: string | null;\n onRecreate: (look: StudioLook) => void;\n onClose: () => void;\n}) {\n const [query, setQuery] = useState('');\n const [search, setSearch] = useState('');\n const [looks, setLooks] = useState<StudioLook[]>([]);\n const [hasMore, setHasMore] = useState(false);\n const [loading, setLoading] = useState(false);\n const [loadingMore, setLoadingMore] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const load = useCallback(\n async (offset: number, append: boolean) => {\n if (!runAction && !apolloClient && !(token && indexUrl)) {\n setError('Looks need a signed-in session.');\n return;\n }\n if (append) setLoadingMore(true);\n else setLoading(true);\n setError(null);\n try {\n const page = await listStudioLooks(\n runAction,\n {\n query: search || undefined,\n offset,\n limit: LOOKS_PAGE_SIZE,\n },\n { client: apolloClient, token, indexUrl },\n );\n setLooks((prev) => (append ? [...prev, ...page.looks] : page.looks));\n setHasMore(page.hasMore);\n if (!append && page.looks.length === 0) {\n setError(null);\n }\n } catch (err: unknown) {\n setError(err instanceof Error ? err.message : String(err));\n if (!append) setLooks([]);\n } finally {\n setLoading(false);\n setLoadingMore(false);\n }\n },\n [apolloClient, indexUrl, runAction, search, token],\n );\n\n useEffect(() => {\n void load(0, false);\n }, [load]);\n\n return (\n <View style={styles.root}>\n <View style={styles.head}>\n <Text style={styles.title}>Looks</Text>\n <Pressable onPress={onClose} hitSlop={8} accessibilityLabel=\"Close looks\">\n <MaterialCommunityIcons name=\"close\" size={20} color=\"#64748b\" />\n </Pressable>\n </View>\n <View style={styles.search}>\n <MaterialCommunityIcons name=\"magnify\" size={16} color=\"#94a3b8\" />\n <TextInput\n value={query}\n onChangeText={setQuery}\n onSubmitEditing={() => setSearch(query.trim())}\n placeholder=\"Search looks…\"\n placeholderTextColor=\"#94a3b8\"\n style={styles.searchInput}\n returnKeyType=\"search\"\n />\n </View>\n {error ? <Text style={styles.error}>{error}</Text> : null}\n {loading && looks.length === 0 ? (\n <ActivityIndicator style={{ marginTop: 24 }} color=\"#ea580c\" />\n ) : (\n <FlatList\n data={looks}\n keyExtractor={(item) => item.id}\n numColumns={2}\n columnWrapperStyle={styles.row}\n contentContainerStyle={styles.list}\n ListEmptyComponent={\n <Text style={styles.empty}>{search ? 'No looks match.' : 'No looks yet.'}</Text>\n }\n ListFooterComponent={\n hasMore ? (\n <Pressable\n onPress={() => void load(looks.length, true)}\n disabled={loadingMore}\n style={styles.more}\n >\n {loadingMore ? (\n <ActivityIndicator color=\"#0f172a\" />\n ) : (\n <Text style={styles.moreLabel}>Load more</Text>\n )}\n </Pressable>\n ) : null\n }\n renderItem={({ item }) => (\n <View style={styles.card}>\n {item.cover ? (\n <Image source={{ uri: item.cover }} style={styles.cover} />\n ) : (\n <View style={[styles.cover, styles.coverFallback]}>\n <MaterialCommunityIcons name=\"movie-open-outline\" size={22} color=\"#94a3b8\" />\n </View>\n )}\n <Text style={styles.name} numberOfLines={2}>\n {item.name}\n </Text>\n <Pressable\n onPress={() => onRecreate(item)}\n style={styles.recreate}\n accessibilityRole=\"button\"\n accessibilityLabel={`Recreate ${item.name}`}\n >\n <MaterialCommunityIcons name=\"auto-fix\" size={13} color=\"#fff7ed\" />\n <Text style={styles.recreateLabel}>Recreate</Text>\n </Pressable>\n </View>\n )}\n />\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flex: 1, minHeight: 280 },\n head: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: 16,\n paddingBottom: 8,\n },\n title: { fontSize: 15, fontWeight: '700', color: '#0f172a' },\n search: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n marginHorizontal: 16,\n marginBottom: 8,\n borderWidth: 1,\n borderColor: '#e2e8f0',\n borderRadius: 10,\n paddingHorizontal: 10,\n backgroundColor: '#fff',\n },\n searchInput: { flex: 1, fontSize: 13, paddingVertical: 8, color: '#0f172a' },\n error: { paddingHorizontal: 16, color: '#b91c1c', fontSize: 12, marginBottom: 6 },\n empty: { textAlign: 'center', color: '#64748b', paddingVertical: 24, fontSize: 13 },\n list: { paddingHorizontal: 12, paddingBottom: 16 },\n row: { gap: 8 },\n card: {\n flex: 1,\n marginBottom: 8,\n borderRadius: 12,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: '#e2e8f0',\n overflow: 'hidden',\n backgroundColor: '#fff',\n },\n cover: { width: '100%', height: 96, backgroundColor: '#f1f5f9' },\n coverFallback: { alignItems: 'center', justifyContent: 'center' },\n name: { paddingHorizontal: 8, paddingTop: 8, fontSize: 12, fontWeight: '600', color: '#0f172a' },\n recreate: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n alignSelf: 'flex-start',\n margin: 8,\n paddingHorizontal: 10,\n paddingVertical: 6,\n borderRadius: 8,\n backgroundColor: '#ea580c',\n },\n recreateLabel: { fontSize: 11, fontWeight: '700', color: '#fff7ed' },\n more: {\n alignSelf: 'center',\n marginVertical: 8,\n paddingHorizontal: 16,\n paddingVertical: 10,\n borderRadius: 10,\n backgroundColor: '#f1f5f9',\n },\n moreLabel: { fontSize: 13, fontWeight: '600', color: '#0f172a' },\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CanvasLooksPanel.js","sources":["../../../src/features/canvas/CanvasLooksPanel.tsx"],"sourcesContent":["/**\n * Looks gallery — native twin of canvas-surface LooksBrowser.\n * Recreate seeds the Generate video lane with the look's prompt + aspect.\n */\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ActivityIndicator, FlatList, Image, StyleSheet, Text, TextInput, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport type { RunMediaAction } from './videoEditor/mediaActions';\nimport { LOOKS_PAGE_SIZE, listStudioLooks, type StudioLook } from './studioLooks';\nimport type { StudioCatalogClient } from './useStudioCatalogTemplates';\nimport { useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport { Pressable, HIT, IconButton, RADIUS, SPACE, TYPE, pressedStyle } from './canvasUi';\n\nexport function CanvasLooksPanel({\n runAction,\n apolloClient,\n token,\n indexUrl,\n onRecreate,\n onClose,\n}: {\n runAction?: RunMediaAction;\n apolloClient?: StudioCatalogClient | null;\n token?: string | null;\n indexUrl?: string | null;\n onRecreate: (look: StudioLook) => void;\n onClose: () => void;\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n const [query, setQuery] = useState('');\n const [search, setSearch] = useState('');\n const [looks, setLooks] = useState<StudioLook[]>([]);\n const [hasMore, setHasMore] = useState(false);\n const [loading, setLoading] = useState(false);\n const [loadingMore, setLoadingMore] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const load = useCallback(\n async (offset: number, append: boolean) => {\n if (!runAction && !apolloClient && !(token && indexUrl)) {\n setError('Looks need a signed-in session.');\n return;\n }\n if (append) setLoadingMore(true);\n else setLoading(true);\n setError(null);\n try {\n const page = await listStudioLooks(\n runAction,\n {\n query: search || undefined,\n offset,\n limit: LOOKS_PAGE_SIZE,\n },\n { client: apolloClient, token, indexUrl },\n );\n setLooks((prev) => (append ? [...prev, ...page.looks] : page.looks));\n setHasMore(page.hasMore);\n if (!append && page.looks.length === 0) {\n setError(null);\n }\n } catch (err: unknown) {\n setError(err instanceof Error ? err.message : String(err));\n if (!append) setLooks([]);\n } finally {\n setLoading(false);\n setLoadingMore(false);\n }\n },\n [apolloClient, indexUrl, runAction, search, token],\n );\n\n useEffect(() => {\n void load(0, false);\n }, [load]);\n\n return (\n <View style={styles.root}>\n <View style={styles.head}>\n <Text style={styles.title} accessibilityRole=\"header\">\n Looks\n </Text>\n <IconButton icon=\"close\" label=\"Close looks\" tone=\"filled\" size={36} onPress={onClose} />\n </View>\n <View style={styles.search}>\n <MaterialCommunityIcons name=\"magnify\" size={18} color={theme.mutedForeground} />\n <TextInput\n value={query}\n onChangeText={setQuery}\n onSubmitEditing={() => setSearch(query.trim())}\n placeholder=\"Search looks…\"\n placeholderTextColor={theme.mutedForeground}\n style={styles.searchInput}\n returnKeyType=\"search\"\n />\n </View>\n {error ? <Text style={styles.error}>{error}</Text> : null}\n {loading && looks.length === 0 ? (\n <ActivityIndicator style={styles.spinner} color={theme.mutedForeground} />\n ) : (\n <FlatList\n data={looks}\n keyExtractor={(item) => item.id}\n numColumns={2}\n columnWrapperStyle={styles.row}\n contentContainerStyle={styles.list}\n ListEmptyComponent={\n <Text style={styles.empty}>{search ? 'No looks match.' : 'No looks yet.'}</Text>\n }\n ListFooterComponent={\n hasMore ? (\n <Pressable\n onPress={() => void load(looks.length, true)}\n disabled={loadingMore}\n style={({ pressed }) => [styles.more, pressedStyle(pressed)]}\n >\n {loadingMore ? (\n <ActivityIndicator color={theme.foreground} />\n ) : (\n <Text style={styles.moreLabel}>Load more</Text>\n )}\n </Pressable>\n ) : null\n }\n renderItem={({ item }) => (\n <View style={styles.card}>\n {item.cover ? (\n <Image source={{ uri: item.cover }} style={styles.cover} />\n ) : (\n <View style={[styles.cover, styles.coverFallback]}>\n <MaterialCommunityIcons\n name=\"movie-open-outline\"\n size={28}\n color={theme.mutedForeground}\n />\n </View>\n )}\n <View style={styles.caption}>\n <Text style={styles.name} numberOfLines={2}>\n {item.name}\n </Text>\n <Pressable\n onPress={() => onRecreate(item)}\n hitSlop={6}\n style={({ pressed }) => [styles.recreate, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Recreate ${item.name}`}\n >\n <MaterialCommunityIcons name=\"auto-fix\" size={14} color=\"#0a0a0a\" />\n <Text style={styles.recreateLabel}>Recreate</Text>\n </Pressable>\n </View>\n </View>\n )}\n />\n )}\n </View>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n root: { flex: 1, minHeight: 280 },\n spinner: { marginTop: SPACE.xl },\n head: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: SPACE.lg + 4,\n paddingBottom: SPACE.md,\n },\n title: { ...TYPE.title, color: theme.foreground },\n search: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm,\n minHeight: HIT,\n marginHorizontal: SPACE.lg + 4,\n marginBottom: SPACE.md,\n borderRadius: RADIUS.pill,\n paddingHorizontal: SPACE.lg - 2,\n backgroundColor: theme.card,\n },\n searchInput: { ...TYPE.body, flex: 1, paddingVertical: SPACE.sm + 2, color: theme.foreground },\n error: {\n ...TYPE.caption,\n paddingHorizontal: SPACE.lg + 4,\n color: theme.destructiveText,\n marginBottom: SPACE.sm,\n },\n empty: {\n ...TYPE.body,\n fontSize: 14,\n textAlign: 'center',\n color: theme.mutedForeground,\n paddingVertical: SPACE.xxl,\n },\n list: { paddingHorizontal: SPACE.lg + 4, paddingBottom: SPACE.xl },\n row: { gap: SPACE.sm + 2 },\n card: {\n flex: 1,\n aspectRatio: 4 / 5,\n marginBottom: SPACE.sm + 2,\n borderRadius: RADIUS.lg,\n overflow: 'hidden',\n backgroundColor: theme.card,\n },\n cover: { ...StyleSheet.absoluteFillObject, backgroundColor: theme.card },\n coverFallback: { alignItems: 'center', justifyContent: 'center' },\n caption: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n gap: SPACE.sm,\n paddingHorizontal: SPACE.md - 2,\n paddingTop: SPACE.sm + 2,\n paddingBottom: SPACE.md - 2,\n backgroundColor: 'rgba(10,10,10,0.55)',\n },\n name: { ...TYPE.label, color: '#fafafa' },\n recreate: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.xs + 1,\n alignSelf: 'flex-start',\n minHeight: 30,\n paddingHorizontal: SPACE.md,\n borderRadius: RADIUS.pill,\n backgroundColor: 'rgba(255,255,255,0.92)',\n },\n recreateLabel: { ...TYPE.caption, fontWeight: '600', color: '#0a0a0a' },\n more: {\n alignSelf: 'center',\n minHeight: HIT,\n justifyContent: 'center',\n marginVertical: SPACE.sm,\n paddingHorizontal: SPACE.xl,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.card,\n },\n moreLabel: { ...TYPE.label, color: theme.foreground },\n }),\n);\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {jsxs,jsx}from'react/jsx-runtime';import {
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {useMemo}from'react';import {View,StyleSheet,Text,ScrollView,Platform}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {groupCanvasChatModels}from'./canvasAgentChat.js';import {useCanvasTheme,themedStyles}from'./canvasTheme.js';import {Pressable,pressedStyle,SPACE,RADIUS,HIT,TYPE}from'./canvasUi.js';var __defProp = Object.defineProperty;
|
|
2
2
|
var __defProps = Object.defineProperties;
|
|
3
3
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
@@ -24,15 +24,18 @@ function CanvasModelPicker({
|
|
|
24
24
|
onClose,
|
|
25
25
|
title = "Select model"
|
|
26
26
|
}) {
|
|
27
|
+
const theme = useCanvasTheme();
|
|
28
|
+
const styles = useMemo(() => makeStyles(theme), [theme]);
|
|
27
29
|
const selected = models.find((m) => m.id === selectedId);
|
|
28
30
|
const groups = groupCanvasChatModels(models);
|
|
29
31
|
return /* @__PURE__ */ jsxs(View, { style: styles.scrim, pointerEvents: "auto", children: [
|
|
30
32
|
/* @__PURE__ */ jsx(Pressable, { style: StyleSheet.absoluteFill, onPress: onClose, accessibilityLabel: "Close model picker" }),
|
|
31
33
|
/* @__PURE__ */ jsxs(View, { style: styles.sheet, children: [
|
|
32
34
|
/* @__PURE__ */ jsxs(View, { style: styles.head, children: [
|
|
33
|
-
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "chip", size: 16, color: "#64748b" }),
|
|
34
35
|
/* @__PURE__ */ jsx(Text, { style: styles.headTitle, children: title }),
|
|
35
|
-
/* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop: 10, accessibilityLabel: "Close model picker", style:
|
|
36
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop: 10, accessibilityLabel: "Close model picker", style: ({
|
|
37
|
+
pressed
|
|
38
|
+
}) => [styles.close, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 18, color: theme.foreground }) })
|
|
36
39
|
] }),
|
|
37
40
|
selected ? /* @__PURE__ */ jsxs(View, { style: styles.selectedBar, children: [
|
|
38
41
|
/* @__PURE__ */ jsx(Text, { style: styles.selectedKicker, children: "Selected" }),
|
|
@@ -45,132 +48,129 @@ function CanvasModelPicker({
|
|
|
45
48
|
/* @__PURE__ */ jsx(Text, { style: styles.groupLabel, children: group }),
|
|
46
49
|
options.map((m) => {
|
|
47
50
|
const active = m.id === selectedId;
|
|
48
|
-
return /* @__PURE__ */
|
|
51
|
+
return /* @__PURE__ */ jsxs(Pressable, { onPress: () => {
|
|
49
52
|
onSelect(m.id);
|
|
50
53
|
onClose();
|
|
51
|
-
}, style:
|
|
54
|
+
}, style: ({
|
|
55
|
+
pressed
|
|
56
|
+
}) => [styles.row, active && styles.rowOn, pressedStyle(pressed)], accessibilityRole: "button", accessibilityState: {
|
|
52
57
|
selected: active
|
|
53
|
-
}, children:
|
|
54
|
-
/* @__PURE__ */ jsxs(View, { style: styles.
|
|
58
|
+
}, children: [
|
|
59
|
+
/* @__PURE__ */ jsxs(View, { style: styles.rowBody, children: [
|
|
55
60
|
/* @__PURE__ */ jsx(Text, { style: styles.rowTitle, numberOfLines: 1, children: m.title }),
|
|
56
|
-
|
|
61
|
+
m.description ? /* @__PURE__ */ jsx(Text, { style: styles.rowDesc, numberOfLines: 1, children: m.description }) : /* @__PURE__ */ jsx(Text, { style: styles.rowId, numberOfLines: 1, children: m.id })
|
|
57
62
|
] }),
|
|
58
|
-
/* @__PURE__ */ jsx(
|
|
59
|
-
|
|
60
|
-
] }) }, m.id);
|
|
63
|
+
/* @__PURE__ */ jsx(View, { style: [styles.check, active && styles.checkOn], children: active ? /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "check", size: 14, color: theme.background }) : null })
|
|
64
|
+
] }, m.id);
|
|
61
65
|
})
|
|
62
66
|
] }, group)) })
|
|
63
67
|
] })
|
|
64
68
|
] });
|
|
65
69
|
}
|
|
66
|
-
const
|
|
70
|
+
const makeStyles = themedStyles((theme) => StyleSheet.create({
|
|
67
71
|
scrim: __spreadProps(__spreadValues({}, StyleSheet.absoluteFillObject), {
|
|
68
72
|
zIndex: 40,
|
|
69
73
|
elevation: 40,
|
|
70
|
-
backgroundColor: "rgba(0,0,0,0.
|
|
74
|
+
backgroundColor: "rgba(0,0,0,0.45)",
|
|
71
75
|
justifyContent: "center",
|
|
72
|
-
padding:
|
|
76
|
+
padding: SPACE.lg
|
|
73
77
|
}),
|
|
74
78
|
sheet: {
|
|
75
79
|
maxHeight: "80%",
|
|
76
|
-
borderRadius:
|
|
77
|
-
backgroundColor:
|
|
78
|
-
borderWidth: StyleSheet.hairlineWidth,
|
|
79
|
-
borderColor: "#e2e8f0",
|
|
80
|
+
borderRadius: RADIUS.xl,
|
|
81
|
+
backgroundColor: theme.surface,
|
|
80
82
|
overflow: "hidden"
|
|
81
83
|
},
|
|
82
84
|
head: {
|
|
83
85
|
flexDirection: "row",
|
|
84
86
|
alignItems: "center",
|
|
85
|
-
gap:
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
87
|
+
gap: SPACE.sm,
|
|
88
|
+
paddingLeft: SPACE.xl - 4,
|
|
89
|
+
paddingRight: SPACE.sm,
|
|
90
|
+
paddingTop: SPACE.md,
|
|
91
|
+
paddingBottom: SPACE.xs
|
|
90
92
|
},
|
|
91
|
-
headTitle: {
|
|
93
|
+
headTitle: __spreadProps(__spreadValues({}, TYPE.title), {
|
|
92
94
|
flex: 1,
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
color: "#0f172a"
|
|
96
|
-
},
|
|
95
|
+
color: theme.foreground
|
|
96
|
+
}),
|
|
97
97
|
close: {
|
|
98
|
-
|
|
98
|
+
width: 36,
|
|
99
|
+
height: 36,
|
|
100
|
+
borderRadius: 18,
|
|
101
|
+
alignItems: "center",
|
|
102
|
+
justifyContent: "center",
|
|
103
|
+
backgroundColor: theme.card
|
|
99
104
|
},
|
|
100
105
|
selectedBar: {
|
|
101
106
|
flexDirection: "row",
|
|
102
107
|
alignItems: "center",
|
|
103
|
-
gap:
|
|
104
|
-
paddingHorizontal:
|
|
105
|
-
|
|
106
|
-
backgroundColor: "#f8fafc",
|
|
107
|
-
borderBottomWidth: StyleSheet.hairlineWidth,
|
|
108
|
-
borderBottomColor: "#e2e8f0"
|
|
109
|
-
},
|
|
110
|
-
selectedKicker: {
|
|
111
|
-
fontSize: 11,
|
|
112
|
-
fontWeight: "600",
|
|
113
|
-
letterSpacing: 0.6,
|
|
114
|
-
textTransform: "uppercase",
|
|
115
|
-
color: "#64748b"
|
|
108
|
+
gap: SPACE.xs + 2,
|
|
109
|
+
paddingHorizontal: SPACE.xl - 4,
|
|
110
|
+
paddingBottom: SPACE.sm
|
|
116
111
|
},
|
|
117
|
-
|
|
112
|
+
selectedKicker: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
113
|
+
color: theme.mutedForeground
|
|
114
|
+
}),
|
|
115
|
+
selectedTitle: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
118
116
|
flex: 1,
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
},
|
|
117
|
+
fontWeight: "600",
|
|
118
|
+
color: theme.foreground
|
|
119
|
+
}),
|
|
123
120
|
list: {
|
|
124
|
-
maxHeight:
|
|
121
|
+
maxHeight: 440
|
|
125
122
|
},
|
|
126
123
|
listBody: {
|
|
127
|
-
|
|
128
|
-
paddingBottom:
|
|
124
|
+
paddingHorizontal: SPACE.sm,
|
|
125
|
+
paddingBottom: SPACE.md
|
|
129
126
|
},
|
|
130
127
|
group: {
|
|
131
|
-
|
|
132
|
-
},
|
|
133
|
-
groupLabel: {
|
|
134
|
-
paddingHorizontal: 8,
|
|
135
|
-
paddingVertical: 4,
|
|
136
|
-
fontSize: 11,
|
|
137
|
-
fontWeight: "600",
|
|
138
|
-
letterSpacing: 0.6,
|
|
139
|
-
textTransform: "uppercase",
|
|
140
|
-
color: "#94a3b8"
|
|
128
|
+
marginTop: SPACE.sm
|
|
141
129
|
},
|
|
130
|
+
groupLabel: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
131
|
+
paddingHorizontal: SPACE.md,
|
|
132
|
+
paddingVertical: SPACE.xs + 2,
|
|
133
|
+
color: theme.mutedForeground
|
|
134
|
+
}),
|
|
142
135
|
row: {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
136
|
+
flexDirection: "row",
|
|
137
|
+
alignItems: "center",
|
|
138
|
+
gap: SPACE.md,
|
|
139
|
+
minHeight: HIT + 12,
|
|
140
|
+
borderRadius: RADIUS.md + 2,
|
|
141
|
+
paddingHorizontal: SPACE.md,
|
|
142
|
+
paddingVertical: SPACE.sm + 2
|
|
146
143
|
},
|
|
147
144
|
rowOn: {
|
|
148
|
-
backgroundColor:
|
|
145
|
+
backgroundColor: theme.card
|
|
149
146
|
},
|
|
150
147
|
rowBody: {
|
|
151
148
|
minWidth: 0,
|
|
152
149
|
flex: 1
|
|
153
150
|
},
|
|
154
|
-
|
|
155
|
-
flexDirection: "row",
|
|
156
|
-
alignItems: "center",
|
|
157
|
-
gap: 8
|
|
158
|
-
},
|
|
159
|
-
rowTitle: {
|
|
160
|
-
flex: 1,
|
|
161
|
-
fontSize: 14,
|
|
151
|
+
rowTitle: __spreadProps(__spreadValues({}, TYPE.body), {
|
|
162
152
|
fontWeight: "600",
|
|
163
|
-
color:
|
|
164
|
-
},
|
|
153
|
+
color: theme.foreground
|
|
154
|
+
}),
|
|
165
155
|
rowId: {
|
|
166
156
|
marginTop: 2,
|
|
167
157
|
fontSize: 11,
|
|
168
158
|
fontFamily: Platform.OS === "ios" ? "Menlo" : "monospace",
|
|
169
|
-
color:
|
|
159
|
+
color: theme.mutedForeground
|
|
170
160
|
},
|
|
171
|
-
rowDesc: {
|
|
161
|
+
rowDesc: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
162
|
+
fontWeight: "400",
|
|
172
163
|
marginTop: 2,
|
|
173
|
-
|
|
174
|
-
|
|
164
|
+
color: theme.mutedForeground
|
|
165
|
+
}),
|
|
166
|
+
check: {
|
|
167
|
+
width: 22,
|
|
168
|
+
height: 22,
|
|
169
|
+
borderRadius: 11,
|
|
170
|
+
alignItems: "center",
|
|
171
|
+
justifyContent: "center"
|
|
172
|
+
},
|
|
173
|
+
checkOn: {
|
|
174
|
+
backgroundColor: theme.foreground
|
|
175
175
|
}
|
|
176
|
-
});export{CanvasModelPicker};//# sourceMappingURL=CanvasModelPicker.js.map
|
|
176
|
+
}));export{CanvasModelPicker};//# sourceMappingURL=CanvasModelPicker.js.map
|