Skip to content

Commit 88bf6fd

Browse files
Yashaswi AgrawalYashaswi Agrawal
authored andcommitted
hackathon changes
1 parent 25363e2 commit 88bf6fd

23 files changed

Lines changed: 6116 additions & 2619 deletions

examples/react-example/src/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ type StoredTemplateRecord = {
1818
isPinned: boolean
1919
name: string
2020
transformations: Omit<Transformation, "id">[]
21+
kind?: "template" | "overlay"
2122
createdBy: { userId: string; name: string; email: string }
2223
updatedBy: { userId: string; name: string; email: string }
2324
createdAt: number
@@ -70,6 +71,7 @@ function createLocalTemplateStorage(): TemplateStorageProvider {
7071
isPinned: input.isPinned ?? existing?.isPinned ?? false,
7172
name: input.name,
7273
transformations: input.transformations,
74+
kind: input.kind ?? existing?.kind ?? "template",
7375
createdBy: input.createdBy ??
7476
existing?.createdBy ?? {
7577
userId: session.userId,

packages/imagekit-editor-dev/src/ImageKitEditor.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ function ImageKitEditorImpl<M extends RequiredMetadata>(
140140
transformations: state.transformations.map(
141141
({ id: _id, ...rest }) => rest,
142142
),
143+
kind: state._internalState.overlayMode ? "overlay" : "template",
143144
...(state.templateIsPrivate !== null
144145
? { isPrivate: state.templateIsPrivate }
145146
: {}),

packages/imagekit-editor-dev/src/components/common/GradientPicker.tsx

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,27 @@ const GradientPickerField = ({
5858
setValue,
5959
value,
6060
errors,
61+
renderSubfieldVariableToggle,
62+
renderSubfieldVariableNameInput,
6163
}: {
6264
fieldName: string
6365
setValue: (name: string, value: GradientPickerState | string) => void
6466
value?: GradientPickerState | null
6567
errors?: FieldErrors<Record<string, unknown>>
68+
/**
69+
* Optional render-prop for the small "is variable" toggle shown next to the
70+
* `from` / `to` color label.
71+
*/
72+
renderSubfieldVariableToggle?: (
73+
subfield: "from" | "to",
74+
) => React.ReactNode
75+
/**
76+
* Optional render-prop for the Variable Name input rendered below the
77+
* `from` / `to` color input when the corresponding toggle is on.
78+
*/
79+
renderSubfieldVariableNameInput?: (
80+
subfield: "from" | "to",
81+
) => React.ReactNode
6682
}) => {
6783
function getLinearGradientString(value: GradientPickerState): string {
6884
let direction = ""
@@ -222,9 +238,12 @@ const GradientPickerField = ({
222238
</Popover>
223239

224240
<Box>
225-
<FormLabel htmlFor="from_color" fontSize="sm">
226-
From Color
227-
</FormLabel>
241+
<Flex justify="space-between" align="center" mb={2}>
242+
<FormLabel htmlFor="from_color" fontSize="sm" mb={0}>
243+
From Color
244+
</FormLabel>
245+
{renderSubfieldVariableToggle?.("from")}
246+
</Flex>
228247
<Input
229248
size="md"
230249
value={localValue.from}
@@ -244,12 +263,16 @@ const GradientPickerField = ({
244263
<Text fontSize="xs" color={errorRed}>
245264
{errors?.[fieldName]?.from?.message}
246265
</Text>
266+
{renderSubfieldVariableNameInput?.("from")}
247267
</Box>
248268

249269
<Box>
250-
<FormLabel htmlFor="to_color" fontSize="sm">
251-
To Color
252-
</FormLabel>
270+
<Flex justify="space-between" align="center" mb={2}>
271+
<FormLabel htmlFor="to_color" fontSize="sm" mb={0}>
272+
To Color
273+
</FormLabel>
274+
{renderSubfieldVariableToggle?.("to")}
275+
</Flex>
253276
<Input
254277
size="md"
255278
value={localValue.to}
@@ -269,6 +292,7 @@ const GradientPickerField = ({
269292
<Text fontSize="xs" color={errorRed}>
270293
{errors?.[fieldName]?.to?.message}
271294
</Text>
295+
{renderSubfieldVariableNameInput?.("to")}
272296
</Box>
273297

274298
<Box>

packages/imagekit-editor-dev/src/components/editor/ActionBar.tsx

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ export const ActionBar: FC<ActionBarProps> = ({
3939
originalImageList,
4040
showOriginal,
4141
setShowOriginal,
42+
_internalState,
4243
} = useEditorStore()
44+
const overlayMode = _internalState.overlayMode
4345

4446
const imageDimensions = useMemo(() => {
4547
const idx = imageList.findIndex((img) => img === currentImage)
@@ -61,18 +63,20 @@ export const ActionBar: FC<ActionBarProps> = ({
6163
alignItems="center"
6264
>
6365
<HStack spacing={2} flex="1" minW={0} mr={8}>
64-
<Button
65-
variant="ghost"
66-
size="md"
67-
fontWeight="normal"
68-
leftIcon={<Icon boxSize={4} as={PiImageSquare} />}
69-
_hover={{ bg: "gray.100" }}
70-
onClick={() => setShowOriginal(!showOriginal)}
71-
>
72-
{showOriginal ? "Show Transformed" : "Show Original"}
73-
</Button>
66+
{!overlayMode && (
67+
<Button
68+
variant="ghost"
69+
size="md"
70+
fontWeight="normal"
71+
leftIcon={<Icon boxSize={4} as={PiImageSquare} />}
72+
_hover={{ bg: "gray.100" }}
73+
onClick={() => setShowOriginal(!showOriginal)}
74+
>
75+
{showOriginal ? "Show Transformed" : "Show Original"}
76+
</Button>
77+
)}
7478

75-
{viewMode === "list" && imageDimensions && (
79+
{!overlayMode && viewMode === "list" && imageDimensions && (
7680
<>
7781
<Divider
7882
orientation="vertical"
@@ -157,6 +161,8 @@ export const ActionBar: FC<ActionBarProps> = ({
157161
/>
158162
}
159163
onClick={() => setViewMode(viewMode === "grid" ? "list" : "grid")}
164+
isDisabled={overlayMode}
165+
visibility={overlayMode ? "hidden" : "visible"}
160166
/>
161167
</Tooltip>
162168
</HStack>

packages/imagekit-editor-dev/src/components/editor/ListView.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export const ListView: FC<ListViewProps> = ({ onAddImage }) => {
1818
setImageDimensions,
1919
_internalState,
2020
} = useEditorStore()
21+
const overlayMode = _internalState.overlayMode
2122

2223
return (
2324
<>
@@ -68,12 +69,14 @@ export const ListView: FC<ListViewProps> = ({ onAddImage }) => {
6869
/>
6970
</Flex>
7071
</Flex>
71-
<Toolbar
72-
onAddImage={onAddImage}
73-
onSelectImage={(imageSrc: string) => {
74-
setCurrentImage(imageSrc)
75-
}}
76-
/>
72+
{!overlayMode && (
73+
<Toolbar
74+
onAddImage={onAddImage}
75+
onSelectImage={(imageSrc: string) => {
76+
setCurrentImage(imageSrc)
77+
}}
78+
/>
79+
)}
7780
</>
7881
)
7982
}

packages/imagekit-editor-dev/src/components/editor/layout.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Box, Flex } from "@chakra-ui/react"
22
import { useEffect, useState } from "react"
33
import { useAutoSaveTemplate } from "../../hooks/useAutoSaveTemplate"
44
import { useSaveTemplate } from "../../hooks/useSaveTemplate"
5+
import { useEditorStore } from "../../store"
56
import { Header, type HeaderProps } from "../header"
67
import { Sidebar } from "../sidebar"
78
import { TemplatesLibraryView } from "../templates/TemplatesLibraryView"
@@ -19,6 +20,8 @@ export function EditorLayout({ onAddImage, onClose, exportOptions }: Props) {
1920
const [viewMode, setViewMode] = useState<"list" | "grid">("list")
2021
const [gridImageSize, setGridImageSize] = useState<number>(300)
2122
const [isTemplatesOpen, setIsTemplatesOpen] = useState(false)
23+
const overlayMode = useEditorStore((s) => s._internalState.overlayMode)
24+
const effectiveViewMode: "list" | "grid" = overlayMode ? "list" : viewMode
2225

2326
// Close templates modal on Escape while it's open
2427
useEffect(() => {
@@ -56,13 +59,13 @@ export function EditorLayout({ onAddImage, onClose, exportOptions }: Props) {
5659
position="relative"
5760
>
5861
<ActionBar
59-
viewMode={viewMode}
62+
viewMode={effectiveViewMode}
6063
setViewMode={setViewMode}
6164
gridImageSize={gridImageSize}
6265
setGridImageSize={setGridImageSize}
6366
/>
64-
{viewMode === "list" && <ListView onAddImage={onAddImage} />}
65-
{viewMode === "grid" && (
67+
{effectiveViewMode === "list" && <ListView onAddImage={onAddImage} />}
68+
{effectiveViewMode === "grid" && (
6669
<GridView imageSize={gridImageSize} onAddImage={onAddImage} />
6770
)}
6871
</Flex>

0 commit comments

Comments
 (0)