feat(hamkar-ui): add menu icon and active icon color pickers

Extend Hamkar appearance with separate default/selected icon colors and show them in the mobile preview.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-14 18:06:27 +03:30
co-authored by Cursor
parent 71e6655f90
commit 30dbb1892d
2 changed files with 83 additions and 3 deletions
+14
View File
@@ -9,6 +9,10 @@ export type HamkarBrandColors = {
secondaryColor: string
/** Registry `background_color` → CSS `--bg` (dynamicMode) */
backgroundColor: string
/** Menu / header icon stroke (brand_chrome) */
menuIconColor: string
/** Selected menu icon + label (brand_chrome) */
menuIconActiveColor: string
}
export type HamkarUiSettings = {
@@ -102,6 +106,8 @@ function normalizeBrand(raw: unknown): HamkarBrandColors {
primaryColor: asColor(brand.primaryColor),
secondaryColor: asColor(brand.secondaryColor),
backgroundColor: asColor(brand.backgroundColor),
menuIconColor: asColor(brand.menuIconColor),
menuIconActiveColor: asColor(brand.menuIconActiveColor),
}
}
@@ -115,6 +121,8 @@ export function createDefaultHamkarUiConfig(): HamkarUiConfig {
primaryColor: '',
secondaryColor: '',
backgroundColor: '',
menuIconColor: '',
menuIconActiveColor: '',
},
settings: {
pricing_box_theme: '1',
@@ -177,6 +185,10 @@ export function hamkarUiToApiPayload(config: HamkarUiConfig) {
primaryColor: emptyToNull(normalized.defaultSnapshot.brand.primaryColor),
secondaryColor: emptyToNull(normalized.defaultSnapshot.brand.secondaryColor),
backgroundColor: emptyToNull(normalized.defaultSnapshot.brand.backgroundColor),
menuIconColor: emptyToNull(normalized.defaultSnapshot.brand.menuIconColor),
menuIconActiveColor: emptyToNull(
normalized.defaultSnapshot.brand.menuIconActiveColor,
),
},
settings: { ...normalized.defaultSnapshot.settings },
}
@@ -191,6 +203,8 @@ export function hamkarUiToApiPayload(config: HamkarUiConfig) {
primaryColor: emptyToNull(normalized.brand.primaryColor),
secondaryColor: emptyToNull(normalized.brand.secondaryColor),
backgroundColor: emptyToNull(normalized.brand.backgroundColor),
menuIconColor: emptyToNull(normalized.brand.menuIconColor),
menuIconActiveColor: emptyToNull(normalized.brand.menuIconActiveColor),
},
settings: { ...normalized.settings },
...(snap ? { defaultSnapshot: snap } : {}),