### PHP Version
8.4.19
### Version
2.1.0
### Bug Description
When `setContent()` receives a string that contains only digits (e.g. `"42"`), `getContentType()` misidentifies it as JSON because `json_decode("42")` is valid JSON. This causes the document to be set to an integer instead of being parsed as HTML text content.
The issue is in `getContentType()` (Editor.php:89–101): it checks if `json_decode` succeeds, but bare numbers, booleans, and `null` are all valid JSON scalars — so any numeric string passes the JSON check.
### Steps to Reproduce
```php
$editor = new \Tiptap\Editor();
$editor->setContent("42");
$doc = $editor->getDocument();
// Expected: parsed HTML document with text "42"
// Actual: int(42)
Expected Behavior
A plain numeric string like "42" should be treated as HTML content and parsed into a proper tiptap document node.
Actual Behavior
The string is identified as JSON, json_decode("42", true) returns int(42), and the document becomes an integer.
Suggested Fix
In getContentType(), after json_decode succeeds, verify the result is actually a valid tiptap document structure (an array with a type key):
$decoded = json_decode($value, true, 512, JSON_THROW_ON_ERROR);
if (is_array($decoded) && isset($decoded['type'])) {
return 'JSON';
}
return 'HTML';
Expected Behavior (Detailed)
A plain numeric string like "42" passed to setContent() should be treated as HTML content, resulting in a valid tiptap document structure:
$editor = new \Tiptap\Editor();
$editor->setContent("42");
$doc = $editor->getDocument();
// Expected:
// [
// "type" => "doc",
// "content" => [
// [
// "type" => "paragraph",
// "content" => [
// ["type" => "text", "text" => "42"]
// ]
// ]
// ]
// ]
Additional Context (Optional)
Filament v4 usage.
Dependency Updates
Expected Behavior
A plain numeric string like
"42"should be treated as HTML content and parsed into a proper tiptap document node.Actual Behavior
The string is identified as JSON,
json_decode("42", true)returnsint(42), and the document becomes an integer.Suggested Fix
In
getContentType(), afterjson_decodesucceeds, verify the result is actually a valid tiptap document structure (an array with atypekey):Expected Behavior (Detailed)
A plain numeric string like
"42"passed tosetContent()should be treated as HTML content, resulting in a valid tiptap document structure:Additional Context (Optional)
Filament v4 usage.
Dependency Updates