@adminide-stack/yantra-mobile 12.0.125-alpha.1 → 12.0.125
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/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/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 +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanvasBoardsGrid.js","sources":["../../../src/features/canvas/CanvasBoardsGrid.tsx"],"sourcesContent":["/**\n * Board grid — native twin of canvas-surface screen one (`CreateStrip` + `YourWork`).\n * Create: grouped rows of tools (Generate with AI / Edit & produce / Design & write).\n * Your work: boards and designs merged newest first, with All / Canvases /\n * Designs / Docs chips once more than one kind exists, as a 2-up grid.\n * Renders 10 tiles at a time; scrolling to the bottom appends the next 10.\n */\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { FlatList, Pressable, ScrollView, StyleSheet, Text, useWindowDimensions, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Image } from 'expo-image';\nimport type { CanvasBoardSummary } from './surfaceIndex';\nimport type { DesignDocSummary } from '../design/designIndex';\nimport type { DesignLayer, PersistedDesignDoc } from '../design/designCore';\nimport { isUnsetBoardTitle, type CanvasItem } from './canvasCore';\nimport { CANVAS_BOARD_PAGE_SIZE } from './canvasBoardsCatalog';\nimport type { StudioLook } from './studioLooks';\nimport type { CreateAction, visibleCreateGroups } from './createTiles';\nimport {\n WORK_FILTERS,\n availableFilters,\n boardCover,\n designNoun,\n matchesFilter,\n mergeWork,\n pageCount,\n videoCoverFrame,\n type WorkFilter,\n type WorkItem,\n} from './homeWork';\nimport { resultUrl, type RunMediaAction } from './videoEditor/mediaActions';\nimport { unwrapProxyUrl } from './videoEditor/remoteMediaClient';\n\ntype IconName = React.ComponentProps<typeof MaterialCommunityIcons>['name'];\n\nconst MINUTE = 60_000;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst GUTTER = 16;\nconst TILE_RADIUS = 12;\nconst THUMB_HEIGHT = 140;\n\nfunction relativeTime(ts: number): string {\n const diff = Date.now() - ts;\n if (diff < HOUR) return `${Math.max(1, Math.round(diff / MINUTE))}m ago`;\n if (diff < DAY) return `${Math.round(diff / HOUR)}h ago`;\n if (diff < 30 * DAY) return `${Math.round(diff / DAY)}d ago`;\n return new Date(ts).toLocaleDateString();\n}\n\ntype GridItem = { kind: 'new'; id: string } | { kind: 'work'; id: string; work: WorkItem };\n\nexport function CanvasBoardsGrid({\n boards,\n onOpen,\n onNewCanvas,\n designs = [],\n onOpenDesign,\n onAskAgent,\n createGroups = [],\n onCreate,\n featuredLooks = [],\n onRecreateLook,\n runAction,\n}: {\n boards: CanvasBoardSummary[];\n onOpen: (channelId: string) => void;\n onNewCanvas: () => void;\n designs?: DesignDocSummary[];\n onOpenDesign?: (channelId: string) => void;\n onAskAgent?: () => void;\n /** Screen one's Create rows (web CreateStrip), already narrowed to what this host runs. */\n createGroups?: ReturnType<typeof visibleCreateGroups>;\n onCreate?: (action: CreateAction, tileId: string) => void;\n /** Web Featured Looks rail on home. */\n featuredLooks?: StudioLook[];\n onRecreateLook?: (look: StudioLook) => void;\n /** Connector runner - fetches a real frame for a video-only board's cover. */\n runAction?: RunMediaAction;\n}) {\n const { width } = useWindowDimensions();\n const tileWidth = Math.max(140, (width - GUTTER * 3) / 2);\n const [visible, setVisible] = useState(CANVAS_BOARD_PAGE_SIZE);\n const [filter, setFilter] = useState<WorkFilter>('all');\n\n const work = useMemo(() => mergeWork(boards, designs), [boards, designs]);\n const filters = useMemo(() => availableFilters(work), [work]);\n // A chosen kind that is gone (its last design deleted) falls back to everything.\n const active = filters.includes(filter) ? filter : 'all';\n const shown = useMemo(() => work.filter((item) => matchesFilter(item, active)), [work, active]);\n\n useEffect(() => {\n setVisible(CANVAS_BOARD_PAGE_SIZE);\n }, [boards, designs, active]);\n\n const tiles = useMemo<GridItem[]>(\n () => [\n { kind: 'new', id: '__new__' },\n ...shown\n .slice(0, visible)\n .map((entry) => ({ kind: 'work' as const, id: `${entry.type}:${entry.id}`, work: entry })),\n ],\n [shown, visible],\n );\n\n const rows = useMemo(() => {\n const chunked: GridItem[][] = [];\n for (let i = 0; i < tiles.length; i += 2) {\n chunked.push(tiles.slice(i, i + 2));\n }\n return chunked;\n }, [tiles]);\n\n const loadMore = useCallback(() => {\n setVisible((count) => {\n if (count >= shown.length) return count;\n return Math.min(count + CANVAS_BOARD_PAGE_SIZE, shown.length);\n });\n }, [shown.length]);\n\n const header = (\n <View style={styles.header}>\n {onCreate && createGroups.length > 0 ? (\n <View style={styles.createBlock}>\n <View style={styles.createHead}>\n <View style={styles.flexShrink}>\n <Text style={styles.createTitle}>Create</Text>\n <Text style={styles.createSub}>Generate, edit, or start a blank design.</Text>\n </View>\n {onAskAgent ? (\n <Pressable\n onPress={onAskAgent}\n style={styles.askAgentBtn}\n accessibilityRole=\"button\"\n accessibilityLabel=\"AI Chat\"\n >\n <MaterialCommunityIcons name=\"creation\" size={14} color=\"#64748b\" />\n <Text style={styles.askAgentLabel}>AI Chat</Text>\n </Pressable>\n ) : null}\n </View>\n {createGroups.map((group) => (\n <View key={group.id} style={styles.group}>\n <Text\n style={[\n styles.groupTitle,\n { color: group.accent.fg, borderBottomColor: group.accent.bg },\n ]}\n >\n {group.title}\n </Text>\n <View style={styles.groupTiles}>\n {group.tiles.map((tile) => (\n <Pressable\n key={tile.id}\n onPress={() => onCreate(tile.action, tile.id)}\n style={[styles.createTile, { width: tileWidth }]}\n accessibilityRole=\"button\"\n accessibilityLabel={`${tile.label}: ${tile.hint}`}\n testID={`create-tile-${tile.id}`}\n >\n <View style={[styles.createIcon, { backgroundColor: group.accent.bg }]}>\n <MaterialCommunityIcons\n name={tile.icon as IconName}\n size={18}\n color={group.accent.fg}\n />\n </View>\n <View style={styles.flexShrink}>\n <Text style={styles.createLabel} numberOfLines={1}>\n {tile.label}\n </Text>\n <Text style={styles.createHint} numberOfLines={2}>\n {tile.hint}\n </Text>\n </View>\n </Pressable>\n ))}\n </View>\n </View>\n ))}\n </View>\n ) : null}\n {featuredLooks.length > 0 && onRecreateLook ? (\n <View style={styles.composerBlock}>\n <Text style={styles.studioLabel}>Looks</Text>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.studioRow}\n >\n {featuredLooks.map((look) => (\n <Pressable\n key={look.id}\n onPress={() => onRecreateLook(look)}\n style={styles.lookChip}\n accessibilityRole=\"button\"\n accessibilityLabel={`Recreate ${look.name}`}\n >\n {look.cover ? (\n <Image source={{ uri: look.cover }} style={styles.lookCover} contentFit=\"cover\" />\n ) : (\n <View style={[styles.lookCover, styles.lookCoverFallback]}>\n <MaterialCommunityIcons name=\"movie-open-outline\" size={18} color=\"#94a3b8\" />\n </View>\n )}\n <Text style={styles.lookName} numberOfLines={2}>\n {look.name}\n </Text>\n </Pressable>\n ))}\n </ScrollView>\n </View>\n ) : null}\n <View style={styles.workHead}>\n <Text style={styles.workTitle}>Your work</Text>\n {filters.length > 0 ? (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.studioRow}\n >\n {WORK_FILTERS.filter((f) => filters.includes(f.id)).map((f) => {\n const on = f.id === active;\n return (\n <Pressable\n key={f.id}\n onPress={() => setFilter(f.id)}\n style={[styles.filterChip, on && styles.filterChipOn]}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: on }}\n >\n <Text style={[styles.filterLabel, on && styles.filterLabelOn]}>{f.label}</Text>\n </Pressable>\n );\n })}\n </ScrollView>\n ) : null}\n </View>\n </View>\n );\n\n const renderTile = (item: GridItem) => {\n if (item.kind === 'new') {\n return (\n <Pressable\n onPress={onNewCanvas}\n style={[styles.tile, styles.tileDashed, { width: tileWidth }]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"New canvas\"\n >\n <View style={styles.thumb}>\n <MaterialCommunityIcons name=\"plus\" size={28} color=\"#64748b\" />\n <Text style={styles.dashHint}>Start a blank canvas</Text>\n </View>\n <View style={styles.meta}>\n <Text style={styles.metaTitle}>New canvas</Text>\n </View>\n </Pressable>\n );\n }\n const { work: entry } = item;\n if (entry.type === 'design') {\n const { design } = entry;\n const noun = designNoun(design.doc);\n const title = design.title?.trim() || `Untitled ${noun.toLowerCase()}`;\n const meta = [noun, pageCount(design.doc), relativeTime(design.savedAt)].filter(Boolean).join(' · ');\n return (\n <Pressable\n onPress={() => onOpenDesign?.(design.channelId)}\n style={[styles.tile, { width: tileWidth }]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Open ${noun.toLowerCase()} ${title}`}\n >\n <View style={styles.thumb}>\n <DesignThumb doc={design.doc} maxWidth={tileWidth - 24} />\n </View>\n <View style={styles.meta}>\n <Text style={styles.metaTitle} numberOfLines={1}>\n {title}\n </Text>\n <Text style={styles.metaSub} numberOfLines={1}>\n {meta}\n </Text>\n </View>\n </Pressable>\n );\n }\n const { board } = entry;\n const cover = boardCover(board.board.items);\n const title = !isUnsetBoardTitle(board.title)\n ? board.title\n : board.board.items.find((it) => it.generatedAssetName)?.generatedAssetName || 'Untitled';\n return (\n <Pressable\n onPress={() => onOpen(board.channelId)}\n style={[styles.tile, { width: tileWidth }]}\n accessibilityRole=\"button\"\n >\n <View style={styles.thumb}>\n {cover ? (\n <BoardCover key={cover.src} item={cover} runAction={runAction} />\n ) : (\n <MaterialCommunityIcons name=\"image-outline\" size={28} color=\"#94a3b8\" />\n )}\n </View>\n <View style={styles.meta}>\n <Text style={styles.metaTitle} numberOfLines={1}>\n {title}\n </Text>\n <Text style={styles.metaSub}>\n Canvas · {board.itemCount} item{board.itemCount === 1 ? '' : 's'} ·{' '}\n {relativeTime(board.savedAt)}\n </Text>\n </View>\n </Pressable>\n );\n };\n\n return (\n <View style={styles.plane}>\n <DotGrid />\n {work.length === 0 ? (\n <ScrollView contentContainerStyle={styles.emptyWrap} showsVerticalScrollIndicator={false}>\n {header}\n <View style={styles.emptyCard}>\n <Text style={styles.emptyTitle}>Your canvases will appear here</Text>\n <Text style={styles.emptyDetail}>\n Every chat gets its own canvas. Generate an image, video, or audio and it lands on this\n board — come back here to reach the ones from your other chats.\n </Text>\n <Pressable onPress={onNewCanvas} style={styles.emptyCta} accessibilityRole=\"button\">\n <MaterialCommunityIcons name=\"plus\" size={16} color=\"#f8fafc\" />\n <Text style={styles.emptyCtaLabel}>New canvas</Text>\n </Pressable>\n </View>\n </ScrollView>\n ) : (\n <FlatList\n data={rows}\n keyExtractor={(pair) => pair.map((item) => item.id).join(':')}\n contentContainerStyle={styles.gridList}\n showsVerticalScrollIndicator={false}\n onEndReached={loadMore}\n onEndReachedThreshold={0.4}\n ListHeaderComponent={header}\n renderItem={({ item: pair }) => (\n <View style={styles.row}>\n {pair.map((entry) => (\n <View key={entry.id}>{renderTile(entry)}</View>\n ))}\n {pair.length < 2 ? <View style={{ width: tileWidth }} /> : null}\n </View>\n )}\n />\n )}\n </View>\n );\n}\n\n/**\n * A board's cover: the image itself, or for a video-only board a real frame\n * fetched once per clip (connector THUMBNAIL, cached in memory). A load or\n * frame failure shows a quiet glyph instead of a dark box.\n */\nfunction BoardCover({ item, runAction }: { item: CanvasItem; runAction?: RunMediaAction }) {\n const [failed, setFailed] = useState(false);\n const [frame, setFrame] = useState<string | null | undefined>(item.type === 'video' ? undefined : item.src);\n\n useEffect(() => {\n if (item.type !== 'video') return undefined;\n if (!runAction) {\n setFrame(null);\n return undefined;\n }\n let live = true;\n void videoCoverFrame(unwrapProxyUrl(item.src), runAction, (result) =>\n resultUrl(result, 'YANTRA_VIDEO_EDIT_THUMBNAIL'),\n ).then((url) => {\n if (live) setFrame(url);\n });\n return () => {\n live = false;\n };\n }, [item.src, item.type, runAction]);\n\n const isVideo = item.type === 'video';\n if (failed || frame === null) {\n return (\n <MaterialCommunityIcons name={isVideo ? 'movie-outline' : 'image-off-outline'} size={28} color=\"#94a3b8\" />\n );\n }\n return (\n <>\n {frame ? (\n <Image\n source={{ uri: frame }}\n style={styles.thumbImage}\n contentFit=\"cover\"\n onError={() => setFailed(true)}\n />\n ) : null}\n {isVideo ? (\n <View style={styles.playBadge} pointerEvents=\"none\">\n <MaterialCommunityIcons name=\"play\" size={18} color=\"#f8fafc\" />\n </View>\n ) : null}\n </>\n );\n}\n\n/** A design's first page, scaled into the tile: fill, shapes, images and text as laid out. */\nfunction DesignThumb({ doc, maxWidth }: { doc: PersistedDesignDoc; maxWidth: number }) {\n const page = doc.pages[0];\n if (!page || !(page.width > 0) || !(page.height > 0)) {\n return <MaterialCommunityIcons name=\"shape-outline\" size={28} color=\"#94a3b8\" />;\n }\n const maxH = THUMB_HEIGHT - 24;\n const scale = Math.min(maxWidth / page.width, maxH / page.height);\n const layers = [...page.layers].sort((a, b) => a.zIndex - b.zIndex);\n return (\n <View\n style={[\n styles.designPage,\n {\n width: page.width * scale,\n height: page.height * scale,\n backgroundColor: page.background || '#ffffff',\n },\n ]}\n pointerEvents=\"none\"\n >\n {layers.map((layer) => (\n <DesignThumbLayer key={layer.id} layer={layer} scale={scale} />\n ))}\n </View>\n );\n}\n\nfunction DesignThumbLayer({ layer, scale }: { layer: DesignLayer; scale: number }) {\n const box = {\n position: 'absolute' as const,\n left: layer.x * scale,\n top: layer.y * scale,\n width: layer.width * scale,\n height: layer.height * scale,\n opacity: layer.opacity,\n };\n if (layer.type === 'image') {\n return <Image source={{ uri: layer.src }} style={box} contentFit=\"cover\" />;\n }\n if (layer.type === 'shape') {\n return <View style={[box, { backgroundColor: layer.fill, borderRadius: layer.cornerRadius * scale }]} />;\n }\n return (\n <Text\n style={[\n box,\n {\n color: layer.color,\n fontSize: Math.max(4, layer.fontSize * scale),\n lineHeight: Math.max(5, layer.fontSize * scale * 1.15),\n fontWeight: layer.bold ? '700' : '400',\n textAlign: layer.align,\n },\n ]}\n numberOfLines={3}\n >\n {layer.text}\n </Text>\n );\n}\n\nfunction DotGrid() {\n return (\n <View pointerEvents=\"none\" style={styles.dots}>\n {Array.from({ length: 18 }).map((_, row) => (\n <View key={row} style={styles.dotRow}>\n {Array.from({ length: 16 }).map((__, col) => (\n <View key={col} style={styles.dotCell}>\n <View style={styles.dot} />\n </View>\n ))}\n </View>\n ))}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n plane: { flex: 1, backgroundColor: '#eef1f4', overflow: 'hidden' },\n dots: { ...StyleSheet.absoluteFillObject },\n dotRow: { flexDirection: 'row', height: 22 },\n dotCell: { width: 22, height: 22, alignItems: 'center', justifyContent: 'center' },\n dot: { width: 2, height: 2, borderRadius: 1, backgroundColor: 'rgba(15,23,42,0.14)' },\n emptyWrap: { flexGrow: 1, alignItems: 'center', padding: GUTTER, paddingBottom: 32 },\n emptyCard: {\n width: '100%',\n maxWidth: 420,\n borderRadius: 16,\n borderWidth: 1,\n borderColor: 'rgba(15,23,42,0.08)',\n backgroundColor: 'rgba(255,255,255,0.96)',\n paddingHorizontal: 28,\n paddingVertical: 36,\n alignItems: 'center',\n shadowColor: '#0f172a',\n shadowOpacity: 0.06,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 8 },\n elevation: 2,\n },\n emptyTitle: { fontSize: 20, fontWeight: '600', color: '#0f172a', textAlign: 'center' },\n emptyDetail: { marginTop: 8, fontSize: 14, lineHeight: 20, color: '#64748b', textAlign: 'center' },\n emptyCta: {\n marginTop: 22,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n backgroundColor: '#0f172a',\n paddingHorizontal: 20,\n paddingVertical: 11,\n borderRadius: 999,\n },\n emptyCtaLabel: { color: '#f8fafc', fontSize: 14, fontWeight: '600' },\n gridList: { padding: GUTTER, paddingBottom: 32 },\n row: { flexDirection: 'row', gap: GUTTER, marginBottom: GUTTER },\n tile: {\n borderRadius: TILE_RADIUS,\n overflow: 'hidden',\n backgroundColor: '#ffffff',\n borderWidth: 1,\n borderColor: 'rgba(15,23,42,0.08)',\n shadowColor: '#0f172a',\n shadowOpacity: 0.05,\n shadowRadius: 8,\n shadowOffset: { width: 0, height: 2 },\n elevation: 1,\n },\n tileDashed: { borderStyle: 'dashed', backgroundColor: 'rgba(255,255,255,0.7)' },\n thumb: {\n height: THUMB_HEIGHT,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#f1f5f9',\n overflow: 'hidden',\n gap: 8,\n },\n thumbImage: { ...StyleSheet.absoluteFillObject },\n playBadge: {\n position: 'absolute',\n right: 8,\n bottom: 8,\n width: 28,\n height: 28,\n borderRadius: 14,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(15,23,42,0.55)',\n },\n designPage: {\n overflow: 'hidden',\n borderRadius: 2,\n shadowColor: '#0f172a',\n shadowOpacity: 0.12,\n shadowRadius: 4,\n shadowOffset: { width: 0, height: 1 },\n elevation: 1,\n },\n dashHint: { fontSize: 12, color: '#64748b' },\n header: { alignSelf: 'stretch', width: '100%', marginBottom: 4 },\n createBlock: { marginBottom: 16 },\n createHead: {\n flexDirection: 'row',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 12,\n marginBottom: 12,\n },\n createTitle: { fontSize: 22, fontWeight: '600', color: '#0f172a' },\n createSub: { marginTop: 2, fontSize: 13, color: '#64748b' },\n flexShrink: { flexShrink: 1 },\n group: { marginBottom: 14 },\n groupTitle: {\n fontSize: 16,\n fontWeight: '600',\n paddingBottom: 6,\n marginBottom: 8,\n borderBottomWidth: 1,\n },\n groupTiles: { flexDirection: 'row', flexWrap: 'wrap', columnGap: GUTTER, rowGap: 4 },\n createTile: {\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: 10,\n minHeight: 48,\n paddingVertical: 6,\n },\n createIcon: { width: 36, height: 36, borderRadius: 10, alignItems: 'center', justifyContent: 'center' },\n createLabel: { fontSize: 14, fontWeight: '600', color: '#0f172a' },\n createHint: { marginTop: 1, fontSize: 11, lineHeight: 14, color: '#64748b' },\n composerBlock: { marginBottom: 16, gap: 8 },\n lookChip: {\n width: 112,\n borderRadius: 12,\n overflow: 'hidden',\n backgroundColor: '#ffffff',\n borderWidth: 1,\n borderColor: 'rgba(15,23,42,0.08)',\n },\n lookCover: { width: '100%', height: 72, backgroundColor: '#f1f5f9' },\n lookCoverFallback: { alignItems: 'center', justifyContent: 'center' },\n lookName: {\n paddingHorizontal: 8,\n paddingVertical: 8,\n fontSize: 11,\n fontWeight: '600',\n color: '#0f172a',\n },\n workHead: { gap: 8, marginBottom: 12 },\n workTitle: { fontSize: 18, fontWeight: '600', color: '#0f172a' },\n filterChip: {\n backgroundColor: '#ffffff',\n borderWidth: 1,\n borderColor: 'rgba(15,23,42,0.1)',\n borderRadius: 999,\n paddingHorizontal: 14,\n paddingVertical: 7,\n },\n filterChipOn: { backgroundColor: '#0f172a', borderColor: '#0f172a' },\n filterLabel: { fontSize: 13, fontWeight: '600', color: '#0f172a' },\n filterLabelOn: { color: '#f8fafc' },\n studioLabel: {\n fontSize: 11,\n fontWeight: '600',\n letterSpacing: 0.6,\n textTransform: 'uppercase',\n color: '#64748b',\n flexShrink: 1,\n },\n askAgentBtn: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: '#e2e8f0',\n borderRadius: 8,\n paddingHorizontal: 8,\n paddingVertical: 6,\n backgroundColor: '#ffffff',\n flexShrink: 0,\n },\n askAgentLabel: { fontSize: 11, fontWeight: '600', color: '#64748b' },\n studioRow: { flexDirection: 'row', gap: 8, paddingBottom: 4 },\n meta: {\n borderTopWidth: StyleSheet.hairlineWidth,\n borderTopColor: 'rgba(15,23,42,0.08)',\n paddingHorizontal: 12,\n paddingVertical: 10,\n },\n metaTitle: { fontSize: 14, fontWeight: '600', color: '#0f172a' },\n metaSub: {\n marginTop: 2,\n fontSize: 10,\n fontWeight: '600',\n letterSpacing: 0.4,\n textTransform: 'uppercase',\n color: '#94a3b8',\n },\n});\n"],"names":["title"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CanvasBoardsGrid.js","sources":["../../../src/features/canvas/CanvasBoardsGrid.tsx"],"sourcesContent":["/**\n * Canvas home - native twin of canvas-surface screen one (`CreateStrip` + `YourWork`),\n * laid out for a phone: start something in one tap, then get back to recent work.\n *\n * Create title + theme toggle, the prompt bar (opens AI Chat)\n * Generate the AI lanes as a 3-up grid of tinted tiles\n * Design formats drawn at their own proportions\n * Tools editors and studios as one scrolling row of pills\n * Looks featured studio looks, cover-first\n * Your work boards and designs merged newest first, filtered by kind\n *\n * Renders 10 work tiles at a time; scrolling to the bottom appends the next 10.\n */\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { FlatList, ScrollView, StyleSheet, Text, useWindowDimensions, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Image } from 'expo-image';\nimport type { CanvasBoardSummary } from './surfaceIndex';\nimport type { DesignDocSummary } from '../design/designIndex';\nimport type { DesignLayer, PersistedDesignDoc } from '../design/designCore';\nimport { isUnsetBoardTitle, type CanvasItem } from './canvasCore';\nimport { CANVAS_BOARD_PAGE_SIZE } from './canvasBoardsCatalog';\nimport type { StudioLook } from './studioLooks';\nimport type { CreateAction, visibleCreateGroups } from './createTiles';\nimport {\n WORK_FILTERS,\n availableFilters,\n boardCover,\n designNoun,\n matchesFilter,\n mergeWork,\n pageCount,\n videoCoverFrame,\n type WorkFilter,\n type WorkItem,\n} from './homeWork';\nimport { resultUrl, type RunMediaAction } from './videoEditor/mediaActions';\nimport { unwrapProxyUrl } from './videoEditor/remoteMediaClient';\nimport { renewMediaUrl, useMediaSource } from './useMediaSource';\nimport { CanvasThemeToggle, useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport {\n CoverPlaceholder,\n Pressable,\n RADIUS,\n SPACE,\n SectionHeader,\n Segmented,\n Skeleton,\n TYPE,\n pressedStyle,\n} from './canvasUi';\n\ntype IconName = React.ComponentProps<typeof MaterialCommunityIcons>['name'];\ntype VisibleGroup = ReturnType<typeof visibleCreateGroups>[number];\ntype VisibleTile = VisibleGroup['tiles'][number];\n\nconst MINUTE = 60_000;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst GUTTER = SPACE.lg;\n/** How long a cover may load before the skeleton gives way to its tinted placeholder (the image keeps loading). */\nconst COVER_STALL_MS = 12_000;\n\nfunction relativeTime(ts: number): string {\n const diff = Date.now() - ts;\n if (diff < HOUR) return `${Math.max(1, Math.round(diff / MINUTE))}m ago`;\n if (diff < DAY) return `${Math.round(diff / HOUR)}h ago`;\n if (diff < 30 * DAY) return `${Math.round(diff / DAY)}d ago`;\n return new Date(ts).toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n}\n\n/**\n * Each AI lane keeps one hue so it is found by colour as well as by name.\n * Light: a pale wash with the 700 step as ink; dark: a low-alpha wash with the 300 step.\n */\nconst LANE_HUES: Record<string, { light: [string, string]; dark: [string, string] }> = {\n image: { light: ['#fef3c7', '#b45309'], dark: ['rgba(251,191,36,0.14)', '#fcd34d'] },\n video: { light: ['#ffe4e6', '#be123c'], dark: ['rgba(251,113,133,0.14)', '#fda4af'] },\n audio: { light: ['#e0f2fe', '#0369a1'], dark: ['rgba(56,189,248,0.14)', '#7dd3fc'] },\n slides: { light: ['#ede9fe', '#6d28d9'], dark: ['rgba(167,139,250,0.16)', '#c4b5fd'] },\n clips: { light: ['#d1fae5', '#047857'], dark: ['rgba(52,211,153,0.14)', '#6ee7b7'] },\n promo: { light: ['#ffedd5', '#c2410c'], dark: ['rgba(251,146,60,0.14)', '#fdba74'] },\n};\n\n/** Design formats drawn at their real proportions (w:h), so the row reads as \"what shape\". */\nconst FORMAT_SHAPE: Record<string, { w: number; h: number; stack?: boolean; round?: boolean }> = {\n social: { w: 1, h: 1 },\n carousel: { w: 4, h: 5, stack: true },\n flyer: { w: 3, h: 4 },\n logo: { w: 1, h: 1, round: true },\n tshirt: { w: 5, h: 6 },\n};\n\ntype GridItem = { kind: 'new'; id: string } | { kind: 'work'; id: string; work: WorkItem };\n\nexport function CanvasBoardsGrid({\n boards,\n onOpen,\n onNewCanvas,\n designs = [],\n onOpenDesign,\n onAskAgent,\n createGroups = [],\n onCreate,\n featuredLooks = [],\n onRecreateLook,\n runAction,\n}: {\n boards: CanvasBoardSummary[];\n onOpen: (channelId: string) => void;\n onNewCanvas: () => void;\n designs?: DesignDocSummary[];\n onOpenDesign?: (channelId: string) => void;\n onAskAgent?: () => void;\n /** Screen one's Create rows (web CreateStrip), already narrowed to what this host runs. */\n createGroups?: ReturnType<typeof visibleCreateGroups>;\n onCreate?: (action: CreateAction, tileId: string) => void;\n /** Web Featured Looks rail on home. */\n featuredLooks?: StudioLook[];\n onRecreateLook?: (look: StudioLook) => void;\n /** Connector runner - renews dead cover links and fetches a real frame for a video-only board. */\n runAction?: RunMediaAction;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const { width } = useWindowDimensions();\n const tileWidth = Math.max(140, (width - GUTTER * 3) / 2);\n const laneWidth = (width - GUTTER * 2 - SPACE.sm * 2) / 3;\n const [visible, setVisible] = useState(CANVAS_BOARD_PAGE_SIZE);\n const [filter, setFilter] = useState<WorkFilter>('all');\n const renew = useMemo(() => renewMediaUrl(runAction), [runAction]);\n\n const work = useMemo(() => mergeWork(boards, designs), [boards, designs]);\n const filters = useMemo(() => availableFilters(work), [work]);\n // A chosen kind that is gone (its last design deleted) falls back to everything.\n const active = filters.includes(filter) ? filter : 'all';\n const shown = useMemo(() => work.filter((item) => matchesFilter(item, active)), [work, active]);\n\n useEffect(() => {\n setVisible(CANVAS_BOARD_PAGE_SIZE);\n }, [boards, designs, active]);\n\n const tiles = useMemo<GridItem[]>(\n () => [\n { kind: 'new', id: '__new__' },\n ...shown\n .slice(0, visible)\n .map((entry) => ({ kind: 'work' as const, id: `${entry.type}:${entry.id}`, work: entry })),\n ],\n [shown, visible],\n );\n\n const rows = useMemo(() => {\n const chunked: GridItem[][] = [];\n for (let i = 0; i < tiles.length; i += 2) chunked.push(tiles.slice(i, i + 2));\n return chunked;\n }, [tiles]);\n\n const loadMore = useCallback(() => {\n setVisible((count) => (count >= shown.length ? count : Math.min(count + CANVAS_BOARD_PAGE_SIZE, shown.length)));\n }, [shown.length]);\n\n const group = (id: string) => createGroups.find((g) => g.id === id);\n const generate = group('generate');\n const edit = group('edit');\n const designGroup = group('design');\n\n const lane = (tile: VisibleTile) => {\n const hue = LANE_HUES[tile.id];\n const [wash, ink] = hue ? (theme.isDark ? hue.dark : hue.light) : [theme.card, theme.foreground];\n return (\n <Pressable\n key={tile.id}\n onPress={() => onCreate?.(tile.action, tile.id)}\n style={({ pressed }) => [\n styles.lane,\n { width: laneWidth, backgroundColor: wash },\n pressedStyle(pressed),\n ]}\n accessibilityRole=\"button\"\n accessibilityLabel={`${tile.label}: ${tile.hint}`}\n testID={`create-tile-${tile.id}`}\n >\n <MaterialCommunityIcons name={tile.icon as IconName} size={24} color={ink} />\n <Text style={[styles.laneLabel, { color: theme.isDark ? theme.foreground : ink }]} numberOfLines={2}>\n {tile.label}\n </Text>\n </Pressable>\n );\n };\n\n const header = (\n <View style={styles.header}>\n <View style={styles.titleRow}>\n <Text style={styles.title} accessibilityRole=\"header\">\n Create\n </Text>\n <CanvasThemeToggle size={20} style={styles.toggle} />\n </View>\n\n {onAskAgent ? (\n <Pressable\n onPress={onAskAgent}\n style={({ pressed }) => [styles.prompt, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Ask AI Chat to make something\"\n >\n <MaterialCommunityIcons name=\"creation\" size={20} color={theme.mutedForeground} />\n <Text style={styles.promptText} numberOfLines={1}>\n Describe what you want to make\n </Text>\n <View style={styles.promptGo}>\n <MaterialCommunityIcons name=\"arrow-up\" size={18} color={theme.primaryForeground} />\n </View>\n </Pressable>\n ) : null}\n\n {onCreate && generate ? (\n <View style={styles.section}>\n <SectionHeader title=\"Generate with AI\" />\n <View style={styles.lanes}>{generate.tiles.map(lane)}</View>\n </View>\n ) : null}\n\n {onCreate && designGroup ? (\n <View style={styles.section}>\n <SectionHeader title=\"Design\" />\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.bleed}\n contentContainerStyle={styles.railContent}\n >\n {designGroup.tiles.map((tile) => (\n <FormatTile key={tile.id} tile={tile} onPress={() => onCreate(tile.action, tile.id)} />\n ))}\n </ScrollView>\n </View>\n ) : null}\n\n {onCreate && edit ? (\n <View style={styles.section}>\n <SectionHeader title=\"Edit & produce\" />\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.bleed}\n contentContainerStyle={styles.railContent}\n >\n {edit.tiles.map((tile) => (\n <Pressable\n key={tile.id}\n onPress={() => onCreate(tile.action, tile.id)}\n style={({ pressed }) => [styles.tool, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`${tile.label}: ${tile.hint}`}\n testID={`create-tile-${tile.id}`}\n >\n <MaterialCommunityIcons\n name={tile.icon as IconName}\n size={18}\n color={theme.foreground}\n />\n <Text style={styles.toolLabel}>{tile.label}</Text>\n </Pressable>\n ))}\n </ScrollView>\n </View>\n ) : null}\n\n {featuredLooks.length > 0 && onRecreateLook ? (\n <View style={styles.section}>\n <SectionHeader title=\"Looks\" detail=\"Recreate a studio style\" />\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.bleed}\n contentContainerStyle={styles.railContent}\n >\n {featuredLooks.map((look) => (\n <Pressable\n key={look.id}\n onPress={() => onRecreateLook(look)}\n style={({ pressed }) => [styles.look, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Recreate ${look.name}`}\n >\n {look.cover ? (\n <Image source={{ uri: look.cover }} style={styles.fill} contentFit=\"cover\" />\n ) : (\n <View style={[styles.fill, styles.centered]}>\n <MaterialCommunityIcons\n name=\"movie-open-outline\"\n size={22}\n color={theme.mutedForeground}\n />\n </View>\n )}\n <View style={styles.lookCaption}>\n <Text style={styles.lookName} numberOfLines={2}>\n {look.name}\n </Text>\n </View>\n </Pressable>\n ))}\n </ScrollView>\n </View>\n ) : null}\n\n <View style={styles.workHead}>\n <SectionHeader\n title=\"Your work\"\n detail={work.length > 0 ? String(work.length) : undefined}\n style={styles.noMargin}\n />\n {filters.length > 0 ? (\n <Segmented\n options={WORK_FILTERS.filter((f) => filters.includes(f.id))}\n value={active}\n onChange={setFilter}\n style={styles.segmented}\n />\n ) : null}\n </View>\n </View>\n );\n\n const renderTile = (item: GridItem) => {\n if (item.kind === 'new') {\n return (\n <Pressable\n onPress={onNewCanvas}\n style={({ pressed }) => [{ width: tileWidth }, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"New canvas\"\n >\n <View style={[styles.cover, styles.coverNew]}>\n <View style={styles.newPlus}>\n <MaterialCommunityIcons name=\"plus\" size={24} color={theme.primaryForeground} />\n </View>\n </View>\n <Text style={styles.workTitle}>New canvas</Text>\n <Text style={styles.workMeta}>Start blank</Text>\n </Pressable>\n );\n }\n const { work: entry } = item;\n if (entry.type === 'design') {\n const { design } = entry;\n const noun = designNoun(design.doc);\n const title = design.title?.trim() || `Untitled ${noun.toLowerCase()}`;\n const meta = [noun, pageCount(design.doc), relativeTime(design.savedAt)].filter(Boolean).join(' · ');\n return (\n <Pressable\n onPress={() => onOpenDesign?.(design.channelId)}\n style={({ pressed }) => [{ width: tileWidth }, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Open ${noun.toLowerCase()} ${title}`}\n >\n <View style={[styles.cover, styles.centered]}>\n <DesignThumb\n doc={design.doc}\n maxWidth={tileWidth - SPACE.xl * 2}\n maxHeight={tileWidth - SPACE.xl * 2}\n />\n </View>\n <Text style={styles.workTitle} numberOfLines={1}>\n {title}\n </Text>\n <Text style={styles.workMeta} numberOfLines={1}>\n {meta}\n </Text>\n </Pressable>\n );\n }\n const { board } = entry;\n const cover = boardCover(board.board.items);\n const title = !isUnsetBoardTitle(board.title)\n ? board.title\n : board.board.items.find((it) => it.generatedAssetName)?.generatedAssetName || 'Untitled canvas';\n return (\n <Pressable\n onPress={() => onOpen(board.channelId)}\n style={({ pressed }) => [{ width: tileWidth }, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Open canvas ${title}`}\n >\n <View style={[styles.cover, styles.centered]}>\n {cover ? (\n <BoardCover\n key={cover.src}\n item={cover}\n seed={board.channelId}\n runAction={runAction}\n renew={renew}\n />\n ) : (\n <CoverPlaceholder seed={board.channelId} icon=\"image-multiple-outline\" />\n )}\n {board.itemCount > 1 ? (\n <View style={styles.countBadge} pointerEvents=\"none\">\n <Text style={styles.countBadgeText}>{board.itemCount}</Text>\n </View>\n ) : null}\n </View>\n <Text style={styles.workTitle} numberOfLines={1}>\n {title}\n </Text>\n <Text style={styles.workMeta} numberOfLines={1}>\n {`Canvas · ${relativeTime(board.savedAt)}`}\n </Text>\n </Pressable>\n );\n };\n\n return (\n <View style={styles.plane}>\n {work.length === 0 ? (\n <ScrollView contentContainerStyle={styles.list} showsVerticalScrollIndicator={false}>\n {header}\n <View style={styles.empty}>\n <View style={styles.emptyIcon}>\n <MaterialCommunityIcons name=\"image-multiple-outline\" size={26} color={theme.foreground} />\n </View>\n <Text style={styles.emptyTitle}>Nothing here yet</Text>\n <Text style={styles.emptyDetail}>\n Every chat gets its own canvas. Generate an image, video or audio and it lands here.\n </Text>\n <Pressable\n onPress={onNewCanvas}\n style={({ pressed }) => [styles.emptyCta, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"plus\" size={18} color={theme.primaryForeground} />\n <Text style={styles.emptyCtaLabel}>New canvas</Text>\n </Pressable>\n </View>\n </ScrollView>\n ) : (\n <FlatList\n data={rows}\n keyExtractor={(pair) => pair.map((item) => item.id).join(':')}\n contentContainerStyle={styles.list}\n showsVerticalScrollIndicator={false}\n onEndReached={loadMore}\n onEndReachedThreshold={0.4}\n ListHeaderComponent={header}\n renderItem={({ item: pair }) => (\n <View style={styles.row}>\n {pair.map((entry) => (\n <View key={entry.id}>{renderTile(entry)}</View>\n ))}\n {pair.length < 2 ? <View style={{ width: tileWidth }} /> : null}\n </View>\n )}\n />\n )}\n </View>\n );\n}\n\n/** A design format, drawn at its own proportions on a neutral well. */\nfunction FormatTile({ tile, onPress }: { tile: VisibleTile; onPress: () => void }) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const shape = FORMAT_SHAPE[tile.id] ?? { w: 1, h: 1 };\n const box = 56;\n const scale = box / Math.max(shape.w, shape.h);\n const pageW = shape.w * scale;\n const pageH = shape.h * scale;\n return (\n <Pressable\n onPress={onPress}\n style={({ pressed }) => [styles.format, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`${tile.label}: ${tile.hint}`}\n testID={`create-tile-${tile.id}`}\n >\n <View style={styles.formatWell}>\n {shape.stack ? (\n <View style={[styles.formatPage, styles.formatPageBack, { width: pageW, height: pageH }]} />\n ) : null}\n <View\n style={[\n styles.formatPage,\n { width: pageW, height: pageH },\n shape.round && { borderRadius: pageW / 2 },\n ]}\n >\n <MaterialCommunityIcons name={tile.icon as IconName} size={18} color={theme.mutedForeground} />\n </View>\n </View>\n <Text style={styles.formatLabel} numberOfLines={1}>\n {tile.label}\n </Text>\n </Pressable>\n );\n}\n\n/**\n * A board's cover: the image itself, renewed once if its link died, or for a\n * video-only board a real frame fetched once per clip (connector THUMBNAIL,\n * cached in memory). A cover that cannot load shows a quiet glyph.\n */\nfunction BoardCover({\n item,\n seed,\n runAction,\n renew,\n}: {\n item: CanvasItem;\n /** Stable per board, so its fallback colour never changes. */\n seed: string;\n runAction?: RunMediaAction;\n renew: (url: string) => Promise<string>;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const isVideo = item.type === 'video';\n const [frame, setFrame] = useState<string | null | undefined>(isVideo ? undefined : item.src);\n const [loaded, setLoaded] = useState(false);\n\n useEffect(() => {\n if (!isVideo) return undefined;\n if (!runAction) {\n setFrame(null);\n return undefined;\n }\n let live = true;\n void videoCoverFrame(unwrapProxyUrl(item.src), runAction, (result) =>\n resultUrl(result, 'YANTRA_VIDEO_EDIT_THUMBNAIL'),\n ).then((url) => {\n if (live) setFrame(url);\n });\n return () => {\n live = false;\n };\n }, [item.src, isVideo, runAction]);\n\n const media = useMediaSource(frame ?? '', 'image', renew);\n const [stalled, setStalled] = useState(false);\n useEffect(() => {\n setLoaded(false);\n setStalled(false);\n // A request that neither paints nor fails must not pulse forever.\n const timer = setTimeout(() => setStalled(true), COVER_STALL_MS);\n return () => clearTimeout(timer);\n }, [media.key]);\n\n // No picture to be had: a tinted cover that says what the board holds.\n if (frame === null || media.phase === 'broken') {\n return (\n <CoverPlaceholder\n seed={seed}\n icon={isVideo ? 'play' : 'image-outline'}\n label={isVideo ? 'Video' : undefined}\n />\n );\n }\n return (\n <>\n {/* Until the picture paints (or while its link is renewed) the cover breathes instead of sitting blank. */}\n {loaded && media.phase === 'ok' ? null : stalled ? (\n <CoverPlaceholder seed={seed} icon={isVideo ? 'play' : 'image-outline'} />\n ) : (\n <Skeleton />\n )}\n {frame ? (\n <Image\n key={media.key}\n source={{ uri: media.src }}\n style={styles.fill}\n contentFit=\"cover\"\n transition={200}\n onLoad={() => setLoaded(true)}\n onError={media.onError}\n />\n ) : null}\n {isVideo && loaded ? (\n <View style={styles.playBadge} pointerEvents=\"none\">\n <MaterialCommunityIcons name=\"play\" size={16} color=\"#fafafa\" />\n </View>\n ) : null}\n </>\n );\n}\n\n/** A design's first page, scaled into the tile: fill, shapes, images and text as laid out. */\nfunction DesignThumb({ doc, maxWidth, maxHeight }: { doc: PersistedDesignDoc; maxWidth: number; maxHeight: number }) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const page = doc.pages[0];\n if (!page || !(page.width > 0) || !(page.height > 0)) {\n return <MaterialCommunityIcons name=\"shape-outline\" size={28} color={theme.mutedForeground} />;\n }\n const scale = Math.min(maxWidth / page.width, maxHeight / page.height);\n const layers = [...page.layers].sort((a, b) => a.zIndex - b.zIndex);\n return (\n <View\n style={[\n styles.designPage,\n {\n width: page.width * scale,\n height: page.height * scale,\n backgroundColor: page.background || '#ffffff',\n },\n ]}\n pointerEvents=\"none\"\n >\n {layers.length === 0 ? (\n // An untouched page: a faint layout sketch (title, lines, picture) instead of a blank sheet.\n <View style={styles.sketch}>\n <View style={[styles.sketchBar, { width: '62%', height: '9%' }]} />\n <View style={[styles.sketchBar, { width: '86%', height: '5%' }]} />\n <View style={[styles.sketchBar, { width: '70%', height: '5%' }]} />\n <View style={[styles.sketchBar, styles.sketchBlock]}>\n <MaterialCommunityIcons name=\"image-outline\" size={16} color=\"#b4b4bb\" />\n </View>\n <Text style={styles.blankPage}>{designNoun(doc)}</Text>\n </View>\n ) : (\n layers.map((layer) => <DesignThumbLayer key={layer.id} layer={layer} scale={scale} />)\n )}\n </View>\n );\n}\n\nfunction DesignThumbLayer({ layer, scale }: { layer: DesignLayer; scale: number }) {\n const box = {\n position: 'absolute' as const,\n left: layer.x * scale,\n top: layer.y * scale,\n width: layer.width * scale,\n height: layer.height * scale,\n opacity: layer.opacity,\n };\n if (layer.type === 'image') {\n return <Image source={{ uri: layer.src }} style={box} contentFit=\"cover\" />;\n }\n if (layer.type === 'shape') {\n return <View style={[box, { backgroundColor: layer.fill, borderRadius: layer.cornerRadius * scale }]} />;\n }\n return (\n <Text\n style={[\n box,\n {\n color: layer.color,\n fontSize: Math.max(4, layer.fontSize * scale),\n lineHeight: Math.max(5, layer.fontSize * scale * 1.15),\n fontWeight: layer.bold ? '700' : '400',\n textAlign: layer.align,\n },\n ]}\n numberOfLines={3}\n >\n {layer.text}\n </Text>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n plane: { flex: 1, backgroundColor: theme.background },\n list: { paddingHorizontal: GUTTER, paddingTop: SPACE.sm, paddingBottom: SPACE.xxl },\n header: { alignSelf: 'stretch', width: '100%' },\n titleRow: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: SPACE.md,\n },\n title: { ...TYPE.display, color: theme.foreground },\n toggle: {\n width: 40,\n height: 40,\n borderRadius: 20,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.card,\n },\n prompt: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.md,\n minHeight: 56,\n paddingLeft: SPACE.lg,\n paddingRight: SPACE.sm,\n borderRadius: RADIUS.xl,\n backgroundColor: theme.card,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: theme.border,\n marginBottom: SPACE.xl,\n },\n promptText: { ...TYPE.body, flex: 1, color: theme.mutedForeground },\n promptGo: {\n width: 40,\n height: 40,\n borderRadius: 20,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.primary,\n },\n section: { marginBottom: SPACE.xl },\n bleed: { marginHorizontal: -GUTTER },\n railContent: { paddingHorizontal: GUTTER, gap: SPACE.sm },\n lanes: { flexDirection: 'row', flexWrap: 'wrap', gap: SPACE.sm },\n lane: {\n height: 92,\n borderRadius: RADIUS.lg,\n padding: SPACE.md,\n justifyContent: 'space-between',\n },\n laneLabel: { ...TYPE.label, lineHeight: 17 },\n format: { width: 84, alignItems: 'center', gap: SPACE.sm },\n formatWell: {\n width: 84,\n height: 84,\n borderRadius: RADIUS.lg,\n backgroundColor: theme.card,\n alignItems: 'center',\n justifyContent: 'center',\n },\n formatPage: {\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 4,\n backgroundColor: theme.isDark ? theme.secondary : theme.surface,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: theme.borderStrong,\n },\n formatPageBack: { position: 'absolute', transform: [{ translateX: 6 }, { translateY: -6 }], opacity: 0.6 },\n formatLabel: { ...TYPE.caption, color: theme.foreground },\n tool: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm,\n minHeight: 44,\n paddingHorizontal: SPACE.lg - 2,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.card,\n },\n toolLabel: { ...TYPE.label, color: theme.foreground },\n look: {\n width: 136,\n height: 176,\n borderRadius: RADIUS.lg,\n overflow: 'hidden',\n backgroundColor: theme.card,\n },\n lookCaption: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n paddingHorizontal: SPACE.md - 2,\n paddingVertical: SPACE.sm + 2,\n backgroundColor: 'rgba(10,10,10,0.55)',\n },\n lookName: { ...TYPE.label, color: '#fafafa' },\n workHead: { gap: SPACE.md, marginBottom: SPACE.lg },\n noMargin: { marginBottom: 0 },\n segmented: { flexGrow: 0, alignSelf: 'flex-start' },\n row: { flexDirection: 'row', gap: GUTTER, marginBottom: SPACE.xl - 4 },\n cover: {\n aspectRatio: 1,\n borderRadius: RADIUS.lg,\n overflow: 'hidden',\n backgroundColor: theme.card,\n marginBottom: SPACE.sm,\n },\n coverNew: {\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: 1.5,\n borderStyle: 'dashed',\n borderColor: theme.borderStrong,\n backgroundColor: 'transparent',\n },\n newPlus: {\n width: 48,\n height: 48,\n borderRadius: 24,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.primary,\n },\n centered: { alignItems: 'center', justifyContent: 'center' },\n fill: { ...StyleSheet.absoluteFillObject },\n workTitle: { ...TYPE.label, fontSize: 14, color: theme.foreground },\n workMeta: { ...TYPE.caption, marginTop: 1, color: theme.mutedForeground },\n countBadge: {\n position: 'absolute',\n top: SPACE.sm,\n right: SPACE.sm,\n minWidth: 24,\n height: 24,\n paddingHorizontal: 7,\n borderRadius: 12,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(10,10,10,0.55)',\n },\n countBadgeText: { fontSize: 12, fontWeight: '600', color: '#fafafa' },\n playBadge: {\n position: 'absolute',\n left: SPACE.sm,\n bottom: SPACE.sm,\n width: 28,\n height: 28,\n borderRadius: 14,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(10,10,10,0.55)',\n },\n designPage: {\n overflow: 'hidden',\n borderRadius: 3,\n shadowColor: '#000',\n shadowOpacity: theme.isDark ? 0 : 0.1,\n shadowRadius: 6,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n // The sketch sits on the design's own (usually white) page, so its ink is fixed, not themed.\n sketch: { ...StyleSheet.absoluteFillObject, padding: '10%', gap: 6 },\n sketchBar: { borderRadius: 3, backgroundColor: '#ececef' },\n sketchBlock: { flex: 1, width: '100%', marginTop: 4, alignItems: 'center', justifyContent: 'center' },\n blankPage: { fontSize: 10, fontWeight: '600', color: '#a1a1aa', textAlign: 'center' },\n empty: {\n alignItems: 'center',\n paddingVertical: SPACE.xxl,\n paddingHorizontal: SPACE.xl,\n borderRadius: RADIUS.xl,\n backgroundColor: theme.card,\n },\n emptyIcon: {\n width: 52,\n height: 52,\n borderRadius: 26,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.background,\n marginBottom: SPACE.md,\n },\n emptyTitle: { ...TYPE.title, color: theme.foreground, textAlign: 'center' },\n emptyDetail: {\n ...TYPE.body,\n fontSize: 14,\n marginTop: SPACE.xs,\n color: theme.mutedForeground,\n textAlign: 'center',\n maxWidth: 300,\n },\n emptyCta: {\n marginTop: SPACE.lg + 2,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm,\n minHeight: 44,\n paddingHorizontal: SPACE.xl - 4,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.primary,\n },\n emptyCtaLabel: { ...TYPE.label, fontSize: 15, color: theme.primaryForeground },\n }),\n);\n"],"names":["title"],"mappings":"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"}
|
|
@@ -1,4 +1,26 @@
|
|
|
1
|
-
import {jsxs,jsx}from'react/jsx-runtime';import {
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {useMemo}from'react';import {View,Text,ScrollView,Image,StyleSheet}from'react-native';import {Feather}from'@expo/vector-icons';import {useCanvasTheme,themedStyles}from'./canvasTheme.js';import {Pressable,pressedStyle,RADIUS,SPACE,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
|
+
const HSCROLL = {
|
|
21
|
+
flexGrow: 0
|
|
22
|
+
};
|
|
23
|
+
function CanvasChatResultCard({
|
|
2
24
|
title,
|
|
3
25
|
subtitle,
|
|
4
26
|
items,
|
|
@@ -6,14 +28,18 @@ import {jsxs,jsx}from'react/jsx-runtime';import {StyleSheet,View,Text,ScrollView
|
|
|
6
28
|
onAction,
|
|
7
29
|
onItemClick
|
|
8
30
|
}) {
|
|
31
|
+
const theme = useCanvasTheme();
|
|
32
|
+
const styles = useMemo(() => makeStyles(theme), [theme]);
|
|
9
33
|
if (!items.length) return null;
|
|
10
34
|
const preview = items.slice(0, 6);
|
|
11
35
|
const remaining = items.length - preview.length;
|
|
12
36
|
return /* @__PURE__ */ jsxs(View, { style: styles.wrap, children: [
|
|
13
37
|
/* @__PURE__ */ jsx(Text, { style: styles.title, numberOfLines: 1, children: title }),
|
|
14
38
|
subtitle ? /* @__PURE__ */ jsx(Text, { style: styles.sub, numberOfLines: 1, children: subtitle }) : null,
|
|
15
|
-
/* @__PURE__ */ jsxs(ScrollView, { horizontal: true, nestedScrollEnabled: true, keyboardShouldPersistTaps: "handled", showsHorizontalScrollIndicator: false, contentContainerStyle: styles.row, children: [
|
|
16
|
-
preview.map((item) => /* @__PURE__ */ jsxs(Pressable, { onPress: () => onItemClick(item), style:
|
|
39
|
+
/* @__PURE__ */ jsxs(ScrollView, { style: HSCROLL, horizontal: true, nestedScrollEnabled: true, keyboardShouldPersistTaps: "handled", showsHorizontalScrollIndicator: false, contentContainerStyle: styles.row, children: [
|
|
40
|
+
preview.map((item) => /* @__PURE__ */ jsxs(Pressable, { onPress: () => onItemClick(item), style: ({
|
|
41
|
+
pressed
|
|
42
|
+
}) => [styles.tile, pressedStyle(pressed)], children: [
|
|
17
43
|
/* @__PURE__ */ jsx(View, { style: styles.thumbClip, children: item.imageUrl ? /* @__PURE__ */ jsx(Image, { source: {
|
|
18
44
|
uri: item.imageUrl
|
|
19
45
|
}, style: styles.thumb }) : /* @__PURE__ */ jsx(View, { style: [styles.thumb, styles.thumbEmpty] }) }),
|
|
@@ -26,88 +52,81 @@ import {jsxs,jsx}from'react/jsx-runtime';import {StyleSheet,View,Text,ScrollView
|
|
|
26
52
|
" more"
|
|
27
53
|
] }) }) : null
|
|
28
54
|
] }),
|
|
29
|
-
actionLabel && onAction ? /* @__PURE__ */ jsxs(Pressable, { onPress: onAction, style:
|
|
30
|
-
|
|
55
|
+
actionLabel && onAction ? /* @__PURE__ */ jsxs(Pressable, { onPress: onAction, style: ({
|
|
56
|
+
pressed
|
|
57
|
+
}) => [styles.action, pressedStyle(pressed)], accessibilityRole: "button", children: [
|
|
58
|
+
/* @__PURE__ */ jsx(Feather, { name: "external-link", size: 14, color: theme.foreground }),
|
|
31
59
|
/* @__PURE__ */ jsx(Text, { style: styles.actionLabel, children: actionLabel })
|
|
32
60
|
] }) : null
|
|
33
61
|
] });
|
|
34
62
|
}
|
|
35
|
-
const
|
|
63
|
+
const makeStyles = themedStyles((theme) => StyleSheet.create({
|
|
36
64
|
wrap: {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
padding: 10,
|
|
42
|
-
marginBottom: 8
|
|
43
|
-
},
|
|
44
|
-
title: {
|
|
45
|
-
fontSize: 12,
|
|
46
|
-
fontWeight: "700",
|
|
47
|
-
color: "#0f172a"
|
|
48
|
-
},
|
|
49
|
-
sub: {
|
|
50
|
-
fontSize: 11,
|
|
51
|
-
color: "#64748b",
|
|
52
|
-
marginTop: 2,
|
|
53
|
-
marginBottom: 8
|
|
65
|
+
backgroundColor: theme.card,
|
|
66
|
+
borderRadius: RADIUS.lg,
|
|
67
|
+
padding: SPACE.md,
|
|
68
|
+
marginBottom: SPACE.sm
|
|
54
69
|
},
|
|
70
|
+
title: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
71
|
+
fontSize: 14,
|
|
72
|
+
color: theme.foreground
|
|
73
|
+
}),
|
|
74
|
+
sub: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
75
|
+
color: theme.mutedForeground,
|
|
76
|
+
marginTop: 2
|
|
77
|
+
}),
|
|
55
78
|
row: {
|
|
56
|
-
gap:
|
|
57
|
-
|
|
79
|
+
gap: SPACE.sm,
|
|
80
|
+
paddingTop: SPACE.md - 2,
|
|
81
|
+
paddingBottom: SPACE.xs
|
|
58
82
|
},
|
|
59
83
|
tile: {
|
|
60
|
-
width:
|
|
84
|
+
width: 104
|
|
61
85
|
},
|
|
62
86
|
thumbClip: {
|
|
63
|
-
borderRadius:
|
|
87
|
+
borderRadius: RADIUS.md,
|
|
64
88
|
overflow: "hidden",
|
|
65
|
-
backgroundColor:
|
|
89
|
+
backgroundColor: theme.tint(0.06)
|
|
66
90
|
},
|
|
67
91
|
thumb: {
|
|
68
|
-
width:
|
|
69
|
-
height:
|
|
92
|
+
width: 104,
|
|
93
|
+
height: 78
|
|
70
94
|
},
|
|
71
95
|
thumbEmpty: {
|
|
72
|
-
backgroundColor:
|
|
96
|
+
backgroundColor: theme.tint(0.08)
|
|
73
97
|
},
|
|
74
|
-
thumbTitle: {
|
|
75
|
-
marginTop:
|
|
76
|
-
fontSize: 11,
|
|
98
|
+
thumbTitle: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
99
|
+
marginTop: SPACE.sm - 2,
|
|
77
100
|
fontWeight: "600",
|
|
78
|
-
color:
|
|
79
|
-
},
|
|
101
|
+
color: theme.foreground
|
|
102
|
+
}),
|
|
80
103
|
thumbMeta: {
|
|
81
|
-
fontSize:
|
|
82
|
-
|
|
104
|
+
fontSize: 11,
|
|
105
|
+
lineHeight: 14,
|
|
106
|
+
color: theme.mutedForeground
|
|
83
107
|
},
|
|
84
108
|
more: {
|
|
85
|
-
width:
|
|
86
|
-
height:
|
|
87
|
-
borderRadius:
|
|
88
|
-
|
|
89
|
-
borderStyle: "dashed",
|
|
90
|
-
borderColor: "#e2e8f0",
|
|
109
|
+
width: 104,
|
|
110
|
+
height: 78,
|
|
111
|
+
borderRadius: RADIUS.md,
|
|
112
|
+
backgroundColor: theme.tint(0.06),
|
|
91
113
|
alignItems: "center",
|
|
92
114
|
justifyContent: "center"
|
|
93
115
|
},
|
|
94
|
-
moreLabel: {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
},
|
|
116
|
+
moreLabel: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
117
|
+
color: theme.mutedForeground
|
|
118
|
+
}),
|
|
98
119
|
action: {
|
|
99
|
-
marginTop:
|
|
120
|
+
marginTop: SPACE.md - 2,
|
|
100
121
|
flexDirection: "row",
|
|
101
122
|
alignItems: "center",
|
|
102
123
|
justifyContent: "center",
|
|
103
|
-
gap:
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
124
|
+
gap: SPACE.sm - 2,
|
|
125
|
+
minHeight: 40,
|
|
126
|
+
backgroundColor: theme.isDark ? theme.secondary : theme.surface,
|
|
127
|
+
borderRadius: RADIUS.pill
|
|
107
128
|
},
|
|
108
|
-
actionLabel: {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
});export{CanvasChatResultCard};//# sourceMappingURL=CanvasChatResultCard.js.map
|
|
129
|
+
actionLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
130
|
+
color: theme.foreground
|
|
131
|
+
})
|
|
132
|
+
}));export{CanvasChatResultCard};//# sourceMappingURL=CanvasChatResultCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanvasChatResultCard.js","sources":["../../../src/features/canvas/CanvasChatResultCard.tsx"],"sourcesContent":["import React from 'react';\nimport { Image,
|
|
1
|
+
{"version":3,"file":"CanvasChatResultCard.js","sources":["../../../src/features/canvas/CanvasChatResultCard.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Image, ScrollView, StyleSheet, Text, View } from 'react-native';\nimport { Feather } from '@expo/vector-icons';\nimport { useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport { Pressable, RADIUS, SPACE, TYPE, pressedStyle } from './canvasUi';\n\n/** RN gives a horizontal ScrollView flexGrow 1: on a fixed-height screen a chip row swells into empty space. */\nconst HSCROLL = { flexGrow: 0 } as const;\n\nexport interface CanvasChatPreviewItem {\n id: string;\n title: string;\n imageUrl?: string;\n meta?: string;\n}\n\n/** Native twin of surface-kit ChatResultCard — horizontal thumbs to open canvas items. */\nexport function CanvasChatResultCard({\n title,\n subtitle,\n items,\n actionLabel,\n onAction,\n onItemClick,\n}: {\n title: string;\n subtitle?: string;\n items: CanvasChatPreviewItem[];\n actionLabel?: string;\n onAction?: () => void;\n onItemClick: (item: CanvasChatPreviewItem) => void;\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n if (!items.length) return null;\n const preview = items.slice(0, 6);\n const remaining = items.length - preview.length;\n\n return (\n <View style={styles.wrap}>\n <Text style={styles.title} numberOfLines={1}>\n {title}\n </Text>\n {subtitle ? (\n <Text style={styles.sub} numberOfLines={1}>\n {subtitle}\n </Text>\n ) : null}\n <ScrollView\n style={HSCROLL}\n horizontal\n nestedScrollEnabled\n keyboardShouldPersistTaps=\"handled\"\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.row}\n >\n {preview.map((item) => (\n <Pressable\n key={item.id}\n onPress={() => onItemClick(item)}\n style={({ pressed }) => [styles.tile, pressedStyle(pressed)]}\n >\n <View style={styles.thumbClip}>\n {item.imageUrl ? (\n <Image source={{ uri: item.imageUrl }} style={styles.thumb} />\n ) : (\n <View style={[styles.thumb, styles.thumbEmpty]} />\n )}\n </View>\n <Text style={styles.thumbTitle} numberOfLines={2}>\n {item.title}\n </Text>\n {item.meta ? (\n <Text style={styles.thumbMeta} numberOfLines={1}>\n {item.meta}\n </Text>\n ) : null}\n </Pressable>\n ))}\n {remaining > 0 ? (\n <View style={styles.more}>\n <Text style={styles.moreLabel}>+{remaining} more</Text>\n </View>\n ) : null}\n </ScrollView>\n {actionLabel && onAction ? (\n <Pressable\n onPress={onAction}\n style={({ pressed }) => [styles.action, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Feather name=\"external-link\" size={14} color={theme.foreground} />\n <Text style={styles.actionLabel}>{actionLabel}</Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n wrap: {\n backgroundColor: theme.card,\n borderRadius: RADIUS.lg,\n padding: SPACE.md,\n marginBottom: SPACE.sm,\n },\n title: { ...TYPE.label, fontSize: 14, color: theme.foreground },\n sub: { ...TYPE.caption, color: theme.mutedForeground, marginTop: 2 },\n row: { gap: SPACE.sm, paddingTop: SPACE.md - 2, paddingBottom: SPACE.xs },\n tile: { width: 104 },\n thumbClip: { borderRadius: RADIUS.md, overflow: 'hidden', backgroundColor: theme.tint(0.06) },\n thumb: { width: 104, height: 78 },\n thumbEmpty: { backgroundColor: theme.tint(0.08) },\n thumbTitle: { ...TYPE.caption, marginTop: SPACE.sm - 2, fontWeight: '600', color: theme.foreground },\n thumbMeta: { fontSize: 11, lineHeight: 14, color: theme.mutedForeground },\n more: {\n width: 104,\n height: 78,\n borderRadius: RADIUS.md,\n backgroundColor: theme.tint(0.06),\n alignItems: 'center',\n justifyContent: 'center',\n },\n moreLabel: { ...TYPE.caption, color: theme.mutedForeground },\n action: {\n marginTop: SPACE.md - 2,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: SPACE.sm - 2,\n minHeight: 40,\n backgroundColor: theme.isDark ? theme.secondary : theme.surface,\n borderRadius: RADIUS.pill,\n },\n actionLabel: { ...TYPE.label, color: theme.foreground },\n }),\n);\n"],"names":[],"mappings":"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"}
|