From 8e47b49e9a18eb99f8c10607579dad6c87eba19c Mon Sep 17 00:00:00 2001 From: Chirag Chhatrala <60499540+chiragchhatrala@users.noreply.github.com> Date: Fri, 8 Sep 2023 16:30:28 +0530 Subject: [PATCH] Improve Templates (#183) * Improve Templates * Fix test case * Update AI GenerateTemplate * update openai client and GPT completer * composer.lock * Update types and list json with script * Template changes * fix on draft template * Finish opnform templates --------- Co-authored-by: Forms Dev Co-authored-by: Julien Nahum --- app/Console/Commands/GenerateTemplate.php | 290 ++- .../Controllers/Forms/AiFormController.php | 1 - app/Http/Controllers/SitemapController.php | 4 +- app/Http/Controllers/TemplateController.php | 56 +- ...ateRequest.php => FormTemplateRequest.php} | 19 +- ...eResource.php => FormTemplateResource.php} | 11 +- app/Models/Template.php | 56 + app/Policies/TemplatePolicy.php | 26 +- app/Service/OpenAi/GptCompleter.php | 79 +- app/Service/OpenAi/Utils/JsonFixer.php | 7 +- app/Service/SeoMetaResolver.php | 10 +- composer.json | 2 +- composer.lock | 2047 +++++++++-------- config/services.php | 2 +- ...3_09_01_052507_add_fields_to_templates.php | 37 + package-lock.json | 18 + package.json | 1 + .../data/forms/templates/industries.json | 184 ++ resources/data/forms/templates/types.json | 324 +++ resources/js/components/common/Breadcrumb.vue | 75 +- .../templates/FormTemplateModal.vue | 182 ++ .../components/templates/QuestionsEditor.vue | 77 + .../pages/forms/CreateTemplateModal.vue | 70 - .../components/pages/forms/show/ExtraMenu.vue | 10 +- .../pages/templates/SingleTemplate.vue | 80 + .../pages/templates/TemplateTags.vue | 74 + .../pages/welcome/TemplatesSlider.vue | 70 + .../components/templates/QuestionsEditor.vue | 81 - resources/js/pages/templates/show.vue | 320 ++- resources/js/pages/templates/templates.vue | 172 +- resources/js/pages/welcome.vue | 5 +- resources/js/router/routes.js | 4 +- resources/js/store/modules/open/templates.js | 95 +- routes/api.php | 9 +- tailwind.config.js | 7 +- tests/Feature/TemplateTest.php | 6 +- 36 files changed, 3130 insertions(+), 1381 deletions(-) rename app/Http/Requests/Templates/{CreateTemplateRequest.php => FormTemplateRequest.php} (71%) rename app/Http/Resources/{TemplateResource.php => FormTemplateResource.php} (55%) create mode 100644 database/migrations/2023_09_01_052507_add_fields_to_templates.php create mode 100644 resources/data/forms/templates/industries.json create mode 100644 resources/data/forms/templates/types.json create mode 100644 resources/js/components/open/forms/components/templates/FormTemplateModal.vue create mode 100644 resources/js/components/open/forms/components/templates/QuestionsEditor.vue delete mode 100644 resources/js/components/pages/forms/CreateTemplateModal.vue create mode 100644 resources/js/components/pages/templates/SingleTemplate.vue create mode 100644 resources/js/components/pages/templates/TemplateTags.vue create mode 100644 resources/js/components/pages/welcome/TemplatesSlider.vue delete mode 100644 resources/js/components/templates/QuestionsEditor.vue diff --git a/app/Console/Commands/GenerateTemplate.php b/app/Console/Commands/GenerateTemplate.php index c16e211..193f2ce 100644 --- a/app/Console/Commands/GenerateTemplate.php +++ b/app/Console/Commands/GenerateTemplate.php @@ -24,8 +24,12 @@ class GenerateTemplate extends Command */ protected $description = 'Generates a new form template from a prompt'; + const MAX_RELATED_TEMPLATES = 8; + const FORM_STRUCTURE_PROMPT = <<This is a text block.

" + } + ``` + + Give me the valid JSON object only, representing the following form: "[REPLACE]" + Do not ask me for more information about required properties or types, only suggest me a form structure. EOD; const FORM_DESCRIPTION_PROMPT = <<setSystemMessage('You are a robot helping to generate forms.'); + ->setAiModel('gpt-3.5-turbo-16k') + ->useStreaming() + ->setSystemMessage('You are an assistant helping to generate forms.'); $completer->completeChat([ ["role" => "user", "content" => Str::of(self::FORM_STRUCTURE_PROMPT)->replace('[REPLACE]', $this->argument('prompt'))->toString()] - ], 3000); + ], 6000); $formData = $completer->getArray(); - // Now get description and QAs $formDescriptionPrompt = Str::of(self::FORM_DESCRIPTION_PROMPT)->replace('[REPLACE]', $this->argument('prompt'))->toString(); + $formShortDescription = $completer->completeChat([ + ["role" => "user", "content" => Str::of(self::FORM_SHORT_DESCRIPTION_PROMPT)->replace('[REPLACE]', $this->argument('prompt'))->toString()] + ])->getString(); + // If description is between quotes, remove quotes + $formShortDescription = Str::of($formShortDescription)->replaceMatches('/^"(.*)"$/', '$1')->toString(); + + // Get industry & types + $industry = $this->getIndustries($completer, $this->argument('prompt')); + $types = $this->getTypes($completer, $this->argument('prompt')); + + // Get Related Templates + $relatedTemplates = $this->getRelatedTemplates($industry, $types); + + // Now get description and QAs $formDescription = $completer->completeChat([ ["role" => "user", "content" => $formDescriptionPrompt] - ])->getString(); + ])->getHtml(); + + $formCoverKeywords = $completer->completeChat([ + ["role" => "user", "content" => $formDescriptionPrompt], + ["role" => "assistant", "content" => $formDescription], + ["role" => "user", "content" => self::FORM_IMG_KEYWORDS_PROMPT] + ])->getArray(); + $imageUrl = $this->getImageCoverUrl($formCoverKeywords['search_query']); + $formQAs = $completer->completeChat([ ["role" => "user", "content" => $formDescriptionPrompt], ["role" => "assistant", "content" => $formDescription], @@ -198,16 +269,22 @@ class GenerateTemplate extends Command ["role" => "user", "content" => self::FORM_TITLE_PROMPT] ])->getString(); - // Finally get keyworks for image cover - $formCoverKeyworks = $completer->completeChat([ - ["role" => "user", "content" => $formDescriptionPrompt], - ["role" => "assistant", "content" => $formDescription], - ["role" => "user", "content" => self::FORM_IMG_KEYWORDS_PROMPT] - ])->getArray(); - $imageUrl = $this->getImageCoverUrl($formCoverKeyworks['search_query']); - $template = $this->createFormTemplate($formData, $formTitle, $formDescription, $formQAs, $imageUrl); - $this->info('/templates/' . $template->slug); + $template = $this->createFormTemplate( + $formData, + $formTitle, + $formDescription, + $formShortDescription, + $formQAs, + $imageUrl, + $industry, + $types, + $relatedTemplates + ); + $this->info('/form-templates/' . $template->slug); + + // Set reverse related Templates + $this->setReverseRelatedTemplates($template); return Command::SUCCESS; } @@ -217,19 +294,81 @@ class GenerateTemplate extends Command */ private function getImageCoverUrl($searchQuery): ?string { - $url = 'https://api.unsplash.com/search/photos?query=' . urlencode($searchQuery) . '&client_id=' . config('services.unslash.access_key'); + $url = 'https://api.unsplash.com/search/photos?query=' . urlencode($searchQuery) . '&client_id=' . config('services.unsplash.access_key'); $response = Http::get($url)->json(); - if (isset($response['results'][0]['urls']['regular'])) { - return $response['results'][0]['urls']['regular']; + $photoIndex = rand(0, max(count($response['results']) - 1, 10)); + if (isset($response['results'][$photoIndex]['urls']['regular'])) { + return Str::of($response['results'][$photoIndex]['urls']['regular'])->replace('w=1080', 'w=600')->toString(); } return null; } - private function createFormTemplate(array $formData, string $formTitle, string $formDescription, array $formQAs, ?string $imageUrl) + private function getIndustries(GptCompleter $completer, string $formPrompt): array { - // Add property uuids + $industriesString = Template::getAllIndustries()->pluck('slug')->join(', '); + + return $completer->completeChat([ + ["role" => "user", "content" => Str::of(self::FORM_INDUSTRY_PROMPT) + ->replace('[REPLACE]', $formPrompt) + ->replace('[INDUSTRIES]', $industriesString) + ->toString()] + ])->getArray(); + } + + private function getTypes(GptCompleter $completer, string $formPrompt): array + { + $typesString = Template::getAllTypes()->pluck('slug')->join(', '); + + return $completer->completeChat([ + ["role" => "user", "content" => Str::of(self::FORM_TYPES_PROMPT) + ->replace('[REPLACE]', $formPrompt) + ->replace('[TYPES]', $typesString) + ->toString()] + ])->getArray(); + } + + private function getRelatedTemplates(array $industries, array $types): array + { + $templateScore = []; + Template::chunk(100, function ($otherTemplates) use ($industries, $types, &$templateScore) { + foreach ($otherTemplates as $otherTemplate) { + $industryOverlap = count(array_intersect($industries ?? [], $otherTemplate->industry ?? [])); + $typeOverlap = count(array_intersect($types ?? [], $otherTemplate->types ?? [])); + $score = $industryOverlap + $typeOverlap; + if ($score > 1) { + $templateScore[$otherTemplate->slug] = $score; + } + } + }); + arsort($templateScore); // Sort by Score + return array_slice(array_keys($templateScore), 0, self::MAX_RELATED_TEMPLATES); + } + + private function createFormTemplate( + array $formData, + string $formTitle, + string $formDescription, + string $formShortDescription, + array $formQAs, + ?string $imageUrl, + array $industry, + array $types, + array $relatedTemplates + ) + { + // Add property uuids, improve form with options foreach ($formData['properties'] as &$property) { - $property['id'] = Str::uuid()->toString(); + $property['id'] = Str::uuid()->toString(); // Column ID + + // Fix ratings + if ($property['type'] == 'number' && ($property['is_rating'] ?? false)) { + $property['rating_max_value'] = 5; + } + + if (($property['type'] == 'select' && count($property['select']['options']) <= 4) + || ($property['type'] == 'multi_select' && count($property['multi_select']['options']) <= 4)) { + $property['without_dropdown'] = true; + } } // Clean data @@ -238,9 +377,26 @@ class GenerateTemplate extends Command return Template::create([ 'name' => $formTitle, 'description' => $formDescription, + 'short_description' => $formShortDescription, 'questions' => $formQAs, 'structure' => $formData, 'image_url' => $imageUrl, + 'publicly_listed' => true, + 'industries' => $industry, + 'types' => $types, + 'related_templates' => $relatedTemplates ]); } + + private function setReverseRelatedTemplates(Template $newTemplate) + { + if (!$newTemplate || count($newTemplate->related_templates) === 0) return; + + $templates = Template::whereIn('slug', $newTemplate->related_templates)->get(); + foreach ($templates as $template) { + if (count($template->related_templates) < self::MAX_RELATED_TEMPLATES) { + $template->update(['related_templates' => array_merge($template->related_templates, [$newTemplate->slug])]); + } + } + } } diff --git a/app/Http/Controllers/Forms/AiFormController.php b/app/Http/Controllers/Forms/AiFormController.php index cc05295..8b16703 100644 --- a/app/Http/Controllers/Forms/AiFormController.php +++ b/app/Http/Controllers/Forms/AiFormController.php @@ -2,7 +2,6 @@ namespace App\Http\Controllers\Forms; -use App\Console\Commands\GenerateTemplate; use App\Http\Controllers\Controller; use App\Http\Requests\AiGenerateFormRequest; use App\Models\Forms\AI\AiFormCompletion; diff --git a/app/Http/Controllers/SitemapController.php b/app/Http/Controllers/SitemapController.php index b549e67..8596b1f 100644 --- a/app/Http/Controllers/SitemapController.php +++ b/app/Http/Controllers/SitemapController.php @@ -42,9 +42,9 @@ class SitemapController extends Controller private function addTemplatesUrls(Sitemap $sitemap) { - Template::chunk(100, function ($templates) use ($sitemap) { + Template::where('publicly_listed', true)->chunk(100, function ($templates) use ($sitemap) { foreach ($templates as $template) { - $sitemap->add($this->createUrl('/templates/' . $template->slug, 0.7)); + $sitemap->add($this->createUrl('/form-templates/' . $template->slug, 0.8)); } }); } diff --git a/app/Http/Controllers/TemplateController.php b/app/Http/Controllers/TemplateController.php index 9ac45d0..2f60c9b 100644 --- a/app/Http/Controllers/TemplateController.php +++ b/app/Http/Controllers/TemplateController.php @@ -3,19 +3,28 @@ namespace App\Http\Controllers; use App\Http\Controllers\Controller; -use App\Http\Requests\Templates\CreateTemplateRequest; -use App\Http\Resources\TemplateResource; -use Illuminate\Http\Request; +use App\Http\Requests\Templates\FormTemplateRequest; +use App\Http\Resources\FormTemplateResource; use App\Models\Template; +use Illuminate\Http\Request; class TemplateController extends Controller { - public function index() + public function index(Request $request) { - return TemplateResource::collection(Template::all()); + $limit = null; + if ($request->offsetExists('limit') && $request->get('limit') > 0) { + $limit = (int) $request->get('limit'); + } + return FormTemplateResource::collection( + Template::where('publicly_listed', true) + ->orderByDesc('created_at') + ->limit($limit) + ->get() + ); } - public function create(CreateTemplateRequest $request) + public function create(FormTemplateRequest $request) { $this->authorize('create', Template::class); @@ -24,8 +33,41 @@ class TemplateController extends Controller $template->save(); return $this->success([ - 'message' => 'Template created.', + 'message' => 'Template was created.', 'template_id' => $template->id ]); } + + public function update(FormTemplateRequest $request, string $id) + { + $template = Template::findOrFail($id); + $this->authorize('update', $template); + + $template->update($request->all()); + + return $this->success([ + 'message' => 'Template was updated.', + 'template_id' => $template->id, + 'data' => new FormTemplateResource($template) + ]); + } + + public function destroy($id) + { + $template = Template::findOrFail($id); + $this->authorize('delete', $template); + + $template->delete(); + + return $this->success([ + 'message' => 'Template was deleted.', + ]); + } + + public function show(string $slug) + { + return new FormTemplateResource( + Template::whereSlug($slug)->firstOrFail() + ); + } } diff --git a/app/Http/Requests/Templates/CreateTemplateRequest.php b/app/Http/Requests/Templates/FormTemplateRequest.php similarity index 71% rename from app/Http/Requests/Templates/CreateTemplateRequest.php rename to app/Http/Requests/Templates/FormTemplateRequest.php index f5123c3..89f3b73 100644 --- a/app/Http/Requests/Templates/CreateTemplateRequest.php +++ b/app/Http/Requests/Templates/FormTemplateRequest.php @@ -5,7 +5,7 @@ namespace App\Http\Requests\Templates; use App\Models\Template; use Illuminate\Foundation\Http\FormRequest; -class CreateTemplateRequest extends FormRequest +class FormTemplateRequest extends FormRequest { const IGNORED_KEYS = [ 'id', @@ -48,12 +48,21 @@ class CreateTemplateRequest extends FormRequest */ public function rules() { + $slugRule = ''; + if($this->id){ + $slugRule = ','.$this->id; + } return [ 'form' => 'required|array', + 'publicly_listed' => 'boolean', 'name' => 'required|string|max:60', - 'slug' => 'required|string|unique:templates', + 'slug' => 'required|string|alpha_dash|unique:templates,slug'.$slugRule, + 'short_description' => 'required|string|max:1000', 'description' => 'required|string|max:2000', 'image_url' => 'required|string', + 'types' => 'nullable|array', + 'industries' => 'nullable|array', + 'related_templates' => 'nullable|array', 'questions' => 'array', ]; } @@ -66,12 +75,18 @@ class CreateTemplateRequest extends FormRequest unset($structure[$key]); } } + return new Template([ + 'publicly_listed' => $this->publicly_listed, 'name' => $this->name, 'slug' => $this->slug, + 'short_description' => $this->short_description, 'description' => $this->description, 'image_url' => $this->image_url, 'structure' => $structure, + 'types' => $this->types ?? [], + 'industries' => $this->industries ?? [], + 'related_templates' => $this->related_templates ?? [], 'questions' => $this->questions ?? [] ]); } diff --git a/app/Http/Resources/TemplateResource.php b/app/Http/Resources/FormTemplateResource.php similarity index 55% rename from app/Http/Resources/TemplateResource.php rename to app/Http/Resources/FormTemplateResource.php index dd11577..e74778f 100644 --- a/app/Http/Resources/TemplateResource.php +++ b/app/Http/Resources/FormTemplateResource.php @@ -2,10 +2,9 @@ namespace App\Http\Resources; -use App\Http\Requests\Templates\CreateTemplateRequest; use Illuminate\Http\Resources\Json\JsonResource; -class TemplateResource extends JsonResource +class FormTemplateResource extends JsonResource { /** * Transform the resource into an array. @@ -15,10 +14,8 @@ class TemplateResource extends JsonResource */ public function toArray($request) { - $data = parent::toArray($request); - foreach (CreateTemplateRequest::IGNORED_KEYS as $key) { - unset($data[$key]); - } - return $data; + return array_merge(parent::toArray($request), [ + 'is_new' => $this->created_at->isAfter(now()->subDays(7)) + ]); } } diff --git a/app/Models/Template.php b/app/Models/Template.php index db3d652..22d5c5f 100644 --- a/app/Models/Template.php +++ b/app/Models/Template.php @@ -4,6 +4,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Collection; use Spatie\Sluggable\HasSlug; use Spatie\Sluggable\SlugOptions; use Stevebauman\Purify\Facades\Purify; @@ -16,14 +17,28 @@ class Template extends Model 'name', 'slug', 'description', + 'short_description', 'image_url', 'structure', 'questions', + 'publicly_listed', + 'industries', + 'types', + 'related_templates' ]; protected $casts = [ 'structure' => 'array', 'questions' => 'array', + 'industries' => 'array', + 'types' => 'array', + 'related_templates' => 'array', + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + ]; + + protected $attributes = [ + 'publicly_listed' => false, ]; public function setDescriptionAttribute($value) @@ -32,6 +47,11 @@ class Template extends Model $this->attributes['description'] = Purify::clean($value); } + public function scopePubliclyListed($query) + { + return $this->where('publicly_listed', true); + } + /** * Config/options */ @@ -42,4 +62,40 @@ class Template extends Model ->generateSlugsFrom('name') ->saveSlugsTo('slug'); } + + public function getTypes(): Collection + { + return self::getAllTypes()->filter(function ($type) { + return in_array($type['slug'], $this->types); + }); + } + + public function getIndustries(): Collection + { + return self::getAllIndustries()->filter(function ($type) { + return in_array($type['slug'], $this->industries); + }); + } + + public static function getAllTypes(): Collection + { + return collect( + array_values( + json_decode( + file_get_contents(resource_path('data/forms/templates/types.json')), + true) + ) + )->values(); + } + + public static function getAllIndustries(): Collection + { + return collect( + array_values( + json_decode( + file_get_contents(resource_path('data/forms/templates/industries.json')), + true) + ) + )->values(); + } } diff --git a/app/Policies/TemplatePolicy.php b/app/Policies/TemplatePolicy.php index 935a181..9a46201 100644 --- a/app/Policies/TemplatePolicy.php +++ b/app/Policies/TemplatePolicy.php @@ -18,6 +18,30 @@ class TemplatePolicy */ public function create(User $user) { - return $user->template_editor; + return $user->admin || $user->template_editor; + } + + /** + * Determine whether the user can update the model. + * + * @param \App\Models\User $user + * @param \App\Models\Template $template + * @return mixed + */ + public function update(User $user, Template $template) + { + return $user->admin || $user->template_editor; + } + + /** + * Determine whether the user can delete the model. + * + * @param \App\Models\User $user + * @param \App\Models\Template $template + * @return mixed + */ + public function delete(User $user, Template $template) + { + return $user->admin || $user->template_editor; } } diff --git a/app/Service/OpenAi/GptCompleter.php b/app/Service/OpenAi/GptCompleter.php index 797c8c9..b15bfb1 100644 --- a/app/Service/OpenAi/GptCompleter.php +++ b/app/Service/OpenAi/GptCompleter.php @@ -14,7 +14,7 @@ use OpenAI\Exceptions\ErrorException; */ class GptCompleter { - const AI_MODEL = 'gpt-3.5-turbo'; + const AI_MODEL = 'gpt-4'; protected Client $openAi; protected mixed $result; @@ -22,19 +22,32 @@ class GptCompleter protected ?string $systemMessage; protected int $tokenUsed = 0; + protected bool $useStreaming = false; - public function __construct(string $apiKey, protected int $retries = 2) + public function __construct(string $apiKey, protected int $retries = 2, protected string $model = self::AI_MODEL) { $this->openAi = \OpenAI::client($apiKey); } + public function setAiModel(string $model) + { + $this->model = $model; + return $this; + } + public function setSystemMessage(string $systemMessage): self { $this->systemMessage = $systemMessage; return $this; } - public function completeChat(array $messages, int $maxTokens = 512, float $temperature = 0.81): self + public function useStreaming(): self + { + $this->useStreaming = true; + return $this; + } + + public function completeChat(array $messages, int $maxTokens = 4096, float $temperature = 0.81): self { $this->computeChatCompletion($messages, $maxTokens, $temperature) ->queryCompletion(); @@ -56,30 +69,40 @@ class GptCompleter public function getArray(): array { - $payload = Str::of($this->result)->trim(); - if ($payload->contains('```json')) { - $payload = $payload->after('```json')->before('```'); - } else if ($payload->contains('```')) { - $payload = $payload->after('```')->before('```'); - } - $payload = $payload->toString(); - $exception = null; - for ($i = 0; $i < $this->retries; $i++) { + $payload = Str::of($this->result)->trim(); + if ($payload->contains('```json')) { + $payload = $payload->after('```json')->before('```'); + } else if ($payload->contains('```')) { + $payload = $payload->after('```')->before('```'); + } + $payload = $payload->toString(); + $exception = null; + try { - $payload = (new JsonFixer)->fix($payload); - return json_decode($payload, true); + $newPayload = (new JsonFixer)->fix($payload); + return json_decode($newPayload, true); } catch (\Aws\Exception\InvalidJsonException $e) { $exception = $e; Log::warning("Invalid JSON, retrying:"); Log::warning($payload); - Log::warning(json_encode($this->completionInput)); $this->queryCompletion(); } } throw $exception; } + public function getHtml(): string + { + $payload = Str::of($this->result)->trim(); + if ($payload->contains('```html')) { + $payload = $payload->after('```html')->before('```'); + } else if ($payload->contains('```')) { + $payload = $payload->after('```')->before('```'); + } + return $payload->toString(); + } + public function getString(): string { return trim($this->result); @@ -90,7 +113,7 @@ class GptCompleter return $this->tokenUsed; } - protected function computeChatCompletion(array $messages, int $maxTokens = 512, float $temperature = 0.81): self + protected function computeChatCompletion(array $messages, int $maxTokens = 4096, float $temperature = 0.81): self { if (isset($this->systemMessage) && $messages[0]['role'] !== 'system') { $messages = array_merge([[ @@ -100,7 +123,7 @@ class GptCompleter } $completionInput = [ - 'model' => self::AI_MODEL, + 'model' => $this->model, 'messages' => $messages, 'max_tokens' => $maxTokens, 'temperature' => $temperature @@ -110,7 +133,12 @@ class GptCompleter return $this; } - protected function queryCompletion(): self { + protected function queryCompletion(): self + { + if ($this->useStreaming) { + return $this->queryStreamedCompletion(); + } + try { Log::debug("Open AI query: " . json_encode($this->completionInput)); $response = $this->openAi->chat()->create($this->completionInput); @@ -123,4 +151,19 @@ class GptCompleter $this->result = $response->choices[0]->message->content; return $this; } + + protected function queryStreamedCompletion(): self + { + Log::debug("Open AI query: " . json_encode($this->completionInput)); + $this->result = ''; + $response = $this->openAi->chat()->createStreamed($this->completionInput); + foreach ($response as $chunk) { + $choice = $chunk->choices[0]; + if (is_null($choice->delta->role)) { + $this->result .= $choice->delta->content; + } + } + + return $this; + } } diff --git a/app/Service/OpenAi/Utils/JsonFixer.php b/app/Service/OpenAi/Utils/JsonFixer.php index aa54557..80162a3 100644 --- a/app/Service/OpenAi/Utils/JsonFixer.php +++ b/app/Service/OpenAi/Utils/JsonFixer.php @@ -95,6 +95,7 @@ class JsonFixer */ public function fix($json) { + $json = preg_replace('/(?trim($json); if (empty($json) || $this->isValid($json)) { @@ -124,7 +125,7 @@ class JsonFixer protected function isValid($json) { - \json_decode($json); + \json_decode($json,true,512,JSON_INVALID_UTF8_SUBSTITUTE); return \JSON_ERROR_NONE === \json_last_error(); } @@ -265,6 +266,10 @@ class JsonFixer return $json; } + \Log::debug('Broken json received: ', [ + 'json' => $json + ]); + throw new InvalidJsonException( \sprintf('Could not fix JSON (tried padding `%s`)', \substr($tmpJson, $length), $json) ); diff --git a/app/Service/SeoMetaResolver.php b/app/Service/SeoMetaResolver.php index c5ec12e..95c3ac3 100644 --- a/app/Service/SeoMetaResolver.php +++ b/app/Service/SeoMetaResolver.php @@ -34,8 +34,8 @@ class SeoMetaResolver 'privacy_policy' => '/privacy-policy', 'terms_conditions' => '/terms-conditions', 'integrations' => '/integrations', - 'templates' => '/templates', - 'template_show' => '/templates/{slug}', + 'templates' => '/form-templates', + 'templates_show' => '/form-templates/{slug}', ]; /** @@ -62,7 +62,7 @@ class SeoMetaResolver ], 'templates' => [ 'title' => 'Templates', - 'description' => 'Free templates to quickly create beautiful forms for free!' + 'description' => 'Our collection of beautiful templates to create your own forms!' ], ]; @@ -182,13 +182,13 @@ class SeoMetaResolver return $meta; } - private function getTemplateShowMeta(): array + private function getTemplatesShowMeta(): array { $template = Template::whereSlug($this->patternData['slug'])->firstOrFail(); return [ 'title' => $template->name . $this->titleSuffix(), - 'description' => Str::of($template->description)->limit(160), + 'description' => Str::of($template->short_description)->limit(140) . ' | Customize any template and create your own form in minutes.', 'image' => $template->image_url ]; } diff --git a/composer.json b/composer.json index 7adda6c..a9f5391 100644 --- a/composer.json +++ b/composer.json @@ -36,7 +36,7 @@ "laravel/vapor-ui": "^1.5", "league/flysystem-aws-s3-v3": "^3.0", "maatwebsite/excel": "^3.1", - "openai-php/client": "^0.3.5", + "openai-php/client": "^0.6.4", "propaganistas/laravel-disposable-email": "^2.2", "sentry/sentry-laravel": "^2.11.0", "spatie/laravel-sitemap": "^6.0", diff --git a/composer.lock b/composer.lock index f065c7c..d3ac721 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "979998dc05b6e6ea1a4bc11dca1be4d4", + "content-hash": "9c7ea2e339a9d3c8ecae0a3ae7cc2883", "packages": [ { "name": "asm89/stack-cors", @@ -64,16 +64,16 @@ }, { "name": "aws/aws-crt-php", - "version": "v1.2.1", + "version": "v1.2.2", "source": { "type": "git", "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "1926277fc71d253dfa820271ac5987bdb193ccf5" + "reference": "2f1dc7b7eda080498be96a4a6d683a41583030e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/1926277fc71d253dfa820271ac5987bdb193ccf5", - "reference": "1926277fc71d253dfa820271ac5987bdb193ccf5", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/2f1dc7b7eda080498be96a4a6d683a41583030e9", + "reference": "2f1dc7b7eda080498be96a4a6d683a41583030e9", "shasum": "" }, "require": { @@ -112,22 +112,22 @@ ], "support": { "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.1" + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.2" }, - "time": "2023-03-24T20:22:19+00:00" + "time": "2023-07-20T16:49:55+00:00" }, { "name": "aws/aws-sdk-php", - "version": "3.263.12", + "version": "3.280.2", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "8b1c7b4f1f931ee480a31f37870bdc66f9c23248" + "reference": "d68b83b3bc39b70bf33e9b8b5166facbe3e4fe9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/8b1c7b4f1f931ee480a31f37870bdc66f9c23248", - "reference": "8b1c7b4f1f931ee480a31f37870bdc66f9c23248", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/d68b83b3bc39b70bf33e9b8b5166facbe3e4fe9b", + "reference": "d68b83b3bc39b70bf33e9b8b5166facbe3e4fe9b", "shasum": "" }, "require": { @@ -136,10 +136,11 @@ "ext-pcre": "*", "ext-simplexml": "*", "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", - "guzzlehttp/promises": "^1.4.0", - "guzzlehttp/psr7": "^1.8.5 || ^2.3", + "guzzlehttp/promises": "^1.4.0 || ^2.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", "mtdowling/jmespath.php": "^2.6", - "php": ">=5.5" + "php": ">=7.2.5", + "psr/http-message": "^1.0 || ^2.0" }, "require-dev": { "andrewsville/php-token-reflection": "^1.4", @@ -154,7 +155,7 @@ "ext-sockets": "*", "nette/neon": "^2.3", "paragonie/random_compat": ">= 2", - "phpunit/phpunit": "^4.8.35 || ^5.6.3 || ^9.5", + "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", "psr/cache": "^1.0", "psr/simple-cache": "^1.0", "sebastian/comparator": "^1.2.3 || ^4.0", @@ -206,9 +207,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.263.12" + "source": "https://github.com/aws/aws-sdk-php/tree/3.280.2" }, - "time": "2023-04-17T18:22:13+00:00" + "time": "2023-09-01T18:06:10+00:00" }, { "name": "brick/math", @@ -333,16 +334,16 @@ }, { "name": "composer/semver", - "version": "3.3.2", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", "shasum": "" }, "require": { @@ -392,9 +393,9 @@ "versioning" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" + "source": "https://github.com/composer/semver/tree/3.4.0" }, "funding": [ { @@ -410,7 +411,7 @@ "type": "tidelift" } ], - "time": "2022-04-01T19:23:25+00:00" + "time": "2023-08-31T09:50:34+00:00" }, { "name": "dflydev/dot-access-data", @@ -582,16 +583,16 @@ }, { "name": "doctrine/dbal", - "version": "3.6.2", + "version": "3.6.6", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c" + "reference": "63646ffd71d1676d2f747f871be31b7e921c7864" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/b4bd1cfbd2b916951696d82e57d054394d84864c", - "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/63646ffd71d1676d2f747f871be31b7e921c7864", + "reference": "63646ffd71d1676d2f747f871be31b7e921c7864", "shasum": "" }, "require": { @@ -604,13 +605,14 @@ "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "11.1.0", + "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2022.3", - "phpstan/phpstan": "1.10.9", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "1.10.29", "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.6", + "phpunit/phpunit": "9.6.9", "psalm/plugin-phpunit": "0.18.4", + "slevomat/coding-standard": "8.13.1", "squizlabs/php_codesniffer": "3.7.2", "symfony/cache": "^5.4|^6.0", "symfony/console": "^4.4|^5.4|^6.0", @@ -674,7 +676,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.6.2" + "source": "https://github.com/doctrine/dbal/tree/3.6.6" }, "funding": [ { @@ -690,29 +692,33 @@ "type": "tidelift" } ], - "time": "2023-04-14T07:25:38+00:00" + "time": "2023-08-17T05:38:17+00:00" }, { "name": "doctrine/deprecations", - "version": "v1.0.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", + "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", "shasum": "" }, "require": { - "php": "^7.1|^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3" + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -731,9 +737,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + "source": "https://github.com/doctrine/deprecations/tree/v1.1.1" }, - "time": "2022-05-02T15:47:09+00:00" + "time": "2023-06-03T09:27:29+00:00" }, { "name": "doctrine/event-manager", @@ -828,28 +834,28 @@ }, { "name": "doctrine/inflector", - "version": "2.0.6", + "version": "2.0.8", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^10", + "doctrine/coding-standard": "^11.0", "phpstan/phpstan": "^1.8", "phpstan/phpstan-phpunit": "^1.1", "phpstan/phpstan-strict-rules": "^1.3", "phpunit/phpunit": "^8.5 || ^9.5", - "vimeo/psalm": "^4.25" + "vimeo/psalm": "^4.25 || ^5.4" }, "type": "library", "autoload": { @@ -899,7 +905,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.6" + "source": "https://github.com/doctrine/inflector/tree/2.0.8" }, "funding": [ { @@ -915,7 +921,7 @@ "type": "tidelift" } ], - "time": "2022-10-20T09:10:12+00:00" + "time": "2023-06-16T13:40:37+00:00" }, { "name": "doctrine/lexer", @@ -1058,16 +1064,16 @@ }, { "name": "dragonmantank/cron-expression", - "version": "v3.3.2", + "version": "v3.3.3", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8" + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8", - "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", "shasum": "" }, "require": { @@ -1107,7 +1113,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" }, "funding": [ { @@ -1115,7 +1121,7 @@ "type": "github" } ], - "time": "2022-09-10T18:51:20+00:00" + "time": "2023-08-10T19:36:49+00:00" }, { "name": "egulias/email-validator", @@ -1530,22 +1536,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.5.1", + "version": "7.8.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "b964ca597e86b752cd994f27293e9fa6b6a95ed9" + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b964ca597e86b752cd994f27293e9fa6b6a95ed9", - "reference": "b964ca597e86b752cd994f27293e9fa6b6a95ed9", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1556,7 +1562,8 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, @@ -1570,9 +1577,6 @@ "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "7.5-dev" } }, "autoload": { @@ -1638,7 +1642,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.5.1" + "source": "https://github.com/guzzle/guzzle/tree/7.8.0" }, "funding": [ { @@ -1654,20 +1658,20 @@ "type": "tidelift" } ], - "time": "2023-04-17T16:30:08+00:00" + "time": "2023-08-27T10:20:53+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.2", + "version": "1.5.3", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "b94b2807d85443f9719887892882d0329d1e2598" + "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", - "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "url": "https://api.github.com/repos/guzzle/promises/zipball/67ab6e18aaa14d753cc148911d273f6e6cb6721e", + "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e", "shasum": "" }, "require": { @@ -1677,11 +1681,6 @@ "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, "autoload": { "files": [ "src/functions_include.php" @@ -1722,7 +1721,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.2" + "source": "https://github.com/guzzle/promises/tree/1.5.3" }, "funding": [ { @@ -1738,20 +1737,20 @@ "type": "tidelift" } ], - "time": "2022-08-28T14:55:35+00:00" + "time": "2023-05-21T12:31:43+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.5.0", + "version": "2.6.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6" + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727", "shasum": "" }, "require": { @@ -1838,7 +1837,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.5.0" + "source": "https://github.com/guzzle/psr7/tree/2.6.1" }, "funding": [ { @@ -1854,20 +1853,20 @@ "type": "tidelift" } ], - "time": "2023-04-17T16:11:26+00:00" + "time": "2023-08-27T10:13:57+00:00" }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.1", + "version": "v1.0.2", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2" + "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/b945d74a55a25a949158444f09ec0d3c120d69e2", - "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/61bf437fc2197f587f6857d3ff903a24f1731b5d", + "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d", "shasum": "" }, "require": { @@ -1875,15 +1874,11 @@ "symfony/polyfill-php80": "^1.17" }, "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", "phpunit/phpunit": "^8.5.19 || ^9.5.8", "uri-template/tests": "1.0.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { "psr-4": { "GuzzleHttp\\UriTemplate\\": "src" @@ -1922,7 +1917,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.1" + "source": "https://github.com/guzzle/uri-template/tree/v1.0.2" }, "funding": [ { @@ -1938,7 +1933,7 @@ "type": "tidelift" } ], - "time": "2021-10-07T12:57:01+00:00" + "time": "2023-08-27T10:19:19+00:00" }, { "name": "hashids/hashids", @@ -2263,32 +2258,32 @@ }, { "name": "jhumanj/laravel-model-stats", - "version": "v0.4.0", + "version": "v0.4.1", "source": { "type": "git", "url": "https://github.com/JhumanJ/laravel-model-stats.git", - "reference": "15080a9f5ba063209616278e54d1704dff6fa30f" + "reference": "88a47ed2a9dd784f2e4d70f30cf103d50bac5d0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JhumanJ/laravel-model-stats/zipball/15080a9f5ba063209616278e54d1704dff6fa30f", - "reference": "15080a9f5ba063209616278e54d1704dff6fa30f", + "url": "https://api.github.com/repos/JhumanJ/laravel-model-stats/zipball/88a47ed2a9dd784f2e4d70f30cf103d50bac5d0b", + "reference": "88a47ed2a9dd784f2e4d70f30cf103d50bac5d0b", "shasum": "" }, "require": { - "illuminate/contracts": "^8.37|^v9.0.0", - "illuminate/support": "^5.8|^6.0|^7.0|^8.0|^9.0", + "illuminate/contracts": "^8.0|^v9.0|^v10.0", + "illuminate/support": "^8.0|^9.0|^10.0", "laravel/tinker": "^1.0|^2.0", - "php": "^8.0", - "spatie/laravel-package-tools": "^1.4.3" + "php": "^8.0|^8.1|^8.2", + "spatie/laravel-package-tools": "^1.4" }, "require-dev": { - "brianium/paratest": "^6.2", - "nunomaduro/collision": "^5.3", - "orchestra/testbench": "^6.15", - "phpunit/phpunit": "^9.3", - "spatie/laravel-ray": "^1.20", - "vimeo/psalm": "^4.4" + "brianium/paratest": "^6.2|^7.0", + "nunomaduro/collision": "^5.3|^6.0|^7.0", + "orchestra/testbench": "^6.15|^7.0|^8.0", + "phpunit/phpunit": "^9.3|^10.0", + "spatie/laravel-ray": "^1.2", + "vimeo/psalm": "^4.4|^5.0" }, "type": "library", "extra": { @@ -2324,7 +2319,7 @@ ], "support": { "issues": "https://github.com/JhumanJ/laravel-model-stats/issues", - "source": "https://github.com/JhumanJ/laravel-model-stats/tree/v0.4.0" + "source": "https://github.com/JhumanJ/laravel-model-stats/tree/v0.4.1" }, "funding": [ { @@ -2332,7 +2327,7 @@ "type": "github" } ], - "time": "2022-05-05T17:13:10+00:00" + "time": "2023-08-24T08:08:34+00:00" }, { "name": "laravel/cashier", @@ -2420,16 +2415,16 @@ }, { "name": "laravel/framework", - "version": "v9.52.6", + "version": "v9.52.15", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "16454f17a2585c4589f721655fc5133270aadf8c" + "reference": "e3350e87a52346af9cc655a3012d2175d2d05ad7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/16454f17a2585c4589f721655fc5133270aadf8c", - "reference": "16454f17a2585c4589f721655fc5133270aadf8c", + "url": "https://api.github.com/repos/laravel/framework/zipball/e3350e87a52346af9cc655a3012d2175d2d05ad7", + "reference": "e3350e87a52346af9cc655a3012d2175d2d05ad7", "shasum": "" }, "require": { @@ -2614,20 +2609,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-04-18T13:44:55+00:00" + "time": "2023-08-08T14:28:40+00:00" }, { "name": "laravel/horizon", - "version": "v5.15.0", + "version": "v5.19.2", "source": { "type": "git", "url": "https://github.com/laravel/horizon.git", - "reference": "b49be302566365e0e4d517aac9995a8fe20b580e" + "reference": "16f2c0e00e5b0b9a3f85e95f6022b6dc0476993d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/horizon/zipball/b49be302566365e0e4d517aac9995a8fe20b580e", - "reference": "b49be302566365e0e4d517aac9995a8fe20b580e", + "url": "https://api.github.com/repos/laravel/horizon/zipball/16f2c0e00e5b0b9a3f85e95f6022b6dc0476993d", + "reference": "16f2c0e00e5b0b9a3f85e95f6022b6dc0476993d", "shasum": "" }, "require": { @@ -2690,22 +2685,22 @@ ], "support": { "issues": "https://github.com/laravel/horizon/issues", - "source": "https://github.com/laravel/horizon/tree/v5.15.0" + "source": "https://github.com/laravel/horizon/tree/v5.19.2" }, - "time": "2023-03-07T17:45:21+00:00" + "time": "2023-08-29T13:37:54+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.3.0", + "version": "v1.3.1", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37" + "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", - "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/e5a3057a5591e1cfe8183034b0203921abe2c902", + "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902", "shasum": "" }, "require": { @@ -2752,20 +2747,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2023-01-30T18:31:20+00:00" + "time": "2023-07-14T13:56:28+00:00" }, { "name": "laravel/socialite", - "version": "v5.6.1", + "version": "v5.8.1", "source": { "type": "git", "url": "https://github.com/laravel/socialite.git", - "reference": "a14a177f2cc71d8add71e2b19e00800e83bdda09" + "reference": "9989b4530331597fae811bca240bf4e8f15e804b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/a14a177f2cc71d8add71e2b19e00800e83bdda09", - "reference": "a14a177f2cc71d8add71e2b19e00800e83bdda09", + "url": "https://api.github.com/repos/laravel/socialite/zipball/9989b4530331597fae811bca240bf4e8f15e804b", + "reference": "9989b4530331597fae811bca240bf4e8f15e804b", "shasum": "" }, "require": { @@ -2780,6 +2775,7 @@ "require-dev": { "mockery/mockery": "^1.0", "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0|^8.0", + "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^8.0|^9.3" }, "type": "library", @@ -2821,20 +2817,20 @@ "issues": "https://github.com/laravel/socialite/issues", "source": "https://github.com/laravel/socialite" }, - "time": "2023-01-20T15:42:35+00:00" + "time": "2023-08-21T13:06:52+00:00" }, { "name": "laravel/tinker", - "version": "v2.8.1", + "version": "v2.8.2", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "04a2d3bd0d650c0764f70bf49d1ee39393e4eb10" + "reference": "b936d415b252b499e8c3b1f795cd4fc20f57e1f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/04a2d3bd0d650c0764f70bf49d1ee39393e4eb10", - "reference": "04a2d3bd0d650c0764f70bf49d1ee39393e4eb10", + "url": "https://api.github.com/repos/laravel/tinker/zipball/b936d415b252b499e8c3b1f795cd4fc20f57e1f3", + "reference": "b936d415b252b499e8c3b1f795cd4fc20f57e1f3", "shasum": "" }, "require": { @@ -2847,6 +2843,7 @@ }, "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^8.5.8|^9.3.3" }, "suggest": { @@ -2887,9 +2884,9 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.8.1" + "source": "https://github.com/laravel/tinker/tree/v2.8.2" }, - "time": "2023-02-15T16:40:09+00:00" + "time": "2023-08-15T14:27:00+00:00" }, { "name": "laravel/ui", @@ -2954,16 +2951,16 @@ }, { "name": "laravel/vapor-cli", - "version": "v1.55.3", + "version": "v1.59.1", "source": { "type": "git", "url": "https://github.com/laravel/vapor-cli.git", - "reference": "562c28004f8609e728e2b5d1e85e46d2df006d2d" + "reference": "dfde3ad406717dd352386e92f11459160614c46b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/vapor-cli/zipball/562c28004f8609e728e2b5d1e85e46d2df006d2d", - "reference": "562c28004f8609e728e2b5d1e85e46d2df006d2d", + "url": "https://api.github.com/repos/laravel/vapor-cli/zipball/dfde3ad406717dd352386e92f11459160614c46b", + "reference": "dfde3ad406717dd352386e92f11459160614c46b", "shasum": "" }, "require": { @@ -3017,27 +3014,28 @@ "vapor" ], "support": { - "source": "https://github.com/laravel/vapor-cli/tree/v1.55.3" + "source": "https://github.com/laravel/vapor-cli/tree/v1.59.1" }, - "time": "2023-04-17T14:07:59+00:00" + "time": "2023-08-10T09:35:52+00:00" }, { "name": "laravel/vapor-core", - "version": "v2.29.0", + "version": "v2.32.1", "source": { "type": "git", "url": "https://github.com/laravel/vapor-core.git", - "reference": "e6a7806d73f8c1cd5bf5ba56aed0838bfa284a35" + "reference": "61adb35e746c070b3ddfc1a92201e96b4479c3af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/vapor-core/zipball/e6a7806d73f8c1cd5bf5ba56aed0838bfa284a35", - "reference": "e6a7806d73f8c1cd5bf5ba56aed0838bfa284a35", + "url": "https://api.github.com/repos/laravel/vapor-core/zipball/61adb35e746c070b3ddfc1a92201e96b4479c3af", + "reference": "61adb35e746c070b3ddfc1a92201e96b4479c3af", "shasum": "" }, "require": { "aws/aws-sdk-php": "^3.80", "guzzlehttp/guzzle": "^6.3|^7.0", + "guzzlehttp/promises": "^1.4.0", "hollodotme/fast-cgi-client": "^3.0", "illuminate/container": "^6.0|^7.0|^8.0|^9.0|^10.0", "illuminate/http": "^6.0|^7.0|^8.0|^9.0|^10.0", @@ -3046,6 +3044,7 @@ "monolog/monolog": "^1.12|^2.0|^3.2", "nyholm/psr7": "^1.0", "php": "^7.2|^8.0", + "psr/http-message": "^1.0", "riverline/multipart-parser": "^2.0.9", "symfony/process": "^4.3|^5.0|^6.0", "symfony/psr-http-message-bridge": "^1.0|^2.0" @@ -3068,6 +3067,9 @@ } }, "autoload": { + "files": [ + "src/debug.php" + ], "psr-4": { "Laravel\\Vapor\\": "src" } @@ -3082,16 +3084,16 @@ "email": "taylor@laravel.com" } ], - "description": "The kernel and invokation handlers for Laravel Vapor", + "description": "The kernel and invocation handlers for Laravel Vapor", "homepage": "https://github.com/laravel/vapor-core", "keywords": [ "laravel", "vapor" ], "support": { - "source": "https://github.com/laravel/vapor-core/tree/v2.29.0" + "source": "https://github.com/laravel/vapor-core/tree/v2.32.1" }, - "time": "2023-03-29T13:26:45+00:00" + "time": "2023-08-18T13:18:08+00:00" }, { "name": "laravel/vapor-ui", @@ -3160,20 +3162,20 @@ }, { "name": "lcobucci/clock", - "version": "3.0.0", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/lcobucci/clock.git", - "reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc" + "reference": "30a854ceb22bd87d83a7a4563b3f6312453945fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/clock/zipball/039ef98c6b57b101d10bd11d8fdfda12cbd996dc", - "reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/30a854ceb22bd87d83a7a4563b3f6312453945fc", + "reference": "30a854ceb22bd87d83a7a4563b3f6312453945fc", "shasum": "" }, "require": { - "php": "~8.1.0 || ~8.2.0", + "php": "~8.2.0", "psr/clock": "^1.0" }, "provide": { @@ -3181,13 +3183,13 @@ }, "require-dev": { "infection/infection": "^0.26", - "lcobucci/coding-standard": "^9.0", + "lcobucci/coding-standard": "^10.0.0", "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-deprecation-rules": "^1.1.1", - "phpstan/phpstan-phpunit": "^1.3.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^9.5.27" + "phpstan/phpstan": "^1.10.7", + "phpstan/phpstan-deprecation-rules": "^1.1.3", + "phpstan/phpstan-phpunit": "^1.3.10", + "phpstan/phpstan-strict-rules": "^1.5.0", + "phpunit/phpunit": "^10.0.17" }, "type": "library", "autoload": { @@ -3208,7 +3210,7 @@ "description": "Yet another clock abstraction", "support": { "issues": "https://github.com/lcobucci/clock/issues", - "source": "https://github.com/lcobucci/clock/tree/3.0.0" + "source": "https://github.com/lcobucci/clock/tree/3.1.0" }, "funding": [ { @@ -3220,7 +3222,7 @@ "type": "patreon" } ], - "time": "2022-12-19T15:00:24+00:00" + "time": "2023-03-20T19:12:25+00:00" }, { "name": "lcobucci/jwt", @@ -3298,16 +3300,16 @@ }, { "name": "league/commonmark", - "version": "2.4.0", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "d44a24690f16b8c1808bf13b1bd54ae4c63ea048" + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d44a24690f16b8c1808bf13b1bd54ae4c63ea048", - "reference": "d44a24690f16b8c1808bf13b1bd54ae4c63ea048", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5", "shasum": "" }, "require": { @@ -3400,7 +3402,7 @@ "type": "tidelift" } ], - "time": "2023-03-24T15:16:10+00:00" + "time": "2023-08-30T16:55:00+00:00" }, { "name": "league/config", @@ -3486,19 +3488,20 @@ }, { "name": "league/flysystem", - "version": "3.14.0", + "version": "3.15.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "e2a279d7f47d9098e479e8b21f7fb8b8de230158" + "reference": "a141d430414fcb8bf797a18716b09f759a385bed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/e2a279d7f47d9098e479e8b21f7fb8b8de230158", - "reference": "e2a279d7f47d9098e479e8b21f7fb8b8de230158", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a141d430414fcb8bf797a18716b09f759a385bed", + "reference": "a141d430414fcb8bf797a18716b09f759a385bed", "shasum": "" }, "require": { + "league/flysystem-local": "^3.0.0", "league/mime-type-detection": "^1.0.0", "php": "^8.0.2" }, @@ -3557,7 +3560,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.14.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.15.1" }, "funding": [ { @@ -3569,20 +3572,20 @@ "type": "github" } ], - "time": "2023-04-11T18:11:47+00:00" + "time": "2023-05-04T09:04:26+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "3.13.0", + "version": "3.15.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "8e04cbb403d4dfd5b73a2f8685f1df395bd177eb" + "reference": "d8de61ee10b6a607e7996cff388c5a3a663e8c8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/8e04cbb403d4dfd5b73a2f8685f1df395bd177eb", - "reference": "8e04cbb403d4dfd5b73a2f8685f1df395bd177eb", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/d8de61ee10b6a607e7996cff388c5a3a663e8c8a", + "reference": "d8de61ee10b6a607e7996cff388c5a3a663e8c8a", "shasum": "" }, "require": { @@ -3623,7 +3626,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues", - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.13.0" + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.15.0" }, "funding": [ { @@ -3635,27 +3638,87 @@ "type": "github" } ], - "time": "2023-03-16T14:29:01+00:00" + "time": "2023-05-02T20:02:14+00:00" }, { - "name": "league/glide", - "version": "2.2.3", + "name": "league/flysystem-local", + "version": "3.15.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/glide.git", - "reference": "446b1fc9f15101db52e8ddb7bec8cb16e814b244" + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "543f64c397fefdf9cfeac443ffb6beff602796b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/glide/zipball/446b1fc9f15101db52e8ddb7bec8cb16e814b244", - "reference": "446b1fc9f15101db52e8ddb7bec8cb16e814b244", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/543f64c397fefdf9cfeac443ffb6beff602796b3", + "reference": "543f64c397fefdf9cfeac443ffb6beff602796b3", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem-local/issues", + "source": "https://github.com/thephpleague/flysystem-local/tree/3.15.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2023-05-02T20:02:14+00:00" + }, + { + "name": "league/glide", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/glide.git", + "reference": "2ff92c8f1edc80b74e2d3c5efccfc7223f74d407" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/glide/zipball/2ff92c8f1edc80b74e2d3c5efccfc7223f74d407", + "reference": "2ff92c8f1edc80b74e2d3c5efccfc7223f74d407", "shasum": "" }, "require": { "intervention/image": "^2.7", "league/flysystem": "^2.0|^3.0", "php": "^7.2|^8.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0|^2.0" }, "require-dev": { "mockery/mockery": "^1.3.3", @@ -3698,32 +3761,32 @@ ], "support": { "issues": "https://github.com/thephpleague/glide/issues", - "source": "https://github.com/thephpleague/glide/tree/2.2.3" + "source": "https://github.com/thephpleague/glide/tree/2.3.0" }, - "time": "2023-02-14T06:15:26+00:00" + "time": "2023-07-08T06:26:07+00:00" }, { "name": "league/mime-type-detection", - "version": "1.11.0", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" + "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/a6dfb1194a2946fcdc1f38219445234f65b35c96", + "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96", "shasum": "" }, "require": { "ext-fileinfo": "*", - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.2", "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3" + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" }, "type": "library", "autoload": { @@ -3744,7 +3807,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.13.0" }, "funding": [ { @@ -3756,7 +3819,7 @@ "type": "tidelift" } ], - "time": "2022-04-17T13:12:02+00:00" + "time": "2023-08-05T12:09:49+00:00" }, { "name": "league/oauth1-client", @@ -3916,33 +3979,36 @@ }, { "name": "maennchen/zipstream-php", - "version": "v2.4.0", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/maennchen/ZipStream-PHP.git", - "reference": "3fa72e4c71a43f9e9118752a5c90e476a8dc9eb3" + "reference": "b8174494eda667f7d13876b4a7bfef0f62a7c0d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/3fa72e4c71a43f9e9118752a5c90e476a8dc9eb3", - "reference": "3fa72e4c71a43f9e9118752a5c90e476a8dc9eb3", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/b8174494eda667f7d13876b4a7bfef0f62a7c0d1", + "reference": "b8174494eda667f7d13876b4a7bfef0f62a7c0d1", "shasum": "" }, "require": { "ext-mbstring": "*", - "myclabs/php-enum": "^1.5", - "php": "^8.0", - "psr/http-message": "^1.0" + "ext-zlib": "*", + "php-64bit": "^8.1" }, "require-dev": { "ext-zip": "*", - "friendsofphp/php-cs-fixer": "^3.9", - "guzzlehttp/guzzle": "^6.5.3 || ^7.2.0", + "friendsofphp/php-cs-fixer": "^3.16", + "guzzlehttp/guzzle": "^7.5", "mikey179/vfsstream": "^1.6", - "php-coveralls/php-coveralls": "^2.4", - "phpunit/phpunit": "^8.5.8 || ^9.4.2", + "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": { @@ -3978,7 +4044,7 @@ ], "support": { "issues": "https://github.com/maennchen/ZipStream-PHP/issues", - "source": "https://github.com/maennchen/ZipStream-PHP/tree/v2.4.0" + "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.0" }, "funding": [ { @@ -3990,7 +4056,7 @@ "type": "open_collective" } ], - "time": "2022-12-08T12:29:14+00:00" + "time": "2023-06-21T14:59:35+00:00" }, { "name": "markbaker/complex", @@ -4101,26 +4167,24 @@ }, { "name": "masterminds/html5", - "version": "2.7.6", + "version": "2.8.1", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "897eb517a343a2281f11bc5556d6548db7d93947" + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/897eb517a343a2281f11bc5556d6548db7d93947", - "reference": "897eb517a343a2281f11bc5556d6548db7d93947", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f47dcf3c70c584de14f21143c55d9939631bc6cf", + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf", "shasum": "" }, "require": { - "ext-ctype": "*", "ext-dom": "*", - "ext-libxml": "*", "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7" + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" }, "type": "library", "extra": { @@ -4164,22 +4228,22 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.7.6" + "source": "https://github.com/Masterminds/html5-php/tree/2.8.1" }, - "time": "2022-08-18T16:18:26+00:00" + "time": "2023-05-10T11:58:31+00:00" }, { "name": "moneyphp/money", - "version": "v4.1.1", + "version": "v4.2.0", "source": { "type": "git", "url": "https://github.com/moneyphp/money.git", - "reference": "9682220995ffd396843be5b4ee1e5f2c2d6ecee2" + "reference": "f660ab7f1d7a4c2ffdd30f50c55ed2c95c26fc3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/moneyphp/money/zipball/9682220995ffd396843be5b4ee1e5f2c2d6ecee2", - "reference": "9682220995ffd396843be5b4ee1e5f2c2d6ecee2", + "url": "https://api.github.com/repos/moneyphp/money/zipball/f660ab7f1d7a4c2ffdd30f50c55ed2c95c26fc3f", + "reference": "f660ab7f1d7a4c2ffdd30f50c55ed2c95c26fc3f", "shasum": "" }, "require": { @@ -4253,9 +4317,9 @@ ], "support": { "issues": "https://github.com/moneyphp/money/issues", - "source": "https://github.com/moneyphp/money/tree/v4.1.1" + "source": "https://github.com/moneyphp/money/tree/v4.2.0" }, - "time": "2023-04-11T09:18:34+00:00" + "time": "2023-08-16T14:31:24+00:00" }, { "name": "monolog/monolog", @@ -4361,25 +4425,25 @@ }, { "name": "mtdowling/jmespath.php", - "version": "2.6.1", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb" + "reference": "bbb69a935c2cbb0c03d7f481a238027430f6440b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/9b87907a81b87bc76d19a7fb2d61e61486ee9edb", - "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/bbb69a935c2cbb0c03d7f481a238027430f6440b", + "reference": "bbb69a935c2cbb0c03d7f481a238027430f6440b", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0 || ^8.0", + "php": "^7.2.5 || ^8.0", "symfony/polyfill-mbstring": "^1.17" }, "require-dev": { - "composer/xdebug-handler": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^7.5.15" + "composer/xdebug-handler": "^3.0.3", + "phpunit/phpunit": "^8.5.33" }, "bin": [ "bin/jp.php" @@ -4387,7 +4451,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "2.7-dev" } }, "autoload": { @@ -4403,6 +4467,11 @@ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", @@ -4416,72 +4485,9 @@ ], "support": { "issues": "https://github.com/jmespath/jmespath.php/issues", - "source": "https://github.com/jmespath/jmespath.php/tree/2.6.1" + "source": "https://github.com/jmespath/jmespath.php/tree/2.7.0" }, - "time": "2021-06-14T00:11:39+00:00" - }, - { - "name": "myclabs/php-enum", - "version": "1.8.4", - "source": { - "type": "git", - "url": "https://github.com/myclabs/php-enum.git", - "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/php-enum/zipball/a867478eae49c9f59ece437ae7f9506bfaa27483", - "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.3 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.5", - "squizlabs/php_codesniffer": "1.*", - "vimeo/psalm": "^4.6.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "MyCLabs\\Enum\\": "src/" - }, - "classmap": [ - "stubs/Stringable.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP Enum contributors", - "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" - } - ], - "description": "PHP Enum implementation", - "homepage": "http://github.com/myclabs/php-enum", - "keywords": [ - "enum" - ], - "support": { - "issues": "https://github.com/myclabs/php-enum/issues", - "source": "https://github.com/myclabs/php-enum/tree/1.8.4" - }, - "funding": [ - { - "url": "https://github.com/mnapoli", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum", - "type": "tidelift" - } - ], - "time": "2022-08-04T09:53:51+00:00" + "time": "2023-08-25T10:54:48+00:00" }, { "name": "namshi/jose", @@ -4552,25 +4558,29 @@ }, { "name": "nesbot/carbon", - "version": "2.66.0", + "version": "2.69.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "496712849902241f04902033b0441b269effe001" + "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/496712849902241f04902033b0441b269effe001", - "reference": "496712849902241f04902033b0441b269effe001", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4308217830e4ca445583a37d1bf4aff4153fa81c", + "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c", "shasum": "" }, "require": { "ext-json": "*", "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", "symfony/polyfill-mbstring": "^1.0", "symfony/polyfill-php80": "^1.16", "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, + "provide": { + "psr/clock-implementation": "1.0" + }, "require-dev": { "doctrine/dbal": "^2.0 || ^3.1.4", "doctrine/orm": "^2.7", @@ -4650,25 +4660,25 @@ "type": "tidelift" } ], - "time": "2023-01-29T18:53:47+00:00" + "time": "2023-08-03T09:00:52+00:00" }, { "name": "nette/schema", - "version": "v1.2.3", + "version": "v1.2.4", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" + "reference": "c9ff517a53903b3d4e29ec547fb20feecb05b8ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", - "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "url": "https://api.github.com/repos/nette/schema/zipball/c9ff517a53903b3d4e29ec547fb20feecb05b8ab", + "reference": "c9ff517a53903b3d4e29ec547fb20feecb05b8ab", "shasum": "" }, "require": { "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": ">=7.1 <8.3" + "php": "7.1 - 8.3" }, "require-dev": { "nette/tester": "^2.3 || ^2.4", @@ -4710,26 +4720,26 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.3" + "source": "https://github.com/nette/schema/tree/v1.2.4" }, - "time": "2022-10-13T01:24:26+00:00" + "time": "2023-08-05T18:56:25+00:00" }, { "name": "nette/utils", - "version": "v4.0.0", + "version": "v4.0.1", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e" + "reference": "9124157137da01b1f5a5a22d6486cb975f26db7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/cacdbf5a91a657ede665c541eda28941d4b09c1e", - "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e", + "url": "https://api.github.com/repos/nette/utils/zipball/9124157137da01b1f5a5a22d6486cb975f26db7e", + "reference": "9124157137da01b1f5a5a22d6486cb975f26db7e", "shasum": "" }, "require": { - "php": ">=8.0 <8.3" + "php": ">=8.0 <8.4" }, "conflict": { "nette/finder": "<3", @@ -4737,7 +4747,7 @@ }, "require-dev": { "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "^2.4", + "nette/tester": "^2.5", "phpstan/phpstan": "^1.0", "tracy/tracy": "^2.9" }, @@ -4797,9 +4807,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.0" + "source": "https://github.com/nette/utils/tree/v4.0.1" }, - "time": "2023-02-02T10:41:53+00:00" + "time": "2023-07-30T15:42:21+00:00" }, { "name": "nicmart/tree", @@ -4849,16 +4859,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.15.4", + "version": "v4.17.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", - "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", "shasum": "" }, "require": { @@ -4899,9 +4909,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" }, - "time": "2023-03-05T19:49:14+00:00" + "time": "2023-08-13T19:53:39+00:00" }, { "name": "nunomaduro/termwind", @@ -4991,23 +5001,22 @@ }, { "name": "nyholm/psr7", - "version": "1.6.1", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/Nyholm/psr7.git", - "reference": "e874c8c4286a1e010fb4f385f3a55ac56a05cc93" + "reference": "3cb4d163b58589e47b35103e8e5e6a6a475b47be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Nyholm/psr7/zipball/e874c8c4286a1e010fb4f385f3a55ac56a05cc93", - "reference": "e874c8c4286a1e010fb4f385f3a55ac56a05cc93", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/3cb4d163b58589e47b35103e8e5e6a6a475b47be", + "reference": "3cb4d163b58589e47b35103e8e5e6a6a475b47be", "shasum": "" }, "require": { - "php": ">=7.1", - "php-http/message-factory": "^1.0", + "php": ">=7.2", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.1 || ^2.0" }, "provide": { "php-http/message-factory-implementation": "1.0", @@ -5016,14 +5025,15 @@ }, "require-dev": { "http-interop/http-factory-tests": "^0.9", + "php-http/message-factory": "^1.0", "php-http/psr7-integration-tests": "^1.0", - "phpunit/phpunit": "^7.5 || 8.5 || 9.4", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", "symfony/error-handler": "^4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.8-dev" } }, "autoload": { @@ -5053,7 +5063,7 @@ ], "support": { "issues": "https://github.com/Nyholm/psr7/issues", - "source": "https://github.com/Nyholm/psr7/tree/1.6.1" + "source": "https://github.com/Nyholm/psr7/tree/1.8.0" }, "funding": [ { @@ -5065,35 +5075,43 @@ "type": "github" } ], - "time": "2023-04-17T16:03:48+00:00" + "time": "2023-05-02T11:26:24+00:00" }, { "name": "openai-php/client", - "version": "v0.3.5", + "version": "v0.6.4", "source": { "type": "git", "url": "https://github.com/openai-php/client.git", - "reference": "0bb01e93fbd1f155af1c5a70caa53252dd13478f" + "reference": "6e0738a3f052fb0d27bd57136fff47db96248f65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/openai-php/client/zipball/0bb01e93fbd1f155af1c5a70caa53252dd13478f", - "reference": "0bb01e93fbd1f155af1c5a70caa53252dd13478f", + "url": "https://api.github.com/repos/openai-php/client/zipball/6e0738a3f052fb0d27bd57136fff47db96248f65", + "reference": "6e0738a3f052fb0d27bd57136fff47db96248f65", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "^7.5.0", - "php": "^8.1.0" + "php": "^8.1.0", + "php-http/discovery": "^1.19.0", + "php-http/multipart-stream-builder": "^1.3.0", + "psr/http-client": "^1.0.2", + "psr/http-client-implementation": "^1.0.1", + "psr/http-factory-implementation": "*", + "psr/http-message": "^1.1.0|^2.0.0" }, "require-dev": { - "laravel/pint": "^1.6.0", - "nunomaduro/collision": "^7.0.5", - "pestphp/pest": "^2.0.0", - "pestphp/pest-plugin-arch": "^2.0.0", + "guzzlehttp/guzzle": "^7.7.0", + "guzzlehttp/psr7": "^2.5.0", + "laravel/pint": "^1.10.3", + "nunomaduro/collision": "^7.7.0", + "pestphp/pest": "dev-develop as 2.6.2", + "pestphp/pest-plugin-arch": "^2.2.1", "pestphp/pest-plugin-mock": "^2.0.0", - "phpstan/phpstan": "^1.10.3", - "rector/rector": "^0.14.8", - "symfony/var-dumper": "^6.2.7" + "pestphp/pest-plugin-type-coverage": "^2.0.0", + "phpstan/phpstan": "^1.10.25", + "rector/rector": "^0.16.0", + "symfony/var-dumper": "^6.3.1" }, "type": "library", "autoload": { @@ -5112,6 +5130,9 @@ { "name": "Nuno Maduro", "email": "enunomaduro@gmail.com" + }, + { + "name": "Sandro Gehri" } ], "description": "OpenAI PHP is a supercharged PHP API client that allows you to interact with the Open AI API", @@ -5130,7 +5151,7 @@ ], "support": { "issues": "https://github.com/openai-php/client/issues", - "source": "https://github.com/openai-php/client/tree/v0.3.5" + "source": "https://github.com/openai-php/client/tree/v0.6.4" }, "funding": [ { @@ -5146,7 +5167,7 @@ "type": "github" } ], - "time": "2023-03-08T06:39:38+00:00" + "time": "2023-07-18T22:59:43+00:00" }, { "name": "phenx/php-font-lib", @@ -5240,23 +5261,22 @@ }, { "name": "php-http/client-common", - "version": "2.6.1", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/php-http/client-common.git", - "reference": "665bfc381bb910385f70391ed3eeefd0b7bbdd0d" + "reference": "880509727a447474d2a71b7d7fa5d268ddd3db4b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/client-common/zipball/665bfc381bb910385f70391ed3eeefd0b7bbdd0d", - "reference": "665bfc381bb910385f70391ed3eeefd0b7bbdd0d", + "url": "https://api.github.com/repos/php-http/client-common/zipball/880509727a447474d2a71b7d7fa5d268ddd3db4b", + "reference": "880509727a447474d2a71b7d7fa5d268ddd3db4b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0", "php-http/httplug": "^2.0", "php-http/message": "^1.6", - "php-http/message-factory": "^1.0", "psr/http-client": "^1.0", "psr/http-factory": "^1.0", "psr/http-message": "^1.0 || ^2.0", @@ -5304,22 +5324,22 @@ ], "support": { "issues": "https://github.com/php-http/client-common/issues", - "source": "https://github.com/php-http/client-common/tree/2.6.1" + "source": "https://github.com/php-http/client-common/tree/2.7.0" }, - "time": "2023-04-14T13:30:08+00:00" + "time": "2023-05-17T06:46:59+00:00" }, { "name": "php-http/discovery", - "version": "1.15.3", + "version": "1.19.1", "source": { "type": "git", "url": "https://github.com/php-http/discovery.git", - "reference": "3ccd28dd9fb34b52db946abea1b538568e34eae8" + "reference": "57f3de01d32085fea20865f9b16fb0e69347c39e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/3ccd28dd9fb34b52db946abea1b538568e34eae8", - "reference": "3ccd28dd9fb34b52db946abea1b538568e34eae8", + "url": "https://api.github.com/repos/php-http/discovery/zipball/57f3de01d32085fea20865f9b16fb0e69347c39e", + "reference": "57f3de01d32085fea20865f9b16fb0e69347c39e", "shasum": "" }, "require": { @@ -5327,7 +5347,8 @@ "php": "^7.1 || ^8.0" }, "conflict": { - "nyholm/psr7": "<1.0" + "nyholm/psr7": "<1.0", + "zendframework/zend-diactoros": "*" }, "provide": { "php-http/async-client-implementation": "*", @@ -5352,7 +5373,10 @@ "autoload": { "psr-4": { "Http\\Discovery\\": "src/" - } + }, + "exclude-from-classmap": [ + "src/Composer/Plugin.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5378,9 +5402,9 @@ ], "support": { "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.15.3" + "source": "https://github.com/php-http/discovery/tree/1.19.1" }, - "time": "2023-03-31T14:40:37+00:00" + "time": "2023-07-11T07:02:26+00:00" }, { "name": "php-http/httplug", @@ -5441,23 +5465,22 @@ }, { "name": "php-http/message", - "version": "1.14.0", + "version": "1.16.0", "source": { "type": "git", "url": "https://github.com/php-http/message.git", - "reference": "2ccee04a28c3d98eb3f2b85ce1e2fcff70c0e63b" + "reference": "47a14338bf4ebd67d317bf1144253d7db4ab55fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/2ccee04a28c3d98eb3f2b85ce1e2fcff70c0e63b", - "reference": "2ccee04a28c3d98eb3f2b85ce1e2fcff70c0e63b", + "url": "https://api.github.com/repos/php-http/message/zipball/47a14338bf4ebd67d317bf1144253d7db4ab55fd", + "reference": "47a14338bf4ebd67d317bf1144253d7db4ab55fd", "shasum": "" }, "require": { "clue/stream-filter": "^1.5", - "php": "^7.1 || ^8.0", - "php-http/message-factory": "^1.0.2", - "psr/http-message": "^1.0 || ^2.0" + "php": "^7.2 || ^8.0", + "psr/http-message": "^1.1 || ^2.0" }, "provide": { "php-http/message-factory-implementation": "1.0" @@ -5465,8 +5488,9 @@ "require-dev": { "ergebnis/composer-normalize": "^2.6", "ext-zlib": "*", - "guzzlehttp/psr7": "^1.0", - "laminas/laminas-diactoros": "^2.0", + "guzzlehttp/psr7": "^1.0 || ^2.0", + "laminas/laminas-diactoros": "^2.0 || ^3.0", + "php-http/message-factory": "^1.0.2", "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", "slim/slim": "^3.0" }, @@ -5504,9 +5528,9 @@ ], "support": { "issues": "https://github.com/php-http/message/issues", - "source": "https://github.com/php-http/message/tree/1.14.0" + "source": "https://github.com/php-http/message/tree/1.16.0" }, - "time": "2023-04-14T14:26:18+00:00" + "time": "2023-05-17T06:43:38+00:00" }, { "name": "php-http/message-factory", @@ -5560,8 +5584,65 @@ "issues": "https://github.com/php-http/message-factory/issues", "source": "https://github.com/php-http/message-factory/tree/1.1.0" }, + "abandoned": "psr/http-factory", "time": "2023-04-14T14:16:17+00:00" }, + { + "name": "php-http/multipart-stream-builder", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/multipart-stream-builder.git", + "reference": "f5938fd135d9fa442cc297dc98481805acfe2b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/f5938fd135d9fa442cc297dc98481805acfe2b6a", + "reference": "f5938fd135d9fa442cc297dc98481805acfe2b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/discovery": "^1.15", + "psr/http-factory-implementation": "^1.0" + }, + "require-dev": { + "nyholm/psr7": "^1.0", + "php-http/message": "^1.5", + "php-http/message-factory": "^1.0.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Message\\MultipartStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + } + ], + "description": "A builder class that help you create a multipart stream", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "multipart stream", + "stream" + ], + "support": { + "issues": "https://github.com/php-http/multipart-stream-builder/issues", + "source": "https://github.com/php-http/multipart-stream-builder/tree/1.3.0" + }, + "time": "2023-04-28T14:10:22+00:00" + }, { "name": "php-http/promise", "version": "1.1.0", @@ -5621,16 +5702,16 @@ }, { "name": "phpoffice/phpspreadsheet", - "version": "1.28.0", + "version": "1.29.0", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "6e81cf39bbd93ebc3a4e8150444c41e8aa9b769a" + "reference": "fde2ccf55eaef7e86021ff1acce26479160a0fa0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/6e81cf39bbd93ebc3a4e8150444c41e8aa9b769a", - "reference": "6e81cf39bbd93ebc3a4e8150444c41e8aa9b769a", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/fde2ccf55eaef7e86021ff1acce26479160a0fa0", + "reference": "fde2ccf55eaef7e86021ff1acce26479160a0fa0", "shasum": "" }, "require": { @@ -5648,7 +5729,7 @@ "ext-zip": "*", "ext-zlib": "*", "ezyang/htmlpurifier": "^4.15", - "maennchen/zipstream-php": "^2.1", + "maennchen/zipstream-php": "^2.1 || ^3.0", "markbaker/complex": "^3.0", "markbaker/matrix": "^3.0", "php": "^7.4 || ^8.0", @@ -5660,12 +5741,12 @@ "dealerdirect/phpcodesniffer-composer-installer": "dev-main", "dompdf/dompdf": "^1.0 || ^2.0", "friendsofphp/php-cs-fixer": "^3.2", - "mitoteam/jpgraph": "^10.2.4", + "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", + "phpunit/phpunit": "^8.5 || ^9.0 || ^10.0", "squizlabs/php_codesniffer": "^3.7", "tecnickcom/tcpdf": "^6.5" }, @@ -5720,9 +5801,9 @@ ], "support": { "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", - "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.28.0" + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.0" }, - "time": "2023-02-25T12:24:49+00:00" + "time": "2023-06-14T22:48:31+00:00" }, { "name": "phpoption/phpoption", @@ -5801,16 +5882,16 @@ }, { "name": "propaganistas/laravel-disposable-email", - "version": "2.2.6", + "version": "2.2.11", "source": { "type": "git", "url": "https://github.com/Propaganistas/Laravel-Disposable-Email.git", - "reference": "426181572a4938873d7e4823ac0ea1fd0c7fabb9" + "reference": "55889d2acdc3f4b9bbd20233840961bce30239c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Propaganistas/Laravel-Disposable-Email/zipball/426181572a4938873d7e4823ac0ea1fd0c7fabb9", - "reference": "426181572a4938873d7e4823ac0ea1fd0c7fabb9", + "url": "https://api.github.com/repos/Propaganistas/Laravel-Disposable-Email/zipball/55889d2acdc3f4b9bbd20233840961bce30239c1", + "reference": "55889d2acdc3f4b9bbd20233840961bce30239c1", "shasum": "" }, "require": { @@ -5864,7 +5945,7 @@ ], "support": { "issues": "https://github.com/Propaganistas/Laravel-Disposable-Email/issues", - "source": "https://github.com/Propaganistas/Laravel-Disposable-Email/tree/2.2.6" + "source": "https://github.com/Propaganistas/Laravel-Disposable-Email/tree/2.2.11" }, "funding": [ { @@ -5872,7 +5953,7 @@ "type": "github" } ], - "time": "2023-04-01T01:18:52+00:00" + "time": "2023-09-01T01:08:46+00:00" }, { "name": "psr/cache", @@ -6337,16 +6418,16 @@ }, { "name": "psy/psysh", - "version": "v0.11.15", + "version": "v0.11.20", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "5350ce0ec8ecf2c5b5cf554cd2496f97b444af85" + "reference": "0fa27040553d1d280a67a4393194df5228afea5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/5350ce0ec8ecf2c5b5cf554cd2496f97b444af85", - "reference": "5350ce0ec8ecf2c5b5cf554cd2496f97b444af85", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/0fa27040553d1d280a67a4393194df5228afea5b", + "reference": "0fa27040553d1d280a67a4393194df5228afea5b", "shasum": "" }, "require": { @@ -6407,9 +6488,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.15" + "source": "https://github.com/bobthecow/psysh/tree/v0.11.20" }, - "time": "2023-04-07T21:57:09+00:00" + "time": "2023-07-31T14:32:22+00:00" }, { "name": "ralouphie/getallheaders", @@ -6638,16 +6719,16 @@ }, { "name": "riverline/multipart-parser", - "version": "2.1.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/Riverline/multipart-parser.git", - "reference": "68e5499c54e455830bd3cfa4e5abe8c5d71360c8" + "reference": "2418bdfc2eab01e39bcffee808b1a365c166292a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Riverline/multipart-parser/zipball/68e5499c54e455830bd3cfa4e5abe8c5d71360c8", - "reference": "68e5499c54e455830bd3cfa4e5abe8c5d71360c8", + "url": "https://api.github.com/repos/Riverline/multipart-parser/zipball/2418bdfc2eab01e39bcffee808b1a365c166292a", + "reference": "2418bdfc2eab01e39bcffee808b1a365c166292a", "shasum": "" }, "require": { @@ -6688,9 +6769,9 @@ ], "support": { "issues": "https://github.com/Riverline/multipart-parser/issues", - "source": "https://github.com/Riverline/multipart-parser/tree/2.1.0" + "source": "https://github.com/Riverline/multipart-parser/tree/2.1.1" }, - "time": "2023-04-12T14:30:23+00:00" + "time": "2023-04-28T18:53:59+00:00" }, { "name": "sabberworm/php-css-parser", @@ -6747,21 +6828,21 @@ }, { "name": "sentry/sdk", - "version": "3.3.0", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php-sdk.git", - "reference": "d0678fc7274dbb03046ed05cb24eb92945bedf8e" + "reference": "cd91b752f07c4bab9fb3b173f81af68a78a78d6d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/d0678fc7274dbb03046ed05cb24eb92945bedf8e", - "reference": "d0678fc7274dbb03046ed05cb24eb92945bedf8e", + "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/cd91b752f07c4bab9fb3b173f81af68a78a78d6d", + "reference": "cd91b752f07c4bab9fb3b173f81af68a78a78d6d", "shasum": "" }, "require": { "http-interop/http-factory-guzzle": "^1.0", - "sentry/sentry": "^3.9", + "sentry/sentry": "^3.19", "symfony/http-client": "^4.3|^5.0|^6.0" }, "type": "metapackage", @@ -6788,7 +6869,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php-sdk/issues", - "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.3.0" + "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.5.0" }, "funding": [ { @@ -6800,26 +6881,26 @@ "type": "custom" } ], - "time": "2022-10-11T09:05:00+00:00" + "time": "2023-06-12T17:50:36+00:00" }, { "name": "sentry/sentry", - "version": "3.17.0", + "version": "3.21.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "95d2e932383cf684f77acff0d2a5aef5ad2f1933" + "reference": "624aafc22b84b089ffa43b71fb01e0096505ec4f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/95d2e932383cf684f77acff0d2a5aef5ad2f1933", - "reference": "95d2e932383cf684f77acff0d2a5aef5ad2f1933", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/624aafc22b84b089ffa43b71fb01e0096505ec4f", + "reference": "624aafc22b84b089ffa43b71fb01e0096505ec4f", "shasum": "" }, "require": { "ext-json": "*", "ext-mbstring": "*", - "guzzlehttp/promises": "^1.4", + "guzzlehttp/promises": "^1.5.3|^2.0", "jean85/pretty-package-versions": "^1.5|^2.0.4", "php": "^7.2|^8.0", "php-http/async-client-implementation": "^1.0", @@ -6827,6 +6908,7 @@ "php-http/discovery": "^1.15", "php-http/httplug": "^1.1|^2.0", "php-http/message": "^1.5", + "php-http/message-factory": "^1.1", "psr/http-factory": "^1.0", "psr/http-factory-implementation": "^1.0", "psr/log": "^1.0|^2.0|^3.0", @@ -6856,11 +6938,6 @@ "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.13.x-dev" - } - }, "autoload": { "files": [ "src/functions.php" @@ -6892,7 +6969,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/3.17.0" + "source": "https://github.com/getsentry/sentry-php/tree/3.21.0" }, "funding": [ { @@ -6904,7 +6981,7 @@ "type": "custom" } ], - "time": "2023-03-26T21:54:06+00:00" + "time": "2023-07-31T15:31:24+00:00" }, { "name": "sentry/sentry-laravel", @@ -6996,16 +7073,16 @@ }, { "name": "spatie/browsershot", - "version": "3.57.6", + "version": "3.58.2", "source": { "type": "git", "url": "https://github.com/spatie/browsershot.git", - "reference": "41382e013a00a62a7b2f2945a615d73e59b3a907" + "reference": "6503b2b429e10ff28a4cdb9fffaecc25ba6d032c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/browsershot/zipball/41382e013a00a62a7b2f2945a615d73e59b3a907", - "reference": "41382e013a00a62a7b2f2945a615d73e59b3a907", + "url": "https://api.github.com/repos/spatie/browsershot/zipball/6503b2b429e10ff28a4cdb9fffaecc25ba6d032c", + "reference": "6503b2b429e10ff28a4cdb9fffaecc25ba6d032c", "shasum": "" }, "require": { @@ -7050,7 +7127,7 @@ "webpage" ], "support": { - "source": "https://github.com/spatie/browsershot/tree/3.57.6" + "source": "https://github.com/spatie/browsershot/tree/3.58.2" }, "funding": [ { @@ -7058,7 +7135,7 @@ "type": "github" } ], - "time": "2023-01-03T19:12:47+00:00" + "time": "2023-07-27T07:51:54+00:00" }, { "name": "spatie/crawler", @@ -7130,16 +7207,16 @@ }, { "name": "spatie/image", - "version": "2.2.5", + "version": "2.2.7", "source": { "type": "git", "url": "https://github.com/spatie/image.git", - "reference": "c78e2dbdbced9c1673800e5b813cc8a8127bc5ac" + "reference": "2f802853aab017aa615224daae1588054b5ab20e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/image/zipball/c78e2dbdbced9c1673800e5b813cc8a8127bc5ac", - "reference": "c78e2dbdbced9c1673800e5b813cc8a8127bc5ac", + "url": "https://api.github.com/repos/spatie/image/zipball/2f802853aab017aa615224daae1588054b5ab20e", + "reference": "2f802853aab017aa615224daae1588054b5ab20e", "shasum": "" }, "require": { @@ -7148,7 +7225,7 @@ "ext-mbstring": "*", "league/glide": "^2.2.2", "php": "^8.0", - "spatie/image-optimizer": "^1.1", + "spatie/image-optimizer": "^1.7", "spatie/temporary-directory": "^1.0|^2.0", "symfony/process": "^3.0|^4.0|^5.0|^6.0" }, @@ -7183,7 +7260,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/image/tree/2.2.5" + "source": "https://github.com/spatie/image/tree/2.2.7" }, "funding": [ { @@ -7195,20 +7272,20 @@ "type": "github" } ], - "time": "2023-01-19T17:06:04+00:00" + "time": "2023-07-24T13:54:13+00:00" }, { "name": "spatie/image-optimizer", - "version": "1.6.4", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/spatie/image-optimizer.git", - "reference": "d997e01ba980b2769ddca2f00badd3b80c2a2512" + "reference": "af179994e2d2413e4b3ba2d348d06b4eaddbeb30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/d997e01ba980b2769ddca2f00badd3b80c2a2512", - "reference": "d997e01ba980b2769ddca2f00badd3b80c2a2512", + "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/af179994e2d2413e4b3ba2d348d06b4eaddbeb30", + "reference": "af179994e2d2413e4b3ba2d348d06b4eaddbeb30", "shasum": "" }, "require": { @@ -7248,22 +7325,22 @@ ], "support": { "issues": "https://github.com/spatie/image-optimizer/issues", - "source": "https://github.com/spatie/image-optimizer/tree/1.6.4" + "source": "https://github.com/spatie/image-optimizer/tree/1.7.1" }, - "time": "2023-03-10T08:43:19+00:00" + "time": "2023-07-27T07:57:32+00:00" }, { "name": "spatie/laravel-package-tools", - "version": "1.14.2", + "version": "1.16.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "bab62023a4745a61170ad5424184533685e73c2d" + "reference": "cc7c991555a37f9fa6b814aa03af73f88026a83d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/bab62023a4745a61170ad5424184533685e73c2d", - "reference": "bab62023a4745a61170ad5424184533685e73c2d", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/cc7c991555a37f9fa6b814aa03af73f88026a83d", + "reference": "cc7c991555a37f9fa6b814aa03af73f88026a83d", "shasum": "" }, "require": { @@ -7302,7 +7379,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.14.2" + "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.1" }, "funding": [ { @@ -7310,20 +7387,20 @@ "type": "github" } ], - "time": "2023-03-14T16:41:21+00:00" + "time": "2023-08-23T09:04:39+00:00" }, { "name": "spatie/laravel-sitemap", - "version": "6.2.5", + "version": "6.3.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-sitemap.git", - "reference": "903d9860b81b9c99622c930af628f9695f3283be" + "reference": "39844ec1836e76f9f090075c49b5ae2b5fea79f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-sitemap/zipball/903d9860b81b9c99622c930af628f9695f3283be", - "reference": "903d9860b81b9c99622c930af628f9695f3283be", + "url": "https://api.github.com/repos/spatie/laravel-sitemap/zipball/39844ec1836e76f9f090075c49b5ae2b5fea79f9", + "reference": "39844ec1836e76f9f090075c49b5ae2b5fea79f9", "shasum": "" }, "require": { @@ -7376,7 +7453,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/laravel-sitemap/tree/6.2.5" + "source": "https://github.com/spatie/laravel-sitemap/tree/6.3.1" }, "funding": [ { @@ -7384,20 +7461,20 @@ "type": "custom" } ], - "time": "2023-01-26T13:07:05+00:00" + "time": "2023-06-27T08:05:18+00:00" }, { "name": "spatie/laravel-sluggable", - "version": "3.4.2", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-sluggable.git", - "reference": "e62c6b5de2d41d900749a1b6d339d05c5f4974fa" + "reference": "041af2533fe2206715e9a4a9cad2cab6cb796655" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-sluggable/zipball/e62c6b5de2d41d900749a1b6d339d05c5f4974fa", - "reference": "e62c6b5de2d41d900749a1b6d339d05c5f4974fa", + "url": "https://api.github.com/repos/spatie/laravel-sluggable/zipball/041af2533fe2206715e9a4a9cad2cab6cb796655", + "reference": "041af2533fe2206715e9a4a9cad2cab6cb796655", "shasum": "" }, "require": { @@ -7435,7 +7512,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/laravel-sluggable/tree/3.4.2" + "source": "https://github.com/spatie/laravel-sluggable/tree/3.5.0" }, "funding": [ { @@ -7443,7 +7520,7 @@ "type": "github" } ], - "time": "2023-01-23T14:29:54+00:00" + "time": "2023-05-29T09:42:35+00:00" }, { "name": "spatie/laravel-webhook-server", @@ -7582,16 +7659,16 @@ }, { "name": "spatie/temporary-directory", - "version": "2.1.1", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/spatie/temporary-directory.git", - "reference": "e2818d871783d520b319c2d38dc37c10ecdcde20" + "reference": "0c804873f6b4042aa8836839dca683c7d0f71831" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/e2818d871783d520b319c2d38dc37c10ecdcde20", - "reference": "e2818d871783d520b319c2d38dc37c10ecdcde20", + "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/0c804873f6b4042aa8836839dca683c7d0f71831", + "reference": "0c804873f6b4042aa8836839dca683c7d0f71831", "shasum": "" }, "require": { @@ -7627,7 +7704,7 @@ ], "support": { "issues": "https://github.com/spatie/temporary-directory/issues", - "source": "https://github.com/spatie/temporary-directory/tree/2.1.1" + "source": "https://github.com/spatie/temporary-directory/tree/2.1.2" }, "funding": [ { @@ -7639,7 +7716,7 @@ "type": "github" } ], - "time": "2022-08-23T07:15:15+00:00" + "time": "2023-04-28T07:47:42+00:00" }, { "name": "stevebauman/purify", @@ -7769,23 +7846,23 @@ }, { "name": "symfony/console", - "version": "v6.2.8", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "3582d68a64a86ec25240aaa521ec8bc2342b369b" + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3582d68a64a86ec25240aaa521ec8bc2342b369b", - "reference": "3582d68a64a86ec25240aaa521ec8bc2342b369b", + "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/string": "^5.4|^6.0" }, "conflict": { @@ -7807,12 +7884,6 @@ "symfony/process": "^5.4|^6.0", "symfony/var-dumper": "^5.4|^6.0" }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, "type": "library", "autoload": { "psr-4": { @@ -7845,7 +7916,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.2.8" + "source": "https://github.com/symfony/console/tree/v6.3.4" }, "funding": [ { @@ -7861,20 +7932,20 @@ "type": "tidelift" } ], - "time": "2023-03-29T21:42:15+00:00" + "time": "2023-08-16T10:10:12+00:00" }, { "name": "symfony/css-selector", - "version": "v6.2.7", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "aedf3cb0f5b929ec255d96bbb4909e9932c769e0" + "reference": "883d961421ab1709877c10ac99451632a3d6fa57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/aedf3cb0f5b929ec255d96bbb4909e9932c769e0", - "reference": "aedf3cb0f5b929ec255d96bbb4909e9932c769e0", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/883d961421ab1709877c10ac99451632a3d6fa57", + "reference": "883d961421ab1709877c10ac99451632a3d6fa57", "shasum": "" }, "require": { @@ -7910,7 +7981,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.2.7" + "source": "https://github.com/symfony/css-selector/tree/v6.3.2" }, "funding": [ { @@ -7926,20 +7997,20 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2023-07-12T16:00:22+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.2.1", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", - "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { @@ -7948,7 +8019,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -7977,7 +8048,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" }, "funding": [ { @@ -7993,20 +8064,20 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:25:55+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/dom-crawler", - "version": "v6.2.9", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "328bc3795059651d2d4e462e8febdf7ec2d7a626" + "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/328bc3795059651d2d4e462e8febdf7ec2d7a626", - "reference": "328bc3795059651d2d4e462e8febdf7ec2d7a626", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", + "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", "shasum": "" }, "require": { @@ -8018,9 +8089,6 @@ "require-dev": { "symfony/css-selector": "^5.4|^6.0" }, - "suggest": { - "symfony/css-selector": "" - }, "type": "library", "autoload": { "psr-4": { @@ -8047,7 +8115,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.2.9" + "source": "https://github.com/symfony/dom-crawler/tree/v6.3.4" }, "funding": [ { @@ -8063,20 +8131,20 @@ "type": "tidelift" } ], - "time": "2023-04-11T16:03:19+00:00" + "time": "2023-08-01T07:43:40+00:00" }, { "name": "symfony/error-handler", - "version": "v6.2.9", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "e95f1273b3953c3b5e5341172dae838bacee11ee" + "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/e95f1273b3953c3b5e5341172dae838bacee11ee", - "reference": "e95f1273b3953c3b5e5341172dae838bacee11ee", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/85fd65ed295c4078367c784e8a5a6cee30348b7a", + "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a", "shasum": "" }, "require": { @@ -8084,8 +8152,11 @@ "psr/log": "^1|^2|^3", "symfony/var-dumper": "^5.4|^6.0" }, + "conflict": { + "symfony/deprecation-contracts": "<2.5" + }, "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-kernel": "^5.4|^6.0", "symfony/serializer": "^5.4|^6.0" }, @@ -8118,7 +8189,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.2.9" + "source": "https://github.com/symfony/error-handler/tree/v6.3.2" }, "funding": [ { @@ -8134,28 +8205,29 @@ "type": "tidelift" } ], - "time": "2023-04-11T16:03:19+00:00" + "time": "2023-07-16T17:05:46+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.2.8", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339" + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/04046f35fd7d72f9646e721fc2ecb8f9c67d3339", - "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^2|^3" + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4" + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", @@ -8168,13 +8240,9 @@ "symfony/error-handler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/stopwatch": "^5.4|^6.0" }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, "type": "library", "autoload": { "psr-4": { @@ -8201,7 +8269,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.8" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" }, "funding": [ { @@ -8217,33 +8285,30 @@ "type": "tidelift" } ], - "time": "2023-03-20T16:06:02+00:00" + "time": "2023-07-06T06:56:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.2.1", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", - "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", "shasum": "" }, "require": { "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -8280,7 +8345,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" }, "funding": [ { @@ -8296,20 +8361,20 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:32:47+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/finder", - "version": "v6.2.7", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb" + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/20808dc6631aecafbe67c186af5dcb370be3a0eb", - "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb", + "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e", + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e", "shasum": "" }, "require": { @@ -8344,7 +8409,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.2.7" + "source": "https://github.com/symfony/finder/tree/v6.3.3" }, "funding": [ { @@ -8360,28 +8425,32 @@ "type": "tidelift" } ], - "time": "2023-02-16T09:57:23+00:00" + "time": "2023-07-31T08:31:44+00:00" }, { "name": "symfony/http-client", - "version": "v6.2.9", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "7daf5d24c21a683164688b95bb73b7a4bd3b32fc" + "reference": "15f9f4bad62bfcbe48b5dedd866f04a08fc7ff00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/7daf5d24c21a683164688b95bb73b7a4bd3b32fc", - "reference": "7daf5d24c21a683164688b95bb73b7a4bd3b32fc", + "url": "https://api.github.com/repos/symfony/http-client/zipball/15f9f4bad62bfcbe48b5dedd866f04a08fc7ff00", + "reference": "15f9f4bad62bfcbe48b5dedd866f04a08fc7ff00", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.1|^3", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-client-contracts": "^3", - "symfony/service-contracts": "^1.0|^2|^3" + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "php-http/discovery": "<1.15", + "symfony/http-foundation": "<6.3" }, "provide": { "php-http/async-client-implementation": "*", @@ -8432,7 +8501,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.2.9" + "source": "https://github.com/symfony/http-client/tree/v6.3.2" }, "funding": [ { @@ -8448,32 +8517,29 @@ "type": "tidelift" } ], - "time": "2023-04-11T16:03:19+00:00" + "time": "2023-07-05T08:41:27+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.2.1", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "df2ecd6cb70e73c1080e6478aea85f5f4da2c48b" + "reference": "3b66325d0176b4ec826bffab57c9037d759c31fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/df2ecd6cb70e73c1080e6478aea85f5f4da2c48b", - "reference": "df2ecd6cb70e73c1080e6478aea85f5f4da2c48b", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/3b66325d0176b4ec826bffab57c9037d759c31fb", + "reference": "3b66325d0176b4ec826bffab57c9037d759c31fb", "shasum": "" }, "require": { "php": ">=8.1" }, - "suggest": { - "symfony/http-client-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -8513,7 +8579,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.3.0" }, "funding": [ { @@ -8529,32 +8595,34 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:32:47+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.2.8", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "511a524affeefc191939348823ac75e9921c2112" + "reference": "cac1556fdfdf6719668181974104e6fcfa60e844" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/511a524affeefc191939348823ac75e9921c2112", - "reference": "511a524affeefc191939348823ac75e9921c2112", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cac1556fdfdf6719668181974104e6fcfa60e844", + "reference": "cac1556fdfdf6719668181974104e6fcfa60e844", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" }, "conflict": { "symfony/cache": "<6.2" }, "require-dev": { - "predis/predis": "~1.0", + "doctrine/dbal": "^2.13.1|^3.0", + "predis/predis": "^1.1|^2.0", "symfony/cache": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", @@ -8562,9 +8630,6 @@ "symfony/mime": "^5.4|^6.0", "symfony/rate-limiter": "^5.2|^6.0" }, - "suggest": { - "symfony/mime": "To use the file extension guesser" - }, "type": "library", "autoload": { "psr-4": { @@ -8591,7 +8656,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.2.8" + "source": "https://github.com/symfony/http-foundation/tree/v6.3.4" }, "funding": [ { @@ -8607,29 +8672,29 @@ "type": "tidelift" } ], - "time": "2023-03-29T21:42:15+00:00" + "time": "2023-08-22T08:20:46+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.2.9", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "02246510cf7031726f7237138d61b796b95799b3" + "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/02246510cf7031726f7237138d61b796b95799b3", - "reference": "02246510cf7031726f7237138d61b796b95799b3", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", + "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^6.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.3", "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^5.4.21|^6.2.7", + "symfony/http-foundation": "^6.3.4", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -8637,15 +8702,18 @@ "symfony/cache": "<5.4", "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.2", + "symfony/dependency-injection": "<6.3.4", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", + "symfony/http-client-contracts": "<2.5", "symfony/mailer": "<5.4", "symfony/messenger": "<5.4", "symfony/translation": "<5.4", + "symfony/translation-contracts": "<2.5", "symfony/twig-bridge": "<5.4", "symfony/validator": "<5.4", + "symfony/var-dumper": "<6.3", "twig/twig": "<2.13" }, "provide": { @@ -8654,28 +8722,27 @@ "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", "symfony/browser-kit": "^5.4|^6.0", + "symfony/clock": "^6.2", "symfony/config": "^6.1", "symfony/console": "^5.4|^6.0", "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.2", + "symfony/dependency-injection": "^6.3.4", "symfony/dom-crawler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/http-client-contracts": "^2.5|^3", "symfony/process": "^5.4|^6.0", + "symfony/property-access": "^5.4.5|^6.0.5", "symfony/routing": "^5.4|^6.0", + "symfony/serializer": "^6.3", "symfony/stopwatch": "^5.4|^6.0", "symfony/translation": "^5.4|^6.0", - "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/translation-contracts": "^2.5|^3", "symfony/uid": "^5.4|^6.0", + "symfony/validator": "^6.3", + "symfony/var-exporter": "^6.2", "twig/twig": "^2.13|^3.0.4" }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" - }, "type": "library", "autoload": { "psr-4": { @@ -8702,7 +8769,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.2.9" + "source": "https://github.com/symfony/http-kernel/tree/v6.3.4" }, "funding": [ { @@ -8718,20 +8785,20 @@ "type": "tidelift" } ], - "time": "2023-04-13T16:41:43+00:00" + "time": "2023-08-26T13:54:49+00:00" }, { "name": "symfony/mailer", - "version": "v6.2.8", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "bfcfa015c67e19c6fdb7ca6fe70700af1e740a17" + "reference": "7b03d9be1dea29bfec0a6c7b603f5072a4c97435" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/bfcfa015c67e19c6fdb7ca6fe70700af1e740a17", - "reference": "bfcfa015c67e19c6fdb7ca6fe70700af1e740a17", + "url": "https://api.github.com/repos/symfony/mailer/zipball/7b03d9be1dea29bfec0a6c7b603f5072a4c97435", + "reference": "7b03d9be1dea29bfec0a6c7b603f5072a4c97435", "shasum": "" }, "require": { @@ -8741,9 +8808,10 @@ "psr/log": "^1|^2|^3", "symfony/event-dispatcher": "^5.4|^6.0", "symfony/mime": "^6.2", - "symfony/service-contracts": "^1.1|^2|^3" + "symfony/service-contracts": "^2.5|^3" }, "conflict": { + "symfony/http-client-contracts": "<2.5", "symfony/http-kernel": "<5.4", "symfony/messenger": "<6.2", "symfony/mime": "<6.2", @@ -8781,7 +8849,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.2.8" + "source": "https://github.com/symfony/mailer/tree/v6.3.0" }, "funding": [ { @@ -8797,24 +8865,25 @@ "type": "tidelift" } ], - "time": "2023-03-14T15:00:05+00:00" + "time": "2023-05-29T12:49:39+00:00" }, { "name": "symfony/mime", - "version": "v6.2.7", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "62e341f80699badb0ad70b31149c8df89a2d778e" + "reference": "9a0cbd52baa5ba5a5b1f0cacc59466f194730f98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/62e341f80699badb0ad70b31149c8df89a2d778e", - "reference": "62e341f80699badb0ad70b31149c8df89a2d778e", + "url": "https://api.github.com/repos/symfony/mime/zipball/9a0cbd52baa5ba5a5b1f0cacc59466f194730f98", + "reference": "9a0cbd52baa5ba5a5b1f0cacc59466f194730f98", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -8823,7 +8892,7 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<5.4", - "symfony/serializer": "<6.2" + "symfony/serializer": "<6.2.13|>=6.3,<6.3.2" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", @@ -8832,7 +8901,7 @@ "symfony/dependency-injection": "^5.4|^6.0", "symfony/property-access": "^5.4|^6.0", "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "^6.2" + "symfony/serializer": "~6.2.13|^6.3.2" }, "type": "library", "autoload": { @@ -8864,7 +8933,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.2.7" + "source": "https://github.com/symfony/mime/tree/v6.3.3" }, "funding": [ { @@ -8880,25 +8949,25 @@ "type": "tidelift" } ], - "time": "2023-02-24T10:42:00+00:00" + "time": "2023-07-31T07:08:24+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.2.7", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629" + "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/aa0e85b53bbb2b4951960efd61d295907eacd629", - "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", + "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3" + "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -8931,7 +9000,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.2.7" + "source": "https://github.com/symfony/options-resolver/tree/v6.3.0" }, "funding": [ { @@ -8947,20 +9016,20 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2023-05-12T14:21:09+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", "shasum": "" }, "require": { @@ -8975,7 +9044,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -9013,7 +9082,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" }, "funding": [ { @@ -9029,20 +9098,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + "reference": "875e90aeea2777b6f135677f618529449334a612" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", + "reference": "875e90aeea2777b6f135677f618529449334a612", "shasum": "" }, "require": { @@ -9054,7 +9123,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -9094,7 +9163,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" }, "funding": [ { @@ -9110,20 +9179,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "a3d9148e2c363588e05abbdd4ee4f971f0a5330c" + "reference": "e46b4da57951a16053cd751f63f4a24292788157" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/a3d9148e2c363588e05abbdd4ee4f971f0a5330c", - "reference": "a3d9148e2c363588e05abbdd4ee4f971f0a5330c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/e46b4da57951a16053cd751f63f4a24292788157", + "reference": "e46b4da57951a16053cd751f63f4a24292788157", "shasum": "" }, "require": { @@ -9135,7 +9204,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -9181,7 +9250,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.28.0" }, "funding": [ { @@ -9197,20 +9266,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-03-21T17:27:24+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", "shasum": "" }, "require": { @@ -9224,7 +9293,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -9268,7 +9337,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" }, "funding": [ { @@ -9284,20 +9353,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:30:37+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", "shasum": "" }, "require": { @@ -9309,7 +9378,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -9352,7 +9421,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" }, "funding": [ { @@ -9368,20 +9437,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "reference": "42292d99c55abe617799667f454222c54c60e229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229", "shasum": "" }, "require": { @@ -9396,7 +9465,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -9435,7 +9504,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" }, "funding": [ { @@ -9451,7 +9520,7 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-07-28T09:04:16+00:00" }, { "name": "symfony/polyfill-php56", @@ -9523,16 +9592,16 @@ }, { "name": "symfony/polyfill-php72", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", "shasum": "" }, "require": { @@ -9541,7 +9610,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -9579,7 +9648,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" }, "funding": [ { @@ -9595,20 +9664,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", "shasum": "" }, "require": { @@ -9617,7 +9686,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -9662,7 +9731,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" }, "funding": [ { @@ -9678,20 +9747,100 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { - "name": "symfony/polyfill-uuid", - "version": "v1.27.0", + "name": "symfony/polyfill-php83", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166" + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/f3cf1a645c2734236ed1e2e671e273eeb3586166", - "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-php80": "^1.14" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-08-16T06:22:46+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/9c44518a5aff8da565c8a55dbe85d2769e6f630e", + "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e", "shasum": "" }, "require": { @@ -9706,7 +9855,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -9744,7 +9893,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.28.0" }, "funding": [ { @@ -9760,20 +9909,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/process", - "version": "v6.2.8", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "75ed64103df4f6615e15a7fe38b8111099f47416" + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/75ed64103df4f6615e15a7fe38b8111099f47416", - "reference": "75ed64103df4f6615e15a7fe38b8111099f47416", + "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", "shasum": "" }, "require": { @@ -9805,7 +9954,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.2.8" + "source": "https://github.com/symfony/process/tree/v6.3.4" }, "funding": [ { @@ -9821,36 +9970,37 @@ "type": "tidelift" } ], - "time": "2023-03-09T16:20:02+00:00" + "time": "2023-08-07T10:39:22+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v2.1.4", + "version": "v2.3.1", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "a125b93ef378c492e274f217874906fb9babdebb" + "reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/a125b93ef378c492e274f217874906fb9babdebb", - "reference": "a125b93ef378c492e274f217874906fb9babdebb", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/581ca6067eb62640de5ff08ee1ba6850a0ee472e", + "reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e", "shasum": "" }, "require": { - "php": ">=7.1", - "psr/http-message": "^1.0", - "symfony/http-foundation": "^4.4 || ^5.0 || ^6.0" + "php": ">=7.2.5", + "psr/http-message": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/http-foundation": "^5.4 || ^6.0" }, "require-dev": { "nyholm/psr7": "^1.1", "psr/log": "^1.1 || ^2 || ^3", - "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0", - "symfony/config": "^4.4 || ^5.0 || ^6.0", - "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0", - "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0", - "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", - "symfony/phpunit-bridge": "^5.4@dev || ^6.0" + "symfony/browser-kit": "^5.4 || ^6.0", + "symfony/config": "^5.4 || ^6.0", + "symfony/event-dispatcher": "^5.4 || ^6.0", + "symfony/framework-bundle": "^5.4 || ^6.0", + "symfony/http-kernel": "^5.4 || ^6.0", + "symfony/phpunit-bridge": "^6.2" }, "suggest": { "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" @@ -9858,7 +10008,7 @@ "type": "symfony-bridge", "extra": { "branch-alias": { - "dev-main": "2.1-dev" + "dev-main": "2.3-dev" } }, "autoload": { @@ -9893,7 +10043,7 @@ ], "support": { "issues": "https://github.com/symfony/psr-http-message-bridge/issues", - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.4" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.3.1" }, "funding": [ { @@ -9909,24 +10059,25 @@ "type": "tidelift" } ], - "time": "2022-11-28T22:46:34+00:00" + "time": "2023-07-26T11:53:26+00:00" }, { "name": "symfony/routing", - "version": "v6.2.8", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "69062e2823f03b82265d73a966999660f0e1e404" + "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/69062e2823f03b82265d73a966999660f0e1e404", - "reference": "69062e2823f03b82265d73a966999660f0e1e404", + "url": "https://api.github.com/repos/symfony/routing/zipball/e7243039ab663822ff134fbc46099b5fdfa16f6a", + "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "doctrine/annotations": "<1.12", @@ -9943,12 +10094,6 @@ "symfony/http-foundation": "^5.4|^6.0", "symfony/yaml": "^5.4|^6.0" }, - "suggest": { - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, "type": "library", "autoload": { "psr-4": { @@ -9981,7 +10126,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.2.8" + "source": "https://github.com/symfony/routing/tree/v6.3.3" }, "funding": [ { @@ -9997,20 +10142,20 @@ "type": "tidelift" } ], - "time": "2023-03-14T15:00:05+00:00" + "time": "2023-07-31T07:08:24+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.2.1", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "a8c9cedf55f314f3a186041d19537303766df09a" + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", - "reference": "a8c9cedf55f314f3a186041d19537303766df09a", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "shasum": "" }, "require": { @@ -10020,13 +10165,10 @@ "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -10066,7 +10208,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" }, "funding": [ { @@ -10082,20 +10224,20 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:32:47+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/string", - "version": "v6.2.8", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef" + "reference": "53d1a83225002635bca3482fcbf963001313fb68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/193e83bbd6617d6b2151c37fff10fa7168ebddef", - "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef", + "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68", + "reference": "53d1a83225002635bca3482fcbf963001313fb68", "shasum": "" }, "require": { @@ -10106,13 +10248,13 @@ "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": "<2.0" + "symfony/translation-contracts": "<2.5" }, "require-dev": { "symfony/error-handler": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0", "symfony/intl": "^6.2", - "symfony/translation-contracts": "^2.0|^3.0", + "symfony/translation-contracts": "^2.5|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", @@ -10152,7 +10294,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.2.8" + "source": "https://github.com/symfony/string/tree/v6.3.2" }, "funding": [ { @@ -10168,32 +10310,35 @@ "type": "tidelift" } ], - "time": "2023-03-20T16:06:02+00:00" + "time": "2023-07-05T08:41:27+00:00" }, { "name": "symfony/translation", - "version": "v6.2.8", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "817535dbb1721df8b3a8f2489dc7e50bcd6209b5" + "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/817535dbb1721df8b3a8f2489dc7e50bcd6209b5", - "reference": "817535dbb1721df8b3a8f2489dc7e50bcd6209b5", + "url": "https://api.github.com/repos/symfony/translation/zipball/3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", + "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.3|^3.0" + "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { "symfony/config": "<5.4", "symfony/console": "<5.4", "symfony/dependency-injection": "<5.4", + "symfony/http-client-contracts": "<2.5", "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", "symfony/twig-bundle": "<5.4", "symfony/yaml": "<5.4" }, @@ -10207,20 +10352,14 @@ "symfony/console": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-client-contracts": "^2.5|^3.0", "symfony/http-kernel": "^5.4|^6.0", "symfony/intl": "^5.4|^6.0", "symfony/polyfill-intl-icu": "^1.21", "symfony/routing": "^5.4|^6.0", - "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/yaml": "^5.4|^6.0" }, - "suggest": { - "nikic/php-parser": "To use PhpAstExtractor", - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, "type": "library", "autoload": { "files": [ @@ -10250,7 +10389,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.2.8" + "source": "https://github.com/symfony/translation/tree/v6.3.3" }, "funding": [ { @@ -10266,32 +10405,29 @@ "type": "tidelift" } ], - "time": "2023-03-31T09:14:44+00:00" + "time": "2023-07-31T07:08:24+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.2.1", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "dfec258b9dd17a6b24420d464c43bffe347441c8" + "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dfec258b9dd17a6b24420d464c43bffe347441c8", - "reference": "dfec258b9dd17a6b24420d464c43bffe347441c8", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", + "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", "shasum": "" }, "require": { "php": ">=8.1" }, - "suggest": { - "symfony/translation-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -10331,7 +10467,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" }, "funding": [ { @@ -10347,20 +10483,20 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:32:47+00:00" + "time": "2023-05-30T17:17:10+00:00" }, { "name": "symfony/uid", - "version": "v6.2.7", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "d30c72a63897cfa043e1de4d4dd2ffa9ecefcdc0" + "reference": "01b0f20b1351d997711c56f1638f7a8c3061e384" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/d30c72a63897cfa043e1de4d4dd2ffa9ecefcdc0", - "reference": "d30c72a63897cfa043e1de4d4dd2ffa9ecefcdc0", + "url": "https://api.github.com/repos/symfony/uid/zipball/01b0f20b1351d997711c56f1638f7a8c3061e384", + "reference": "01b0f20b1351d997711c56f1638f7a8c3061e384", "shasum": "" }, "require": { @@ -10405,7 +10541,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.2.7" + "source": "https://github.com/symfony/uid/tree/v6.3.0" }, "funding": [ { @@ -10421,42 +10557,38 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2023-04-08T07:25:02+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.2.8", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "d37ab6787be2db993747b6218fcc96e8e3bb4bd0" + "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/d37ab6787be2db993747b6218fcc96e8e3bb4bd0", - "reference": "d37ab6787be2db993747b6218fcc96e8e3bb4bd0", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2027be14f8ae8eae999ceadebcda5b4909b81d45", + "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "phpunit/phpunit": "<5.4.3", "symfony/console": "<5.4" }, "require-dev": { "ext-iconv": "*", "symfony/console": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", "symfony/process": "^5.4|^6.0", "symfony/uid": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, "bin": [ "Resources/bin/var-dump-server" ], @@ -10493,7 +10625,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.2.8" + "source": "https://github.com/symfony/var-dumper/tree/v6.3.4" }, "funding": [ { @@ -10509,24 +10641,25 @@ "type": "tidelift" } ], - "time": "2023-03-29T21:42:15+00:00" + "time": "2023-08-24T14:51:05+00:00" }, { "name": "symfony/yaml", - "version": "v6.2.7", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57" + "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e8e6a1d59e050525f27a1f530aa9703423cb7f57", - "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e23292e8c07c85b971b44c1c4b87af52133e2add", + "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -10535,9 +10668,6 @@ "require-dev": { "symfony/console": "^5.4|^6.0" }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, "bin": [ "Resources/bin/yaml-lint" ], @@ -10567,7 +10697,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.2.7" + "source": "https://github.com/symfony/yaml/tree/v6.3.3" }, "funding": [ { @@ -10583,7 +10713,7 @@ "type": "tidelift" } ], - "time": "2023-02-16T09:57:23+00:00" + "time": "2023-07-31T07:08:24+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -11106,16 +11236,16 @@ }, { "name": "barryvdh/reflection-docblock", - "version": "v2.1.0", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/barryvdh/ReflectionDocBlock.git", - "reference": "bf44b757feb8ba1734659029357646466ded673e" + "reference": "e6811e927f0ecc37cc4deaa6627033150343e597" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/bf44b757feb8ba1734659029357646466ded673e", - "reference": "bf44b757feb8ba1734659029357646466ded673e", + "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/e6811e927f0ecc37cc4deaa6627033150343e597", + "reference": "e6811e927f0ecc37cc4deaa6627033150343e597", "shasum": "" }, "require": { @@ -11152,22 +11282,22 @@ } ], "support": { - "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.1.0" + "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.1.1" }, - "time": "2022-10-31T15:35:43+00:00" + "time": "2023-06-14T05:06:27+00:00" }, { "name": "brianium/paratest", - "version": "v6.9.1", + "version": "v6.10.0", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "51691208db882922c55d6c465be3e7d95028c449" + "reference": "c2243b20bcd99c3f651018d1447144372f39b4fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/51691208db882922c55d6c465be3e7d95028c449", - "reference": "51691208db882922c55d6c465be3e7d95028c449", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/c2243b20bcd99c3f651018d1447144372f39b4fa", + "reference": "c2243b20bcd99c3f651018d1447144372f39b4fa", "shasum": "" }, "require": { @@ -11234,7 +11364,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v6.9.1" + "source": "https://github.com/paratestphp/paratest/tree/v6.10.0" }, "funding": [ { @@ -11246,26 +11376,26 @@ "type": "paypal" } ], - "time": "2023-03-03T09:35:17+00:00" + "time": "2023-05-25T13:47:58+00:00" }, { "name": "composer/class-map-generator", - "version": "1.0.0", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513" + "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/1e1cb2b791facb2dfe32932a7718cf2571187513", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/953cc4ea32e0c31f2185549c7d216d7921f03da9", + "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9", "shasum": "" }, "require": { - "composer/pcre": "^2 || ^3", + "composer/pcre": "^2.1 || ^3.1", "php": "^7.2 || ^8.0", - "symfony/finder": "^4.4 || ^5.3 || ^6" + "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" }, "require-dev": { "phpstan/phpstan": "^1.6", @@ -11303,7 +11433,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.0.0" + "source": "https://github.com/composer/class-map-generator/tree/1.1.0" }, "funding": [ { @@ -11319,7 +11449,7 @@ "type": "tidelift" } ], - "time": "2022-06-19T11:31:27+00:00" + "time": "2023-06-30T13:58:57+00:00" }, { "name": "composer/pcre", @@ -11464,16 +11594,16 @@ }, { "name": "fakerphp/faker", - "version": "v1.21.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d" + "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/92efad6a967f0b79c499705c69b662f738cc9e4d", - "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", + "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", "shasum": "" }, "require": { @@ -11526,9 +11656,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.21.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0" }, - "time": "2022-12-13T13:54:32+00:00" + "time": "2023-06-12T08:44:38+00:00" }, { "name": "fidry/cpu-core-counter", @@ -11593,16 +11723,16 @@ }, { "name": "filp/whoops", - "version": "2.15.2", + "version": "2.15.3", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "aac9304c5ed61bf7b1b7a6064bf9806ab842ce73" + "reference": "c83e88a30524f9360b11f585f71e6b17313b7187" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/aac9304c5ed61bf7b1b7a6064bf9806ab842ce73", - "reference": "aac9304c5ed61bf7b1b7a6064bf9806ab842ce73", + "url": "https://api.github.com/repos/filp/whoops/zipball/c83e88a30524f9360b11f585f71e6b17313b7187", + "reference": "c83e88a30524f9360b11f585f71e6b17313b7187", "shasum": "" }, "require": { @@ -11652,7 +11782,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.15.2" + "source": "https://github.com/filp/whoops/tree/2.15.3" }, "funding": [ { @@ -11660,7 +11790,7 @@ "type": "github" } ], - "time": "2023-04-12T12:00:00+00:00" + "time": "2023-07-13T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -11788,23 +11918,23 @@ }, { "name": "laravel/sail", - "version": "v1.21.4", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "5e59b4a57181020477e2b18943b27493638e3f89" + "reference": "c8a621d7b69ab2e568d97a20f837ca733a224006" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/5e59b4a57181020477e2b18943b27493638e3f89", - "reference": "5e59b4a57181020477e2b18943b27493638e3f89", + "url": "https://api.github.com/repos/laravel/sail/zipball/c8a621d7b69ab2e568d97a20f837ca733a224006", + "reference": "c8a621d7b69ab2e568d97a20f837ca733a224006", "shasum": "" }, "require": { "illuminate/console": "^8.0|^9.0|^10.0", "illuminate/contracts": "^8.0|^9.0|^10.0", "illuminate/support": "^8.0|^9.0|^10.0", - "php": "^7.3|^8.0", + "php": "^8.0", "symfony/yaml": "^6.0" }, "require-dev": { @@ -11849,42 +11979,44 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2023-03-30T12:28:55+00:00" + "time": "2023-08-27T14:26:11+00:00" }, { "name": "mockery/mockery", - "version": "1.5.1", + "version": "1.6.6", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e" + "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e", - "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "url": "https://api.github.com/repos/mockery/mockery/zipball/b8e0bb7d8c604046539c1115994632c74dcb361e", + "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e", "shasum": "" }, "require": { "hamcrest/hamcrest-php": "^2.0.1", "lib-pcre": ">=7.0", - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "conflict": { "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.3" + "phpunit/phpunit": "^8.5 || ^9.6.10", + "psalm/plugin-phpunit": "^0.18.4", + "symplify/easy-coding-standard": "^11.5.0", + "vimeo/psalm": "^4.30" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, "autoload": { - "psr-0": { - "Mockery": "library/" + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" } }, "notification-url": "https://packagist.org/downloads/", @@ -11895,12 +12027,20 @@ { "name": "Pádraic Brady", "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" + "homepage": "https://github.com/padraic", + "role": "Author" }, { "name": "Dave Marshall", "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" } ], "description": "Mockery is a simple yet flexible PHP mock object framework", @@ -11918,10 +12058,13 @@ "testing" ], "support": { + "docs": "https://docs.mockery.io/", "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.5.1" + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" }, - "time": "2022-09-07T15:32:08+00:00" + "time": "2023-08-09T00:03:52+00:00" }, { "name": "myclabs/deep-copy", @@ -12072,23 +12215,23 @@ }, { "name": "pestphp/pest", - "version": "v1.22.6", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "9f6a88232733f9d1e33f49531340f447bd255c9e" + "reference": "5c56ad8772b89611c72a07e23f6e30aa29dc677a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/9f6a88232733f9d1e33f49531340f447bd255c9e", - "reference": "9f6a88232733f9d1e33f49531340f447bd255c9e", + "url": "https://api.github.com/repos/pestphp/pest/zipball/5c56ad8772b89611c72a07e23f6e30aa29dc677a", + "reference": "5c56ad8772b89611c72a07e23f6e30aa29dc677a", "shasum": "" }, "require": { "nunomaduro/collision": "^5.11.0|^6.4.0", "pestphp/pest-plugin": "^1.1.0", "php": "^7.3 || ^8.0", - "phpunit/phpunit": "^9.6.5" + "phpunit/phpunit": "^9.6.10" }, "require-dev": { "illuminate/console": "^8.83.27", @@ -12149,35 +12292,19 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v1.22.6" + "source": "https://github.com/pestphp/pest/tree/v1.23.1" }, "funding": [ { "url": "https://www.paypal.com/paypalme/enunomaduro", "type": "custom" }, - { - "url": "https://github.com/lukeraymonddowning", - "type": "github" - }, { "url": "https://github.com/nunomaduro", "type": "github" - }, - { - "url": "https://github.com/olivernybroe", - "type": "github" - }, - { - "url": "https://github.com/owenvoke", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" } ], - "time": "2023-03-17T23:24:14+00:00" + "time": "2023-07-12T19:42:47+00:00" }, { "name": "pestphp/pest-plugin", @@ -12599,16 +12726,16 @@ }, { "name": "php-webdriver/webdriver", - "version": "1.14.0", + "version": "1.15.0", "source": { "type": "git", "url": "https://github.com/php-webdriver/php-webdriver.git", - "reference": "3ea4f924afb43056bf9c630509e657d951608563" + "reference": "a1578689290055586f1ee51eaf0ec9d52895bb6d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/3ea4f924afb43056bf9c630509e657d951608563", - "reference": "3ea4f924afb43056bf9c630509e657d951608563", + "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/a1578689290055586f1ee51eaf0ec9d52895bb6d", + "reference": "a1578689290055586f1ee51eaf0ec9d52895bb6d", "shasum": "" }, "require": { @@ -12659,9 +12786,9 @@ ], "support": { "issues": "https://github.com/php-webdriver/php-webdriver/issues", - "source": "https://github.com/php-webdriver/php-webdriver/tree/1.14.0" + "source": "https://github.com/php-webdriver/php-webdriver/tree/1.15.0" }, - "time": "2023-02-09T12:12:19+00:00" + "time": "2023-08-29T13:52:26+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -12718,16 +12845,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.7.1", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "dfc078e8af9c99210337325ff5aa152872c98714" + "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/dfc078e8af9c99210337325ff5aa152872c98714", - "reference": "dfc078e8af9c99210337325ff5aa152872c98714", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", "shasum": "" }, "require": { @@ -12770,28 +12897,30 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.1" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3" }, - "time": "2023-03-27T19:02:04+00:00" + "time": "2023-08-12T11:01:26+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.19.1", + "version": "1.23.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "f545fc30978190a056832aa7ed995e36a66267f3" + "reference": "846ae76eef31c6d7790fac9bc399ecee45160b26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/f545fc30978190a056832aa7ed995e36a66267f3", - "reference": "f545fc30978190a056832aa7ed995e36a66267f3", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/846ae76eef31c6d7790fac9bc399ecee45160b26", + "reference": "846ae76eef31c6d7790fac9bc399ecee45160b26", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^1.5", @@ -12815,22 +12944,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.19.1" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.23.1" }, - "time": "2023-04-18T11:30:56+00:00" + "time": "2023-08-03T16:32:59+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.26", + "version": "9.2.27", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" + "reference": "b0a88255cb70d52653d80c890bd7f38740ea50d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", - "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/b0a88255cb70d52653d80c890bd7f38740ea50d1", + "reference": "b0a88255cb70d52653d80c890bd7f38740ea50d1", "shasum": "" }, "require": { @@ -12886,7 +13015,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.27" }, "funding": [ { @@ -12894,7 +13024,7 @@ "type": "github" } ], - "time": "2023-03-06T12:58:08+00:00" + "time": "2023-07-26T13:44:30+00:00" }, { "name": "phpunit/php-file-iterator", @@ -13139,16 +13269,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.7", + "version": "9.6.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c993f0d3b0489ffc42ee2fe0bd645af1538a63b2" + "reference": "810500e92855eba8a7a5319ae913be2da6f957b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c993f0d3b0489ffc42ee2fe0bd645af1538a63b2", - "reference": "c993f0d3b0489ffc42ee2fe0bd645af1538a63b2", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/810500e92855eba8a7a5319ae913be2da6f957b0", + "reference": "810500e92855eba8a7a5319ae913be2da6f957b0", "shasum": "" }, "require": { @@ -13222,7 +13352,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.7" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.11" }, "funding": [ { @@ -13238,7 +13368,7 @@ "type": "tidelift" } ], - "time": "2023-04-14T08:58:40+00:00" + "time": "2023-08-19T07:10:56+00:00" }, { "name": "pimple/pimple", @@ -13593,16 +13723,16 @@ }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", "shasum": "" }, "require": { @@ -13647,7 +13777,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" }, "funding": [ { @@ -13655,7 +13785,7 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2023-05-07T05:35:17+00:00" }, { "name": "sebastian/environment", @@ -13799,16 +13929,16 @@ }, { "name": "sebastian/global-state", - "version": "5.0.5", + "version": "5.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "reference": "bde739e7565280bda77be70044ac1047bc007e34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", + "reference": "bde739e7565280bda77be70044ac1047bc007e34", "shasum": "" }, "require": { @@ -13851,7 +13981,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" }, "funding": [ { @@ -13859,7 +13989,7 @@ "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2023-08-02T09:26:13+00:00" }, { "name": "sebastian/lines-of-code", @@ -14259,16 +14389,16 @@ }, { "name": "spatie/backtrace", - "version": "1.4.0", + "version": "1.5.3", "source": { "type": "git", "url": "https://github.com/spatie/backtrace.git", - "reference": "ec4dd16476b802dbdc6b4467f84032837e316b8c" + "reference": "483f76a82964a0431aa836b6ed0edde0c248e3ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/ec4dd16476b802dbdc6b4467f84032837e316b8c", - "reference": "ec4dd16476b802dbdc6b4467f84032837e316b8c", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/483f76a82964a0431aa836b6ed0edde0c248e3ab", + "reference": "483f76a82964a0431aa836b6ed0edde0c248e3ab", "shasum": "" }, "require": { @@ -14305,7 +14435,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/backtrace/tree/1.4.0" + "source": "https://github.com/spatie/backtrace/tree/1.5.3" }, "funding": [ { @@ -14317,26 +14447,27 @@ "type": "other" } ], - "time": "2023-03-04T08:57:24+00:00" + "time": "2023-06-28T12:59:17+00:00" }, { "name": "spatie/flare-client-php", - "version": "1.3.6", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "530ac81255af79f114344286e4275f8869c671e2" + "reference": "5f2c6a7a0d2c1d90c12559dc7828fd942911a544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/530ac81255af79f114344286e4275f8869c671e2", - "reference": "530ac81255af79f114344286e4275f8869c671e2", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/5f2c6a7a0d2c1d90c12559dc7828fd942911a544", + "reference": "5f2c6a7a0d2c1d90c12559dc7828fd942911a544", "shasum": "" }, "require": { "illuminate/pipeline": "^8.0|^9.0|^10.0", + "nesbot/carbon": "^2.62.1", "php": "^8.0", - "spatie/backtrace": "^1.2", + "spatie/backtrace": "^1.5.2", "symfony/http-foundation": "^5.0|^6.0", "symfony/mime": "^5.2|^6.0", "symfony/process": "^5.2|^6.0", @@ -14353,7 +14484,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.1.x-dev" + "dev-main": "1.3.x-dev" } }, "autoload": { @@ -14378,7 +14509,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.3.6" + "source": "https://github.com/spatie/flare-client-php/tree/1.4.2" }, "funding": [ { @@ -14386,28 +14517,28 @@ "type": "github" } ], - "time": "2023-04-12T07:57:12+00:00" + "time": "2023-07-28T08:07:24+00:00" }, { "name": "spatie/ignition", - "version": "1.5.0", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "4db9c9626e4d7745efbe0b512157326190b41b65" + "reference": "d92b9a081e99261179b63a858c7a4b01541e7dd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/4db9c9626e4d7745efbe0b512157326190b41b65", - "reference": "4db9c9626e4d7745efbe0b512157326190b41b65", + "url": "https://api.github.com/repos/spatie/ignition/zipball/d92b9a081e99261179b63a858c7a4b01541e7dd1", + "reference": "d92b9a081e99261179b63a858c7a4b01541e7dd1", "shasum": "" }, "require": { "ext-json": "*", "ext-mbstring": "*", "php": "^8.0", - "spatie/backtrace": "^1.4", - "spatie/flare-client-php": "^1.1", + "spatie/backtrace": "^1.5.3", + "spatie/flare-client-php": "^1.4.0", "symfony/console": "^5.4|^6.0", "symfony/var-dumper": "^5.4|^6.0" }, @@ -14419,7 +14550,7 @@ "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", "psr/simple-cache-implementation": "*", - "symfony/cache": "^6.2", + "symfony/cache": "^6.0", "symfony/process": "^5.4|^6.0", "vlucas/phpdotenv": "^5.5" }, @@ -14430,7 +14561,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.4.x-dev" + "dev-main": "1.5.x-dev" } }, "autoload": { @@ -14469,7 +14600,7 @@ "type": "github" } ], - "time": "2023-04-12T09:07:50+00:00" + "time": "2023-08-21T15:06:37+00:00" }, { "name": "spatie/laravel-ignition", @@ -14563,16 +14694,16 @@ }, { "name": "spatie/laravel-ray", - "version": "1.32.4", + "version": "1.33.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ray.git", - "reference": "2274653f0a90dd87fbb887437be1c1ea1388a47c" + "reference": "5028ae44a09451b26eb44490e3471998650788e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/2274653f0a90dd87fbb887437be1c1ea1388a47c", - "reference": "2274653f0a90dd87fbb887437be1c1ea1388a47c", + "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/5028ae44a09451b26eb44490e3471998650788e3", + "reference": "5028ae44a09451b26eb44490e3471998650788e3", "shasum": "" }, "require": { @@ -14632,7 +14763,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-ray/issues", - "source": "https://github.com/spatie/laravel-ray/tree/1.32.4" + "source": "https://github.com/spatie/laravel-ray/tree/1.33.0" }, "funding": [ { @@ -14644,7 +14775,7 @@ "type": "other" } ], - "time": "2023-03-23T08:04:54+00:00" + "time": "2023-09-04T10:16:53+00:00" }, { "name": "spatie/macroable", @@ -14698,16 +14829,16 @@ }, { "name": "spatie/ray", - "version": "1.37.1", + "version": "1.37.4", "source": { "type": "git", "url": "https://github.com/spatie/ray.git", - "reference": "a915e327f04c0fbed3bdd26e076e39feea091062" + "reference": "37d351c57b5183a88754f477d2e5f610c7b355ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ray/zipball/a915e327f04c0fbed3bdd26e076e39feea091062", - "reference": "a915e327f04c0fbed3bdd26e076e39feea091062", + "url": "https://api.github.com/repos/spatie/ray/zipball/37d351c57b5183a88754f477d2e5f610c7b355ce", + "reference": "37d351c57b5183a88754f477d2e5f610c7b355ce", "shasum": "" }, "require": { @@ -14758,7 +14889,7 @@ ], "support": { "issues": "https://github.com/spatie/ray/issues", - "source": "https://github.com/spatie/ray/tree/1.37.1" + "source": "https://github.com/spatie/ray/tree/1.37.4" }, "funding": [ { @@ -14770,20 +14901,20 @@ "type": "other" } ], - "time": "2023-03-06T07:22:28+00:00" + "time": "2023-09-04T07:17:56+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "927013f3aac555983a5059aada98e1907d842695" + "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/927013f3aac555983a5059aada98e1907d842695", - "reference": "927013f3aac555983a5059aada98e1907d842695", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/6de50471469b8c9afc38164452ab2b6170ee71c1", + "reference": "6de50471469b8c9afc38164452ab2b6170ee71c1", "shasum": "" }, "require": { @@ -14798,7 +14929,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -14837,7 +14968,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.28.0" }, "funding": [ { @@ -14853,25 +14984,25 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.2.7", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f" + "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", - "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", + "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/service-contracts": "^1|^2|^3" + "symfony/service-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -14899,7 +15030,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.2.7" + "source": "https://github.com/symfony/stopwatch/tree/v6.3.0" }, "funding": [ { @@ -14915,7 +15046,7 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2023-02-16T10:14:28+00:00" }, { "name": "theseer/tokenizer", @@ -15113,27 +15244,27 @@ }, { "name": "zbateson/stream-decorators", - "version": "1.1.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/zbateson/stream-decorators.git", - "reference": "7466ff45d249c86b96267a83cdae68365ae1787e" + "reference": "783b034024fda8eafa19675fb2552f8654d3a3e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/7466ff45d249c86b96267a83cdae68365ae1787e", - "reference": "7466ff45d249c86b96267a83cdae68365ae1787e", + "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/783b034024fda8eafa19675fb2552f8654d3a3e9", + "reference": "783b034024fda8eafa19675fb2552f8654d3a3e9", "shasum": "" }, "require": { "guzzlehttp/psr7": "^1.9 | ^2.0", - "php": ">=7.1", + "php": ">=7.2", "zbateson/mb-wrapper": "^1.0.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "*", "phpstan/phpstan": "*", - "phpunit/phpunit": "<=9.0" + "phpunit/phpunit": "<10.0" }, "type": "library", "autoload": { @@ -15164,7 +15295,7 @@ ], "support": { "issues": "https://github.com/zbateson/stream-decorators/issues", - "source": "https://github.com/zbateson/stream-decorators/tree/1.1.0" + "source": "https://github.com/zbateson/stream-decorators/tree/1.2.1" }, "funding": [ { @@ -15172,7 +15303,7 @@ "type": "github" } ], - "time": "2023-01-11T23:22:44+00:00" + "time": "2023-05-30T22:51:52+00:00" } ], "aliases": [], diff --git a/config/services.php b/config/services.php index 4120b72..84e4b7e 100644 --- a/config/services.php +++ b/config/services.php @@ -52,7 +52,7 @@ return [ 'api_key' => env('OPEN_AI_API_KEY'), ], - 'unslash' => [ + 'unsplash' => [ 'access_key' => env('UNSPLASH_ACCESS_KEY'), 'secret_key' => env('UNSPLASH_SECRET_KEY'), ], diff --git a/database/migrations/2023_09_01_052507_add_fields_to_templates.php b/database/migrations/2023_09_01_052507_add_fields_to_templates.php new file mode 100644 index 0000000..3adfc83 --- /dev/null +++ b/database/migrations/2023_09_01_052507_add_fields_to_templates.php @@ -0,0 +1,37 @@ +boolean('publicly_listed')->default(false); + $table->jsonb('industries')->default('[]'); + $table->jsonb('types')->default('[]'); + $table->string('short_description')->nullable(); + $table->jsonb('related_templates')->default('[]'); + $table->string('image_url',500)->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('templates', function (Blueprint $table) { + $table->dropColumn(['publicly_listed', 'industries', 'types', 'short_description', 'related_templates']); + }); + } +}; diff --git a/package-lock.json b/package-lock.json index 09b2fec..4e95948 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,6 +28,7 @@ "vue-clickaway": "^2.2.2", "vue-codemirror": "^4.0.6", "vue-confetti": "^2.3.0", + "vue-country-flag": "^2.3.2", "vue-i18n": "^8.25.0", "vue-meta": "^2.4.0", "vue-notion": "^0.4.0", @@ -12462,6 +12463,17 @@ "resolved": "https://registry.npmjs.org/vue-confetti/-/vue-confetti-2.3.0.tgz", "integrity": "sha512-zmPniVzBKv0ie/BEXBR6Isi08hYSd6lS18b8VduG5BzZ2tv6bO/rlwISg+IpGY2XsqAFTXFdTC28YR+UPocnAw==" }, + "node_modules/vue-country-flag": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/vue-country-flag/-/vue-country-flag-2.3.2.tgz", + "integrity": "sha512-YhSS+GbLT9tp8tjMXxJKlqpBUd6dbhQJrttKj8ZbHtBocorIomFDMVMxraWVMs3hxaCW6SsAYaREkoYM00ORiA==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "vue": "^2.6.12" + } + }, "node_modules/vue-eslint-parser": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", @@ -22348,6 +22360,12 @@ "resolved": "https://registry.npmjs.org/vue-confetti/-/vue-confetti-2.3.0.tgz", "integrity": "sha512-zmPniVzBKv0ie/BEXBR6Isi08hYSd6lS18b8VduG5BzZ2tv6bO/rlwISg+IpGY2XsqAFTXFdTC28YR+UPocnAw==" }, + "vue-country-flag": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/vue-country-flag/-/vue-country-flag-2.3.2.tgz", + "integrity": "sha512-YhSS+GbLT9tp8tjMXxJKlqpBUd6dbhQJrttKj8ZbHtBocorIomFDMVMxraWVMs3hxaCW6SsAYaREkoYM00ORiA==", + "requires": {} + }, "vue-eslint-parser": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", diff --git a/package.json b/package.json index bc19dbc..861bd87 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "vue-clickaway": "^2.2.2", "vue-codemirror": "^4.0.6", "vue-confetti": "^2.3.0", + "vue-country-flag": "^2.3.2", "vue-i18n": "^8.25.0", "vue-meta": "^2.4.0", "vue-notion": "^0.4.0", diff --git a/resources/data/forms/templates/industries.json b/resources/data/forms/templates/industries.json new file mode 100644 index 0000000..412f068 --- /dev/null +++ b/resources/data/forms/templates/industries.json @@ -0,0 +1,184 @@ +{ + "advertising_forms": { + "name": "Advertising Forms", + "slug": "advertising_forms", + "meta_title": "Supercharge Your Advertising Campaigns with OpnForm", + "meta_description": "Discover how OpnForm and our Advertising Form Templates can revolutionize your advertising campaigns. Customize, embed, and integrate forms to streamline data collection and improve collaboration with clients and team members.", + "description": "Attention all advertising professionals! Our Advertising Form Templates are designed to streamline your data collection process. Whether you need to gather client information, conduct market research surveys, or collect feedback from customers, OpnForm has you covered. With OpnForm, you can fully customize and brand your forms to represent your agency or brand. Embed these forms on your website or share them via email, social media, or any other online channel. Take advantage of features like email notifications for form owners and submitters, integration with Slack, Discord, and other tools via Zapier or webhooks, and the ability to protect your forms with a password. Plus, our forms support captchas to prevent spam submissions and allow you to add custom code for advanced functionality. Start optimizing your advertising workflow with OpnForm and our Advertising Form Templates today!" + }, + "alumni_forms": { + "name": "Alumni Forms", + "slug": "alumni_forms", + "meta_title": "Unlock the Potential of Your Alumni Community with OpnForm", + "meta_description": "Discover how OpnForm empowers educational institutions, alumni associations, and professional networking groups to streamline alumni data collection, feedback gathering, and event organization. With our Alumni Form Templates, easily create customized forms, receive email notifications, integrate with popular tools, and enhance security measures. Start engaging with your alumni community like never before!", + "description": "Are you an educational institution, alumni association, or a professional networking group? Our Alumni Form Templates are designed to help you easily collect information from your alumni community. Whether you want to update contact details, gather feedback, or organize events, OpnForm provides a user-friendly platform to create and manage your forms. With our customizable templates, you can collect alumni data, track engagement, and improve communication effortlessly. OpnForm offers a wide range of features, including email notifications for both the form owner and submitter, fully customizable branding, the ability to host forms on a custom domain, and seamless integration with various tools such as Slack, Discord, and Zapier. Protect your forms with passwords, add captchas for enhanced security, and even allow respondents to edit their own submissions. Explore our Alumni Form Templates below and start connecting with your alumni community today!" + }, + "animal_shelter_forms": { + "name": "Animal Shelter Forms", + "slug": "animal_shelter_forms", + "meta_title": "Simplify the Adoption Process | OpnForm Animal Shelter Form Templates", + "meta_description": "Are you an animal shelter or rescue organization? Streamline your adoption process with OpnForm's Animal Shelter Form Templates. Collect information from potential adopters, foster parents, and volunteers in a user-friendly manner. Customize and brand your forms, receive email notifications, integrate with popular tools, and enhance security. Discover the power of OpnForm for your animal shelter or rescue organization!", + "description": "Are you an animal shelter or rescue organization? OpnForm's Animal Shelter Form Templates are designed to streamline your workflow and help you efficiently manage the adoption process for your furry friends. With OpnForm, you can easily collect information from potential adopters, foster parents, and volunteers in a user-friendly manner. Customize and brand your forms to match your organization's identity. Our open-source form builder offers a wide range of features, including email notifications for both form owners and respondents, custom domains to host your forms, and the ability to embed forms on your website. Connect with popular tools like Slack, Discord, and more using our seamless integrations. Ensure the security of your forms with password protection and captchas. Let respondents edit their own submissions and create multi-page forms to gather comprehensive information. Get started with our Animal Shelter Form Templates today!" + }, + "banking_forms": { + "name": "Banking Forms", + "slug": "banking_forms", + "meta_title": "Revolutionize Your Banking Processes with OpnForm's Banking Form Templates", + "meta_description": "Discover how OpnForm's Banking Form Templates can modernize your banking operations. Collect essential information like loan applications, account opening forms, and customer feedback with ease. Customize and brand your forms, protect them with passwords, embed them on your website, and integrate them with banking systems. Automate email notifications, enable form editing for respondents, enhance security with captchas, and add custom code. Optimize your banking processes today!", + "description": "Are you in the banking industry? Streamline your processes and enhance customer experiences with OpnForm's Banking Form Templates. Easily collect essential information from your customers, such as loan applications, account opening forms, or customer feedback. With OpnForm, you have access to a powerful open-source form builder that offers advanced features tailored for the banking industry. Customize and brand your forms, protect them with passwords, and embed them on your website or share them via a custom domain. Integrate your forms with tools like Slack, Discord, or other banking systems through Zapier or webhooks. Automate email notifications for both form owners and form submitters, and enable form editing for respondents to update their submissions. Enhance security with captchas and add custom code to meet your specific requirements. Optimize your banking operations with OpnForm and our Banking Form Templates." + }, + "business_forms": { + "name": "Business Forms", + "slug": "business_forms", + "meta_title": "Supercharge Your Data Collection with OpnForm's Business Form Templates", + "meta_description": "Discover how OpnForm's open-source form builder and Business Form Templates can revolutionize your data collection processes. Collect valuable information from your customers, conduct market research, and streamline your business operations. With features like email notifications, custom branding, and integration with popular tools, OpnForm is the ultimate solution for efficient and effective data collection.", + "description": "Are you a business owner or manager looking for a better way to collect and manage information? Look no further! OpnForm's Business Form Templates are designed to streamline your data collection processes. Whether you need to gather customer feedback, conduct market research, or collect orders, OpnForm has you covered. With our open-source form builder, you can easily create customized forms that match your brand and meet your specific needs. Our templates come with powerful features, including email notifications for both the form owner and the submitter, the ability to embed forms on any website, and seamless integration with popular tools like Slack, Discord, and Zapier. Plus, you can add password protection, captchas, custom code, and pre-fill options to enhance your form's functionality. Don't miss out on the benefits of OpnForm and our Business Form Templates. Start simplifying your data collection processes today!" + }, + "charity_forms": { + "name": "Charity Forms", + "slug": "charity_forms", + "meta_title": "Streamline Your Charity Organization with OpnForm", + "meta_description": "Discover how OpnForm and our Charity Form Templates can simplify data collection for your charity organization. Easily collect donations, volunteer registrations, event registrations, and more with our customizable forms. Explore powerful features such as email notifications, form customization, embedding forms on your website, integrating with popular tools, and more. Start streamlining your charity organization's processes today!", + "description": "Are you a charity organization looking for a simple and effective way to collect information from donors, volunteers, and beneficiaries? OpnForm's Charity Form Templates are designed specifically for your needs. With OpnForm, you can easily create customized forms to collect donations, volunteer registrations, event registrations, and more. Our templates are ready to use, but can also be easily customized to match your branding and requirements. With OpnForm, you have access to powerful features such as email notifications for both the form owner and the form submitter, form customization and branding, the ability to host forms on your own custom domain, and the option to embed forms on your website. Integrating with other tools is a breeze with OpnForm's integration capabilities with popular platforms like Slack, Discord, and many others via Zapier or webhooks. You can also protect your forms with a password, add captchas for added security, and even include custom code to further enhance your forms. In addition, OpnForm allows you to pre-fill forms via URL parameters, set closing dates or submission limits, and enables respondents to edit their own form submissions. Start streamlining your charity organization's data collection process today with OpnForm and our Charity Form Templates." + }, + "church_forms": { + "name": "Church Forms", + "slug": "church_forms", + "meta_title": "Simplify Church Administration with OpnForm's Church Form Templates", + "meta_description": "OpnForm's Church Form Templates provide church administrators, pastors, and event organizers with an efficient way to collect information from their congregation or event attendees. With OpnForm's open-source form builder, customize your forms to match your church's branding, embed them on your website, and receive email notifications for every submission. Discover the features of OpnForm and simplify your church administration tasks today.", + "description": "Are you a church administrator, pastor, or event organizer? Our Church Form Templates are designed specifically for you. Streamline your administrative tasks and collect important information from your congregation or event attendees with ease. With OpnForm, you have access to a powerful open-source form builder that offers a wide range of features. Customize your forms to match your church's branding, embed them on your website, and receive email notifications for every submission. Integrate your forms with tools like Slack, Discord, or other apps via Zapier or webhooks. Ensure the security of your forms with password protection and add a captcha for extra security. In addition, you can pre-fill forms with url parameters, set form closure dates, and even allow respondents to edit their own submissions. Explore our Church Form Templates below and simplify your church administration tasks." + }, + "customer_service_forms": { + "name": "Customer Service Forms", + "slug": "customer_service_forms", + "meta_title": "Boost Your Customer Service with OpnForm's Customer Service Form Templates", + "meta_description": "OpnForm offers a range of customizable Customer Service Form Templates that can help you streamline your customer service processes. Collect feedback, handle complaints, and gather customer information with ease. Customize your forms, integrate with Slack and other tools, and enhance security with passwords and captchas. Start using OpnForm now and enhance your customer service experience.", + "description": "Are you in the customer service industry? Our Customer Service Form Templates are designed to help you streamline your customer service processes. With OpnForm, you can easily create forms to collect valuable feedback, handle customer complaints, and gather customer information. Customize your forms with your branding and choose from a range of features like email notifications, custom domains, embedded forms, and integration with Slack and other tools via Zapier. Protect your forms with passwords and add captchas for enhanced security. With OpnForm, you have the flexibility to create forms that meet your specific customer service needs. Start using our Customer Service Form Templates now and enhance your customer service experience." + }, + "ecommerce_forms": { + "name": "E-commerce Forms", + "slug": "ecommerce_forms", + "meta_title": "Supercharge Your E-commerce Business with OpnForm", + "meta_description": "Discover how OpnForm's E-commerce Form Templates can help you streamline your online sales process. Collect customer information, orders, and feedback with ease. Customize and brand your forms to match your website's design. Integrate your forms with Slack, Discord, and other tools to automate your workflow. Get email notifications for new submissions and enjoy the convenience of an open-source form builder. Boost your e-commerce business with OpnForm now!", + "description": "Attention E-commerce businesses! Boost your online sales with OpnForm's E-commerce Form Templates. Easily collect customer information, orders, and feedback with our user-friendly form builder. Customize and brand your forms to match your website's design and create a seamless customer experience. With OpnForm, you can integrate your forms with popular tools like Slack and Discord through Zapier or webhooks, streamlining your order processing and customer support workflow. Stay organized with email notifications for both you and your customers. Start optimizing your e-commerce processes with OpnForm today!" + }, + "education_forms": { + "name": "Education Forms", + "slug": "education_forms", + "meta_title": "Streamline Administrative Tasks with Education Form Templates | OpnForm", + "meta_description": "Discover how OpnForm and our Education Form Templates can help educators and administrators streamline administrative tasks, gather important information, and simplify school processes. Enjoy email notifications, customization options, integration with popular tools, and more.", + "description": "Calling all educators and administrators! With OpnForm and our Education Form Templates, streamline your administrative tasks and gather important information from students, parents, and staff members. Easily create customized forms for school registrations, permission slips, surveys, and more. OpnForm is an open-source form builder that offers a wide range of features. Enjoy email notifications for both form owners and submitter, fully customizable and branded forms, the ability to host forms on your own custom domain, and the option to embed forms on any website. Integrate your forms with popular tools like Slack, Discord, and other applications via Zapier or webhooks. Protect your forms with passwords, add captchas for security, and even include custom code for advanced functionality. Pre-fill forms with URL parameters, set closing dates or submission limits, and allow respondents to edit their own submissions. Experience the power of OpnForm and our Education Form Templates today!" + }, + "entertainment_forms": { + "name": "Entertainment Forms", + "slug": "entertainment_forms", + "meta_title": "Streamline Your Entertainment Workflows with OpnForm", + "meta_description": "Discover how OpnForm can revolutionize your entertainment business. Create custom forms to collect event details, booking inquiries, and attendee information. Benefit from email notifications, complete customization, form embedding, and integration with popular tools like Slack and Zapier. Experience the power of OpnForm and simplify your entertainment workflows today.", + "description": "Are you an event organizer, artist, or performer? Our Entertainment Form Templates are designed to streamline your event planning and management process. With OpnForm, you can easily create and customize forms to collect important information from clients, attendees, and participants. Whether it's booking inquiries, event registration, or feedback forms, OpnForm has got you covered. Benefit from the flexibility of our open-source form builder and enjoy features like email notifications, complete form customization, embedding forms on your website, and integrating with popular tools like Slack, Discord, or Zapier. Simplify your entertainment workflows with OpnForm and our versatile form templates below." + }, + "gaming_forms": { + "name": "Gaming Forms", + "slug": "gaming_forms", + "meta_title": "Level up your data collection with OpnForm's Gaming Form Templates", + "meta_description": "Are you in the gaming industry? Discover how OpnForm's open-source form builder and Gaming Form Templates can help you streamline your data collection process. Collect feedback, registrations, and conduct surveys to improve your games. Fully customize and brand your forms, embed them on your gaming websites, and integrate them with Discord and other gaming tools. Maximize the potential of your gaming business with OpnForm!", + "description": "Are you in the gaming industry? OpnForm's Gaming Form Templates are designed specifically for game developers, esports teams, and gaming events organizers. With OpnForm, you can easily collect feedback from players, gather registration information for tournaments, and conduct surveys to improve your games. Our templates can be fully customized and branded to match your gaming brand. Host your forms on your own custom domain and embed them seamlessly on your gaming websites. OpnForm also offers integrations with popular gaming tools like Discord, allowing you to receive form submissions directly in your gaming community server. With OpnForm, you have complete control over your forms and can protect them with passwords, add captchas, or even add custom code. Start gathering valuable data and optimizing your gaming experiences with OpnForm and our Gaming Form Templates today!" + }, + "healthcare_forms": { + "name": "Healthcare Forms", + "slug": "healthcare_forms", + "meta_title": "Streamline Your Healthcare Data Collection with OpnForm", + "meta_description": "OpnForm offers a range of Healthcare Form Templates to help healthcare professionals collect patient information, medical history, and appointment requests effortlessly. Customize and brand your forms, embed them on your website, and enjoy seamless integration with Slack, Discord, and other tools via Zapier. Explore OpnForm for efficient healthcare data collection.", + "description": "Are you working in the healthcare industry? Our Healthcare Form Templates are designed to streamline your data collection processes. Easily collect patient information, medical history, and appointment requests with OpnForm. As an open-source form builder, OpnForm allows you to fully customize and brand your forms to match your organization's identity. With email notifications, you'll never miss a form submission, ensuring timely responses and efficient patient care. Our templates can be embedded on your website or shared through a custom domain, making it convenient for patients to access and fill out the forms. Additionally, OpnForm integrates seamlessly with popular tools like Slack and Discord via Zapier or webhooks, enabling easy collaboration and integration with your existing workflows. Enhance your healthcare processes with OpnForm and our Healthcare Form Templates today." + }, + "human_resources_forms": { + "name": "Human Resources Forms", + "slug": "human_resources_forms", + "meta_title": "Revolutionize Your HR Processes with OpnForm's Human Resources Form Templates", + "meta_description": "Discover how the Human Resources industry can benefit from OpnForm and our customizable form templates. Simplify your hiring process, employee evaluations, and feedback collection with the wide range of features offered by OpnForm. With easy integration, form protection, customization options, and more, OpnForm is the ideal tool for modern HR professionals.", + "description": "Are you in the Human Resources industry? Streamline your hiring process and employee management with OpnForm's Human Resources Form Templates. Easily collect job applications, conduct employee evaluations, and gather employee feedback using our customizable forms. With OpnForm, you have access to a wide range of features including email notifications, form customization and branding, embedding forms on your website, integration with Slack, Discord, and other tools via Zapier or webhooks, form protection with passwords, captcha support, adding custom code, pre-filling forms via URL parameters, closing forms at specific dates or after a certain number of submissions, allowing respondents to edit their own submissions, and creating forms with multiple pages. Start improving your HR processes today with OpnForm and our Human Resources Form Templates." + }, + "it_forms": { + "name": "IT Forms", + "slug": "it_forms", + "meta_title": "Supercharge Your IT Data Collection with OpnForm", + "meta_description": "Discover how OpnForm and our IT form templates can revolutionize your data collection in the IT industry. With features like email notifications, customization options, integration with popular tools, and more, OpnForm is the perfect solution for IT professionals seeking efficient and streamlined data collection.", + "description": "Are you in the IT industry? Looking for a powerful and customizable form builder? Look no further! OpnForm is the perfect solution for IT professionals to streamline their data collection process. With OpnForm, you can create forms tailored to your specific needs, whether it's collecting bug reports, user feedback, or gathering customer information. Take advantage of OpnForm's open-source form builder and enjoy features like email notifications for form owners and submitters, full customization and branding options, integration with popular tools like Slack and Discord through Zapier or webhooks, and even form protection with passwords and captchas. Simplify your data collection process with OpnForm and our IT form templates today!" + }, + "insurance_forms": { + "name": "Insurance Forms", + "slug": "insurance_forms", + "meta_title": "Revolutionize Your Insurance Forms with OpnForm", + "meta_description": "Discover how insurance professionals can optimize their form processes with OpnForm's Insurance Form Templates. Collect and manage data from clients, policyholders, and claimants effortlessly. Enjoy the features of an open-source form builder, customizable forms, email notifications, and seamless integration with popular tools. Enhance security with passwords and captchas. Empower respondents with edit capabilities and create intuitive multi-page forms. Get started with OpnForm today!", + "description": "Are you in the insurance industry? Streamline your form processes with OpnForm's Insurance Form Templates. Easily collect and manage information from clients, policyholders, and claimants. With OpnForm, enjoy the benefits of an open-source form builder that offers email notifications for both form owners and form submitters. Customize and brand your forms to match your insurance company's identity. Host your forms on your own custom domain or embed them seamlessly on your website. Integrate with popular tools like Slack, Discord, and more using Zapier or webhooks. Protect your forms with passwords and add captchas for enhanced security. Utilize advanced features like custom code, URL parameters for pre-filling forms, and limit form availability based on dates or submission quotas. Allow respondents to edit their own submissions or create multi-page forms for a seamless user experience." + }, + "marketing_forms": { + "name": "Marketing Forms", + "slug": "marketing_forms", + "meta_title": "Supercharge Your Marketing Efforts with OpnForm's Marketing Form Templates", + "meta_description": "Discover how OpnForm's Marketing Form Templates can revolutionize your marketing campaigns. Collect valuable data, gather customer feedback, and conduct market research effortlessly. Customize and embed forms on your website, and integrate with popular tools like Slack and Discord. Take advantage of features like email notifications, password protection, and more. Start using OpnForm today!", + "description": "Calling all marketers! OpnForm's Marketing Form Templates are tailored specifically to meet the needs of marketing professionals like you. With OpnForm, you can easily create and manage forms to collect valuable data from your audience. Whether you need to gather customer feedback, conduct market research, or run promotional campaigns, OpnForm has got you covered. Enjoy the flexibility of fully customizable and branded forms that can be embedded on any website. With features like email notifications, integrations with popular tools like Slack and Discord via Zapier or webhooks, and the ability to protect forms with passwords, OpnForm offers everything you need to streamline your marketing efforts. Start using our Marketing Form Templates now and unlock the power of data-driven marketing!" + }, + "photography_forms": { + "name": "Photography Forms", + "slug": "photography_forms", + "meta_title": "Simplify Photography Client Management with OpnForm", + "meta_description": "OpnForm's Photography Form Templates provide photographers and photography businesses with a simple and efficient solution to collect client information. Discover how OpnForm's open-source form builder, customizable features, and integrations with popular tools like Slack and Zapier can streamline your photography workflow.", + "description": "Are you a professional photographer or running a photography business? OpnForm's Photography Form Templates are designed to streamline your workflow and simplify the process of collecting information from clients. With OpnForm, you can easily create customized forms to gather details about client preferences, shoot requirements, and payment information. Our open-source form builder allows you to fully brand and customize your forms, ensuring a seamless experience for your clients. You can embed the forms on your website or share them via a custom domain. OpnForm also offers email notifications for both the form owner and submitter, keeping everyone informed throughout the process. Additionally, our integration with popular tools like Slack, Discord, and Zapier enables you to automate data collection and enhance collaboration. Try OpnForm's Photography Form Templates today and revolutionize your photography business." + }, + "real_estate_forms": { + "name": "Real Estate Forms", + "slug": "real_estate_forms", + "meta_title": "Streamline Your Real Estate Transactions with OpnForm", + "meta_description": "Capture leads, gather property details, and streamline your real estate transactions with OpnForm's Real Estate Form Templates. Customize your forms, receive email notifications, and integrate with popular tools like Slack and Discord. Explore the possibilities of OpnForm for the real estate industry.", + "description": "Are you in the real estate industry? OpnForm's Real Estate Form Templates are designed specifically for real estate professionals. Easily collect client information, property details, and buyer preferences with our customizable forms. OpnForm is an open-source form builder that offers a range of features to streamline your workflow. With email notifications, you'll never miss a lead or inquiry. You can fully customize and brand your forms to match your agency's style. Host your forms on your own custom domain for a professional touch. Embed forms seamlessly on your website to capture leads directly. Integrate with popular tools like Slack, Discord, and more using Zapier or webhooks. Protect sensitive information with password protection and add an optional captcha for added security. Allow clients to edit their own form submissions to keep data up to date. With OpnForm, you have the flexibility to create multi-page forms to gather all the necessary information for your real estate transactions. Start using OpnForm and our Real Estate Form Templates today." + }, + "seo_forms": { + "name": "SEO Forms", + "slug": "seo_forms", + "meta_title": "Optimize Your SEO Forms with OpnForm - Streamline Data Collection", + "meta_description": "Discover how OpnForm's SEO Form Templates can revolutionize your workflow in the SEO industry. Collect valuable data, streamline client communication, and optimize your website performance. With OpnForm, enjoy powerful features, easy customization, seamless integration, and enhanced security. Start using OpnForm today!", + "description": "Are you an SEO professional or agency looking to streamline your form creation process? OpnForm's SEO Form Templates are designed specifically to meet the needs of the SEO industry. Easily collect data and information from clients, track website optimization progress, and gather feedback from users. With OpnForm, you have access to powerful features such as email notifications for form owners and submitters, fully customizable and branded forms, the ability to host forms on your own custom domain, and seamless integration with popular tools like Slack and Discord via Zapier or webhooks. Protect your forms with passwords, add captchas for added security, and even incorporate custom code to meet your unique requirements. Pre-fill forms with URL parameters, set form submission limits or closing dates, and empower respondents to edit their own submissions. Take your SEO forms to the next level with OpnForm's versatile and user-friendly templates." + }, + "salon_forms": { + "name": "Salon Forms", + "slug": "salon_forms", + "meta_title": "Transform Your Salon Operations with OpnForm's Salon Form Templates", + "meta_description": "Discover how salon owners, hairstylists, and beauty professionals can optimize their client intake process using OpnForm and our Salon Form Templates. Customize and brand your forms, collect important information, and integrate with popular tools. Streamline your salon operations today!", + "description": "Are you a salon owner, hairstylist, or beauty professional? Our Salon Form Templates are designed specifically for your industry. Streamline your client intake process and gather important information such as contact details, service preferences, and any allergies or sensitivities. With OpnForm, you get access to a powerful open-source form builder that allows you to customize and brand your forms to match your salon's unique style. Collect form submissions directly in OpnForm and receive email notifications for every submission. You can even integrate your forms with popular tools like Slack, Discord, or other platforms using Zapier or webhooks. Experience the convenience of online forms and simplify your salon operations with OpnForm and our Salon Form Templates." + }, + "services_forms": { + "name": "Services Forms", + "slug": "services_forms", + "meta_title": "Supercharge Your Service Business with OpnForm's Services Form Templates", + "meta_description": "Discover how OpnForm's Services Form Templates can revolutionize your service-based business. Collect client information, streamline workflows, and improve customer satisfaction with our customizable forms. Integrate with popular tools like Slack, Discord, and more. Start optimizing your service business today!", + "description": "Are you a service-based business such as a cleaning company, consulting firm, or marketing agency? Our Services Form Templates are designed to streamline your client interactions and improve your workflow. With OpnForm, you can easily create and customize forms to collect information from your clients, whether it's for booking appointments, gathering project requirements, or conducting customer surveys. Take advantage of OpnForm's extensive features, such as email notifications, form customization, embedding forms on any website, and integrating with popular tools like Slack, Discord, and more via Zapier. Simplify your processes and enhance client satisfaction with our Services Form Templates below." + }, + "sports_forms": { + "name": "Sports Forms", + "slug": "sports_forms", + "meta_title": "Streamline Your Sports Data Collection with OpnForm's Sports Form Templates", + "meta_description": "Easily collect player information, team registrations, and event sign-ups for your sports team or organization. OpnForm's Sports Form Templates offer a powerful and customizable solution for sports-related data collection. Discover the benefits of using OpnForm and streamline your sports data collection process today.", + "description": "Calling all sports teams, coaches, and event organizers! Sports Form Templates by OpnForm are designed to streamline your data collection process. Easily gather player information, team registrations, event sign-ups, and more with our customizable forms. With OpnForm, you have access to a powerful open-source form builder that offers features like email notifications for both form owners and submitter, fully customizable branding, and the ability to embed forms on any website. Take advantage of our integration options with popular tools like Slack, Discord, and Zapier to effortlessly connect your form submissions to your existing workflows. Plus, with features like password protection, captchas, and the ability to add custom code, you can ensure the security and functionality of your sports forms. Start using OpnForm and our Sports Form Templates today to streamline your sports-related data collection process!" + }, + "summer_camps_forms": { + "name": "Summer Camps Forms", + "slug": "summer_camps_forms", + "meta_title": "Simplify Summer Camp Registration with OpnForm's Summer Camp Forms Templates", + "meta_description": "Make summer camp registration a breeze with OpnForm's open-source form builder and Summer Camp Forms Templates. Easily collect camper information, customize forms, and integrate with popular tools like Slack and Discord. Secure and streamline your registration process with password protection, captchas, and the ability for respondents to edit their own submissions. Get started today and make registration easy with OpnForm!", + "description": "Calling all summer camp organizers and administrators! Our Summer Camp Forms Templates are designed to simplify your registration and information gathering process. With OpnForm, you can easily create customized forms for camper registration, medical information, emergency contacts, activity preferences, and more. Take advantage of OpnForm's open-source form builder to tailor the templates to your specific needs. Enjoy the benefits of email notifications, fully customizable branding, and the ability to embed forms on your camp's website. Integrate with popular tools like Slack and Discord using Zapier or webhooks. Secure your forms with passwords and add captchas for enhanced security. With OpnForm, you have the flexibility to pre-fill forms via URL parameters, set form closure dates, and allow respondents to edit their own submissions. Get ready to streamline your summer camp registration process with OpnForm's Summer Camp Forms Templates!" + }, + "veterinary_service_forms": { + "name": "Veterinary Service Forms", + "slug": "veterinary_service_forms", + "meta_title": "Streamline Your Veterinary Services with OpnForm", + "meta_description": "Discover how veterinary service providers can optimize their workflow using OpnForm's Veterinary Service Form Templates. Collect essential information, customize and brand your forms, integrate with tools, protect your data, and more. Start streamlining your client intake process today.", + "description": "Are you a veterinary service provider? Our Veterinary Service Form Templates are designed with you in mind. Streamline your client intake process and collect essential information about pets, medical history, and appointment preferences. OpnForm, an open-source form builder, offers a range of features to enhance your form-building experience. With email notifications, you'll never miss a form submission. Customize and brand your forms to create a professional look and feel. Host your forms on your own custom domain or embed them on your website. Integrate with tools like Slack, Discord, and more through Zapier or webhooks. Protect your forms with passwords and add captchas for added security. Pre-fill forms with URL parameters and set submission limits or close forms at specific dates. With OpnForm, you can even allow respondents to edit their own submissions and create multi-page forms. Use our Veterinary Service Form Templates below and start streamlining your workflow today." + }, + "web_design_forms": { + "name": "Web Design Forms", + "slug": "web_design_forms", + "meta_title": "Supercharge Your Web Design Workflow with OpnForm", + "meta_description": "Discover the power of OpnForm for web designers and developers. Effortlessly collect project requirements, design preferences, and other essential information with our Web Design Form Templates. Customize and brand your forms, integrate them with popular tools, protect them with passwords, and much more. Explore OpnForm now!", + "description": "Are you a web designer or developer? Our Web Design Form Templates are tailored to your needs. Streamline your client onboarding process by collecting project requirements, design preferences, and other necessary information with OpnForm. As an open-source form builder, OpnForm offers a wide range of features to enhance your form building experience. Customize and brand your forms, host them on your own custom domain, and embed them seamlessly into your website. With OpnForm, you can integrate your forms with popular tools like Slack, Discord, and more using Zapier or webhooks. Protect your forms with passwords and add captchas to ensure security. Utilize the versatility of OpnForm by adding custom code and pre-filling forms via URL parameters. You can also set form closure dates or limit submissions. Additionally, OpnForm allows respondents to edit their own submissions and supports multi-page forms. Explore our collection of Web Design Form Templates below and begin optimizing your workflow today." + } +} diff --git a/resources/data/forms/templates/types.json b/resources/data/forms/templates/types.json new file mode 100644 index 0000000..2f30657 --- /dev/null +++ b/resources/data/forms/templates/types.json @@ -0,0 +1,324 @@ +{ + "order_forms": { + "name": "Order Forms", + "slug": "order_forms", + "meta_title": "Supercharge Your Order Management with OpnForm's Order Form Templates", + "meta_description": "Discover how OpnForm's Order Form Templates can streamline your order management process. Create customized order forms with ease, receive email notifications, integrate with popular tools, and more. Start simplifying your ordering process today!", + "description": "Looking to streamline your order management process? OpnForm's Order Form Templates are designed to simplify the collection of order details. With OpnForm, you can easily create customized order forms that fit your business needs. Take advantage of features like email notifications, form branding, custom domains, and integrations with popular tools like Slack and Discord. Whether you're running an online store or managing orders for a restaurant, OpnForm's Order Form Templates can help optimize your workflow and upgrade your ordering process." + }, + "registration_forms": { + "name": "Registration Forms", + "slug": "registration_forms", + "meta_title": "Streamline Your Registration Process with OpnForm's Registration Form Templates", + "meta_description": "Looking for an easy way to collect attendee details for your event or workshop? Discover how OpnForm's open-source form builder and Registration Form Templates can simplify your registration process. Fully customizable forms, email notifications, integration options, and more!", + "description": "Are you organizing an event or workshop and need to collect attendee details? OpnForm's Registration Form Templates can help streamline your registration process! With our easy-to-use form builder, you can create customized registration forms to suit your specific needs. OpnForm's open-source platform allows you to fully customize and brand your forms, ensuring a seamless experience for your attendees. Additionally, our form builder provides features such as email notifications, integration with popular tools like Slack and Discord, password protection, captcha options, and the ability to add custom code. You can even pre-fill forms via URL parameters and set closing dates or submission limits. Simplify your registration process and make it a breeze with OpnForm and our Registration Form Templates!" + }, + "event_registration_forms": { + "name": "Event Registration Forms", + "slug": "event_registration_forms", + "meta_title": "Streamline Event Registrations with OpnForm's Templates", + "meta_description": "Easily manage event registrations using OpnForm's Event Registration Form Templates. Customize and embed these forms on your website, streamline your registration process, and benefit from OpnForm's powerful features like email notifications, custom branding, and integrations with popular tools. Upgrade your event management with OpnForm!", + "description": "Planning an event and need to manage registrations? OpnForm offers Event Registration Form Templates that can simplify your work! With these templates, you can easily collect attendee information, streamline your registration process, and benefit from OpnForm's powerful features. Customize the form to match your event's branding, embed it on your website, and use OpnForm's integrations with tools like Slack and Discord for seamless event management. Upgrade your event registration process with OpnForm!" + }, + "payment_forms": { + "name": "Payment Forms", + "slug": "payment_forms", + "meta_title": "Accept Payments Online with OpnForm's Payment Form Templates", + "meta_description": "OpnForm's Payment Form Templates make it simple for businesses and organizations to collect payments and donations. Discover how you can easily create secure and customizable payment forms, integrate with payment gateways, and accept payments online using OpnForm's open-source form builder and templates.", + "description": "Looking to collect payments online? OpnForm offers Payment Form Templates that can make it easy for you to accept payments and donations! With OpnForm, you can create secure and customizable payment forms, allowing you to sell products, collect membership fees, receive event registrations, and more. Benefit from features like email notifications, custom branding, integration with payment gateways, and the ability to embed forms on your website. Start accepting payments effortlessly with OpnForm's Payment Form Templates!" + }, + "application_forms": { + "name": "Application Forms", + "slug": "application_forms", + "meta_title": "Simplify Your Application Process with OpnForm's Application Form Templates", + "meta_description": "Discover how OpnForm's Application Form Templates can help you collect and manage applications more efficiently. With our open-source form builder, you can easily create and customize application forms for job applications, scholarship applications, or membership applications. Streamline your process, receive email notifications, and integrate with tools like Slack and Discord. Start using OpnForm and our convenient application form templates today!", + "description": "Need to streamline your application process? OpnForm's Application Form Templates are designed to simplify the way you collect and manage applications. Whether you're accepting job applications, scholarship applications, or membership applications, OpnForm has you covered. With our open-source form builder, you can easily create and customize application forms to fit your specific needs. Benefit from our email notifications, branding options, embedding capabilities, and integrations with tools like Slack and Discord. Upgrade your application process today with OpnForm and our convenient application form templates!" + }, + "file_upload_forms": { + "name": "File Upload Forms", + "slug": "file_upload_forms", + "meta_title": "Simplify File Uploads with OpnForm", + "meta_description": "OpnForm's File Upload Form Templates make it simple to collect files from your users. Create fully branded forms, receive email notifications, and integrate with Zapier or webhooks for seamless file management. Explore OpnForm's open-source form builder now!", + "description": "Need to collect files from your users? OpnForm's File Upload Form Templates make it easy! Whether you're running a photography contest, accepting job applications, or gathering design submissions, OpnForm has you covered. With OpnForm's open-source form builder, you can create custom file upload forms, fully branded with your own style. Allow your users to easily upload files, while you receive email notifications with the submissions. Use OpnForm's integration with Zapier or webhooks to automatically send the files to your preferred storage solution. Plus, with OpnForm's advanced features like password protection, custom code integration, and form pre-filling, you can create a secure and personalized experience for your users." + }, + "booking_forms": { + "name": "Booking Forms", + "slug": "booking_forms", + "meta_title": "Streamline Your Booking Process with OpnForm's Booking Form Templates", + "meta_description": "Are you in need of a convenient and efficient way to handle bookings? Look no further! OpnForm's Booking Form Templates are the perfect solution. With OpnForm, you can easily create customized booking forms, integrate them with various tools, and simplify your booking process. Explore our templates today and see how OpnForm can revolutionize your booking experience!", + "description": "Planning an event or managing appointments? OpnForm's Booking Form Templates are designed to simplify the booking process. Whether you're a small business owner, a service provider, or an event organizer, our templates make it easy for you to collect booking details, streamline your workflow, and enhance your overall booking experience. With OpnForm, you can fully customize and brand your booking forms, integrate them with your favorite tools like Slack and Discord, and even protect them with passwords and captchas. Whether you need to schedule appointments, reserve tables, or organize events, OpnForm is here to help you make booking a breeze." + }, + "survey_templates": { + "name": "Survey Templates", + "slug": "survey_templates", + "meta_title": "Create Engaging Surveys with OpnForm's Survey Template Collection", + "meta_description": "OpnForm's Survey Form Templates are built to simplify your survey creation process. Whether you are conducting customer satisfaction surveys, employee feedback surveys, or market research surveys, OpnForm provides an intuitive and customizable platform. Discover how OpnForm's open-source form builder, email notifications, custom branding, and integrations can enhance your survey experience.", + "description": "Looking to collect valuable feedback and insights? OpnForm's Survey Form Templates are designed to help you easily create and distribute surveys. Whether you need to conduct customer satisfaction surveys, employee feedback surveys, or market research surveys, OpnForm has got you covered. With our intuitive and customizable survey templates, you can streamline your data collection process, analyze responses effectively, and gain actionable insights. Take advantage of OpnForm's open-source form builder and leverage features like email notifications, custom branding, integrations with popular tools, and more to create impactful surveys." + }, + "consent_forms": { + "name": "Consent Forms", + "slug": "consent_forms", + "meta_title": "Simplify Consent Forms with OpnForm", + "meta_description": "Discover how OpnForm's open-source form builder and Consent Form Templates can streamline your consent form process. Benefit from features like email notifications, customization options, form hosting on your custom domain, integrations with Slack and Discord, and more.", + "description": "Need consent forms for your business or organization? OpnForm provides a range of Consent Form Templates to simplify the process. With OpnForm's open-source form builder, you can easily create customized consent forms tailored to your specific needs. Benefit from features such as email notifications for both the form owner and submitter, full customization and branding options, the ability to host forms on your own custom domain, and easy integration with other tools like Slack and Discord via Zapier or webhooks. You can also add password protection, captcha, custom code, and pre-fill forms using URL parameters. Additionally, OpnForm allows you to set form expiration dates or submission limits, and even enables respondents to edit their own submissions. Streamline your consent form process with OpnForm today!" + }, + "rsvp_forms": { + "name": "RSVP Forms", + "slug": "rsvp_forms", + "meta_title": "Simplify RSVP Management with OpnForm's RSVP Form Templates", + "meta_description": "Need to manage RSVPs for your event? OpnForm offers RSVP Form Templates that make it easy! Customize the template, embed it on your website, and enjoy features like email notifications, form customization, integrations with tools like Slack, and more. Upgrade your RSVP process with OpnForm today!", + "description": "Planning an event or gathering and need to manage RSVPs? OpnForm offers RSVP Form Templates that can simplify your work! With these form templates, you can easily collect RSVP details, streamline your RSVP process, and benefit from OpnForm's advanced features. Customize the RSVP form template to fit your event's needs, embed it on your website, and see how OpnForm can upgrade your RSVP management." + }, + "appointment_forms": { + "name": "Appointment Forms", + "slug": "appointment_forms", + "meta_title": "Simplify Your Appointment Scheduling with OpnForm", + "meta_description": "Looking for a convenient way to collect appointment requests? Discover OpnForm's Appointment Form Templates and streamline your scheduling process. With OpnForm's open-source form builder, you can easily create customizable appointment forms, receive email notifications, integrate with tools like Slack and Discord, and more. Try OpnForm today and upgrade your appointment scheduling experience.", + "description": "Need to schedule appointments? OpnForm offers Appointment Form Templates that can simplify your scheduling process! These templates are targeted at businesses, professionals, and service providers who need to collect appointment requests from clients. With OpnForm, you can easily create customizable appointment forms, streamline your scheduling process, and benefit from features like email notifications, form customization, form embedding, and integrations with tools like Slack and Discord via Zapier or webhooks. Use an appointment form template below, customize it to fit your needs, and see how OpnForm can upgrade your appointment scheduling process." + }, + "contact_forms": { + "name": "Contact Forms", + "slug": "contact_forms", + "meta_title": "Supercharge Your Communication with OpnForm Contact Form Templates", + "meta_description": "Need a reliable way to collect inquiries from your website? Check out OpnForm's Contact Form Templates. Easily create and customize a contact form that matches your brand. Receive email notifications, integrate with Slack or Discord, and streamline your communication process with OpnForm.", + "description": "Looking to improve communication with your clients? OpnForm's Contact Form Templates are designed to help you effortlessly collect and manage inquiries from your website. With OpnForm, you can easily create and customize a contact form that matches your brand. Receive email notifications for every form submission, ensuring you never miss a message. Seamlessly integrate your contact form with tools like Slack or Discord using Zapier or webhooks. Whether you're a small business owner or a blogger, OpnForm's Contact Form Templates empower you to engage with your audience and streamline your communication process." + }, + "questionnaire_templates": { + "name": "Questionnaire Templates", + "slug": "questionnaire_templates", + "meta_title": "Create Powerful Questionnaires with OpnForm", + "meta_description": "Discover how OpnForm's Questionnaire Templates can simplify your data collection process. Customize and analyze your questionnaires, receive email notifications, and integrate with other tools. Start creating powerful questionnaires with OpnForm today!", + "description": "Looking to create a comprehensive questionnaire? OpnForm's Questionnaire Templates are designed to make the process simple and efficient. Whether you need to conduct surveys, gather feedback, or collect data, OpnForm provides all the necessary features to create and analyze your questionnaires. With OpnForm, you can easily customize and brand your forms, receive email notifications for both form owners and respondents, and even integrate with other tools like Slack or Discord. Take advantage of OpnForm's open-source form builder to create powerful questionnaires and streamline your data collection process." + }, + "signup_forms": { + "name": "Signup Forms", + "slug": "signup_forms", + "meta_title": "Supercharge Your Signup Process with OpnForm's Signup Form Templates", + "meta_description": "Discover how OpnForm's Signup Form Templates can revolutionize your signup process. Streamline user registrations, collect essential information, and integrate with other tools seamlessly. Build professional and branded signup forms using OpnForm's open-source form builder. Try OpnForm now!", + "description": "Looking to build a signup form? OpnForm offers a wide range of Signup Form Templates that can cater to your needs! Whether you're running a small business, organizing an event, or managing a community, OpnForm provides an intuitive and customizable form builder to create professional signup forms. With OpnForm, you can easily collect user information, streamline your signup process, and benefit from seamless integrations with tools like Slack and Discord via Zapier or webhooks. Customize your form's branding, protect it with a password, and embed it on any website. Upgrade your signup process with OpnForm and our versatile Signup Form Templates!" + }, + "abstract_forms": { + "name": "Abstract Forms", + "slug": "abstract_forms", + "meta_title": "Create and Manage Abstract Forms with OpnForm", + "meta_description": "Discover how OpnForm, an open-source form builder, simplifies the creation and management of abstract forms. Collect abstract data effortlessly, streamline your process, and benefit from OpnForm's extensive features. Start building your abstract forms with OpnForm's customizable templates today!", + "description": "Looking for a versatile form builder for your abstract forms? OpnForm has got you covered! With OpnForm's open-source form builder, you can easily create and customize abstract forms tailored to your needs. Collect abstract data effortlessly, streamline your abstract form process, and benefit from OpnForm's extensive features. With email notifications, custom branding, embeddable forms, and integrations with popular tools like Slack and Discord, OpnForm empowers you to create, manage, and analyze abstract form submissions efficiently." + }, + "audit_forms": { + "name": "Audit Forms", + "slug": "audit_forms", + "meta_title": "Simplify Your Audits with OpnForm's Audit Form Templates", + "meta_description": "Looking for a hassle-free way to perform audits? Discover OpnForm's Audit Form Templates and streamline your audit process. With OpnForm's open-source form builder, you can easily create customized audit forms, receive email notifications, integrate with other tools, and embed forms on any website. Start simplifying your audits today!", + "description": "Need to perform audits for your business? OpnForm's Audit Form Templates are designed to help you simplify the audit process. With OpnForm, you can easily create custom audit forms tailored to your specific needs. Use our templates as a starting point, customize them with your own questions and sections, and streamline your audit workflow. With features like email notifications, form customization, integration with other tools, and the ability to embed forms on any website, OpnForm is the perfect tool for conducting audits efficiently and effectively." + }, + "award_forms": { + "name": "Award Forms", + "slug": "award_forms", + "meta_title": "Simplify Your Award Process with OpnForm's Award Form Templates", + "meta_description": "Looking for a way to streamline your award process? OpnForm's Award Form Templates are designed to help you gather nominations, track submissions, and simplify the selection process. With OpnForm, you can fully customize and brand your award forms, receive email notifications, integrate with other tools, and more. Discover how OpnForm can enhance your award process today!", + "description": "Recognizing excellence in your organization? OpnForm offers Award Form Templates that can simplify the process! These form templates are designed to help you gather nominations, track submissions, and streamline the award selection process. With OpnForm's open-source form builder, you can fully customize and brand your award forms to match your organization's identity. You can also take advantage of features like email notifications, custom domains, form embedding, and integration with tools like Slack and Discord. Explore our award form templates below, customize them to fit your requirements, and see how OpnForm can enhance your award process." + }, + "calculation_forms": { + "name": "Calculation Forms", + "slug": "calculation_forms", + "meta_title": "Streamline Your Calculations with OpnForm's Calculation Form Templates", + "meta_description": "Discover the power of OpnForm's Calculation Form Templates to simplify your data analysis and advanced calculations. Customize, integrate, and optimize your calculation forms with our open-source form builder. Explore the features of OpnForm, including email notifications, custom branding, form embedding, and integration with various tools. Upgrade your calculation process with OpnForm today!", + "description": "Are you in need of advanced calculation forms? Look no further than OpnForm! Our Calculation Form Templates are designed for businesses and individuals who require complex calculations and data analysis. With OpnForm, you can easily create and customize calculation forms to suit your needs. Benefit from our open-source form builder, which allows you to fully customize and brand your forms. You can also integrate your calculation forms with various tools, such as Slack and Discord, via Zapier or webhooks. With features like email notifications, custom domain hosting, password protection, and form pre-filling, OpnForm provides a complete solution for all your calculation form needs." + }, + "checklist_forms": { + "name": "Checklist Forms", + "slug": "checklist_forms", + "meta_title": "Efficient Task Management with OpnForm's Checklist Form Templates", + "meta_description": "Utilize OpnForm's Checklist Form Templates to streamline your task management process. With OpnForm, easily create, customize, and track your to-do lists or task checklists. Benefit from features like email notifications, custom branding, form embedding, and integrations with tools like Slack and Discord. Secure your forms with passwords and captchas. Explore our checklist form templates and discover how OpnForm can enhance your task organization and efficiency.", + "description": "Managing a to-do list or organizing tasks? OpnForm's Checklist Form Templates are designed to help you stay organized and streamline your workflow. With OpnForm, you can easily create and customize checklist forms, enabling you to track and manage tasks efficiently. Take advantage of OpnForm's email notifications, custom branding, and form embedding capabilities. Integrate your checklist forms with tools like Slack and Discord using Zapier or webhooks. Protect your forms with a password and add a captcha for enhanced security. With OpnForm, you can pre-fill form fields via URL parameters, set deadlines for form submissions, and even allow respondents to edit their own submissions. Explore our checklist form templates below and experience the power of OpnForm in simplifying your task management process." + }, + "content_forms": { + "name": "Content Forms", + "slug": "content_forms", + "meta_title": "Boost Your Content Creation with OpnForm's Content Form Templates", + "meta_description": "Discover how OpnForm's Content Form Templates can revolutionize your content creation process. Whether you're running a blog, managing a website, or creating online content, OpnForm provides you with the tools to engage your audience, capture valuable feedback, and gather user-generated content. Start using OpnForm's open-source form builder and templates today!", + "description": "Looking to create engaging and interactive content? OpnForm's Content Form Templates are designed for content creators, bloggers, and website owners who want to gather valuable feedback, opinions, and user-generated content. With OpnForm, you can easily create stunning forms that capture user responses, embed them on your website, and benefit from advanced customization options. Harness the power of OpnForm's open-source form builder to collect data, interact with your audience, and enhance your content creation process." + }, + "donation_forms": { + "name": "Donation Forms", + "slug": "donation_forms", + "meta_title": "Collect Donations Easily with OpnForm's Donation Form Templates", + "meta_description": "Looking for a simple and efficient way to collect donations online? Explore OpnForm's Donation Form Templates and discover how you can leverage our open-source form builder to create personalized donation forms, customize them to match your branding, and streamline your fundraising efforts. With features like email notifications, custom domain hosting, and integrations with popular tools like Slack and Zapier, OpnForm is the perfect solution for non-profit organizations seeking to collect donations online.", + "description": "Want to collect donations for your non-profit organization? OpnForm offers Donation Form Templates that make it easy to gather donations online. With OpnForm, you can create personalized donation forms, customize them to match your organization's branding, and collect donations securely. Take advantage of OpnForm's email notifications, custom domain hosting, and integrations with popular tools like Slack and Zapier to streamline your donation collection process. Start using one of our donation form templates below, and see how OpnForm can simplify your fundraising efforts." + }, + "employment_forms": { + "name": "Employment Forms", + "slug": "employment_forms", + "meta_title": "Simplify Your Hiring Process with OpnForm's Employment Form Templates", + "meta_description": "OpnForm's Employment Form Templates are designed to help businesses and organizations streamline their hiring process. With features like email notifications, custom branding, and integrations with popular tools, OpnForm makes it easy to collect employment information and find the right candidates for your team.", + "description": "Looking to streamline your hiring process? OpnForm's Employment Form Templates are designed to make it easy for businesses and organizations to collect employment information. With OpnForm's open-source form builder, you can customize and brand your employment forms to match your company's identity. Our templates offer features such as email notifications for both the form owner and the applicant, integration with popular tools like Slack and Discord, and the ability to embed forms on any website. Use OpnForm's Employment Form Templates to simplify your hiring process and find the right candidates for your team." + }, + "enrollment_forms": { + "name": "Enrollment Forms", + "slug": "enrollment_forms", + "meta_title": "Streamline Your Enrollment Process with OpnForm's Enrollment Form Templates", + "meta_description": "Discover how OpnForm's Enrollment Form Templates can simplify the enrollment process for educational institutions and training programs. Capture student or participant information easily, customize the forms to fit your needs, and benefit from OpnForm's advanced features like email notifications, branding options, and integrations. Start using OpnForm today and revolutionize your enrollment management!", + "description": "Are you running an educational institution or organizing a training program? OpnForm offers Enrollment Form Templates specifically designed for capturing student or participant information. With OpnForm, you can easily create and customize enrollment forms, streamline the enrollment process, and benefit from our various features. Collect all the necessary details, such as personal information, educational background, and program preferences, using our user-friendly templates. Utilize OpnForm's email notifications, branding options, and integration capabilities to enhance your enrollment management. Start using our Enrollment Form Templates now and enjoy a seamless enrollment experience!" + }, + "evaluation_forms": { + "name": "Evaluation Forms", + "slug": "evaluation_forms", + "meta_title": "Revolutionize Performance Evaluation and Feedback Collection with OpnForm", + "meta_description": "Looking for an efficient and user-friendly way to conduct performance evaluations and gather feedback? Discover OpnForm's Evaluation Form Templates! With OpnForm, you can easily create customized and branded evaluation forms, streamline the evaluation process, and benefit from integrations with tools like Slack. Join thousands of satisfied users who have upgraded their performance evaluation and feedback collection processes with OpnForm!", + "description": "Struggling with evaluating employee performance or gathering feedback from customers? OpnForm's Evaluation Form Templates are here to help! Whether you need to conduct performance reviews, collect customer satisfaction surveys, or gather feedback from event attendees, our templates provide the perfect foundation. With OpnForm, you can easily customize and brand your evaluation forms, ensuring they align with your company's identity. Take advantage of our intuitive form builder, email notifications, and integrations with Slack and other tools to streamline the evaluation process. Start using OpnForm's Evaluation Form Templates today and revolutionize how you assess performance and gather feedback!" + }, + "feedback_forms": { + "name": "Feedback Forms", + "slug": "feedback_forms", + "meta_title": "Collect Valuable Feedback with OpnForm's Feedback Form Templates", + "meta_description": "Discover how OpnForm's Feedback Form Templates can help you gather valuable feedback from your customers or website visitors. Create customizable feedback forms with OpnForm's open-source form builder. Embed them on your website or share them via a unique link. Take advantage of features like email notifications, form customization, integrations, and more. Start collecting feedback today!", + "description": "Want to gather feedback from your customers or website visitors? OpnForm's Feedback Form Templates are designed to make feedback collection easy! With OpnForm, you can create custom feedback forms that can be embedded on your website or shared via a unique link. Collect valuable feedback, opinions, and suggestions, and improve your products or services. OpnForm's open-source form builder allows you to fully customize your feedback forms and brand them to match your business. You can also take advantage of features like email notifications, form customization, integrations with tools like Slack and Discord, password protection, captcha, custom code, pre-filling forms via URL parameters, form submission editing, and multi-page forms. Start gathering valuable feedback today with OpnForm's Feedback Form Templates!" + }, + "inspection_forms": { + "name": "Inspection Forms", + "slug": "inspection_forms", + "meta_title": "Simplify Your Inspections with OpnForm's Inspection Form Templates", + "meta_description": "OpnForm offers a range of Inspection Form Templates that can help you streamline your inspection process. Create customized inspection forms with ease and collect all the necessary data. Discover the benefits of OpnForm's features like email notifications, form customization, and integrations with tools like Slack and Discord. Use OpnForm and its inspection form templates to enhance your inspection workflow.", + "description": "Are you in the business of conducting inspections? OpnForm provides Inspection Form Templates that can simplify the process for you! With OpnForm, you can easily create and customize inspection forms to collect relevant data. Whether you need to conduct safety inspections, property inspections, or any other type of inspection, OpnForm has got you covered. Benefit from features like email notifications, form customization, form embedding, and integrations with tools like Slack and Discord. Explore our inspection form templates below, customize them to fit your specific requirements, and witness how OpnForm streamlines your inspection process." + }, + "interview_forms": { + "name": "Interview Forms", + "slug": "interview_forms", + "meta_title": "Simplify Your Hiring Process with OpnForm's Interview Form Templates", + "meta_description": "Discover how OpnForm's Interview Form Templates can help you streamline your hiring process. Collect information from job applicants easily and efficiently with our open-source form builder. Customize your forms, integrate with communication tools, and simplify your workflow. Upgrade your interview process with OpnForm's Interview Form Templates now!", + "description": "Looking to streamline your hiring process? OpnForm offers Interview Form Templates that can help you efficiently collect information from job applicants. With OpnForm's open-source form builder, you can easily create customized interview forms that match your company's unique requirements. Take advantage of features like email notifications, form customization, custom domains, and form embedding to simplify the interview process. Plus, integrate with popular communication tools like Slack and Discord using Zapier or webhooks. Enhance your hiring process with OpnForm's Interview Form Templates today!" + }, + "lead_generation_forms": { + "name": "Lead Generation Forms", + "slug": "lead_generation_forms", + "meta_title": "Supercharge Your Lead Generation with OpnForm's Form Templates", + "meta_description": "Discover how OpnForm's Lead Generation Form Templates can help you capture high-quality leads for your business. Create custom forms, host them on your own domain, and receive email notifications for every new lead. Integrate with popular tools and streamline your lead management process. Try OpnForm today for better lead generation!", + "description": "Looking to generate leads for your business? OpnForm's Lead Generation Form Templates are designed to help you do just that! Whether you're a small startup or a large corporation, these templates provide an efficient way to collect valuable information from potential customers. With OpnForm, you can easily create customized lead generation forms, brand them to match your company's identity, and host them on your own domain. Capture leads effortlessly and receive email notifications for every new submission. Take advantage of our integrations with popular tools like Slack and Discord to streamline your lead management process. Enhance your lead generation efforts with OpnForm and start converting more prospects into customers today!" + }, + "legal_forms": { + "name": "Legal Forms", + "slug": "legal_forms", + "meta_title": "Simplify Your Legal Processes with OpnForm's Legal Form Templates", + "meta_description": "Need legal forms? OpnForm's open-source form builder and customizable legal form templates can streamline your legal processes. Benefit from features like email notifications, customization options, form embedding, tool integration, and more. Start simplifying your legal document workflow today!", + "description": "Need legal forms? OpnForm provides a range of Legal Form Templates to simplify your legal processes! Whether you need a simple contract, a rental agreement, or a non-disclosure agreement, OpnForm has got you covered. With OpnForm's open-source form builder and our customizable legal form templates, you can easily create and manage legal documents. Benefit from features like email notifications for both form owner and submitter, full customization and branding options, custom domain hosting, form embedding, integration with tools like Slack and Discord, password protection, captchas, custom code, pre-filling via URL parameters, form closure options, the ability for respondents to edit submissions, and support for multiple pages. Discover how OpnForm can revolutionize your legal document workflow!" + }, + "membership_forms": { + "name": "Membership Forms", + "slug": "membership_forms", + "meta_title": "Simplify Membership Management with OpnForm Membership Form Templates", + "meta_description": "Streamline your membership management process with OpnForm's Membership Form Templates. Create customized forms, collect member details, and benefit from features like email notifications, form customization, and integrations with other tools. Try OpnForm today!", + "description": "Looking to build a membership form? OpnForm offers Membership Form Templates that can simplify the process of collecting membership details. Whether you run a club, an organization, or any other type of membership-based entity, OpnForm has you covered. With our templates, you can easily create customized membership forms that align with your branding and collect all the necessary information from your members. OpnForm's open-source form builder allows you to fully customize and brand your forms, ensuring a seamless membership form experience. Additionally, you can benefit from features such as email notifications for both the form owner and the submitter, integration with various tools via Zapier or webhooks, and the option to protect your forms with a password. Start building your membership form today and see how OpnForm can elevate your membership management process!" + }, + "petition_forms": { + "name": "Petition Forms", + "slug": "petition_forms", + "meta_title": "Powerful Petition Form Templates for Your Cause | OpnForm", + "meta_description": "Create impactful petition forms with OpnForm's Petition Form Templates. Customize the design, protect the form, and integrate with tools like Slack or Discord. Gather signatures and support for your cause easily with OpnForm.", + "description": "Are you trying to make a difference and rally support for a cause? OpnForm's Petition Form Templates are designed to help you gather signatures and support for your petition. By using our easy-to-use form builder, you can create impactful and professional petition forms in minutes. Customize the design and branding, protect the form with a password, and integrate it with tools like Slack or Discord. With OpnForm, you can amplify your message and gain momentum for your cause." + }, + "polls": { + "name": "Polls", + "slug": "polls", + "meta_title": "Discover the Power of Poll Form Templates with OpnForm", + "meta_description": "Looking to gather opinions or insights from your audience? Learn how OpnForm's Poll Form Templates can help you create engaging polls, customize them to match your brand, and gain valuable insights. Harness the power of OpnForm's open-source form builder and start creating interactive polls today!", + "description": "Running a blog or website and want to engage your audience? OpnForm offers Poll Form Templates that make it easy for you to create interactive polls and gather valuable insights. With OpnForm, you can customize your poll forms to match your brand, embed them on your site, and leverage features such as multiple pages and custom code integration. Engage your readers, collect valuable data, and enhance your content strategy with OpnForm's Poll Form Templates!" + }, + "quiz_forms": { + "name": "Quiz Forms", + "slug": "quiz_forms", + "meta_title": "Create Engaging Quizzes with OpnForm's Quiz Form Templates", + "meta_description": "Looking for a user-friendly and customizable solution to create quizzes? OpnForm's Quiz Form Templates offer educators, trainers, and businesses the perfect tool. With email notifications, easy embedding, and integration options, OpnForm and our templates simplify the quiz creation process. Discover how you can streamline your assessments with OpnForm!", + "description": "Need to create engaging quizzes? OpnForm offers Quiz Form Templates that are perfect for educators, trainers, and businesses looking to assess knowledge and gather data. With OpnForm's open-source form builder, you can easily create interactive quiz forms, customize them to fit your branding, and harness powerful features to enhance your quiz-taking experience. Enjoy email notifications, seamless form embedding, integration with various tools, and the ability to protect your quizzes with passwords. Take your quizzes to the next level with OpnForm!" + }, + "quote_forms": { + "name": "Quote Forms", + "slug": "quote_forms", + "meta_title": "Streamline Your Quote Collection Process with OpnForm", + "meta_description": "OpnForm is an open-source form builder that offers Quote Form Templates to simplify the process of gathering quotes. With features like email notifications, full customization options, and integrations with popular tools, OpnForm makes it easy to streamline your quote collection process. Try OpnForm and our templates today!", + "description": "Are you in need of a quick and easy way to gather quotes? OpnForm provides Quote Form Templates that can simplify the process for you! Whether you're a business owner looking to get quotes from potential vendors or a contractor gathering quotes from clients, OpnForm has got you covered. With our open-source form builder, you can easily create and customize quote forms to suit your specific needs. Benefit from features like email notifications, full customization options, embedding forms on any website, and integrations with popular tools like Slack and Discord. Start streamlining your quote collection process today!" + }, + "recommendation_forms": { + "name": "Recommendation Forms", + "slug": "recommendation_forms", + "meta_title": "Effortless Recommendation Forms with OpnForm", + "meta_description": "Discover how OpnForm can simplify the process of collecting recommendations. With a wide range of customizable Recommendation Form Templates, OpnForm offers an open-source form builder with features like email notifications, branding options, integration with popular tools, and more. Start using OpnForm to streamline your recommendation process today!", + "description": "Looking for a reliable recommendation form solution? OpnForm offers a range of Recommendation Form Templates designed to make your recommendation process seamless. Whether you need to collect recommendations for products, services, or professionals, OpnForm has you covered. With OpnForm's open-source form builder, you can easily create and customize recommendation forms to suit your needs. Benefit from features like email notifications, fully customizable branding, and the ability to embed forms on any website. Integrate with popular tools like Slack or Discord through Zapier or webhooks. Ensure the security of your recommendation forms with password protection and captcha. Use OpnForm's custom code feature to enhance your forms further. Pre-fill forms via URL parameters, set form closing dates, or limit submissions as needed. Respondents can even edit their own submissions with OpnForm's multiple page functionality." + }, + "report_forms": { + "name": "Report Forms", + "slug": "report_forms", + "meta_title": "Simplify Your Reporting with OpnForm's Report Form Templates", + "meta_description": "Discover how OpnForm and our Report Form Templates can revolutionize your reporting process. Customize and brand your report forms, receive instant email notifications, and streamline your workflow. Find the perfect template for your needs and start reporting with ease today!", + "description": "Are you in need of a simple and efficient way to collect reports? OpnForm's Report Form Templates are here to help! Whether you're a manager, supervisor, or team leader, these templates are designed to streamline the reporting process. With OpnForm, you can easily customize and brand your forms, receive instant email notifications for every submission, and even integrate the forms with tools like Slack or Discord. Simply choose a report form template below, customize it to fit your needs, and experience the convenience of OpnForm for all your reporting needs." + }, + "request_forms": { + "name": "Request Forms", + "slug": "request_forms", + "meta_title": "Efficiently Manage Requests with OpnForm's Request Form Templates", + "meta_description": "Discover how OpnForm's Request Form Templates can simplify your process of collecting requests. Customize the templates to fit your needs, receive email notifications, integrate with other tools, and streamline your request management with OpnForm.", + "description": "Need to collect requests and gather information efficiently? OpnForm offers Request Form Templates that can streamline the process! These templates are designed for individuals, businesses, and organizations looking to manage incoming requests. With OpnForm, you can easily customize these templates, collect data securely, and benefit from various features like email notifications, form customization, integrations with Slack and other tools, and much more. Start using OpnForm's Request Form Templates today and simplify the way you handle requests!" + }, + "reservation_forms": { + "name": "Reservation Forms", + "slug": "reservation_forms", + "meta_title": "Simplify Your Reservation Management with OpnForm", + "meta_description": "Looking for an easy way to manage reservations? Discover how OpnForm's Reservation Form Templates can streamline your booking process. Customize your form, collect reservation details, and leverage powerful features like email notifications, embeddable forms, and integrations with popular tools. Upgrade your reservation management with OpnForm now!", + "description": "Planning an event or managing bookings? OpnForm offers Reservation Form Templates to simplify the process! Whether you run a hotel, a restaurant, or any other business that requires reservations, OpnForm has got you covered. With our templates, you can easily collect reservation details, streamline your booking process, and benefit from OpnForm's powerful features. Customize your reservation form to match your branding, embed it on your website, and leverage our integrations with tools like Slack and Discord via Zapier or webhooks. Take advantage of features like email notifications, form customization, password protection, and more. Upgrade your reservation management with OpnForm today!" + }, + "sponsorship_forms": { + "name": "Sponsorship Forms", + "slug": "sponsorship_forms", + "meta_title": "Simplify Sponsorship Management with OpnForm's Templates", + "meta_description": "OpnForm's Sponsorship Form Templates are the ultimate solution for event organizers, non-profits, and businesses seeking sponsorships. Create customized forms, streamline the application process, and leverage OpnForm's features such as branding, email notifications, integrations, and more. Explore the power of OpnForm today!", + "description": "Looking for a hassle-free way to manage sponsorships? OpnForm's Sponsorship Form Templates are designed to simplify the process! These templates are targeted at event organizers, non-profit organizations, and businesses seeking sponsorships. With OpnForm, you can easily create custom sponsorship forms tailored to your needs. Collect important information from potential sponsors, streamline your sponsorship application process, and enjoy the benefits of OpnForm's powerful features. Customize your form's branding, protect it with a password, and even embed it on your website. With email notifications, you'll stay updated on new submissions, while respondents receive confirmation emails. OpnForm also offers integrations with popular tools like Slack, Discord, and more, enabling seamless communication and automation. Discover the possibilities of OpnForm's Sponsorship Form Templates today!" + }, + "subscription_forms": { + "name": "Subscription Forms", + "slug": "subscription_forms", + "meta_title": "Supercharge Your Subscriptions with OpnForm", + "meta_description": "Streamline your subscription process with OpnForm's Subscription Form Templates. Collect subscription information easily, customize your forms, and benefit from OpnForm's integrations. Choose a template, make it your own, and see how OpnForm can simplify your subscription management.", + "description": "Looking to gather subscriptions? OpnForm's Subscription Form Templates are perfect for anyone who needs to collect subscription information easily and efficiently. Whether you're running a newsletter, membership site, or online service, OpnForm has the tools you need. With features like email notifications, custom branding, and integrations with popular tools, OpnForm can help you streamline your subscription process. Choose a template below, customize it to your needs, and see how OpnForm can simplify your subscription management." + }, + "summer_camp_surveys": { + "name": "Summer Camp Surveys", + "slug": "summer_camp_surveys", + "meta_title": "Upgrade Your Summer Camp Surveys with OpnForm!", + "meta_description": "If you're an organizer looking to improve your summer camp experience, OpnForm is here to help! Our open-source form builder provides Summer Camp Survey Form Templates that can make collecting feedback a breeze. With OpnForm, you can easily customize and embed these survey forms on your camp's website. Take advantage of features like email notifications and custom domains to streamline your survey process. Upgrade your summer camp surveys today with OpnForm!", + "description": "Planning a summer camp and need to gather feedback? OpnForm offers Summer Camp Survey Form Templates that can simplify your work! These templates are designed specifically for summer camp organizers to collect valuable feedback from parents and campers. With OpnForm, you can easily create and customize these survey forms to fit your camp's unique needs. Take advantage of OpnForm's features like email notifications, form customization, custom domains, and form embedding to streamline your survey process. Upgrade your summer camp surveys today with OpnForm!" + }, + "telecommuting_forms": { + "name": "Telecommuting Forms", + "slug": "telecommuting_forms", + "meta_title": "Streamline Telecommuting with OpnForm's Templates", + "meta_description": "Transitioning to telecommuting? Discover OpnForm's Telecommuting Form Templates and simplify the process. Customize your forms, collect vital information, and streamline communication. Benefit from OpnForm's features like email notifications, form branding, and integration with collaboration tools such as Slack and Discord. Upgrade your telecommuting experience with OpnForm!", + "description": "Are you transitioning your workforce to telecommuting? OpnForm offers Telecommuting Form Templates that can simplify the process! With these form templates, you can easily collect information from your employees, streamline communication, and ensure a smooth transition to remote work. OpnForm, an open-source form builder, provides features such as customizable forms, email notifications, form branding, and integration with collaboration tools like Slack and Discord. Use our Telecommuting Form Templates to gather essential information, communicate effectively, and leverage OpnForm's powerful features to facilitate seamless telecommuting." + }, + "tracking_forms": { + "name": "Tracking Forms", + "slug": "tracking_forms", + "meta_title": "Simplify Tracking with OpnForm's Tracking Form Templates", + "meta_description": "Looking for a simple and efficient way to track shipments and packages? Discover OpnForm's Tracking Form Templates and see how you can leverage our open-source form builder and customizable templates to streamline your tracking process.", + "description": "Need to track shipments or packages? OpnForm offers Tracking Form Templates that make it easy to monitor and manage your tracking information. With OpnForm, you can create customized forms to collect tracking details, streamline your tracking process, and benefit from our integration capabilities. Use a tracking form template below, tailor it to your specific needs, and discover how OpnForm can enhance your tracking workflow." + }, + "voting_forms": { + "name": "Voting Forms", + "slug": "voting_forms", + "meta_title": "Streamline Your Voting Process with OpnForm's Voting Form Templates", + "meta_description": "Find the perfect solution for your voting needs with OpnForm's Voting Form Templates. Create customizable forms to collect votes, opinions, and feedback easily. Discover the power of OpnForm's open-source form builder, email notifications, form embedding, custom domains, integrations, security features, and more!", + "description": "Looking to collect votes and opinions? OpnForm's Voting Form Templates are here to help! Whether you're running an election, conducting a survey, or seeking feedback, OpnForm provides user-friendly templates that simplify the voting process. With OpnForm's open-source form builder, you can fully customize and brand your voting forms. Take advantage of features like email notifications, form embedding, custom domains, and integrations with popular tools like Slack and Discord via Zapier or webhooks. Ensure the security of your voting forms with password protection and captchas. Plus, you can pre-fill forms, set submission limits, allow respondents to edit their submissions, and even create multi-page forms. Discover how OpnForm can enhance your voting experience today!" + }, + "wedding_forms": { + "name": "Wedding Forms", + "slug": "wedding_forms", + "meta_title": "Simplify Your Wedding Planning with OpnForm's Wedding Form Templates", + "meta_description": "OpnForm's Wedding Form Templates make wedding planning a breeze! Collect RSVPs, manage guest details, and send out wedding invitations effortlessly. Customize your forms, protect them with passwords, and embed them on your wedding website. Get started with OpnForm and make your wedding planning experience a memorable one.", + "description": "Planning a wedding has never been easier! OpnForm's Wedding Form Templates are designed specifically for those organizing their special day. With OpnForm, you can effortlessly collect RSVPs, manage guest details, and send out wedding invitations. Our form builder offers a range of features to enhance your wedding planning experience. Customize your forms to match your wedding theme, protect them with passwords, and embed them on your wedding website. Plus, with OpnForm's email notifications, you'll never miss a response. Start simplifying your wedding planning process with OpnForm's Wedding Form Templates today!" + }, + "volunteer_forms": { + "name": "Volunteer Forms", + "slug": "volunteer_forms", + "meta_title": "Simplify Volunteer Recruitment with OpnForm's Volunteer Form Templates", + "meta_description": "OpnForm's Volunteer Form Templates are the perfect solution for organizations seeking to simplify their volunteer recruitment process. With OpnForm's open-source form builder, you can easily create personalized volunteer forms, customize and brand them to match your organization's identity, and benefit from powerful features like email notifications, integration with popular tools, form protection, and more. Discover how OpnForm can help you streamline your volunteer recruitment today!", + "description": "Looking to recruit volunteers? OpnForm offers Volunteer Form Templates that can make the process easier for you! These form templates are designed to help you gather information from potential volunteers, streamline your volunteer recruitment process, and benefit from OpnForm's powerful features. Customize and brand your forms, receive email notifications for new volunteer submissions, integrate with tools like Slack and Discord, and even protect your forms with a password. With OpnForm, you can create engaging and user-friendly volunteer forms that will make it simple for candidates to apply and for you to manage applications." + } +} diff --git a/resources/js/components/common/Breadcrumb.vue b/resources/js/components/common/Breadcrumb.vue index 3e9e014..ee6d46b 100644 --- a/resources/js/components/common/Breadcrumb.vue +++ b/resources/js/components/common/Breadcrumb.vue @@ -1,22 +1,61 @@ diff --git a/resources/js/components/open/forms/components/templates/QuestionsEditor.vue b/resources/js/components/open/forms/components/templates/QuestionsEditor.vue new file mode 100644 index 0000000..dad4b0c --- /dev/null +++ b/resources/js/components/open/forms/components/templates/QuestionsEditor.vue @@ -0,0 +1,77 @@ + + + diff --git a/resources/js/components/pages/forms/CreateTemplateModal.vue b/resources/js/components/pages/forms/CreateTemplateModal.vue deleted file mode 100644 index 0dad584..0000000 --- a/resources/js/components/pages/forms/CreateTemplateModal.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - - \ No newline at end of file diff --git a/resources/js/components/pages/forms/show/ExtraMenu.vue b/resources/js/components/pages/forms/show/ExtraMenu.vue index 9486312..012e496 100644 --- a/resources/js/components/pages/forms/show/ExtraMenu.vue +++ b/resources/js/components/pages/forms/show/ExtraMenu.vue @@ -69,7 +69,7 @@ @@ -117,7 +117,7 @@ - + @@ -125,11 +125,11 @@ import axios from 'axios' import {mapGetters, mapState} from 'vuex' import Dropdown from '../../../common/Dropdown.vue' -import CreateTemplateModal from '../CreateTemplateModal.vue' +import FormTemplateModal from '../../../open/forms/components/templates/FormTemplateModal.vue' export default { name: 'ExtraMenu', - components: { Dropdown, CreateTemplateModal }, + components: { Dropdown, FormTemplateModal }, props: { form: { type: Object, required: true }, isMainPage: { type: Boolean, required: false, default: false } @@ -139,7 +139,7 @@ export default { loadingDuplicate: false, loadingDelete: false, showDeleteFormModal: false, - showCreateTemplateModal: false + showFormTemplateModal: false }), computed: { diff --git a/resources/js/components/pages/templates/SingleTemplate.vue b/resources/js/components/pages/templates/SingleTemplate.vue new file mode 100644 index 0000000..e1938eb --- /dev/null +++ b/resources/js/components/pages/templates/SingleTemplate.vue @@ -0,0 +1,80 @@ +
+
+ + + New + +
+ +
+ +
+

