v0.0.49
6 July 2026
Item shard path revised to two-level, FieldTypeCode language option, Dir symlink fixes, Hx::trigger JSON encoding, and resize condition fix.
Added
FieldTypeCodelanguageoption : the highlighted language is now configurable via the field'slanguageoption (defaults to'php'). Added acreate()factory method to read this from field options.
Changed
- Item shard path revised to two levels:
_{field}/{xx}/{uuid}/(first two hex chars ofmd5(uuid)). The previous v0.0.46 structure was two-level sharding off a four-char prefix; this normalizes to the same single two-char shard level used elsewhere (e.g. file variant storage). Hx::trigger(): encodes events as a JSON object ({"event": true, ...}) instead of a comma-separated string. The JSON form is required for HTMX 4 to recognize multiple events correctly.Dir::isEmpty(): rewritten to useopendir/readdirfor a short-circuit early return; no longer scans the full directory just to check if it's empty.Dir::deleteRecursive(): symlinks are now unlinked (not followed) during recursive deletion.Dir::copy(): symlinks are now recreated as symlinks rather than being dereferenced and copied as regular files.PageFilesimage resize condition fixed: operator precedence bug where$w && $size[0] > $w || $h && $size[1] > $hwas evaluated incorrectly; now($w && $size[0] > $w) || ($h && $size[1] > $h).App::render():shutdown()now called after rendering (not before), so Clockwork and other shutdown listeners see the complete render output.