diff --git a/packages/@mantine/core/src/core/utils/is-number-like/is-number-like.test.ts b/packages/@mantine/core/src/core/utils/is-number-like/is-number-like.test.ts index 5d267cda6af..275877557af 100644 --- a/packages/@mantine/core/src/core/utils/is-number-like/is-number-like.test.ts +++ b/packages/@mantine/core/src/core/utils/is-number-like/is-number-like.test.ts @@ -36,4 +36,11 @@ describe('@mantine/core/isNumberLike', () => { expect(isNumberLike('a')).toBe(false); expect(isNumberLike('a1')).toBe(false); }); + + it('returns false for custom sizes', () => { + expect(isNumberLike('2xl')).toBe(false); + expect(isNumberLike('3xl')).toBe(false); + expect(isNumberLike('2xs')).toBe(false); + expect(isNumberLike('3xs')).toBe(false); + }); }); diff --git a/packages/@mantine/core/src/core/utils/is-number-like/is-number-like.ts b/packages/@mantine/core/src/core/utils/is-number-like/is-number-like.ts index ca2fe578d89..7b105ab81d8 100644 --- a/packages/@mantine/core/src/core/utils/is-number-like/is-number-like.ts +++ b/packages/@mantine/core/src/core/utils/is-number-like/is-number-like.ts @@ -12,7 +12,10 @@ export function isNumberLike(value: unknown) { return true; } - return /[0-9]/.test(value.trim().replace('-', '')[0]); + const cssUnitsRegex = + /^[+-]?[0-9]+(\.[0-9]+)?(px|em|rem|ex|ch|lh|rlh|vw|vh|vmin|vmax|vb|vi|svw|svh|lvw|lvh|dvw|dvh|cm|mm|in|pt|pc|q|%)?$/; + const values = value.trim().split(/\s+/); + return values.every((val) => cssUnitsRegex.test(val)); } return false;