https://github.com/apsonex/font
Font
https://github.com/apsonex/font
Last synced: 2 months ago
JSON representation
Font
- Host: GitHub
- URL: https://github.com/apsonex/font
- Owner: apsonex
- License: mit
- Created: 2025-05-26T14:46:52.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2025-05-26T15:29:06.000Z (about 1 year ago)
- Last Synced: 2026-02-19T10:14:55.225Z (4 months ago)
- Language: PHP
- Size: 42 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Font Manager PHP Package
A simple PHP package to manage and search fonts from multiple providers.
Currently supports the **Bunny Fonts** provider with an easy way to list, search, and filter fonts.
## Features
- List fonts with pagination
- Search fonts by keyword
- Find fonts by key(s), family(ies), and type
- Extensible with multiple font providers
## Installation
```bash
composer require apsonex/font-manager
```
## Usage
```php
use Apsonex\Font\Font;
// Instantiate the font manager
$fontManager = Font::make();
// Select Bunny provider
$fontManager->bunny();
// List fonts (paginated)
$response = $fontManager->list(limit: 20, page: 1);
foreach ($response->fonts as $font) {
echo $font->family . PHP_EOL;
}
// Search fonts by keyword
$searchResponse = $fontManager->search('abo', limit: 20, page: 1);
// Find font by a single key
$font = $fontManager->findByKey('abel');
// Find fonts by multiple keys
$response = $fontManager->findByKeys(['abel', 'abeezee'], limit: 10);
// Find fonts by family
$response = $fontManager->findByFamily('Abel', limit: 10);
// Find fonts by multiple families
$response = $fontManager->findByFamilies(['Abel', 'Aboreto'], limit: 10);
// Find fonts by type (e.g., 'sans-serif')
// Use limit -1 to fetch all matches
$response = $fontManager->findByType('sans-serif', limit: -1);
```
## API Reference
### Font Manager `(Apsonex\Font\Font)`
- make(): static — Create a new instance
- bunny(): static — Use Bunny font provider
- useProvider(FontProviderInterface $provider): static — Use a custom font provider
- list(int $limit = 20, int $page = 1): FontResponse — List fonts paginated
- search(string $keyword, int $limit = 20, int $page = 1): FontResponse — Search fonts by keyword
- findByKey(string $key): ?FontDTO — Find a single font by key
- findByKeys(array $keys, int $limit = 20): FontResponse — Find fonts by keys
- findByFamily(string $family, int $limit = 20): FontResponse — Find fonts by family
- findByFamilies(array $families, int $limit = 20): FontResponse — Find fonts by families
- findByType(string $type, int $limit = -1): FontResponse — Find fonts by category/type
### FontDTO `(Apsonex\Font\FontDTO)`
- Represents a single font object with these properties:
- key (string): Unique font key
- provider (string): Provider name
- category (string): Font category (e.g., sans-serif)
- family (string): Font family name
- urlString (string): CSS font string identifier
The `FontDTO` class represents a single font item with key metadata used across the package.
| Property | Type | Description | Example |
| ----------- | ------ | ----------------------------------------------- | -------------------- |
| `key` | string | Unique identifier for the font | `"abeezee"` |
| `provider` | string | The font provider source | `"bunny"` |
| `category` | string | Font category/type (e.g., serif, sans-serif) | `"sans-serif"` |
| `family` | string | The font family name | `"ABeeZee"` |
| `urlString` | string | A URL-friendly CSS font string used for loading | `"abeezee:400,400i"` |
```php
use Apsonex\Font\FontDTO;
// Creating a FontDTO object (usually returned from provider methods)
$font = new FontDTO(
key: 'abeezee',
provider: 'bunny',
category: 'sans-serif',
family: 'ABeeZee',
urlString: 'abeezee:400,400i'
);
// Accessing properties
echo "Font Key: " . $font->key . PHP_EOL; // Output: abeezee
echo "Provider: " . $font->provider . PHP_EOL; // Output: bunny
echo "Category: " . $font->category . PHP_EOL; // Output: sans-serif
echo "Family: " . $font->family . PHP_EOL; // Output: ABeeZee
echo "CSS URL String: " . $font->urlString . PHP_EOL; // Output: abeezee:400,400i
```
## FontResponse `(Apsonex\Font\FontResponse)`
- Paginated font response containing:
- fonts (array of FontDTO)
- total (int) — total matched fonts
- limit (int) — items per page
- page (int) — current page number
## Testing
This package uses Pest PHP for testing.
```bash
./vendor/bin/pest
```
## Extending with other Providers
You can implement your own provider by creating a class that implements:
```php
use Apsonex\Font\Contracts\FontProviderInterface;
class YourProvider implements FontProviderInterface
{
public function list(int $limit, int $page): FontResponse { /*...*/ }
public function search(string $keyword, int $limit, int $page): FontResponse { /*...*/ }
public function findByKey(string $key): ?FontDTO { /*...*/ }
// Implement other methods from interface...
}
```
Then register it:
```php
$fontManager->useProvider(new YourProvider());
```
## License
MIT License © Apsonex Inc
## Contributing
Feel free to open issues and pull requests!