From 0586e04204885088f31ac9861446eb0759cc8d2f Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Thu, 5 Jan 2023 20:41:27 +0100 Subject: [PATCH 01/16] tech relations --- app/Http/Controllers/TechniqueController.php | 2 +- app/Models/Technique.php | 7 ++++ app/Models/TechniqueRelation.php | 10 ++++++ ...90010_create_technique_relations_table.php | 34 +++++++++++++++++++ resources/js/components/techniques/Detail.js | 12 ++++++- resources/js/helpers/Technique.js | 15 ++++++++ resources/js/i18n/de.js | 1 + resources/js/i18n/en.js | 1 + 8 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 app/Models/TechniqueRelation.php create mode 100644 database/migrations/2023_01_05_190010_create_technique_relations_table.php diff --git a/app/Http/Controllers/TechniqueController.php b/app/Http/Controllers/TechniqueController.php index 268c3f6..9862325 100644 --- a/app/Http/Controllers/TechniqueController.php +++ b/app/Http/Controllers/TechniqueController.php @@ -34,7 +34,7 @@ class TechniqueController extends Controller public function single(Request $request, Technique $tech) { $this->authorize('view', $tech); - $tech->load('chapters'); + $tech->load(['chapters', 'relations']); return $tech->toJson(); } diff --git a/app/Models/Technique.php b/app/Models/Technique.php index 256afc0..f0a29d3 100644 --- a/app/Models/Technique.php +++ b/app/Models/Technique.php @@ -17,6 +17,13 @@ class Technique extends Model ->using(TechniqueChapter::class); } + public function relations() { + return $this + ->belongsToMany(Technique::class, 'technique_relations', 'from_id', 'to_id') + ->withPivot('type') + ->using(TechniqueRelation::class); + } + public function translations() { return $this->hasMany(TechniqueTranslation::class); } diff --git a/app/Models/TechniqueRelation.php b/app/Models/TechniqueRelation.php new file mode 100644 index 0000000..96c73c3 --- /dev/null +++ b/app/Models/TechniqueRelation.php @@ -0,0 +1,10 @@ +id(); + $table->foreignId('from_id')->references('id')->on('techniques')->constrained(); + $table->foreignId('to_id')->references('id')->on('techniques')->constrained(); + $table->string('type')->default('related'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('technique_relations'); + } +}; diff --git a/resources/js/components/techniques/Detail.js b/resources/js/components/techniques/Detail.js index 303921c..488205b 100644 --- a/resources/js/components/techniques/Detail.js +++ b/resources/js/components/techniques/Detail.js @@ -3,9 +3,15 @@ import React from 'react'; import { Container } from 'react-bootstrap'; import { withTranslation } from 'react-i18next'; +import List from './List'; import Outline from './Outline'; import RawHTML from '../common/RawHTML'; -import { getTranslation } from '../../helpers/Technique'; +import { + getRelations, + getTranslation, + hasRelations, + sorted, +} from '../../helpers/Technique'; import i18n from '../../i18n'; const Detail = ({ technique }) => @@ -24,6 +30,10 @@ const Detail = ({ technique }) => ) : null} + {hasRelations(technique, 'related') ? <> +

{i18n.t('techniques.seeAlso')}

+ + : null}
; Detail.propTypes = { diff --git a/resources/js/helpers/Technique.js b/resources/js/helpers/Technique.js index 7ec22d3..410f015 100644 --- a/resources/js/helpers/Technique.js +++ b/resources/js/helpers/Technique.js @@ -1,3 +1,12 @@ +import i18n from '../i18n'; + +export const getRelations = (tech, type) => { + const rs = (tech && tech.relations) || []; + return type ? rs.filter(r => r && r.pivot && r.pivot.type === type) : rs; +}; + +export const hasRelations = (tech, type) => getRelations(tech, type).length > 0; + export const getTranslation = (tech, prop, lang) => { const direct = tech.translations.find(t => t.locale === lang); if (direct) { @@ -13,6 +22,12 @@ export const getTranslation = (tech, prop, lang) => { export const compareTranslation = (prop, lang) => (a, b) => getTranslation(a, prop, lang).localeCompare(getTranslation(b, prop, lang)); +export const sorted = (techs) => [...techs].sort(compareTranslation('title', i18n.language)); + export default { + compareTranslation, + getRelations, getTranslation, + hasRelations, + sorted, }; diff --git a/resources/js/i18n/de.js b/resources/js/i18n/de.js index c28c1b2..f3fbe96 100644 --- a/resources/js/i18n/de.js +++ b/resources/js/i18n/de.js @@ -480,6 +480,7 @@ export default { }, techniques: { heading: 'Techniken', + seeAlso: 'Siehe auch', }, tournaments: { admins: 'Organisation', diff --git a/resources/js/i18n/en.js b/resources/js/i18n/en.js index dfff38b..7088dd4 100644 --- a/resources/js/i18n/en.js +++ b/resources/js/i18n/en.js @@ -480,6 +480,7 @@ export default { }, techniques: { heading: 'Techniques', + seeAlso: 'See also', }, tournaments: { admins: 'Admins', -- 2.39.2 From 5b21bf8a7e7efed35389c693fcf3775d6ee3f0ec Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Thu, 5 Jan 2023 23:27:54 +0100 Subject: [PATCH 02/16] more content variety --- resources/js/components/App.js | 26 +++++++++++++++++-- resources/js/components/pages/Techniques.js | 22 ++++++++++------ resources/js/components/techniques/List.js | 7 +++-- .../js/components/techniques/Overview.js | 8 ++++-- resources/js/helpers/Technique.js | 10 +++++++ resources/js/i18n/de.js | 6 +++++ resources/js/i18n/en.js | 6 +++++ routes/api.php | 3 +++ 8 files changed, 74 insertions(+), 14 deletions(-) diff --git a/resources/js/components/App.js b/resources/js/components/App.js index bea5c34..fe8ff25 100644 --- a/resources/js/components/App.js +++ b/resources/js/components/App.js @@ -59,8 +59,30 @@ const App = () => {
} /> - } /> - } /> + } + /> + } + /> + } + /> + } + /> + } + /> + } + /> } /> } /> } /> diff --git a/resources/js/components/pages/Techniques.js b/resources/js/components/pages/Techniques.js index c206a31..4bc0066 100644 --- a/resources/js/components/pages/Techniques.js +++ b/resources/js/components/pages/Techniques.js @@ -1,4 +1,5 @@ import axios from 'axios'; +import PropTypes from 'prop-types'; import React from 'react'; import { withTranslation } from 'react-i18next'; @@ -10,7 +11,7 @@ import Overview from '../techniques/Overview'; import { compareTranslation } from '../../helpers/Technique'; import i18n from '../../i18n'; -const Techniques = () => { +const Techniques = ({ namespace, type }) => { const [error, setError] = React.useState(null); const [loading, setLoading] = React.useState(true); const [techniques, setTechniques] = React.useState([]); @@ -18,11 +19,11 @@ const Techniques = () => { React.useEffect(() => { const ctrl = new AbortController(); setLoading(true); - window.document.title = i18n.t('techniques.heading'); + window.document.title = i18n.t(`${namespace}.heading`); axios - .get(`/api/tech`, { + .get(`/api/content`, { params: { - type: 'tech', + type, }, signal: ctrl.signal }) @@ -39,12 +40,12 @@ const Techniques = () => { return () => { ctrl.abort(); }; - }, []); + }, [namespace, type]); React.useEffect(() => { - window.document.title = i18n.t('techniques.heading'); + window.document.title = i18n.t(`${namespace}.heading`); setTechniques(t => [...t].sort(compareTranslation('title', i18n.language))); - }, [i18n.language]); + }, [namespace, i18n.language]); if (loading) { return ; @@ -59,8 +60,13 @@ const Techniques = () => { } return - + ; }; +Techniques.propTypes = { + namespace: PropTypes.string, + type: PropTypes.string, +}; + export default withTranslation()(Techniques); diff --git a/resources/js/components/techniques/List.js b/resources/js/components/techniques/List.js index 0549cd3..58f0eae 100644 --- a/resources/js/components/techniques/List.js +++ b/resources/js/components/techniques/List.js @@ -2,14 +2,17 @@ import PropTypes from 'prop-types'; import React from 'react'; import { Link } from 'react-router-dom'; -import { getTranslation } from '../../helpers/Technique'; +import { + getLink, + getTranslation, +} from '../../helpers/Technique'; import i18n from '../../i18n'; const List = ({ techniques }) =>
    {techniques.map(tech =>
  • - + {getTranslation(tech, 'title', i18n.language)}

    diff --git a/resources/js/components/techniques/Overview.js b/resources/js/components/techniques/Overview.js index 8c7cd4d..1686865 100644 --- a/resources/js/components/techniques/Overview.js +++ b/resources/js/components/techniques/Overview.js @@ -6,12 +6,16 @@ import { withTranslation } from 'react-i18next'; import List from './List'; import i18n from '../../i18n'; -const Overview = ({ techniques }) => -

    {i18n.t('techniques.heading')}

    +const Overview = ({ + namespace, + techniques, +}) => +

    {i18n.t(`${namespace}.heading`)}

    ; Overview.propTypes = { + namespace: PropTypes.string, techniques: PropTypes.arrayOf(PropTypes.shape({ })), }; diff --git a/resources/js/helpers/Technique.js b/resources/js/helpers/Technique.js index 410f015..1a8f4fc 100644 --- a/resources/js/helpers/Technique.js +++ b/resources/js/helpers/Technique.js @@ -1,5 +1,15 @@ import i18n from '../i18n'; +export const getLink = tech => { + if (tech.type === 'mode') { + return `/modes/${tech.name}`; + } + if (tech.type === 'ruleset') { + return `/rulesets/${tech.name}`; + } + return `/tech/${tech.name}`; +}; + export const getRelations = (tech, type) => { const rs = (tech && tech.relations) || []; return type ? rs.filter(r => r && r.pivot && r.pivot.type === type) : rs; diff --git a/resources/js/i18n/de.js b/resources/js/i18n/de.js index f3fbe96..e77d1de 100644 --- a/resources/js/i18n/de.js +++ b/resources/js/i18n/de.js @@ -371,6 +371,9 @@ export default { somaria: 'Cane of Somaria', }, }, + modes: { + heading: 'Modi', + }, participants: { empty: 'Noch keine Teilnehmer eingetragen', heading: 'Teilnehmer', @@ -478,6 +481,9 @@ export default { unlockError: 'Fehler beim Entsperren', unlockSuccess: 'Runde entsperrt', }, + rulesets: { + heading: 'Regelsätze', + }, techniques: { heading: 'Techniken', seeAlso: 'Siehe auch', diff --git a/resources/js/i18n/en.js b/resources/js/i18n/en.js index 7088dd4..5a6695a 100644 --- a/resources/js/i18n/en.js +++ b/resources/js/i18n/en.js @@ -371,6 +371,9 @@ export default { somaria: 'Cane of Somaria', }, }, + modes: { + heading: 'Modes', + }, participants: { empty: 'No participants on record', heading: 'Participants', @@ -478,6 +481,9 @@ export default { unlockError: 'Error unlocking round', unlockSuccess: 'Round unlocked', }, + rulesets: { + heading: 'Rulesets', + }, techniques: { heading: 'Techniques', seeAlso: 'See also', diff --git a/routes/api.php b/routes/api.php index 0f7aa3e..4ec1bb1 100644 --- a/routes/api.php +++ b/routes/api.php @@ -29,6 +29,9 @@ Route::post('aos-seed/{hash}/retry', 'App\Http\Controllers\AosSeedController@ret Route::post('application/{application}/accept', 'App\Http\Controllers\ApplicationController@accept'); Route::post('application/{application}/reject', 'App\Http\Controllers\ApplicationController@reject'); +Route::get('content', 'App\Http\Controllers\TechniqueController@search'); +Route::get('content/{tech:name}', 'App\Http\Controllers\TechniqueController@single'); + Route::get('discord-guilds', 'App\Http\Controllers\DiscordGuildController@search'); Route::get('discord-guilds/{guild_id}', 'App\Http\Controllers\DiscordGuildController@single'); Route::get('discord-guilds/{guild_id}/channels', 'App\Http\Controllers\DiscordChannelController@search'); -- 2.39.2 From de9be1288c2b3214e007c8d67d6b19e756cf08ba Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Fri, 13 Jan 2023 14:24:54 +0100 Subject: [PATCH 03/16] tech ruleset classification --- app/Models/Technique.php | 1 + .../2022_08_19_080601_tech_index.php | 2 +- .../2023_01_13_121640_tech_ruleset.php | 32 +++++++++++++++++ resources/js/components/common/Icon.js | 3 ++ resources/js/components/techniques/Detail.js | 10 +++++- resources/js/components/techniques/List.js | 20 +++++++---- .../js/components/techniques/Rulesets.js | 36 +++++++++++++++++++ resources/js/i18n/de.js | 15 ++++++++ resources/js/i18n/en.js | 15 ++++++++ resources/sass/techniques.scss | 8 +++++ 10 files changed, 133 insertions(+), 9 deletions(-) create mode 100644 database/migrations/2023_01_13_121640_tech_ruleset.php create mode 100644 resources/js/components/techniques/Rulesets.js diff --git a/app/Models/Technique.php b/app/Models/Technique.php index f0a29d3..c8ad91b 100644 --- a/app/Models/Technique.php +++ b/app/Models/Technique.php @@ -30,6 +30,7 @@ class Technique extends Model protected $casts = [ 'index' => 'boolean', + 'rulesets' => 'array', ]; protected $with = [ diff --git a/database/migrations/2022_08_19_080601_tech_index.php b/database/migrations/2022_08_19_080601_tech_index.php index d1b6d6e..e0f615a 100644 --- a/database/migrations/2022_08_19_080601_tech_index.php +++ b/database/migrations/2022_08_19_080601_tech_index.php @@ -26,7 +26,7 @@ return new class extends Migration */ public function down() { - Schema::table('rounds', function(Blueprint $table) { + Schema::table('techniques', function(Blueprint $table) { $table->dropColumn('index'); $table->dropColumn('priority'); }); diff --git a/database/migrations/2023_01_13_121640_tech_ruleset.php b/database/migrations/2023_01_13_121640_tech_ruleset.php new file mode 100644 index 0000000..1765f40 --- /dev/null +++ b/database/migrations/2023_01_13_121640_tech_ruleset.php @@ -0,0 +1,32 @@ +text('rulesets')->nullable()->default(null); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('techniques', function(Blueprint $table) { + $table->dropColumn('rulesets'); + }); + } +}; diff --git a/resources/js/components/common/Icon.js b/resources/js/components/common/Icon.js index 581ce6f..bce75f5 100644 --- a/resources/js/components/common/Icon.js +++ b/resources/js/components/common/Icon.js @@ -59,6 +59,7 @@ const makePreset = (presetDisplayName, presetName) => { Icon.ACCEPT = makePreset('AcceptIcon', 'square-check'); Icon.ADD = makePreset('AddIcon', 'circle-plus'); +Icon.ALLOWED = makePreset('AllowedIcon', 'square-check'); Icon.APPLY = makePreset('ApplyIcon', 'right-to-bracket'); Icon.APPLICATIONS = makePreset('ApplicationsIcon', 'person-running'); Icon.CHART = makePreset('ChartIcon', 'chart-line'); @@ -66,6 +67,7 @@ Icon.DISCORD = makePreset('DiscordIcon', ['fab', 'discord']); Icon.EDIT = makePreset('EditIcon', 'edit'); Icon.FINISHED = makePreset('FinishedIcon', 'square-check'); Icon.FIRST_PLACE = makePreset('FirstPlaceIcon', 'trophy'); +Icon.FORBIDDEN = makePreset('ForbiddenIcon', 'square-xmark'); Icon.FORFEIT = makePreset('ForfeitIcon', 'square-xmark'); Icon.LANGUAGE = makePreset('LanguageIcon', 'language'); Icon.LOCKED = makePreset('LockedIcon', 'lock'); @@ -80,6 +82,7 @@ Icon.SETTINGS = makePreset('SettingsIcon', 'cog'); Icon.STREAM = makePreset('StreamIcon', ['fab', 'twitch']); Icon.THIRD_PLACE = makePreset('ThirdPlaceIcon', 'award'); Icon.TWITCH = makePreset('TwitchIcon', ['fab', 'twitch']); +Icon.UNKNOWN = makePreset('UnknownIcon', 'square-question'); Icon.UNLOCKED = makePreset('UnlockedIcon', 'lock-open'); Icon.VIDEO = makePreset('VideoIcon', 'video'); Icon.YOUTUBE = makePreset('YoutubeIcon', ['fab', 'youtube']); diff --git a/resources/js/components/techniques/Detail.js b/resources/js/components/techniques/Detail.js index 488205b..6653923 100644 --- a/resources/js/components/techniques/Detail.js +++ b/resources/js/components/techniques/Detail.js @@ -5,6 +5,7 @@ import { withTranslation } from 'react-i18next'; import List from './List'; import Outline from './Outline'; +import Rulesets from './Rulesets'; import RawHTML from '../common/RawHTML'; import { getRelations, @@ -15,7 +16,12 @@ import { import i18n from '../../i18n'; const Detail = ({ technique }) => -

    {getTranslation(technique, 'title', i18n.language)}

    +
    +

    {getTranslation(technique, 'title', i18n.language)}

    + {technique && technique.rulesets ? + + : null} +
    {technique.chapters ? technique.chapters.map(chapter => @@ -41,6 +47,8 @@ Detail.propTypes = { chapters: PropTypes.arrayOf(PropTypes.shape({ })), description: PropTypes.string, + rulesets: PropTypes.shape({ + }), title: PropTypes.string, }), }; diff --git a/resources/js/components/techniques/List.js b/resources/js/components/techniques/List.js index 58f0eae..e18937e 100644 --- a/resources/js/components/techniques/List.js +++ b/resources/js/components/techniques/List.js @@ -2,6 +2,7 @@ import PropTypes from 'prop-types'; import React from 'react'; import { Link } from 'react-router-dom'; +import Rulesets from './Rulesets'; import { getLink, getTranslation, @@ -10,13 +11,18 @@ import i18n from '../../i18n'; const List = ({ techniques }) =>
      {techniques.map(tech => -
    • -

      - - {getTranslation(tech, 'title', i18n.language)} - -

      -

      {getTranslation(tech, 'short', i18n.language)}

      +
    • +
      +

      + + {getTranslation(tech, 'title', i18n.language)} + +

      +

      {getTranslation(tech, 'short', i18n.language)}

      +
      + {tech.rulesets ? + + : null}
    • )}
    ; diff --git a/resources/js/components/techniques/Rulesets.js b/resources/js/components/techniques/Rulesets.js new file mode 100644 index 0000000..6d4ee50 --- /dev/null +++ b/resources/js/components/techniques/Rulesets.js @@ -0,0 +1,36 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import Icon from '../common/Icon'; + +const Rulesets = ({ technique }) => { + const { t } = useTranslation(); + + return
    + {['competitive', 'owg', 'mg', 'nl'].map(r => + + {technique && technique.rulesets && technique.rulesets[r] ? + + : null} + {technique && technique.rulesets && !technique.rulesets[r] ? + + : null} + {!technique || !technique.rulesets ? + + : null} + {' '} + {t(`techniques.rulesetCodes.${r}`)} + + )} +
    ; +}; + +Rulesets.propTypes = { + technique: PropTypes.shape({ + rulesets: PropTypes.shape({ + }), + }), +}; + +export default Rulesets; diff --git a/resources/js/i18n/de.js b/resources/js/i18n/de.js index e77d1de..1334fde 100644 --- a/resources/js/i18n/de.js +++ b/resources/js/i18n/de.js @@ -294,6 +294,7 @@ export default { }, icon: { AddIcon: 'Hinzufügen', + AllowedIcon: 'Erlaubt', ApplicationsIcon: 'Anträge', ApplyIcon: 'Beantragen', ChartIcon: 'Diagramm', @@ -301,6 +302,7 @@ export default { EditIcon: 'Bearbeiten', FinishedIcon: 'Abgeschlossen', FirstPlaceIcon: 'Erster Platz', + ForbiddenIcon: 'Verboten', ForfeitIcon: 'Aufgegeben', LanguageIcon: 'Sprache', LockedIcon: 'Gesperrt', @@ -313,6 +315,7 @@ export default { StreamIcon: 'Stream', ThirdPlaceIcon: 'Dritter Platz', TwitchIcon: 'Twitch', + UnknownIcon: 'Unbekannt', UnlockedIcon: 'Offen', YoutubeIcon: 'YouTube', VideoIcon: 'Video', @@ -486,6 +489,18 @@ export default { }, techniques: { heading: 'Techniken', + rulesetCodes: { + competitive: 'COM', + mg: 'MG', + nl: 'NL', + owg: 'OWG', + }, + rulesetDescriptions: { + competitive: 'Competitive', + mg: 'Major Glitches', + nl: 'No Logic', + owg: 'Overworld Glitches', + }, seeAlso: 'Siehe auch', }, tournaments: { diff --git a/resources/js/i18n/en.js b/resources/js/i18n/en.js index 5a6695a..d4e61bb 100644 --- a/resources/js/i18n/en.js +++ b/resources/js/i18n/en.js @@ -294,6 +294,7 @@ export default { }, icon: { AddIcon: 'Add', + AllowedIcon: 'Allowed', ApplicationsIcon: 'Applications', ApplyIcon: 'Apply', ChartIcon: 'Chart', @@ -301,6 +302,7 @@ export default { EditIcon: 'Edit', FinishedIcon: 'Finished', FirstPlaceIcon: 'First Place', + ForbiddenIcon: 'Forbidden', ForfeitIcon: 'Forfeit', LanguageIcon: 'Language', LockedIcon: 'Locked', @@ -313,6 +315,7 @@ export default { StreamIcon: 'Stream', ThirdPlaceIcon: 'Third Place', TwitchIcon: 'Twitch', + UnknownIcon: 'Unknown', UnlockedIcon: 'Unlocked', YoutubeIcon: 'YouTube', VideoIcon: 'Video', @@ -486,6 +489,18 @@ export default { }, techniques: { heading: 'Techniques', + rulesetCodes: { + competitive: 'COM', + mg: 'MG', + nl: 'NL', + owg: 'OWG', + }, + rulesetDescriptions: { + competitive: 'Competitive', + mg: 'Major Glitches', + nl: 'No Logic', + owg: 'Overworld Glitches', + }, seeAlso: 'See also', }, tournaments: { diff --git a/resources/sass/techniques.scss b/resources/sass/techniques.scss index 19dcf41..a28c438 100644 --- a/resources/sass/techniques.scss +++ b/resources/sass/techniques.scss @@ -1,3 +1,11 @@ +.ruleset-box { + display: inline-grid; + grid-template-columns: 1fr 1fr; + gap: 0 1ex; + padding: 0.5ex; + border-radius: 0.5ex; +} + .tech-list { margin: 1em 0; padding: 0; -- 2.39.2 From 2c5535946aa15278c6e969c9a9b24d32a45e5b12 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Fri, 13 Jan 2023 18:31:56 +0100 Subject: [PATCH 04/16] allow filtering of techniques by ruleset --- app/Http/Controllers/TechniqueController.php | 31 ++++++++++++ resources/js/components/pages/Techniques.js | 38 +++++++++++--- .../js/components/techniques/Overview.js | 14 +++++- .../js/components/techniques/TechFilter.js | 49 +++++++++++++++++++ resources/js/i18n/de.js | 1 + resources/js/i18n/en.js | 1 + resources/sass/techniques.scss | 12 +++++ 7 files changed, 139 insertions(+), 7 deletions(-) create mode 100644 resources/js/components/techniques/TechFilter.js diff --git a/app/Http/Controllers/TechniqueController.php b/app/Http/Controllers/TechniqueController.php index 9862325..8694c04 100644 --- a/app/Http/Controllers/TechniqueController.php +++ b/app/Http/Controllers/TechniqueController.php @@ -12,6 +12,11 @@ class TechniqueController extends Controller public function search(Request $request) { $validatedData = $request->validate([ 'phrase' => 'string|nullable', + 'ruleset' => 'array|nullable', + 'ruleset.competitive' => 'boolean', + 'ruleset.mg' => 'boolean', + 'ruleset.nl' => 'boolean', + 'ruleset.owg' => 'boolean', 'type' => 'string|nullable', ]); @@ -29,6 +34,32 @@ class TechniqueController extends Controller }); } + if (isset($validatedData['ruleset'])) { + $com = isset($validatedData['ruleset']['competitive']) && $validatedData['ruleset']['competitive']; + $owg = isset($validatedData['ruleset']['owg']) && $validatedData['ruleset']['owg']; + $mg = isset($validatedData['ruleset']['mg']) && $validatedData['ruleset']['mg']; + $nl = isset($validatedData['ruleset']['nl']) && $validatedData['ruleset']['nl']; + $any = $com || $owg || $mg || $nl; + $all = $com && $owg && $mg && $nl; + if ($any && !$all) { + $techs->where(function(Builder $query) use ($com, $owg, $mg, $nl) { + $query->whereNull('rulesets'); + if ($com) { + $query->orWhere('rulesets->competitive', '=', true); + } + if ($owg) { + $query->orWhere('rulesets->owg', '=', true); + } + if ($mg) { + $query->orWhere('rulesets->mg', '=', true); + } + if ($nl) { + $query->orWhere('rulesets->nl', '=', true); + } + }); + } + } + return $techs->get()->toJson(); } diff --git a/resources/js/components/pages/Techniques.js b/resources/js/components/pages/Techniques.js index 4bc0066..ddecf56 100644 --- a/resources/js/components/pages/Techniques.js +++ b/resources/js/components/pages/Techniques.js @@ -13,17 +13,35 @@ import i18n from '../../i18n'; const Techniques = ({ namespace, type }) => { const [error, setError] = React.useState(null); + const [filter, setFilter] = React.useState({}); const [loading, setLoading] = React.useState(true); const [techniques, setTechniques] = React.useState([]); + React.useEffect(() => { + const savedFilter = localStorage.getItem(`content.filter.${type}`); + if (savedFilter) { + setFilter(JSON.parse(savedFilter)); + } else { + setFilter(filter => filter ? {} : filter); + } + }, [type]); + + const updateFilter = React.useCallback(newFilter => { + localStorage.setItem(`content.filter.${type}`, JSON.stringify(newFilter)); + setFilter(newFilter); + }, [type]); + React.useEffect(() => { const ctrl = new AbortController(); - setLoading(true); + if (!techniques.length) { + setLoading(true); + } window.document.title = i18n.t(`${namespace}.heading`); axios .get(`/api/content`, { params: { type, + ...filter, }, signal: ctrl.signal }) @@ -33,14 +51,16 @@ const Techniques = ({ namespace, type }) => { setTechniques(response.data.sort(compareTranslation('title', i18n.language))); }) .catch(error => { - setError(error); - setLoading(false); - setTechniques([]); + if (!axios.isCancel(error)) { + setError(error); + setLoading(false); + setTechniques([]); + } }); return () => { ctrl.abort(); }; - }, [namespace, type]); + }, [filter, namespace, type]); React.useEffect(() => { window.document.title = i18n.t(`${namespace}.heading`); @@ -60,7 +80,13 @@ const Techniques = ({ namespace, type }) => { } return - + ; }; diff --git a/resources/js/components/techniques/Overview.js b/resources/js/components/techniques/Overview.js index 1686865..f82a877 100644 --- a/resources/js/components/techniques/Overview.js +++ b/resources/js/components/techniques/Overview.js @@ -4,20 +4,32 @@ import { Container } from 'react-bootstrap'; import { withTranslation } from 'react-i18next'; import List from './List'; +import TechFilter from './TechFilter'; import i18n from '../../i18n'; const Overview = ({ + filter, namespace, + setFilter, techniques, + type, }) => -

    {i18n.t(`${namespace}.heading`)}

    +
    +

    {i18n.t(`${namespace}.heading`)}

    + {type === 'tech' ? + + : null} +
    ; Overview.propTypes = { + filter: PropTypes.shape({}), namespace: PropTypes.string, + setFilter: PropTypes.func, techniques: PropTypes.arrayOf(PropTypes.shape({ })), + type: PropTypes.string, }; export default withTranslation()(Overview); diff --git a/resources/js/components/techniques/TechFilter.js b/resources/js/components/techniques/TechFilter.js new file mode 100644 index 0000000..008288a --- /dev/null +++ b/resources/js/components/techniques/TechFilter.js @@ -0,0 +1,49 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import { Form } from 'react-bootstrap'; +import { useTranslation } from 'react-i18next'; + +const TechFilter = ({ filter, setFilter }) => { + const { t } = useTranslation(); + + const handleChange = React.useCallback(e => { + if (e.target.name.startsWith('ruleset.')) { + const r = e.target.name.substring(8); + setFilter({ + ...filter, + ruleset: { + ...filter.ruleset || {}, + [r]: e.target.checked ? '1' : '0', + }, + }); + } + }, [filter]); + + return
    +
    {t('techniques.rulesetFilterHeading')}
    +
    + {['competitive', 'owg', 'mg', 'nl'].map(r => + + )} +
    +
    ; +}; + +TechFilter.propTypes = { + filter: PropTypes.shape({ + ruleset: PropTypes.shape({ + }), + }), + setFilter: PropTypes.func, +}; + +export default TechFilter; diff --git a/resources/js/i18n/de.js b/resources/js/i18n/de.js index 1334fde..0812fd4 100644 --- a/resources/js/i18n/de.js +++ b/resources/js/i18n/de.js @@ -501,6 +501,7 @@ export default { nl: 'No Logic', owg: 'Overworld Glitches', }, + rulesetFilterHeading: 'Zeige nur Techniken, die in folgenden Regelsätzen erlaubt sind:', seeAlso: 'Siehe auch', }, tournaments: { diff --git a/resources/js/i18n/en.js b/resources/js/i18n/en.js index d4e61bb..030b023 100644 --- a/resources/js/i18n/en.js +++ b/resources/js/i18n/en.js @@ -501,6 +501,7 @@ export default { nl: 'No Logic', owg: 'Overworld Glitches', }, + rulesetFilterHeading: 'Only show techniques allowed in the following rulesets:', seeAlso: 'See also', }, tournaments: { diff --git a/resources/sass/techniques.scss b/resources/sass/techniques.scss index a28c438..8355e70 100644 --- a/resources/sass/techniques.scss +++ b/resources/sass/techniques.scss @@ -4,6 +4,18 @@ gap: 0 1ex; padding: 0.5ex; border-radius: 0.5ex; + + .form-check label { + margin-top: 0; + } +} + +.tech-filter { + max-width: 18em; + text-align: right; + .form-check { + text-align: left; + } } .tech-list { -- 2.39.2 From a94dda65a823a1f191ffbc3981448adfae270fcc Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Sat, 14 Jan 2023 00:54:37 +0100 Subject: [PATCH 05/16] translate tech title --- resources/js/components/pages/Technique.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/resources/js/components/pages/Technique.js b/resources/js/components/pages/Technique.js index 19b56b7..8c202ed 100644 --- a/resources/js/components/pages/Technique.js +++ b/resources/js/components/pages/Technique.js @@ -1,5 +1,6 @@ import axios from 'axios'; import React, { useEffect, useState } from 'react'; +import { withTranslation } from 'react-i18next'; import { useParams } from 'react-router-dom'; import ErrorBoundary from '../common/ErrorBoundary'; @@ -7,6 +8,8 @@ import ErrorMessage from '../common/ErrorMessage'; import Loading from '../common/Loading'; import NotFound from '../pages/NotFound'; import Detail from '../techniques/Detail'; +import { getTranslation } from '../../helpers/Technique'; +import i18n from '../../i18n'; const Technique = () => { const params = useParams(); @@ -25,7 +28,6 @@ const Technique = () => { setError(null); setLoading(false); setTechnique(response.data); - window.document.title = response.data.title; }) .catch(error => { setError(error); @@ -37,6 +39,12 @@ const Technique = () => { }; }, [name]); + useEffect(() => { + if (technique) { + window.document.title = getTranslation(technique, 'title', i18n.language); + } + }, [technique, i18n.language]); + if (loading) { return ; } @@ -54,4 +62,4 @@ const Technique = () => { ; }; -export default Technique; +export default withTranslation()(Technique); -- 2.39.2 From 18759929710746d45d0f69e4f09205db3ddc74af Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Wed, 18 Jan 2023 12:00:24 +0100 Subject: [PATCH 06/16] snes button icons --- public/icon/dpad-d.svg | 179 +++++++++++++++++++++++++++++++++++++ public/icon/dpad-dl.svg | 179 +++++++++++++++++++++++++++++++++++++ public/icon/dpad-dr.svg | 179 +++++++++++++++++++++++++++++++++++++ public/icon/dpad-l.svg | 179 +++++++++++++++++++++++++++++++++++++ public/icon/dpad-r.svg | 179 +++++++++++++++++++++++++++++++++++++ public/icon/dpad-u.svg | 179 +++++++++++++++++++++++++++++++++++++ public/icon/dpad-ul.svg | 179 +++++++++++++++++++++++++++++++++++++ public/icon/dpad-ur.svg | 179 +++++++++++++++++++++++++++++++++++++ public/icon/dpad.svg | 179 +++++++++++++++++++++++++++++++++++++ resources/sass/common.scss | 119 ++++++++++++++++++++++++ 10 files changed, 1730 insertions(+) create mode 100644 public/icon/dpad-d.svg create mode 100644 public/icon/dpad-dl.svg create mode 100644 public/icon/dpad-dr.svg create mode 100644 public/icon/dpad-l.svg create mode 100644 public/icon/dpad-r.svg create mode 100644 public/icon/dpad-u.svg create mode 100644 public/icon/dpad-ul.svg create mode 100644 public/icon/dpad-ur.svg create mode 100644 public/icon/dpad.svg diff --git a/public/icon/dpad-d.svg b/public/icon/dpad-d.svg new file mode 100644 index 0000000..5643bd2 --- /dev/null +++ b/public/icon/dpad-d.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/icon/dpad-dl.svg b/public/icon/dpad-dl.svg new file mode 100644 index 0000000..79aefea --- /dev/null +++ b/public/icon/dpad-dl.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/icon/dpad-dr.svg b/public/icon/dpad-dr.svg new file mode 100644 index 0000000..df5bbb8 --- /dev/null +++ b/public/icon/dpad-dr.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/icon/dpad-l.svg b/public/icon/dpad-l.svg new file mode 100644 index 0000000..6da61e2 --- /dev/null +++ b/public/icon/dpad-l.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/icon/dpad-r.svg b/public/icon/dpad-r.svg new file mode 100644 index 0000000..af6ba8c --- /dev/null +++ b/public/icon/dpad-r.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/icon/dpad-u.svg b/public/icon/dpad-u.svg new file mode 100644 index 0000000..92430f8 --- /dev/null +++ b/public/icon/dpad-u.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/icon/dpad-ul.svg b/public/icon/dpad-ul.svg new file mode 100644 index 0000000..c1bab1b --- /dev/null +++ b/public/icon/dpad-ul.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/icon/dpad-ur.svg b/public/icon/dpad-ur.svg new file mode 100644 index 0000000..4d4387d --- /dev/null +++ b/public/icon/dpad-ur.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/icon/dpad.svg b/public/icon/dpad.svg new file mode 100644 index 0000000..f013f75 --- /dev/null +++ b/public/icon/dpad.svg @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/sass/common.scss b/resources/sass/common.scss index c8528e1..83e5b90 100644 --- a/resources/sass/common.scss +++ b/resources/sass/common.scss @@ -41,6 +41,125 @@ h1 { } } +.snes-button-a, +.snes-button-b, +.snes-button-x, +.snes-button-y { + display: inline-block; + width: 1.5em; + height: 0; + padding: .75em 0; + box-shadow: .125ex .125ex .125ex rgba(0, 0, 0, .5); + border-radius: .75em; + font-size: 90%; + font-weight: bold; + text-align: center; + text-transform: uppercase; + line-height: 0; +} +.snes-button-a { + background: #c1121c; + color: white; +} +.snes-button-b { + background: #f7ba0b; + color: black; +} +.snes-button-x { + background: #00387b; + color: white; +} +.snes-button-y { + background: #007243; + color: white; +} +.snes-shoulder-l, +.snes-shoulder-r { + display: inline-block; + width: 3em; + height: 0; + padding: .75em 0; + box-shadow: .125ex .125ex .125ex rgba(0, 0, 0, .5); + border-radius: .75em; + font-size: 90%; + font-weight: bold; + text-align: center; + text-transform: uppercase; + line-height: 0; + background: #b2b4b2; + color: #54585a; +} +.snes-start, +.snes-select { + display: inline-flex; + flex-direction: column; + align-items: center; + vertical-align: middle; + font-size: 50%; + text-transform: uppercase; + + &::before { + display: inline-block; + content: ''; + background: #54585a; + width: 2em; + height: 0.7em; + border-radius: 0.35em; + transform: rotate(-40deg); + margin-bottom: 0.75em; + border: thin solid black; + } +} +.snes-dpad, +.snes-dpad-r, +.snes-dpad-dr, +.snes-dpad-d, +.snes-dpad-dl, +.snes-dpad-l, +.snes-dpad-ul, +.snes-dpad-u, +.snes-dpad-ur { + display: inline-block; + + &::before { + display: inline-block; + content: ''; + width: 2em; + height: 2em; + margin-right: 0.5ex; + vertical-align: middle; + background-repeat: no-repeat; + background-size: contain; + } + + &.compact { + position: relative; + > span { + display: none; + position: absolute; + left: -50%; + top: -125%; + background: $dark; + padding: 0.5ex 1ex; + white-space: nowrap; + } + &:active > span, + &:focus > span, + &:hover > span { + display: block; + } + } +} +.snes-dpad::before { background-image: url(/icon/dpad.svg); } +.snes-dpad-r::before { background-image: url(/icon/dpad-r.svg); } +.snes-dpad-dr::before { background-image: url(/icon/dpad-dr.svg); } +.snes-dpad-d::before { background-image: url(/icon/dpad-d.svg); } +.snes-dpad-dl::before { background-image: url(/icon/dpad-dl.svg); } +.snes-dpad-l::before { background-image: url(/icon/dpad-l.svg); } +.snes-dpad-ul::before { background-image: url(/icon/dpad-ul.svg); } +.snes-dpad-u::before { background-image: url(/icon/dpad-u.svg); } +.snes-dpad-ur::before { background-image: url(/icon/dpad-ur.svg); } + .spoiler { border-radius: 0.5ex; padding: 0 0.5ex; -- 2.39.2 From 18424fc6de2fc902ee2b2d3143955081263adff4 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Wed, 1 Feb 2023 15:48:26 +0100 Subject: [PATCH 07/16] add plain maps --- package-lock.json | 14 +++ package.json | 1 + resources/js/components/App.js | 2 + resources/js/components/map/Buttons.js | 47 ++++++++ resources/js/components/map/OpenSeadragon.js | 79 ++++++++++++++ resources/js/components/map/Viewer.js | 109 +++++++++++++++++++ resources/js/components/pages/Map.js | 23 ++++ resources/js/i18n/de.js | 11 ++ resources/js/i18n/en.js | 11 ++ webpack.mix.js | 1 + 10 files changed, 298 insertions(+) create mode 100644 resources/js/components/map/Buttons.js create mode 100644 resources/js/components/map/OpenSeadragon.js create mode 100644 resources/js/components/map/Viewer.js create mode 100644 resources/js/components/pages/Map.js diff --git a/package-lock.json b/package-lock.json index f5f22c9..6bc7914 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "localforage": "^1.10.0", "moment": "^2.29.1", "numeral": "^2.0.6", + "openseadragon": "^4.0.0", "pusher-js": "^7.0.6", "qs": "^6.10.3", "react-bootstrap": "^2.2.0", @@ -8280,6 +8281,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/openseadragon": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/openseadragon/-/openseadragon-4.0.0.tgz", + "integrity": "sha512-HsjSgqiiPwLkW5576GxDJ7Rax96iLUET8fnTsJvu7uYYkd+qzen3bflxHyph0OVVgZBKP9SpGH1nPdU4Mz0Z2A==", + "funding": { + "url": "https://opencollective.com/openseadragon" + } + }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -18393,6 +18402,11 @@ "is-wsl": "^2.2.0" } }, + "openseadragon": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/openseadragon/-/openseadragon-4.0.0.tgz", + "integrity": "sha512-HsjSgqiiPwLkW5576GxDJ7Rax96iLUET8fnTsJvu7uYYkd+qzen3bflxHyph0OVVgZBKP9SpGH1nPdU4Mz0Z2A==" + }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", diff --git a/package.json b/package.json index 144f3dd..4f7a3a6 100644 --- a/package.json +++ b/package.json @@ -85,6 +85,7 @@ "localforage": "^1.10.0", "moment": "^2.29.1", "numeral": "^2.0.6", + "openseadragon": "^4.0.0", "pusher-js": "^7.0.6", "qs": "^6.10.3", "react-bootstrap": "^2.2.0", diff --git a/resources/js/components/App.js b/resources/js/components/App.js index fe8ff25..d84474c 100644 --- a/resources/js/components/App.js +++ b/resources/js/components/App.js @@ -6,6 +6,7 @@ import Footer from './common/Footer'; import Header from './common/Header'; import AlttpSeed from './pages/AlttpSeed'; import Front from './pages/Front'; +import Map from './pages/Map'; import Technique from './pages/Technique'; import Techniques from './pages/Techniques'; import Tournament from './pages/Tournament'; @@ -59,6 +60,7 @@ const App = () => {
    } /> + } /> } diff --git a/resources/js/components/map/Buttons.js b/resources/js/components/map/Buttons.js new file mode 100644 index 0000000..b43fc0e --- /dev/null +++ b/resources/js/components/map/Buttons.js @@ -0,0 +1,47 @@ +import React from 'react'; +import { Button } from 'react-bootstrap'; +import { useTranslation } from 'react-i18next'; + +import { useOpenSeadragon } from './OpenSeadragon'; + +const Buttons = () => { + const { viewer } = useOpenSeadragon(); + const { t } = useTranslation(); + + const goToPage = React.useCallback((p) => { + if (viewer) viewer.goToPage(p); + }, [viewer]); + + return
    + + + + +
    ; +}; + +export default Buttons; diff --git a/resources/js/components/map/OpenSeadragon.js b/resources/js/components/map/OpenSeadragon.js new file mode 100644 index 0000000..f854318 --- /dev/null +++ b/resources/js/components/map/OpenSeadragon.js @@ -0,0 +1,79 @@ +import OpenSeadragon from 'openseadragon'; +import PropTypes from 'prop-types'; +import React from 'react'; + +export const Context = React.createContext({}); + +export const useOpenSeadragon = () => React.useContext(Context); + +export const Provider = React.forwardRef(({ children }, ref) => { + const [viewer, setViewer] = React.useState(null); + + React.useEffect(() => { + if (!ref.current) return; + + const v = OpenSeadragon({ + element: ref.current, + preserveViewport: true, + sequenceMode: true, + showNavigator: true, + showNavigationControl: false, + showSequenceControl: false, + tileSources: [ + new OpenSeadragon.DziTileSource({ + width: 8192, + height: 8192, + tileSize: 256, + tileOverlap: 0, + minLevel: 8, + maxLevel: 13, + tilesUrl: '/media/alttp/map/lw_files/', + fileFormat: 'png', + }), new OpenSeadragon.DziTileSource({ + width: 8192, + height: 8192, + tileSize: 256, + tileOverlap: 0, + minLevel: 8, + maxLevel: 13, + tilesUrl: '/media/alttp/map/dw_files/', + fileFormat: 'png', + }), new OpenSeadragon.DziTileSource({ + width: 8192, + height: 4096, + tileSize: 256, + tileOverlap: 0, + minLevel: 8, + maxLevel: 13, + tilesUrl: '/media/alttp/map/sp_files/', + fileFormat: 'png', + }), new OpenSeadragon.DziTileSource({ + width: 16384, + height: 16384, + tileSize: 256, + tileOverlap: 0, + minLevel: 8, + maxLevel: 14, + tilesUrl: '/media/alttp/map/uw_files/', + fileFormat: 'png', + }), + ], + }); + setViewer(v); + return () => { + v.destroy(); + }; + }, [ref.current]); + + return + {children} + ; +}); + +Provider.displayName = 'OpenSeadragonProvider'; + +Provider.propTypes = { + children: PropTypes.node, +}; + +export default Provider; diff --git a/resources/js/components/map/Viewer.js b/resources/js/components/map/Viewer.js new file mode 100644 index 0000000..473c179 --- /dev/null +++ b/resources/js/components/map/Viewer.js @@ -0,0 +1,109 @@ +import OpenSeadragon from 'openseadragon'; +import React from 'react'; +import { Button } from 'react-bootstrap'; +import { useTranslation } from 'react-i18next'; + +const Viewer = () => { + const [viewer, setViewer] = React.useState(null); + + const container = React.useRef(); + const { t } = useTranslation(); + + React.useEffect(() => { + if (!container.current) return; + + const v = OpenSeadragon({ + element: container.current, + preserveViewport: true, + sequenceMode: true, + showNavigator: true, + showNavigationControl: false, + showSequenceControl: false, + //tileSources: [ + // new OpenSeadragon.DziTileSource({ + // width: 8192, + // height: 8192, + // tileSize: 256, + // tileOverlap: 0, + // minLevel: 8, + // maxLevel: 13, + // tilesUrl: '/media/alttp/map/lw_files/', + // fileFormat: 'png', + // }), new OpenSeadragon.DziTileSource({ + // width: 8192, + // height: 8192, + // tileSize: 256, + // tileOverlap: 0, + // minLevel: 8, + // maxLevel: 13, + // tilesUrl: '/media/alttp/map/dw_files/', + // fileFormat: 'png', + // }), new OpenSeadragon.DziTileSource({ + // width: 8192, + // height: 8192, + // tileSize: 256, + // tileOverlap: 0, + // minLevel: 8, + // maxLevel: 13, + // tilesUrl: '/media/alttp/map/sp_files/', + // fileFormat: 'png', + // }), new OpenSeadragon.DziTileSource({ + // width: 16384, + // height: 16384, + // tileSize: 256, + // tileOverlap: 0, + // minLevel: 8, + // maxLevel: 14, + // tilesUrl: '/media/alttp/map/uw_files/', + // fileFormat: 'png', + // }), + //], + }); + setViewer(v); + return () => { + v.destroy(); + }; + }, [container.current]); + + const goToPage = React.useCallback((p) => { + if (viewer) viewer.goToPage(p); + }, [viewer]); + + return <> +
    +
    + + + + +
    +
    +
    + ; +}; + +export default Viewer; diff --git a/resources/js/components/pages/Map.js b/resources/js/components/pages/Map.js new file mode 100644 index 0000000..50a28fb --- /dev/null +++ b/resources/js/components/pages/Map.js @@ -0,0 +1,23 @@ +import React from 'react'; +import { Container } from 'react-bootstrap'; +import { useTranslation } from 'react-i18next'; + +import Buttons from '../map/Buttons'; +import OpenSeadragon from '../map/OpenSeadragon'; + +const Map = () => { + const container = React.useRef(); + const { t } = useTranslation(); + + return + +
    +

    {t('map.heading')}

    + +
    +
    + + ; +}; + +export default Map; diff --git a/resources/js/i18n/de.js b/resources/js/i18n/de.js index 0812fd4..f4b73e5 100644 --- a/resources/js/i18n/de.js +++ b/resources/js/i18n/de.js @@ -374,6 +374,17 @@ export default { somaria: 'Cane of Somaria', }, }, + map: { + dwLong: 'Dark World', + dwShort: 'DW', + heading: 'Karte', + lwLong: 'Light World', + lwShort: 'LW', + spLong: 'Spezielle Gebiete', + spShort: 'SP', + uwLong: 'Underworld', + uwShort: 'UW', + }, modes: { heading: 'Modi', }, diff --git a/resources/js/i18n/en.js b/resources/js/i18n/en.js index 030b023..6498b85 100644 --- a/resources/js/i18n/en.js +++ b/resources/js/i18n/en.js @@ -374,6 +374,17 @@ export default { somaria: 'Cane of Somaria', }, }, + map: { + dwLong: 'Dark World', + dwShort: 'DW', + heading: 'Map', + lwLong: 'Light World', + lwShort: 'LW', + spLong: 'Special Areas', + spShort: 'SP', + uwLong: 'Underworld', + uwShort: 'UW', + }, modes: { heading: 'Modes', }, diff --git a/webpack.mix.js b/webpack.mix.js index 0e8f447..714cba7 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -67,6 +67,7 @@ mix.js('resources/js/app.js', 'public/js') 'nanoclone', 'object-assign', 'object-inspect', + 'openseadragon', 'performance-now', 'process', 'prop-types', -- 2.39.2 From df04cf968fa80a7dcda923ce91242ba52b5ce038 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Sat, 4 Feb 2023 14:11:56 +0100 Subject: [PATCH 08/16] composer update --- composer.lock | 2172 ++++++++++++++++++++++++------------------------- 1 file changed, 1049 insertions(+), 1123 deletions(-) diff --git a/composer.lock b/composer.lock index 2a90da2..660ab1d 100644 --- a/composer.lock +++ b/composer.lock @@ -8,16 +8,16 @@ "packages": [ { "name": "beyondcode/laravel-websockets", - "version": "1.13.1", + "version": "1.13.2", "source": { "type": "git", "url": "https://github.com/beyondcode/laravel-websockets.git", - "reference": "f0649b65fb5562d20eff66f61716ef98717e228a" + "reference": "50f8a1e77227a2d2302d45b99185d68a1c1c6866" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beyondcode/laravel-websockets/zipball/f0649b65fb5562d20eff66f61716ef98717e228a", - "reference": "f0649b65fb5562d20eff66f61716ef98717e228a", + "url": "https://api.github.com/repos/beyondcode/laravel-websockets/zipball/50f8a1e77227a2d2302d45b99185d68a1c1c6866", + "reference": "50f8a1e77227a2d2302d45b99185d68a1c1c6866", "shasum": "" }, "require": { @@ -84,32 +84,31 @@ ], "support": { "issues": "https://github.com/beyondcode/laravel-websockets/issues", - "source": "https://github.com/beyondcode/laravel-websockets/tree/1.13.1" + "source": "https://github.com/beyondcode/laravel-websockets/tree/1.13.2" }, - "time": "2022-03-03T08:41:47+00:00" + "time": "2022-10-19T18:15:42+00:00" }, { "name": "brick/math", - "version": "0.9.3", + "version": "0.11.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", + "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", "shasum": "" }, "require": { - "ext-json": "*", - "php": "^7.1 || ^8.0" + "php": "^8.0" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.9.2" + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "5.0.0" }, "type": "library", "autoload": { @@ -134,19 +133,15 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.3" + "source": "https://github.com/brick/math/tree/0.11.0" }, "funding": [ { "url": "https://github.com/BenMorel", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/brick/math", - "type": "tidelift" } ], - "time": "2021-08-15T20:50:18+00:00" + "time": "2023-01-15T23:15:59+00:00" }, { "name": "cboden/ratchet", @@ -213,16 +208,16 @@ }, { "name": "dflydev/dot-access-data", - "version": "v3.0.1", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "0992cc19268b259a39e86f296da5f0677841f42c" + "reference": "f41715465d65213d644d3141a6a93081be5d3549" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c", - "reference": "0992cc19268b259a39e86f296da5f0677841f42c", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", "shasum": "" }, "require": { @@ -233,7 +228,7 @@ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", "scrutinizer/ocular": "1.6.0", "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^3.14" + "vimeo/psalm": "^4.0.0" }, "type": "library", "extra": { @@ -282,22 +277,22 @@ ], "support": { "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1" + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" }, - "time": "2021-08-13T13:06:58+00:00" + "time": "2022-10-27T11:44:00+00:00" }, { "name": "discord-php/http", - "version": "v9.0.10", + "version": "v9.1.8", "source": { "type": "git", "url": "https://github.com/discord-php/DiscordPHP-Http.git", - "reference": "5d58a017152295c5769adad7510ec6d88bf2f60f" + "reference": "8dc95a63836f7f0161fc5e52e1d9feeaa36b36ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/discord-php/DiscordPHP-Http/zipball/5d58a017152295c5769adad7510ec6d88bf2f60f", - "reference": "5d58a017152295c5769adad7510ec6d88bf2f60f", + "url": "https://api.github.com/repos/discord-php/DiscordPHP-Http/zipball/8dc95a63836f7f0161fc5e52e1d9feeaa36b36ba", + "reference": "8dc95a63836f7f0161fc5e52e1d9feeaa36b36ba", "shasum": "" }, "require": { @@ -307,9 +302,13 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.17", + "guzzlehttp/guzzle": "^6.0|^7.0", "monolog/monolog": "^2.2", "psy/psysh": "^0.10.6" }, + "suggest": { + "guzzlehttp/guzzle": "For alternative to ReactPHP/Http Browser" + }, "type": "library", "autoload": { "psr-4": { @@ -329,9 +328,9 @@ "description": "Handles HTTP requests to Discord servers", "support": { "issues": "https://github.com/discord-php/DiscordPHP-Http/issues", - "source": "https://github.com/discord-php/DiscordPHP-Http/tree/v9.0.10" + "source": "https://github.com/discord-php/DiscordPHP-Http/tree/v9.1.8" }, - "time": "2022-02-16T15:10:31+00:00" + "time": "2022-12-13T12:11:12+00:00" }, { "name": "discord/interactions", @@ -384,16 +383,16 @@ }, { "name": "doctrine/cache", - "version": "2.1.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce" + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", "shasum": "" }, "require": { @@ -403,18 +402,12 @@ "doctrine/common": ">2.2,<2.4" }, "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^8.0", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "predis/predis": "~1.0", + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev", - "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" }, "type": "library", "autoload": { @@ -463,7 +456,7 @@ ], "support": { "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.1.1" + "source": "https://github.com/doctrine/cache/tree/2.2.0" }, "funding": [ { @@ -479,42 +472,42 @@ "type": "tidelift" } ], - "time": "2021-07-17T14:49:29+00:00" + "time": "2022-05-20T20:07:39+00:00" }, { "name": "doctrine/dbal", - "version": "3.3.6", + "version": "3.5.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21" + "reference": "88fa7e5189fd5ec6682477044264dc0ed4e3aa1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/9e7f76dd1cde81c62574fdffa5a9c655c847ad21", - "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/88fa7e5189fd5ec6682477044264dc0ed4e3aa1e", + "reference": "88fa7e5189fd5ec6682477044264dc0ed4e3aa1e", "shasum": "" }, "require": { "composer-runtime-api": "^2", "doctrine/cache": "^1.11|^2.0", "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1.0", - "php": "^7.3 || ^8.0", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2022.1", - "phpstan/phpstan": "1.6.3", - "phpstan/phpstan-strict-rules": "^1.2", - "phpunit/phpunit": "9.5.20", - "psalm/plugin-phpunit": "0.16.1", - "squizlabs/php_codesniffer": "3.6.2", - "symfony/cache": "^5.2|^6.0", - "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0", - "vimeo/psalm": "4.23.0" + "doctrine/coding-standard": "11.0.0", + "jetbrains/phpstorm-stubs": "2022.3", + "phpstan/phpstan": "1.9.4", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "9.5.27", + "psalm/plugin-phpunit": "0.18.4", + "squizlabs/php_codesniffer": "3.7.1", + "symfony/cache": "^5.4|^6.0", + "symfony/console": "^4.4|^5.4|^6.0", + "vimeo/psalm": "4.30.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -574,7 +567,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.3.6" + "source": "https://github.com/doctrine/dbal/tree/3.5.3" }, "funding": [ { @@ -590,7 +583,7 @@ "type": "tidelift" } ], - "time": "2022-05-02T17:21:01+00:00" + "time": "2023-01-12T10:21:44+00:00" }, { "name": "doctrine/deprecations", @@ -637,37 +630,34 @@ }, { "name": "doctrine/event-manager", - "version": "1.1.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "conflict": { - "doctrine/common": "<2.9@dev" + "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpunit/phpunit": "^7.0" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.28" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -711,7 +701,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.1.x" + "source": "https://github.com/doctrine/event-manager/tree/2.0.0" }, "funding": [ { @@ -727,32 +717,32 @@ "type": "tidelift" } ], - "time": "2020-05-29T18:28:51+00:00" + "time": "2022-10-12T20:59:15+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.4", + "version": "2.0.6", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "vimeo/psalm": "^4.10" + "doctrine/coding-standard": "^10", + "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" }, "type": "library", "autoload": { @@ -802,7 +792,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.4" + "source": "https://github.com/doctrine/inflector/tree/2.0.6" }, "funding": [ { @@ -818,35 +808,36 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:16:43+00:00" + "time": "2022-10-20T09:10:12+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + "reference": "84a527db05647743d50373e0ec53a152f2cde568" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", + "reference": "84a527db05647743d50373e0ec53a152f2cde568", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -878,7 +869,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" + "source": "https://github.com/doctrine/lexer/tree/3.0.0" }, "funding": [ { @@ -894,20 +885,20 @@ "type": "tidelift" } ], - "time": "2022-02-28T11:07:21+00:00" + "time": "2022-12-15T16:57:16+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v3.3.1", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa" + "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/be85b3f05b46c39bbc0d95f6c071ddff669510fa", - "reference": "be85b3f05b46c39bbc0d95f6c071ddff669510fa", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8", + "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8", "shasum": "" }, "require": { @@ -947,7 +938,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.1" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2" }, "funding": [ { @@ -955,31 +946,30 @@ "type": "github" } ], - "time": "2022-01-18T15:43:28+00:00" + "time": "2022-09-10T18:51:20+00:00" }, { "name": "egulias/email-validator", - "version": "3.1.2", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ee0db30118f661fb166bcffbf5d82032df484697" + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ee0db30118f661fb166bcffbf5d82032df484697", - "reference": "ee0db30118f661fb166bcffbf5d82032df484697", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff", "shasum": "" }, "require": { - "doctrine/lexer": "^1.2", - "php": ">=7.2", - "symfony/polyfill-intl-idn": "^1.15" + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^8.5.8|^9.3.3", - "vimeo/psalm": "^4" + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^4.30" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -987,7 +977,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -1015,7 +1005,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/3.1.2" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.1" }, "funding": [ { @@ -1023,7 +1013,7 @@ "type": "github" } ], - "time": "2021-10-11T09:18:27+00:00" + "time": "2023-01-14T14:17:03+00:00" }, { "name": "evenement/evenement", @@ -1254,24 +1244,24 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.0.4", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "0690bde05318336c7221785f2a932467f98b64ca" + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/0690bde05318336c7221785f2a932467f98b64ca", - "reference": "0690bde05318336c7221785f2a932467f98b64ca", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/a878d45c1914464426dc94da61c9e1d36ae262a8", + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0", - "phpoption/phpoption": "^1.8" + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9" }, "require-dev": { - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" + "phpunit/phpunit": "^8.5.28 || ^9.5.21" }, "type": "library", "autoload": { @@ -1300,7 +1290,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.4" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.0" }, "funding": [ { @@ -1312,26 +1302,26 @@ "type": "tidelift" } ], - "time": "2021-11-21T21:41:47+00:00" + "time": "2022-07-30T15:56:11+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.4.2", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "ac1ec1cd9b5624694c3a40be801d94137afb12b4" + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ac1ec1cd9b5624694c3a40be801d94137afb12b4", - "reference": "ac1ec1cd9b5624694c3a40be801d94137afb12b4", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.8.3 || ^2.1", + "guzzlehttp/psr7": "^1.9 || ^2.4", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1340,10 +1330,10 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -1353,8 +1343,12 @@ }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "7.4-dev" + "dev-master": "7.5-dev" } }, "autoload": { @@ -1420,7 +1414,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.2" + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" }, "funding": [ { @@ -1436,20 +1430,20 @@ "type": "tidelift" } ], - "time": "2022-03-20T14:16:28+00:00" + "time": "2022-08-28T15:39:27+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + "reference": "b94b2807d85443f9719887892882d0329d1e2598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", "shasum": "" }, "require": { @@ -1504,7 +1498,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.1" + "source": "https://github.com/guzzle/promises/tree/1.5.2" }, "funding": [ { @@ -1520,20 +1514,20 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:56:57+00:00" + "time": "2022-08-28T14:55:35+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.2.1", + "version": "2.4.3", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2" + "reference": "67c26b443f348a51926030c83481b85718457d3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/c94a94f120803a18554c1805ef2e539f8285f9a2", - "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", + "reference": "67c26b443f348a51926030c83481b85718457d3d", "shasum": "" }, "require": { @@ -1547,17 +1541,21 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.8 || ^9.3.10" + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.4-dev" } }, "autoload": { @@ -1619,7 +1617,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.2.1" + "source": "https://github.com/guzzle/psr7/tree/2.4.3" }, "funding": [ { @@ -1635,20 +1633,20 @@ "type": "tidelift" } ], - "time": "2022-03-20T21:55:58+00:00" + "time": "2022-10-26T14:07:24+00:00" }, { "name": "jakyeru/larascord", - "version": "v3.0.8", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/JakyeRU/Larascord.git", - "reference": "0d4ec6ee9de9bfc91bade81db220b057dc004c88" + "reference": "1ad8ac83e973b4b646ecdc78dcf94930131bada3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JakyeRU/Larascord/zipball/0d4ec6ee9de9bfc91bade81db220b057dc004c88", - "reference": "0d4ec6ee9de9bfc91bade81db220b057dc004c88", + "url": "https://api.github.com/repos/JakyeRU/Larascord/zipball/1ad8ac83e973b4b646ecdc78dcf94930131bada3", + "reference": "1ad8ac83e973b4b646ecdc78dcf94930131bada3", "shasum": "" }, "require": { @@ -1683,29 +1681,33 @@ "description": "Larascord is a package that allows you to authenticate users in your Laravel application using Discord.", "support": { "issues": "https://github.com/JakyeRU/Larascord/issues", - "source": "https://github.com/JakyeRU/Larascord/tree/v3.0.8" + "source": "https://github.com/JakyeRU/Larascord/tree/v3.2.0" }, - "time": "2022-04-09T15:05:01+00:00" + "time": "2022-06-26T11:09:59+00:00" }, { "name": "laravel/breeze", - "version": "v1.9.0", + "version": "v1.18.1", "source": { "type": "git", "url": "https://github.com/laravel/breeze.git", - "reference": "0d7633380c81d0827f40f6064d38f8884f5c5441" + "reference": "bed2fb2a8a4131be37cc3556826cca961db3406a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/breeze/zipball/0d7633380c81d0827f40f6064d38f8884f5c5441", - "reference": "0d7633380c81d0827f40f6064d38f8884f5c5441", + "url": "https://api.github.com/repos/laravel/breeze/zipball/bed2fb2a8a4131be37cc3556826cca961db3406a", + "reference": "bed2fb2a8a4131be37cc3556826cca961db3406a", "shasum": "" }, "require": { - "illuminate/filesystem": "^8.42|^9.0", - "illuminate/support": "^8.42|^9.0", - "illuminate/validation": "^8.42|^9.0", - "php": "^7.3|^8.0" + "illuminate/console": "^9.21|^10.0", + "illuminate/filesystem": "^9.21|^10.0", + "illuminate/support": "^9.21|^10.0", + "illuminate/validation": "^9.21|^10.0", + "php": "^8.0.2" + }, + "conflict": { + "laravel/framework": "<9.37.0" }, "type": "library", "extra": { @@ -1742,40 +1744,42 @@ "issues": "https://github.com/laravel/breeze/issues", "source": "https://github.com/laravel/breeze" }, - "time": "2022-03-26T16:06:30+00:00" + "time": "2023-01-31T16:16:21+00:00" }, { "name": "laravel/framework", - "version": "v9.11.0", + "version": "v9.50.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "598a8c84d452a66b90a3213b1d67189cc726c728" + "reference": "2ec7083834563e2bb1003ab50d2b6071f3418e75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/598a8c84d452a66b90a3213b1d67189cc726c728", - "reference": "598a8c84d452a66b90a3213b1d67189cc726c728", + "url": "https://api.github.com/repos/laravel/framework/zipball/2ec7083834563e2bb1003ab50d2b6071f3418e75", + "reference": "2ec7083834563e2bb1003ab50d2b6071f3418e75", "shasum": "" }, "require": { - "doctrine/inflector": "^2.0", - "dragonmantank/cron-expression": "^3.1", - "egulias/email-validator": "^3.1", + "brick/math": "^0.9.3|^0.10.2|^0.11", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1|^4.0", "ext-mbstring": "*", "ext-openssl": "*", "fruitcake/php-cors": "^1.2", - "laravel/serializable-closure": "^1.0", - "league/commonmark": "^2.2", - "league/flysystem": "^3.0", + "laravel/serializable-closure": "^1.2.2", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.8.0", "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.53.1", + "nesbot/carbon": "^2.62.1", + "nunomaduro/termwind": "^1.13", "php": "^8.0.2", "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0", - "ramsey/uuid": "^4.2.2", - "symfony/console": "^6.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^6.0.9", "symfony/error-handler": "^6.0", "symfony/finder": "^6.0", "symfony/http-foundation": "^6.0", @@ -1784,8 +1788,9 @@ "symfony/mime": "^6.0", "symfony/process": "^6.0", "symfony/routing": "^6.0", + "symfony/uid": "^6.0", "symfony/var-dumper": "^6.0", - "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.4.1", "voku/portable-ascii": "^2.0" }, @@ -1831,27 +1836,31 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "^3.198.1", + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", "doctrine/dbal": "^2.13.3|^3.1.4", - "fakerphp/faker": "^1.9.2", - "guzzlehttp/guzzle": "^7.2", + "fakerphp/faker": "^1.21", + "guzzlehttp/guzzle": "^7.5", "league/flysystem-aws-s3-v3": "^3.0", "league/flysystem-ftp": "^3.0", + "league/flysystem-path-prefixing": "^3.3", + "league/flysystem-read-only": "^3.3", "league/flysystem-sftp-v3": "^3.0", - "mockery/mockery": "^1.4.4", - "orchestra/testbench-core": "^7.1", + "mockery/mockery": "^1.5.1", + "orchestra/testbench-core": "^7.16", "pda/pheanstalk": "^4.0", + "phpstan/phpdoc-parser": "^1.15", "phpstan/phpstan": "^1.4.7", "phpunit/phpunit": "^9.5.8", - "predis/predis": "^1.1.9", - "symfony/cache": "^6.0" + "predis/predis": "^1.1.9|^2.0.2", + "symfony/cache": "^6.0", + "symfony/http-client": "^6.0" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.198.1).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", "brianium/paratest": "Required to run tests in parallel (^6.0).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", - "ext-bcmath": "Required to use the multiple_of validation rule.", "ext-ftp": "Required to use the Flysystem FTP driver.", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-memcached": "Required to use the memcache cache driver.", @@ -1860,16 +1869,18 @@ "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.2).", + "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", + "league/flysystem-read-only": "Required to use read-only disks (^3.3)", "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", - "mockery/mockery": "Required to use mocking (^1.4.4).", + "mockery/mockery": "Required to use mocking (^1.5.1).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", - "predis/predis": "Required to use the predis connector (^1.1.9).", + "predis/predis": "Required to use the predis connector (^1.1.9|^2.0.2).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", @@ -1921,7 +1932,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-05-03T14:47:20+00:00" + "time": "2023-02-01T14:04:34+00:00" }, { "name": "laravel/sanctum", @@ -1990,25 +2001,26 @@ }, { "name": "laravel/serializable-closure", - "version": "v1.1.1", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e" + "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/9e4b005daa20b0c161f3845040046dc9ddc1d74e", - "reference": "9e4b005daa20b0c161f3845040046dc9ddc1d74e", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", + "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", "shasum": "" }, "require": { "php": "^7.3|^8.0" }, "require-dev": { - "pestphp/pest": "^1.18", - "phpstan/phpstan": "^0.12.98", - "symfony/var-dumper": "^5.3" + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" }, "type": "library", "extra": { @@ -2045,26 +2057,26 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2022-02-11T19:23:53+00:00" + "time": "2023-01-30T18:31:20+00:00" }, { "name": "laravel/tinker", - "version": "v2.7.2", + "version": "v2.8.0", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "dff39b661e827dae6e092412f976658df82dbac5" + "reference": "74d0b287cc4ae65d15c368dd697aae71d62a73ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/dff39b661e827dae6e092412f976658df82dbac5", - "reference": "dff39b661e827dae6e092412f976658df82dbac5", + "url": "https://api.github.com/repos/laravel/tinker/zipball/74d0b287cc4ae65d15c368dd697aae71d62a73ad", + "reference": "74d0b287cc4ae65d15c368dd697aae71d62a73ad", "shasum": "" }, "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", "php": "^7.2.5|^8.0", "psy/psysh": "^0.10.4|^0.11.1", "symfony/var-dumper": "^4.3.4|^5.0|^6.0" @@ -2074,7 +2086,7 @@ "phpunit/phpunit": "^8.5.8|^9.3.3" }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)." + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0)." }, "type": "library", "extra": { @@ -2111,22 +2123,22 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.7.2" + "source": "https://github.com/laravel/tinker/tree/v2.8.0" }, - "time": "2022-03-23T12:38:24+00:00" + "time": "2023-01-10T18:03:30+00:00" }, { "name": "laravel/ui", - "version": "v3.4.5", + "version": "v3.4.6", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "f11d295de1508c5bb56206a620b00b6616de414c" + "reference": "65ec5c03f7fee2c8ecae785795b829a15be48c2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/f11d295de1508c5bb56206a620b00b6616de414c", - "reference": "f11d295de1508c5bb56206a620b00b6616de414c", + "url": "https://api.github.com/repos/laravel/ui/zipball/65ec5c03f7fee2c8ecae785795b829a15be48c2c", + "reference": "65ec5c03f7fee2c8ecae785795b829a15be48c2c", "shasum": "" }, "require": { @@ -2172,22 +2184,22 @@ "ui" ], "support": { - "source": "https://github.com/laravel/ui/tree/v3.4.5" + "source": "https://github.com/laravel/ui/tree/v3.4.6" }, - "time": "2022-02-21T14:59:16+00:00" + "time": "2022-05-20T13:38:08+00:00" }, { "name": "league/commonmark", - "version": "2.3.0", + "version": "2.3.8", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "32a49eb2b38fe5e5c417ab748a45d0beaab97955" + "reference": "c493585c130544c4e91d2e0e131e6d35cb0cbc47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/32a49eb2b38fe5e5c417ab748a45d0beaab97955", - "reference": "32a49eb2b38fe5e5c417ab748a45d0beaab97955", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c493585c130544c4e91d2e0e131e6d35cb0cbc47", + "reference": "c493585c130544c4e91d2e0e131e6d35cb0cbc47", "shasum": "" }, "require": { @@ -2207,15 +2219,15 @@ "erusev/parsedown": "^1.0", "ext-json": "*", "github/gfm": "0.29.0", - "michelf/php-markdown": "^1.4", + "michelf/php-markdown": "^1.4 || ^2.0", "nyholm/psr7": "^1.5", - "phpstan/phpstan": "^0.12.88 || ^1.0.0", - "phpunit/phpunit": "^9.5.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3", + "symfony/finder": "^5.3 | ^6.0", "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", - "unleashedtech/php-coding-standard": "^3.1", - "vimeo/psalm": "^4.7.3" + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" }, "suggest": { "symfony/yaml": "v2.3+ required if using the Front Matter extension" @@ -2280,20 +2292,20 @@ "type": "tidelift" } ], - "time": "2022-04-07T22:37:05+00:00" + "time": "2022-12-10T16:02:17+00:00" }, { "name": "league/config", - "version": "v1.1.1", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/thephpleague/config.git", - "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e" + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", - "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", "shasum": "" }, "require": { @@ -2302,7 +2314,7 @@ "php": "^7.4 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.90", + "phpstan/phpstan": "^1.8.2", "phpunit/phpunit": "^9.5.5", "scrutinizer/ocular": "^1.8.1", "unleashedtech/php-coding-standard": "^3.1", @@ -2362,20 +2374,20 @@ "type": "github" } ], - "time": "2021-08-14T12:15:32+00:00" + "time": "2022-12-11T20:36:23+00:00" }, { "name": "league/flysystem", - "version": "3.0.19", + "version": "3.12.2", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "670df21225d68d165a8df38587ac3f41caf608f8" + "reference": "f6377c709d2275ed6feaf63e44be7a7162b0e77f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/670df21225d68d165a8df38587ac3f41caf608f8", - "reference": "670df21225d68d165a8df38587ac3f41caf608f8", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f6377c709d2275ed6feaf63e44be7a7162b0e77f", + "reference": "f6377c709d2275ed6feaf63e44be7a7162b0e77f", "shasum": "" }, "require": { @@ -2386,12 +2398,13 @@ "aws/aws-sdk-php": "3.209.31 || 3.210.0", "guzzlehttp/guzzle": "<7.0", "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", "symfony/http-client": "<5.2" }, "require-dev": { "async-aws/s3": "^1.5", - "async-aws/simple-s3": "^1.0", - "aws/aws-sdk-php": "^3.198.1", + "async-aws/simple-s3": "^1.1", + "aws/aws-sdk-php": "^3.220.0", "composer/semver": "^3.0", "ext-fileinfo": "*", "ext-ftp": "*", @@ -2399,7 +2412,7 @@ "friendsofphp/php-cs-fixer": "^3.5", "google/cloud-storage": "^1.23", "microsoft/azure-storage-blob": "^1.1", - "phpseclib/phpseclib": "^2.0", + "phpseclib/phpseclib": "^3.0.14", "phpstan/phpstan": "^0.12.26", "phpunit/phpunit": "^9.5.11", "sabre/dav": "^4.3.1" @@ -2436,11 +2449,11 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.0.19" + "source": "https://github.com/thephpleague/flysystem/tree/3.12.2" }, "funding": [ { - "url": "https://offset.earth/frankdejonge", + "url": "https://ecologi.com/frankdejonge", "type": "custom" }, { @@ -2452,7 +2465,7 @@ "type": "tidelift" } ], - "time": "2022-05-03T21:19:02+00:00" + "time": "2023-01-19T12:02:19+00:00" }, { "name": "league/mime-type-detection", @@ -2559,16 +2572,16 @@ }, { "name": "monolog/monolog", - "version": "2.5.0", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "4192345e260f1d51b365536199744b987e160edc" + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/4192345e260f1d51b365536199744b987e160edc", - "reference": "4192345e260f1d51b365536199744b987e160edc", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", "shasum": "" }, "require": { @@ -2581,18 +2594,22 @@ "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", "graylog2/gelf-php": "^1.4.2", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "php-console/php-console": "^3.1.3", - "phpspec/prophecy": "^1.6.1", + "phpspec/prophecy": "^1.15", "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5", - "predis/predis": "^1.1", + "phpunit/phpunit": "^8.5.14", + "predis/predis": "^1.1 || ^2.0", "rollbar/rollbar": "^1.3 || ^2 || ^3", - "ruflin/elastica": ">=0.90@dev", - "swiftmailer/swiftmailer": "^5.3|^6.0" + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", @@ -2607,7 +2624,6 @@ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, @@ -2642,7 +2658,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.5.0" + "source": "https://github.com/Seldaek/monolog/tree/2.8.0" }, "funding": [ { @@ -2654,20 +2670,20 @@ "type": "tidelift" } ], - "time": "2022-04-08T15:43:54+00:00" + "time": "2022-07-24T11:55:47+00:00" }, { "name": "nesbot/carbon", - "version": "2.58.0", + "version": "2.66.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "97a34af22bde8d0ac20ab34b29d7bfe360902055" + "reference": "496712849902241f04902033b0441b269effe001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/97a34af22bde8d0ac20ab34b29d7bfe360902055", - "reference": "97a34af22bde8d0ac20ab34b29d7bfe360902055", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/496712849902241f04902033b0441b269effe001", + "reference": "496712849902241f04902033b0441b269effe001", "shasum": "" }, "require": { @@ -2678,15 +2694,16 @@ "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { - "doctrine/dbal": "^2.0 || ^3.0", + "doctrine/dbal": "^2.0 || ^3.1.4", "doctrine/orm": "^2.7", "friendsofphp/php-cs-fixer": "^3.0", "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.54 || ^1.0", - "phpunit/php-file-iterator": "^2.0.5", - "phpunit/phpunit": "^7.5.20 || ^8.5.23", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", "squizlabs/php_codesniffer": "^3.4" }, "bin": [ @@ -2743,37 +2760,41 @@ }, "funding": [ { - "url": "https://opencollective.com/Carbon", - "type": "open_collective" + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", "type": "tidelift" } ], - "time": "2022-04-25T19:31:17+00:00" + "time": "2023-01-29T18:53:47+00:00" }, { "name": "nette/schema", - "version": "v1.2.2", + "version": "v1.2.3", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df" + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df", - "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df", + "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", "shasum": "" }, "require": { "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": ">=7.1 <8.2" + "php": ">=7.1 <8.3" }, "require-dev": { "nette/tester": "^2.3 || ^2.4", - "phpstan/phpstan-nette": "^0.12", + "phpstan/phpstan-nette": "^1.0", "tracy/tracy": "^2.7" }, "type": "library", @@ -2811,31 +2832,32 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.2" + "source": "https://github.com/nette/schema/tree/v1.2.3" }, - "time": "2021-10-15T11:40:02+00:00" + "time": "2022-10-13T01:24:26+00:00" }, { "name": "nette/utils", - "version": "v3.2.7", + "version": "v3.2.9", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99" + "reference": "c91bac3470c34b2ecd5400f6e6fdf0b64a836a5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/0af4e3de4df9f1543534beab255ccf459e7a2c99", - "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99", + "url": "https://api.github.com/repos/nette/utils/zipball/c91bac3470c34b2ecd5400f6e6fdf0b64a836a5c", + "reference": "c91bac3470c34b2ecd5400f6e6fdf0b64a836a5c", "shasum": "" }, "require": { - "php": ">=7.2 <8.2" + "php": ">=7.2 <8.3" }, "conflict": { "nette/di": "<3.0.6" }, "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", "nette/tester": "~2.0", "phpstan/phpstan": "^1.0", "tracy/tracy": "^2.3" @@ -2896,22 +2918,22 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v3.2.7" + "source": "https://github.com/nette/utils/tree/v3.2.9" }, - "time": "2022-01-24T11:29:14+00:00" + "time": "2023-01-18T03:26:20+00:00" }, { "name": "nikic/php-parser", - "version": "v4.13.2", + "version": "v4.15.3", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", "shasum": "" }, "require": { @@ -2952,9 +2974,95 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" }, - "time": "2021-11-30T19:35:32+00:00" + "time": "2023-01-16T22:05:37+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v1.15.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "594ab862396c16ead000de0c3c38f4a5cbe1938d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/594ab862396c16ead000de0c3c38f4a5cbe1938d", + "reference": "594ab862396c16ead000de0c3c38f4a5cbe1938d", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0", + "symfony/console": "^5.3.0|^6.0.0" + }, + "require-dev": { + "ergebnis/phpstan-rules": "^1.0.", + "illuminate/console": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "laravel/pint": "^1.0.0", + "pestphp/pest": "^1.21.0", + "pestphp/pest-plugin-mock": "^1.0", + "phpstan/phpstan": "^1.4.6", + "phpstan/phpstan-strict-rules": "^1.1.0", + "symfony/var-dumper": "^5.2.7|^6.0.0", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v1.15.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2022-12-20T19:00:15+00:00" }, { "name": "paragonie/random_compat", @@ -3008,16 +3116,16 @@ }, { "name": "paragonie/sodium_compat", - "version": "v1.17.1", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/paragonie/sodium_compat.git", - "reference": "ac994053faac18d386328c91c7900f930acadf1e" + "reference": "cb15e403ecbe6a6cc515f855c310eb6b1872a933" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/ac994053faac18d386328c91c7900f930acadf1e", - "reference": "ac994053faac18d386328c91c7900f930acadf1e", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/cb15e403ecbe6a6cc515f855c310eb6b1872a933", + "reference": "cb15e403ecbe6a6cc515f855c310eb6b1872a933", "shasum": "" }, "require": { @@ -3088,35 +3196,39 @@ ], "support": { "issues": "https://github.com/paragonie/sodium_compat/issues", - "source": "https://github.com/paragonie/sodium_compat/tree/v1.17.1" + "source": "https://github.com/paragonie/sodium_compat/tree/v1.19.0" }, - "time": "2022-03-23T19:32:04+00:00" + "time": "2022-09-26T03:40:35+00:00" }, { "name": "phpoption/phpoption", - "version": "1.8.1", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15" + "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", - "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", + "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" + "bamarni/composer-bin-plugin": "^1.8", + "phpunit/phpunit": "^8.5.28 || ^9.5.21" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -3149,7 +3261,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.8.1" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.0" }, "funding": [ { @@ -3161,7 +3273,7 @@ "type": "tidelift" } ], - "time": "2021-12-04T23:24:31+00:00" + "time": "2022-07-30T15:51:26+00:00" }, { "name": "psr/cache", @@ -3578,16 +3690,16 @@ }, { "name": "psy/psysh", - "version": "v0.11.2", + "version": "v0.11.12", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "7f7da640d68b9c9fec819caae7c744a213df6514" + "reference": "52cb7c47d403c31c0adc9bf7710fc355f93c20f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/7f7da640d68b9c9fec819caae7c744a213df6514", - "reference": "7f7da640d68b9c9fec819caae7c744a213df6514", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/52cb7c47d403c31c0adc9bf7710fc355f93c20f7", + "reference": "52cb7c47d403c31c0adc9bf7710fc355f93c20f7", "shasum": "" }, "require": { @@ -3602,15 +3714,13 @@ "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "3.17.05.02" + "bamarni/composer-bin-plugin": "^1.2" }, "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", - "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." }, "bin": [ "bin/psysh" @@ -3650,22 +3760,22 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.2" + "source": "https://github.com/bobthecow/psysh/tree/v0.11.12" }, - "time": "2022-02-28T15:28:54+00:00" + "time": "2023-01-29T21:24:40+00:00" }, { "name": "pusher/pusher-php-server", - "version": "7.0.2", + "version": "7.2.2", "source": { "type": "git", "url": "https://github.com/pusher/pusher-http-php.git", - "reference": "af3eeaefc0c7959f5b3852f0a4dd5547245d33df" + "reference": "4ace4873873b06c25cecb2dd6d9fdcbf2f20b640" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pusher/pusher-http-php/zipball/af3eeaefc0c7959f5b3852f0a4dd5547245d33df", - "reference": "af3eeaefc0c7959f5b3852f0a4dd5547245d33df", + "url": "https://api.github.com/repos/pusher/pusher-http-php/zipball/4ace4873873b06c25cecb2dd6d9fdcbf2f20b640", + "reference": "4ace4873873b06c25cecb2dd6d9fdcbf2f20b640", "shasum": "" }, "require": { @@ -3678,7 +3788,7 @@ }, "require-dev": { "overtrue/phplint": "^2.3", - "phpunit/phpunit": "^8.5|^9.3" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -3711,9 +3821,9 @@ ], "support": { "issues": "https://github.com/pusher/pusher-http-php/issues", - "source": "https://github.com/pusher/pusher-http-php/tree/7.0.2" + "source": "https://github.com/pusher/pusher-http-php/tree/7.2.2" }, - "time": "2021-12-07T13:09:00+00:00" + "time": "2022-12-20T19:52:36+00:00" }, { "name": "ralouphie/getallheaders", @@ -3761,42 +3871,52 @@ }, { "name": "ramsey/collection", - "version": "1.2.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", - "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", "shasum": "" }, "require": { - "php": "^7.3 || ^8", - "symfony/polyfill-php81": "^1.23" + "php": "^8.1" }, "require-dev": { - "captainhook/captainhook": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "ergebnis/composer-normalize": "^2.6", - "fakerphp/faker": "^1.5", - "hamcrest/hamcrest-php": "^2", - "jangregor/phpstan-prophecy": "^0.8", - "mockery/mockery": "^1.3", + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1", - "phpstan/phpstan": "^0.12.32", - "phpstan/phpstan-mockery": "^0.12.5", - "phpstan/phpstan-phpunit": "^0.12.11", - "phpunit/phpunit": "^8.5 || ^9", - "psy/psysh": "^0.10.4", - "slevomat/coding-standard": "^6.3", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.4" + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" }, "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, "autoload": { "psr-4": { "Ramsey\\Collection\\": "src/" @@ -3824,7 +3944,7 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.2.2" + "source": "https://github.com/ramsey/collection/tree/2.0.0" }, "funding": [ { @@ -3836,28 +3956,27 @@ "type": "tidelift" } ], - "time": "2021-10-10T03:01:02+00:00" + "time": "2022-12-31T21:50:55+00:00" }, { "name": "ramsey/uuid", - "version": "4.3.1", + "version": "4.x-dev", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28" + "reference": "25c4faac19549ebfcd3a6a73732dddeb188eaf5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/8505afd4fea63b81a85d3b7b53ac3cb8dc347c28", - "reference": "8505afd4fea63b81a85d3b7b53ac3cb8dc347c28", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/25c4faac19549ebfcd3a6a73732dddeb188eaf5a", + "reference": "25c4faac19549ebfcd3a6a73732dddeb188eaf5a", "shasum": "" }, "require": { - "brick/math": "^0.8 || ^0.9", - "ext-ctype": "*", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", "ext-json": "*", "php": "^8.0", - "ramsey/collection": "^1.0" + "ramsey/collection": "^1.2 || ^2.0" }, "replace": { "rhumsaa/uuid": "self.version" @@ -3869,29 +3988,29 @@ "doctrine/annotations": "^1.8", "ergebnis/composer-normalize": "^2.15", "mockery/mockery": "^1.3", - "moontoast/math": "^1.1", "paragonie/random-lib": "^2", "php-mock/php-mock": "^2.2", "php-mock/php-mock-mockery": "^1.3", "php-parallel-lint/php-parallel-lint": "^1.1", "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-mockery": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", "phpunit/phpunit": "^8.5 || ^9", - "slevomat/coding-standard": "^7.0", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", "squizlabs/php_codesniffer": "^3.5", "vimeo/psalm": "^4.9" }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-ctype": "Enables faster processing of character classification using ctype functions.", "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." }, + "default-branch": true, "type": "library", "extra": { "captainhook": { @@ -3918,7 +4037,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.3.1" + "source": "https://github.com/ramsey/uuid/tree/4.x" }, "funding": [ { @@ -3930,7 +4049,7 @@ "type": "tidelift" } ], - "time": "2022-03-27T21:42:02+00:00" + "time": "2023-01-28T17:00:47+00:00" }, { "name": "ratchet/pawl", @@ -4045,16 +4164,16 @@ }, { "name": "react/cache", - "version": "v1.1.1", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/reactphp/cache.git", - "reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e" + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/cache/zipball/4bf736a2cccec7298bdf745db77585966fc2ca7e", - "reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e", + "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", "shasum": "" }, "require": { @@ -4062,7 +4181,7 @@ "react/promise": "^3.0 || ^2.0 || ^1.1" }, "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" }, "type": "library", "autoload": { @@ -4105,32 +4224,28 @@ ], "support": { "issues": "https://github.com/reactphp/cache/issues", - "source": "https://github.com/reactphp/cache/tree/v1.1.1" + "source": "https://github.com/reactphp/cache/tree/v1.2.0" }, "funding": [ { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2021-02-02T06:47:52+00:00" + "time": "2022-11-30T15:59:55+00:00" }, { "name": "react/child-process", - "version": "v0.6.4", + "version": "v0.6.5", "source": { "type": "git", "url": "https://github.com/reactphp/child-process.git", - "reference": "a778f3fb828d68caf8a9ab6567fd8342a86f12fe" + "reference": "e71eb1aa55f057c7a4a0d08d06b0b0a484bead43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/child-process/zipball/a778f3fb828d68caf8a9ab6567fd8342a86f12fe", - "reference": "a778f3fb828d68caf8a9ab6567fd8342a86f12fe", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/e71eb1aa55f057c7a4a0d08d06b0b0a484bead43", + "reference": "e71eb1aa55f057c7a4a0d08d06b0b0a484bead43", "shasum": "" }, "require": { @@ -4184,7 +4299,7 @@ ], "support": { "issues": "https://github.com/reactphp/child-process/issues", - "source": "https://github.com/reactphp/child-process/tree/v0.6.4" + "source": "https://github.com/reactphp/child-process/tree/v0.6.5" }, "funding": [ { @@ -4196,7 +4311,7 @@ "type": "github" } ], - "time": "2021-10-12T10:37:07+00:00" + "time": "2022-09-16T13:41:56+00:00" }, { "name": "react/datagram", @@ -4259,16 +4374,16 @@ }, { "name": "react/dns", - "version": "v1.9.0", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/reactphp/dns.git", - "reference": "6d38296756fa644e6cb1bfe95eff0f9a4ed6edcb" + "reference": "a5427e7dfa47713e438016905605819d101f238c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/dns/zipball/6d38296756fa644e6cb1bfe95eff0f9a4ed6edcb", - "reference": "6d38296756fa644e6cb1bfe95eff0f9a4ed6edcb", + "url": "https://api.github.com/repos/reactphp/dns/zipball/a5427e7dfa47713e438016905605819d101f238c", + "reference": "a5427e7dfa47713e438016905605819d101f238c", "shasum": "" }, "require": { @@ -4276,11 +4391,11 @@ "react/cache": "^1.0 || ^0.6 || ^0.5", "react/event-loop": "^1.2", "react/promise": "^3.0 || ^2.7 || ^1.2.1", - "react/promise-timer": "^1.8" + "react/promise-timer": "^1.9" }, "require-dev": { - "clue/block-react": "^1.2", - "phpunit/phpunit": "^9.3 || ^4.8.35" + "phpunit/phpunit": "^9.3 || ^4.8.35", + "react/async": "^4 || ^3 || ^2" }, "type": "library", "autoload": { @@ -4323,7 +4438,7 @@ ], "support": { "issues": "https://github.com/reactphp/dns/issues", - "source": "https://github.com/reactphp/dns/tree/v1.9.0" + "source": "https://github.com/reactphp/dns/tree/v1.10.0" }, "funding": [ { @@ -4335,7 +4450,7 @@ "type": "github" } ], - "time": "2021-12-20T08:46:54+00:00" + "time": "2022-09-08T12:22:46+00:00" }, { "name": "react/event-loop", @@ -4417,16 +4532,16 @@ }, { "name": "react/http", - "version": "v1.6.0", + "version": "v1.8.0", "source": { "type": "git", "url": "https://github.com/reactphp/http.git", - "reference": "59961cc4a5b14481728f07c591546be18fa3a5c7" + "reference": "aa7512ee17258c88466de30f9cb44ec5f9df3ff3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/http/zipball/59961cc4a5b14481728f07c591546be18fa3a5c7", - "reference": "59961cc4a5b14481728f07c591546be18fa3a5c7", + "url": "https://api.github.com/repos/reactphp/http/zipball/aa7512ee17258c88466de30f9cb44ec5f9df3ff3", + "reference": "aa7512ee17258c88466de30f9cb44ec5f9df3ff3", "shasum": "" }, "require": { @@ -4435,18 +4550,19 @@ "php": ">=5.3.0", "psr/http-message": "^1.0", "react/event-loop": "^1.2", - "react/promise": "^2.3 || ^1.2.1", - "react/promise-stream": "^1.1", - "react/socket": "^1.9", + "react/promise": "^3 || ^2.3 || ^1.2.1", + "react/promise-stream": "^1.4", + "react/socket": "^1.12", "react/stream": "^1.2", "ringcentral/psr7": "^1.2" }, "require-dev": { - "clue/block-react": "^1.5", - "clue/http-proxy-react": "^1.7", - "clue/reactphp-ssh-proxy": "^1.3", - "clue/socks-react": "^1.3", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" + "clue/http-proxy-react": "^1.8", + "clue/reactphp-ssh-proxy": "^1.4", + "clue/socks-react": "^1.4", + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", + "react/async": "^4 || ^3 || ^2", + "react/promise-timer": "^1.9" }, "type": "library", "autoload": { @@ -4496,7 +4612,7 @@ ], "support": { "issues": "https://github.com/reactphp/http/issues", - "source": "https://github.com/reactphp/http/tree/v1.6.0" + "source": "https://github.com/reactphp/http/tree/v1.8.0" }, "funding": [ { @@ -4508,7 +4624,7 @@ "type": "github" } ], - "time": "2022-02-03T13:17:37+00:00" + "time": "2022-09-29T12:55:52+00:00" }, { "name": "react/partial", @@ -4632,28 +4748,25 @@ }, { "name": "react/promise-stream", - "version": "v1.3.0", + "version": "v1.5.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise-stream.git", - "reference": "3ebd94fe0d8edbf44937948af28d02d5437e9949" + "reference": "e6d2805e09ad50c4896f65f5e8705fe4ee7731a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise-stream/zipball/3ebd94fe0d8edbf44937948af28d02d5437e9949", - "reference": "3ebd94fe0d8edbf44937948af28d02d5437e9949", + "url": "https://api.github.com/repos/reactphp/promise-stream/zipball/e6d2805e09ad50c4896f65f5e8705fe4ee7731a3", + "reference": "e6d2805e09ad50c4896f65f5e8705fe4ee7731a3", "shasum": "" }, "require": { "php": ">=5.3", - "react/promise": "^2.1 || ^1.2", + "react/promise": "^3 || ^2.1 || ^1.2", "react/stream": "^1.0 || ^0.7 || ^0.6 || ^0.5 || ^0.4.6" }, "require-dev": { - "clue/block-react": "^1.0", - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", - "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3", - "react/promise-timer": "^1.0" + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" }, "type": "library", "autoload": { @@ -4702,7 +4815,7 @@ ], "support": { "issues": "https://github.com/reactphp/promise-stream/issues", - "source": "https://github.com/reactphp/promise-stream/tree/v1.3.0" + "source": "https://github.com/reactphp/promise-stream/tree/v1.5.0" }, "funding": [ { @@ -4714,20 +4827,20 @@ "type": "github" } ], - "time": "2021-10-18T10:47:09+00:00" + "time": "2022-09-09T11:42:18+00:00" }, { "name": "react/promise-timer", - "version": "v1.8.0", + "version": "v1.9.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise-timer.git", - "reference": "0bbbcc79589e5bfdddba68a287f1cb805581a479" + "reference": "aa7a73c74b8d8c0f622f5982ff7b0351bc29e495" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise-timer/zipball/0bbbcc79589e5bfdddba68a287f1cb805581a479", - "reference": "0bbbcc79589e5bfdddba68a287f1cb805581a479", + "url": "https://api.github.com/repos/reactphp/promise-timer/zipball/aa7a73c74b8d8c0f622f5982ff7b0351bc29e495", + "reference": "aa7a73c74b8d8c0f622f5982ff7b0351bc29e495", "shasum": "" }, "require": { @@ -4785,7 +4898,7 @@ ], "support": { "issues": "https://github.com/reactphp/promise-timer/issues", - "source": "https://github.com/reactphp/promise-timer/tree/v1.8.0" + "source": "https://github.com/reactphp/promise-timer/tree/v1.9.0" }, "funding": [ { @@ -4797,20 +4910,20 @@ "type": "github" } ], - "time": "2021-12-06T11:08:48+00:00" + "time": "2022-06-13T13:41:03+00:00" }, { "name": "react/socket", - "version": "v1.11.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/reactphp/socket.git", - "reference": "f474156aaab4f09041144fa8b57c7d70aed32a1c" + "reference": "81e1b4d7f5450ebd8d2e9a95bb008bb15ca95a7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/f474156aaab4f09041144fa8b57c7d70aed32a1c", - "reference": "f474156aaab4f09041144fa8b57c7d70aed32a1c", + "url": "https://api.github.com/repos/reactphp/socket/zipball/81e1b4d7f5450ebd8d2e9a95bb008bb15ca95a7b", + "reference": "81e1b4d7f5450ebd8d2e9a95bb008bb15ca95a7b", "shasum": "" }, "require": { @@ -4818,14 +4931,14 @@ "php": ">=5.3.0", "react/dns": "^1.8", "react/event-loop": "^1.2", - "react/promise": "^2.6.0 || ^1.2.1", - "react/promise-timer": "^1.8", + "react/promise": "^3 || ^2.6 || ^1.2.1", + "react/promise-timer": "^1.9", "react/stream": "^1.2" }, "require-dev": { - "clue/block-react": "^1.5", "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35", - "react/promise-stream": "^1.2" + "react/async": "^4 || ^3 || ^2", + "react/promise-stream": "^1.4" }, "type": "library", "autoload": { @@ -4869,7 +4982,7 @@ ], "support": { "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.11.0" + "source": "https://github.com/reactphp/socket/tree/v1.12.0" }, "funding": [ { @@ -4881,7 +4994,7 @@ "type": "github" } ], - "time": "2022-01-14T10:14:32+00:00" + "time": "2022-08-25T12:32:25+00:00" }, { "name": "react/stream", @@ -5028,20 +5141,21 @@ }, { "name": "symfony/console", - "version": "v6.0.8", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0d00aa289215353aa8746a31d101f8e60826285c" + "reference": "3e294254f2191762c1d137aed4b94e966965e985" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0d00aa289215353aa8746a31d101f8e60826285c", - "reference": "0d00aa289215353aa8746a31d101f8e60826285c", + "url": "https://api.github.com/repos/symfony/console/zipball/3e294254f2191762c1d137aed4b94e966965e985", + "reference": "3e294254f2191762c1d137aed4b94e966965e985", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^1.1|^2|^3", "symfony/string": "^5.4|^6.0" @@ -5103,7 +5217,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.0.8" + "source": "https://github.com/symfony/console/tree/v6.2.5" }, "funding": [ { @@ -5119,24 +5233,24 @@ "type": "tidelift" } ], - "time": "2022-04-20T15:01:42+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/css-selector", - "version": "v6.0.3", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "1955d595c12c111629cc814d3f2a2ff13580508a" + "reference": "bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/1955d595c12c111629cc814d3f2a2ff13580508a", - "reference": "1955d595c12c111629cc814d3f2a2ff13580508a", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1", + "reference": "bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -5168,7 +5282,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.0.3" + "source": "https://github.com/symfony/css-selector/tree/v6.2.5" }, "funding": [ { @@ -5184,29 +5298,29 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.0.1", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", - "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -5235,7 +5349,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.0.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" }, "funding": [ { @@ -5251,24 +5365,24 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/error-handler", - "version": "v6.0.8", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "5e2795163acbd13b3cd46835c9f8f6c5d0a3a280" + "reference": "0092696af0be8e6124b042fbe2890ca1788d7b28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/5e2795163acbd13b3cd46835c9f8f6c5d0a3a280", - "reference": "5e2795163acbd13b3cd46835c9f8f6c5d0a3a280", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/0092696af0be8e6124b042fbe2890ca1788d7b28", + "reference": "0092696af0be8e6124b042fbe2890ca1788d7b28", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/var-dumper": "^5.4|^6.0" }, @@ -5306,7 +5420,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.0.8" + "source": "https://github.com/symfony/error-handler/tree/v6.2.5" }, "funding": [ { @@ -5322,24 +5436,24 @@ "type": "tidelift" } ], - "time": "2022-04-12T16:11:42+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.0.3", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934" + "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/6472ea2dd415e925b90ca82be64b8bc6157f3934", - "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", + "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/event-dispatcher-contracts": "^2|^3" }, "conflict": { @@ -5389,7 +5503,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.0.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.5" }, "funding": [ { @@ -5405,24 +5519,24 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.0.1", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7bc61cc2db649b4637d331240c5346dcc7708051" + "reference": "0782b0b52a737a05b4383d0df35a474303cabdae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051", - "reference": "7bc61cc2db649b4637d331240c5346dcc7708051", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae", + "reference": "0782b0b52a737a05b4383d0df35a474303cabdae", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, "suggest": { @@ -5431,7 +5545,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -5468,7 +5582,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0" }, "funding": [ { @@ -5484,24 +5598,27 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/finder", - "version": "v6.0.8", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "af7edab28d17caecd1f40a9219fc646ae751c21f" + "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/af7edab28d17caecd1f40a9219fc646ae751c21f", - "reference": "af7edab28d17caecd1f40a9219fc646ae751c21f", + "url": "https://api.github.com/repos/symfony/finder/zipball/c90dc446976a612e3312a97a6ec0069ab0c2099c", + "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" }, "type": "library", "autoload": { @@ -5529,7 +5646,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.0.8" + "source": "https://github.com/symfony/finder/tree/v6.2.5" }, "funding": [ { @@ -5545,32 +5662,38 @@ "type": "tidelift" } ], - "time": "2022-04-15T08:07:58+00:00" + "time": "2023-01-20T17:45:48+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.0.8", + "version": "v6.2.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "c9c86b02d7ef6f44f3154acc7de42831518afe7c" + "reference": "e8dd1f502bc2b3371d05092aa233b064b03ce7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/c9c86b02d7ef6f44f3154acc7de42831518afe7c", - "reference": "c9c86b02d7ef6f44f3154acc7de42831518afe7c", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e8dd1f502bc2b3371d05092aa233b064b03ce7ed", + "reference": "e8dd1f502bc2b3371d05092aa233b064b03ce7ed", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.1" }, + "conflict": { + "symfony/cache": "<6.2" + }, "require-dev": { "predis/predis": "~1.0", "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", - "symfony/mime": "^5.4|^6.0" + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^5.4|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" }, "suggest": { "symfony/mime": "To use the file extension guesser" @@ -5601,7 +5724,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.0.8" + "source": "https://github.com/symfony/http-foundation/tree/v6.2.6" }, "funding": [ { @@ -5617,26 +5740,27 @@ "type": "tidelift" } ], - "time": "2022-04-22T08:18:02+00:00" + "time": "2023-01-30T15:46:28+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.0.8", + "version": "v6.2.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "7aaf1cdc9cc2ad47e926f624efcb679883a39ca7" + "reference": "7122db07b0d8dbf0de682267c84217573aee3ea7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7aaf1cdc9cc2ad47e926f624efcb679883a39ca7", - "reference": "7aaf1cdc9cc2ad47e926f624efcb679883a39ca7", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7122db07b0d8dbf0de682267c84217573aee3ea7", + "reference": "7122db07b0d8dbf0de682267c84217573aee3ea7", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/error-handler": "^5.4|^6.0", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^6.1", "symfony/event-dispatcher": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", "symfony/polyfill-ctype": "^1.8" @@ -5644,9 +5768,9 @@ "conflict": { "symfony/browser-kit": "<5.4", "symfony/cache": "<5.4", - "symfony/config": "<5.4", + "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.2", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", @@ -5663,10 +5787,10 @@ "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", "symfony/browser-kit": "^5.4|^6.0", - "symfony/config": "^5.4|^6.0", + "symfony/config": "^6.1", "symfony/console": "^5.4|^6.0", "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", + "symfony/dependency-injection": "^6.2", "symfony/dom-crawler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", @@ -5676,6 +5800,7 @@ "symfony/stopwatch": "^5.4|^6.0", "symfony/translation": "^5.4|^6.0", "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/uid": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, "suggest": { @@ -5710,7 +5835,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.0.8" + "source": "https://github.com/symfony/http-kernel/tree/v6.2.6" }, "funding": [ { @@ -5726,37 +5851,42 @@ "type": "tidelift" } ], - "time": "2022-04-27T17:26:02+00:00" + "time": "2023-02-01T08:32:25+00:00" }, { "name": "symfony/mailer", - "version": "v6.0.8", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "706af6b3e99ebcbc639c9c664f5579aaa869409b" + "reference": "29729ac0b4e5113f24c39c46746bd6afb79e0aaa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/706af6b3e99ebcbc639c9c664f5579aaa869409b", - "reference": "706af6b3e99ebcbc639c9c664f5579aaa869409b", + "url": "https://api.github.com/repos/symfony/mailer/zipball/29729ac0b4e5113f24c39c46746bd6afb79e0aaa", + "reference": "29729ac0b4e5113f24c39c46746bd6afb79e0aaa", "shasum": "" }, "require": { - "egulias/email-validator": "^2.1.10|^3", - "php": ">=8.0.2", + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.1", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/mime": "^5.4|^6.0", + "symfony/mime": "^6.2", "symfony/service-contracts": "^1.1|^2|^3" }, "conflict": { - "symfony/http-kernel": "<5.4" + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/twig-bridge": "<6.2.1" }, "require-dev": { + "symfony/console": "^5.4|^6.0", "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/messenger": "^5.4|^6.0" + "symfony/messenger": "^6.2", + "symfony/twig-bridge": "^6.2" }, "type": "library", "autoload": { @@ -5784,7 +5914,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.0.8" + "source": "https://github.com/symfony/mailer/tree/v6.2.5" }, "funding": [ { @@ -5800,24 +5930,24 @@ "type": "tidelift" } ], - "time": "2022-04-27T17:10:30+00:00" + "time": "2023-01-10T18:53:53+00:00" }, { "name": "symfony/mime", - "version": "v6.0.8", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "c1701e88ad0ca49fc6ad6cdf360bc0e1209fb5e1" + "reference": "4b7b349f67d15cd0639955c8179a76c89f6fd610" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/c1701e88ad0ca49fc6ad6cdf360bc0e1209fb5e1", - "reference": "c1701e88ad0ca49fc6ad6cdf360bc0e1209fb5e1", + "url": "https://api.github.com/repos/symfony/mime/zipball/4b7b349f67d15cd0639955c8179a76c89f6fd610", + "reference": "4b7b349f67d15cd0639955c8179a76c89f6fd610", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -5825,15 +5955,17 @@ "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4" + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.2" }, "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1", + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/property-access": "^5.4|^6.0", "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/serializer": "^6.2" }, "type": "library", "autoload": { @@ -5865,7 +5997,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.0.8" + "source": "https://github.com/symfony/mime/tree/v6.2.5" }, "funding": [ { @@ -5881,27 +6013,25 @@ "type": "tidelift" } ], - "time": "2022-04-12T16:11:42+00:00" + "time": "2023-01-10T18:53:53+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.4.3", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8" + "reference": "e8324d44f5af99ec2ccec849934a242f64458f86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/cc1147cb11af1b43f503ac18f31aa3bec213aba8", - "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/e8324d44f5af99ec2ccec849934a242f64458f86", + "reference": "e8324d44f5af99ec2ccec849934a242f64458f86", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3" }, "type": "library", "autoload": { @@ -5934,7 +6064,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.3" + "source": "https://github.com/symfony/options-resolver/tree/v6.2.5" }, "funding": [ { @@ -5950,20 +6080,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { @@ -5978,7 +6108,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6016,7 +6146,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { @@ -6032,20 +6162,20 @@ "type": "tidelift" } ], - "time": "2021-10-20T20:35:02+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", "shasum": "" }, "require": { @@ -6057,7 +6187,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6097,7 +6227,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" }, "funding": [ { @@ -6113,20 +6243,20 @@ "type": "tidelift" } ], - "time": "2021-11-23T21:10:46+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44" + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", "shasum": "" }, "require": { @@ -6140,7 +6270,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6184,7 +6314,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" }, "funding": [ { @@ -6200,20 +6330,20 @@ "type": "tidelift" } ], - "time": "2021-09-14T14:02:44+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { @@ -6225,7 +6355,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6268,7 +6398,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -6284,20 +6414,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { @@ -6312,7 +6442,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6351,7 +6481,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -6367,20 +6497,20 @@ "type": "tidelift" } ], - "time": "2021-11-30T18:21:41+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", "shasum": "" }, "require": { @@ -6389,7 +6519,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6427,7 +6557,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" }, "funding": [ { @@ -6443,99 +6573,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.25.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "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 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.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": "2021-06-05T21:20:04+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.25.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", - "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", "shasum": "" }, "require": { @@ -6544,7 +6595,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6589,7 +6640,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -6605,29 +6656,35 @@ "type": "tidelift" } ], - "time": "2022-03-04T08:16:47+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.25.0", + "name": "symfony/polyfill-uuid", + "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", - "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/f3cf1a645c2734236ed1e2e671e273eeb3586166", + "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6639,11 +6696,8 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "Symfony\\Polyfill\\Uuid\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6651,24 +6705,24 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Symfony polyfill for uuid functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "polyfill", "portable", - "shim" + "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.27.0" }, "funding": [ { @@ -6684,24 +6738,24 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:11+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/process", - "version": "v6.0.8", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "d074154ea8b1443a96391f6e39f9e547b2dd01b9" + "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/d074154ea8b1443a96391f6e39f9e547b2dd01b9", - "reference": "d074154ea8b1443a96391f6e39f9e547b2dd01b9", + "url": "https://api.github.com/repos/symfony/process/zipball/9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", + "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -6729,7 +6783,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.0.8" + "source": "https://github.com/symfony/process/tree/v6.2.5" }, "funding": [ { @@ -6745,20 +6799,20 @@ "type": "tidelift" } ], - "time": "2022-04-12T16:11:42+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v2.1.2", + "version": "v2.1.4", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34" + "reference": "a125b93ef378c492e274f217874906fb9babdebb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34", - "reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/a125b93ef378c492e274f217874906fb9babdebb", + "reference": "a125b93ef378c492e274f217874906fb9babdebb", "shasum": "" }, "require": { @@ -6817,7 +6871,7 @@ ], "support": { "issues": "https://github.com/symfony/psr-http-message-bridge/issues", - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.2" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.4" }, "funding": [ { @@ -6833,35 +6887,35 @@ "type": "tidelift" } ], - "time": "2021-11-05T13:13:39+00:00" + "time": "2022-11-28T22:46:34+00:00" }, { "name": "symfony/routing", - "version": "v6.0.8", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "74c40c9fc334acc601a32fcf4274e74fb3bac11e" + "reference": "589bd742d5d03c192c8521911680fe88f61712fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/74c40c9fc334acc601a32fcf4274e74fb3bac11e", - "reference": "74c40c9fc334acc601a32fcf4274e74fb3bac11e", + "url": "https://api.github.com/repos/symfony/routing/zipball/589bd742d5d03c192c8521911680fe88f61712fe", + "reference": "589bd742d5d03c192c8521911680fe88f61712fe", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "conflict": { "doctrine/annotations": "<1.12", - "symfony/config": "<5.4", + "symfony/config": "<6.2", "symfony/dependency-injection": "<5.4", "symfony/yaml": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.12", + "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", + "symfony/config": "^6.2", "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", @@ -6905,7 +6959,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.0.8" + "source": "https://github.com/symfony/routing/tree/v6.2.5" }, "funding": [ { @@ -6921,24 +6975,24 @@ "type": "tidelift" } ], - "time": "2022-04-22T08:18:02+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.0.1", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "e517458f278c2131ca9f262f8fbaf01410f2c65c" + "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e517458f278c2131ca9f262f8fbaf01410f2c65c", - "reference": "e517458f278c2131ca9f262f8fbaf01410f2c65c", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aac98028c69df04ee77eb69b96b86ee51fbf4b75", + "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "psr/container": "^2.0" }, "conflict": { @@ -6950,7 +7004,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -6960,7 +7014,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6987,7 +7044,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.0.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.2.0" }, "funding": [ { @@ -7003,24 +7060,24 @@ "type": "tidelift" } ], - "time": "2022-03-13T20:10:05+00:00" + "time": "2022-11-25T10:21:52+00:00" }, { "name": "symfony/string", - "version": "v6.0.8", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ac0aa5c2282e0de624c175b68d13f2c8f2e2649d" + "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ac0aa5c2282e0de624c175b68d13f2c8f2e2649d", - "reference": "ac0aa5c2282e0de624c175b68d13f2c8f2e2649d", + "url": "https://api.github.com/repos/symfony/string/zipball/b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", + "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -7032,6 +7089,7 @@ "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/var-exporter": "^5.4|^6.0" }, @@ -7072,7 +7130,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.8" + "source": "https://github.com/symfony/string/tree/v6.2.5" }, "funding": [ { @@ -7088,24 +7146,24 @@ "type": "tidelift" } ], - "time": "2022-04-22T08:18:02+00:00" + "time": "2023-01-01T08:38:09+00:00" }, { "name": "symfony/translation", - "version": "v6.0.8", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "3d38cf8f8834148c4457681d539bc204de701501" + "reference": "60556925a703cfbc1581cde3b3f35b0bb0ea904c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/3d38cf8f8834148c4457681d539bc204de701501", - "reference": "3d38cf8f8834148c4457681d539bc204de701501", + "url": "https://api.github.com/repos/symfony/translation/zipball/60556925a703cfbc1581cde3b3f35b0bb0ea904c", + "reference": "60556925a703cfbc1581cde3b3f35b0bb0ea904c", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.3|^3.0" }, @@ -7121,6 +7179,7 @@ "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { + "nikic/php-parser": "^4.13", "psr/log": "^1|^2|^3", "symfony/config": "^5.4|^6.0", "symfony/console": "^5.4|^6.0", @@ -7130,10 +7189,12 @@ "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/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": "" @@ -7167,7 +7228,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.0.8" + "source": "https://github.com/symfony/translation/tree/v6.2.5" }, "funding": [ { @@ -7183,24 +7244,24 @@ "type": "tidelift" } ], - "time": "2022-04-22T08:18:02+00:00" + "time": "2023-01-05T07:00:27+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.0.1", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "c4183fc3ef0f0510893cbeedc7718fb5cafc9ac9" + "reference": "68cce71402305a015f8c1589bfada1280dc64fe7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/c4183fc3ef0f0510893cbeedc7718fb5cafc9ac9", - "reference": "c4183fc3ef0f0510893cbeedc7718fb5cafc9ac9", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/68cce71402305a015f8c1589bfada1280dc64fe7", + "reference": "68cce71402305a015f8c1589bfada1280dc64fe7", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "suggest": { "symfony/translation-implementation": "" @@ -7208,7 +7269,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -7218,7 +7279,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Translation\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7245,7 +7309,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.0.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.2.0" }, "funding": [ { @@ -7261,24 +7325,98 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2022-11-25T10:21:52+00:00" + }, + { + "name": "symfony/uid", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "8ace895bded57d6496638c9b2d3b788e05b7395b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/8ace895bded57d6496638c9b2d3b788e05b7395b", + "reference": "8ace895bded57d6496638c9b2d3b788e05b7395b", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v6.2.5" + }, + "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-01-01T08:38:09+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.0.8", + "version": "v6.2.5", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "fa61dfb4bd3068df2492013dc65f3190e9f550c0" + "reference": "44b7b81749fd20c1bdf4946c041050e22bc8da27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/fa61dfb4bd3068df2492013dc65f3190e9f550c0", - "reference": "fa61dfb4bd3068df2492013dc65f3190e9f550c0", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/44b7b81749fd20c1bdf4946c041050e22bc8da27", + "reference": "44b7b81749fd20c1bdf4946c041050e22bc8da27", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { @@ -7333,7 +7471,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.0.8" + "source": "https://github.com/symfony/var-dumper/tree/v6.2.5" }, "funding": [ { @@ -7349,29 +7487,29 @@ "type": "tidelift" } ], - "time": "2022-04-26T13:22:23+00:00" + "time": "2023-01-20T17:45:48+00:00" }, { "name": "team-reflex/discord-php", - "version": "v7.0.9", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/discord-php/DiscordPHP.git", - "reference": "78a71eed34fc4bd640a046d270270de97bc2f864" + "reference": "82843da4346878a432171f8d82e345389f7cc49b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/discord-php/DiscordPHP/zipball/78a71eed34fc4bd640a046d270270de97bc2f864", - "reference": "78a71eed34fc4bd640a046d270270de97bc2f864", + "url": "https://api.github.com/repos/discord-php/DiscordPHP/zipball/82843da4346878a432171f8d82e345389f7cc49b", + "reference": "82843da4346878a432171f8d82e345389f7cc49b", "shasum": "" }, "require": { - "discord-php/http": "^9.0.10", + "discord-php/http": "^9.0.12", "discord/interactions": "^2.2", "ext-json": "*", "ext-zlib": "*", "mollie/polyfill-libsodium": "^1.1", - "monolog/monolog": "^2.1", + "monolog/monolog": "^2.1 || ^3.0", "nesbot/carbon": "^2.38", "php": "^7.4|^8.0", "ratchet/pawl": "^0.4.1", @@ -7379,7 +7517,7 @@ "react/datagram": "1.5.*", "react/http": "^1.1", "react/partial": "^3.0", - "symfony/options-resolver": "^5.1.3", + "symfony/options-resolver": "^5.1.3 || ^6.0", "trafficcophp/bytebuffer": "^0.3" }, "require-dev": { @@ -7389,6 +7527,7 @@ "symfony/var-dumper": "*" }, "suggest": { + "clue/zlib-react": "For gateway message transport compression with zlib-stream.", "ext-event": "For a faster, and more performant loop.", "ext-gmp": "For Permissions and 64 bit calculations on x86 (32 bit) PHP.", "ext-libev": "For a faster, and more performant loop.", @@ -7417,22 +7556,22 @@ "description": "An unofficial API to interact with the voice and text service Discord.", "support": { "issues": "https://github.com/discord-php/DiscordPHP/issues", - "source": "https://github.com/discord-php/DiscordPHP/tree/v7.0.9" + "source": "https://github.com/discord-php/DiscordPHP/tree/v7.3.4" }, - "time": "2022-04-01T09:43:29+00:00" + "time": "2023-01-13T12:37:14+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.4", + "version": "2.2.6", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c" + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c", - "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", "shasum": "" }, "require": { @@ -7470,9 +7609,9 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" }, - "time": "2021-12-08T09:12:39+00:00" + "time": "2023-01-03T09:29:04+00:00" }, { "name": "trafficcophp/bytebuffer", @@ -7524,16 +7663,16 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.4.1", + "version": "v5.5.0", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", - "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", "shasum": "" }, "require": { @@ -7548,15 +7687,19 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.4.1", "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" + "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" }, "suggest": { "ext-filter": "Required to use the boolean validator." }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "5.5-dev" } }, "autoload": { @@ -7588,7 +7731,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" }, "funding": [ { @@ -7600,7 +7743,7 @@ "type": "tidelift" } ], - "time": "2021-12-12T23:22:04+00:00" + "time": "2022-10-16T01:01:54+00:00" }, { "name": "voku/portable-ascii", @@ -7678,21 +7821,21 @@ }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -7730,9 +7873,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" }, { "name": "z3/enemizer_linux", @@ -7747,30 +7890,30 @@ "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.4.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -7797,7 +7940,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -7813,24 +7956,24 @@ "type": "tidelift" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "fakerphp/faker", - "version": "v1.19.0", + "version": "v1.21.0", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75" + "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/d7f08a622b3346766325488aa32ddc93ccdecc75", - "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/92efad6a967f0b79c499705c69b662f738cc9e4d", + "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", + "php": "^7.4 || ^8.0", "psr/container": "^1.0 || ^2.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" }, @@ -7841,7 +7984,8 @@ "bamarni/composer-bin-plugin": "^1.4.1", "doctrine/persistence": "^1.3 || ^2.0", "ext-intl": "*", - "symfony/phpunit-bridge": "^4.4 || ^5.2" + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" }, "suggest": { "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", @@ -7853,7 +7997,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "v1.19-dev" + "dev-main": "v1.21-dev" } }, "autoload": { @@ -7878,22 +8022,22 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.19.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.21.0" }, - "time": "2022-02-02T17:38:57+00:00" + "time": "2022-12-13T13:54:32+00:00" }, { "name": "filp/whoops", - "version": "2.14.5", + "version": "2.14.6", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc" + "reference": "f7948baaa0330277c729714910336383286305da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", - "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "url": "https://api.github.com/repos/filp/whoops/zipball/f7948baaa0330277c729714910336383286305da", + "reference": "f7948baaa0330277c729714910336383286305da", "shasum": "" }, "require": { @@ -7943,7 +8087,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.14.5" + "source": "https://github.com/filp/whoops/tree/2.14.6" }, "funding": [ { @@ -7951,7 +8095,7 @@ "type": "github" } ], - "time": "2022-01-07T12:00:00+00:00" + "time": "2022-11-02T16:23:29+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -8006,22 +8150,22 @@ }, { "name": "laravel/sail", - "version": "v1.14.1", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "9a7348dedfccc894718a21f71c09d669747e3f33" + "reference": "4f230634a3163f3442def6a4e6ffdb02b02e14d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/9a7348dedfccc894718a21f71c09d669747e3f33", - "reference": "9a7348dedfccc894718a21f71c09d669747e3f33", + "url": "https://api.github.com/repos/laravel/sail/zipball/4f230634a3163f3442def6a4e6ffdb02b02e14d6", + "reference": "4f230634a3163f3442def6a4e6ffdb02b02e14d6", "shasum": "" }, "require": { - "illuminate/console": "^8.0|^9.0", - "illuminate/contracts": "^8.0|^9.0", - "illuminate/support": "^8.0|^9.0", + "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" }, "bin": [ @@ -8062,20 +8206,20 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2022-05-02T13:58:40+00:00" + "time": "2023-01-31T13:37:57+00:00" }, { "name": "mockery/mockery", - "version": "1.5.0", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac" + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", - "reference": "c10a5f6e06fc2470ab1822fa13fa2a7380f8fbac", + "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e", "shasum": "" }, "require": { @@ -8132,9 +8276,9 @@ ], "support": { "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.5.0" + "source": "https://github.com/mockery/mockery/tree/1.5.1" }, - "time": "2022-01-20T13:18:17+00:00" + "time": "2022-09-07T15:32:08+00:00" }, { "name": "myclabs/deep-copy", @@ -8197,31 +8341,32 @@ }, { "name": "nunomaduro/collision", - "version": "v6.2.0", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "c379636dc50e829edb3a8bcb944a01aa1aed8f25" + "reference": "f05978827b9343cba381ca05b8c7deee346b6015" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/c379636dc50e829edb3a8bcb944a01aa1aed8f25", - "reference": "c379636dc50e829edb3a8bcb944a01aa1aed8f25", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f05978827b9343cba381ca05b8c7deee346b6015", + "reference": "f05978827b9343cba381ca05b8c7deee346b6015", "shasum": "" }, "require": { - "facade/ignition-contracts": "^1.0.2", "filp/whoops": "^2.14.5", "php": "^8.0.0", "symfony/console": "^6.0.2" }, "require-dev": { "brianium/paratest": "^6.4.1", - "laravel/framework": "^9.7", - "nunomaduro/larastan": "^1.0.2", + "laravel/framework": "^9.26.1", + "laravel/pint": "^1.1.1", + "nunomaduro/larastan": "^1.0.3", "nunomaduro/mock-final-classes": "^1.1.0", - "orchestra/testbench": "^7.3.0", - "phpunit/phpunit": "^9.5.11" + "orchestra/testbench": "^7.7", + "phpunit/phpunit": "^9.5.23", + "spatie/ignition": "^1.4.1" }, "type": "library", "extra": { @@ -8280,7 +8425,7 @@ "type": "patreon" } ], - "time": "2022-04-05T15:31:38+00:00" + "time": "2023-01-03T12:54:54+00:00" }, { "name": "phar-io/manifest", @@ -8393,252 +8538,25 @@ }, "time": "2022-02-21T01:04:05+00:00" }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "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.6.1" - }, - "time": "2022-03-15T21:29:03+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" - }, { "name": "phpunit/php-code-coverage", - "version": "9.2.15", + "version": "9.2.24", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2cf940ebc6355a9d430462811b5aaa308b174bed", + "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.14", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -8687,7 +8605,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.24" }, "funding": [ { @@ -8695,7 +8613,7 @@ "type": "github" } ], - "time": "2022-03-07T09:28:20+00:00" + "time": "2023-01-26T08:26:55+00:00" }, { "name": "phpunit/php-file-iterator", @@ -8940,20 +8858,20 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.20", + "version": "9.5.28", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" + "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/954ca3113a03bf780d22f07bf055d883ee04b65e", + "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -8964,7 +8882,6 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", "phpunit/php-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", @@ -8972,20 +8889,16 @@ "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.0", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { "ext-soap": "*", "ext-xdebug": "*" @@ -9027,7 +8940,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.28" }, "funding": [ { @@ -9037,9 +8950,13 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-04-01T12:37:26+00:00" + "time": "2023-01-14T12:32:24+00:00" }, { "name": "sebastian/cli-parser", @@ -9210,16 +9127,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -9272,7 +9189,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -9280,7 +9197,7 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", @@ -9470,16 +9387,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { @@ -9535,7 +9452,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -9543,7 +9460,7 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", @@ -9898,16 +9815,16 @@ }, { "name": "sebastian/type", - "version": "3.0.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", "shasum": "" }, "require": { @@ -9919,7 +9836,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -9942,7 +9859,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" }, "funding": [ { @@ -9950,7 +9867,7 @@ "type": "github" } ], - "time": "2022-03-15T09:54:48+00:00" + "time": "2022-09-12T14:47:03+00:00" }, { "name": "sebastian/version", @@ -10069,20 +9986,20 @@ }, { "name": "spatie/flare-client-php", - "version": "1.1.0", + "version": "1.3.5", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "ceab058852a1278d9f57a7b95f1c348e4956d866" + "reference": "3e5dd5ac4928f3d2d036bd02de5eb83fd0ef1f42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/ceab058852a1278d9f57a7b95f1c348e4956d866", - "reference": "ceab058852a1278d9f57a7b95f1c348e4956d866", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/3e5dd5ac4928f3d2d036bd02de5eb83fd0ef1f42", + "reference": "3e5dd5ac4928f3d2d036bd02de5eb83fd0ef1f42", "shasum": "" }, "require": { - "illuminate/pipeline": "^8.0|^9.0", + "illuminate/pipeline": "^8.0|^9.0|^10.0", "php": "^8.0", "spatie/backtrace": "^1.2", "symfony/http-foundation": "^5.0|^6.0", @@ -10099,6 +10016,11 @@ "spatie/phpunit-snapshot-assertions": "^4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1.x-dev" + } + }, "autoload": { "files": [ "src/helpers.php" @@ -10121,7 +10043,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.1.0" + "source": "https://github.com/spatie/flare-client-php/tree/1.3.5" }, "funding": [ { @@ -10129,26 +10051,25 @@ "type": "github" } ], - "time": "2022-03-11T13:21:28+00:00" + "time": "2023-01-23T15:58:46+00:00" }, { "name": "spatie/ignition", - "version": "1.2.9", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "db25202fab2d5c14613b8914a1bb374998bbf870" + "reference": "2cf3833220cfe8fcf639544f8d7067b6469a00b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/db25202fab2d5c14613b8914a1bb374998bbf870", - "reference": "db25202fab2d5c14613b8914a1bb374998bbf870", + "url": "https://api.github.com/repos/spatie/ignition/zipball/2cf3833220cfe8fcf639544f8d7067b6469a00b0", + "reference": "2cf3833220cfe8fcf639544f8d7067b6469a00b0", "shasum": "" }, "require": { "ext-json": "*", "ext-mbstring": "*", - "monolog/monolog": "^2.0", "php": "^8.0", "spatie/flare-client-php": "^1.1", "symfony/console": "^5.4|^6.0", @@ -10163,6 +10084,11 @@ "symfony/process": "^5.4|^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2.x-dev" + } + }, "autoload": { "psr-4": { "Spatie\\Ignition\\": "src" @@ -10199,31 +10125,31 @@ "type": "github" } ], - "time": "2022-04-23T20:37:21+00:00" + "time": "2023-01-23T15:28:32+00:00" }, { "name": "spatie/laravel-ignition", - "version": "1.2.2", + "version": "1.6.4", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "924d1ae878874ad0bb49f63b69a9af759a34ee78" + "reference": "1a2b4bd3d48c72526c0ba417687e5c56b5cf49bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/924d1ae878874ad0bb49f63b69a9af759a34ee78", - "reference": "924d1ae878874ad0bb49f63b69a9af759a34ee78", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1a2b4bd3d48c72526c0ba417687e5c56b5cf49bc", + "reference": "1a2b4bd3d48c72526c0ba417687e5c56b5cf49bc", "shasum": "" }, "require": { "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "illuminate/support": "^8.77|^9.0", + "illuminate/support": "^8.77|^9.27", "monolog/monolog": "^2.3", "php": "^8.0", "spatie/flare-client-php": "^1.0.1", - "spatie/ignition": "^1.2.4", + "spatie/ignition": "^1.4.1", "symfony/console": "^5.0|^6.0", "symfony/var-dumper": "^5.0|^6.0" }, @@ -10289,7 +10215,7 @@ "type": "github" } ], - "time": "2022-04-14T18:04:51+00:00" + "time": "2023-01-03T19:28:04+00:00" }, { "name": "theseer/tokenizer", -- 2.39.2 From f17b9f3b6f7f9e678c681c719eea6fb5c41a387f Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Sat, 4 Feb 2023 14:12:12 +0100 Subject: [PATCH 09/16] basic map pins --- app/Http/Controllers/TechniqueController.php | 7 +++ app/Models/TechniqueMap.php | 21 +++++++ .../2023_02_01_153251_technique_map.php | 35 ++++++++++++ resources/js/components/common/Icon.js | 1 + resources/js/components/map/Buttons.js | 45 ++++----------- resources/js/components/map/OpenSeadragon.js | 36 +++++++++++- resources/js/components/map/Overlay.js | 37 +++++++++++++ resources/js/components/map/Pin.js | 55 +++++++++++++++++++ resources/js/components/map/Pins.js | 14 +++++ resources/js/components/map/Popover.js | 54 ++++++++++++++++++ resources/js/components/pages/Map.js | 2 + resources/sass/app.scss | 1 + resources/sass/map.scss | 18 ++++++ routes/api.php | 2 + 14 files changed, 294 insertions(+), 34 deletions(-) create mode 100644 app/Models/TechniqueMap.php create mode 100644 database/migrations/2023_02_01_153251_technique_map.php create mode 100644 resources/js/components/map/Overlay.js create mode 100644 resources/js/components/map/Pin.js create mode 100644 resources/js/components/map/Pins.js create mode 100644 resources/js/components/map/Popover.js create mode 100644 resources/sass/map.scss diff --git a/app/Http/Controllers/TechniqueController.php b/app/Http/Controllers/TechniqueController.php index 8694c04..b27465e 100644 --- a/app/Http/Controllers/TechniqueController.php +++ b/app/Http/Controllers/TechniqueController.php @@ -3,12 +3,19 @@ namespace App\Http\Controllers; use App\Models\Technique; +use App\Models\TechniqueMap; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Request; class TechniqueController extends Controller { + public function forMap($map) { + $techs = TechniqueMap::with(['technique', 'technique.relations'])->where('map', '=', $map); + + return $techs->get()->toJson(); + } + public function search(Request $request) { $validatedData = $request->validate([ 'phrase' => 'string|nullable', diff --git a/app/Models/TechniqueMap.php b/app/Models/TechniqueMap.php new file mode 100644 index 0000000..d19a005 --- /dev/null +++ b/app/Models/TechniqueMap.php @@ -0,0 +1,21 @@ +belongsTo(Technique::class); + } + + protected $hidden = [ + 'created_at', + 'updated_at', + ]; + +} diff --git a/database/migrations/2023_02_01_153251_technique_map.php b/database/migrations/2023_02_01_153251_technique_map.php new file mode 100644 index 0000000..42e9230 --- /dev/null +++ b/database/migrations/2023_02_01_153251_technique_map.php @@ -0,0 +1,35 @@ +id(); + $table->foreignId('technique_id')->constrained(); + $table->string('map'); + $table->double('x'); + $table->double('y'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('technique_maps'); + } +}; diff --git a/resources/js/components/common/Icon.js b/resources/js/components/common/Icon.js index bce75f5..c9d604a 100644 --- a/resources/js/components/common/Icon.js +++ b/resources/js/components/common/Icon.js @@ -73,6 +73,7 @@ Icon.LANGUAGE = makePreset('LanguageIcon', 'language'); Icon.LOCKED = makePreset('LockedIcon', 'lock'); Icon.LOGOUT = makePreset('LogoutIcon', 'sign-out-alt'); Icon.PENDING = makePreset('PendingIcon', 'clock'); +Icon.PIN = makePreset('PinIcon', 'location-pin'); Icon.PROTOCOL = makePreset('ProtocolIcon', 'file-alt'); Icon.REJECT = makePreset('RejectIcon', 'square-xmark'); Icon.REMOVE = makePreset('RemoveIcon', 'square-xmark'); diff --git a/resources/js/components/map/Buttons.js b/resources/js/components/map/Buttons.js index b43fc0e..fdffe92 100644 --- a/resources/js/components/map/Buttons.js +++ b/resources/js/components/map/Buttons.js @@ -5,42 +5,21 @@ import { useTranslation } from 'react-i18next'; import { useOpenSeadragon } from './OpenSeadragon'; const Buttons = () => { - const { viewer } = useOpenSeadragon(); + const { activeMap, setActiveMap } = useOpenSeadragon(); const { t } = useTranslation(); - const goToPage = React.useCallback((p) => { - if (viewer) viewer.goToPage(p); - }, [viewer]); - return
    - - - - + {['lw', 'dw', 'sp', 'uw'].map(map => + + )}
    ; }; diff --git a/resources/js/components/map/OpenSeadragon.js b/resources/js/components/map/OpenSeadragon.js index f854318..b6158a5 100644 --- a/resources/js/components/map/OpenSeadragon.js +++ b/resources/js/components/map/OpenSeadragon.js @@ -1,3 +1,4 @@ +import axios from 'axios'; import OpenSeadragon from 'openseadragon'; import PropTypes from 'prop-types'; import React from 'react'; @@ -7,6 +8,8 @@ export const Context = React.createContext({}); export const useOpenSeadragon = () => React.useContext(Context); export const Provider = React.forwardRef(({ children }, ref) => { + const [activeMap, setActiveMap] = React.useState('lw'); + const [pins, setPins] = React.useState([]); const [viewer, setViewer] = React.useState(null); React.useEffect(() => { @@ -65,7 +68,38 @@ export const Provider = React.forwardRef(({ children }, ref) => { }; }, [ref.current]); - return + React.useEffect(() => { + if (!viewer) return; + switch (activeMap) { + case 'lw': + viewer.goToPage(0); + break; + case 'dw': + viewer.goToPage(1); + break; + case 'sp': + viewer.goToPage(2); + break; + case 'uw': + viewer.goToPage(3); + break; + } + const controller = new AbortController(); + axios.get(`/api/markers/${activeMap}`, { + signal: controller.signal, + }).then(response => { + setPins(response.data || []); + }).catch(e => { + if (!axios.isCancel(e)) { + console.error(e); + } + }); + return () => { + controller.abort(); + }; + }, [activeMap, viewer]); + + return {children} ; }); diff --git a/resources/js/components/map/Overlay.js b/resources/js/components/map/Overlay.js new file mode 100644 index 0000000..4068bea --- /dev/null +++ b/resources/js/components/map/Overlay.js @@ -0,0 +1,37 @@ +import OpenSeadragon from 'openseadragon'; +import PropTypes from 'prop-types'; +import React from 'react'; +import { createPortal } from 'react-dom'; + +import { useOpenSeadragon } from './OpenSeadragon'; + +const Overlay = ({ children, onClick, x, y }) => { + const { viewer } = useOpenSeadragon(); + const [element] = React.useState(document.createElement('div')); + + React.useEffect(() => { + if (!viewer) return; + viewer.addOverlay( + element, + new OpenSeadragon.Point(x, y), + OpenSeadragon.Placement.CENTER, + ); + if (onClick) { + new OpenSeadragon.MouseTracker({ + element, + clickHandler: onClick, + }); + } + }, [onClick, viewer, x, y]); + + return createPortal(children, element); +}; + +Overlay.propTypes = { + children: PropTypes.node, + onClick: PropTypes.func, + x: PropTypes.number, + y: PropTypes.number, +}; + +export default Overlay; diff --git a/resources/js/components/map/Pin.js b/resources/js/components/map/Pin.js new file mode 100644 index 0000000..69b6d77 --- /dev/null +++ b/resources/js/components/map/Pin.js @@ -0,0 +1,55 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import { Link, useNavigate } from 'react-router-dom'; + +import Overlay from './Overlay'; +import Popover from './Popover'; +import Icon from '../common/Icon'; +import { getLink, getTranslation } from '../../helpers/Technique'; +import i18n from '../../i18n'; + +const Pin = ({ pin }) => { + const [showPopover, setShowPopover] = React.useState(false); + const ref = React.useRef(); + + const navigate = useNavigate(); + + const onClick = React.useCallback((e) => { + if (ref.current && ref.current.contains(e.originalTarget)) { + if (e.originalTarget.tagName === 'A') { + navigate(new URL(e.originalTarget.href).pathname); + } + } else { + if (pin.technique.type === 'location') { + setShowPopover(s => !s); + } else { + navigate(getLink(pin.technique)); + } + } + }, [pin]); + + return +
    + + + + {pin.technique.type === 'location' ? +
    + +
    + : null} +
    +
    ; +}; + +Pin.propTypes = { + pin: PropTypes.shape({ + technique: PropTypes.shape({ + type: PropTypes.string, + }), + x: PropTypes.number, + y: PropTypes.number, + }), +}; + +export default Pin; diff --git a/resources/js/components/map/Pins.js b/resources/js/components/map/Pins.js new file mode 100644 index 0000000..8b37ee9 --- /dev/null +++ b/resources/js/components/map/Pins.js @@ -0,0 +1,14 @@ +import React from 'react'; + +import { useOpenSeadragon } from './OpenSeadragon'; +import Pin from './Pin'; + +const Pins = () => { + const { pins } = useOpenSeadragon(); + + return pins.map(pin => + + ); +}; + +export default Pins; diff --git a/resources/js/components/map/Popover.js b/resources/js/components/map/Popover.js new file mode 100644 index 0000000..02d4070 --- /dev/null +++ b/resources/js/components/map/Popover.js @@ -0,0 +1,54 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import { Card, ListGroup } from 'react-bootstrap'; +import { Link } from 'react-router-dom'; + +import { + getLink, + getRelations, + getTranslation, + hasRelations, + sorted, +} from '../../helpers/Technique'; +import i18n from '../../i18n'; + +const Popover = ({ show, technique }) => +
    + + + + {getTranslation(technique, 'title', i18n.language)} + + + {technique.short ? + + + {getTranslation(technique, 'short', i18n.language)} + + + : null} + {hasRelations(technique, 'related') ? + + {sorted(getRelations(technique, 'related')).map(r => + + + {getTranslation(r, 'title', i18n.language)} + + + )} + + : null} + +
    ; + +Popover.propTypes = { + show: PropTypes.bool, + technique: PropTypes.shape({ + short: PropTypes.string, + }), +}; + +export default Popover; diff --git a/resources/js/components/pages/Map.js b/resources/js/components/pages/Map.js index 50a28fb..d8a1039 100644 --- a/resources/js/components/pages/Map.js +++ b/resources/js/components/pages/Map.js @@ -4,6 +4,7 @@ import { useTranslation } from 'react-i18next'; import Buttons from '../map/Buttons'; import OpenSeadragon from '../map/OpenSeadragon'; +import Pins from '../map/Pins'; const Map = () => { const container = React.useRef(); @@ -16,6 +17,7 @@ const Map = () => {
    + ; }; diff --git a/resources/sass/app.scss b/resources/sass/app.scss index d050607..90af358 100644 --- a/resources/sass/app.scss +++ b/resources/sass/app.scss @@ -15,6 +15,7 @@ @import 'discord'; @import 'form'; @import 'front'; +@import 'map'; @import 'participants'; @import 'results'; @import 'rounds'; diff --git a/resources/sass/map.scss b/resources/sass/map.scss new file mode 100644 index 0000000..95d645a --- /dev/null +++ b/resources/sass/map.scss @@ -0,0 +1,18 @@ +.map-pin { + path { + fill: red; + stroke: black; + stroke-width: 2px; + vector-effect: non-scaling-stroke; + } +} + +.map-popover { + position: absolute; + width: 40vw; + min-width: 20em; + + &.hidden { + display: none; + } +} diff --git a/routes/api.php b/routes/api.php index 4ec1bb1..4c1d8ab 100644 --- a/routes/api.php +++ b/routes/api.php @@ -36,6 +36,8 @@ Route::get('discord-guilds', 'App\Http\Controllers\DiscordGuildController@search Route::get('discord-guilds/{guild_id}', 'App\Http\Controllers\DiscordGuildController@single'); Route::get('discord-guilds/{guild_id}/channels', 'App\Http\Controllers\DiscordChannelController@search'); +Route::get('markers/{map}', 'App\Http\Controllers\TechniqueController@forMap'); + Route::get('protocol/{tournament}', 'App\Http\Controllers\ProtocolController@forTournament'); Route::post('results', 'App\Http\Controllers\ResultController@create'); -- 2.39.2 From 5d62356b37c464f6fb91deb7beb62347fd9cdd9c Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Sun, 5 Feb 2023 17:47:43 +0100 Subject: [PATCH 10/16] link tech and map --- resources/js/components/common/Footer.js | 9 ++++++- resources/js/components/common/Header.js | 33 +++++++++++++++++------- resources/js/i18n/de.js | 6 +++++ resources/js/i18n/en.js | 6 +++++ 4 files changed, 43 insertions(+), 11 deletions(-) diff --git a/resources/js/components/common/Footer.js b/resources/js/components/common/Footer.js index 0ded211..361c1f7 100644 --- a/resources/js/components/common/Footer.js +++ b/resources/js/components/common/Footer.js @@ -46,7 +46,14 @@ const Footer = () => { - ALttP Tech Index + {t('footer.tech')} + + + + + + + {t('footer.map')} diff --git a/resources/js/components/common/Header.js b/resources/js/components/common/Header.js index 6868477..1bb2ce1 100644 --- a/resources/js/components/common/Header.js +++ b/resources/js/components/common/Header.js @@ -2,16 +2,17 @@ import PropTypes from 'prop-types'; import React from 'react'; import { Button, Container, Nav, Navbar } from 'react-bootstrap'; import { LinkContainer } from 'react-router-bootstrap'; -import { withTranslation } from 'react-i18next'; +import { useTranslation } from 'react-i18next'; import Icon from './Icon'; import LanguageSwitcher from './LanguageSwitcher'; import { getAvatarUrl } from '../../helpers/User'; import { withUser } from '../../helpers/UserContext'; -import i18n from '../../i18n'; -const Header = ({ doLogout, user }) => - +const Header = ({ doLogout, user }) => { + const { t } = useTranslation(); + + return @@ -30,7 +31,19 @@ const Header = ({ doLogout, user }) => - + + - -; + ; +}; Header.propTypes = { doLogout: PropTypes.func, @@ -81,4 +94,4 @@ Header.propTypes = { }), }; -export default withTranslation()(withUser(Header)); +export default withUser(Header); diff --git a/resources/js/i18n/de.js b/resources/js/i18n/de.js index f4b73e5..0f7c8ff 100644 --- a/resources/js/i18n/de.js +++ b/resources/js/i18n/de.js @@ -283,10 +283,12 @@ export default { connect: 'Connect Spedruns Discord', contact: 'Wenn du gerne ein Turnier auf dieser Seite organisieren möchtest, wende dich bitte an HolySmoke#5229 im Discord.', info: 'Infos', + map: 'ALttP Karte', privacy: 'Datenschutz', resources: 'Ressourcen', smd: 'Deutscher Super Metroid Discord', smwiki: 'Super Metroid Speedrunning Wiki', + tech: 'ALttP Techniken', }, general: { anonymous: 'Anonym', @@ -385,6 +387,10 @@ export default { uwLong: 'Underworld', uwShort: 'UW', }, + menu: { + map: 'Karte', + tech: 'Techniken', + }, modes: { heading: 'Modi', }, diff --git a/resources/js/i18n/en.js b/resources/js/i18n/en.js index 6498b85..7414796 100644 --- a/resources/js/i18n/en.js +++ b/resources/js/i18n/en.js @@ -283,10 +283,12 @@ export default { connect: 'Connect Spedruns Discord', contact: 'If you would like to organize a Tournament on this site, please contact HolySmoke#5229 on Discord.', info: 'Infos', + map: 'ALttP Map', privacy: 'Privacy', resources: 'Resources', smd: 'German Super Metroid Discord', smwiki: 'Super Metroid Speedrunning Wiki', + tech: 'ALttP Tech', }, general: { anonymous: 'Anonym', @@ -385,6 +387,10 @@ export default { uwLong: 'Underworld', uwShort: 'UW', }, + menu: { + map: 'Map', + tech: 'Tech', + }, modes: { heading: 'Modes', }, -- 2.39.2 From cb6e69664f917891230a511608ceb568a5c176a0 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Sun, 5 Feb 2023 18:08:01 +0100 Subject: [PATCH 11/16] set window title from map --- resources/js/components/pages/Map.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/js/components/pages/Map.js b/resources/js/components/pages/Map.js index d8a1039..44ac0a0 100644 --- a/resources/js/components/pages/Map.js +++ b/resources/js/components/pages/Map.js @@ -10,6 +10,10 @@ const Map = () => { const container = React.useRef(); const { t } = useTranslation(); + React.useEffect(() => { + window.document.title = t('map.heading'); + }, []); + return
    -- 2.39.2 From 5dfd6a1dbe115dfd01bd487181e1ce056d0ee82b Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Sun, 5 Feb 2023 18:12:15 +0100 Subject: [PATCH 12/16] map in sitemap --- app/Http/Controllers/SitemapXmlController.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/SitemapXmlController.php b/app/Http/Controllers/SitemapXmlController.php index daa3699..99e9092 100644 --- a/app/Http/Controllers/SitemapXmlController.php +++ b/app/Http/Controllers/SitemapXmlController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\Models\SitemapUrl; use App\Models\Technique; +use App\Models\TechniqueMap; use App\Models\Tournament; use Illuminate\Http\Request; @@ -22,11 +23,18 @@ class SitemapXmlController extends Controller $urls[] = $url; } + $url = new SitemapUrl(); + $url->path = '/map'; + $url->lastmod = TechniqueMap::latest()->first()->created_at; + $url->changefreq = 'monthly'; + $url->priority = 0.9; + $urls[] = $url; + $url = new SitemapUrl(); $url->path = '/tech'; $url->lastmod = Technique::where('type', '=', 'tech')->where('index', true)->latest()->first()->created_at; $url->changefreq = 'monthly'; - $url->priority = 0.5; + $url->priority = 0.8; $urls[] = $url; foreach (Technique::where('type', '=', 'tech')->where('index', true)->get() as $tech) { -- 2.39.2 From e937f3f41b33ba94d36f898573df75a9cd10e5c0 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Mon, 6 Feb 2023 13:04:17 +0100 Subject: [PATCH 13/16] list items shown on map --- resources/js/components/common/Icon.js | 1 + resources/js/components/map/Item.js | 94 ++++++++++++++++++++++ resources/js/components/map/List.js | 31 +++++++ resources/js/components/pages/Map.js | 2 + resources/js/components/techniques/List.js | 6 +- resources/js/i18n/de.js | 2 + resources/js/i18n/en.js | 2 + resources/sass/map.scss | 16 ++++ 8 files changed, 151 insertions(+), 3 deletions(-) create mode 100644 resources/js/components/map/Item.js create mode 100644 resources/js/components/map/List.js diff --git a/resources/js/components/common/Icon.js b/resources/js/components/common/Icon.js index c9d604a..3e094cc 100644 --- a/resources/js/components/common/Icon.js +++ b/resources/js/components/common/Icon.js @@ -63,6 +63,7 @@ Icon.ALLOWED = makePreset('AllowedIcon', 'square-check'); Icon.APPLY = makePreset('ApplyIcon', 'right-to-bracket'); Icon.APPLICATIONS = makePreset('ApplicationsIcon', 'person-running'); Icon.CHART = makePreset('ChartIcon', 'chart-line'); +Icon.CROSSHAIRS = makePreset('CrosshairsIcon', 'crosshairs'); Icon.DISCORD = makePreset('DiscordIcon', ['fab', 'discord']); Icon.EDIT = makePreset('EditIcon', 'edit'); Icon.FINISHED = makePreset('FinishedIcon', 'square-check'); diff --git a/resources/js/components/map/Item.js b/resources/js/components/map/Item.js new file mode 100644 index 0000000..4bd209a --- /dev/null +++ b/resources/js/components/map/Item.js @@ -0,0 +1,94 @@ +import OpenSeadragon from 'openseadragon'; +import PropTypes from 'prop-types'; +import React from 'react'; +import { Button } from 'react-bootstrap'; +import { useTranslation } from 'react-i18next'; +import { Link } from 'react-router-dom'; + +import { useOpenSeadragon } from './OpenSeadragon'; +import Icon from '../common/Icon'; +import Rulesets from '../techniques/Rulesets'; +import { + getLink, + getRelations, + getTranslation, + hasRelations, + sorted, +} from '../../helpers/Technique'; +import i18n from '../../i18n'; + +const Item = ({ pin }) => { + const { viewer } = useOpenSeadragon(); + const { t } = useTranslation(); + + const goToLocation = React.useCallback(pin => { + if (viewer && viewer.viewport) { + viewer.viewport.panTo(new OpenSeadragon.Point(pin.x, pin.y)); + viewer.viewport.zoomTo(4); + viewer.element.scrollIntoView(); + } + }, [viewer]); + + return
  • +
    + {pin.technique.type === 'location' ? <> +

    {getTranslation(pin.technique, 'title', i18n.language)}

    +

    {getTranslation(pin.technique, 'short', i18n.language)}

    + {hasRelations(pin.technique, 'related') ? + sorted(getRelations(pin.technique, 'related')).map(r => +
    +
    +

    + + {getTranslation(r, 'title', i18n.language)} + +

    +

    {getTranslation(r, 'short', i18n.language)}

    +
    + {r.rulesets ? + + : null} +
    + ) + : null} + :
    +
    +

    + + {getTranslation(pin.technique, 'title', i18n.language)} + +

    +

    {getTranslation(pin.technique, 'short', i18n.language)}

    +
    + {pin.technique.rulesets ? + + : null} +
    } +
    + +
  • ; +}; + +Item.propTypes = { + pin: PropTypes.shape({ + technique: PropTypes.shape({ + rulesets: PropTypes.shape({ + }), + type: PropTypes.string, + }), + x: PropTypes.number, + y: PropTypes.number, + }), +}; + +export default Item; diff --git a/resources/js/components/map/List.js b/resources/js/components/map/List.js new file mode 100644 index 0000000..7b66630 --- /dev/null +++ b/resources/js/components/map/List.js @@ -0,0 +1,31 @@ +import React from 'react'; +import { Container } from 'react-bootstrap'; +import { useTranslation } from 'react-i18next'; + +import Item from './Item'; +import { useOpenSeadragon } from './OpenSeadragon'; +import { compareTranslation } from '../../helpers/Technique'; +import i18n from '../../i18n'; + +const List = () => { + const { pins } = useOpenSeadragon(); + const { t } = useTranslation(); + + const sortedPins = React.useMemo(() => { + const compare = compareTranslation('title', i18n.language); + return pins.sort((a, b) => compare(a.technique, b.technique)); + }, [pins, i18n.language]); + + if (!pins || !pins.length) return null; + + return +

    {t('map.onThisMap')}

    +
      + {sortedPins.map(pin => + + )} +
    +
    ; +}; + +export default List; diff --git a/resources/js/components/pages/Map.js b/resources/js/components/pages/Map.js index 44ac0a0..841227c 100644 --- a/resources/js/components/pages/Map.js +++ b/resources/js/components/pages/Map.js @@ -3,6 +3,7 @@ import { Container } from 'react-bootstrap'; import { useTranslation } from 'react-i18next'; import Buttons from '../map/Buttons'; +import List from '../map/List'; import OpenSeadragon from '../map/OpenSeadragon'; import Pins from '../map/Pins'; @@ -22,6 +23,7 @@ const Map = () => {
    + ; }; diff --git a/resources/js/components/techniques/List.js b/resources/js/components/techniques/List.js index e18937e..aa80836 100644 --- a/resources/js/components/techniques/List.js +++ b/resources/js/components/techniques/List.js @@ -20,9 +20,9 @@ const List = ({ techniques }) =>

      {getTranslation(tech, 'short', i18n.language)}

    - {tech.rulesets ? - - : null} + {tech.rulesets ? + + : null}
  • )}
; diff --git a/resources/js/i18n/de.js b/resources/js/i18n/de.js index 0f7c8ff..02adc9d 100644 --- a/resources/js/i18n/de.js +++ b/resources/js/i18n/de.js @@ -379,9 +379,11 @@ export default { map: { dwLong: 'Dark World', dwShort: 'DW', + goToLocation: 'Zur Stelle springen', heading: 'Karte', lwLong: 'Light World', lwShort: 'LW', + onThisMap: 'Auf dieser Karte', spLong: 'Spezielle Gebiete', spShort: 'SP', uwLong: 'Underworld', diff --git a/resources/js/i18n/en.js b/resources/js/i18n/en.js index 7414796..efb99b3 100644 --- a/resources/js/i18n/en.js +++ b/resources/js/i18n/en.js @@ -379,9 +379,11 @@ export default { map: { dwLong: 'Dark World', dwShort: 'DW', + goToLocation: 'Go to location', heading: 'Map', lwLong: 'Light World', lwShort: 'LW', + onThisMap: 'On this map', spLong: 'Special Areas', spShort: 'SP', uwLong: 'Underworld', diff --git a/resources/sass/map.scss b/resources/sass/map.scss index 95d645a..599cd15 100644 --- a/resources/sass/map.scss +++ b/resources/sass/map.scss @@ -16,3 +16,19 @@ display: none; } } + +.pin-list { + margin: 1em 0; + padding: 0; + list-style: none; + + li { + margin: 1ex 0; + padding: 1ex; + border-top: thin solid silver; + } + + h2 > a, h3 > a { + text-decoration: none; + } +} -- 2.39.2 From f1c8c3cc53a09d1c261875d2f482b6e19bc48a9a Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Mon, 6 Feb 2023 15:49:52 +0100 Subject: [PATCH 14/16] tech attribution & requirements --- app/Models/Technique.php | 1 + ...02_06_124402_more_technique_properties.php | 40 +++++++++++++++++++ resources/js/components/common/Icon.js | 1 + resources/js/components/common/ZeldaIcon.js | 34 +++++++++++----- resources/js/components/techniques/Detail.js | 9 ++++- .../js/components/techniques/Requirement.js | 17 ++++++++ .../js/components/techniques/Requirements.js | 34 ++++++++++++++++ resources/js/i18n/de.js | 4 ++ resources/js/i18n/en.js | 4 ++ resources/sass/common.scss | 24 +++++++++++ resources/sass/map.scss | 2 +- resources/sass/techniques.scss | 27 +++++++++++++ 12 files changed, 184 insertions(+), 13 deletions(-) create mode 100644 database/migrations/2023_02_06_124402_more_technique_properties.php create mode 100644 resources/js/components/techniques/Requirement.js create mode 100644 resources/js/components/techniques/Requirements.js diff --git a/app/Models/Technique.php b/app/Models/Technique.php index c8ad91b..4469671 100644 --- a/app/Models/Technique.php +++ b/app/Models/Technique.php @@ -30,6 +30,7 @@ class Technique extends Model protected $casts = [ 'index' => 'boolean', + 'requirements' => 'array', 'rulesets' => 'array', ]; diff --git a/database/migrations/2023_02_06_124402_more_technique_properties.php b/database/migrations/2023_02_06_124402_more_technique_properties.php new file mode 100644 index 0000000..803fcc5 --- /dev/null +++ b/database/migrations/2023_02_06_124402_more_technique_properties.php @@ -0,0 +1,40 @@ +text('requirements')->nullable()->default(null); + $table->text('attribution')->default(''); + }); + Schema::table('technique_translations', function(Blueprint $table) { + $table->text('attribution')->default(''); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('techniques', function(Blueprint $table) { + $table->dropColumn('requirements'); + $table->dropColumn('attribution'); + }); + Schema::table('technique_translations', function(Blueprint $table) { + $table->dropColumn('attribution'); + }); + } +}; diff --git a/resources/js/components/common/Icon.js b/resources/js/components/common/Icon.js index 3e094cc..dd88669 100644 --- a/resources/js/components/common/Icon.js +++ b/resources/js/components/common/Icon.js @@ -81,6 +81,7 @@ Icon.REMOVE = makePreset('RemoveIcon', 'square-xmark'); Icon.RESULT = makePreset('ResultIcon', 'clock'); Icon.SECOND_PLACE = makePreset('SecondPlaceIcon', 'medal'); Icon.SETTINGS = makePreset('SettingsIcon', 'cog'); +Icon.SLASH = makePreset('SlashIcon', 'slash'); Icon.STREAM = makePreset('StreamIcon', ['fab', 'twitch']); Icon.THIRD_PLACE = makePreset('ThirdPlaceIcon', 'award'); Icon.TWITCH = makePreset('TwitchIcon', ['fab', 'twitch']); diff --git a/resources/js/components/common/ZeldaIcon.js b/resources/js/components/common/ZeldaIcon.js index 84f2220..c53f4fd 100644 --- a/resources/js/components/common/ZeldaIcon.js +++ b/resources/js/components/common/ZeldaIcon.js @@ -1,8 +1,8 @@ import PropTypes from 'prop-types'; import React from 'react'; -import { withTranslation } from 'react-i18next'; +import { useTranslation } from 'react-i18next'; -import i18n from '../../i18n'; +import Icon from './Icon'; const getIconURL = name => { switch (name) { @@ -64,17 +64,29 @@ const getIconURL = name => { } }; -const ZeldaIcon = ({ name }) => - - {i18n.t(`icon.zelda.${name}`)} -; +const ZeldaIcon = ({ name }) => { + const { t } = useTranslation(); + + const invert = name.startsWith('not-'); + const strippedName = invert ? name.substr(4) : name; + const title = t(`icon.zelda.${name}`); + + return + {title} + {invert ? + + + + : null} + ; +}; ZeldaIcon.propTypes = { name: PropTypes.string, }; -export default withTranslation()(ZeldaIcon); +export default ZeldaIcon; diff --git a/resources/js/components/techniques/Detail.js b/resources/js/components/techniques/Detail.js index 6653923..9d9534e 100644 --- a/resources/js/components/techniques/Detail.js +++ b/resources/js/components/techniques/Detail.js @@ -1,10 +1,11 @@ import PropTypes from 'prop-types'; import React from 'react'; -import { Container } from 'react-bootstrap'; +import { Alert, Container } from 'react-bootstrap'; import { withTranslation } from 'react-i18next'; import List from './List'; import Outline from './Outline'; +import Requirements from './Requirements'; import Rulesets from './Rulesets'; import RawHTML from '../common/RawHTML'; import { @@ -23,6 +24,7 @@ const Detail = ({ technique }) => : null} + {technique.chapters ? technique.chapters.map(chapter =>
@@ -40,6 +42,11 @@ const Detail = ({ technique }) =>

{i18n.t('techniques.seeAlso')}

: null} + {getTranslation(technique, 'attribution', i18n.language) ? + + + + : null}
; Detail.propTypes = { diff --git a/resources/js/components/techniques/Requirement.js b/resources/js/components/techniques/Requirement.js new file mode 100644 index 0000000..5faa372 --- /dev/null +++ b/resources/js/components/techniques/Requirement.js @@ -0,0 +1,17 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +import ZeldaIcon from '../common/ZeldaIcon'; + +const Requirement = ({ requirement }) => +
+ {requirement.map(r => + + )} +
; + +Requirement.propTypes = { + requirement: PropTypes.arrayOf(PropTypes.string), +}; + +export default Requirement; diff --git a/resources/js/components/techniques/Requirements.js b/resources/js/components/techniques/Requirements.js new file mode 100644 index 0000000..0d4501e --- /dev/null +++ b/resources/js/components/techniques/Requirements.js @@ -0,0 +1,34 @@ +import PropTypes from 'prop-types'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +import Requirement from './Requirement'; + +const Requirements = ({ technique }) => { + const { t } = useTranslation(); + + if (!technique.requirements || !technique.requirements.length) { + return null; + } + + return

+ {t('techniques.requirements')} +

    + {technique.requirements.map((r, i) => +
  • + +
  • + )} +
+

; +}; + +Requirements.propTypes = { + technique: PropTypes.shape({ + requirements: PropTypes.arrayOf( + PropTypes.arrayOf(PropTypes.string), + ), + }), +}; + +export default Requirements; diff --git a/resources/js/i18n/de.js b/resources/js/i18n/de.js index 02adc9d..f130c08 100644 --- a/resources/js/i18n/de.js +++ b/resources/js/i18n/de.js @@ -363,6 +363,8 @@ export default { mitts: 'Titan \'s Mitts', moonpearl: 'Moonpearl', mushroom: 'Mushroom', + 'not-flippers': 'Keine Flippers', + 'not-moonpearl': 'Keine Moonpearl', powder: 'Powder', quake: 'Quake', 'red-bomb': 'Red Bomb', @@ -508,6 +510,8 @@ export default { }, techniques: { heading: 'Techniken', + lastModified: 'Zuletzt geändert: {{ date, L }}', + requirements: 'Erfordert: ', rulesetCodes: { competitive: 'COM', mg: 'MG', diff --git a/resources/js/i18n/en.js b/resources/js/i18n/en.js index efb99b3..a7ca19c 100644 --- a/resources/js/i18n/en.js +++ b/resources/js/i18n/en.js @@ -363,6 +363,8 @@ export default { mitts: 'Titan \'s Mitts', moonpearl: 'Moonpearl', mushroom: 'Mushroom', + 'not-flippers': 'No Flippers', + 'not-moonpearl': 'No Moonpearl', powder: 'Powder', quake: 'Quake', 'red-bomb': 'Red Bomb', @@ -508,6 +510,8 @@ export default { }, techniques: { heading: 'Techniques', + lastModified: 'Last modified: {{ date, L }}', + requirements: 'Requires: ', rulesetCodes: { competitive: 'COM', mg: 'MG', diff --git a/resources/sass/common.scss b/resources/sass/common.scss index 83e5b90..879253c 100644 --- a/resources/sass/common.scss +++ b/resources/sass/common.scss @@ -193,6 +193,7 @@ h1 { } .zelda-icon { + position: relative; display: inline-flex; align-items: center; width: 2em; @@ -203,4 +204,27 @@ h1 { max-width: 100%; max-height: 100%; } + .strike { + position: absolute; + top: 0; + left: 0; + width: 2em; + height: 2em; + display: flex; + align-items: center; + justify-content: center; + pointer-events: none; + + svg { + width: 100%; + height: 100%; + } + + path { + fill: red; + stroke: black; + stroke-width: 1px; + vector-effect: non-scaling-stroke; + } + } } diff --git a/resources/sass/map.scss b/resources/sass/map.scss index 599cd15..38376a1 100644 --- a/resources/sass/map.scss +++ b/resources/sass/map.scss @@ -2,7 +2,7 @@ path { fill: red; stroke: black; - stroke-width: 2px; + stroke-width: 1px; vector-effect: non-scaling-stroke; } } diff --git a/resources/sass/techniques.scss b/resources/sass/techniques.scss index 8355e70..eff0c62 100644 --- a/resources/sass/techniques.scss +++ b/resources/sass/techniques.scss @@ -34,6 +34,33 @@ } } +.tech-requirements { + ul { + margin: 0; + padding: 0; + list-style: none; + } + li { + display: inline; + list-style: none; + margin: 0 1ex; + padding: 0; + + &::before { + display: inline; + content: " / "; + margin-right: 1ex; + } + &:first-child::before { + display: none; + } + } + .requirement { + display: inline-flex; + vertical-align: middle; + } +} + .tech-outline { float: right; } -- 2.39.2 From 25e1c9c43a09d438c20db17bc5239cbc45b454cd Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Tue, 7 Feb 2023 10:58:36 +0100 Subject: [PATCH 15/16] fix anonymous user permission --- app/Policies/UserPolicy.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Policies/UserPolicy.php b/app/Policies/UserPolicy.php index b11e3a8..31f9481 100644 --- a/app/Policies/UserPolicy.php +++ b/app/Policies/UserPolicy.php @@ -15,7 +15,7 @@ class UserPolicy * @param \App\Models\User $user * @return \Illuminate\Auth\Access\Response|bool */ - public function viewAny(User $user) + public function viewAny(?User $user) { return true; } @@ -27,7 +27,7 @@ class UserPolicy * @param \App\Models\User $model * @return \Illuminate\Auth\Access\Response|bool */ - public function view(User $user, User $model) + public function view(?User $user, User $model) { return true; } -- 2.39.2 From 18cd02860ba7889360ce3547b44faa0daa807a5e Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Fri, 10 Feb 2023 16:13:18 +0100 Subject: [PATCH 16/16] add helmet --- package-lock.json | 52 ++++++++++++++++++++ package.json | 1 + resources/js/components/App.js | 8 +++ resources/js/components/pages/AlttpSeed.js | 7 ++- resources/js/components/pages/AosFront.js | 25 +++++----- resources/js/components/pages/AosGenerate.js | 12 +++-- resources/js/components/pages/AosSeed.js | 7 ++- resources/js/components/pages/AosTracker.js | 8 +-- resources/js/components/pages/Map.js | 9 ++-- resources/js/components/pages/NotFound.js | 13 +++-- resources/js/components/pages/Technique.js | 11 ++--- resources/js/components/pages/Techniques.js | 7 ++- resources/js/components/pages/Tournament.js | 5 +- resources/js/components/pages/User.js | 5 +- resources/js/i18n/de.js | 3 ++ resources/js/i18n/en.js | 3 ++ 16 files changed, 136 insertions(+), 40 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6bc7914..99cc398 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "pusher-js": "^7.0.6", "qs": "^6.10.3", "react-bootstrap": "^2.2.0", + "react-helmet": "^6.1.0", "react-i18next": "^11.15.6", "react-router-bootstrap": "^0.26.0", "react-router-dom": "^6.2.2", @@ -9518,6 +9519,25 @@ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" }, + "node_modules/react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "dependencies": { + "object-assign": "^4.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.1.1", + "react-side-effect": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.3.0" + } + }, + "node_modules/react-helmet/node_modules/react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + }, "node_modules/react-i18next": { "version": "11.15.6", "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.15.6.tgz", @@ -9600,6 +9620,14 @@ "react-dom": ">=16.8" } }, + "node_modules/react-side-effect": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", + "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==", + "peerDependencies": { + "react": "^16.3.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-smooth": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.0.tgz", @@ -19259,6 +19287,24 @@ "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" }, + "react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "requires": { + "object-assign": "^4.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.1.1", + "react-side-effect": "^2.1.0" + }, + "dependencies": { + "react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + } + } + }, "react-i18next": { "version": "11.15.6", "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.15.6.tgz", @@ -19314,6 +19360,12 @@ "react-router": "6.2.2" } }, + "react-side-effect": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", + "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==", + "requires": {} + }, "react-smooth": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.0.tgz", diff --git a/package.json b/package.json index 4f7a3a6..2429eb1 100644 --- a/package.json +++ b/package.json @@ -89,6 +89,7 @@ "pusher-js": "^7.0.6", "qs": "^6.10.3", "react-bootstrap": "^2.2.0", + "react-helmet": "^6.1.0", "react-i18next": "^11.15.6", "react-router-bootstrap": "^0.26.0", "react-router-dom": "^6.2.2", diff --git a/resources/js/components/App.js b/resources/js/components/App.js index d84474c..9656da2 100644 --- a/resources/js/components/App.js +++ b/resources/js/components/App.js @@ -1,5 +1,7 @@ import axios from 'axios'; import React, { useEffect, useState } from 'react'; +import { Helmet } from 'react-helmet'; +import { useTranslation } from 'react-i18next'; import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom'; import Footer from './common/Footer'; @@ -17,6 +19,8 @@ import UserContext from '../helpers/UserContext'; const App = () => { const [user, setUser] = useState(null); + const { t } = useTranslation(); + const checkAuth = async () => { try { const response = await axios.get('/api/user'); @@ -57,6 +61,10 @@ const App = () => { return + + {t('general.appName')} + +
} /> diff --git a/resources/js/components/pages/AlttpSeed.js b/resources/js/components/pages/AlttpSeed.js index 96589d4..43bc020 100644 --- a/resources/js/components/pages/AlttpSeed.js +++ b/resources/js/components/pages/AlttpSeed.js @@ -1,5 +1,6 @@ import axios from 'axios'; import React, { useCallback, useEffect, useState } from 'react'; +import { Helmet } from 'react-helmet'; import { useParams } from 'react-router-dom'; import NotFound from './NotFound'; @@ -24,7 +25,6 @@ const AosSeed = () => { setError(null); setLoading(false); setSeed(response.data); - window.document.title = response.data.hash; }) .catch(error => { setError(error); @@ -96,6 +96,11 @@ const AosSeed = () => { } return + + {seed ? + {seed.hash} + : null} + ; }; diff --git a/resources/js/components/pages/AosFront.js b/resources/js/components/pages/AosFront.js index d308f7d..9651110 100644 --- a/resources/js/components/pages/AosFront.js +++ b/resources/js/components/pages/AosFront.js @@ -1,9 +1,9 @@ import React from 'react'; import { Button, Col, Container, Row } from 'react-bootstrap'; -import { withTranslation } from 'react-i18next'; +import { Helmet } from 'react-helmet'; +import { useTranslation } from 'react-i18next'; import Icon from '../common/Icon'; -import i18n from '../../i18n'; const authEndpoint = 'https://discord.com/oauth2/authorize'; const clientId = '951113702839549982'; @@ -11,10 +11,13 @@ const botUrl = `${authEndpoint}?client_id=${clientId}&scope=bot%20applications.c const commandUrl = `${authEndpoint}?client_id=${clientId}&scope=applications.commands`; const AosFront = () => { - React.useEffect(() => { - window.document.title = 'Aos'; - }, []); + const { t } = useTranslation(); + return + + AoS + +

Castlevania: Aria of Sorrow

@@ -28,7 +31,7 @@ const AosFront = () => { > {' '} - {i18n.t('aos.randoDiscord')} + {t('aos.randoDiscord')} @@ -38,7 +41,7 @@ const AosFront = () => { target="_blank" variant="primary" > - {i18n.t('aos.randoWeb')} + {t('aos.randoWeb')} @@ -50,7 +53,7 @@ const AosFront = () => { > {' '} - {i18n.t('aos.tourneyDiscord')} + {t('aos.tourneyDiscord')} @@ -62,7 +65,7 @@ const AosFront = () => { > {' '} - {i18n.t('aos.inviteBot')} + {t('aos.inviteBot')} @@ -74,11 +77,11 @@ const AosFront = () => { > {' '} - {i18n.t('aos.inviteCommand')} + {t('aos.inviteCommand')}
; }; -export default withTranslation()(AosFront); +export default AosFront; diff --git a/resources/js/components/pages/AosGenerate.js b/resources/js/components/pages/AosGenerate.js index 0c27b06..b787848 100644 --- a/resources/js/components/pages/AosGenerate.js +++ b/resources/js/components/pages/AosGenerate.js @@ -1,17 +1,20 @@ import axios from 'axios'; import React, { useCallback, useEffect, useState } from 'react'; +import { Helmet } from 'react-helmet'; +import { useTranslation } from 'react-i18next'; import Generate from '../aos-generate/Generate'; import ErrorBoundary from '../common/ErrorBoundary'; import ErrorMessage from '../common/ErrorMessage'; import Loading from '../common/Loading'; -import i18n from '../../i18n'; const AosGenerate = () => { const [error, setError] = useState(null); const [loading, setLoading] = useState(true); const [presets, setPresets] = useState([]); + const { t } = useTranslation(); + const loadPresets = useCallback(ctrl => { axios .get('/api/aos-presets', { signal: ctrl.signal }) @@ -36,10 +39,6 @@ const AosGenerate = () => { }; }, []); - useEffect(() => { - window.document.title = i18n.t('aosGenerate.heading'); - }, [i18n.language]); - if (loading) { return ; } @@ -49,6 +48,9 @@ const AosGenerate = () => { } return + + {t('aosGenerate.heading')} + ; }; diff --git a/resources/js/components/pages/AosSeed.js b/resources/js/components/pages/AosSeed.js index 165a2be..ece8406 100644 --- a/resources/js/components/pages/AosSeed.js +++ b/resources/js/components/pages/AosSeed.js @@ -1,5 +1,6 @@ import axios from 'axios'; import React, { useCallback, useEffect, useState } from 'react'; +import { Helmet } from 'react-helmet'; import { useParams } from 'react-router-dom'; import NotFound from './NotFound'; @@ -24,7 +25,6 @@ const AosSeed = () => { setError(null); setLoading(false); setSeed(response.data); - window.document.title = response.data.hash; }) .catch(error => { setError(error); @@ -96,6 +96,11 @@ const AosSeed = () => { } return + + {seed ? + {seed.hash} + : null} + ; }; diff --git a/resources/js/components/pages/AosTracker.js b/resources/js/components/pages/AosTracker.js index 8eafd1f..5273d0b 100644 --- a/resources/js/components/pages/AosTracker.js +++ b/resources/js/components/pages/AosTracker.js @@ -1,14 +1,14 @@ import React from 'react'; import { Container } from 'react-bootstrap'; +import { Helmet } from 'react-helmet'; import Map from '../aos-tracker/Map'; const AosTracker = () => { - React.useEffect(() => { - window.document.title = 'Aos Tracker'; - }, []); - return + + AoS Tracker + ; }; diff --git a/resources/js/components/pages/Map.js b/resources/js/components/pages/Map.js index 841227c..cbd3581 100644 --- a/resources/js/components/pages/Map.js +++ b/resources/js/components/pages/Map.js @@ -1,5 +1,6 @@ import React from 'react'; import { Container } from 'react-bootstrap'; +import { Helmet } from 'react-helmet'; import { useTranslation } from 'react-i18next'; import Buttons from '../map/Buttons'; @@ -11,11 +12,11 @@ const Map = () => { const container = React.useRef(); const { t } = useTranslation(); - React.useEffect(() => { - window.document.title = t('map.heading'); - }, []); - return + + {t('map.heading')} + +

{t('map.heading')}

diff --git a/resources/js/components/pages/NotFound.js b/resources/js/components/pages/NotFound.js index 5e20596..19ccc72 100644 --- a/resources/js/components/pages/NotFound.js +++ b/resources/js/components/pages/NotFound.js @@ -1,8 +1,13 @@ import React from 'react'; +import { Helmet } from 'react-helmet'; -const NotFound = () =>
-

Not Found

-

Sorry

-
; +const NotFound = () => +
+ + Not Found + +

Not Found

+

Sorry

+
; export default NotFound; diff --git a/resources/js/components/pages/Technique.js b/resources/js/components/pages/Technique.js index 8c202ed..e380611 100644 --- a/resources/js/components/pages/Technique.js +++ b/resources/js/components/pages/Technique.js @@ -1,5 +1,6 @@ import axios from 'axios'; import React, { useEffect, useState } from 'react'; +import { Helmet } from 'react-helmet'; import { withTranslation } from 'react-i18next'; import { useParams } from 'react-router-dom'; @@ -39,12 +40,6 @@ const Technique = () => { }; }, [name]); - useEffect(() => { - if (technique) { - window.document.title = getTranslation(technique, 'title', i18n.language); - } - }, [technique, i18n.language]); - if (loading) { return ; } @@ -58,6 +53,10 @@ const Technique = () => { } return + + {getTranslation(technique, 'title', i18n.language)} + + ; }; diff --git a/resources/js/components/pages/Techniques.js b/resources/js/components/pages/Techniques.js index ddecf56..a89c3a2 100644 --- a/resources/js/components/pages/Techniques.js +++ b/resources/js/components/pages/Techniques.js @@ -1,6 +1,7 @@ import axios from 'axios'; import PropTypes from 'prop-types'; import React from 'react'; +import { Helmet } from 'react-helmet'; import { withTranslation } from 'react-i18next'; import NotFound from './NotFound'; @@ -36,7 +37,6 @@ const Techniques = ({ namespace, type }) => { if (!techniques.length) { setLoading(true); } - window.document.title = i18n.t(`${namespace}.heading`); axios .get(`/api/content`, { params: { @@ -63,7 +63,6 @@ const Techniques = ({ namespace, type }) => { }, [filter, namespace, type]); React.useEffect(() => { - window.document.title = i18n.t(`${namespace}.heading`); setTechniques(t => [...t].sort(compareTranslation('title', i18n.language))); }, [namespace, i18n.language]); @@ -80,6 +79,10 @@ const Techniques = ({ namespace, type }) => { } return + + {i18n.t(`${namespace}.heading`)} + + { setError(null); setLoading(false); setTournament(sortParticipants(response.data)); - window.document.title = response.data.title; }) .catch(error => { setError(error); @@ -128,6 +128,9 @@ const Tournament = () => { }; return + + {tournament.title} + ; }; diff --git a/resources/js/components/pages/User.js b/resources/js/components/pages/User.js index 3e868ba..b481112 100644 --- a/resources/js/components/pages/User.js +++ b/resources/js/components/pages/User.js @@ -1,5 +1,6 @@ import axios from 'axios'; import React, { useEffect, useState } from 'react'; +import { Helmet } from 'react-helmet'; import { useParams } from 'react-router-dom'; import ErrorBoundary from '../common/ErrorBoundary'; @@ -25,7 +26,6 @@ const User = () => { setError(null); setLoading(false); setUser(response.data); - window.document.title = response.data.nickname || response.data.username; }) .catch(error => { setError(error); @@ -64,6 +64,9 @@ const User = () => { } return + + {user.nickname || user.username} + ; }; diff --git a/resources/js/i18n/de.js b/resources/js/i18n/de.js index f130c08..fef88f4 100644 --- a/resources/js/i18n/de.js +++ b/resources/js/i18n/de.js @@ -292,6 +292,7 @@ export default { }, general: { anonymous: 'Anonym', + appDescription: 'Turniere und Tutorials für The Legend of Zelda: A Link to the Past Randomizer', appName: 'ALttP', }, icon: { @@ -379,6 +380,7 @@ export default { }, }, map: { + description: 'Karten von The Legend of Zelda: A Link to the Past', dwLong: 'Dark World', dwShort: 'DW', goToLocation: 'Zur Stelle springen', @@ -509,6 +511,7 @@ export default { heading: 'Regelsätze', }, techniques: { + description: 'Tutorials für The Legend of Zelda: A Link to the Past Randomizer', heading: 'Techniken', lastModified: 'Zuletzt geändert: {{ date, L }}', requirements: 'Erfordert: ', diff --git a/resources/js/i18n/en.js b/resources/js/i18n/en.js index a7ca19c..6820f30 100644 --- a/resources/js/i18n/en.js +++ b/resources/js/i18n/en.js @@ -292,6 +292,7 @@ export default { }, general: { anonymous: 'Anonym', + appDescription: 'Tournaments and tutorials for The Legend of Zelda: A Link to the Past Randomizer', appName: 'ALttP', }, icon: { @@ -379,6 +380,7 @@ export default { }, }, map: { + description: 'Maps of The Legend of Zelda: A Link to the Past', dwLong: 'Dark World', dwShort: 'DW', goToLocation: 'Go to location', @@ -509,6 +511,7 @@ export default { heading: 'Rulesets', }, techniques: { + description: 'Tutorials for The Legend of Zelda: A Link to the Past Randomizer', heading: 'Techniques', lastModified: 'Last modified: {{ date, L }}', requirements: 'Requires: ', -- 2.39.2