+ {{ template.name }} +

+

+ {{ cleanQuotes(template.short_description) }} +

+ + + +
+ + + diff --git a/resources/js/components/pages/templates/TemplateTags.vue b/resources/js/components/pages/templates/TemplateTags.vue new file mode 100644 index 0000000..deac708 --- /dev/null +++ b/resources/js/components/pages/templates/TemplateTags.vue @@ -0,0 +1,74 @@ + + + diff --git a/resources/js/components/pages/welcome/TemplatesSlider.vue b/resources/js/components/pages/welcome/TemplatesSlider.vue new file mode 100644 index 0000000..55930c2 --- /dev/null +++ b/resources/js/components/pages/welcome/TemplatesSlider.vue @@ -0,0 +1,70 @@ + + + diff --git a/resources/js/components/templates/QuestionsEditor.vue b/resources/js/components/templates/QuestionsEditor.vue deleted file mode 100644 index 985c18f..0000000 --- a/resources/js/components/templates/QuestionsEditor.vue +++ /dev/null @@ -1,81 +0,0 @@ - - - - \ No newline at end of file diff --git a/resources/js/pages/templates/show.vue b/resources/js/pages/templates/show.vue index c4b642e..043f24f 100644 --- a/resources/js/pages/templates/show.vue +++ b/resources/js/pages/templates/show.vue @@ -1,50 +1,191 @@ @@ -52,61 +193,110 @@ + + diff --git a/resources/js/pages/templates/templates.vue b/resources/js/pages/templates/templates.vue index 8e71aba..7894de5 100644 --- a/resources/js/pages/templates/templates.vue +++ b/resources/js/pages/templates/templates.vue @@ -1,94 +1,160 @@ diff --git a/resources/js/pages/welcome.vue b/resources/js/pages/welcome.vue index 3fdb51a..8d5e7f6 100644 --- a/resources/js/pages/welcome.vue +++ b/resources/js/pages/welcome.vue @@ -78,6 +78,8 @@ + +

