# Changelog ## [1.11.0](https://github.com/getformwork/formwork/releases/tag/1.11.0) (2020-12-16) **Enhancements** - **Support PHP >= 7.3.5** - **Display Markdown only on active CodeMirror lines** - **Merge pull request #56 from getformwork/feature/dark-color-scheme** - **Merge pull request #58 from getformwork/feature/json-parser** - **Merge pull request #59 from getformwork/feature/updater-semver-parsing** - **Merge pull request #60 from getformwork/feature/path-class** - **Merge pull request #61 from getformwork/feature/stricter-date-parsing** - **Merge pull request #62 from getformwork/feature/improved-date-formats** - **Merge pull request #63 from getformwork/feature/improved-cache-serialization** - **Merge pull request #65 from getformwork/feature/duration-input** - Move from deprecated node-sass to Dart Sass - Replace most of `LogicException` with more appropriate exceptions - Add `Arr::random()` and `Arr::shuffle()` - Add `Collection::random()` - Add `PageCollection::shuffle()` - Add OPcache status to Options > Info - Ad Max Path Length to Options > Info - Add Formwork icon in SVG format - Use a default avatar image in SVG format - Use system monospace font stack - Update fonts - Move fonts.scss and icons.scss to components folder - Update `MimeType::MIME_TYPES` - Recognize archive file type and display appropriate icon - Add new options to tooltip component - Update .eslintrc - Build minified CSS only - Add dark color scheme CSS - Add color scheme support to panel - Add color scheme options to system and user schemes - Add support for system preferred color scheme - Avoid wrapping strings more than once with `Str::wrap()` - Add `Str::contains()`, `Str::before()`, `Str::beforeLast()`, `Str::after()` and `Str::afterLast()` - Use new utilities from `Str` class - Rewrite `Uri::make()` and `Uri::normalize()` moving slashes normalization in the first method - Rewrite `FileSystem::name()` and `FileSystem::extension()` using `pathinfo()` - Simplify `YAML` class - Extract `FileSystem::getLastStreamErrorMessage()` from `FileSystem::fetch()` - Add stream error details to `FileSystem::write()` - Rename `FileSystem::assert()` to `FileSystem::assertExists()` - Add `$assertExists` argument to `FileSystem::isReadable()`, `FileSystem::isWritable()`, `FileSystem::isFile()`, `FileSystem::isDirectory()` and `FileSystem::isEmptyDirectory()` - Use `$assertExists` argument to remove `FileSystem::exists()` checks - Use `substr_compare()` to make `Str::startsWith()` and `Str::endsWith()` more efficient - Add `Str::append()` and `Str::prepend()` - Return `User::lastAccess()` as integer - Normalize path in `Site::__construct()` - Avoid treating page relative path as URI - Remove unneeded slashes normalization since `Uri::normalize()` does that - Throw an exception when an URI is invalid - Handle default ports scheme-dependently in `Uri` class - Handle scheme and host always as lowercase in `Uri` class - Avoid concatenating twice in `Uri::make()` - Add `AbstractEncoder` class - Make `YAML` class extend `AbstractEncoder` - Use `YAML::encodeToFile()` - Add `JSON` class - Replace `json_encode()` and `json_decode()` with methods from `JSON` - Make `Formwork` and `Admin` classes final - Add `SemVer` class - Add supplementary version checks to `Updater::checkUpdates()` - Add `Path` class - Use methods from `Path` class in `FileSystem` and `Uri` - Remove superfluous argument - Simplify conditional returns - Simplify and combine conditionals when possible - Simplify `Arr::appendMissing()` - Simplify `Cookie::send()` - Remove superfluous checks before foreach - Use `random_bytes()` in `FileSystem::randomName()` - Add `$prefix` argument to `FileSystem::randomName()` - Make `FileSystem::createFile()` check file existence atomically and avoid call to `FileSystem::write()` - Make `FileSystem::createDirectory()` error handling similar to `FileSystem::createFile()` - Add `FileSystem::createTemporaryFile()` - Use `FileSystem::createTemporaryFile()` in `FileSystem::write()` - Explicitly handle the mode of created files and directories - Add File Creation Mask to Options > Info - Use SHA-256 hashes instead of SHA-1 - Avoid retaining in memory unmodified copies of images - Update default avatar - Move `