diff --git a/packages/maverick/src/element/attrs.ts b/packages/maverick/src/element/attrs.ts index 9cf7fa32..5b10780e 100644 --- a/packages/maverick/src/element/attrs.ts +++ b/packages/maverick/src/element/attrs.ts @@ -27,14 +27,18 @@ export interface Attribute extends SignalOptions { } export const STRING: AttributeConverter = (v) => (v === null ? '' : v + ''); +export const NULLABLE_STRING: AttributeConverter = (v) => + v === null ? null : v + ''; export const NUMBER: AttributeConverter = (v) => (v === null ? 0 : Number(v)); +export const NULLABLE_NUMBER: AttributeConverter = (v) => + v === null ? null : Number(v); export const BOOLEAN: AttributeConverter = (v) => v !== null; export const FUNCTION: AttributeConverter<(() => void) | null> = () => null; export const ARRAY: AttributeConverter = (v) => (v === null ? [] : JSON.parse(v)); export const OBJECT: AttributeConverter = (v) => (v === null ? {} : JSON.parse(v)); export function inferAttributeConverter(value: unknown): AttributeConverter { - if (value === null) return STRING; + if (value === null) return NULLABLE_STRING; switch (typeof value) { case 'undefined': return STRING;