Take your forms to the next level

Generous, unlimited free plan.

@@ -123,10 +125,11 @@ import MoreFeatures from '~/components/pages/welcome/MoreFeatures.vue' import AiFeature from '~/components/pages/welcome/AiFeature.vue' import OpenFormFooter from '../components/pages/OpenFormFooter.vue' import Testimonials from '../components/pages/welcome/Testimonials.vue' +import TemplatesSlider from '../components/pages/welcome/TemplatesSlider.vue' import SeoMeta from '../mixins/seo-meta.js' export default { - components: {Testimonials, OpenFormFooter, Features, MoreFeatures, AiFeature}, + components: {Testimonials, OpenFormFooter, Features, MoreFeatures, AiFeature, TemplatesSlider}, layout: 'default', diff --git a/resources/js/router/routes.js b/resources/js/router/routes.js index d31da75..fa7f2ce 100644 --- a/resources/js/router/routes.js +++ b/resources/js/router/routes.js @@ -67,8 +67,8 @@ export default [ { path: '/forms/:slug', name: 'forms.show_public', component: page('forms/show-public.vue') }, // Templates - { path: '/templates', name: 'templates', component: page('templates/templates.vue') }, - { path: '/templates/:slug', name: 'templates.show', component: page('templates/show.vue') }, + { path: '/form-templates', name: 'templates', component: page('templates/templates.vue') }, + { path: '/form-templates/:slug', name: 'templates.show', component: page('templates/show.vue') }, { path: '*', component: page('errors/404.vue') } ] diff --git a/resources/js/store/modules/open/templates.js b/resources/js/store/modules/open/templates.js index a03936f..3e229fa 100644 --- a/resources/js/store/modules/open/templates.js +++ b/resources/js/store/modules/open/templates.js @@ -1,55 +1,124 @@ -import Vue from 'vue' import axios from 'axios' +export const templatesEndpoint = '/api/templates' +export const namespaced = true + // state export const state = { content: [], + industries: {}, + types: {}, + allLoaded: false, loading: false } // getters export const getters = { - getById: (state) => (id) => { - if (state.content.length === 0) return null - return state.content.find(item => item.id === id) - }, getBySlug: (state) => (slug) => { if (state.content.length === 0) return null return state.content.find(item => item.slug === slug) }, + getTemplateTypes: (state) => (slugs) => { + if (state.types.length === 0) return null + return Object.values(state.types).filter((val) => slugs.includes(val.slug)).map((item) => { return item.name }) + }, + getTemplateIndustries: (state) => (slugs) => { + if (state.industries.length === 0) return null + return Object.values(state.industries).filter((val) => slugs.includes(val.slug)).map((item) => { return item.name }) + } } // mutations export const mutations = { set (state, items) { state.content = items + state.allLoaded = true + }, + append (state, items) { + const ids = items.map((item) => { return item.id }) + state.content = state.content.filter((val) => !ids.includes(val.id)) + state.content = state.content.concat(items) }, addOrUpdate (state, item) { state.content = state.content.filter((val) => val.id !== item.id) state.content.push(item) }, - startLoading () { + remove (state, item) { + state.content = state.content.filter((val) => val.id !== item.id) + }, + startLoading (state) { state.loading = true }, - stopLoading () { + stopLoading (state) { state.loading = false + }, + setAllLoaded (state, val) { + state.allLoaded = val } } // actions export const actions = { - load (context) { + resetState (context) { context.commit('set', []) + context.commit('stopLoading') + }, + loadTypesAndIndustries (context) { + if (Object.keys(context.state.industries).length === 0) { + import('@/data/forms/templates/industries.json').then((module) => { + context.state.industries = module.default + }) + } + if (Object.keys(context.state.types).length === 0) { + import('@/data/forms/templates/types.json').then((module) => { + context.state.types = module.default + }) + } + }, + loadTemplate (context, slug) { context.commit('startLoading') - return axios.get('/api/templates').then((response) => { - context.commit('set', response.data) + context.dispatch('loadTypesAndIndustries') + + if (context.getters.getBySlug(slug)) { + context.commit('stopLoading') + return Promise.resolve() + } + + return axios.get(templatesEndpoint + '/' + slug).then((response) => { + context.commit('addOrUpdate', response.data) + context.commit('stopLoading') + }).catch((error) => { context.commit('stopLoading') }) }, - loadIfEmpty ({ context, dispatch, state }) { - if (state.content.length === 0) { - return dispatch('load') + loadAll (context) { + context.commit('startLoading') + context.dispatch('loadTypesAndIndustries') + return axios.get(templatesEndpoint).then((response) => { + context.commit('append', response.data) + context.commit('setAllLoaded', true) + context.commit('stopLoading') + }).catch((error) => { + context.commit('stopLoading') + }) + }, + loadIfEmpty (context) { + if (!context.state.allLoaded) { + return context.dispatch('loadAll') } + context.commit('stopLoading') return Promise.resolve() }, + loadWithLimit (context, limit) { + context.commit('startLoading') + context.dispatch('loadTypesAndIndustries') + + return axios.get(templatesEndpoint + '?limit=' + limit).then((response) => { + context.commit('set', response.data) + context.commit('setAllLoaded', false) + context.commit('stopLoading') + }).catch((error) => { + context.commit('stopLoading') + }) + } } diff --git a/routes/api.php b/routes/api.php index 005fe67..9ec4b92 100644 --- a/routes/api.php +++ b/routes/api.php @@ -161,5 +161,10 @@ Route::prefix('content')->name('content.')->group(function () { }); // Templates -Route::get('templates', [TemplateController::class, 'index'])->name('templates.show'); -Route::post('templates', [TemplateController::class, 'create'])->name('templates.create'); +Route::prefix('templates')->group(function () { + Route::get('/', [TemplateController::class, 'index'])->name('templates.index'); + Route::post('/', [TemplateController::class, 'create'])->name('templates.create'); + Route::get('/{slug}', [TemplateController::class, 'show'])->name('templates.show'); + Route::put('/{id}', [TemplateController::class, 'update'])->name('templates.update'); + Route::delete('/{id}', [TemplateController::class, 'destroy'])->name('templates.destroy'); +}); diff --git a/tailwind.config.js b/tailwind.config.js index 0fc804f..a57431c 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -21,10 +21,15 @@ module.exports = { '0%, 20%': {transform: 'translateY(0)'}, '8%': {transform: 'translateY(-25%)'}, '16%': {transform: 'translateY(+10%)'} + }, + 'infinite-scroll': { + from: { transform: 'translateX(0)' }, + to: { transform: 'translateX(-100%)' }, } }, animation: { - 'bounce-slow': 'bonce-slow 3s ease-in-out infinite' + 'bounce-slow': 'bonce-slow 3s ease-in-out infinite', + 'infinite-scroll': 'infinite-scroll 50s linear infinite', }, maxHeight: { 42: '10.5rem' diff --git a/tests/Feature/TemplateTest.php b/tests/Feature/TemplateTest.php index 62637b6..624f827 100644 --- a/tests/Feature/TemplateTest.php +++ b/tests/Feature/TemplateTest.php @@ -14,8 +14,10 @@ it('can create template', function () { $templateData = [ 'name' => 'Demo Template', 'slug' => 'demo_template', - 'description' => 'Some description here...', + 'short_description' => 'Short description here...', + 'description' => 'Some long description here...', 'image_url' => 'https://d3ietpyl4f2d18.cloudfront.net/6c35a864-ee3a-4039-80a4-040b6c20ac60/img/pages/welcome/product_cover.jpg', + 'publicly_listed' => true, 'form' => $form->getAttributes(), 'questions' => [['question'=>'Question 1','answer'=>'Answer 1 will be here...']] ]; @@ -23,6 +25,6 @@ it('can create template', function () { ->assertSuccessful() ->assertJson([ 'type' => 'success', - 'message' => 'Template created.' + 'message' => 'Template was created.' ]); });