diff --git a/composer.json b/composer.json
index 374499e..4141b8c 100644
--- a/composer.json
+++ b/composer.json
@@ -3,6 +3,10 @@
"description" : "A flexible and efficient library for exporting data to Excel (XLS, XLSX) with support for mappings, formatters, and handling large datasets. Working with less dependencies, avoid future breaks & conclusions.",
"type" : "library",
"license" : "MIT",
+ "replace": {
+ "zuko/excel-exporter": "self.version",
+ "zuko/laravel-excel-export": "self.version"
+ },
"autoload" : {
"psr-4" : {
"Zuko\\Flex2Cell\\" : "src/"
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000..f2b716b
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,649 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "1474d89f51518cf4e545ad0f8f41c7d6",
+ "packages": [
+ {
+ "name": "ezyang/htmlpurifier",
+ "version": "v4.17.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ezyang/htmlpurifier.git",
+ "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/bbc513d79acf6691fa9cf10f192c90dd2957f18c",
+ "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0"
+ },
+ "require-dev": {
+ "cerdic/css-tidy": "^1.7 || ^2.0",
+ "simpletest/simpletest": "dev-master"
+ },
+ "suggest": {
+ "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.",
+ "ext-bcmath": "Used for unit conversion and imagecrash protection",
+ "ext-iconv": "Converts text to and from non-UTF-8 encodings",
+ "ext-tidy": "Used for pretty-printing HTML"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "library/HTMLPurifier.composer.php"
+ ],
+ "psr-0": {
+ "HTMLPurifier": "library/"
+ },
+ "exclude-from-classmap": [
+ "/library/HTMLPurifier/Language/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Edward Z. Yang",
+ "email": "admin@htmlpurifier.org",
+ "homepage": "http://ezyang.com"
+ }
+ ],
+ "description": "Standards compliant HTML filter written in PHP",
+ "homepage": "http://htmlpurifier.org/",
+ "keywords": [
+ "html"
+ ],
+ "support": {
+ "issues": "https://github.com/ezyang/htmlpurifier/issues",
+ "source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0"
+ },
+ "time": "2023-11-17T15:01:25+00:00"
+ },
+ {
+ "name": "maennchen/zipstream-php",
+ "version": "3.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/maennchen/ZipStream-PHP.git",
+ "reference": "6187e9cc4493da94b9b63eb2315821552015fca9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/6187e9cc4493da94b9b63eb2315821552015fca9",
+ "reference": "6187e9cc4493da94b9b63eb2315821552015fca9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "ext-zlib": "*",
+ "php-64bit": "^8.1"
+ },
+ "require-dev": {
+ "ext-zip": "*",
+ "friendsofphp/php-cs-fixer": "^3.16",
+ "guzzlehttp/guzzle": "^7.5",
+ "mikey179/vfsstream": "^1.6",
+ "php-coveralls/php-coveralls": "^2.5",
+ "phpunit/phpunit": "^10.0",
+ "vimeo/psalm": "^5.0"
+ },
+ "suggest": {
+ "guzzlehttp/psr7": "^2.4",
+ "psr/http-message": "^2.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "ZipStream\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paul Duncan",
+ "email": "pabs@pablotron.org"
+ },
+ {
+ "name": "Jonatan Männchen",
+ "email": "jonatan@maennchen.ch"
+ },
+ {
+ "name": "Jesse Donat",
+ "email": "donatj@gmail.com"
+ },
+ {
+ "name": "András Kolesár",
+ "email": "kolesar@kolesar.hu"
+ }
+ ],
+ "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.",
+ "keywords": [
+ "stream",
+ "zip"
+ ],
+ "support": {
+ "issues": "https://github.com/maennchen/ZipStream-PHP/issues",
+ "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/maennchen",
+ "type": "github"
+ }
+ ],
+ "time": "2024-10-10T12:33:01+00:00"
+ },
+ {
+ "name": "markbaker/complex",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/MarkBaker/PHPComplex.git",
+ "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9",
+ "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "dev-master",
+ "phpcompatibility/php-compatibility": "^9.3",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
+ "squizlabs/php_codesniffer": "^3.7"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Complex\\": "classes/src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mark Baker",
+ "email": "mark@lange.demon.co.uk"
+ }
+ ],
+ "description": "PHP Class for working with complex numbers",
+ "homepage": "https://github.com/MarkBaker/PHPComplex",
+ "keywords": [
+ "complex",
+ "mathematics"
+ ],
+ "support": {
+ "issues": "https://github.com/MarkBaker/PHPComplex/issues",
+ "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2"
+ },
+ "time": "2022-12-06T16:21:08+00:00"
+ },
+ {
+ "name": "markbaker/matrix",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/MarkBaker/PHPMatrix.git",
+ "reference": "728434227fe21be27ff6d86621a1b13107a2562c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c",
+ "reference": "728434227fe21be27ff6d86621a1b13107a2562c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "dev-master",
+ "phpcompatibility/php-compatibility": "^9.3",
+ "phpdocumentor/phpdocumentor": "2.*",
+ "phploc/phploc": "^4.0",
+ "phpmd/phpmd": "2.*",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
+ "sebastian/phpcpd": "^4.0",
+ "squizlabs/php_codesniffer": "^3.7"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Matrix\\": "classes/src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mark Baker",
+ "email": "mark@demon-angel.eu"
+ }
+ ],
+ "description": "PHP Class for working with matrices",
+ "homepage": "https://github.com/MarkBaker/PHPMatrix",
+ "keywords": [
+ "mathematics",
+ "matrix",
+ "vector"
+ ],
+ "support": {
+ "issues": "https://github.com/MarkBaker/PHPMatrix/issues",
+ "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1"
+ },
+ "time": "2022-12-02T22:17:43+00:00"
+ },
+ {
+ "name": "phpoffice/phpspreadsheet",
+ "version": "1.29.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
+ "reference": "3a5a818d7d3e4b5bd2e56fb9de44dbded6eae07f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/3a5a818d7d3e4b5bd2e56fb9de44dbded6eae07f",
+ "reference": "3a5a818d7d3e4b5bd2e56fb9de44dbded6eae07f",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-dom": "*",
+ "ext-fileinfo": "*",
+ "ext-gd": "*",
+ "ext-iconv": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-simplexml": "*",
+ "ext-xml": "*",
+ "ext-xmlreader": "*",
+ "ext-xmlwriter": "*",
+ "ext-zip": "*",
+ "ext-zlib": "*",
+ "ezyang/htmlpurifier": "^4.15",
+ "maennchen/zipstream-php": "^2.1 || ^3.0",
+ "markbaker/complex": "^3.0",
+ "markbaker/matrix": "^3.0",
+ "php": "^7.4 || ^8.0",
+ "psr/http-client": "^1.0",
+ "psr/http-factory": "^1.0",
+ "psr/simple-cache": "^1.0 || ^2.0 || ^3.0"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "dev-main",
+ "dompdf/dompdf": "^1.0 || ^2.0",
+ "friendsofphp/php-cs-fixer": "^3.2",
+ "mitoteam/jpgraph": "^10.3",
+ "mpdf/mpdf": "^8.1.1",
+ "phpcompatibility/php-compatibility": "^9.3",
+ "phpstan/phpstan": "^1.1",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpunit/phpunit": "^8.5 || ^9.0",
+ "squizlabs/php_codesniffer": "^3.7",
+ "tecnickcom/tcpdf": "^6.5"
+ },
+ "suggest": {
+ "dompdf/dompdf": "Option for rendering PDF with PDF Writer",
+ "ext-intl": "PHP Internationalization Functions",
+ "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers",
+ "mpdf/mpdf": "Option for rendering PDF with PDF Writer",
+ "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Maarten Balliauw",
+ "homepage": "https://blog.maartenballiauw.be"
+ },
+ {
+ "name": "Mark Baker",
+ "homepage": "https://markbakeruk.net"
+ },
+ {
+ "name": "Franck Lefevre",
+ "homepage": "https://rootslabs.net"
+ },
+ {
+ "name": "Erik Tilt"
+ },
+ {
+ "name": "Adrien Crivelli"
+ }
+ ],
+ "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine",
+ "homepage": "https://github.com/PHPOffice/PhpSpreadsheet",
+ "keywords": [
+ "OpenXML",
+ "excel",
+ "gnumeric",
+ "ods",
+ "php",
+ "spreadsheet",
+ "xls",
+ "xlsx"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
+ "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.2"
+ },
+ "time": "2024-09-29T07:04:47+00:00"
+ },
+ {
+ "name": "psr/http-client",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP clients",
+ "homepage": "https://github.com/php-fig/http-client",
+ "keywords": [
+ "http",
+ "http-client",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-client"
+ },
+ "time": "2023-09-23T14:17:50+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory"
+ },
+ "time": "2024-04-15T12:06:14+00:00"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/2.0"
+ },
+ "time": "2023-04-04T09:54:51+00:00"
+ },
+ {
+ "name": "psr/simple-cache",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/simple-cache.git",
+ "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865",
+ "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\SimpleCache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for simple caching",
+ "keywords": [
+ "cache",
+ "caching",
+ "psr",
+ "psr-16",
+ "simple-cache"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/simple-cache/tree/3.0.0"
+ },
+ "time": "2021-10-29T13:26:27+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "laravel/pint",
+ "version": "v1.18.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/pint.git",
+ "reference": "35c00c05ec43e6b46d295efc0f4386ceb30d50d9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/35c00c05ec43e6b46d295efc0f4386ceb30d50d9",
+ "reference": "35c00c05ec43e6b46d295efc0f4386ceb30d50d9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-tokenizer": "*",
+ "ext-xml": "*",
+ "php": "^8.1.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.64.0",
+ "illuminate/view": "^10.48.20",
+ "larastan/larastan": "^2.9.8",
+ "laravel-zero/framework": "^10.4.0",
+ "mockery/mockery": "^1.6.12",
+ "nunomaduro/termwind": "^1.15.1",
+ "pestphp/pest": "^2.35.1"
+ },
+ "bin": [
+ "builds/pint"
+ ],
+ "type": "project",
+ "autoload": {
+ "psr-4": {
+ "App\\": "app/",
+ "Database\\Seeders\\": "database/seeders/",
+ "Database\\Factories\\": "database/factories/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "An opinionated code formatter for PHP.",
+ "homepage": "https://laravel.com",
+ "keywords": [
+ "format",
+ "formatter",
+ "lint",
+ "linter",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/pint/issues",
+ "source": "https://github.com/laravel/pint"
+ },
+ "time": "2024-09-24T17:22:50+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": "^7.0 || ^8.0"
+ },
+ "platform-dev": [],
+ "plugin-api-version": "2.6.0"
+}
diff --git a/docs/api/classes/Zuko-Flex2Cell-Contracts-FormatterInterface.html b/docs/api/classes/Zuko-Flex2Cell-Contracts-FormatterInterface.html
new file mode 100644
index 0000000..6dfe318
--- /dev/null
+++ b/docs/api/classes/Zuko-Flex2Cell-Contracts-FormatterInterface.html
@@ -0,0 +1,390 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Class FormatterInterface
+
+
+
+
+
+
+
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Methods
+
+
+
+
+
+ formatValue()
+
+ : mixed
+
+Format a value for export.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Format a value for export.
+
+
+ public
+ formatValue ( mixed $value , string $mappingKey ) : mixed
+
+
+
+
+ This method is called once for each cell value that is exported.
+The default implementation simply returns the value as is,
+but you can override this method in your class to change the
+behavior.
+
+
+ Parameters
+
+
+ $value
+ : mixed
+
+
+ The value that is being exported.
+
+
+
+
+ $mappingKey
+ : string
+
+
+ The key of the mapped column that is being exported.
+
+
+
+
+
+
+
+
+
+
+ Return values
+ mixed
+ —
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/classes/Zuko-Flex2Cell-ExcelExporter.html b/docs/api/classes/Zuko-Flex2Cell-ExcelExporter.html
new file mode 100644
index 0000000..b51833e
--- /dev/null
+++ b/docs/api/classes/Zuko-Flex2Cell-ExcelExporter.html
@@ -0,0 +1,2250 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ExcelExporter
+
+
+
+
+
+
+ uses
+ ExcelExportable
+
+
+
+
+
+
+
+
+
+ Class ExcelExporter
+
+
+
+
+
+
+
+ alias
+
+
+
+ \Zuko\Flex2Cell\ExcelExporter \Zuko\FlexExcel\ExcelExporter
+
+
+
+
+ alias
+
+
+
+ \Zuko\Flex2Cell\ExcelExporter \Zuko\FlexToExcel\ExcelExporter
+
+
+
+
+ alias
+
+
+
+ \Zuko\Flex2Cell\ExcelExporter \Zuko\FlexibleExcelExport\ExcelExporter
+
+
+
+
+ alias
+
+
+
+ \Zuko\Flex2Cell\ExcelExporter \Zuko\LaravelExcelExport\ExcelExporter
+
+
+
+
+
+
+
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Properties
+
+
+
+
+
+ $appendMode
+
+ : mixed
+
+
+
+ $chunkSize
+
+ : mixed
+
+
+
+ $columnLetters
+
+ : array<string|int, mixed>
+
+
+
+ $data
+
+ : mixed
+
+
+
+ $headers
+
+ : mixed
+
+
+
+ $hiddens
+
+ : mixed
+
+
+
+ $mapping
+
+ : mixed
+
+
+
+ $metaSettings
+
+ : mixed
+
+
+
+ $skipHeader
+
+ : bool
+
+
+
+ $subHeaders
+
+ : mixed
+
+
+
+
+
+ Methods
+
+
+
+
+
+ export()
+
+ : bool
+
+
+
+ make()
+
+ : mixed
+
+
+
+ setAppendMode()
+
+ : static
+
+Set whether the export should append to an existing file or replace the file.
+
+
+ setChunkSize()
+
+ : static
+
+Set the number of data rows to be processed in each chunk.
+
+
+ setData()
+
+ : static
+
+
+
+ setHeaders()
+
+ : static
+
+Set the headers to be displayed on the first row of the export.
+
+
+ setHiddens()
+
+ : static
+
+Set the fields which should not appear in the export.
+
+
+ setMapping()
+
+ : static
+
+Set the mapping of header => field names.
+
+
+ setMetaSettings()
+
+ : static
+
+Set the meta settings of the export.
+
+
+ setSkipHeader()
+
+ : static
+
+Set whether the export should write the header row or not.
+
+
+ setSubHeaders()
+
+ : static
+
+Set the sub headers to be displayed on the second row of the export.
+
+
+ applyMetaSettings()
+
+ : void
+
+Apply the meta settings to the spreadsheet.
+
+
+ formatValue()
+
+ : mixed
+
+Format a value for export.
+
+
+ getColumnLetter()
+
+ : string
+
+Get the column letter for a mapping key.
+
+
+ getHeader()
+
+ : string
+
+Get a header value from the headers array.
+
+
+ getHeaderFromMappingKey()
+
+ : string|null
+
+Get a header from a mapping key.
+
+
+ getMappingKeyFromHeader()
+
+ : string|null
+
+Get the mapping key from a header.
+
+
+ getSubHeader()
+
+ : string
+
+Get a sub-header value from the sub headers array.
+
+
+ getValue()
+
+ : mixed
+
+Get a value from the data row for export.
+
+
+ writeHeaders()
+
+ : void
+
+Write the headers to the Excel sheet.
+
+
+ writeRow()
+
+ : void
+
+Write a single row of data to the spreadsheet.
+
+
+ dataGet()
+
+ : mixed
+
+Get an item from an array or object using "dot" notation.
+
+
+ first()
+
+ : mixed
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $appendMode
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $appendMode
+ = false
+
+
+
+
+
+
+
+
+
+
+ $chunkSize
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $chunkSize
+ = 1000
+
+
+
+
+
+
+
+
+
+
+ $columnLetters
+
+
+
+
+
+
+
+
+
+
+ protected
+ array<string|int, mixed>
+ $columnLetters
+ = []
+
+
+
+
+
+
+
+
+
+
+ $data
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $data
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $headers
+ = []
+
+
+
+
+
+
+
+
+
+
+ $hiddens
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $hiddens
+ = []
+
+
+
+
+
+
+
+
+
+
+ $mapping
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $mapping
+ = []
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $metaSettings
+ = []
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ protected
+ bool
+ $skipHeader
+ = false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $subHeaders
+ = []
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ export()
+
+
+
+
+
+
+
+ public
+ static export ( array<string|int, mixed>|Collection |Collection $data , string $filename [ , array<string|int, mixed> $options = [] ] ) : bool
+
+
+
+
+
+ Parameters
+
+
+ $data
+ : array<string|int, mixed>|Collection |Collection
+
+
+
+
+
+ $filename
+ : string
+
+
+
+
+
+ $options
+ : array<string|int, mixed>
+ = []
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ make()
+
+
+
+
+
+
+
+ public
+ static make ( ) : mixed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ setAppendMode()
+
+
+
+
+
+ Set whether the export should append to an existing file or replace the file.
+
+
+ public
+ setAppendMode ( bool $appendMode ) : static
+
+
+
+
+
+ Parameters
+
+
+ $appendMode
+ : bool
+
+
+ If true, the export will append to an existing file.
+If false, the export will replace the file.
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+ setChunkSize()
+
+
+
+
+
+ Set the number of data rows to be processed in each chunk.
+
+
+ public
+ setChunkSize ( int $chunkSize ) : static
+
+
+
+
+ When exporting large datasets, processing the data in chunks can help
+reduce the memory footprint of the export process. The chunk size is
+the number of data rows that are processed at a time.
+
+
+ Parameters
+
+
+ $chunkSize
+ : int
+
+
+ The number of data rows to be processed in each chunk.
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+ setData()
+
+
+
+
+
+
+
+ public
+ setData ( mixed $data ) : static
+
+
+
+
+
+ Parameters
+
+
+ $data
+ : mixed
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+
+
+ Set the headers to be displayed on the first row of the export.
+
+
+ public
+ setHeaders ( array<string|int, mixed> $headers ) : static
+
+
+
+
+
+ Parameters
+
+
+ $headers
+ : array<string|int, mixed>
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+ setHiddens()
+
+
+
+
+
+ Set the fields which should not appear in the export.
+
+
+ public
+ setHiddens ( array<string|int, mixed> $hiddens ) : static
+
+
+
+
+
+ Parameters
+
+
+ $hiddens
+ : array<string|int, mixed>
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+ setMapping()
+
+
+
+
+
+ Set the mapping of header => field names.
+
+
+ public
+ setMapping ( array<string|int, mixed> $mapping ) : static
+
+
+
+
+
+ Parameters
+
+
+ $mapping
+ : array<string|int, mixed>
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+
+
+ Set the meta settings of the export.
+
+
+ public
+ setMetaSettings ( array<string|int, mixed> $metaSettings ) : static
+
+
+
+
+ The meta settings are written to the spreadsheet properties.
+Supported keys:
+
+
+
+ Parameters
+
+
+ $metaSettings
+ : array<string|int, mixed>
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+
+
+ Set whether the export should write the header row or not.
+
+
+ public
+ setSkipHeader ( bool $skipHeader ) : static
+
+
+
+
+ The header row is the first row of the spreadsheet and is used to
+label the columns. If this is set to true, the export will skip
+writing the header row.
+
+
+ Parameters
+
+
+ $skipHeader
+ : bool
+
+
+ If true, the export will skip writing the header row.
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+
+
+ Set the sub headers to be displayed on the second row of the export.
+
+
+ public
+ setSubHeaders ( array<string|int, mixed> $subHeaders ) : static
+
+
+
+
+
+ Parameters
+
+
+ $subHeaders
+ : array<string|int, mixed>
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+
+
+ Apply the meta settings to the spreadsheet.
+
+
+ protected
+ applyMetaSettings ( Spreadsheet $spreadsheet ) : void
+
+
+
+
+ The meta settings are applied to the spreadsheet properties. The
+supported meta settings are:
+
+
+author
: The author of the spreadsheet.
+
+title
: The title of the spreadsheet.
+
+
+
+ Parameters
+
+
+ $spreadsheet
+ : Spreadsheet
+
+
+ The spreadsheet to apply the meta
+settings to.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Format a value for export.
+
+
+ protected
+ formatValue ( string $mappingKey , mixed $value [ , mixed $rowItem = null ] ) : mixed
+
+
+
+
+ This method is called once for each value that is exported.
+The default implementation simply returns the value as is,
+but you can override this method in your class to change the
+behavior.
+
+
+ Parameters
+
+
+ $mappingKey
+ : string
+
+
+ The key of the mapped column that is being exported.
+
+
+
+
+ $value
+ : mixed
+
+
+ The value that is being exported.
+
+
+
+
+ $rowItem
+ : mixed
+ = null
+
+ The current processing row item
+
+
+
+
+
+
+
+
+
+
+ Return values
+ mixed
+ —
+
+
+
+
+
+
+
+ getColumnLetter()
+
+
+
+
+
+ Get the column letter for a mapping key.
+
+
+ protected
+ getColumnLetter ( string $mappingKey ) : string
+
+
+
+
+
+ Parameters
+
+
+ $mappingKey
+ : string
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ string
+
+
+
+
+
+
+
+ Get a header value from the headers array.
+
+
+ protected
+ getHeader ( string $header ) : string
+
+
+
+
+ If the header does not exist, the value passed as an argument is returned.
+
+
+ Parameters
+
+
+ $header
+ : string
+
+
+ The header for which to get the value
+
+
+
+
+
+
+
+
+
+
+ Return values
+ string
+ —
+
+
+
+
+
+
+
+
+
+ Get a header from a mapping key.
+
+
+ protected
+ getHeaderFromMappingKey ( string $mappingKey ) : string|null
+
+
+
+
+
+ Parameters
+
+
+ $mappingKey
+ : string
+
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ string|null
+ —
+ The header if found, null otherwise
+
+
+
+
+
+
+
+
+
+ Get the mapping key from a header.
+
+
+ protected
+ getMappingKeyFromHeader ( string $header ) : string|null
+
+
+
+
+
+ Parameters
+
+
+ $header
+ : string
+
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ string|null
+ —
+ The mapping key if found, null otherwise
+
+
+
+
+
+
+
+
+
+ Get a sub-header value from the sub headers array.
+
+
+ protected
+ getSubHeader ( string $header ) : string
+
+
+
+
+ If the sub-header does not exist, an empty string is returned.
+
+
+ Parameters
+
+
+ $header
+ : string
+
+
+ The header for which to get the sub-header value
+
+
+
+
+
+
+
+
+
+
+ Return values
+ string
+ —
+
+
+
+
+
+
+
+ getValue()
+
+
+
+
+
+ Get a value from the data row for export.
+
+
+ protected
+ getValue ( array<string|int, mixed> $row [ , string $key = null ] ) : mixed
+
+
+
+
+ This method is called once for each value that is exported.
+
+
+ Parameters
+
+
+ $row
+ : array<string|int, mixed>
+
+
+
+
+
+ $key
+ : string
+ = null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Write the headers to the Excel sheet.
+
+
+ protected
+ writeHeaders ( Worksheet $sheet ) : void
+
+
+
+
+
+ Parameters
+
+
+ $sheet
+ : Worksheet
+
+
+ The worksheet to write the headers to.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ writeRow()
+
+
+
+
+
+ Write a single row of data to the spreadsheet.
+
+
+ protected
+ writeRow ( Worksheet $sheet , array<string|int, mixed> $row , int $rowIndex ) : void
+
+
+
+
+
+ Parameters
+
+
+ $sheet
+ : Worksheet
+
+
+ The worksheet to write the row to.
+
+
+
+
+ $row
+ : array<string|int, mixed>
+
+
+ The row of data to write.
+
+
+
+
+ $rowIndex
+ : int
+
+
+ The index of the row to write.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ dataGet()
+
+
+
+
+
+ Get an item from an array or object using "dot" notation.
+
+
+ private
+ static dataGet ( mixed $target , string|array<string|int, mixed>|int|null $key [ , mixed $default = null ] ) : mixed
+
+
+
+
+
+ Parameters
+
+
+ $target
+ : mixed
+
+
+
+
+
+ $key
+ : string|array<string|int, mixed>|int|null
+
+
+
+
+
+ $default
+ : mixed
+ = null
+
+
+
+
+
+
+
+
+
+
+
+
+
+ first()
+
+
+
+
+
+
+
+ private
+ static first ( array<string|int, mixed> $array [ , mixed $callback = null ] [ , mixed $default = null ] ) : mixed
+
+
+
+
+
+ Parameters
+
+
+ $array
+ : array<string|int, mixed>
+
+
+
+
+
+ $callback
+ : mixed
+ = null
+
+
+
+
+ $default
+ : mixed
+ = null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/classes/Zuko-Flex2Cell-Flex2CellServiceProvider.html b/docs/api/classes/Zuko-Flex2Cell-Flex2CellServiceProvider.html
new file mode 100644
index 0000000..88929b0
--- /dev/null
+++ b/docs/api/classes/Zuko-Flex2Cell-Flex2CellServiceProvider.html
@@ -0,0 +1,449 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Flex2CellServiceProvider
+
+
+ extends ServiceProvider
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Class Flex2CellServiceProvider
+
+
+
+
+
+
+
+ alias
+
+
+
+ \Zuko\Flex2Cell\Flex2CellServiceProvider \Zuko\FlexExcel\Flex2CellServiceProvider
+
+
+
+
+ alias
+
+
+
+ \Zuko\Flex2Cell\Flex2CellServiceProvider \Zuko\FlexToExcel\Flex2CellServiceProvider
+
+
+
+
+ alias
+
+
+
+ \Zuko\Flex2Cell\Flex2CellServiceProvider \Zuko\FlexibleExcelExport\Flex2CellServiceProvider
+
+
+
+
+ alias
+
+
+
+ \Zuko\Flex2Cell\Flex2CellServiceProvider \Zuko\LaravelExcelExport\Flex2CellServiceProvider
+
+
+
+
+
+
+
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Methods
+
+
+
+
+
+ boot()
+
+ : mixed
+
+
+
+ register()
+
+ : mixed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ boot()
+
+
+
+
+
+
+
+ public
+ boot ( ) : mixed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ register()
+
+
+
+
+
+
+
+ public
+ register ( ) : mixed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/classes/Zuko-Flex2Cell-Traits-ExcelExportable.html b/docs/api/classes/Zuko-Flex2Cell-Traits-ExcelExportable.html
new file mode 100644
index 0000000..180244b
--- /dev/null
+++ b/docs/api/classes/Zuko-Flex2Cell-Traits-ExcelExportable.html
@@ -0,0 +1,2141 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ExcelExportable
+
+
+
+
+ Class ExcelExportable
+
+
+
+
+
+
+
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Properties
+
+
+
+
+
+ $appendMode
+
+ : mixed
+
+
+
+ $chunkSize
+
+ : mixed
+
+
+
+ $columnLetters
+
+ : array<string|int, mixed>
+
+
+
+ $data
+
+ : mixed
+
+
+
+ $headers
+
+ : mixed
+
+
+
+ $hiddens
+
+ : mixed
+
+
+
+ $mapping
+
+ : mixed
+
+
+
+ $metaSettings
+
+ : mixed
+
+
+
+ $skipHeader
+
+ : bool
+
+
+
+ $subHeaders
+
+ : mixed
+
+
+
+
+
+ Methods
+
+
+
+
+
+ export()
+
+ : bool
+
+Export the data to an Excel file.
+
+
+ setAppendMode()
+
+ : static
+
+Set whether the export should append to an existing file or replace the file.
+
+
+ setChunkSize()
+
+ : static
+
+Set the number of data rows to be processed in each chunk.
+
+
+ setData()
+
+ : static
+
+
+
+ setHeaders()
+
+ : static
+
+Set the headers to be displayed on the first row of the export.
+
+
+ setHiddens()
+
+ : static
+
+Set the fields which should not appear in the export.
+
+
+ setMapping()
+
+ : static
+
+Set the mapping of header => field names.
+
+
+ setMetaSettings()
+
+ : static
+
+Set the meta settings of the export.
+
+
+ setSkipHeader()
+
+ : static
+
+Set whether the export should write the header row or not.
+
+
+ setSubHeaders()
+
+ : static
+
+Set the sub headers to be displayed on the second row of the export.
+
+
+ applyMetaSettings()
+
+ : void
+
+Apply the meta settings to the spreadsheet.
+
+
+ formatValue()
+
+ : mixed
+
+Format a value for export.
+
+
+ getColumnLetter()
+
+ : string
+
+Get the column letter for a mapping key.
+
+
+ getHeader()
+
+ : string
+
+Get a header value from the headers array.
+
+
+ getHeaderFromMappingKey()
+
+ : string|null
+
+Get a header from a mapping key.
+
+
+ getMappingKeyFromHeader()
+
+ : string|null
+
+Get the mapping key from a header.
+
+
+ getSubHeader()
+
+ : string
+
+Get a sub-header value from the sub headers array.
+
+
+ getValue()
+
+ : mixed
+
+Get a value from the data row for export.
+
+
+ writeHeaders()
+
+ : void
+
+Write the headers to the Excel sheet.
+
+
+ writeRow()
+
+ : void
+
+Write a single row of data to the spreadsheet.
+
+
+ dataGet()
+
+ : mixed
+
+Get an item from an array or object using "dot" notation.
+
+
+ first()
+
+ : mixed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $appendMode
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $appendMode
+ = false
+
+
+
+
+
+
+
+
+
+
+ $chunkSize
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $chunkSize
+ = 1000
+
+
+
+
+
+
+
+
+
+
+ $columnLetters
+
+
+
+
+
+
+
+
+
+
+ protected
+ array<string|int, mixed>
+ $columnLetters
+ = []
+
+
+
+
+
+
+
+
+
+
+ $data
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $data
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $headers
+ = []
+
+
+
+
+
+
+
+
+
+
+ $hiddens
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $hiddens
+ = []
+
+
+
+
+
+
+
+
+
+
+ $mapping
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $mapping
+ = []
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $metaSettings
+ = []
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ protected
+ bool
+ $skipHeader
+ = false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $subHeaders
+ = []
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ export()
+
+
+
+
+
+ Export the data to an Excel file.
+
+
+ public
+ export ( string $filename ) : bool
+
+
+
+
+
+ Parameters
+
+
+ $filename
+ : string
+
+
+ The file name to export to.
+
+
+
+
+
+
+
+
+
+
+ Return values
+ bool
+ —
+ status of export based PHP Office reader load() result
+
+
+
+
+
+
+
+ setAppendMode()
+
+
+
+
+
+ Set whether the export should append to an existing file or replace the file.
+
+
+ public
+ setAppendMode ( bool $appendMode ) : static
+
+
+
+
+
+ Parameters
+
+
+ $appendMode
+ : bool
+
+
+ If true, the export will append to an existing file.
+If false, the export will replace the file.
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+ setChunkSize()
+
+
+
+
+
+ Set the number of data rows to be processed in each chunk.
+
+
+ public
+ setChunkSize ( int $chunkSize ) : static
+
+
+
+
+ When exporting large datasets, processing the data in chunks can help
+reduce the memory footprint of the export process. The chunk size is
+the number of data rows that are processed at a time.
+
+
+ Parameters
+
+
+ $chunkSize
+ : int
+
+
+ The number of data rows to be processed in each chunk.
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+ setData()
+
+
+
+
+
+
+
+ public
+ setData ( mixed $data ) : static
+
+
+
+
+
+ Parameters
+
+
+ $data
+ : mixed
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+
+
+ Set the headers to be displayed on the first row of the export.
+
+
+ public
+ setHeaders ( array<string|int, mixed> $headers ) : static
+
+
+
+
+
+ Parameters
+
+
+ $headers
+ : array<string|int, mixed>
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+ setHiddens()
+
+
+
+
+
+ Set the fields which should not appear in the export.
+
+
+ public
+ setHiddens ( array<string|int, mixed> $hiddens ) : static
+
+
+
+
+
+ Parameters
+
+
+ $hiddens
+ : array<string|int, mixed>
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+ setMapping()
+
+
+
+
+
+ Set the mapping of header => field names.
+
+
+ public
+ setMapping ( array<string|int, mixed> $mapping ) : static
+
+
+
+
+
+ Parameters
+
+
+ $mapping
+ : array<string|int, mixed>
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+
+
+ Set the meta settings of the export.
+
+
+ public
+ setMetaSettings ( array<string|int, mixed> $metaSettings ) : static
+
+
+
+
+ The meta settings are written to the spreadsheet properties.
+Supported keys:
+
+
+
+ Parameters
+
+
+ $metaSettings
+ : array<string|int, mixed>
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+
+
+ Set whether the export should write the header row or not.
+
+
+ public
+ setSkipHeader ( bool $skipHeader ) : static
+
+
+
+
+ The header row is the first row of the spreadsheet and is used to
+label the columns. If this is set to true, the export will skip
+writing the header row.
+
+
+ Parameters
+
+
+ $skipHeader
+ : bool
+
+
+ If true, the export will skip writing the header row.
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+
+
+ Set the sub headers to be displayed on the second row of the export.
+
+
+ public
+ setSubHeaders ( array<string|int, mixed> $subHeaders ) : static
+
+
+
+
+
+ Parameters
+
+
+ $subHeaders
+ : array<string|int, mixed>
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+
+
+ Apply the meta settings to the spreadsheet.
+
+
+ protected
+ applyMetaSettings ( Spreadsheet $spreadsheet ) : void
+
+
+
+
+ The meta settings are applied to the spreadsheet properties. The
+supported meta settings are:
+
+
+author
: The author of the spreadsheet.
+
+title
: The title of the spreadsheet.
+
+
+
+ Parameters
+
+
+ $spreadsheet
+ : Spreadsheet
+
+
+ The spreadsheet to apply the meta
+settings to.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Format a value for export.
+
+
+ protected
+ formatValue ( string $mappingKey , mixed $value [ , mixed $rowItem = null ] ) : mixed
+
+
+
+
+ This method is called once for each value that is exported.
+The default implementation simply returns the value as is,
+but you can override this method in your class to change the
+behavior.
+
+
+ Parameters
+
+
+ $mappingKey
+ : string
+
+
+ The key of the mapped column that is being exported.
+
+
+
+
+ $value
+ : mixed
+
+
+ The value that is being exported.
+
+
+
+
+ $rowItem
+ : mixed
+ = null
+
+ The current processing row item
+
+
+
+
+
+
+
+
+
+
+ Return values
+ mixed
+ —
+
+
+
+
+
+
+
+ getColumnLetter()
+
+
+
+
+
+ Get the column letter for a mapping key.
+
+
+ protected
+ getColumnLetter ( string $mappingKey ) : string
+
+
+
+
+
+ Parameters
+
+
+ $mappingKey
+ : string
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ string
+
+
+
+
+
+
+
+ Get a header value from the headers array.
+
+
+ protected
+ getHeader ( string $header ) : string
+
+
+
+
+ If the header does not exist, the value passed as an argument is returned.
+
+
+ Parameters
+
+
+ $header
+ : string
+
+
+ The header for which to get the value
+
+
+
+
+
+
+
+
+
+
+ Return values
+ string
+ —
+
+
+
+
+
+
+
+
+
+ Get a header from a mapping key.
+
+
+ protected
+ getHeaderFromMappingKey ( string $mappingKey ) : string|null
+
+
+
+
+
+ Parameters
+
+
+ $mappingKey
+ : string
+
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ string|null
+ —
+ The header if found, null otherwise
+
+
+
+
+
+
+
+
+
+ Get the mapping key from a header.
+
+
+ protected
+ getMappingKeyFromHeader ( string $header ) : string|null
+
+
+
+
+
+ Parameters
+
+
+ $header
+ : string
+
+
+
+
+
+
+
+
+
+
+
+
+ Return values
+ string|null
+ —
+ The mapping key if found, null otherwise
+
+
+
+
+
+
+
+
+
+ Get a sub-header value from the sub headers array.
+
+
+ protected
+ getSubHeader ( string $header ) : string
+
+
+
+
+ If the sub-header does not exist, an empty string is returned.
+
+
+ Parameters
+
+
+ $header
+ : string
+
+
+ The header for which to get the sub-header value
+
+
+
+
+
+
+
+
+
+
+ Return values
+ string
+ —
+
+
+
+
+
+
+
+ getValue()
+
+
+
+
+
+ Get a value from the data row for export.
+
+
+ protected
+ getValue ( array<string|int, mixed> $row [ , string $key = null ] ) : mixed
+
+
+
+
+ This method is called once for each value that is exported.
+
+
+ Parameters
+
+
+ $row
+ : array<string|int, mixed>
+
+
+
+
+
+ $key
+ : string
+ = null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Write the headers to the Excel sheet.
+
+
+ protected
+ writeHeaders ( Worksheet $sheet ) : void
+
+
+
+
+
+ Parameters
+
+
+ $sheet
+ : Worksheet
+
+
+ The worksheet to write the headers to.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ writeRow()
+
+
+
+
+
+ Write a single row of data to the spreadsheet.
+
+
+ protected
+ writeRow ( Worksheet $sheet , array<string|int, mixed> $row , int $rowIndex ) : void
+
+
+
+
+
+ Parameters
+
+
+ $sheet
+ : Worksheet
+
+
+ The worksheet to write the row to.
+
+
+
+
+ $row
+ : array<string|int, mixed>
+
+
+ The row of data to write.
+
+
+
+
+ $rowIndex
+ : int
+
+
+ The index of the row to write.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ dataGet()
+
+
+
+
+
+ Get an item from an array or object using "dot" notation.
+
+
+ private
+ static dataGet ( mixed $target , string|array<string|int, mixed>|int|null $key [ , mixed $default = null ] ) : mixed
+
+
+
+
+
+ Parameters
+
+
+ $target
+ : mixed
+
+
+
+
+
+ $key
+ : string|array<string|int, mixed>|int|null
+
+
+
+
+
+ $default
+ : mixed
+ = null
+
+
+
+
+
+
+
+
+
+
+
+
+
+ first()
+
+
+
+
+
+
+
+ private
+ static first ( array<string|int, mixed> $array [ , mixed $callback = null ] [ , mixed $default = null ] ) : mixed
+
+
+
+
+
+ Parameters
+
+
+ $array
+ : array<string|int, mixed>
+
+
+
+
+
+ $callback
+ : mixed
+ = null
+
+
+
+
+ $default
+ : mixed
+ = null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/classes/Zuko-Flex2Cell-Traits-HasExportAttributes.html b/docs/api/classes/Zuko-Flex2Cell-Traits-HasExportAttributes.html
new file mode 100644
index 0000000..6a18c57
--- /dev/null
+++ b/docs/api/classes/Zuko-Flex2Cell-Traits-HasExportAttributes.html
@@ -0,0 +1,518 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HasExportAttributes
+
+
+
+
+ Class HasExportAttributes
+
+
+
+
+
+
+
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Properties
+
+
+
+
+
+ $formatters
+
+ : mixed
+
+
+
+
+
+ Methods
+
+
+
+
+
+ setFormatters()
+
+ : static
+
+Set the formatters to be used for formatting values when exporting.
+
+
+ formatValue()
+
+ : mixed
+
+Format a value for export.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $formatters
+ = []
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set the formatters to be used for formatting values when exporting.
+
+
+ public
+ setFormatters ( array<string|int, mixed>|array<string|int, callable>|array<string|int, FormatterInterface > $formatters ) : static
+
+
+
+
+ $formatters is an associative array, where the keys are the column names
+and the values are either a callable or an object that implements
+FormatterInterface. If the value is a string, it will be treated as a class
+name and an instance of that class will be created.
+
+
+ Parameters
+
+
+ $formatters
+ : array<string|int, mixed>|array<string|int, callable>|array<string|int, FormatterInterface >
+
+
+ An associative array of formatters.
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+
+
+ Format a value for export.
+
+
+ protected
+ formatValue ( string $mappingKey , mixed $value [ , Model |mixed $rowItem = null ] ) : mixed
+
+
+
+
+ This method is called once for each value that is exported.
+The default implementation simply returns the value as is,
+but you can override this method in your class to change the
+behavior.
+
+
+ Parameters
+
+
+ $mappingKey
+ : string
+
+
+ The key of the mapped column that is being exported.
+
+
+
+
+ $value
+ : mixed
+
+
+ The value that is being exported.
+
+
+
+
+ $rowItem
+ : Model |mixed
+ = null
+
+ The current processing row item
+
+
+
+
+
+
+
+
+
+
+ Return values
+ mixed
+ —
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/classes/Zuko-Flex2Cell-Traits-HasExportMerging.html b/docs/api/classes/Zuko-Flex2Cell-Traits-HasExportMerging.html
new file mode 100644
index 0000000..3411443
--- /dev/null
+++ b/docs/api/classes/Zuko-Flex2Cell-Traits-HasExportMerging.html
@@ -0,0 +1,718 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HasExportMerging
+
+
+
+
+ Class HasExportMerging
+
+
+
+
+
+
+
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Properties
+
+
+
+
+
+ $columnMergeRules
+
+ : mixed
+
+
+
+ $rowMergeRules
+
+ : mixed
+
+
+
+
+
+ Methods
+
+
+
+
+
+ setColumnMergeRules()
+
+ : static
+
+Sets the column merge rules for the export.
+
+
+ setRowMergeRules()
+
+ : static
+
+Sets the row merge rules for the export.
+
+
+ applyColumnMerging()
+
+ : void
+
+Applies column merging rules to the given sheet.
+
+
+ applyMerging()
+
+ : void
+
+Applies both column and row merging rules to the given sheet.
+
+
+ applyRowMerging()
+
+ : void
+
+Applies row merging to the given sheet according to the row merge rules.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $columnMergeRules
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $columnMergeRules
+ = []
+
+
+
+
+
+
+
+
+
+
+ $rowMergeRules
+
+
+
+
+
+
+
+
+
+
+ protected
+ mixed
+ $rowMergeRules
+ = []
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ setColumnMergeRules()
+
+
+
+
+
+ Sets the column merge rules for the export.
+
+
+ public
+ setColumnMergeRules ( array<string|int, mixed> $rules ) : static
+
+
+
+
+ The $rules
parameter must be an associative array of column merge rules.
+Each rule is an associative array with the following keys:
+
+
+start
: The starting column letter or index of the merge range.
+
+end
: The ending column letter or index of the merge range.
+
+shiftDown
: An optional boolean indicating if the merge should be shifted down to the row below the header row.
+
+If the start
or end
values are provided as integers, they will be converted to column letters.
+
+
+ Parameters
+
+
+ $rules
+ : array<string|int, mixed>
+
+
+ The column merge rules.
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+ setRowMergeRules()
+
+
+
+
+
+ Sets the row merge rules for the export.
+
+
+ public
+ setRowMergeRules ( array<string|int, mixed> $rules ) : static
+
+
+
+
+ The $rules
parameter can be either an associative array of column letters mapped to their respective field names,
+or a numeric array of field names. If the latter, the column letters will be automatically determined by the export.
+
+
+ Parameters
+
+
+ $rules
+ : array<string|int, mixed>
+
+
+ An associative array of column letters mapped to their respective field names, or a numeric array of field names.
+
+
+
+
+
+
+
+
+
+
+ Return values
+ static
+
+
+
+
+
+ applyColumnMerging()
+
+
+
+
+
+ Applies column merging rules to the given sheet.
+
+
+ protected
+ applyColumnMerging ( Worksheet $sheet ) : void
+
+
+
+
+ The rules are applied by either inserting a new row above the current header row
+and setting the merged header value, or by merging the cells at the current header row.
+
+
+ Parameters
+
+
+ $sheet
+ : Worksheet
+
+
+ The sheet to apply column merging rules to.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ applyMerging()
+
+
+
+
+
+ Applies both column and row merging rules to the given sheet.
+
+
+ protected
+ applyMerging ( Worksheet $sheet ) : void
+
+
+
+
+
+ Parameters
+
+
+ $sheet
+ : Worksheet
+
+
+ The sheet to apply merging rules to.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ applyRowMerging()
+
+
+
+
+
+ Applies row merging to the given sheet according to the row merge rules.
+
+
+ protected
+ applyRowMerging ( Worksheet $sheet ) : void
+
+
+
+
+ This method iterates over the rows of the sheet, and for each row, it
+checks if the value in the given column matches the previous row's value.
+If it does, it merges the cells in the given column from the start row
+to the current row. If it doesn't, it resets the start row to the current
+row and continues.
+
+
+ Parameters
+
+
+ $sheet
+ : Worksheet
+
+
+ The sheet to apply row merging to.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/css/base.css b/docs/api/css/base.css
new file mode 100644
index 0000000..030ba07
--- /dev/null
+++ b/docs/api/css/base.css
@@ -0,0 +1,1236 @@
+
+
+:root {
+ /* Typography */
+ --font-primary: 'Open Sans', Helvetica, Arial, sans-serif;
+ --font-secondary: 'Open Sans', Helvetica, Arial, sans-serif;
+ --font-monospace: 'Source Code Pro', monospace;
+ --line-height--primary: 1.6;
+ --letter-spacing--primary: .05rem;
+ --text-base-size: 1em;
+ --text-scale-ratio: 1.2;
+
+ --text-xxs: calc(var(--text-base-size) / var(--text-scale-ratio) / var(--text-scale-ratio) / var(--text-scale-ratio));
+ --text-xs: calc(var(--text-base-size) / var(--text-scale-ratio) / var(--text-scale-ratio));
+ --text-sm: calc(var(--text-base-size) / var(--text-scale-ratio));
+ --text-md: var(--text-base-size);
+ --text-lg: calc(var(--text-base-size) * var(--text-scale-ratio));
+ --text-xl: calc(var(--text-base-size) * var(--text-scale-ratio) * var(--text-scale-ratio));
+ --text-xxl: calc(var(--text-base-size) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio));
+ --text-xxxl: calc(var(--text-base-size) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio));
+ --text-xxxxl: calc(var(--text-base-size) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio));
+ --text-xxxxxl: calc(var(--text-base-size) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio) * var(--text-scale-ratio));
+
+ --color-hue-red: 4;
+ --color-hue-pink: 340;
+ --color-hue-purple: 291;
+ --color-hue-deep-purple: 262;
+ --color-hue-indigo: 231;
+ --color-hue-blue: 207;
+ --color-hue-light-blue: 199;
+ --color-hue-cyan: 187;
+ --color-hue-teal: 174;
+ --color-hue-green: 122;
+ --color-hue-phpdocumentor-green: 96;
+ --color-hue-light-green: 88;
+ --color-hue-lime: 66;
+ --color-hue-yellow: 54;
+ --color-hue-amber: 45;
+ --color-hue-orange: 36;
+ --color-hue-deep-orange: 14;
+ --color-hue-brown: 16;
+
+ /* Colors */
+ --primary-color-hue: var(--color-hue-phpdocumentor-green, --color-hue-phpdocumentor-green);
+ --primary-color-saturation: 57%;
+ --primary-color: hsl(var(--primary-color-hue), var(--primary-color-saturation), 60%);
+ --primary-color-darken: hsl(var(--primary-color-hue), var(--primary-color-saturation), 40%);
+ --primary-color-darker: hsl(var(--primary-color-hue), var(--primary-color-saturation), 25%);
+ --primary-color-darkest: hsl(var(--primary-color-hue), var(--primary-color-saturation), 10%);
+ --primary-color-lighten: hsl(var(--primary-color-hue), calc(var(--primary-color-saturation) - 20%), 85%);
+ --primary-color-lighter: hsl(var(--primary-color-hue), calc(var(--primary-color-saturation) - 45%), 97.5%);
+ --dark-gray: #d1d1d1;
+ --light-gray: #f0f0f0;
+
+ --text-color: var(--primary-color-darkest);
+
+ --header-height: var(--spacing-xxxxl);
+ --header-bg-color: var(--primary-color);
+ --code-background-color: var(--primary-color-lighter);
+ --code-border-color: --primary-color-lighten;
+ --button-border-color: var(--primary-color-darken);
+ --button-color: transparent;
+ --button-color-primary: var(--primary-color);
+ --button-text-color: #555;
+ --button-text-color-primary: white;
+ --popover-background-color: rgba(255, 255, 255, 0.75);
+ --link-color-primary: var(--primary-color-darker);
+ --link-hover-color-primary: var(--primary-color-darkest);
+ --form-field-border-color: var(--dark-gray);
+ --form-field-color: #fff;
+ --admonition-success-color: var(--primary-color);
+ --admonition-border-color: silver;
+ --table-separator-color: var(--primary-color-lighten);
+ --title-text-color: var(--primary-color);
+
+ --sidebar-border-color: var(--primary-color-lighten);
+
+ /* Grid */
+ --container-width: 1400px;
+
+ /* Spacing */
+ --spacing-base-size: 1rem;
+ --spacing-scale-ratio: 1.5;
+
+ --spacing-xxxs: calc(var(--spacing-base-size) / var(--spacing-scale-ratio) / var(--spacing-scale-ratio) / var(--spacing-scale-ratio) / var(--spacing-scale-ratio));
+ --spacing-xxs: calc(var(--spacing-base-size) / var(--spacing-scale-ratio) / var(--spacing-scale-ratio) / var(--spacing-scale-ratio));
+ --spacing-xs: calc(var(--spacing-base-size) / var(--spacing-scale-ratio) / var(--spacing-scale-ratio));
+ --spacing-sm: calc(var(--spacing-base-size) / var(--spacing-scale-ratio));
+ --spacing-md: var(--spacing-base-size);
+ --spacing-lg: calc(var(--spacing-base-size) * var(--spacing-scale-ratio));
+ --spacing-xl: calc(var(--spacing-base-size) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio));
+ --spacing-xxl: calc(var(--spacing-base-size) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio));
+ --spacing-xxxl: calc(var(--spacing-base-size) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio));
+ --spacing-xxxxl: calc(var(--spacing-base-size) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio) * var(--spacing-scale-ratio));
+
+ --border-radius-base-size: 3px;
+}
+
+/* Base Styles
+-------------------------------------------------- */
+body {
+ background-color: #fff;
+ color: var(--text-color);
+ font-family: var(--font-primary);
+ font-size: var(--text-md);
+ letter-spacing: var(--letter-spacing--primary);
+ line-height: var(--line-height--primary);
+ width: 100%;
+}
+
+.phpdocumentor h1,
+.phpdocumentor h2,
+.phpdocumentor h3,
+.phpdocumentor h4,
+.phpdocumentor h5,
+.phpdocumentor h6 {
+ margin-bottom: var(--spacing-lg);
+ margin-top: var(--spacing-lg);
+ font-weight: 600;
+}
+
+.phpdocumentor h1 {
+ font-size: var(--text-xxxxl);
+ letter-spacing: var(--letter-spacing--primary);
+ line-height: 1.2;
+ margin-top: 0;
+}
+
+.phpdocumentor h2 {
+ font-size: var(--text-xxxl);
+ letter-spacing: var(--letter-spacing--primary);
+ line-height: 1.25;
+}
+
+.phpdocumentor h3 {
+ font-size: var(--text-xxl);
+ letter-spacing: var(--letter-spacing--primary);
+ line-height: 1.3;
+}
+
+.phpdocumentor h4 {
+ font-size: var(--text-xl);
+ letter-spacing: calc(var(--letter-spacing--primary) / 2);
+ line-height: 1.35;
+ margin-bottom: var(--spacing-md);
+}
+
+.phpdocumentor h5 {
+ font-size: var(--text-lg);
+ letter-spacing: calc(var(--letter-spacing--primary) / 4);
+ line-height: 1.5;
+ margin-bottom: var(--spacing-md);
+ margin-top: var(--spacing-md);
+}
+
+.phpdocumentor h6 {
+ font-size: var(--text-md);
+ letter-spacing: 0;
+ line-height: var(--line-height--primary);
+ margin-bottom: var(--spacing-md);
+ margin-top: var(--spacing-md);
+}
+.phpdocumentor h1 .headerlink,
+.phpdocumentor h2 .headerlink,
+.phpdocumentor h3 .headerlink,
+.phpdocumentor h4 .headerlink,
+.phpdocumentor h5 .headerlink,
+.phpdocumentor h6 .headerlink
+{
+ display: none;
+}
+
+@media (min-width: 550px) {
+ .phpdocumentor h1 .headerlink,
+ .phpdocumentor h2 .headerlink,
+ .phpdocumentor h3 .headerlink,
+ .phpdocumentor h4 .headerlink,
+ .phpdocumentor h5 .headerlink,
+ .phpdocumentor h6 .headerlink {
+ display: inline;
+ transition: all .3s ease-in-out;
+ opacity: 0;
+ text-decoration: none;
+ color: silver;
+ font-size: 80%;
+ }
+
+ .phpdocumentor h1:hover .headerlink,
+ .phpdocumentor h2:hover .headerlink,
+ .phpdocumentor h3:hover .headerlink,
+ .phpdocumentor h4:hover .headerlink,
+ .phpdocumentor h5:hover .headerlink,
+ .phpdocumentor h6:hover .headerlink {
+ opacity: 1;
+ }
+}
+.phpdocumentor p {
+ margin-top: 0;
+ margin-bottom: var(--spacing-md);
+}
+.phpdocumentor figure {
+ margin-bottom: var(--spacing-md);
+}
+
+.phpdocumentor figcaption {
+ text-align: center;
+ font-style: italic;
+ font-size: 80%;
+}
+
+.phpdocumentor-uml-diagram svg {
+ max-width: 100%;
+ height: auto !important;
+}
+.phpdocumentor-line {
+ border-top: 1px solid #E1E1E1;
+ border-width: 0;
+ margin-bottom: var(--spacing-xxl);
+ margin-top: var(--spacing-xxl);
+}
+.phpdocumentor-section {
+ box-sizing: border-box;
+ margin: 0 auto;
+ max-width: var(--container-width);
+ padding: 0 var(--spacing-sm);
+ position: relative;
+ width: 100%;
+}
+
+@media (min-width: 550px) {
+ .phpdocumentor-section {
+ padding: 0 var(--spacing-lg);
+ }
+}
+
+@media (min-width: 1200px) {
+ .phpdocumentor-section {
+ padding: 0;
+ width: 95%;
+ }
+}
+.phpdocumentor-column {
+ box-sizing: border-box;
+ float: left;
+ width: 100%;
+}
+
+@media (min-width: 550px) {
+ .phpdocumentor-column {
+ margin-left: 4%;
+ }
+
+ .phpdocumentor-column:first-child {
+ margin-left: 0;
+ }
+
+ .-one.phpdocumentor-column {
+ width: 4.66666666667%;
+ }
+
+ .-two.phpdocumentor-column {
+ width: 13.3333333333%;
+ }
+
+ .-three.phpdocumentor-column {
+ width: 22%;
+ }
+
+ .-four.phpdocumentor-column {
+ width: 30.6666666667%;
+ }
+
+ .-five.phpdocumentor-column {
+ width: 39.3333333333%;
+ }
+
+ .-six.phpdocumentor-column {
+ width: 48%;
+ }
+
+ .-seven.phpdocumentor-column {
+ width: 56.6666666667%;
+ }
+
+ .-eight.phpdocumentor-column {
+ width: 65.3333333333%;
+ }
+
+ .-nine.phpdocumentor-column {
+ width: 74.0%;
+ }
+
+ .-ten.phpdocumentor-column {
+ width: 82.6666666667%;
+ }
+
+ .-eleven.phpdocumentor-column {
+ width: 91.3333333333%;
+ }
+
+ .-twelve.phpdocumentor-column {
+ margin-left: 0;
+ width: 100%;
+ }
+
+ .-one-third.phpdocumentor-column {
+ width: 30.6666666667%;
+ }
+
+ .-two-thirds.phpdocumentor-column {
+ width: 65.3333333333%;
+ }
+
+ .-one-half.phpdocumentor-column {
+ width: 48%;
+ }
+
+ /* Offsets */
+ .-offset-by-one.phpdocumentor-column {
+ margin-left: 8.66666666667%;
+ }
+
+ .-offset-by-two.phpdocumentor-column {
+ margin-left: 17.3333333333%;
+ }
+
+ .-offset-by-three.phpdocumentor-column {
+ margin-left: 26%;
+ }
+
+ .-offset-by-four.phpdocumentor-column {
+ margin-left: 34.6666666667%;
+ }
+
+ .-offset-by-five.phpdocumentor-column {
+ margin-left: 43.3333333333%;
+ }
+
+ .-offset-by-six.phpdocumentor-column {
+ margin-left: 52%;
+ }
+
+ .-offset-by-seven.phpdocumentor-column {
+ margin-left: 60.6666666667%;
+ }
+
+ .-offset-by-eight.phpdocumentor-column {
+ margin-left: 69.3333333333%;
+ }
+
+ .-offset-by-nine.phpdocumentor-column {
+ margin-left: 78.0%;
+ }
+
+ .-offset-by-ten.phpdocumentor-column {
+ margin-left: 86.6666666667%;
+ }
+
+ .-offset-by-eleven.phpdocumentor-column {
+ margin-left: 95.3333333333%;
+ }
+
+ .-offset-by-one-third.phpdocumentor-column {
+ margin-left: 34.6666666667%;
+ }
+
+ .-offset-by-two-thirds.phpdocumentor-column {
+ margin-left: 69.3333333333%;
+ }
+
+ .-offset-by-one-half.phpdocumentor-column {
+ margin-left: 52%;
+ }
+}
+.phpdocumentor a {
+ color: var(--link-color-primary);
+}
+
+.phpdocumentor a:hover {
+ color: var(--link-hover-color-primary);
+}
+.phpdocumentor-button {
+ background-color: var(--button-color);
+ border: 1px solid var(--button-border-color);
+ border-radius: var(--border-radius-base-size);
+ box-sizing: border-box;
+ color: var(--button-text-color);
+ cursor: pointer;
+ display: inline-block;
+ font-size: var(--text-sm);
+ font-weight: 600;
+ height: 38px;
+ letter-spacing: .1rem;
+ line-height: 38px;
+ padding: 0 var(--spacing-xxl);
+ text-align: center;
+ text-decoration: none;
+ text-transform: uppercase;
+ white-space: nowrap;
+ margin-bottom: var(--spacing-md);
+}
+
+.phpdocumentor-button .-wide {
+ width: 100%;
+}
+
+.phpdocumentor-button:hover,
+.phpdocumentor-button:focus {
+ border-color: #888;
+ color: #333;
+ outline: 0;
+}
+
+.phpdocumentor-button.-primary {
+ background-color: var(--button-color-primary);
+ border-color: var(--button-color-primary);
+ color: var(--button-text-color-primary);
+}
+
+.phpdocumentor-button.-primary:hover,
+.phpdocumentor-button.-primary:focus {
+ background-color: var(--link-color-primary);
+ border-color: var(--link-color-primary);
+ color: var(--button-text-color-primary);
+}
+.phpdocumentor form {
+ margin-bottom: var(--spacing-md);
+}
+
+.phpdocumentor-field {
+ background-color: var(--form-field-color);
+ border: 1px solid var(--form-field-border-color);
+ border-radius: var(--border-radius-base-size);
+ box-shadow: none;
+ box-sizing: border-box;
+ height: 38px;
+ padding: var(--spacing-xxxs) var(--spacing-xxs); /* The 6px vertically centers text on FF, ignored by Webkit */
+ margin-bottom: var(--spacing-md);
+}
+
+/* Removes awkward default styles on some inputs for iOS */
+input[type="email"],
+input[type="number"],
+input[type="search"],
+input[type="text"],
+input[type="tel"],
+input[type="url"],
+input[type="password"],
+textarea {
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ appearance: none;
+}
+
+.phpdocumentor-textarea {
+ min-height: 65px;
+ padding-bottom: var(--spacing-xxxs);
+ padding-top: var(--spacing-xxxs);
+}
+
+.phpdocumentor-field:focus {
+ border: 1px solid var(--button-color-primary);
+ outline: 0;
+}
+
+label.phpdocumentor-label {
+ display: block;
+ margin-bottom: var(--spacing-xs);
+}
+
+.phpdocumentor-fieldset {
+ border-width: 0;
+ padding: 0;
+}
+
+input[type="checkbox"].phpdocumentor-field,
+input[type="radio"].phpdocumentor-field {
+ display: inline;
+}
+.phpdocumentor-column ul,
+div.phpdocumentor-list > ul,
+ul.phpdocumentor-list {
+ list-style: circle;
+}
+
+.phpdocumentor-column ol,
+div.phpdocumentor-list > ol,
+ol.phpdocumentor-list {
+ list-style: decimal;
+}
+
+
+.phpdocumentor-column ul,
+div.phpdocumentor-list > ul,
+ol.phpdocumentor-list,
+ul.phpdocumentor-list {
+ margin-top: 0;
+ padding-left: var(--spacing-lg);
+ margin-bottom: var(--spacing-sm);
+}
+
+.phpdocumentor-column ul.-clean,
+div.phpdocumentor-list > ul.-clean,
+ul.phpdocumentor-list.-clean {
+ list-style: none;
+ padding-left: 0;
+}
+
+dl {
+ margin-bottom: var(--spacing-md);
+}
+
+.phpdocumentor-column ul ul,
+div.phpdocumentor-list > ul ul,
+ul.phpdocumentor-list ul.phpdocumentor-list,
+ul.phpdocumentor-list ol.phpdocumentor-list,
+ol.phpdocumentor-list ol.phpdocumentor-list,
+ol.phpdocumentor-list ul.phpdocumentor-list {
+ font-size: var(--text-sm);
+ margin: 0 0 0 calc(var(--spacing-xs) * 2);
+}
+
+.phpdocumentor-column ul li,
+.phpdocumentor-list li {
+ padding-bottom: var(--spacing-xs);
+}
+
+.phpdocumentor dl dt {
+ margin-bottom: var(--spacing-xs);
+}
+
+.phpdocumentor dl dd {
+ margin-bottom: var(--spacing-md);
+}
+.phpdocumentor pre {
+ margin-bottom: var(--spacing-md);
+}
+
+.phpdocumentor-code {
+ font-family: var(--font-monospace);
+ background: var(--code-background-color);
+ border: 1px solid var(--code-border-color);
+ border-radius: var(--border-radius-base-size);
+ font-size: var(--text-sm);
+ padding: var(--spacing-sm) var(--spacing-md);
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.phpdocumentor-code.-dark {
+ background: var(--primary-color-darkest);
+ color: var(--light-gray);
+ box-shadow: 0 2px 3px var(--dark-gray);
+}
+
+pre > .phpdocumentor-code {
+ display: block;
+ white-space: pre;
+}
+.phpdocumentor blockquote {
+ border-left: 4px solid var(--primary-color-darken);
+ margin: var(--spacing-md) 0;
+ padding: var(--spacing-xs) var(--spacing-sm);
+ color: var(--primary-color-darker);
+ font-style: italic;
+}
+
+.phpdocumentor blockquote p:last-of-type {
+ margin-bottom: 0;
+}
+.phpdocumentor table {
+ margin-bottom: var(--spacing-md);
+}
+
+th.phpdocumentor-heading,
+td.phpdocumentor-cell {
+ border-bottom: 1px solid var(--table-separator-color);
+ padding: var(--spacing-sm) var(--spacing-md);
+ text-align: left;
+}
+
+th.phpdocumentor-heading:first-child,
+td.phpdocumentor-cell:first-child {
+ padding-left: 0;
+}
+
+th.phpdocumentor-heading:last-child,
+td.phpdocumentor-cell:last-child {
+ padding-right: 0;
+}
+.phpdocumentor-label-line {
+ display: flex;
+ flex-direction: row;
+ gap: 1rem
+}
+
+.phpdocumentor-label {
+ background: #f6f6f6;
+ border-radius: .25rem;
+ font-size: 80%;
+ display: inline-block;
+ overflow: hidden
+}
+
+/*
+It would be better if the phpdocumentor-element class were to become a flex element with a gap, but for #3337 that
+is too big a fix and needs to be done in a new design iteration.
+*/
+.phpdocumentor-signature + .phpdocumentor-label-line .phpdocumentor-label {
+ margin-top: var(--spacing-sm);
+}
+
+.phpdocumentor-label span {
+ display: inline-block;
+ padding: .125rem .5rem;
+}
+
+.phpdocumentor-label--success span:last-of-type {
+ background: #abe1ab;
+}
+
+.phpdocumentor-header {
+ display: flex;
+ flex-direction: row;
+ align-items: stretch;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ height: auto;
+ padding: var(--spacing-md) var(--spacing-md);
+}
+
+.phpdocumentor-header__menu-button {
+ position: absolute;
+ top: -100%;
+ left: -100%;
+}
+
+.phpdocumentor-header__menu-icon {
+ font-size: 2rem;
+ color: var(--primary-color);
+}
+
+.phpdocumentor-header__menu-button:checked ~ .phpdocumentor-topnav {
+ max-height: 250px;
+ padding-top: var(--spacing-md);
+}
+
+@media (min-width: 1000px) {
+ .phpdocumentor-header {
+ flex-direction: row;
+ padding: var(--spacing-lg) var(--spacing-lg);
+ min-height: var(--header-height);
+ }
+
+ .phpdocumentor-header__menu-icon {
+ display: none;
+ }
+}
+
+@media (min-width: 1000px) {
+ .phpdocumentor-header {
+ padding-top: 0;
+ padding-bottom: 0;
+ }
+}
+@media (min-width: 1200px) {
+ .phpdocumentor-header {
+ padding: 0;
+ }
+}
+.phpdocumentor-title {
+ box-sizing: border-box;
+ color: var(--title-text-color);
+ font-size: var(--text-xxl);
+ letter-spacing: .05rem;
+ font-weight: normal;
+ width: auto;
+ margin: 0;
+ display: flex;
+ align-items: center;
+}
+
+.phpdocumentor-title.-without-divider {
+ border: none;
+}
+
+.phpdocumentor-title__link {
+ transition: all .3s ease-out;
+ display: flex;
+ color: var(--title-text-color);
+ text-decoration: none;
+ font-weight: normal;
+ white-space: nowrap;
+ transform: scale(.75);
+ transform-origin: left;
+}
+
+.phpdocumentor-title__link:hover {
+ transform: perspective(15rem) translateX(.5rem);
+ font-weight: 600;
+}
+
+@media (min-width: 1000px) {
+ .phpdocumentor-title {
+ width: 22%;
+ border-right: var(--sidebar-border-color) solid 1px;
+ }
+
+ .phpdocumentor-title__link {
+ transform-origin: left;
+ }
+}
+
+@media (min-width: 1000px) {
+ .phpdocumentor-title__link {
+ transform: scale(.85);
+ }
+}
+
+@media (min-width: 1200px) {
+ .phpdocumentor-title__link {
+ transform: scale(1);
+ }
+}
+.phpdocumentor-topnav {
+ display: flex;
+ align-items: center;
+ margin: 0;
+ max-height: 0;
+ overflow: hidden;
+ transition: max-height 0.2s ease-out;
+ flex-basis: 100%;
+}
+
+.phpdocumentor-topnav__menu {
+ text-align: right;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ flex: 1;
+ display: flex;
+ flex-flow: row wrap;
+ justify-content: center;
+}
+
+.phpdocumentor-topnav__menu-item {
+ margin: 0;
+ width: 100%;
+ display: inline-block;
+ text-align: center;
+ padding: var(--spacing-sm) 0
+}
+
+.phpdocumentor-topnav__menu-item.-social {
+ width: auto;
+ padding: var(--spacing-sm)
+}
+
+.phpdocumentor-topnav__menu-item a {
+ display: inline-block;
+ color: var(--text-color);
+ text-decoration: none;
+ font-size: var(--text-lg);
+ transition: all .3s ease-out;
+ border-bottom: 1px dotted transparent;
+ line-height: 1;
+}
+
+.phpdocumentor-topnav__menu-item a:hover {
+ transform: perspective(15rem) translateY(.1rem);
+ border-bottom: 1px dotted var(--text-color);
+}
+
+@media (min-width: 1000px) {
+ .phpdocumentor-topnav {
+ max-height: none;
+ overflow: visible;
+ flex-basis: auto;
+ }
+
+ .phpdocumentor-topnav__menu {
+ display: flex;
+ flex-flow: row wrap;
+ justify-content: flex-end;
+ }
+
+ .phpdocumentor-topnav__menu-item,
+ .phpdocumentor-topnav__menu-item.-social {
+ width: auto;
+ display: inline;
+ text-align: right;
+ padding: 0 0 0 var(--spacing-md)
+ }
+}
+.phpdocumentor-sidebar {
+ margin: 0;
+ overflow: hidden;
+ max-height: 0;
+}
+
+.phpdocumentor .phpdocumentor-sidebar .phpdocumentor-list {
+ padding: var(--spacing-xs) var(--spacing-md);
+ list-style: none;
+ margin: 0;
+}
+
+.phpdocumentor .phpdocumentor-sidebar li {
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ padding: 0 0 var(--spacing-xxxs) var(--spacing-md);
+}
+
+.phpdocumentor .phpdocumentor-sidebar abbr,
+.phpdocumentor .phpdocumentor-sidebar a {
+ text-decoration: none;
+ border-bottom: none;
+ color: var(--text-color);
+ font-size: var(--text-md);
+ padding-left: 0;
+ transition: padding-left .4s ease-out;
+}
+
+.phpdocumentor .phpdocumentor-sidebar a:hover,
+.phpdocumentor .phpdocumentor-sidebar a.-active {
+ padding-left: 5px;
+ font-weight: 600;
+}
+
+.phpdocumentor .phpdocumentor-sidebar__category > * {
+ border-left: 1px solid var(--primary-color-lighten);
+}
+
+.phpdocumentor .phpdocumentor-sidebar__category {
+ margin-bottom: var(--spacing-lg);
+}
+
+.phpdocumentor .phpdocumentor-sidebar__category-header {
+ font-size: var(--text-md);
+ margin-top: 0;
+ margin-bottom: var(--spacing-xs);
+ color: var(--link-color-primary);
+ font-weight: 600;
+ border-left: 0;
+}
+
+.phpdocumentor .phpdocumentor-sidebar__root-package,
+.phpdocumentor .phpdocumentor-sidebar__root-namespace {
+ font-size: var(--text-md);
+ margin: 0;
+ padding-top: var(--spacing-xs);
+ padding-left: var(--spacing-md);
+ color: var(--text-color);
+ font-weight: normal;
+}
+
+@media (min-width: 550px) {
+ .phpdocumentor-sidebar {
+ border-right: var(--sidebar-border-color) solid 1px;
+ }
+}
+
+.phpdocumentor-sidebar__menu-button {
+ position: absolute;
+ top: -100%;
+ left: -100%;
+}
+
+.phpdocumentor-sidebar__menu-icon {
+ font-size: var(--text-md);
+ font-weight: 600;
+ background: var(--primary-color);
+ color: white;
+ margin: 0 0 var(--spacing-lg);
+ display: block;
+ padding: var(--spacing-sm);
+ text-align: center;
+ border-radius: 3px;
+ text-transform: uppercase;
+ letter-spacing: .15rem;
+}
+
+.phpdocumentor-sidebar__menu-button:checked ~ .phpdocumentor-sidebar {
+ max-height: 100%;
+ padding-top: var(--spacing-md);
+}
+
+@media (min-width: 550px) {
+ .phpdocumentor-sidebar {
+ overflow: visible;
+ max-height: 100%;
+ }
+
+ .phpdocumentor-sidebar__menu-icon {
+ display: none;
+ }
+}
+.phpdocumentor-admonition {
+ border: 1px solid var(--admonition-border-color);
+ border-radius: var(--border-radius-base-size);
+ border-color: var(--primary-color-lighten);
+ background-color: var(--primary-color-lighter);
+ padding: var(--spacing-lg);
+ margin: var(--spacing-lg) 0;
+ display: flex;
+ flex-direction: row;
+ align-items: flex-start;
+}
+
+.phpdocumentor-admonition p:last-of-type {
+ margin-bottom: 0;
+}
+
+.phpdocumentor-admonition--success,
+.phpdocumentor-admonition.-success {
+ border-color: var(--admonition-success-color);
+}
+
+.phpdocumentor-admonition__icon {
+ margin-right: var(--spacing-md);
+ color: var(--primary-color);
+ max-width: 3rem;
+}
+.phpdocumentor ul.phpdocumentor-breadcrumbs {
+ font-size: var(--text-md);
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+.phpdocumentor ul.phpdocumentor-breadcrumbs a {
+ color: var(--text-color);
+ text-decoration: none;
+}
+
+.phpdocumentor ul.phpdocumentor-breadcrumbs > li {
+ display: inline-block;
+ margin: 0;
+}
+
+.phpdocumentor ul.phpdocumentor-breadcrumbs > li + li:before {
+ color: var(--dark-gray);
+ content: "\\\A0";
+ padding: 0;
+}
+.phpdocumentor .phpdocumentor-back-to-top {
+ position: fixed;
+ bottom: 2rem;
+ font-size: 2.5rem;
+ opacity: .25;
+ transition: all .3s ease-in-out;
+ right: 2rem;
+}
+
+.phpdocumentor .phpdocumentor-back-to-top:hover {
+ color: var(--link-color-primary);
+ opacity: 1;
+}
+.phpdocumentor-search {
+ position: relative;
+ display: none; /** disable by default for non-js flow */
+ opacity: .3; /** white-out default for loading indication */
+ transition: opacity .3s, background .3s;
+ margin: var(--spacing-sm) 0;
+ flex: 1;
+ min-width: 100%;
+}
+
+.phpdocumentor-search label {
+ display: flex;
+ align-items: center;
+ flex: 1;
+}
+
+.phpdocumentor-search__icon {
+ color: var(--primary-color);
+ margin-right: var(--spacing-sm);
+ width: 1rem;
+ height: 1rem;
+}
+
+.phpdocumentor-search--enabled {
+ display: flex;
+}
+
+.phpdocumentor-search--active {
+ opacity: 1;
+}
+
+.phpdocumentor-search input:disabled {
+ background-color: lightgray;
+}
+
+.phpdocumentor-search__field:focus,
+.phpdocumentor-search__field {
+ margin-bottom: 0;
+ border: 0;
+ border-bottom: 2px solid var(--primary-color);
+ padding: 0;
+ border-radius: 0;
+ flex: 1;
+}
+
+@media (min-width: 1000px) {
+ .phpdocumentor-search {
+ min-width: auto;
+ max-width: 20rem;
+ margin: 0 0 0 auto;
+ }
+}
+.phpdocumentor-search-results {
+ backdrop-filter: blur(5px);
+ background: var(--popover-background-color);
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ padding: 0;
+ opacity: 1;
+ pointer-events: all;
+
+ transition: opacity .3s, background .3s;
+}
+
+.phpdocumentor-search-results--hidden {
+ background: transparent;
+ backdrop-filter: blur(0);
+ opacity: 0;
+ pointer-events: none;
+}
+
+.phpdocumentor-search-results__dialog {
+ width: 100%;
+ background: white;
+ max-height: 100%;
+ display: flex;
+ flex-direction: column;
+}
+
+.phpdocumentor-search-results__body {
+ overflow: auto;
+}
+
+.phpdocumentor-search-results__header {
+ padding: var(--spacing-lg);
+ display: flex;
+ justify-content: space-between;
+ background: var(--primary-color-darken);
+ color: white;
+ align-items: center;
+}
+
+.phpdocumentor-search-results__close {
+ font-size: var(--text-xl);
+ background: none;
+ border: none;
+ padding: 0;
+ margin: 0;
+}
+
+.phpdocumentor .phpdocumentor-search-results__title {
+ font-size: var(--text-xl);
+ margin-bottom: 0;
+}
+
+.phpdocumentor-search-results__entries {
+ list-style: none;
+ padding: 0 var(--spacing-lg);
+ margin: 0;
+}
+
+.phpdocumentor-search-results__entry {
+ border-bottom: 1px solid var(--table-separator-color);
+ padding: var(--spacing-sm) 0;
+ text-align: left;
+}
+
+.phpdocumentor-search-results__entry a {
+ display: block;
+}
+
+.phpdocumentor-search-results__entry small {
+ margin-top: var(--spacing-xs);
+ margin-bottom: var(--spacing-md);
+ color: var(--primary-color-darker);
+ display: block;
+ word-break: break-word;
+}
+
+.phpdocumentor-search-results__entry h3 {
+ font-size: var(--text-lg);
+ margin: 0;
+}
+
+@media (min-width: 550px) {
+ .phpdocumentor-search-results {
+ padding: 0 var(--spacing-lg);
+ }
+
+ .phpdocumentor-search-results__entry h3 {
+ font-size: var(--text-xxl);
+ }
+
+ .phpdocumentor-search-results__dialog {
+ margin: var(--spacing-xl) auto;
+ max-width: 40rem;
+ background: white;
+ border: 1px solid silver;
+ box-shadow: 0 2px 5px silver;
+ max-height: 40rem;
+ border-radius: 3px;
+ }
+}
+.phpdocumentor-modal {
+ position: fixed;
+ width: 100vw;
+ height: 100vh;
+ opacity: 0;
+ visibility: hidden;
+ transition: all 0.3s ease;
+ top: 0;
+ left: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 1;
+}
+
+.phpdocumentor-modal__open {
+ visibility: visible;
+ opacity: 1;
+ transition-delay: 0s;
+}
+
+.phpdocumentor-modal-bg {
+ position: absolute;
+ background: gray;
+ opacity: 50%;
+ width: 100%;
+ height: 100%;
+}
+
+.phpdocumentor-modal-container {
+ border-radius: 1em;
+ background: #fff;
+ position: relative;
+ padding: 2em;
+ box-sizing: border-box;
+ max-width:100vw;
+}
+
+.phpdocumentor-modal__close {
+ position: absolute;
+ right: 0.75em;
+ top: 0.75em;
+ outline: none;
+ appearance: none;
+ color: var(--primary-color);
+ background: none;
+ border: 0px;
+ font-weight: bold;
+ cursor: pointer;
+}
+.phpdocumentor-on-this-page__sidebar {
+ display: none;
+}
+
+.phpdocumentor-on-this-page__title {
+ display: block;
+ font-weight: bold;
+ margin-bottom: var(--spacing-sm);
+ color: var(--link-color-primary);
+}
+
+@media (min-width: 1000px) {
+ .phpdocumentor-on-this-page__sidebar {
+ display: block;
+ position: relative;
+ }
+
+ .phpdocumentor-on-this-page__content::-webkit-scrollbar,
+ [scrollbars]::-webkit-scrollbar {
+ height: 8px;
+ width: 8px;
+ }
+
+ .phpdocumentor-on-this-page__content::-webkit-scrollbar-corner,
+ [scrollbars]::-webkit-scrollbar-corner {
+ background: 0;
+ }
+
+ .phpdocumentor-on-this-page__content::-webkit-scrollbar-thumb,
+ [scrollbars]::-webkit-scrollbar-thumb {
+ background: rgba(128,134,139,0.26);
+ border-radius: 8px;
+ }
+
+ .phpdocumentor-on-this-page__content {
+ position: sticky;
+ height: calc(100vh - var(--header-height));
+ overflow-y: auto;
+ border-left: 1px solid var(--sidebar-border-color);
+ padding-left: var(--spacing-lg);
+ font-size: 90%;
+ top: -1px; /* Needed for the javascript to make the .-stuck trick work */
+ flex: 0 1 auto;
+ width: 15vw;
+ }
+
+ .phpdocumentor-on-this-page__content.-stuck {
+ height: 100vh;
+ }
+
+ .phpdocumentor-on-this-page__content li {
+ word-break: break-all;
+ line-height: normal;
+ }
+
+ .phpdocumentor-on-this-page__content li.-deprecated {
+ text-decoration: line-through;
+ }
+}
+
+/* Used for screen readers and such */
+.visually-hidden {
+ display: none;
+}
+
+.float-right {
+ float: right;
+}
+
+.float-left {
+ float: left;
+}
diff --git a/docs/api/css/normalize.css b/docs/api/css/normalize.css
new file mode 100644
index 0000000..653dc00
--- /dev/null
+++ b/docs/api/css/normalize.css
@@ -0,0 +1,427 @@
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ * user zoom.
+ */
+
+html {
+ font-family: sans-serif; /* 1 */
+ -ms-text-size-adjust: 100%; /* 2 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+ margin: 0;
+}
+
+/* HTML5 display definitions
+ ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
+ * and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block; /* 1 */
+ vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+ display: none !important;
+}
+
+/* Links
+ ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+ font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+ font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+ border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+ margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+ overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+ font-family: var(--font-monospace);
+ font-size: 1em;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ * Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit; /* 1 */
+ font: inherit; /* 2 */
+ margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+ overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+ text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ * and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ * `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; /* 2 */
+ cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+ line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ * (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box; /* 2 */
+ box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+ border: 0; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+ font-weight: bold;
+}
+
+/* Tables
+ ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
diff --git a/docs/api/css/template.css b/docs/api/css/template.css
new file mode 100644
index 0000000..875ebaf
--- /dev/null
+++ b/docs/api/css/template.css
@@ -0,0 +1,275 @@
+
+.phpdocumentor-content {
+ position: relative;
+ display: flex;
+ gap: var(--spacing-md);
+}
+
+.phpdocumentor-content > section:first-of-type {
+ width: 75%;
+ flex: 1 1 auto;
+}
+
+@media (min-width: 1900px) {
+ .phpdocumentor-content > section:first-of-type {
+ width: 100%;
+ flex: 1 1 auto;
+ }
+}
+
+.phpdocumentor .phpdocumentor-content__title {
+ margin-top: 0;
+}
+.phpdocumentor-summary {
+ font-style: italic;
+}
+.phpdocumentor-description {
+ margin-bottom: var(--spacing-md);
+}
+.phpdocumentor-element {
+ position: relative;
+}
+
+.phpdocumentor-element .phpdocumentor-element {
+ border: 1px solid var(--primary-color-lighten);
+ margin-bottom: var(--spacing-md);
+ padding: var(--spacing-xs);
+ border-radius: 5px;
+}
+
+.phpdocumentor-element.-deprecated .phpdocumentor-element__name {
+ text-decoration: line-through;
+}
+
+@media (min-width: 550px) {
+ .phpdocumentor-element .phpdocumentor-element {
+ margin-bottom: var(--spacing-lg);
+ padding: var(--spacing-md);
+ }
+}
+
+.phpdocumentor-element__modifier {
+ font-size: var(--text-xxs);
+ padding: calc(var(--spacing-base-size) / 4) calc(var(--spacing-base-size) / 2);
+ color: var(--text-color);
+ background-color: var(--light-gray);
+ border-radius: 3px;
+ text-transform: uppercase;
+}
+
+.phpdocumentor .phpdocumentor-elements__header {
+ margin-top: var(--spacing-xxl);
+ margin-bottom: var(--spacing-lg);
+}
+
+.phpdocumentor .phpdocumentor-element__name {
+ line-height: 1;
+ margin-top: 0;
+ font-weight: 300;
+ font-size: var(--text-lg);
+ word-break: break-all;
+ margin-bottom: var(--spacing-sm);
+}
+
+@media (min-width: 550px) {
+ .phpdocumentor .phpdocumentor-element__name {
+ font-size: var(--text-xl);
+ margin-bottom: var(--spacing-xs);
+ }
+}
+
+@media (min-width: 1200px) {
+ .phpdocumentor .phpdocumentor-element__name {
+ margin-bottom: var(--spacing-md);
+ }
+}
+
+.phpdocumentor-element__package,
+.phpdocumentor-element__extends,
+.phpdocumentor-element__implements {
+ display: block;
+ font-size: var(--text-xxs);
+ font-weight: normal;
+ opacity: .7;
+}
+
+.phpdocumentor-element__package .phpdocumentor-breadcrumbs {
+ display: inline;
+}
+.phpdocumentor .phpdocumentor-signature {
+ display: block;
+ font-size: var(--text-sm);
+ border: 1px solid #f0f0f0;
+}
+
+.phpdocumentor .phpdocumentor-signature.-deprecated .phpdocumentor-signature__name {
+ text-decoration: line-through;
+}
+
+@media (min-width: 550px) {
+ .phpdocumentor .phpdocumentor-signature {
+ margin-left: calc(var(--spacing-xl) * -1);
+ width: calc(100% + var(--spacing-xl));
+ }
+}
+
+.phpdocumentor-table-of-contents {
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry {
+ margin-bottom: var(--spacing-xxs);
+ margin-left: 2rem;
+ display: flex;
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry > a {
+ flex: 0 1 auto;
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry > a.-deprecated {
+ text-decoration: line-through;
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry > span {
+ flex: 1;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry:after {
+ content: '';
+ height: 12px;
+ width: 12px;
+ left: 16px;
+ position: absolute;
+}
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-private:after {
+ background: url('data:image/svg+xml;utf8, ') no-repeat;
+}
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-protected:after {
+ left: 13px;
+ background: url('data:image/svg+xml;utf8, ') no-repeat;
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry:before {
+ width: 1.25rem;
+ height: 1.25rem;
+ line-height: 1.25rem;
+ background: transparent url('data:image/svg+xml;utf8, ') no-repeat center center;
+ content: '';
+ position: absolute;
+ left: 0;
+ border-radius: 50%;
+ font-weight: 600;
+ color: white;
+ text-align: center;
+ font-size: .75rem;
+ margin-top: .2rem;
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-method:before {
+ content: 'M';
+ color: '';
+ background-image: url('data:image/svg+xml;utf8, ');
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-function:before {
+ content: 'M';
+ color: ' 96';
+ background-image: url('data:image/svg+xml;utf8, ');
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-property:before {
+ content: 'P'
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-constant:before {
+ content: 'C';
+ background-color: transparent;
+ background-image: url('data:image/svg+xml;utf8, ');
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-class:before {
+ content: 'C'
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-interface:before {
+ content: 'I'
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-trait:before {
+ content: 'T'
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-namespace:before {
+ content: 'N'
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-package:before {
+ content: 'P'
+}
+
+.phpdocumentor-table-of-contents .phpdocumentor-table-of-contents__entry.-enum:before {
+ content: 'E'
+}
+
+.phpdocumentor-table-of-contents dd {
+ font-style: italic;
+ margin-left: 2rem;
+}
+.phpdocumentor-element-found-in {
+ display: none;
+}
+
+@media (min-width: 550px) {
+ .phpdocumentor-element-found-in {
+ display: block;
+ font-size: var(--text-sm);
+ color: gray;
+ margin-bottom: 1rem;
+ }
+}
+
+@media (min-width: 1200px) {
+ .phpdocumentor-element-found-in {
+ position: absolute;
+ top: var(--spacing-sm);
+ right: var(--spacing-sm);
+ font-size: var(--text-sm);
+ margin-bottom: 0;
+ }
+}
+
+.phpdocumentor-element-found-in .phpdocumentor-element-found-in__source {
+ flex: 0 1 auto;
+ display: inline-flex;
+}
+
+.phpdocumentor-element-found-in .phpdocumentor-element-found-in__source:after {
+ width: 1.25rem;
+ height: 1.25rem;
+ line-height: 1.25rem;
+ background: transparent url('data:image/svg+xml;utf8, ') no-repeat center center;
+ content: '';
+ left: 0;
+ border-radius: 50%;
+ font-weight: 600;
+ text-align: center;
+ font-size: .75rem;
+ margin-top: .2rem;
+}
+.phpdocumentor-class-graph {
+ width: 100%; height: 600px; border:1px solid black; overflow: hidden
+}
+
+.phpdocumentor-class-graph__graph {
+ width: 100%;
+}
+.phpdocumentor-tag-list__definition {
+ display: flex;
+}
+
+.phpdocumentor-tag-link {
+ margin-right: var(--spacing-sm);
+}
diff --git a/docs/api/files/src-aliases.html b/docs/api/files/src-aliases.html
new file mode 100644
index 0000000..d204c55
--- /dev/null
+++ b/docs/api/files/src-aliases.html
@@ -0,0 +1,327 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ aliases.php
+
+ --------------------------------------------------------------------------
+
+
+
+
+
+
+
+
+ PROJECT
+
+
+
+
+
+
+
+ AUTHOR
+
+
+
+
+
+
+
+ LINK
+
+
+
+ : https://www.zuko.pro/
+
+
+
+
+ FILE
+
+
+
+
+
+
+
+ CREATED
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/files/src-contracts-formatterinterface.html b/docs/api/files/src-contracts-formatterinterface.html
new file mode 100644
index 0000000..16a7d3a
--- /dev/null
+++ b/docs/api/files/src-contracts-formatterinterface.html
@@ -0,0 +1,335 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FormatterInterface.php
+
+ --------------------------------------------------------------------------
+
+
+
+
+
+
+
+
+ PROJECT
+
+
+
+
+
+
+
+ AUTHOR
+
+
+
+
+
+
+
+ LINK
+
+
+
+ : https://www.zuko.pro/
+
+
+
+
+ FILE
+
+
+
+ : FormatterInterface.php
+
+
+
+
+ CREATED
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+ Interfaces
+
+
+
+
+ FormatterInterface Class FormatterInterface
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/files/src-excelexporter.html b/docs/api/files/src-excelexporter.html
new file mode 100644
index 0000000..ce543ae
--- /dev/null
+++ b/docs/api/files/src-excelexporter.html
@@ -0,0 +1,280 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ExcelExporter.php
+
+
+
+
+
+
+
+
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+
+ Classes
+
+
+
+
+ ExcelExporter Class ExcelExporter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/files/src-flex2cellserviceprovider.html b/docs/api/files/src-flex2cellserviceprovider.html
new file mode 100644
index 0000000..e9a8cec
--- /dev/null
+++ b/docs/api/files/src-flex2cellserviceprovider.html
@@ -0,0 +1,335 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Flex2CellServiceProvider.php
+
+ --------------------------------------------------------------------------
+
+
+
+
+
+
+
+
+ PROJECT
+
+
+
+
+
+
+
+ AUTHOR
+
+
+
+
+
+
+
+ LINK
+
+
+
+ : https://www.zuko.pro/
+
+
+
+
+ FILE
+
+
+
+ : Flex2CellServiceProvider.php
+
+
+
+
+ CREATED
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+
+ Classes
+
+
+
+
+ Flex2CellServiceProvider Class Flex2CellServiceProvider
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/files/src-traits-excelexportable.html b/docs/api/files/src-traits-excelexportable.html
new file mode 100644
index 0000000..4972823
--- /dev/null
+++ b/docs/api/files/src-traits-excelexportable.html
@@ -0,0 +1,335 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ExcelExportable.php
+
+ --------------------------------------------------------------------------
+
+
+
+
+
+
+
+
+ PROJECT
+
+
+
+
+
+
+
+ AUTHOR
+
+
+
+
+
+
+
+ LINK
+
+
+
+ : https://www.zuko.pro/
+
+
+
+
+ FILE
+
+
+
+
+
+
+
+ CREATED
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+
+
+ Traits
+
+
+
+
+ ExcelExportable Class ExcelExportable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/files/src-traits-hasexportattributes.html b/docs/api/files/src-traits-hasexportattributes.html
new file mode 100644
index 0000000..e1ff04f
--- /dev/null
+++ b/docs/api/files/src-traits-hasexportattributes.html
@@ -0,0 +1,335 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HasExportAttributes.php
+
+ --------------------------------------------------------------------------
+
+
+
+
+
+
+
+
+ PROJECT
+
+
+
+
+
+
+
+ AUTHOR
+
+
+
+
+
+
+
+ LINK
+
+
+
+ : https://www.zuko.pro/
+
+
+
+
+ FILE
+
+
+
+ : HasExportAttributes.php
+
+
+
+
+ CREATED
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+
+
+ Traits
+
+
+
+
+ HasExportAttributes Class HasExportAttributes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/files/src-traits-hasexportmerging.html b/docs/api/files/src-traits-hasexportmerging.html
new file mode 100644
index 0000000..61907cb
--- /dev/null
+++ b/docs/api/files/src-traits-hasexportmerging.html
@@ -0,0 +1,335 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HasExportMerging.php
+
+ --------------------------------------------------------------------------
+
+
+
+
+
+
+
+
+ PROJECT
+
+
+
+
+
+
+
+ AUTHOR
+
+
+
+
+
+
+
+ LINK
+
+
+
+ : https://www.zuko.pro/
+
+
+
+
+ FILE
+
+
+
+
+
+
+
+ CREATED
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+
+
+ Traits
+
+
+
+
+ HasExportMerging Class HasExportMerging
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/graphs/classes.html b/docs/api/graphs/classes.html
new file mode 100644
index 0000000..f0e4560
--- /dev/null
+++ b/docs/api/graphs/classes.html
@@ -0,0 +1,122 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/index.html b/docs/api/index.html
new file mode 100644
index 0000000..73320bb
--- /dev/null
+++ b/docs/api/index.html
@@ -0,0 +1,165 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Documentation
+
+
+
+
+ Table of Contents
+
+
+
+
+
+ Packages
+
+
+
+
+ Zuko
+
+
+
+ Namespaces
+
+
+
+
+ Zuko
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/indices/files.html b/docs/api/indices/files.html
new file mode 100644
index 0000000..f6925ff
--- /dev/null
+++ b/docs/api/indices/files.html
@@ -0,0 +1,146 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Files
+ A
+
+ E
+
+ F
+
+ H
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/js/search.js b/docs/api/js/search.js
new file mode 100644
index 0000000..093d6d0
--- /dev/null
+++ b/docs/api/js/search.js
@@ -0,0 +1,173 @@
+// Search module for phpDocumentor
+//
+// This module is a wrapper around fuse.js that will use a given index and attach itself to a
+// search form and to a search results pane identified by the following data attributes:
+//
+// 1. data-search-form
+// 2. data-search-results
+//
+// The data-search-form is expected to have a single input element of type 'search' that will trigger searching for
+// a series of results, were the data-search-results pane is expected to have a direct UL child that will be populated
+// with rendered results.
+//
+// The search has various stages, upon loading this stage the data-search-form receives the CSS class
+// 'phpdocumentor-search--enabled'; this indicates that JS is allowed and indices are being loaded. It is recommended
+// to hide the form by default and show it when it receives this class to achieve progressive enhancement for this
+// feature.
+//
+// After loading this module, it is expected to load a search index asynchronously, for example:
+//
+//
+//
+// In this script the generated index should attach itself to the search module using the `appendIndex` function. By
+// doing it like this the page will continue loading, unhindered by the loading of the search.
+//
+// After the page has fully loaded, and all these deferred indexes loaded, the initialization of the search module will
+// be called and the form will receive the class 'phpdocumentor-search--active', indicating search is ready. At this
+// point, the input field will also have it's 'disabled' attribute removed.
+var Search = (function () {
+ var fuse;
+ var index = [];
+ var options = {
+ shouldSort: true,
+ threshold: 0.6,
+ location: 0,
+ distance: 100,
+ maxPatternLength: 32,
+ minMatchCharLength: 1,
+ keys: [
+ "fqsen",
+ "name",
+ "summary",
+ "url"
+ ]
+ };
+
+ // Credit David Walsh (https://davidwalsh.name/javascript-debounce-function)
+ // Returns a function, that, as long as it continues to be invoked, will not
+ // be triggered. The function will be called after it stops being called for
+ // N milliseconds. If `immediate` is passed, trigger the function on the
+ // leading edge, instead of the trailing.
+ function debounce(func, wait, immediate) {
+ var timeout;
+
+ return function executedFunction() {
+ var context = this;
+ var args = arguments;
+
+ var later = function () {
+ timeout = null;
+ if (!immediate) func.apply(context, args);
+ };
+
+ var callNow = immediate && !timeout;
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ if (callNow) func.apply(context, args);
+ };
+ }
+
+ function close() {
+ // Start scroll prevention: https://css-tricks.com/prevent-page-scrolling-when-a-modal-is-open/
+ const scrollY = document.body.style.top;
+ document.body.style.position = '';
+ document.body.style.top = '';
+ window.scrollTo(0, parseInt(scrollY || '0') * -1);
+ // End scroll prevention
+
+ var form = document.querySelector('[data-search-form]');
+ var searchResults = document.querySelector('[data-search-results]');
+
+ form.classList.toggle('phpdocumentor-search--has-results', false);
+ searchResults.classList.add('phpdocumentor-search-results--hidden');
+ var searchField = document.querySelector('[data-search-form] input[type="search"]');
+ searchField.blur();
+ }
+
+ function search(event) {
+ // Start scroll prevention: https://css-tricks.com/prevent-page-scrolling-when-a-modal-is-open/
+ document.body.style.position = 'fixed';
+ document.body.style.top = `-${window.scrollY}px`;
+ // End scroll prevention
+
+ // prevent enter's from autosubmitting
+ event.stopPropagation();
+
+ var form = document.querySelector('[data-search-form]');
+ var searchResults = document.querySelector('[data-search-results]');
+ var searchResultEntries = document.querySelector('[data-search-results] .phpdocumentor-search-results__entries');
+
+ searchResultEntries.innerHTML = '';
+
+ if (!event.target.value) {
+ close();
+ return;
+ }
+
+ form.classList.toggle('phpdocumentor-search--has-results', true);
+ searchResults.classList.remove('phpdocumentor-search-results--hidden');
+ var results = fuse.search(event.target.value, {limit: 25});
+
+ results.forEach(function (result) {
+ var entry = document.createElement("li");
+ entry.classList.add("phpdocumentor-search-results__entry");
+ entry.innerHTML += '\n";
+ entry.innerHTML += '' + result.fqsen + " \n";
+ entry.innerHTML += '' + result.summary + '
';
+ searchResultEntries.appendChild(entry)
+ });
+ }
+
+ function appendIndex(added) {
+ index = index.concat(added);
+
+ // re-initialize search engine when appending an index after initialisation
+ if (typeof fuse !== 'undefined') {
+ fuse = new Fuse(index, options);
+ }
+ }
+
+ function init() {
+ fuse = new Fuse(index, options);
+
+ var form = document.querySelector('[data-search-form]');
+ var searchField = document.querySelector('[data-search-form] input[type="search"]');
+
+ var closeButton = document.querySelector('.phpdocumentor-search-results__close');
+ closeButton.addEventListener('click', function() { close() }.bind(this));
+
+ var searchResults = document.querySelector('[data-search-results]');
+ searchResults.addEventListener('click', function() { close() }.bind(this));
+
+ form.classList.add('phpdocumentor-search--active');
+
+ searchField.setAttribute('placeholder', 'Search (Press "/" to focus)');
+ searchField.removeAttribute('disabled');
+ searchField.addEventListener('keyup', debounce(search, 300));
+
+ window.addEventListener('keyup', function (event) {
+ if (event.key === '/') {
+ searchField.focus();
+ }
+ if (event.code === 'Escape') {
+ close();
+ }
+ }.bind(this));
+ }
+
+ return {
+ appendIndex,
+ init
+ }
+})();
+
+window.addEventListener('DOMContentLoaded', function () {
+ var form = document.querySelector('[data-search-form]');
+
+ // When JS is supported; show search box. Must be before including the search for it to take effect immediately
+ form.classList.add('phpdocumentor-search--enabled');
+});
+
+window.addEventListener('load', function () {
+ Search.init();
+});
diff --git a/docs/api/js/searchIndex.js b/docs/api/js/searchIndex.js
new file mode 100644
index 0000000..90244a8
--- /dev/null
+++ b/docs/api/js/searchIndex.js
@@ -0,0 +1,294 @@
+Search.appendIndex(
+ [
+ {
+ "fqsen": "\\Zuko\\Flex2Cell\\Contracts\\FormatterInterface",
+ "name": "FormatterInterface",
+ "summary": "Class\u0020FormatterInterface",
+ "url": "classes/Zuko-Flex2Cell-Contracts-FormatterInterface.html"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Contracts\\FormatterInterface\u003A\u003AformatValue\u0028\u0029",
+ "name": "formatValue",
+ "summary": "Format\u0020a\u0020value\u0020for\u0020export.",
+ "url": "classes/Zuko-Flex2Cell-Contracts-FormatterInterface.html#method_formatValue"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\ExcelExporter",
+ "name": "ExcelExporter",
+ "summary": "Class\u0020ExcelExporter",
+ "url": "classes/Zuko-Flex2Cell-ExcelExporter.html"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\ExcelExporter\u003A\u003Aexport\u0028\u0029",
+ "name": "export",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-ExcelExporter.html#method_export"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\ExcelExporter\u003A\u003Amake\u0028\u0029",
+ "name": "make",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-ExcelExporter.html#method_make"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Flex2CellServiceProvider",
+ "name": "Flex2CellServiceProvider",
+ "summary": "Class\u0020Flex2CellServiceProvider",
+ "url": "classes/Zuko-Flex2Cell-Flex2CellServiceProvider.html"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Flex2CellServiceProvider\u003A\u003Aregister\u0028\u0029",
+ "name": "register",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Flex2CellServiceProvider.html#method_register"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Flex2CellServiceProvider\u003A\u003Aboot\u0028\u0029",
+ "name": "boot",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Flex2CellServiceProvider.html#method_boot"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable",
+ "name": "ExcelExportable",
+ "summary": "Class\u0020ExcelExportable",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AsetData\u0028\u0029",
+ "name": "setData",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_setData"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AsetHeaders\u0028\u0029",
+ "name": "setHeaders",
+ "summary": "Set\u0020the\u0020headers\u0020to\u0020be\u0020displayed\u0020on\u0020the\u0020first\u0020row\u0020of\u0020the\u0020export.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_setHeaders"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AsetSubHeaders\u0028\u0029",
+ "name": "setSubHeaders",
+ "summary": "Set\u0020the\u0020sub\u0020headers\u0020to\u0020be\u0020displayed\u0020on\u0020the\u0020second\u0020row\u0020of\u0020the\u0020export.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_setSubHeaders"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AsetMapping\u0028\u0029",
+ "name": "setMapping",
+ "summary": "Set\u0020the\u0020mapping\u0020of\u0020header\u0020\u003D\u003E\u0020field\u0020names.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_setMapping"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AsetHiddens\u0028\u0029",
+ "name": "setHiddens",
+ "summary": "Set\u0020the\u0020fields\u0020which\u0020should\u0020not\u0020appear\u0020in\u0020the\u0020export.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_setHiddens"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AsetMetaSettings\u0028\u0029",
+ "name": "setMetaSettings",
+ "summary": "Set\u0020the\u0020meta\u0020settings\u0020of\u0020the\u0020export.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_setMetaSettings"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AsetChunkSize\u0028\u0029",
+ "name": "setChunkSize",
+ "summary": "Set\u0020the\u0020number\u0020of\u0020data\u0020rows\u0020to\u0020be\u0020processed\u0020in\u0020each\u0020chunk.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_setChunkSize"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AsetAppendMode\u0028\u0029",
+ "name": "setAppendMode",
+ "summary": "Set\u0020whether\u0020the\u0020export\u0020should\u0020append\u0020to\u0020an\u0020existing\u0020file\u0020or\u0020replace\u0020the\u0020file.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_setAppendMode"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AsetSkipHeader\u0028\u0029",
+ "name": "setSkipHeader",
+ "summary": "Set\u0020whether\u0020the\u0020export\u0020should\u0020write\u0020the\u0020header\u0020row\u0020or\u0020not.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_setSkipHeader"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003Aexport\u0028\u0029",
+ "name": "export",
+ "summary": "Export\u0020the\u0020data\u0020to\u0020an\u0020Excel\u0020file.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_export"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AwriteHeaders\u0028\u0029",
+ "name": "writeHeaders",
+ "summary": "Write\u0020the\u0020headers\u0020to\u0020the\u0020Excel\u0020sheet.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_writeHeaders"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AgetHeader\u0028\u0029",
+ "name": "getHeader",
+ "summary": "Get\u0020a\u0020header\u0020value\u0020from\u0020the\u0020headers\u0020array.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_getHeader"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AgetSubHeader\u0028\u0029",
+ "name": "getSubHeader",
+ "summary": "Get\u0020a\u0020sub\u002Dheader\u0020value\u0020from\u0020the\u0020sub\u0020headers\u0020array.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_getSubHeader"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AwriteRow\u0028\u0029",
+ "name": "writeRow",
+ "summary": "Write\u0020a\u0020single\u0020row\u0020of\u0020data\u0020to\u0020the\u0020spreadsheet.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_writeRow"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AgetValue\u0028\u0029",
+ "name": "getValue",
+ "summary": "Get\u0020a\u0020value\u0020from\u0020the\u0020data\u0020row\u0020for\u0020export.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_getValue"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AdataGet\u0028\u0029",
+ "name": "dataGet",
+ "summary": "Get\u0020an\u0020item\u0020from\u0020an\u0020array\u0020or\u0020object\u0020using\u0020\u0022dot\u0022\u0020notation.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_dataGet"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AformatValue\u0028\u0029",
+ "name": "formatValue",
+ "summary": "Format\u0020a\u0020value\u0020for\u0020export.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_formatValue"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AapplyMetaSettings\u0028\u0029",
+ "name": "applyMetaSettings",
+ "summary": "Apply\u0020the\u0020meta\u0020settings\u0020to\u0020the\u0020spreadsheet.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_applyMetaSettings"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AgetColumnLetter\u0028\u0029",
+ "name": "getColumnLetter",
+ "summary": "Get\u0020the\u0020column\u0020letter\u0020for\u0020a\u0020mapping\u0020key.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_getColumnLetter"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AgetMappingKeyFromHeader\u0028\u0029",
+ "name": "getMappingKeyFromHeader",
+ "summary": "Get\u0020the\u0020mapping\u0020key\u0020from\u0020a\u0020header.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_getMappingKeyFromHeader"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003AgetHeaderFromMappingKey\u0028\u0029",
+ "name": "getHeaderFromMappingKey",
+ "summary": "Get\u0020a\u0020header\u0020from\u0020a\u0020mapping\u0020key.",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_getHeaderFromMappingKey"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003Afirst\u0028\u0029",
+ "name": "first",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#method_first"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003A\u0024data",
+ "name": "data",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#property_data"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003A\u0024headers",
+ "name": "headers",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#property_headers"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003A\u0024subHeaders",
+ "name": "subHeaders",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#property_subHeaders"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003A\u0024mapping",
+ "name": "mapping",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#property_mapping"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003A\u0024hiddens",
+ "name": "hiddens",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#property_hiddens"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003A\u0024metaSettings",
+ "name": "metaSettings",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#property_metaSettings"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003A\u0024chunkSize",
+ "name": "chunkSize",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#property_chunkSize"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003A\u0024appendMode",
+ "name": "appendMode",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#property_appendMode"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003A\u0024skipHeader",
+ "name": "skipHeader",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#property_skipHeader"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\ExcelExportable\u003A\u003A\u0024columnLetters",
+ "name": "columnLetters",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Traits-ExcelExportable.html#property_columnLetters"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\HasExportAttributes",
+ "name": "HasExportAttributes",
+ "summary": "Class\u0020HasExportAttributes",
+ "url": "classes/Zuko-Flex2Cell-Traits-HasExportAttributes.html"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\HasExportAttributes\u003A\u003AsetFormatters\u0028\u0029",
+ "name": "setFormatters",
+ "summary": "Set\u0020the\u0020formatters\u0020to\u0020be\u0020used\u0020for\u0020formatting\u0020values\u0020when\u0020exporting.",
+ "url": "classes/Zuko-Flex2Cell-Traits-HasExportAttributes.html#method_setFormatters"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\HasExportAttributes\u003A\u003AformatValue\u0028\u0029",
+ "name": "formatValue",
+ "summary": "Format\u0020a\u0020value\u0020for\u0020export.",
+ "url": "classes/Zuko-Flex2Cell-Traits-HasExportAttributes.html#method_formatValue"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\HasExportAttributes\u003A\u003A\u0024formatters",
+ "name": "formatters",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Traits-HasExportAttributes.html#property_formatters"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\HasExportMerging",
+ "name": "HasExportMerging",
+ "summary": "Class\u0020HasExportMerging",
+ "url": "classes/Zuko-Flex2Cell-Traits-HasExportMerging.html"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\HasExportMerging\u003A\u003AsetColumnMergeRules\u0028\u0029",
+ "name": "setColumnMergeRules",
+ "summary": "Sets\u0020the\u0020column\u0020merge\u0020rules\u0020for\u0020the\u0020export.",
+ "url": "classes/Zuko-Flex2Cell-Traits-HasExportMerging.html#method_setColumnMergeRules"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\HasExportMerging\u003A\u003AsetRowMergeRules\u0028\u0029",
+ "name": "setRowMergeRules",
+ "summary": "Sets\u0020the\u0020row\u0020merge\u0020rules\u0020for\u0020the\u0020export.",
+ "url": "classes/Zuko-Flex2Cell-Traits-HasExportMerging.html#method_setRowMergeRules"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\HasExportMerging\u003A\u003AapplyMerging\u0028\u0029",
+ "name": "applyMerging",
+ "summary": "Applies\u0020both\u0020column\u0020and\u0020row\u0020merging\u0020rules\u0020to\u0020the\u0020given\u0020sheet.",
+ "url": "classes/Zuko-Flex2Cell-Traits-HasExportMerging.html#method_applyMerging"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\HasExportMerging\u003A\u003AapplyColumnMerging\u0028\u0029",
+ "name": "applyColumnMerging",
+ "summary": "Applies\u0020column\u0020merging\u0020rules\u0020to\u0020the\u0020given\u0020sheet.",
+ "url": "classes/Zuko-Flex2Cell-Traits-HasExportMerging.html#method_applyColumnMerging"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\HasExportMerging\u003A\u003AapplyRowMerging\u0028\u0029",
+ "name": "applyRowMerging",
+ "summary": "Applies\u0020row\u0020merging\u0020to\u0020the\u0020given\u0020sheet\u0020according\u0020to\u0020the\u0020row\u0020merge\u0020rules.",
+ "url": "classes/Zuko-Flex2Cell-Traits-HasExportMerging.html#method_applyRowMerging"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\HasExportMerging\u003A\u003A\u0024columnMergeRules",
+ "name": "columnMergeRules",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Traits-HasExportMerging.html#property_columnMergeRules"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits\\HasExportMerging\u003A\u003A\u0024rowMergeRules",
+ "name": "rowMergeRules",
+ "summary": "",
+ "url": "classes/Zuko-Flex2Cell-Traits-HasExportMerging.html#property_rowMergeRules"
+ }, {
+ "fqsen": "\\",
+ "name": "\\",
+ "summary": "",
+ "url": "namespaces/default.html"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Contracts",
+ "name": "Contracts",
+ "summary": "",
+ "url": "namespaces/zuko-flex2cell-contracts.html"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell",
+ "name": "Flex2Cell",
+ "summary": "",
+ "url": "namespaces/zuko-flex2cell.html"
+ }, {
+ "fqsen": "\\Zuko",
+ "name": "Zuko",
+ "summary": "",
+ "url": "namespaces/zuko.html"
+ }, {
+ "fqsen": "\\Zuko\\Flex2Cell\\Traits",
+ "name": "Traits",
+ "summary": "",
+ "url": "namespaces/zuko-flex2cell-traits.html"
+ } ]
+);
diff --git a/docs/api/js/template.js b/docs/api/js/template.js
new file mode 100644
index 0000000..4938329
--- /dev/null
+++ b/docs/api/js/template.js
@@ -0,0 +1,17 @@
+(function(){
+ window.addEventListener('load', () => {
+ const el = document.querySelector('.phpdocumentor-on-this-page__content')
+ if (!el) {
+ return;
+ }
+
+ const observer = new IntersectionObserver(
+ ([e]) => {
+ e.target.classList.toggle("-stuck", e.intersectionRatio < 1);
+ },
+ {threshold: [1]}
+ );
+
+ observer.observe(el);
+ })
+})();
diff --git a/docs/api/namespaces/default.html b/docs/api/namespaces/default.html
new file mode 100644
index 0000000..927b13a
--- /dev/null
+++ b/docs/api/namespaces/default.html
@@ -0,0 +1,270 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ API Documentation
+
+
+
+ Table of Contents
+
+
+
+
+
+
+ Namespaces
+
+
+
+
+ Zuko
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/namespaces/zuko-flex2cell-contracts.html b/docs/api/namespaces/zuko-flex2cell-contracts.html
new file mode 100644
index 0000000..a47bf8f
--- /dev/null
+++ b/docs/api/namespaces/zuko-flex2cell-contracts.html
@@ -0,0 +1,272 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Contracts
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+ Interfaces
+
+
+
+
+ FormatterInterface Class FormatterInterface
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/namespaces/zuko-flex2cell-traits.html b/docs/api/namespaces/zuko-flex2cell-traits.html
new file mode 100644
index 0000000..5ea5c37
--- /dev/null
+++ b/docs/api/namespaces/zuko-flex2cell-traits.html
@@ -0,0 +1,272 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/namespaces/zuko-flex2cell.html b/docs/api/namespaces/zuko-flex2cell.html
new file mode 100644
index 0000000..0afe16a
--- /dev/null
+++ b/docs/api/namespaces/zuko-flex2cell.html
@@ -0,0 +1,280 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/namespaces/zuko.html b/docs/api/namespaces/zuko.html
new file mode 100644
index 0000000..47ac8a0
--- /dev/null
+++ b/docs/api/namespaces/zuko.html
@@ -0,0 +1,270 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Zuko
+
+
+
+ Table of Contents
+
+
+
+
+
+
+ Namespaces
+
+
+
+
+ Flex2Cell
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/packages/Flex2Cell.html b/docs/api/packages/Flex2Cell.html
new file mode 100644
index 0000000..6e2dabe
--- /dev/null
+++ b/docs/api/packages/Flex2Cell.html
@@ -0,0 +1,266 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Flex2Cell
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/packages/Zuko-Flex2Cell-Contracts.html b/docs/api/packages/Zuko-Flex2Cell-Contracts.html
new file mode 100644
index 0000000..afc707c
--- /dev/null
+++ b/docs/api/packages/Zuko-Flex2Cell-Contracts.html
@@ -0,0 +1,272 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Contracts
+
+
+
+ Table of Contents
+
+
+
+
+
+
+
+ Interfaces
+
+
+
+
+ FormatterInterface Class FormatterInterface
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/packages/Zuko-Flex2Cell-Traits.html b/docs/api/packages/Zuko-Flex2Cell-Traits.html
new file mode 100644
index 0000000..f743c0d
--- /dev/null
+++ b/docs/api/packages/Zuko-Flex2Cell-Traits.html
@@ -0,0 +1,272 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/packages/Zuko-Flex2Cell.html b/docs/api/packages/Zuko-Flex2Cell.html
new file mode 100644
index 0000000..d7d5443
--- /dev/null
+++ b/docs/api/packages/Zuko-Flex2Cell.html
@@ -0,0 +1,280 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/packages/Zuko.html b/docs/api/packages/Zuko.html
new file mode 100644
index 0000000..ce9379a
--- /dev/null
+++ b/docs/api/packages/Zuko.html
@@ -0,0 +1,270 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Zuko
+
+
+
+ Table of Contents
+
+
+
+
+
+ Packages
+
+
+
+
+ Flex2Cell
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/packages/default.html b/docs/api/packages/default.html
new file mode 100644
index 0000000..fb715af
--- /dev/null
+++ b/docs/api/packages/default.html
@@ -0,0 +1,270 @@
+
+
+
+
+ Flex2Cell API Document
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ API Documentation
+
+
+
+ Table of Contents
+
+
+
+
+
+ Packages
+
+
+
+
+ Zuko
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/reports/deprecated.html b/docs/api/reports/deprecated.html
new file mode 100644
index 0000000..65ae44b
--- /dev/null
+++ b/docs/api/reports/deprecated.html
@@ -0,0 +1,138 @@
+
+
+
+
+ Flex2Cell API Document » Deprecated elements
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Deprecated
+
+
+
+ No deprecated elements have been found in this project.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/reports/errors.html b/docs/api/reports/errors.html
new file mode 100644
index 0000000..4441b32
--- /dev/null
+++ b/docs/api/reports/errors.html
@@ -0,0 +1,137 @@
+
+
+
+
+ Flex2Cell API Document » Compilation errors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Errors
+
+
+
No errors have been found in this project.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/reports/markers.html b/docs/api/reports/markers.html
new file mode 100644
index 0000000..68de227
--- /dev/null
+++ b/docs/api/reports/markers.html
@@ -0,0 +1,160 @@
+
+
+
+
+ Flex2Cell API Document » Markers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Markers
+
+
Table of Contents
+
+
+
+
HasExportAttributes.php
+
+
+
+ Type
+ Line
+ Description
+
+
+
+
+ TODO
+ 87
+ : support for wildcard keys
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/ExcelExporter.php b/src/ExcelExporter.php
index 562876d..fe51d80 100644
--- a/src/ExcelExporter.php
+++ b/src/ExcelExporter.php
@@ -22,7 +22,10 @@
/**
* Class ExcelExporter
- *
+ * @alias \Zuko\Flex2Cell\ExcelExporter \Zuko\FlexExcel\ExcelExporter
+ * @alias \Zuko\Flex2Cell\ExcelExporter \Zuko\FlexToExcel\ExcelExporter
+ * @alias \Zuko\Flex2Cell\ExcelExporter \Zuko\FlexibleExcelExport\ExcelExporter
+ * @alias \Zuko\Flex2Cell\ExcelExporter \Zuko\LaravelExcelExport\ExcelExporter
* @package Zuko\Flex2Cell
*/
class ExcelExporter
diff --git a/src/Flex2CellServiceProvider.php b/src/Flex2CellServiceProvider.php
index 08257c6..a15d845 100644
--- a/src/Flex2CellServiceProvider.php
+++ b/src/Flex2CellServiceProvider.php
@@ -32,15 +32,22 @@
/**
* Class Flex2CellServiceProvider
*
+ * @alias \Zuko\Flex2Cell\Flex2CellServiceProvider \Zuko\FlexExcel\Flex2CellServiceProvider
+ * @alias \Zuko\Flex2Cell\Flex2CellServiceProvider \Zuko\FlexToExcel\Flex2CellServiceProvider
+ * @alias \Zuko\Flex2Cell\Flex2CellServiceProvider \Zuko\FlexibleExcelExport\Flex2CellServiceProvider
+ * @alias \Zuko\Flex2Cell\Flex2CellServiceProvider \Zuko\LaravelExcelExport\Flex2CellServiceProvider
* @package Zuko\Flex2Cell
*/
-class Flex2CellServiceProvider
+class Flex2CellServiceProvider extends \Illuminate\Support\ServiceProvider
{
public function register()
{
- $this->app->bind('Flex2Cell', function ($app) {
- return new ExcelExporter();
- });
+ $names = ['LaravelExcelExport', 'Flex2Cell'];
+ foreach ($names as $name) {
+ $this->app->bind($name, function ($app) {
+ return new ExcelExporter();
+ });
+ }
}
public function boot() {}
diff --git a/src/Traits/ExcelExportable.php b/src/Traits/ExcelExportable.php
index d68a4dd..ccba36d 100644
--- a/src/Traits/ExcelExportable.php
+++ b/src/Traits/ExcelExportable.php
@@ -35,7 +35,7 @@
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
/**
- * Class ExcelExportable
+ * Trait ExcelExportable
*
* @package Zuko\Flex2Cell\Traits
*/
@@ -261,6 +261,7 @@ protected function writeHeaders($sheet)
{
$this->headerRowIndex = 1; // Start with assuming headers are in the first row
$columnIndex = 1;
+ // Loop through each header
foreach ($this->headers as $header) {
if (!in_array($header, $this->hiddens, true)) {
$displayHeader = $this->getHeader($header);
@@ -269,9 +270,18 @@ protected function writeHeaders($sheet)
$sheet->setCellValue([$columnIndex, $this->headerRowIndex + 1], $this->getSubHeader($header));
$this->headerRowIndex = 2; // If we have subheaders, main headers are now in row 2
}
+ // Apply bold styling to the headers
+ $sheet->getStyle([$columnIndex, 1])->getFont()->setBold(true);
+ if ($this->headerRowIndex === 2) {
+ // Apply bold styling to the subheaders
+ $sheet->getStyle($columnIndex, 2)->getFont()->setBold(true);
+ }
$columnIndex++;
}
}
+ // Freeze the top header row(s) to make them sticky when scrolling
+ $freezePaneRow = $this->headerRowIndex + 1; // If subheaders exist, freeze after row 2, else row 1
+ $sheet->freezePane([1, $freezePaneRow]);
}
/**
diff --git a/src/Traits/HasExportAttributes.php b/src/Traits/HasExportAttributes.php
index f630bab..153008d 100644
--- a/src/Traits/HasExportAttributes.php
+++ b/src/Traits/HasExportAttributes.php
@@ -32,7 +32,7 @@
use Zuko\Flex2Cell\Contracts\FormatterInterface;
/**
- * Class HasExportAttributes
+ * Trait HasExportAttributes
*
* @package Zuko\Flex2Cell\Traits
*/
@@ -78,7 +78,7 @@ public function setFormatters(array $formatters)
*
* @param string $mappingKey The key of the mapped column that is being exported.
* @param mixed $value The value that is being exported.
- * @param mixed $rowItem The current processing row item
+ * @param \Illuminate\Database\Eloquent\Model|mixed $rowItem The current processing row item
*
* @return mixed The formatted value.
*/
diff --git a/src/Traits/HasExportMerging.php b/src/Traits/HasExportMerging.php
index 01a0547..0b20cc6 100644
--- a/src/Traits/HasExportMerging.php
+++ b/src/Traits/HasExportMerging.php
@@ -32,7 +32,7 @@
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
/**
- * Class HasExportMerging
+ * Trait HasExportMerging
*
* @package Zuko\Flex2Cell\Traits
*/
@@ -41,6 +41,22 @@ trait HasExportMerging
protected $columnMergeRules = [];
protected $rowMergeRules = [];
+ /**
+ * Sets the column merge rules for the export.
+ *
+ * The `$rules` parameter must be an associative array of column merge rules.
+ * Each rule is an associative array with the following keys:
+ *
+ * - `start`: The starting column letter or index of the merge range.
+ * - `end`: The ending column letter or index of the merge range.
+ * - `shiftDown`: An optional boolean indicating if the merge should be shifted down to the row below the header row.
+ *
+ * If the `start` or `end` values are provided as integers, they will be converted to column letters.
+ *
+ * @param array $rules The column merge rules.
+ *
+ * @return static
+ */
public function setColumnMergeRules(array $rules)
{
foreach ($rules as &$rule) {
@@ -57,6 +73,16 @@ public function setColumnMergeRules(array $rules)
return $this;
}
+ /**
+ * Sets the row merge rules for the export.
+ *
+ * The `$rules` parameter can be either an associative array of column letters mapped to their respective field names,
+ * or a numeric array of field names. If the latter, the column letters will be automatically determined by the export.
+ *
+ * @param array $rules An associative array of column letters mapped to their respective field names, or a numeric array of field names.
+ *
+ * @return static
+ */
public function setRowMergeRules(array $rules)
{
foreach ($rules as $key => $rule) {
@@ -69,11 +95,29 @@ public function setRowMergeRules(array $rules)
return $this;
}
+
+ /**
+ * Applies both column and row merging rules to the given sheet.
+ *
+ * @param \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet $sheet The sheet to apply merging rules to.
+ *
+ * @return void
+ */
protected function applyMerging($sheet)
{
$this->applyColumnMerging($sheet);
$this->applyRowMerging($sheet);
}
+ /**
+ * Applies column merging rules to the given sheet.
+ *
+ * The rules are applied by either inserting a new row above the current header row
+ * and setting the merged header value, or by merging the cells at the current header row.
+ *
+ * @param \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet $sheet The sheet to apply column merging rules to.
+ *
+ * @return void
+ */
protected function applyColumnMerging($sheet)
{
$mergedRanges = [];
@@ -116,6 +160,19 @@ protected function applyColumnMerging($sheet)
}
}
+ /**
+ * Applies row merging to the given sheet according to the row merge rules.
+ *
+ * This method iterates over the rows of the sheet, and for each row, it
+ * checks if the value in the given column matches the previous row's value.
+ * If it does, it merges the cells in the given column from the start row
+ * to the current row. If it doesn't, it resets the start row to the current
+ * row and continues.
+ *
+ * @param \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet $sheet The sheet to apply row merging to.
+ *
+ * @return void
+ */
protected function applyRowMerging($sheet)
{
$lastRow = $sheet->getHighestRow();
diff --git a/src/aliases.php b/src/aliases.php
index 01b6655..9ce9d83 100644
--- a/src/aliases.php
+++ b/src/aliases.php
@@ -25,17 +25,25 @@
* @CREATED : 14:08 , 13/Oct/2024
*/
(static function () {
- $classes = [];
+ $classes = [
+ \Zuko\Flex2Cell\ExcelExporter::class,
+ \Zuko\Flex2Cell\Flex2CellServiceProvider::class,
+ ];
$namespaces = [
- 'Flex2cell',
'FlexExcel',
'FlexToExcel',
- 'ExcelFlexible',
+ 'FlexibleExcelExport',
+ 'LaravelExcelExport',
];
- foreach ($classes as $c) {
- foreach ($namespaces as $n) {
- $a = str_replace('Flex2Cell', $n, $c);
- class_alias($c, $a);
+
+ foreach ($classes as $originalClass) {
+ foreach ($namespaces as $namespace) {
+ $aliasClass = str_replace('Flex2Cell', $namespace, $originalClass);
+ class_alias($originalClass, $aliasClass);
+
+ /**
+ * @alias $aliasClass
+ */
}
}
})();