Started palette editor.
Test and Build / test-and-build (push) Failing after 1m47s

Cleaned up tests and lint errors.
Upgraded npm packages.
This commit is contained in:
Jay
2026-03-19 18:54:44 -04:00
parent 6be2d9e41a
commit 9fec89949b
36 changed files with 1484 additions and 1229 deletions
+118
View File
@@ -0,0 +1,118 @@
import type { Dispatch } from "react";
export interface PaletteColor {
id: string;
name: string;
hex: string;
}
export interface PaletteCard {
id: string;
name: string;
colors: PaletteColor[];
selectedColorId: string | null;
inToolkitMode: boolean;
}
export interface PaletteCardState {
present: PaletteCard;
history: PaletteCard[];
future: PaletteCard[];
}
export type PaletteCardAction =
| { type: "SET_CARD_NAME"; payload: string }
| { type: "SET_SELECTED_COLOR"; payload: string | null }
| { type: "ADD_COLOR" }
| { type: "DELETE_SELECTED_COLOR" }
| { type: "DUPLICATE_SELECTED_COLOR" }
| { type: "REORDER_COLORS"; payload: PaletteColor[] }
| { type: "TOGGLE_TOOLKIT_MODE" }
| { type: "UNDO" }
| { type: "REDO" };
export function paletteCardReducer(
state: PaletteCardState,
action: PaletteCardAction,
): PaletteCardState {
const pushToHistory = (state: PaletteCardState, newPresent: PaletteCard) => {
return {
...state,
history: [state.present, ...state.history],
future: [],
present: newPresent,
};
};
switch (action.type) {
case "SET_CARD_NAME":
state = pushToHistory(state, { ...state.present, name: action.payload });
return state;
case "SET_SELECTED_COLOR":
// TODO: Implement
return state;
case "ADD_COLOR":
// TODO: Implement
return state;
case "DELETE_SELECTED_COLOR":
// TODO: Implement
return state;
case "DUPLICATE_SELECTED_COLOR":
// TODO: Implement
return state;
case "REORDER_COLORS":
// TODO: Implement
return state;
case "TOGGLE_TOOLKIT_MODE":
// TODO: Implement
return state;
case "UNDO":
// TODO: Implement
return state;
case "REDO":
// TODO: Implement
return state;
default:
return state;
}
}
export interface PaletteCardActions {
setCardName: (name: string) => void;
setSelectedColor: (id: string | null) => void;
addColor: () => void;
deleteSelectedColor: () => void;
duplicateSelectedColor: () => void;
reorderColors: (colors: PaletteColor[]) => void;
toggleToolkitMode: () => void;
undo: () => void;
redo: () => void;
}
export function createPaletteCardActions(
dispatch: Dispatch<PaletteCardAction>,
): PaletteCardActions {
return {
setCardName: (name) => dispatch({ type: "SET_CARD_NAME", payload: name }),
setSelectedColor: (id) =>
dispatch({ type: "SET_SELECTED_COLOR", payload: id }),
addColor: () => dispatch({ type: "ADD_COLOR" }),
deleteSelectedColor: () => dispatch({ type: "DELETE_SELECTED_COLOR" }),
duplicateSelectedColor: () =>
dispatch({ type: "DUPLICATE_SELECTED_COLOR" }),
reorderColors: (colors) =>
dispatch({ type: "REORDER_COLORS", payload: colors }),
toggleToolkitMode: () => dispatch({ type: "TOGGLE_TOOLKIT_MODE" }),
undo: () => dispatch({ type: "UNDO" }),
redo: () => dispatch({ type: "REDO" }),
};
}