Post Create/Edit
This commit is contained in:
1 parent
74fd55084f
commit
08731f8559
29 files changed
+632
-161
No files matched your search
@@ -29,6 +29,8 @@ class Posts extends Api
|
|||||||
// Fetch all required inputs.
|
// Fetch all required inputs.
|
||||||
// Throw 400 error if a required one is missing.
|
// Throw 400 error if a required one is missing.
|
||||||
$content = Input::post("content");
|
$content = Input::post("content");
|
||||||
|
// This one is optional
|
||||||
|
$limit = constrain(0, 30, intval(Input::post("l", 10)));
|
||||||
if (empty($content)) throw ApiError::missingField(["content"]);
|
if (empty($content)) throw ApiError::missingField(["content"]);
|
||||||
|
|
||||||
// Get logged in user
|
// Get logged in user
|
||||||
@@ -36,7 +38,7 @@ class Posts extends Api
|
|||||||
|
|
||||||
// Try to create a new post for logged in user.
|
// Try to create a new post for logged in user.
|
||||||
try {
|
try {
|
||||||
Response::json(Post::create($self, $content));
|
Response::json(Post::create($self, $content, $limit));
|
||||||
} catch (Exception $err) {
|
} catch (Exception $err) {
|
||||||
switch ($err->getMessage()) {
|
switch ($err->getMessage()) {
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -690,6 +690,13 @@ components:
|
|||||||
type: number
|
type: number
|
||||||
timezone:
|
timezone:
|
||||||
type: string
|
type: string
|
||||||
|
PostCreateResponse:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
pages:
|
||||||
|
type: number
|
||||||
|
post:
|
||||||
|
$ref: "#/components/schemas/PostResponse"
|
||||||
PostListResponse:
|
PostListResponse:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
@@ -711,6 +718,8 @@ components:
|
|||||||
properties:
|
properties:
|
||||||
content:
|
content:
|
||||||
type: string
|
type: string
|
||||||
|
limit:
|
||||||
|
type: number
|
||||||
securitySchemes:
|
securitySchemes:
|
||||||
BasicAuth:
|
BasicAuth:
|
||||||
type: apiKey
|
type: apiKey
|
||||||
|
|||||||
@@ -430,11 +430,11 @@ data-styled.g137[id="sc-kvXgyf"]{content:"fBvPoH,"}/*!sc*/
|
|||||||
" class="sc-euGpHm sc-exayXG fwfkcU kqJXdD sc-dHrNzZ dRdjww"><p>Success.</p>
|
" class="sc-euGpHm sc-exayXG fwfkcU kqJXdD sc-dHrNzZ dRdjww"><p>Success.</p>
|
||||||
</div></button></div></div></div><div class="sc-iKTcqh sc-gnpbhQ fTxZsC drGLlX"><div class="sc-dKsqdn dCbPd"><button class="sc-iAlELC gsBSOU"><span type="get" class="sc-oeqTF ffmPnn http-verb get">get</span><span class="sc-eowDPD jcAXWA">/posts</span><svg class="sc-cBYhjr iMxoRf" style="margin-right:-25px" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button><div aria-hidden="true" class="sc-ezTrPE bFiOkX"><div class="sc-drnuxz hdRKqQ"><div html="" class="sc-euGpHm sc-exayXG fwfkcU jYGAQp"></div><div tabindex="0" role="button"><div class="sc-hDcvty jpmGrk"><span>https://khofmann.userpage.fu-berlin.de/phpCourse/exam/api</span>/posts</div></div></div></div></div><div><h3 class="sc-kkmypM jKNCPF"> <!-- -->Response samples<!-- --> </h3><div class="sc-bSlUec jxQggo" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="tab-success react-tabs__tab--selected" role="tab" id="tab:R174pa:0" aria-selected="true" aria-disabled="false" aria-controls="panel:R174pa:0" tabindex="0" data-rttab="true">200</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel:R174pa:0" aria-labelledby="tab:R174pa:0"><div><div class="sc-WChnI iLXIA-d"><span class="sc-foMnoT dmNpjh">Content type</span><div class="sc-ZubPq KmnOC">application/json</div></div><div class="sc-AmOMz gDrQpr"><div class="sc-WChnI iLXIA-d"><span class="sc-foMnoT dmNpjh">Example</span><div class="sc-dorvvM sc-flUsNl dQFPeA hzaARH"><svg class="sc-kTYLvb FdjRy" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg><select class="dropdown-select"><option value="Not authenticated" selected="">Not authenticated</option><option value="Authenticated">Authenticated</option></select><label>Not authenticated</label></div></div><div><div class="sc-eTdEpr dgzSkD"><div class="sc-pFPEP bMXXJy"><button><div class="sc-eHujzY ecCAmX">Copy</div></button><button> Expand all </button><button> Collapse all </button></div><div class="sc-euGpHm fwfkcU sc-fTgapq bDqsIm"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"pages"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"data"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"id"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"user"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"username"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"image"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"content"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"postedAt"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"date"</span>: <span class="token string">"2019-08-24T14:15:22Z"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"timezone_type"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"timezone"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token puLine truncated
|
</div></button></div></div></div><div class="sc-iKTcqh sc-gnpbhQ fTxZsC drGLlX"><div class="sc-dKsqdn dCbPd"><button class="sc-iAlELC gsBSOU"><span type="get" class="sc-oeqTF ffmPnn http-verb get">get</span><span class="sc-eowDPD jcAXWA">/posts</span><svg class="sc-cBYhjr iMxoRf" style="margin-right:-25px" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button><div aria-hidden="true" class="sc-ezTrPE bFiOkX"><div class="sc-drnuxz hdRKqQ"><div html="" class="sc-euGpHm sc-exayXG fwfkcU jYGAQp"></div><div tabindex="0" role="button"><div class="sc-hDcvty jpmGrk"><span>https://khofmann.userpage.fu-berlin.de/phpCourse/exam/api</span>/posts</div></div></div></div></div><div><h3 class="sc-kkmypM jKNCPF"> <!-- -->Response samples<!-- --> </h3><div class="sc-bSlUec jxQggo" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="tab-success react-tabs__tab--selected" role="tab" id="tab:R174pa:0" aria-selected="true" aria-disabled="false" aria-controls="panel:R174pa:0" tabindex="0" data-rttab="true">200</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel:R174pa:0" aria-labelledby="tab:R174pa:0"><div><div class="sc-WChnI iLXIA-d"><span class="sc-foMnoT dmNpjh">Content type</span><div class="sc-ZubPq KmnOC">application/json</div></div><div class="sc-AmOMz gDrQpr"><div class="sc-WChnI iLXIA-d"><span class="sc-foMnoT dmNpjh">Example</span><div class="sc-dorvvM sc-flUsNl dQFPeA hzaARH"><svg class="sc-kTYLvb FdjRy" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg><select class="dropdown-select"><option value="Not authenticated" selected="">Not authenticated</option><option value="Authenticated">Authenticated</option></select><label>Not authenticated</label></div></div><div><div class="sc-eTdEpr dgzSkD"><div class="sc-pFPEP bMXXJy"><button><div class="sc-eHujzY ecCAmX">Copy</div></button><button> Expand all </button><button> Collapse all </button></div><div class="sc-euGpHm fwfkcU sc-fTgapq bDqsIm"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"pages"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"data"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">[</span><span class="ellipsis"></span><ul class="array collapsible"><li><div class="hoverable collapsed"><button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"id"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"user"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"username"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"image"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"content"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"postedAt"</span>: <button class="collapser" aria-label="expand"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"date"</span>: <span class="token string">"2019-08-24T14:15:22Z"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"timezone_type"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"timezone"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span></div></li></ul><span class="token puLine truncated
|
||||||
" class="sc-euGpHm sc-exayXG fwfkcU kqJXdD"><p>Create a new post.</p>
|
" class="sc-euGpHm sc-exayXG fwfkcU kqJXdD"><p>Create a new post.</p>
|
||||||
</div></div><div class="sc-hWiVxH cCfxdS"><div class="sc-jHofgq febKCY"><h5 class="sc-dkjaqt sc-jRHPII gwrByh eGMvsx">Authorizations:</h5><svg class="sc-cBYhjr dJanPw" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></div><div class="sc-iRFtIJ juVMxG"><span class="sc-iHlJgr lkBZak"><span class="sc-blcnQh fyveIh"><i>BasicAuth</i></span></span></div></div><h5 class="sc-dkjaqt gwrByh">Request Body schema: <span class="sc-dwYcXH fafqZb">application/json</span><div class="sc-xuUkR sc-hrDJJk sc-kGqRax bJcEcT gLEAmN HCLfY">required</div></h5><div html="" class="sc-euGpHm sc-exayXG fwfkcU kqJXdD"></div><table class="sc-dENhDJ ceVHDP"><tbody><tr class="last "><td kind="field" title="content" class="sc-tOkKi sc-epPVmt gbdrVc bUksBx"><span class="sc-hfvVTD hTjFRU"></span><span class="property-name">content</span><div class="sc-xuUkR sc-hrDJJk bJcEcT gLEAmN">required</div></td><td class="sc-fpSrms exGrJC"><div><div><span class="sc-xuUkR sc-cvzDha bJcEcT kDPMlG"></span><span class="sc-xuUkR sc-gKROGD bJcEcT etUsjc">string</span></div> <div><div html="" class="sc-euGpHm sc-exayXG fwfkcU jYGAQp"></div></div></div></td></tr></tbody></table><div><h3 class="sc-eiLgtK dbBFCU">Responses</h3><div><button class="sc-giOWAb gcYfHW"><svg class="sc-cBYhjr fqtTpb" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg><strong class="sc-catHVh gXPvFO">200<!-- --> </strong><div html="<p>Success.</p>
|
</div></div><div class="sc-hWiVxH cCfxdS"><div class="sc-jHofgq febKCY"><h5 class="sc-dkjaqt sc-jRHPII gwrByh eGMvsx">Authorizations:</h5><svg class="sc-cBYhjr dJanPw" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></div><div class="sc-iRFtIJ juVMxG"><span class="sc-iHlJgr lkBZak"><span class="sc-blcnQh fyveIh"><i>BasicAuth</i></span></span></div></div><h5 class="sc-dkjaqt gwrByh">Request Body schema: <span class="sc-dwYcXH fafqZb">application/json</span><div class="sc-xuUkR sc-hrDJJk sc-kGqRax bJcEcT gLEAmN HCLfY">required</div></h5><div html="" class="sc-euGpHm sc-exayXG fwfkcU kqJXdD"></div><table class="sc-dENhDJ ceVHDP"><tbody><tr class=""><td kind="field" title="content" class="sc-tOkKi sc-epPVmt gbdrVc bUksBx"><span class="sc-hfvVTD hTjFRU"></span><span class="property-name">content</span><div class="sc-xuUkR sc-hrDJJk bJcEcT gLEAmN">required</div></td><td class="sc-fpSrms exGrJC"><div><div><span class="sc-xuUkR sc-cvzDha bJcEcT kDPMlG"></span><span class="sc-xuUkR sc-gKROGD bJcEcT etUsjc">string</span></div> <div><div html="" class="sc-euGpHm sc-exayXG fwfkcU jYGAQp"></div></div></div></td></tr><tr class="last "><td kind="field" title="limit" class="sc-tOkKi sc-epPVmt gbdrVc bUksBx"><span class="sc-hfvVTD hTjFRU"></span><span class="property-name">limit</span></td><td class="sc-fpSrms exGrJC"><div><div><span class="sc-xuUkR sc-cvzDha bJcEcT kDPMlG"></span><span class="sc-xuUkR sc-gKROGD bJcEcT etUsjc">number</span></div> <div><div html="" class="sc-euGpHm sc-exayXG fwfkcU jYGAQp"></div></div></div></td></tr></tbody></table><div><h3 class="sc-eiLgtK dbBFCU">Responses</h3><div><button class="sc-giOWAb gcYfHW"><svg class="sc-cBYhjr fqtTpb" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg><strong class="sc-catHVh gXPvFO">200<!-- --> </strong><div html="<p>Success.</p>
|
||||||
" class="sc-euGpHm sc-exayXG fwfkcU kqJXdD sc-dHrNzZ dRdjww"><p>Success.</p>
|
" class="sc-euGpHm sc-exayXG fwfkcU kqJXdD sc-dHrNzZ dRdjww"><p>Success.</p>
|
||||||
</div></button></div><div><button class="sc-giOWAb gbPhWg"><svg class="sc-cBYhjr ezFOZv" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg><strong class="sc-catHVh gXPvFO">400<!-- --> </strong><div html="<p>Missing fields.</p>
|
</div></button></div><div><button class="sc-giOWAb gbPhWg"><svg class="sc-cBYhjr ezFOZv" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg><strong class="sc-catHVh gXPvFO">400<!-- --> </strong><div html="<p>Missing fields.</p>
|
||||||
" class="sc-euGpHm sc-exayXG fwfkcU kqJXdD sc-dHrNzZ dRdjww"><p>Missing fields.</p>
|
" class="sc-euGpHm sc-exayXG fwfkcU kqJXdD sc-dHrNzZ dRdjww"><p>Missing fields.</p>
|
||||||
</div></button></div></div></div><div class="sc-iKTcqh sc-gnpbhQ fTxZsC drGLlX"><div class="sc-dKsqdn dCbPd"><button class="sc-iAlELC gsBSOU"><span type="post" class="sc-oeqTF kpMtuJ http-verb post">post</span><span class="sc-eowDPD jcAXWA">/posts</span><svg class="sc-cBYhjr iMxoRf" style="margin-right:-25px" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button><div aria-hidden="true" class="sc-ezTrPE bFiOkX"><div class="sc-drnuxz hdRKqQ"><div html="" class="sc-euGpHm sc-exayXG fwfkcU jYGAQp"></div><div tabindex="0" role="button"><div class="sc-hDcvty jpmGrk"><span>https://khofmann.userpage.fu-berlin.de/phpCourse/exam/api</span>/posts</div></div></div></div></div><div><h3 class="sc-kkmypM jKNCPF"> <!-- -->Request samples<!-- --> </h3><div class="sc-bSlUec jxQggo" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="react-tabs__tab react-tabs__tab--selected" role="tab" id="tab:R1559a:0" aria-selected="true" aria-disabled="false" aria-controls="panel:R1559a:0" tabindex="0" data-rttab="true">Payload</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel:R1559a:0" aria-labelledby="tab:R1559a:0"><div><div class="sc-WChnI iLXIA-d"><span class="sc-foMnoT dmNpjh">Content type</span><div class="sc-ZubPq KmnOC">application/json</div></div><div class="sc-AmOMz gDrQpr"><div class="sc-eTdEpr dgzSkD"><div class="sc-pFPEP bMXXJy"><button><div class="sc-eHujzY ecCAmX">Copy</div></button></div><div class="sc-euGpHm fwfkcU sc-fTgapq bDqsIm"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"content"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span></code></div></div></div></div></div></div></div></div><div><h3 class="sc-kkmypM jKNCPF"> <!-- -->Response samples<!-- --> </h3><div class="sc-bSlUec jxQggo" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="tab-success react-tabs__tab--selected" role="tab" id="tab:R1759a:0" aria-selected="true" aria-disabled="false" aria-controls="panel:R1759a:0" tabindex="0" data-rttab="true">200</li><li class="tab-error" role="tab" id="tab:R1759a:1" aria-selected="false" aria-disabled="false" aria-controls="panel:R1759a:1" data-rttab="true">400</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel:R1759a:0" aria-labelledby="tab:R1759a:0"><div><div class="sc-WChnI iLXIA-d"><span class="sc-foMnoT dmNpjh">Content type</span><div class="sc-ZubPq KmnOC">application/json</div></div><div class="sc-AmOMz gDrQpr"><div class="sc-eTdEpr dgzSkD"><div class="sc-pFPEP bMXXJy"><button><div class="sc-eHujzY ecCAmX">Copy</div></button><button> Expand all </button><button> Collapse all </button></div><div class="sc-euGpHm fwfkcU sc-fTgapq bDqsIm"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"id"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"user"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"id"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"username"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"status"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"email"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"image"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"isAdmin"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"memberSince"</span>: <button class="collapser" aria-label="expand"></button><span class="tokeLine truncated
|
</div></button></div></div></div><div class="sc-iKTcqh sc-gnpbhQ fTxZsC drGLlX"><div class="sc-dKsqdn dCbPd"><button class="sc-iAlELC gsBSOU"><span type="post" class="sc-oeqTF kpMtuJ http-verb post">post</span><span class="sc-eowDPD jcAXWA">/posts</span><svg class="sc-cBYhjr iMxoRf" style="margin-right:-25px" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button><div aria-hidden="true" class="sc-ezTrPE bFiOkX"><div class="sc-drnuxz hdRKqQ"><div html="" class="sc-euGpHm sc-exayXG fwfkcU jYGAQp"></div><div tabindex="0" role="button"><div class="sc-hDcvty jpmGrk"><span>https://khofmann.userpage.fu-berlin.de/phpCourse/exam/api</span>/posts</div></div></div></div></div><div><h3 class="sc-kkmypM jKNCPF"> <!-- -->Request samples<!-- --> </h3><div class="sc-bSlUec jxQggo" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="react-tabs__tab react-tabs__tab--selected" role="tab" id="tab:R1559a:0" aria-selected="true" aria-disabled="false" aria-controls="panel:R1559a:0" tabindex="0" data-rttab="true">Payload</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel:R1559a:0" aria-labelledby="tab:R1559a:0"><div><div class="sc-WChnI iLXIA-d"><span class="sc-foMnoT dmNpjh">Content type</span><div class="sc-ZubPq KmnOC">application/json</div></div><div class="sc-AmOMz gDrQpr"><div class="sc-eTdEpr dgzSkD"><div class="sc-pFPEP bMXXJy"><button><div class="sc-eHujzY ecCAmX">Copy</div></button></div><div class="sc-euGpHm fwfkcU sc-fTgapq bDqsIm"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"content"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"limit"</span>: <span class="token number">0</span></div></li></ul><span class="token punctuation">}</span></code></div></div></div></div></div></div></div></div><div><h3 class="sc-kkmypM jKNCPF"> <!-- -->Response samples<!-- --> </h3><div class="sc-bSlUec jxQggo" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="tab-success react-tabs__tab--selected" role="tab" id="tab:R1759a:0" aria-selected="true" aria-disabled="false" aria-controls="panel:R1759a:0" tabindex="0" data-rttab="true">200</li><li class="tab-error" role="tab" id="tab:R1759a:1" aria-selected="false" aria-disabled="false" aria-controls="panel:R1759a:1" data-rttab="true">400</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel:R1759a:0" aria-labelledby="tab:R1759a:0"><div><div class="sc-WChnI iLXIA-d"><span class="sc-foMnoT dmNpjh">Content type</span><div class="sc-ZubPq KmnOC">application/json</div></div><div class="sc-AmOMz gDrQpr"><div class="sc-eTdEpr dgzSkD"><div class="sc-pFPEP bMXXJy"><button><div class="sc-eHujzY ecCAmX">Copy</div></button><button> Expand all </button><button> Collapse all </button></div><div class="sc-euGpHm fwfkcU sc-fTgapq bDqsIm"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"id"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"user"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"id"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"username"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"status"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"email"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"image"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"isAdmin"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><Line truncated
|
||||||
" class="sc-euGpHm sc-exayXG fwfkcU kqJXdD"><p>Update post with ID. <br> Requires logged in user to have admin permissions for posts not made by them.</p>
|
" class="sc-euGpHm sc-exayXG fwfkcU kqJXdD"><p>Update post with ID. <br> Requires logged in user to have admin permissions for posts not made by them.</p>
|
||||||
</div></div><div class="sc-hWiVxH cCfxdS"><div class="sc-jHofgq febKCY"><h5 class="sc-dkjaqt sc-jRHPII gwrByh eGMvsx">Authorizations:</h5><svg class="sc-cBYhjr dJanPw" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></div><div class="sc-iRFtIJ juVMxG"><span class="sc-iHlJgr lkBZak"><span class="sc-blcnQh fyveIh"><i>BasicAuth</i></span></span><span class="sc-iHlJgr lkBZak"><span class="sc-blcnQh fyveIh"><i>BasicAuth</i></span></span></div></div><div><h5 class="sc-dkjaqt gwrByh">path<!-- --> Parameters</h5><table class="sc-dENhDJ ceVHDP"><tbody><tr class="last "><td kind="field" title="id" class="sc-tOkKi sc-epPVmt gbdrVc bUksBx"><span class="sc-hfvVTD hTjFRU"></span><span class="property-name">id</span><div class="sc-xuUkR sc-hrDJJk bJcEcT gLEAmN">required</div></td><td class="sc-fpSrms exGrJC"><div><div><span class="sc-xuUkR sc-cvzDha bJcEcT kDPMlG"></span><span class="sc-xuUkR sc-gKROGD bJcEcT etUsjc">integer</span><span class="sc-xuUkR sc-gKROGD bJcEcT etUsjc"> <!-- --><<!-- -->int14<!-- -->><!-- --> </span></div> <div><div html="<p>Post ID</p>
|
</div></div><div class="sc-hWiVxH cCfxdS"><div class="sc-jHofgq febKCY"><h5 class="sc-dkjaqt sc-jRHPII gwrByh eGMvsx">Authorizations:</h5><svg class="sc-cBYhjr dJanPw" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></div><div class="sc-iRFtIJ juVMxG"><span class="sc-iHlJgr lkBZak"><span class="sc-blcnQh fyveIh"><i>BasicAuth</i></span></span><span class="sc-iHlJgr lkBZak"><span class="sc-blcnQh fyveIh"><i>BasicAuth</i></span></span></div></div><div><h5 class="sc-dkjaqt gwrByh">path<!-- --> Parameters</h5><table class="sc-dENhDJ ceVHDP"><tbody><tr class="last "><td kind="field" title="id" class="sc-tOkKi sc-epPVmt gbdrVc bUksBx"><span class="sc-hfvVTD hTjFRU"></span><span class="property-name">id</span><div class="sc-xuUkR sc-hrDJJk bJcEcT gLEAmN">required</div></td><td class="sc-fpSrms exGrJC"><div><div><span class="sc-xuUkR sc-cvzDha bJcEcT kDPMlG"></span><span class="sc-xuUkR sc-gKROGD bJcEcT etUsjc">integer</span><span class="sc-xuUkR sc-gKROGD bJcEcT etUsjc"> <!-- --><<!-- -->int14<!-- -->><!-- --> </span></div> <div><div html="<p>Post ID</p>
|
||||||
" class="sc-euGpHm sc-exayXG fwfkcU jYGAQp"><p>Post ID</p>
|
" class="sc-euGpHm sc-exayXG fwfkcU jYGAQp"><p>Post ID</p>
|
||||||
@@ -506,7 +506,7 @@ data-styled.g137[id="sc-kvXgyf"]{content:"fBvPoH,"}/*!sc*/
|
|||||||
" class="sc-euGpHm sc-exayXG fwfkcU kqJXdD sc-dHrNzZ dRdjww"><p>User not found.</p>
|
" class="sc-euGpHm sc-exayXG fwfkcU kqJXdD sc-dHrNzZ dRdjww"><p>User not found.</p>
|
||||||
</div></button></div></div></div><div class="sc-iKTcqh sc-gnpbhQ fTxZsC drGLlX"><div class="sc-dKsqdn dCbPd"><button class="sc-iAlELC gsBSOU"><span type="delete" class="sc-oeqTF ByFMv http-verb delete">delete</span><span class="sc-eowDPD jcAXWA">/users/{id}</span><svg class="sc-cBYhjr iMxoRf" style="margin-right:-25px" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button><div aria-hidden="true" class="sc-ezTrPE bFiOkX"><div class="sc-drnuxz hdRKqQ"><div html="" class="sc-euGpHm sc-exayXG fwfkcU jYGAQp"></div><div tabindex="0" role="button"><div class="sc-hDcvty jpmGrk"><span>https://khofmann.userpage.fu-berlin.de/phpCourse/exam/api</span>/users/{id}</div></div></div></div></div><div><h3 class="sc-kkmypM jKNCPF"> <!-- -->Response samples<!-- --> </h3><div class="sc-bSlUec jxQggo" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="tab-success react-tabs__tab--selected" role="tab" id="tab:R176aa:0" aria-selected="true" aria-disabled="false" aria-controls="panel:R176aa:0" tabindex="0" data-rttab="true">200</li><li class="tab-error" role="tab" id="tab:R176aa:1" aria-selected="false" aria-disabled="false" aria-controls="panel:R176aa:1" data-rttab="true">404</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel:R176aa:0" aria-labelledby="tab:R176aa:0"><div><div class="sc-WChnI iLXIA-d"><span class="sc-foMnoT dmNpjh">Content type</span><div class="sc-ZubPq KmnOC">application/json</div></div><div class="sc-AmOMz gDrQpr"><div class="sc-eTdEpr dgzSkD"><div class="sc-pFPEP bMXXJy"><button><div class="sc-eHujzY ecCAmX">Copy</div></button><button> Expand all </button><button> Collapse all </button></div><div class="sc-euGpHm fwfkcU sc-fTgapq bDqsIm"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"id"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"username"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"status"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"email"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"image"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"isAdmin"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"memberSince"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"date"</span>: <span class="token string">"2019-08-24T14:15:22Z"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"timezone_type"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"timezone"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"postCount"</span>: <span class="token number">0</span></div></li></ul><span class="token punctuation">}</span></code></div></div></div></div></div></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel:R176aa:1" aria-labelledby="tab:R176aa:1"></div></div></div></div></div></div></div><div class="sc-epzHnm bWkBKa"></div></div></div>
|
</div></button></div></div></div><div class="sc-iKTcqh sc-gnpbhQ fTxZsC drGLlX"><div class="sc-dKsqdn dCbPd"><button class="sc-iAlELC gsBSOU"><span type="delete" class="sc-oeqTF ByFMv http-verb delete">delete</span><span class="sc-eowDPD jcAXWA">/users/{id}</span><svg class="sc-cBYhjr iMxoRf" style="margin-right:-25px" version="1.1" viewBox="0 0 24 24" x="0" xmlns="http://www.w3.org/2000/svg" y="0" aria-hidden="true"><polygon points="17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 "></polygon></svg></button><div aria-hidden="true" class="sc-ezTrPE bFiOkX"><div class="sc-drnuxz hdRKqQ"><div html="" class="sc-euGpHm sc-exayXG fwfkcU jYGAQp"></div><div tabindex="0" role="button"><div class="sc-hDcvty jpmGrk"><span>https://khofmann.userpage.fu-berlin.de/phpCourse/exam/api</span>/users/{id}</div></div></div></div></div><div><h3 class="sc-kkmypM jKNCPF"> <!-- -->Response samples<!-- --> </h3><div class="sc-bSlUec jxQggo" data-rttabs="true"><ul class="react-tabs__tab-list" role="tablist"><li class="tab-success react-tabs__tab--selected" role="tab" id="tab:R176aa:0" aria-selected="true" aria-disabled="false" aria-controls="panel:R176aa:0" tabindex="0" data-rttab="true">200</li><li class="tab-error" role="tab" id="tab:R176aa:1" aria-selected="false" aria-disabled="false" aria-controls="panel:R176aa:1" data-rttab="true">404</li></ul><div class="react-tabs__tab-panel react-tabs__tab-panel--selected" role="tabpanel" id="panel:R176aa:0" aria-labelledby="tab:R176aa:0"><div><div class="sc-WChnI iLXIA-d"><span class="sc-foMnoT dmNpjh">Content type</span><div class="sc-ZubPq KmnOC">application/json</div></div><div class="sc-AmOMz gDrQpr"><div class="sc-eTdEpr dgzSkD"><div class="sc-pFPEP bMXXJy"><button><div class="sc-eHujzY ecCAmX">Copy</div></button><button> Expand all </button><button> Collapse all </button></div><div class="sc-euGpHm fwfkcU sc-fTgapq bDqsIm"><div class="redoc-json"><code><button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable "><span class="property token string">"id"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"username"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"status"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"email"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"image"</span>: <span class="token string">"string"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"isAdmin"</span>: <span class="token boolean">true</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"memberSince"</span>: <button class="collapser" aria-label="collapse"></button><span class="token punctuation">{</span><span class="ellipsis"></span><ul class="obj collapsible"><li><div class="hoverable collapsed"><span class="property token string">"date"</span>: <span class="token string">"2019-08-24T14:15:22Z"</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"timezone_type"</span>: <span class="token number">0</span><span class="token punctuation">,</span></div></li><li><div class="hoverable collapsed"><span class="property token string">"timezone"</span>: <span class="token string">"string"</span></div></li></ul><span class="token punctuation">}</span><span class="token punctuation">,</span></div></li><li><div class="hoverable "><span class="property token string">"postCount"</span>: <span class="token number">0</span></div></li></ul><span class="token punctuation">}</span></code></div></div></div></div></div></div><div class="react-tabs__tab-panel" role="tabpanel" id="panel:R176aa:1" aria-labelledby="tab:R176aa:1"></div></div></div></div></div></div></div><div class="sc-epzHnm bWkBKa"></div></div></div>
|
||||||
<script>
|
<script>
|
||||||
const __redoc_state = {"menu":{"activeItemIdx":-1},"spec":{"data":{"openapi":"3.0.0","info":{"title":"PHP Course Exam","version":"1.0.0","contact":{"name":"Kilian Kurt Hofmann","email":"khofmann@zedat.fu-berlin.de"},"description":"PHP Course (ABV FU Berlin) 2024 Exam"},"paths":{"/login":{"post":{"summary":"Login","description":"Log in user.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"400":{"description":"Missing fields.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MissingFieldResponse"},"examples":{"Missing fields":{"value":{"code":"MissingField","fields":["email","password"]}}}}}},"401":{"description":"Invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"},"examples":{"Invalid username or password":{"value":{"code":"Unauthorized","message":"Invalid username or password"}}}}}},"404":{"description":"User not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"},"examples":{"User not found":{"value":{"code":"NotFound","entity":"user"}}}}}},"500":{"description":"Failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FailedResponse"},"examples":{"Failed":{"value":{"code":"Failed","message":"Login failed"}}}}}}},"tags":["Login/Logout"]}},"/logout":{"post":{"summary":"Logout","description":"Log out user.","security":[{"BasicAuth":[]}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BooleanResponse"},"examples":{"Success":{"value":true}}}}}},"tags":["Login/Logout"]}},"/posts":{"get":{"summary":"List posts","description":"List all posts, return full user data if authenticated.","security":[{},{"BasicAuth":[]}],"parameters":[{"in":"query","name":"p","schema":{"type":"integer","minimum":0,"default":0},"description":"Current page."},{"in":"query","name":"l","schema":{"type":"integer","minimum":0,"maximum":30,"default":10},"description":"The number of items to return."}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostListResponse"},"examples":{"Not authenticated":{"value":{"pages":0,"data":[{"id":0,"user":{"username":"string","image":"string"},"content":"string","postedAt":{"date":"2019-08-24T14:15:22Z","timezone_type":0,"timezone":"string"}}]}},"Authenticated":{"value":{"pages":1,"data":[{"id":1,"user":{"id":0,"username":"string","status":0,"email":"string","image":"string","isAdmin":true,"memberSince":{"date":"2019-08-24T14:15:22Z","timezone_type":0,"timezone":"string"},"postCount":0},"content":"string","postedAt":{"date":"2019-08-24T14:15:22Z","timezone_type":0,"timezone":"string"}}]}}}}}}},"tags":["Post"]},"post":{"summary":"New post","description":"Create a new post.","security":[{"BasicAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostCreateRequest"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostResponse"}}}},"400":{"description":"Missing fields.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MissingFieldResponse"},"examples":{"Missing fields":{"value":{"code":"MissingField","fields":["content"]}}}}}}},"tags":["Post"]}},"/posts/{id}":{"patch":{"summary":"Update post","description":"Update post with ID. <br> Requires logged in user to have admin permissions for posts not made by them.","security":[{"BasicAuth":[]},{"BasicAuth":["isAdmin"]}],"parameters":[{"name":"id","in":"path","description":"Post ID","required":true,"schema":{"type":"integer","format":"int14"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostUpdateRequest"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostResponse"}}}},"401":{"description":"Not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"},"examples":{"Not allowed":{"value":{"code":"Unauthorized","message":"Not allowed"}}}}}},"404":{"description":"Post not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"},"examples":{"Post not found":{"value":{"code":"NotFound","entity":"post"}}}}}},"500":{"description":"Update failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FailedUpdateResponse"},"examples":{"Failed":{"value":{"code":"FailedUpdate","fields":["content"],"reasons":["string"]}}}}}}},"tags":["Post"]},"delete":{"summary":"Delete post","description":"Delete post with ID.","security":[{"BasicAuth":["isAdmin"]}],"parameters":[{"name":"id","in":"path","description":"Post ID","required":true,"schLine truncated
|
const __redoc_state = {"menu":{"activeItemIdx":-1},"spec":{"data":{"openapi":"3.0.0","info":{"title":"PHP Course Exam","version":"1.0.0","contact":{"name":"Kilian Kurt Hofmann","email":"khofmann@zedat.fu-berlin.de"},"description":"PHP Course (ABV FU Berlin) 2024 Exam"},"paths":{"/login":{"post":{"summary":"Login","description":"Log in user.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"400":{"description":"Missing fields.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MissingFieldResponse"},"examples":{"Missing fields":{"value":{"code":"MissingField","fields":["email","password"]}}}}}},"401":{"description":"Invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"},"examples":{"Invalid username or password":{"value":{"code":"Unauthorized","message":"Invalid username or password"}}}}}},"404":{"description":"User not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"},"examples":{"User not found":{"value":{"code":"NotFound","entity":"user"}}}}}},"500":{"description":"Failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FailedResponse"},"examples":{"Failed":{"value":{"code":"Failed","message":"Login failed"}}}}}}},"tags":["Login/Logout"]}},"/logout":{"post":{"summary":"Logout","description":"Log out user.","security":[{"BasicAuth":[]}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BooleanResponse"},"examples":{"Success":{"value":true}}}}}},"tags":["Login/Logout"]}},"/posts":{"get":{"summary":"List posts","description":"List all posts, return full user data if authenticated.","security":[{},{"BasicAuth":[]}],"parameters":[{"in":"query","name":"p","schema":{"type":"integer","minimum":0,"default":0},"description":"Current page."},{"in":"query","name":"l","schema":{"type":"integer","minimum":0,"maximum":30,"default":10},"description":"The number of items to return."}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostListResponse"},"examples":{"Not authenticated":{"value":{"pages":0,"data":[{"id":0,"user":{"username":"string","image":"string"},"content":"string","postedAt":{"date":"2019-08-24T14:15:22Z","timezone_type":0,"timezone":"string"}}]}},"Authenticated":{"value":{"pages":1,"data":[{"id":1,"user":{"id":0,"username":"string","status":0,"email":"string","image":"string","isAdmin":true,"memberSince":{"date":"2019-08-24T14:15:22Z","timezone_type":0,"timezone":"string"},"postCount":0},"content":"string","postedAt":{"date":"2019-08-24T14:15:22Z","timezone_type":0,"timezone":"string"}}]}}}}}}},"tags":["Post"]},"post":{"summary":"New post","description":"Create a new post.","security":[{"BasicAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostCreateRequest"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostResponse"}}}},"400":{"description":"Missing fields.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MissingFieldResponse"},"examples":{"Missing fields":{"value":{"code":"MissingField","fields":["content"]}}}}}}},"tags":["Post"]}},"/posts/{id}":{"patch":{"summary":"Update post","description":"Update post with ID. <br> Requires logged in user to have admin permissions for posts not made by them.","security":[{"BasicAuth":[]},{"BasicAuth":["isAdmin"]}],"parameters":[{"name":"id","in":"path","description":"Post ID","required":true,"schema":{"type":"integer","format":"int14"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostUpdateRequest"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostResponse"}}}},"401":{"description":"Not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedResponse"},"examples":{"Not allowed":{"value":{"code":"Unauthorized","message":"Not allowed"}}}}}},"404":{"description":"Post not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundResponse"},"examples":{"Post not found":{"value":{"code":"NotFound","entity":"post"}}}}}},"500":{"description":"Update failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FailedUpdateResponse"},"examples":{"Failed":{"value":{"code":"FailedUpdate","fields":["content"],"reasons":["string"]}}}}}}},"tags":["Post"]},"delete":{"summary":"Delete post","description":"Delete post with ID.","security":[{"BasicAuth":["isAdmin"]}],"parameters":[{"name":"id","in":"path","description":"Post ID","required":true,"schLine truncated
|
||||||
|
|
||||||
var container = document.getElementById('redoc');
|
var container = document.getElementById('redoc');
|
||||||
Redoc.hydrate(__redoc_state, container);
|
Redoc.hydrate(__redoc_state, container);
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ class Post implements JsonSerializable
|
|||||||
return new Post($data["id"], $user, null, null, $data["beitrag"], $data["zeitstempel"]);
|
return new Post($data["id"], $user, null, null, $data["beitrag"], $data["zeitstempel"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function create(User $user, string $content): Post
|
public static function create(User $user, string $content, int $limit): array
|
||||||
{
|
{
|
||||||
$content = substr(trim($content), 0, 250);
|
$content = substr(trim($content), 0, 250);
|
||||||
|
|
||||||
@@ -73,8 +73,21 @@ class Post implements JsonSerializable
|
|||||||
$stmt->bindValue(":CON", nl2br(htmlspecialchars($content)));
|
$stmt->bindValue(":CON", nl2br(htmlspecialchars($content)));
|
||||||
|
|
||||||
$stmt->execute();
|
$stmt->execute();
|
||||||
|
$lastId = $db->lastInsertId();
|
||||||
|
|
||||||
return Post::getByID($db->lastInsertId());
|
$stmt = $db->prepare(
|
||||||
|
"SELECT
|
||||||
|
COUNT(*)
|
||||||
|
FROM
|
||||||
|
egb_gaestebuch"
|
||||||
|
);
|
||||||
|
$stmt->execute();
|
||||||
|
$count = $stmt->fetch(PDO::FETCH_COLUMN, 0);
|
||||||
|
|
||||||
|
return [
|
||||||
|
"pages" => intdiv($count, $limit + 1) + 1,
|
||||||
|
"post" => Post::getByID($lastId)
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function list(int $page, int $limit, bool $authed = false): array
|
public static function list(int $page, int $limit, bool $authed = false): array
|
||||||
|
|||||||
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
import{j as e,M as X,a as T,T as d,B as F,b as $,c as f,A as ge,d as H,L as b,C as Z,I as R,e as pe,f as E,P,g as xe,u as je,h as J,i as fe,k as _,l as Y,D as ee,m as te,n as L,o as ye,p as se,S as D,q as Ce,G as p,r as we,s as ve,t as be,v as Ae,w as Ee}from"./mui-CsmJ6if2.js";import{u as q,a as ne,b as Pe,c as ke,d as Fe,L as C,e as De,O as Se,f as Te,r as O,g as re,h as ae,q as B,i as N,j as Q,Q as $e,k as Oe,l as Ie,R as Ue,m as Re}from"./tanstack-DXVkKUs1.js";import{c as Le,r as g}from"./react-DXd9vB-a.js";import{i as A,B as Me,a as qe,b as Be,u as w,t as h}from"./i18n-DJgSTqOl.js";(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))a(n);new MutationObserver(n=>{for(const c of n)if(c.type==="childList")for(const r of c.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&a(r)}).observe(document,{childList:!0,subtree:!0});function o(n){const c={};return n.integrity&&(c.integrity=n.integrity),n.referrerPolicy&&(c.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?c.credentials="include":n.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function a(n){if(n.ep)return;n.ep=!0;const c=o(n);fetch(n.href,c)}})();var M={},K=Le;M.createRoot=K.createRoot,M.hydrateRoot=K.hydrateRoot;const y="https://khofmann.userpage.fu-berlin.de/phpCourse/exam/api/";let G;class Ne{constructor(){if(this.hasAuth=()=>this.token!==void 0,this.isAdmin=()=>{var s;return this.hasAuth()&&((s=this.self)==null?void 0:s.isAdmin)},this.getAuthenticatedUser=()=>this.self,this.getCurrentSession=()=>[this.token,this.refreshToken],this.logIn=async(s,o)=>{const{user:a,token:n}=await(await this.post("login",{email:s,password:o})).json();this.self=a,this.token=n},this.logOut=async()=>{try{return await(await this.postAuth("logout")).json()}catch{return!1}finally{this.self=void 0,this.token=void 0}},this.posts=async s=>{const o=`posts?p=${s??0}&l=9`;return this.token?await(await this.getAuth(o)).json():await(await this.get(o)).json()},this.deletePost=async s=>await(await this.delete(`posts/${s}`)).json(),this.user=async s=>{var o;return await(await this.getAuth(`users/${s??((o=this.self)==null?void 0:o.id)}`)).json()},this.updateUser=async(s,o)=>await(await this.patch(`users/${o??"self"}`,s)).json(),this.post=async(s,o,a)=>{const n=await fetch(`${y}${s}`,{mode:"cors",method:"post",headers:a,body:JSON.stringify(o)});if(n.ok)return n;throw await n.json()},this.postAuth=async(s,o,a)=>{const n=await fetch(`${y}${s}`,{mode:"cors",method:"post",headers:{token:this.token??"",...a},body:JSON.stringify(o)});if(n.ok)return n;throw await n.json()},this.get=async(s,o)=>{const a=await fetch(`${y}${s}`,{mode:"cors",method:"get",headers:o});if(a.ok)return a;throw await a.json()},this.getAuth=async(s,o)=>{const a=await fetch(`${y}${s}`,{mode:"cors",method:"get",headers:{token:this.token??"",...o}});if(a.ok)return a;throw await a.json()},this.delete=async(s,o)=>{const a=await fetch(`${y}${s}`,{mode:"cors",method:"delete",headers:{token:this.token??"",...o}});if(a.ok)return a;throw await a.json()},this.patch=async(s,o,a)=>{const n=await fetch(`${y}${s}`,{mode:"cors",method:"patch",headers:{token:this.token??"",...a},body:JSON.stringify(o)});if(n.ok)return n;throw await n.json()},G)throw new Error("New instance cannot be created!!");G=this}}const l=new Ne;var k=(t=>(t.NOT_FOUND="NotFound",t.UNAUTHORIZED="Unauthorized",t.FAILEDUPDATE="FailedUpdate",t))(k||{});A.use(Me).use(qe).use(Be).init({fallbackLng:"en",debug:!1,interpolation:{escapeValue:!1},backend:{loadPath:"/phpCourse/exam/dist/locales/{{lng}}/{{ns}}.json"}});const Qe=({anchorEl:t,handleClose:s})=>e.jsxs(X,{anchorEl:t,anchorOrigin:{vertical:"bottom",horizontal:"right"},keepMounted:!0,transformOrigin:{vertical:"top",horizontal:"right"},open:!!t,onClose:s,sx:{"& .MuiMenu-paper":{minWidth:"240px"}},children:[e.jsx(T,{selected:A.language==="en",onClick:()=>{A.changeLanguage("en"),s()},children:"English"},"de"),e.jsx(T,{selected:A.language==="de",onClick:()=>{A.changeLanguage("de"),s()},children:"Deutsch"},"en")]});var x=(t=>(t.INDEX="/",t.PROFILE="/profile",t))(x||{});const z=({error:t,context:s,color:o="error.main"})=>{const{t:a}=w();if(!t)return null;if(t.code)switch(t.code){case k.NOT_FOUND:return e.jsx(d,{color:o,children:a(t.code,{context:`${t.entity}:${s}`})});case k.UNAUTHORIZED:return e.jsx(d,{color:o,children:a(t.code,{context:s})});case k.FAILEDUPDATE:return t.fields.map((n,c)=>e.jsx(d,{color:o,children:a(t.code,{context:`${t.reasons[c]}:${n}:${s}`})},`error_${n}`))}return e.jsx(d,{color:o,children:a((t==null?void 0:t.message)??"Unknown",{context:s})})},ze=({handleClose:t})=>{const[s,o]=g.useState(),{t:a}=w(),n=q(),c=ne({defaultValues:{email:"",password:""},onSubmit:async({value:r})=>{try{await l.logIn(r.email,r.password),n.invalidate(),t()}catch(u){o(u)}}});return e.jsx("form",{onSubmit:r=>{r.preventDefault(),r.stopPropagation(),cLine truncated
|
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
import{j as e,M as ne,a as O,T as p,B as E,b as F,c as f,A as ye,d as J,L as k,C as L,I as Q,e as fe,f as T,P as I,g as Ce,u as ve,h as se,i as re,k as ae,D as K,l as _,m as $,n as H,o as oe,p as be,q as ie,r as le,s as we,S as q,t as Pe,G as y,v as ce,w as Se,x as Ae}from"./mui-v3E5hT34.js";import{u as G,a as R,b as Ee,c as Fe,d as ke,L as S,e as De,O as Te,f as Ie,r as U,g as B,h as N,q as V,i as X,j as Z,Q as $e,k as qe,l as Me,R as Oe,m as Ue}from"./tanstack-yMrSYl0u.js";import{c as Le,r as j}from"./react-DXd9vB-a.js";import{i as D,B as Re,a as Be,b as Ne,u as w,t as m}from"./i18n-DJgSTqOl.js";(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))o(s);new MutationObserver(s=>{for(const c of s)if(c.type==="childList")for(const r of c.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&o(r)}).observe(document,{childList:!0,subtree:!0});function a(s){const c={};return s.integrity&&(c.integrity=s.integrity),s.referrerPolicy&&(c.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?c.credentials="include":s.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function o(s){if(s.ep)return;s.ep=!0;const c=a(s);fetch(s.href,c)}})();var W={},Y=Le;W.createRoot=Y.createRoot,W.hydrateRoot=Y.hydrateRoot;const ze=15,P="https://khofmann.userpage.fu-berlin.de/phpCourse/exam/api/";let ee;class Qe{constructor(){if(this.hasAuth=()=>this.token!==void 0,this.isAdmin=()=>{var n;return this.hasAuth()&&((n=this.self)==null?void 0:n.isAdmin)},this.getAuthenticatedUser=()=>this.self,this.getCurrentSession=()=>[this.token,this.refreshToken],this.logIn=async(n,a)=>{const{user:o,token:s}=await(await this.post("login",{email:n,password:a})).json();this.self=o,this.token=s},this.logOut=async()=>{try{return await(await this.postAuth("logout")).json()}catch{return!1}finally{this.self=void 0,this.token=void 0}},this.posts=async n=>{const a=`posts?p=${n??0}&l=${ze}`;return this.token?await(await this.getAuth(a)).json():await(await this.get(a)).json()},this.deletePost=async n=>await(await this.delete(`posts/${n}`)).json(),this.user=async n=>{var a;return await(await this.getAuth(`users/${n??((a=this.self)==null?void 0:a.id)}`)).json()},this.updateUser=async(n,a)=>await(await this.patch(`users/${a??"self"}`,n)).json(),this.newPost=async n=>await(await this.postAuth("posts",n)).json(),this.updatePost=async(n,a)=>await(await this.patch(`posts/${a}`,n)).json(),this.post=async(n,a,o)=>{const s=await fetch(`${P}${n}`,{mode:"cors",method:"post",headers:o,body:JSON.stringify(a)});if(s.ok)return s;throw await s.json()},this.postAuth=async(n,a,o)=>{const s=await fetch(`${P}${n}`,{mode:"cors",method:"post",headers:{token:this.token??"",...o},body:JSON.stringify(a)});if(s.ok)return s;throw await s.json()},this.get=async(n,a)=>{const o=await fetch(`${P}${n}`,{mode:"cors",method:"get",headers:a});if(o.ok)return o;throw await o.json()},this.getAuth=async(n,a)=>{const o=await fetch(`${P}${n}`,{mode:"cors",method:"get",headers:{token:this.token??"",...a}});if(o.ok)return o;throw await o.json()},this.delete=async(n,a)=>{const o=await fetch(`${P}${n}`,{mode:"cors",method:"delete",headers:{token:this.token??"",...a}});if(o.ok)return o;throw await o.json()},this.patch=async(n,a,o)=>{const s=await fetch(`${P}${n}`,{mode:"cors",method:"patch",headers:{token:this.token??"",...o},body:JSON.stringify(a)});if(s.ok)return s;throw await s.json()},ee)throw new Error("New instance cannot be created!!");ee=this}}const d=new Qe;var A=(t=>(t.NOT_FOUND="NotFound",t.UNAUTHORIZED="Unauthorized",t.FAILED_UPDATE="FailedUpdate",t.MISSING_FIELD="MissingField",t))(A||{});D.use(Re).use(Be).use(Ne).init({fallbackLng:"en",debug:!1,interpolation:{escapeValue:!1},backend:{loadPath:"/phpCourse/exam/dist/locales/{{lng}}/{{ns}}.json"}});const We=({anchorEl:t,handleClose:n})=>e.jsxs(ne,{anchorEl:t,anchorOrigin:{vertical:"bottom",horizontal:"right"},keepMounted:!0,transformOrigin:{vertical:"top",horizontal:"right"},open:!!t,onClose:n,sx:{"& .MuiMenu-paper":{minWidth:"240px"}},children:[e.jsx(O,{selected:D.language==="en",onClick:()=>{D.changeLanguage("en"),n()},children:"English"},"de"),e.jsx(O,{selected:D.language==="de",onClick:()=>{D.changeLanguage("de"),n()},children:"Deutsch"},"en")]});var v=(t=>(t.INDEX="/",t.PROFILE="/profile",t))(v||{});const M=({error:t,context:n,color:a="error.main"})=>{const{t:o}=w();if(console.log(t,n),!t)return null;if(t.code)switch(t.code){case A.NOT_FOUND:return e.jsx(p,{color:a,children:o(t.code,{context:`${t.entity}:${n}`})});case A.UNAUTHORIZED:return e.jsx(p,{color:a,children:o(t.code,{context:n})});case A.FAILED_UPDATE:return t.fields.map((s,c)=>e.jsx(p,{color:a,children:o(t.code,{context:`${t.reasons[c]}:${s}:${n}`})},`error_${s}`));case A.MISSING_FIELD:return t.fields.map(s=>e.jsx(p,{color:a,children:o(t.code,{context:`${s}:${n}`})},`error_${s}`))}return e.jsx(p,{color:a,children:o((tLine truncated
|
||||||
Vendored
-125
@@ -1,125 +0,0 @@
|
|||||||
import{r as p,R as Lo,g as mt,a as st,b as vn,c as sa}from"./react-DXd9vB-a.js";var Hi={exports:{}},Bn={};/**
|
|
||||||
* @license React
|
|
||||||
* react-jsx-runtime.production.min.js
|
|
||||||
*
|
|
||||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the MIT license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree.
|
|
||||||
*/var aa=p,la=Symbol.for("react.element"),ca=Symbol.for("react.fragment"),ua=Object.prototype.hasOwnProperty,da=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,pa={key:!0,ref:!0,__self:!0,__source:!0};function Vi(e,t,n){var o,r={},i=null,s=null;n!==void 0&&(i=""+n),t.key!==void 0&&(i=""+t.key),t.ref!==void 0&&(s=t.ref);for(o in t)ua.call(t,o)&&!pa.hasOwnProperty(o)&&(r[o]=t[o]);if(e&&e.defaultProps)for(o in t=e.defaultProps,t)r[o]===void 0&&(r[o]=t[o]);return{$$typeof:la,type:e,key:i,ref:s,props:r,_owner:da.current}}Bn.Fragment=ca;Bn.jsx=Vi;Bn.jsxs=Vi;Hi.exports=Bn;var R=Hi.exports;const on={black:"#000",white:"#fff"},kt={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},Pt={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},Et={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},wt={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},Mt={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},Kt={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},fa={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"};function xt(e){let t="https://mui.com/production-error/?code="+e;for(let n=1;n<arguments.length;n+=1)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified MUI error #"+e+"; visit "+t+" for the full message."}const ma=Object.freeze(Object.defineProperty({__proto__:null,default:xt},Symbol.toStringTag,{value:"Module"})),Ln="$$material";function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)({}).hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},u.apply(null,arguments)}function O(e,t){if(e==null)return{};var n={};for(var o in e)if({}.hasOwnProperty.call(e,o)){if(t.includes(o))continue;n[o]=e[o]}return n}function Ki(e){var t=Object.create(null);return function(n){return t[n]===void 0&&(t[n]=e(n)),t[n]}}var ga=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|fLine truncated
|
|
||||||
* react-is.production.min.js
|
|
||||||
*
|
|
||||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the MIT license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree.
|
|
||||||
*/var $e=typeof Symbol=="function"&&Symbol.for,rr=$e?Symbol.for("react.element"):60103,ir=$e?Symbol.for("react.portal"):60106,Dn=$e?Symbol.for("react.fragment"):60107,Wn=$e?Symbol.for("react.strict_mode"):60108,Un=$e?Symbol.for("react.profiler"):60114,Hn=$e?Symbol.for("react.provider"):60109,Vn=$e?Symbol.for("react.context"):60110,sr=$e?Symbol.for("react.async_mode"):60111,Kn=$e?Symbol.for("react.concurrent_mode"):60111,Gn=$e?Symbol.for("react.forward_ref"):60112,qn=$e?Symbol.for("react.suspense"):60113,Ka=$e?Symbol.for("react.suspense_list"):60120,Xn=$e?Symbol.for("react.memo"):60115,Yn=$e?Symbol.for("react.lazy"):60116,Ga=$e?Symbol.for("react.block"):60121,qa=$e?Symbol.for("react.fundamental"):60117,Xa=$e?Symbol.for("react.responder"):60118,Ya=$e?Symbol.for("react.scope"):60119;function ze(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case rr:switch(e=e.type,e){case sr:case Kn:case Dn:case Un:case Wn:case qn:return e;default:switch(e=e&&e.$$typeof,e){case Vn:case Gn:case Yn:case Xn:case Hn:return e;default:return t}}case ir:return t}}}function ns(e){return ze(e)===Kn}ee.AsyncMode=sr;ee.ConcurrentMode=Kn;ee.ContextConsumer=Vn;ee.ContextProvider=Hn;ee.Element=rr;ee.ForwardRef=Gn;ee.Fragment=Dn;ee.Lazy=Yn;ee.Memo=Xn;ee.Portal=ir;ee.Profiler=Un;ee.StrictMode=Wn;ee.Suspense=qn;ee.isAsyncMode=function(e){return ns(e)||ze(e)===sr};ee.isConcurrentMode=ns;ee.isContextConsumer=function(e){return ze(e)===Vn};ee.isContextProvider=function(e){return ze(e)===Hn};ee.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===rr};ee.isForwardRef=function(e){return ze(e)===Gn};ee.isFragment=function(e){return ze(e)===Dn};ee.isLazy=function(e){return ze(e)===Yn};ee.isMemo=function(e){return ze(e)===Xn};ee.isPortal=function(e){return ze(e)===ir};ee.isProfiler=function(e){return ze(e)===Un};ee.isStrictMode=function(e){return ze(e)===Wn};ee.isSuspense=function(e){return ze(e)===qn};ee.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===Dn||e===Kn||e===Un||e===Wn||e===qn||e===Ka||typeof e=="object"&&e!==null&&(e.$$typeof===Yn||e.$$typeof===Xn||e.$$typeof===Hn||e.$$typeof===Vn||e.$$typeof===Gn||e.$$typeof===qa||e.$$typeof===Xa||e.$$typeof===Ya||e.$$typeof===Ga)};ee.typeOf=ze;ts.exports=ee;var Za=ts.exports,os=Za,Qa={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},Ja={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},rs={};rs[os.ForwardRef]=Qa;rs[os.Memo]=Ja;var el=!0;function tl(e,t,n){var o="";return n.split(" ").forEach(function(r){e[r]!==void 0?t.push(e[r]+";"):o+=r+" "}),o}var is=function(t,n,o){var r=t.key+"-"+n.name;(o===!1||el===!1)&&t.registered[r]===void 0&&(t.registered[r]=n.styles)},ss=function(t,n,o){is(t,n,o);var r=t.key+"-"+n.name;if(t.inserted[n.name]===void 0){var i=n;do t.insert(n===i?"."+r:"",i,t.sheet,!0),i=i.next;while(i!==void 0)}};function nl(e){for(var t=0,n,o=0,r=e.length;r>=4;++o,r-=4)n=e.charCodeAt(o)&255|(e.charCodeAt(++o)&255)<<8|(e.charCodeAt(++o)&255)<<16|(e.charCodeAt(++o)&255)<<24,n=(n&65535)*1540483477+((n>>>16)*59797<<16),n^=n>>>24,t=(n&65535)*1540483477+((n>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(r){case 3:t^=(e.charCodeAt(o+2)&255)<<16;case 2:t^=(e.charCodeAt(o+1)&255)<<8;case 1:t^=e.charCodeAt(o)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var ol={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},rl=!1,il=/[A-Z]|^ms/g,sl=/_EMO_([^_]+?)_([^]*?)_EMO_/g,as=function(t){return t.charCodeAt(1)===45},Br=function(t){return t!=null&&typeof t!="boolean"},Po=Ki(function(e){return as(e)?e:e.replace(il,"-$&").toLowerCase()}),Lr=function(t,n){switch(t){case"animation":case"animationName":if(typeof n=="string")return n.replace(sl,function(o,r,i){return et={name:r,styles:i,next:et},r})}return ol[t]!==1&&!as(t)&&typeof n=="number"&&n!==0?n+"px":n},al="Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform.";function an(e,t,n){if(n==null)return"";var o=n;if(o.__emotion_styles!==void 0)return o;switch(typeof n){case"boolean":return"";case"object":{var r=n;if(r.anim===1)return et={name:r.name,styles:r.styles,next:et},r.name;var i=n;if(i.styles!==void 0){var s=i.next;if(s!==void 0)for(;s!==void 0;)et={namLine truncated
|
|
||||||
* @license React
|
|
||||||
* react-is.production.min.js
|
|
||||||
*
|
|
||||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
||||||
*
|
|
||||||
* This source code is licensed under the MIT license found in the
|
|
||||||
* LICENSE file in the root directory of this source tree.
|
|
||||||
*/var mr=Symbol.for("react.element"),gr=Symbol.for("react.portal"),so=Symbol.for("react.fragment"),ao=Symbol.for("react.strict_mode"),lo=Symbol.for("react.profiler"),co=Symbol.for("react.provider"),uo=Symbol.for("react.context"),wc=Symbol.for("react.server_context"),po=Symbol.for("react.forward_ref"),fo=Symbol.for("react.suspense"),mo=Symbol.for("react.suspense_list"),go=Symbol.for("react.memo"),ho=Symbol.for("react.lazy"),Mc=Symbol.for("react.offscreen"),$s;$s=Symbol.for("react.module.reference");function Ye(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case mr:switch(e=e.type,e){case so:case lo:case ao:case fo:case mo:return e;default:switch(e=e&&e.$$typeof,e){case wc:case uo:case po:case ho:case go:case co:return e;default:return t}}case gr:return t}}}te.ContextConsumer=uo;te.ContextProvider=co;te.Element=mr;te.ForwardRef=po;te.Fragment=so;te.Lazy=ho;te.Memo=go;te.Portal=gr;te.Profiler=lo;te.StrictMode=ao;te.Suspense=fo;te.SuspenseList=mo;te.isAsyncMode=function(){return!1};te.isConcurrentMode=function(){return!1};te.isContextConsumer=function(e){return Ye(e)===uo};te.isContextProvider=function(e){return Ye(e)===co};te.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===mr};te.isForwardRef=function(e){return Ye(e)===po};te.isFragment=function(e){return Ye(e)===so};te.isLazy=function(e){return Ye(e)===ho};te.isMemo=function(e){return Ye(e)===go};te.isPortal=function(e){return Ye(e)===gr};te.isProfiler=function(e){return Ye(e)===lo};te.isStrictMode=function(e){return Ye(e)===ao};te.isSuspense=function(e){return Ye(e)===fo};te.isSuspenseList=function(e){return Ye(e)===mo};te.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===so||e===lo||e===ao||e===fo||e===mo||e===Mc||typeof e=="object"&&e!==null&&(e.$$typeof===ho||e.$$typeof===go||e.$$typeof===co||e.$$typeof===uo||e.$$typeof===po||e.$$typeof===$s||e.getModuleId!==void 0)};te.typeOf=Ye;Rs.exports=te;var Vr=Rs.exports;const Tc=/^\s*function(?:\s|\s*\/\*.*\*\/\s*)+([^(\s/]*)\s*/;function Ss(e){const t=`${e}`.match(Tc);return t&&t[1]||""}function ks(e,t=""){return e.displayName||e.name||Ss(e)||t}function Kr(e,t,n){const o=ks(t);return e.displayName||(o!==""?`${n}(${o})`:n)}function Ic(e){if(e!=null){if(typeof e=="string")return e;if(typeof e=="function")return ks(e,"Component");if(typeof e=="object")switch(e.$$typeof){case Vr.ForwardRef:return Kr(e,e.render,"ForwardRef");case Vr.Memo:return Kr(e,e.type,"memo");default:return}}}const Oc=Object.freeze(Object.defineProperty({__proto__:null,default:Ic,getFunctionName:Ss},Symbol.toStringTag,{value:"Module"}));function ln(e,t){const n=u({},t);return Object.keys(e).forEach(o=>{if(o.toString().match(/^(components|slots)$/))n[o]=u({},e[o],n[o]);else if(o.toString().match(/^(componentsProps|slotProps)$/)){const r=e[o]||{},i=t[o];n[o]={},!i||!Object.keys(i)?n[o]=r:!r||!Object.keys(r)?n[o]=i:(n[o]=u({},i),Object.keys(r).forEach(s=>{n[o][s]=ln(r[s],i[s])}))}else n[o]===void 0&&(n[o]=e[o])}),n}function Ac(e){const{theme:t,name:n,props:o}=e;return!t||!t.components||!t.components[n]||!t.components[n].defaultProps?o:ln(t.components[n].defaultProps,o)}const lt=typeof window<"u"?p.useLayoutEffect:p.useEffect;function Nc(e,t,n,o,r){const[i,s]=p.useState(()=>r&&n?n(e).matches:o?o(e).matches:t);return lt(()=>{let a=!0;if(!n)return;const l=n(e),c=()=>{a&&s(l.matches)};return c(),l.addListener(c),()=>{a=!1,l.removeListener(c)}},[e,n]),i}const Ps=p.useSyncExternalStore;function _c(e,t,n,o,r){const i=p.useCallback(()=>t,[t]),s=p.useMemo(()=>{if(r&&n)return()=>n(e).matches;if(o!==null){const{matches:d}=o(e);return()=>d}return i},[i,e,o,r,n]),[a,l]=p.useMemo(()=>{if(n===null)return[i,()=>()=>{}];const d=n(e);return[()=>d.matches,f=>(d.addListener(f),()=>{d.removeListener(f)})]},[i,n,e]);return Ps(l,a,s)}function pv(e,t={}){const n=ys(),o=typeof window<"u"&&typeof window.matchMedia<"u",{defaultMatches:r=!1,matchMedia:i=o?window.matchMedia:null,ssrMatchMedia:s=null,noSsr:a=!1}=Ac({name:"MuiUseMediaQuery",props:t,theme:n});let l=typeof e=="function"?e(n):e;return l=l.replace(/^@media( ?)/m,""),(Ps!==void 0?_c:Nc)(l,r,i,s,a)}function Bc(e,t=Number.MIN_SAFE_INTEGER,n=Number.MAX_SAFE_INTEGER){return Math.max(t,Math.min(e,n))}const Lc=Object.freeze(Object.defineProperty({__proto__:null,default:Bc},Symbol.toStringTag,{value:"Module"}));function Gr(...e){return e.reduce((t,n)=>n==null?t:function(...r){t.apply(this,r),n.apply(this,r)},()=>{})}function Es(e,t=166){let n;function o(...r){const i=()=>{e.apply(this,r)};clearTimeout(n),n=setTimeout(i,t)}return o.clear=()=>{clearTimeout(n)},o}function Eo(e,t){var n,o;return p.isValidElement(e)&&t.indexOf((n=e.type.muiName)!=null?n:(o=e.type)==null||(o=o._payload)==null||(o=o.value)==null?void 0:o.muiName)!==-1}function Ee(e){return e&&e.ownerDocument||document}function Ct(e){return Ee(e).defaultView||window}function Wo(e,t){typeof e=="function"?e(t):e&&(e.current=t)}let qr=0;function zc(e){const[t,n]=p.useState(e),o=e||t;return p.usLine truncated
|
|
||||||
0% {
|
|
||||||
transform: scale(0);
|
|
||||||
opacity: 0.1;
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
transform: scale(1);
|
|
||||||
opacity: 0.3;
|
|
||||||
}
|
|
||||||
`)),Ed=Ft(ui||(ui=yo`
|
|
||||||
0% {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
`)),wd=Ft(di||(di=yo`
|
|
||||||
0% {
|
|
||||||
transform: scale(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
50% {
|
|
||||||
transform: scale(0.92);
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
transform: scale(1);
|
|
||||||
}
|
|
||||||
`)),Md=T("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),Td=T($d,{name:"MuiTouchRipple",slot:"Ripple"})(pi||(pi=yo`
|
|
||||||
opacity: 0;
|
|
||||||
position: absolute;
|
|
||||||
|
|
||||||
&.${0} {
|
|
||||||
opacity: 0.3;
|
|
||||||
transform: scale(1);
|
|
||||||
animation-name: ${0};
|
|
||||||
animation-duration: ${0}ms;
|
|
||||||
animation-timing-function: ${0};
|
|
||||||
}
|
|
||||||
|
|
||||||
&.${0} {
|
|
||||||
animation-duration: ${0}ms;
|
|
||||||
}
|
|
||||||
|
|
||||||
& .${0} {
|
|
||||||
opacity: 1;
|
|
||||||
display: block;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
border-radius: 50%;
|
|
||||||
background-color: currentColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
& .${0} {
|
|
||||||
opacity: 0;
|
|
||||||
animation-name: ${0};
|
|
||||||
animation-duration: ${0}ms;
|
|
||||||
animation-timing-function: ${0};
|
|
||||||
}
|
|
||||||
|
|
||||||
& .${0} {
|
|
||||||
position: absolute;
|
|
||||||
/* @noflip */
|
|
||||||
left: 0px;
|
|
||||||
top: 0;
|
|
||||||
animation-name: ${0};
|
|
||||||
animation-duration: 2500ms;
|
|
||||||
animation-timing-function: ${0};
|
|
||||||
animation-iteration-count: infinite;
|
|
||||||
animation-delay: 200ms;
|
|
||||||
}
|
|
||||||
`),Ve.rippleVisible,Pd,Qo,({theme:e})=>e.transitions.easing.easeInOut,Ve.ripplePulsate,({theme:e})=>e.transitions.duration.shorter,Ve.child,Ve.childLeaving,Ed,Qo,({theme:e})=>e.transitions.easing.easeInOut,Ve.childPulsate,wd,({theme:e})=>e.transitions.easing.easeInOut),Id=p.forwardRef(function(t,n){const o=G({props:t,name:"MuiTouchRipple"}),{center:r=!1,classes:i={},className:s}=o,a=O(o,Sd),[l,c]=p.useState([]),d=p.useRef(0),f=p.useRef(null);p.useEffect(()=>{f.current&&(f.current(),f.current=null)},[l]);const g=p.useRef(!1),b=vr(),m=p.useRef(null),h=p.useRef(null),C=p.useCallback(x=>{const{pulsate:S,rippleX:P,rippleY:k,rippleSize:w,cb:E}=x;c(M=>[...M,R.jsx(Td,{classes:{ripple:F(i.ripple,Ve.ripple),rippleVisible:F(i.rippleVisible,Ve.rippleVisible),ripplePulsate:F(i.ripplePulsate,Ve.ripplePulsate),child:F(i.child,Ve.child),childLeaving:F(i.childLeaving,Ve.childLeaving),childPulsate:F(i.childPulsate,Ve.childPulsate)},timeout:Qo,pulsate:S,rippleX:P,rippleY:k,rippleSize:w},d.current)]),d.current+=1,f.current=E},[i]),v=p.useCallback((x={},S={},P=()=>{})=>{const{pulsate:k=!1,center:w=r||S.pulsate,fakeElement:E=!1}=S;if((x==null?void 0:x.type)==="mousedown"&&g.current){g.current=!1;return}(x==null?void 0:x.type)==="touchstart"&&(g.current=!0);const M=E?null:h.current,D=M?M.getBoundingClientRect():{width:0,height:0,left:0,top:0};let z,L,N;if(w||x===void 0||x.clientX===0&&x.clientY===0||!x.clientX&&!x.touches)z=Math.round(D.width/2),L=Math.round(D.height/2);else{const{clientX:_,clientY:A}=x.touches&&x.touches.length>0?x.touches[0]:x;z=Math.round(_-D.left),L=Math.round(A-D.top)}if(w)N=Math.sqrt((2*D.width**2+D.height**2)/3),N%2===0&&(N+=1);else{const _=Math.max(Math.abs((M?M.clientWidth:0)-z),z)*2+2,A=Math.max(Math.abs((M?M.clientHeight:0)-L),L)*2+2;N=Math.sqrt(_**2+A**2)}x!=null&&x.touches?m.current===null&&(m.current=()=>{C({pulsate:k,rippleX:z,rippleY:L,rippleSize:N,cb:P})},b.start(kd,()=>{m.current&&(m.current(),m.current=null)})):C({pulsate:k,rippleX:z,rippleY:L,rippleSize:N,cb:P})},[r,C,b]),$=p.useCallback(()=>{v({},{pulsate:!0})},[v]),y=p.useCallback((x,S)=>{if(b.clear(),(x==null?void 0:x.type)==="touchend"&&m.current){m.current(),m.current=null,b.start(0,()=>{y(x,S)});return}m.current=null,c(P=>P.length>0?P.slice(1):P),f.current=S},[b]);return p.useImperativeHandle(n,()=>({pulsate:$,start:v,stop:y}),[$,v,y]),R.jsx(Md,u({className:F(Ve.root,i.root,s),ref:h},a,{children:R.jsx($r,{component:null,exit:!0,children:l})}))});function Od(e){return V("MuiButtonBase",e)}const Ad=H("MuiButtonBase",["root","disabled","focusVisible"]),Nd=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],_d=e=>{const{disabled:t,focusVisible:n,focusVisibleClassName:o,classes:r}=e,s=K({root:["root",t&&"disabled",n&&"focusVisible"]},Od,r);return n&&o&&(s.root+=` ${o}`),s},Bd=T("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(e,t)=>t.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${Ad.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),xo=p.forwardRef(function(t,n){const o=G({props:t,name:"MuiButtonBase"}),{action:r,centerRipple:i=!1,children:s,className:a,component:l="button",disabled:c=!1,disableRipple:d=!1,disableTouchRipple:f=!1,focusRipple:g=!1,LinkComponent:b="a",onBlur:m,onClick:h,onContextMenu:C,onDragLeave:v,onFocus:$,onFocusVisible:y,onKeyDown:x,onKeyUp:S,onMouseDown:P,onMouseLeave:k,onMouseUp:w,onTouchEnd:E,onTouchMove:M,onTouchStart:D,tabIndex:z=0,TouchRippleProps:L,touchRippleRef:N,type:_}=o,A=O(o,Nd),j=p.useRef(null),I=p.useRef(null),Y=Re(I,N),{isFocusVisibleRef:ie,onFocus:Me,onBlur:he,ref:fe}=ws(),[X,se]=p.useState(!1);c&&X&&se(!1),p.useImperativeHandle(r,()=>({focusVisible:()=>{se(!0),j.current.focus()}}),[]);const[ae,Te]=p.useState(!1);p.useEffect(()=>{Te(!0)},[]);const we=ae&&!d&&!c;p.useEffect(()=>{X&&g&&!d&&ae&&I.current.pulsate()},[d,g,X,ae]);function ve(U,it,Ht=f){return at(Vt=>(it&&it(Vt),!Ht&&I.current&&I.current[U](Vt),!0))}const Ie=ve("start",P),J=ve("stop",C),de=ve("stop",v),q=ve("stop",w),ne=ve("stop",U=>{X&&U.preventDefault(),k&&k(U)}),le=ve("start",D),ct=ve("stop",E),je=ve("stop",M),De=ve("stop",U=>{he(U),ie.current===!1&&se(!1),m&&m(U)},!1),Ze=at(U=>{j.current||(j.current=U.currentTarget),Me(U),ie.current===!0&&(se(!0),y&&y(U)),$&&$(U)}),We=()=>{con
Line truncated
|
|
||||||
`&&(x.value+=" ");const S=y.boxSizing,P=Cn(y.paddingBottom)+Cn(y.paddingTop),k=Cn(y.borderBottomWidth)+Cn(y.borderTopWidth),w=x.scrollHeight;x.value="x";const E=x.scrollHeight;let M=w;i&&(M=Math.max(Number(i)*E,M)),r&&(M=Math.min(Number(r)*E,M)),M=Math.max(M,E);const D=M+(S==="border-box"?P+k:0),z=Math.abs(M-w)<=1;return{outerHeightStyle:D,overflowing:z}},[r,i,t.placeholder]),h=p.useCallback(()=>{const v=m();if(mp(v))return;const $=v.outerHeightStyle,y=d.current;g.current!==$&&(g.current=$,y.style.height=`${$}px`),y.style.overflow=v.overflowing?"hidden":""},[m]);lt(()=>{const v=()=>{h()};let $;const y=Es(v),x=d.current,S=Ct(x);S.addEventListener("resize",y);let P;return typeof ResizeObserver<"u"&&(P=new ResizeObserver(v),P.observe(x)),()=>{y.clear(),cancelAnimationFrame($),S.removeEventListener("resize",y),P&&P.disconnect()}},[m,h]),lt(()=>{h()});const C=v=>{c||h(),o&&o(v)};return R.jsxs(p.Fragment,{children:[R.jsx("textarea",u({value:a,onChange:C,ref:f,rows:i,style:s},l)),R.jsx("textarea",{"aria-hidden":!0,className:t.className,readOnly:!0,ref:b,tabIndex:-1,style:u({},fp.shadow,s,{paddingTop:0,paddingBottom:0})})]})});function Wt({props:e,states:t,muiFormControl:n}){return t.reduce((o,r)=>(o[r]=e[r],n&&typeof e[r]>"u"&&(o[r]=n[r]),o),{})}const Sr=p.createContext(void 0);function Ut(){return p.useContext(Sr)}function hp(e){return R.jsx(xc,u({},e,{defaultTheme:Cr,themeId:Ln}))}function vi(e){return e!=null&&!(Array.isArray(e)&&e.length===0)}function _n(e,t=!1){return e&&(vi(e.value)&&e.value!==""||t&&vi(e.defaultValue)&&e.defaultValue!=="")}function vp(e){return e.startAdornment}function bp(e){return V("MuiInputBase",e)}const Lt=H("MuiInputBase",["root","formControl","focused","disabled","adornedStart","adornedEnd","error","sizeSmall","multiline","colorSecondary","fullWidth","hiddenLabel","readOnly","input","inputSizeSmall","inputMultiline","inputTypeSearch","inputAdornedStart","inputAdornedEnd","inputHiddenLabel"]),yp=["aria-describedby","autoComplete","autoFocus","className","color","components","componentsProps","defaultValue","disabled","disableInjectingGlobalStyles","endAdornment","error","fullWidth","id","inputComponent","inputProps","inputRef","margin","maxRows","minRows","multiline","name","onBlur","onChange","onClick","onFocus","onKeyDown","onKeyUp","placeholder","readOnly","renderSuffix","rows","size","slotProps","slots","startAdornment","type","value"],Co=(e,t)=>{const{ownerState:n}=e;return[t.root,n.formControl&&t.formControl,n.startAdornment&&t.adornedStart,n.endAdornment&&t.adornedEnd,n.error&&t.error,n.size==="small"&&t.sizeSmall,n.multiline&&t.multiline,n.color&&t[`color${B(n.color)}`],n.fullWidth&&t.fullWidth,n.hiddenLabel&&t.hiddenLabel]},Ro=(e,t)=>{const{ownerState:n}=e;return[t.input,n.size==="small"&&t.inputSizeSmall,n.multiline&&t.inputMultiline,n.type==="search"&&t.inputTypeSearch,n.startAdornment&&t.inputAdornedStart,n.endAdornment&&t.inputAdornedEnd,n.hiddenLabel&&t.inputHiddenLabel]},xp=e=>{const{classes:t,color:n,disabled:o,error:r,endAdornment:i,focused:s,formControl:a,fullWidth:l,hiddenLabel:c,multiline:d,readOnly:f,size:g,startAdornment:b,type:m}=e,h={root:["root",`color${B(n)}`,o&&"disabled",r&&"error",l&&"fullWidth",s&&"focused",a&&"formControl",g&&g!=="medium"&&`size${B(g)}`,d&&"multiline",b&&"adornedStart",i&&"adornedEnd",c&&"hiddenLabel",f&&"readOnly"],input:["input",o&&"disabled",m==="search"&&"inputTypeSearch",d&&"inputMultiline",g==="small"&&"inputSizeSmall",c&&"inputHiddenLabel",b&&"inputAdornedStart",i&&"inputAdornedEnd",f&&"readOnly"]};return K(h,bp,t)},$o=T("div",{name:"MuiInputBase",slot:"Root",overridesResolver:Co})(({theme:e,ownerState:t})=>u({},e.typography.body1,{color:(e.vars||e).palette.text.primary,lineHeight:"1.4375em",boxSizing:"border-box",position:"relative",cursor:"text",display:"inline-flex",alignItems:"center",[`&.${Lt.disabled}`]:{color:(e.vars||e).palette.text.disabled,cursor:"default"}},t.multiline&&u({padding:"4px 0 5px"},t.size==="small"&&{paddingTop:1}),t.fullWidth&&{width:"100%"})),So=T("input",{name:"MuiInputBase",slot:"Input",overridesResolver:Ro})(({theme:e,ownerState:t})=>{const n=e.palette.mode==="light",o=u({color:"currentColor"},e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:n?.42:.5},{transition:e.transitions.create("opacity",{duration:e.transitions.duration.shorter})}),r={opacity:"0 !important"},i=e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:n?.42:.5};return u({font:"inherit",letterSpacing:"inherit",color:"currentColor",padding:"4px 0 5px",border:0,boxSizing:"content-box",background:"none",height:"1.4375em",margin:0,WebkitTapHighlightColor:"transparent",display:"block",minWidth:0,width:"100%",animationName:"mui-auto-fill-cancel",animationDuration:"10ms","&::-webkit-input-placeholder":o,"&::-moz-placeholder":o,"&:-ms-input-placeholder":o,"&::-ms-input-placeholder":o,"&:focus":{outline:0},"&:invalid":{boxShadow:"none"},"&::-webkit-search-decoration":{WebkitAppearance:"none"},[`label[data-shrink=false] + .${Lt.formLine truncated
|
|
||||||
0% {
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
transform: rotate(360deg);
|
|
||||||
}
|
|
||||||
`)),xf=Ft(xi||(xi=ko`
|
|
||||||
0% {
|
|
||||||
stroke-dasharray: 1px, 200px;
|
|
||||||
stroke-dashoffset: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
50% {
|
|
||||||
stroke-dasharray: 100px, 200px;
|
|
||||||
stroke-dashoffset: -15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
stroke-dasharray: 100px, 200px;
|
|
||||||
stroke-dashoffset: -125px;
|
|
||||||
}
|
|
||||||
`)),Cf=e=>{const{classes:t,variant:n,color:o,disableShrink:r}=e,i={root:["root",n,`color${B(o)}`],svg:["svg"],circle:["circle",`circle${B(n)}`,r&&"circleDisableShrink"]};return K(i,vf,t)},Rf=T("span",{name:"MuiCircularProgress",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],t[`color${B(n.color)}`]]}})(({ownerState:e,theme:t})=>u({display:"inline-block"},e.variant==="determinate"&&{transition:t.transitions.create("transform")},e.color!=="inherit"&&{color:(t.vars||t).palette[e.color].main}),({ownerState:e})=>e.variant==="indeterminate"&&Qn(Ci||(Ci=ko`
|
|
||||||
animation: ${0} 1.4s linear infinite;
|
|
||||||
`),yf)),$f=T("svg",{name:"MuiCircularProgress",slot:"Svg",overridesResolver:(e,t)=>t.svg})({display:"block"}),Sf=T("circle",{name:"MuiCircularProgress",slot:"Circle",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.circle,t[`circle${B(n.variant)}`],n.disableShrink&&t.circleDisableShrink]}})(({ownerState:e,theme:t})=>u({stroke:"currentColor"},e.variant==="determinate"&&{transition:t.transitions.create("stroke-dashoffset")},e.variant==="indeterminate"&&{strokeDasharray:"80px, 200px",strokeDashoffset:0}),({ownerState:e})=>e.variant==="indeterminate"&&!e.disableShrink&&Qn(Ri||(Ri=ko`
|
|
||||||
animation: ${0} 1.4s ease-in-out infinite;
|
|
||||||
`),xf)),Rv=p.forwardRef(function(t,n){const o=G({props:t,name:"MuiCircularProgress"}),{className:r,color:i="primary",disableShrink:s=!1,size:a=40,style:l,thickness:c=3.6,value:d=0,variant:f="indeterminate"}=o,g=O(o,bf),b=u({},o,{color:i,disableShrink:s,size:a,thickness:c,value:d,variant:f}),m=Cf(b),h={},C={},v={};if(f==="determinate"){const $=2*Math.PI*((pt-c)/2);h.strokeDasharray=$.toFixed(3),v["aria-valuenow"]=Math.round(d),h.strokeDashoffset=`${((100-d)/100*$).toFixed(3)}px`,C.transform="rotate(-90deg)"}return R.jsx(Rf,u({className:F(m.root,r),style:u({width:a,height:a},C,l),ownerState:b,ref:n,role:"progressbar"},v,g,{children:R.jsx($f,{className:m.svg,ownerState:b,viewBox:`${pt/2} ${pt/2} ${pt} ${pt}`,children:R.jsx(Sf,{className:m.circle,style:h,ownerState:b,cx:pt,cy:pt,r:(pt-c)/2,fill:"none",strokeWidth:c})})}))});function $i(e){return e.substring(2).toLowerCase()}function kf(e,t){return t.documentElement.clientWidth<e.clientX||t.documentElement.clientHeight<e.clientY}function Pf(e){const{children:t,disableReactTree:n=!1,mouseEvent:o="onClick",onClickAway:r,touchEvent:i="onTouchEnd"}=e,s=p.useRef(!1),a=p.useRef(null),l=p.useRef(!1),c=p.useRef(!1);p.useEffect(()=>(setTimeout(()=>{l.current=!0},0),()=>{l.current=!1}),[]);const d=Re(t.ref,a),f=at(m=>{const h=c.current;c.current=!1;const C=Ee(a.current);if(!l.current||!a.current||"clientX"in m&&kf(m,C))return;if(s.current){s.current=!1;return}let v;m.composedPath?v=m.composedPath().indexOf(a.current)>-1:v=!C.documentElement.contains(m.target)||a.current.contains(m.target),!v&&(n||!h)&&r(m)}),g=m=>h=>{c.current=!0;const C=t.props[m];C&&C(h)},b={ref:d};return i!==!1&&(b[i]=g(i)),p.useEffect(()=>{if(i!==!1){const m=$i(i),h=Ee(a.current),C=()=>{s.current=!0};return h.addEventListener(m,f),h.addEventListener("touchmove",C),()=>{h.removeEventListener(m,f),h.removeEventListener("touchmove",C)}}},[f,i]),o!==!1&&(b[o]=g(o)),p.useEffect(()=>{if(o!==!1){const m=$i(o),h=Ee(a.current);return h.addEventListener(m,f),()=>{h.removeEventListener(m,f)}}},[f,o]),R.jsx(p.Fragment,{children:p.cloneElement(t,b)})}function Ef(e){const t=Ee(e);return t.body===e?Ct(e).innerWidth>t.documentElement.clientWidth:e.scrollHeight>e.clientHeight}function tn(e,t){t?e.setAttribute("aria-hidden","true"):e.removeAttribute("aria-hidden")}function Si(e){return parseInt(Ct(e).getComputedStyle(e).paddingRight,10)||0}function wf(e){const n=["TEMPLATE","SCRIPT","STYLE","LINK","MAP","META","NOSCRIPT","PICTURE","COL","COLGROUP","PARAM","SLOT","SOURCE","TRACK"].indexOf(e.tagName)!==-1,o=e.tagName==="INPUT"&&e.getAttribute("type")==="hidden";return n||o}function ki(e,t,n,o,r){const i=[t,n,...o];[].forEach.call(e.children,s=>{const a=i.indexOf(s)===-1,l=!wf(s);a&&l&&tn(s,r)})}function Oo(e,t){let n=-1;return e.some((o,r)=>t(o)?(n=r,!0):!1),n}function Mf(e,t){const n=[],o=e.container;if(!t.disableScrollLock){if(Ef(o)){const s=Ms(Ee(o));n.push({value:o.style.paddingRight,property:"padding-right",el:o}),o.style.paddingRight=`${Si(o)+s}px`;const a=Ee(o).querySelectorAll(".mui-fixed");[].forEach.call(a,l=>{n.push({value:l.style.paddingRight,property:"padding-right",el:l}),l.style.paddingRight=`${Si(l)+s}px`})}let i;if(o.parentNode instanceof DocumentFragment)i=Ee(o).body;else{const s=o.parentElement,a=Ct(o);i=(s==null?void 0:s.nodeName)==="HTML"&&a.getComputedStyle(s).overflowY==="scroll"?s:o}n.push({value:i.style.overflow,property:"overflow",el:i},{value:i.style.overflowX,property:"overflow-x",el:i},{value:i.style.overflowY,property:"overflow-y",el:i}),i.style.overflow="hidden"}return()=>{n.forEach(({value:i,el:s,property:a})=>{i?s.style.setProperty(a,i):s.style.removeProperty(a)})}}function Tf(e){const t=[];return[].forEach.call(e.children,n=>{n.getAttribute("aria-hidden")==="true"&&t.push(n)}),t}class If{constructor(){this.containers=void 0,this.modals=void 0,this.modals=[],this.containers=[]}add(t,n){let o=this.modals.indexOf(t);if(o!==-1)return o;o=this.modals.length,this.modals.push(t),t.modalRef&&tn(t.modalRef,!1);const r=Tf(n);ki(n,t.mount,t.modalRef,r,!0);const i=Oo(this.containers,s=>s.container===n);return i!==-1?(this.containers[i].modals.push(t),o):(this.containers.push({modals:[t],container:n,restore:null,hiddenSiblings:r}),o)}mount(t,n){const o=Oo(this.containers,i=>i.modals.indexOf(t)!==-1),r=this.containers[o];r.restore||(r.restore=Mf(r,n))}remove(t,n=!0){const o=this.modals.indexOf(t);if(o===-1)return o;const r=Oo(this.containers,s=>s.modals.indexOf(t)!==-1),i=this.containers[r];if(i.modals.splice(i.modals.indexOf(t),1),this.modals.splice(o,1),i.modals.length===0)i.restore&&i.restore(),t.modalRef&&tn(t.modalRef,n),ki(i.container,t.mount,t.modalRef,i.hiddenSiblings,!1),this.containers.splice(r,1);else{const s=i.modals[i.modals.length-1];s.modalRef&&tn(s.modalRef,!1)}return o}isTopModal(t){return this.modals.length>0&&this.modals[this.modals.length-1]===t}}const Of=["input","select","textarea","a[href]","button","[tabindex]","audio[controls]","video[controls]",'[contenteditable]:not([co
Line truncated
|
|
||||||
Vendored
+178
@@ -0,0 +1,178 @@
|
|||||||
|
import{r as p,R as jo,g as gt,a as st,b as yn,c as ga}from"./react-DXd9vB-a.js";var es={exports:{}},jn={};/**
|
||||||
|
* @license React
|
||||||
|
* react-jsx-runtime.production.min.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/var ha=p,ba=Symbol.for("react.element"),va=Symbol.for("react.fragment"),ya=Object.prototype.hasOwnProperty,xa=ha.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Ca={key:!0,ref:!0,__self:!0,__source:!0};function ts(e,t,n){var o,r={},i=null,s=null;n!==void 0&&(i=""+n),t.key!==void 0&&(i=""+t.key),t.ref!==void 0&&(s=t.ref);for(o in t)ya.call(t,o)&&!Ca.hasOwnProperty(o)&&(r[o]=t[o]);if(e&&e.defaultProps)for(o in t=e.defaultProps,t)r[o]===void 0&&(r[o]=t[o]);return{$$typeof:ba,type:e,key:i,ref:s,props:r,_owner:xa.current}}jn.Fragment=va;jn.jsx=ts;jn.jsxs=ts;es.exports=jn;var C=es.exports;const sn={black:"#000",white:"#fff"},Et={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},Mt={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},wt={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},Tt={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},It={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},qt={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},$a={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"};function Ct(e){let t="https://mui.com/production-error/?code="+e;for(let n=1;n<arguments.length;n+=1)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified MUI error #"+e+"; visit "+t+" for the full message."}const Ra=Object.freeze(Object.defineProperty({__proto__:null,default:Ct},Symbol.toStringTag,{value:"Module"})),Dn="$$material";function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)({}).hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},u.apply(null,arguments)}function O(e,t){if(e==null)return{};var n={};for(var o in e)if({}.hasOwnProperty.call(e,o)){if(t.includes(o))continue;n[o]=e[o]}return n}function ns(e){var t=Object.create(null);return function(n){return t[n]===void 0&&(t[n]=e(n)),t[n]}}var Sa=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|fLine truncated
|
||||||
|
* react-is.production.min.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/var Re=typeof Symbol=="function"&&Symbol.for,sr=Re?Symbol.for("react.element"):60103,ar=Re?Symbol.for("react.portal"):60106,Vn=Re?Symbol.for("react.fragment"):60107,Kn=Re?Symbol.for("react.strict_mode"):60108,Gn=Re?Symbol.for("react.profiler"):60114,qn=Re?Symbol.for("react.provider"):60109,Xn=Re?Symbol.for("react.context"):60110,lr=Re?Symbol.for("react.async_mode"):60111,Yn=Re?Symbol.for("react.concurrent_mode"):60111,Zn=Re?Symbol.for("react.forward_ref"):60112,Qn=Re?Symbol.for("react.suspense"):60113,tl=Re?Symbol.for("react.suspense_list"):60120,Jn=Re?Symbol.for("react.memo"):60115,eo=Re?Symbol.for("react.lazy"):60116,nl=Re?Symbol.for("react.block"):60121,ol=Re?Symbol.for("react.fundamental"):60117,rl=Re?Symbol.for("react.responder"):60118,il=Re?Symbol.for("react.scope"):60119;function ze(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case sr:switch(e=e.type,e){case lr:case Yn:case Vn:case Gn:case Kn:case Qn:return e;default:switch(e=e&&e.$$typeof,e){case Xn:case Zn:case eo:case Jn:case qn:return e;default:return t}}case ar:return t}}}function ps(e){return ze(e)===Yn}ee.AsyncMode=lr;ee.ConcurrentMode=Yn;ee.ContextConsumer=Xn;ee.ContextProvider=qn;ee.Element=sr;ee.ForwardRef=Zn;ee.Fragment=Vn;ee.Lazy=eo;ee.Memo=Jn;ee.Portal=ar;ee.Profiler=Gn;ee.StrictMode=Kn;ee.Suspense=Qn;ee.isAsyncMode=function(e){return ps(e)||ze(e)===lr};ee.isConcurrentMode=ps;ee.isContextConsumer=function(e){return ze(e)===Xn};ee.isContextProvider=function(e){return ze(e)===qn};ee.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===sr};ee.isForwardRef=function(e){return ze(e)===Zn};ee.isFragment=function(e){return ze(e)===Vn};ee.isLazy=function(e){return ze(e)===eo};ee.isMemo=function(e){return ze(e)===Jn};ee.isPortal=function(e){return ze(e)===ar};ee.isProfiler=function(e){return ze(e)===Gn};ee.isStrictMode=function(e){return ze(e)===Kn};ee.isSuspense=function(e){return ze(e)===Qn};ee.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===Vn||e===Yn||e===Gn||e===Kn||e===Qn||e===tl||typeof e=="object"&&e!==null&&(e.$$typeof===eo||e.$$typeof===Jn||e.$$typeof===qn||e.$$typeof===Xn||e.$$typeof===Zn||e.$$typeof===ol||e.$$typeof===rl||e.$$typeof===il||e.$$typeof===nl)};ee.typeOf=ze;ds.exports=ee;var sl=ds.exports,fs=sl,al={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},ll={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},ms={};ms[fs.ForwardRef]=al;ms[fs.Memo]=ll;var cl=!0;function ul(e,t,n){var o="";return n.split(" ").forEach(function(r){e[r]!==void 0?t.push(e[r]+";"):o+=r+" "}),o}var gs=function(t,n,o){var r=t.key+"-"+n.name;(o===!1||cl===!1)&&t.registered[r]===void 0&&(t.registered[r]=n.styles)},hs=function(t,n,o){gs(t,n,o);var r=t.key+"-"+n.name;if(t.inserted[n.name]===void 0){var i=n;do t.insert(n===i?"."+r:"",i,t.sheet,!0),i=i.next;while(i!==void 0)}};function dl(e){for(var t=0,n,o=0,r=e.length;r>=4;++o,r-=4)n=e.charCodeAt(o)&255|(e.charCodeAt(++o)&255)<<8|(e.charCodeAt(++o)&255)<<16|(e.charCodeAt(++o)&255)<<24,n=(n&65535)*1540483477+((n>>>16)*59797<<16),n^=n>>>24,t=(n&65535)*1540483477+((n>>>16)*59797<<16)^(t&65535)*1540483477+((t>>>16)*59797<<16);switch(r){case 3:t^=(e.charCodeAt(o+2)&255)<<16;case 2:t^=(e.charCodeAt(o+1)&255)<<8;case 1:t^=e.charCodeAt(o)&255,t=(t&65535)*1540483477+((t>>>16)*59797<<16)}return t^=t>>>13,t=(t&65535)*1540483477+((t>>>16)*59797<<16),((t^t>>>15)>>>0).toString(36)}var pl={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},fl=!1,ml=/[A-Z]|^ms/g,gl=/_EMO_([^_]+?)_([^]*?)_EMO_/g,bs=function(t){return t.charCodeAt(1)===45},jr=function(t){return t!=null&&typeof t!="boolean"},wo=ns(function(e){return bs(e)?e:e.replace(ml,"-$&").toLowerCase()}),Dr=function(t,n){switch(t){case"animation":case"animationName":if(typeof n=="string")return n.replace(gl,function(o,r,i){return et={name:r,styles:i,next:et},r})}return pl[t]!==1&&!bs(t)&&typeof n=="number"&&n!==0?n+"px":n},hl="Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform.";function cn(e,t,n){if(n==null)return"";var o=n;if(o.__emotion_styles!==void 0)return o;switch(typeof n){case"boolean":return"";case"object":{var r=n;if(r.anim===1)return et={name:r.name,styles:r.styles,next:et},r.name;var i=n;if(i.styles!==void 0){var s=i.next;if(s!==void 0)for(;s!==void 0;)et={namLine truncated
|
||||||
|
* @license React
|
||||||
|
* react-is.production.min.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/var hr=Symbol.for("react.element"),br=Symbol.for("react.portal"),co=Symbol.for("react.fragment"),uo=Symbol.for("react.strict_mode"),po=Symbol.for("react.profiler"),fo=Symbol.for("react.provider"),mo=Symbol.for("react.context"),Lc=Symbol.for("react.server_context"),go=Symbol.for("react.forward_ref"),ho=Symbol.for("react.suspense"),bo=Symbol.for("react.suspense_list"),vo=Symbol.for("react.memo"),yo=Symbol.for("react.lazy"),zc=Symbol.for("react.offscreen"),As;As=Symbol.for("react.module.reference");function Ye(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case hr:switch(e=e.type,e){case co:case po:case uo:case ho:case bo:return e;default:switch(e=e&&e.$$typeof,e){case Lc:case mo:case go:case yo:case vo:case fo:return e;default:return t}}case br:return t}}}te.ContextConsumer=mo;te.ContextProvider=fo;te.Element=hr;te.ForwardRef=go;te.Fragment=co;te.Lazy=yo;te.Memo=vo;te.Portal=br;te.Profiler=po;te.StrictMode=uo;te.Suspense=ho;te.SuspenseList=bo;te.isAsyncMode=function(){return!1};te.isConcurrentMode=function(){return!1};te.isContextConsumer=function(e){return Ye(e)===mo};te.isContextProvider=function(e){return Ye(e)===fo};te.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===hr};te.isForwardRef=function(e){return Ye(e)===go};te.isFragment=function(e){return Ye(e)===co};te.isLazy=function(e){return Ye(e)===yo};te.isMemo=function(e){return Ye(e)===vo};te.isPortal=function(e){return Ye(e)===br};te.isProfiler=function(e){return Ye(e)===po};te.isStrictMode=function(e){return Ye(e)===uo};te.isSuspense=function(e){return Ye(e)===ho};te.isSuspenseList=function(e){return Ye(e)===bo};te.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===co||e===po||e===uo||e===ho||e===bo||e===zc||typeof e=="object"&&e!==null&&(e.$$typeof===yo||e.$$typeof===vo||e.$$typeof===fo||e.$$typeof===mo||e.$$typeof===go||e.$$typeof===As||e.getModuleId!==void 0)};te.typeOf=Ye;Os.exports=te;var Xr=Os.exports;const Fc=/^\s*function(?:\s|\s*\/\*.*\*\/\s*)+([^(\s/]*)\s*/;function Ns(e){const t=`${e}`.match(Fc);return t&&t[1]||""}function _s(e,t=""){return e.displayName||e.name||Ns(e)||t}function Yr(e,t,n){const o=_s(t);return e.displayName||(o!==""?`${n}(${o})`:n)}function jc(e){if(e!=null){if(typeof e=="string")return e;if(typeof e=="function")return _s(e,"Component");if(typeof e=="object")switch(e.$$typeof){case Xr.ForwardRef:return Yr(e,e.render,"ForwardRef");case Xr.Memo:return Yr(e,e.type,"memo");default:return}}}const Dc=Object.freeze(Object.defineProperty({__proto__:null,default:jc,getFunctionName:Ns},Symbol.toStringTag,{value:"Module"}));function un(e,t){const n=u({},t);return Object.keys(e).forEach(o=>{if(o.toString().match(/^(components|slots)$/))n[o]=u({},e[o],n[o]);else if(o.toString().match(/^(componentsProps|slotProps)$/)){const r=e[o]||{},i=t[o];n[o]={},!i||!Object.keys(i)?n[o]=r:!r||!Object.keys(r)?n[o]=i:(n[o]=u({},i),Object.keys(r).forEach(s=>{n[o][s]=un(r[s],i[s])}))}else n[o]===void 0&&(n[o]=e[o])}),n}function Wc(e){const{theme:t,name:n,props:o}=e;return!t||!t.components||!t.components[n]||!t.components[n].defaultProps?o:un(t.components[n].defaultProps,o)}const lt=typeof window<"u"?p.useLayoutEffect:p.useEffect;function Uc(e,t,n,o,r){const[i,s]=p.useState(()=>r&&n?n(e).matches:o?o(e).matches:t);return lt(()=>{let a=!0;if(!n)return;const l=n(e),c=()=>{a&&s(l.matches)};return c(),l.addListener(c),()=>{a=!1,l.removeListener(c)}},[e,n]),i}const Bs=p.useSyncExternalStore;function Hc(e,t,n,o,r){const i=p.useCallback(()=>t,[t]),s=p.useMemo(()=>{if(r&&n)return()=>n(e).matches;if(o!==null){const{matches:d}=o(e);return()=>d}return i},[i,e,o,r,n]),[a,l]=p.useMemo(()=>{if(n===null)return[i,()=>()=>{}];const d=n(e);return[()=>d.matches,f=>(d.addListener(f),()=>{d.removeListener(f)})]},[i,n,e]);return Bs(l,a,s)}function Tb(e,t={}){const n=ws(),o=typeof window<"u"&&typeof window.matchMedia<"u",{defaultMatches:r=!1,matchMedia:i=o?window.matchMedia:null,ssrMatchMedia:s=null,noSsr:a=!1}=Wc({name:"MuiUseMediaQuery",props:t,theme:n});let l=typeof e=="function"?e(n):e;return l=l.replace(/^@media( ?)/m,""),(Bs!==void 0?Hc:Uc)(l,r,i,s,a)}function Vc(e,t=Number.MIN_SAFE_INTEGER,n=Number.MAX_SAFE_INTEGER){return Math.max(t,Math.min(e,n))}const Kc=Object.freeze(Object.defineProperty({__proto__:null,default:Vc},Symbol.toStringTag,{value:"Module"}));function Zr(...e){return e.reduce((t,n)=>n==null?t:function(...r){t.apply(this,r),n.apply(this,r)},()=>{})}function Ls(e,t=166){let n;function o(...r){const i=()=>{e.apply(this,r)};clearTimeout(n),n=setTimeout(i,t)}return o.clear=()=>{clearTimeout(n)},o}function To(e,t){var n,o;return p.isValidElement(e)&&t.indexOf((n=e.type.muiName)!=null?n:(o=e.type)==null||(o=o._payload)==null||(o=o.value)==null?void 0:o.muiName)!==-1}function Ee(e){return e&&e.ownerDocument||document}function $t(e){return Ee(e).defaultView||window}function Vo(e,t){typeof e=="function"?e(t):e&&(e.current=t)}let Qr=0;function Gc(e){const[t,n]=p.useState(e),o=e||t;return p.usLine truncated
|
||||||
|
0% {
|
||||||
|
transform: scale(0);
|
||||||
|
opacity: 0.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: scale(1);
|
||||||
|
opacity: 0.3;
|
||||||
|
}
|
||||||
|
`)),Bd=ct(mi||(mi=$o`
|
||||||
|
0% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
`)),Ld=ct(gi||(gi=$o`
|
||||||
|
0% {
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
transform: scale(0.92);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
`)),zd=M("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),Fd=M(Od,{name:"MuiTouchRipple",slot:"Ripple"})(hi||(hi=$o`
|
||||||
|
opacity: 0;
|
||||||
|
position: absolute;
|
||||||
|
|
||||||
|
&.${0} {
|
||||||
|
opacity: 0.3;
|
||||||
|
transform: scale(1);
|
||||||
|
animation-name: ${0};
|
||||||
|
animation-duration: ${0}ms;
|
||||||
|
animation-timing-function: ${0};
|
||||||
|
}
|
||||||
|
|
||||||
|
&.${0} {
|
||||||
|
animation-duration: ${0}ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
& .${0} {
|
||||||
|
opacity: 1;
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
& .${0} {
|
||||||
|
opacity: 0;
|
||||||
|
animation-name: ${0};
|
||||||
|
animation-duration: ${0}ms;
|
||||||
|
animation-timing-function: ${0};
|
||||||
|
}
|
||||||
|
|
||||||
|
& .${0} {
|
||||||
|
position: absolute;
|
||||||
|
/* @noflip */
|
||||||
|
left: 0px;
|
||||||
|
top: 0;
|
||||||
|
animation-name: ${0};
|
||||||
|
animation-duration: 2500ms;
|
||||||
|
animation-timing-function: ${0};
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
animation-delay: 200ms;
|
||||||
|
}
|
||||||
|
`),Ve.rippleVisible,_d,Jo,({theme:e})=>e.transitions.easing.easeInOut,Ve.ripplePulsate,({theme:e})=>e.transitions.duration.shorter,Ve.child,Ve.childLeaving,Bd,Jo,({theme:e})=>e.transitions.easing.easeInOut,Ve.childPulsate,Ld,({theme:e})=>e.transitions.easing.easeInOut),jd=p.forwardRef(function(t,n){const o=G({props:t,name:"MuiTouchRipple"}),{center:r=!1,classes:i={},className:s}=o,a=O(o,Ad),[l,c]=p.useState([]),d=p.useRef(0),f=p.useRef(null);p.useEffect(()=>{f.current&&(f.current(),f.current=null)},[l]);const h=p.useRef(!1),b=yr(),m=p.useRef(null),g=p.useRef(null),$=p.useCallback(x=>{const{pulsate:S,rippleX:P,rippleY:k,rippleSize:w,cb:E}=x;c(T=>[...T,C.jsx(Fd,{classes:{ripple:F(i.ripple,Ve.ripple),rippleVisible:F(i.rippleVisible,Ve.rippleVisible),ripplePulsate:F(i.ripplePulsate,Ve.ripplePulsate),child:F(i.child,Ve.child),childLeaving:F(i.childLeaving,Ve.childLeaving),childPulsate:F(i.childPulsate,Ve.childPulsate)},timeout:Jo,pulsate:S,rippleX:P,rippleY:k,rippleSize:w},d.current)]),d.current+=1,f.current=E},[i]),v=p.useCallback((x={},S={},P=()=>{})=>{const{pulsate:k=!1,center:w=r||S.pulsate,fakeElement:E=!1}=S;if((x==null?void 0:x.type)==="mousedown"&&h.current){h.current=!1;return}(x==null?void 0:x.type)==="touchstart"&&(h.current=!0);const T=E?null:g.current,D=T?T.getBoundingClientRect():{width:0,height:0,left:0,top:0};let z,L,_;if(w||x===void 0||x.clientX===0&&x.clientY===0||!x.clientX&&!x.touches)z=Math.round(D.width/2),L=Math.round(D.height/2);else{const{clientX:B,clientY:N}=x.touches&&x.touches.length>0?x.touches[0]:x;z=Math.round(B-D.left),L=Math.round(N-D.top)}if(w)_=Math.sqrt((2*D.width**2+D.height**2)/3),_%2===0&&(_+=1);else{const B=Math.max(Math.abs((T?T.clientWidth:0)-z),z)*2+2,N=Math.max(Math.abs((T?T.clientHeight:0)-L),L)*2+2;_=Math.sqrt(B**2+N**2)}x!=null&&x.touches?m.current===null&&(m.current=()=>{$({pulsate:k,rippleX:z,rippleY:L,rippleSize:_,cb:P})},b.start(Nd,()=>{m.current&&(m.current(),m.current=null)})):$({pulsate:k,rippleX:z,rippleY:L,rippleSize:_,cb:P})},[r,$,b]),R=p.useCallback(()=>{v({},{pulsate:!0})},[v]),y=p.useCallback((x,S)=>{if(b.clear(),(x==null?void 0:x.type)==="touchend"&&m.current){m.current(),m.current=null,b.start(0,()=>{y(x,S)});return}m.current=null,c(P=>P.length>0?P.slice(1):P),f.current=S},[b]);return p.useImperativeHandle(n,()=>({pulsate:R,start:v,stop:y}),[R,v,y]),C.jsx(zd,u({className:F(Ve.root,i.root,s),ref:g},a,{children:C.jsx(Pr,{component:null,exit:!0,children:l})}))});function Dd(e){return V("MuiButtonBase",e)}const Wd=U("MuiButtonBase",["root","disabled","focusVisible"]),Ud=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],Hd=e=>{const{disabled:t,focusVisible:n,focusVisibleClassName:o,classes:r}=e,s=K({root:["root",t&&"disabled",n&&"focusVisible"]},Dd,r);return n&&o&&(s.root+=` ${o}`),s},Vd=M("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(e,t)=>t.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${Wd.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),Ro=p.forwardRef(function(t,n){const o=G({props:t,name:"MuiButtonBase"}),{action:r,centerRipple:i=!1,children:s,className:a,component:l="button",disabled:c=!1,disableRipple:d=!1,disableTouchRipple:f=!1,focusRipple:h=!1,LinkComponent:b="a",onBlur:m,onClick:g,onContextMenu:$,onDragLeave:v,onFocus:R,onFocusVisible:y,onKeyDown:x,onKeyUp:S,onMouseDown:P,onMouseLeave:k,onMouseUp:w,onTouchEnd:E,onTouchMove:T,onTouchStart:D,tabIndex:z=0,TouchRippleProps:L,touchRippleRef:_,type:B}=o,N=O(o,Ud),j=p.useRef(null),A=p.useRef(null),Y=$e(A,_),{isFocusVisibleRef:ie,onFocus:we,onBlur:he,ref:fe}=zs(),[X,se]=p.useState(!1);c&&X&&se(!1),p.useImperativeHandle(r,()=>({focusVisible:()=>{se(!0),j.current.focus()}}),[]);const[ae,Te]=p.useState(!1);p.useEffect(()=>{Te(!0)},[]);const Me=ae&&!d&&!c;p.useEffect(()=>{X&&h&&!d&&ae&&A.current.pulsate()},[d,h,X,ae]);function be(H,it,Kt=f){return at(Gt=>(it&&it(Gt),!Kt&&A.current&&A.current[H](Gt),!0))}const Ie=be("start",P),J=be("stop",$),de=be("stop",v),q=be("stop",w),ne=be("stop",H=>{X&&H.preventDefault(),k&&k(H)}),le=be("start",D),ut=be("stop",E),je=be("stop",T),De=be("stop",H=>{he(H),ie.current===!1&&se(!1),m&&m(H)},!1),Ze=at(H=>{j.current||(j.current=H.currentTarget),we(H),ie.current===!0&&(se(!0),y&&y(H)),R&&R(H)}),We=()=>{con
Line truncated
|
||||||
|
`&&(x.value+=" ");const S=y.boxSizing,P=Rn(y.paddingBottom)+Rn(y.paddingTop),k=Rn(y.borderBottomWidth)+Rn(y.borderTopWidth),w=x.scrollHeight;x.value="x";const E=x.scrollHeight;let T=w;i&&(T=Math.max(Number(i)*E,T)),r&&(T=Math.min(Number(r)*E,T)),T=Math.max(T,E);const D=T+(S==="border-box"?P+k:0),z=Math.abs(T-w)<=1;return{outerHeightStyle:D,overflowing:z}},[r,i,t.placeholder]),g=p.useCallback(()=>{const v=m();if(Rp(v))return;const R=v.outerHeightStyle,y=d.current;h.current!==R&&(h.current=R,y.style.height=`${R}px`),y.style.overflow=v.overflowing?"hidden":""},[m]);lt(()=>{const v=()=>{g()};let R;const y=Ls(v),x=d.current,S=$t(x);S.addEventListener("resize",y);let P;return typeof ResizeObserver<"u"&&(P=new ResizeObserver(v),P.observe(x)),()=>{y.clear(),cancelAnimationFrame(R),S.removeEventListener("resize",y),P&&P.disconnect()}},[m,g]),lt(()=>{g()});const $=v=>{c||g(),o&&o(v)};return C.jsxs(p.Fragment,{children:[C.jsx("textarea",u({value:a,onChange:$,ref:f,rows:i,style:s},l)),C.jsx("textarea",{"aria-hidden":!0,className:t.className,readOnly:!0,ref:b,tabIndex:-1,style:u({},$p.shadow,s,{paddingTop:0,paddingBottom:0})})]})});function Ut({props:e,states:t,muiFormControl:n}){return t.reduce((o,r)=>(o[r]=e[r],n&&typeof e[r]>"u"&&(o[r]=n[r]),o),{})}const Er=p.createContext(void 0);function Ht(){return p.useContext(Er)}function kp(e){return C.jsx(wc,u({},e,{defaultTheme:Sr,themeId:Dn}))}function Ci(e){return e!=null&&!(Array.isArray(e)&&e.length===0)}function Fn(e,t=!1){return e&&(Ci(e.value)&&e.value!==""||t&&Ci(e.defaultValue)&&e.defaultValue!=="")}function Pp(e){return e.startAdornment}function Ep(e){return V("MuiInputBase",e)}const Ft=U("MuiInputBase",["root","formControl","focused","disabled","adornedStart","adornedEnd","error","sizeSmall","multiline","colorSecondary","fullWidth","hiddenLabel","readOnly","input","inputSizeSmall","inputMultiline","inputTypeSearch","inputAdornedStart","inputAdornedEnd","inputHiddenLabel"]),Mp=["aria-describedby","autoComplete","autoFocus","className","color","components","componentsProps","defaultValue","disabled","disableInjectingGlobalStyles","endAdornment","error","fullWidth","id","inputComponent","inputProps","inputRef","margin","maxRows","minRows","multiline","name","onBlur","onChange","onClick","onFocus","onKeyDown","onKeyUp","placeholder","readOnly","renderSuffix","rows","size","slotProps","slots","startAdornment","type","value"],So=(e,t)=>{const{ownerState:n}=e;return[t.root,n.formControl&&t.formControl,n.startAdornment&&t.adornedStart,n.endAdornment&&t.adornedEnd,n.error&&t.error,n.size==="small"&&t.sizeSmall,n.multiline&&t.multiline,n.color&&t[`color${I(n.color)}`],n.fullWidth&&t.fullWidth,n.hiddenLabel&&t.hiddenLabel]},ko=(e,t)=>{const{ownerState:n}=e;return[t.input,n.size==="small"&&t.inputSizeSmall,n.multiline&&t.inputMultiline,n.type==="search"&&t.inputTypeSearch,n.startAdornment&&t.inputAdornedStart,n.endAdornment&&t.inputAdornedEnd,n.hiddenLabel&&t.inputHiddenLabel]},wp=e=>{const{classes:t,color:n,disabled:o,error:r,endAdornment:i,focused:s,formControl:a,fullWidth:l,hiddenLabel:c,multiline:d,readOnly:f,size:h,startAdornment:b,type:m}=e,g={root:["root",`color${I(n)}`,o&&"disabled",r&&"error",l&&"fullWidth",s&&"focused",a&&"formControl",h&&h!=="medium"&&`size${I(h)}`,d&&"multiline",b&&"adornedStart",i&&"adornedEnd",c&&"hiddenLabel",f&&"readOnly"],input:["input",o&&"disabled",m==="search"&&"inputTypeSearch",d&&"inputMultiline",h==="small"&&"inputSizeSmall",c&&"inputHiddenLabel",b&&"inputAdornedStart",i&&"inputAdornedEnd",f&&"readOnly"]};return K(g,Ep,t)},Po=M("div",{name:"MuiInputBase",slot:"Root",overridesResolver:So})(({theme:e,ownerState:t})=>u({},e.typography.body1,{color:(e.vars||e).palette.text.primary,lineHeight:"1.4375em",boxSizing:"border-box",position:"relative",cursor:"text",display:"inline-flex",alignItems:"center",[`&.${Ft.disabled}`]:{color:(e.vars||e).palette.text.disabled,cursor:"default"}},t.multiline&&u({padding:"4px 0 5px"},t.size==="small"&&{paddingTop:1}),t.fullWidth&&{width:"100%"})),Eo=M("input",{name:"MuiInputBase",slot:"Input",overridesResolver:ko})(({theme:e,ownerState:t})=>{const n=e.palette.mode==="light",o=u({color:"currentColor"},e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:n?.42:.5},{transition:e.transitions.create("opacity",{duration:e.transitions.duration.shorter})}),r={opacity:"0 !important"},i=e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:n?.42:.5};return u({font:"inherit",letterSpacing:"inherit",color:"currentColor",padding:"4px 0 5px",border:0,boxSizing:"content-box",background:"none",height:"1.4375em",margin:0,WebkitTapHighlightColor:"transparent",display:"block",minWidth:0,width:"100%",animationName:"mui-auto-fill-cancel",animationDuration:"10ms","&::-webkit-input-placeholder":o,"&::-moz-placeholder":o,"&:-ms-input-placeholder":o,"&::-ms-input-placeholder":o,"&:focus":{outline:0},"&:invalid":{boxShadow:"none"},"&::-webkit-search-decoration":{WebkitAppearance:"none"},[`label[data-shrink=false] + .${Ft.formLine truncated
|
||||||
|
0% {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
`)),wf=ct(Si||(Si=Mo`
|
||||||
|
0% {
|
||||||
|
stroke-dasharray: 1px, 200px;
|
||||||
|
stroke-dashoffset: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
stroke-dasharray: 100px, 200px;
|
||||||
|
stroke-dashoffset: -15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
stroke-dasharray: 100px, 200px;
|
||||||
|
stroke-dashoffset: -125px;
|
||||||
|
}
|
||||||
|
`)),Tf=e=>{const{classes:t,variant:n,color:o,disableShrink:r}=e,i={root:["root",n,`color${I(o)}`],svg:["svg"],circle:["circle",`circle${I(n)}`,r&&"circleDisableShrink"]};return K(i,Pf,t)},If=M("span",{name:"MuiCircularProgress",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],t[`color${I(n.color)}`]]}})(({ownerState:e,theme:t})=>u({display:"inline-block"},e.variant==="determinate"&&{transition:t.transitions.create("transform")},e.color!=="inherit"&&{color:(t.vars||t).palette[e.color].main}),({ownerState:e})=>e.variant==="indeterminate"&&St(ki||(ki=Mo`
|
||||||
|
animation: ${0} 1.4s linear infinite;
|
||||||
|
`),Mf)),Of=M("svg",{name:"MuiCircularProgress",slot:"Svg",overridesResolver:(e,t)=>t.svg})({display:"block"}),Af=M("circle",{name:"MuiCircularProgress",slot:"Circle",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.circle,t[`circle${I(n.variant)}`],n.disableShrink&&t.circleDisableShrink]}})(({ownerState:e,theme:t})=>u({stroke:"currentColor"},e.variant==="determinate"&&{transition:t.transitions.create("stroke-dashoffset")},e.variant==="indeterminate"&&{strokeDasharray:"80px, 200px",strokeDashoffset:0}),({ownerState:e})=>e.variant==="indeterminate"&&!e.disableShrink&&St(Pi||(Pi=Mo`
|
||||||
|
animation: ${0} 1.4s ease-in-out infinite;
|
||||||
|
`),wf)),jb=p.forwardRef(function(t,n){const o=G({props:t,name:"MuiCircularProgress"}),{className:r,color:i="primary",disableShrink:s=!1,size:a=40,style:l,thickness:c=3.6,value:d=0,variant:f="indeterminate"}=o,h=O(o,Ef),b=u({},o,{color:i,disableShrink:s,size:a,thickness:c,value:d,variant:f}),m=Tf(b),g={},$={},v={};if(f==="determinate"){const R=2*Math.PI*((ft-c)/2);g.strokeDasharray=R.toFixed(3),v["aria-valuenow"]=Math.round(d),g.strokeDashoffset=`${((100-d)/100*R).toFixed(3)}px`,$.transform="rotate(-90deg)"}return C.jsx(If,u({className:F(m.root,r),style:u({width:a,height:a},$,l),ownerState:b,ref:n,role:"progressbar"},v,h,{children:C.jsx(Of,{className:m.svg,ownerState:b,viewBox:`${ft/2} ${ft/2} ${ft} ${ft}`,children:C.jsx(Af,{className:m.circle,style:g,ownerState:b,cx:ft,cy:ft,r:(ft-c)/2,fill:"none",strokeWidth:c})})}))});function Ei(e){return e.substring(2).toLowerCase()}function Nf(e,t){return t.documentElement.clientWidth<e.clientX||t.documentElement.clientHeight<e.clientY}function _f(e){const{children:t,disableReactTree:n=!1,mouseEvent:o="onClick",onClickAway:r,touchEvent:i="onTouchEnd"}=e,s=p.useRef(!1),a=p.useRef(null),l=p.useRef(!1),c=p.useRef(!1);p.useEffect(()=>(setTimeout(()=>{l.current=!0},0),()=>{l.current=!1}),[]);const d=$e(t.ref,a),f=at(m=>{const g=c.current;c.current=!1;const $=Ee(a.current);if(!l.current||!a.current||"clientX"in m&&Nf(m,$))return;if(s.current){s.current=!1;return}let v;m.composedPath?v=m.composedPath().indexOf(a.current)>-1:v=!$.documentElement.contains(m.target)||a.current.contains(m.target),!v&&(n||!g)&&r(m)}),h=m=>g=>{c.current=!0;const $=t.props[m];$&&$(g)},b={ref:d};return i!==!1&&(b[i]=h(i)),p.useEffect(()=>{if(i!==!1){const m=Ei(i),g=Ee(a.current),$=()=>{s.current=!0};return g.addEventListener(m,f),g.addEventListener("touchmove",$),()=>{g.removeEventListener(m,f),g.removeEventListener("touchmove",$)}}},[f,i]),o!==!1&&(b[o]=h(o)),p.useEffect(()=>{if(o!==!1){const m=Ei(o),g=Ee(a.current);return g.addEventListener(m,f),()=>{g.removeEventListener(m,f)}}},[f,o]),C.jsx(p.Fragment,{children:p.cloneElement(t,b)})}function Bf(e){const t=Ee(e);return t.body===e?$t(e).innerWidth>t.documentElement.clientWidth:e.scrollHeight>e.clientHeight}function on(e,t){t?e.setAttribute("aria-hidden","true"):e.removeAttribute("aria-hidden")}function Mi(e){return parseInt($t(e).getComputedStyle(e).paddingRight,10)||0}function Lf(e){const n=["TEMPLATE","SCRIPT","STYLE","LINK","MAP","META","NOSCRIPT","PICTURE","COL","COLGROUP","PARAM","SLOT","SOURCE","TRACK"].indexOf(e.tagName)!==-1,o=e.tagName==="INPUT"&&e.getAttribute("type")==="hidden";return n||o}function wi(e,t,n,o,r){const i=[t,n,...o];[].forEach.call(e.children,s=>{const a=i.indexOf(s)===-1,l=!Lf(s);a&&l&&on(s,r)})}function _o(e,t){let n=-1;return e.some((o,r)=>t(o)?(n=r,!0):!1),n}function zf(e,t){const n=[],o=e.container;if(!t.disableScrollLock){if(Bf(o)){const s=Fs(Ee(o));n.push({value:o.style.paddingRight,property:"padding-right",el:o}),o.style.paddingRight=`${Mi(o)+s}px`;const a=Ee(o).querySelectorAll(".mui-fixed");[].forEach.call(a,l=>{n.push({value:l.style.paddingRight,property:"padding-right",el:l}),l.style.paddingRight=`${Mi(l)+s}px`})}let i;if(o.parentNode instanceof DocumentFragment)i=Ee(o).body;else{const s=o.parentElement,a=$t(o);i=(s==null?void 0:s.nodeName)==="HTML"&&a.getComputedStyle(s).overflowY==="scroll"?s:o}n.push({value:i.style.overflow,property:"overflow",el:i},{value:i.style.overflowX,property:"overflow-x",el:i},{value:i.style.overflowY,property:"overflow-y",el:i}),i.style.overflow="hidden"}return()=>{n.forEach(({value:i,el:s,property:a})=>{i?s.style.setProperty(a,i):s.style.removeProperty(a)})}}function Ff(e){const t=[];return[].forEach.call(e.children,n=>{n.getAttribute("aria-hidden")==="true"&&t.push(n)}),t}class jf{constructor(){this.containers=void 0,this.modals=void 0,this.modals=[],this.containers=[]}add(t,n){let o=this.modals.indexOf(t);if(o!==-1)return o;o=this.modals.length,this.modals.push(t),t.modalRef&&on(t.modalRef,!1);const r=Ff(n);wi(n,t.mount,t.modalRef,r,!0);const i=_o(this.containers,s=>s.container===n);return i!==-1?(this.containers[i].modals.push(t),o):(this.containers.push({modals:[t],container:n,restore:null,hiddenSiblings:r}),o)}mount(t,n){const o=_o(this.containers,i=>i.modals.indexOf(t)!==-1),r=this.containers[o];r.restore||(r.restore=zf(r,n))}remove(t,n=!0){const o=this.modals.indexOf(t);if(o===-1)return o;const r=_o(this.containers,s=>s.modals.indexOf(t)!==-1),i=this.containers[r];if(i.modals.splice(i.modals.indexOf(t),1),this.modals.splice(o,1),i.modals.length===0)i.restore&&i.restore(),t.modalRef&&on(t.modalRef,n),wi(i.container,t.mount,t.modalRef,i.hiddenSiblings,!1),this.containers.splice(r,1);else{const s=i.modals[i.modals.length-1];s.modalRef&&on(s.modalRef,!1)}return o}isTopModal(t){return this.modals.length>0&&this.modals[this.modals.length-1]===t}}const Df=["input","select","textarea","a[href]","button","[tabindex]","audio[controls]","video[controls]",'[contenteditable]:not([co
Line truncated
|
||||||
|
0% {
|
||||||
|
left: -35%;
|
||||||
|
right: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
60% {
|
||||||
|
left: 100%;
|
||||||
|
right: -90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
left: 100%;
|
||||||
|
right: -90%;
|
||||||
|
}
|
||||||
|
`)),Pg=ct(_i||(_i=Vt`
|
||||||
|
0% {
|
||||||
|
left: -200%;
|
||||||
|
right: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
60% {
|
||||||
|
left: 107%;
|
||||||
|
right: -8%;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
left: 107%;
|
||||||
|
right: -8%;
|
||||||
|
}
|
||||||
|
`)),Eg=ct(Bi||(Bi=Vt`
|
||||||
|
0% {
|
||||||
|
opacity: 1;
|
||||||
|
background-position: 0 -23px;
|
||||||
|
}
|
||||||
|
|
||||||
|
60% {
|
||||||
|
opacity: 0;
|
||||||
|
background-position: 0 -23px;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
background-position: -200px -23px;
|
||||||
|
}
|
||||||
|
`)),Mg=e=>{const{classes:t,variant:n,color:o}=e,r={root:["root",`color${I(o)}`,n],dashed:["dashed",`dashedColor${I(o)}`],bar1:["bar",`barColor${I(o)}`,(n==="indeterminate"||n==="query")&&"bar1Indeterminate",n==="determinate"&&"bar1Determinate",n==="buffer"&&"bar1Buffer"],bar2:["bar",n!=="buffer"&&`barColor${I(o)}`,n==="buffer"&&`color${I(o)}`,(n==="indeterminate"||n==="query")&&"bar2Indeterminate",n==="buffer"&&"bar2Buffer"]};return K(r,Rg,t)},Or=(e,t)=>t==="inherit"?"currentColor":e.vars?e.vars.palette.LinearProgress[`${t}Bg`]:e.palette.mode==="light"?_n(e.palette[t].main,.62):Nn(e.palette[t].main,.5),wg=M("span",{name:"MuiLinearProgress",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[`color${I(n.color)}`],t[n.variant]]}})(({ownerState:e,theme:t})=>u({position:"relative",overflow:"hidden",display:"block",height:4,zIndex:0,"@media print":{colorAdjust:"exact"},backgroundColor:Or(t,e.color)},e.color==="inherit"&&e.variant!=="buffer"&&{backgroundColor:"none","&::before":{content:'""',position:"absolute",left:0,top:0,right:0,bottom:0,backgroundColor:"currentColor",opacity:.3}},e.variant==="buffer"&&{backgroundColor:"transparent"},e.variant==="query"&&{transform:"rotate(180deg)"})),Tg=M("span",{name:"MuiLinearProgress",slot:"Dashed",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.dashed,t[`dashedColor${I(n.color)}`]]}})(({ownerState:e,theme:t})=>{const n=Or(t,e.color);return u({position:"absolute",marginTop:0,height:"100%",width:"100%"},e.color==="inherit"&&{opacity:.3},{backgroundImage:`radial-gradient(${n} 0%, ${n} 16%, transparent 42%)`,backgroundSize:"10px 10px",backgroundPosition:"0 -23px"})},St(Li||(Li=Vt`
|
||||||
|
animation: ${0} 3s infinite linear;
|
||||||
|
`),Eg)),Ig=M("span",{name:"MuiLinearProgress",slot:"Bar1",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.bar,t[`barColor${I(n.color)}`],(n.variant==="indeterminate"||n.variant==="query")&&t.bar1Indeterminate,n.variant==="determinate"&&t.bar1Determinate,n.variant==="buffer"&&t.bar1Buffer]}})(({ownerState:e,theme:t})=>u({width:"100%",position:"absolute",left:0,bottom:0,top:0,transition:"transform 0.2s linear",transformOrigin:"left",backgroundColor:e.color==="inherit"?"currentColor":(t.vars||t).palette[e.color].main},e.variant==="determinate"&&{transition:`transform .${tr}s linear`},e.variant==="buffer"&&{zIndex:1,transition:`transform .${tr}s linear`}),({ownerState:e})=>(e.variant==="indeterminate"||e.variant==="query")&&St(zi||(zi=Vt`
|
||||||
|
width: auto;
|
||||||
|
animation: ${0} 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
|
||||||
|
`),kg)),Og=M("span",{name:"MuiLinearProgress",slot:"Bar2",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.bar,t[`barColor${I(n.color)}`],(n.variant==="indeterminate"||n.variant==="query")&&t.bar2Indeterminate,n.variant==="buffer"&&t.bar2Buffer]}})(({ownerState:e,theme:t})=>u({width:"100%",position:"absolute",left:0,bottom:0,top:0,transition:"transform 0.2s linear",transformOrigin:"left"},e.variant!=="buffer"&&{backgroundColor:e.color==="inherit"?"currentColor":(t.vars||t).palette[e.color].main},e.color==="inherit"&&{opacity:.3},e.variant==="buffer"&&{backgroundColor:Or(t,e.color),transition:`transform .${tr}s linear`}),({ownerState:e})=>(e.variant==="indeterminate"||e.variant==="query")&&St(Fi||(Fi=Vt`
|
||||||
|
width: auto;
|
||||||
|
animation: ${0} 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite;
|
||||||
|
`),Pg)),Gb=p.forwardRef(function(t,n){const o=G({props:t,name:"MuiLinearProgress"}),{className:r,color:i="primary",value:s,valueBuffer:a,variant:l="indeterminate"}=o,c=O(o,Sg),d=u({},o,{color:i,variant:l}),f=Mg(d),h=xr(),b={},m={bar1:{},bar2:{}};if((l==="determinate"||l==="buffer")&&s!==void 0){b["aria-valuenow"]=Math.round(s),b["aria-valuemin"]=0,b["aria-valuemax"]=100;let g=s-100;h&&(g=-g),m.bar1.transform=`translateX(${g}%)`}if(l==="buffer"&&a!==void 0){let g=(a||0)-100;h&&(g=-g),m.bar2.transform=`translateX(${g}%)`}return C.jsxs(wg,u({className:F(f.root,r),ownerState:d,role:"progressbar"},b,{ref:n},c,{children:[l==="buffer"?C.jsx(Tg,{className:f.dashed,ownerState:d}):null,C.jsx(Ig,{className:f.bar1,ownerState:d,style:m.bar1}),l==="determinate"?null:C.jsx(Og,{className:f.bar2,ownerState:d,style:m.bar2})]}))});function Ag(e){return V("MuiLink",e)}const Ng=U("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]),la={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},_g=e=>la[e]||e,Bg=({theme:e,ownerState:t})=>{const n=_g(t.color),o=zt(e,`palette.${n}`,!1)||t.color,r=zt(e,`palette.${n}Channel`);return"vars"in e&&r?`rgba(${r} / 0.4)`:Ce(o,.4)},Lg=["className","color","component","onBlur","onFocus","TypographyClasses","underline","variant","sx"],zg=e=>{const{classes:t,component:n,focusVisible:o,underline:r}=e,i={root:["root",`underline${I(r)}`,n==="button"&&"button",o&&"focusVisible"]};return K(i,Ag,t)},Fg=M(xt,{name:"MuiLink",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[`underline${I(n.underline)}`],n.component==="button"&&t.button]}})(({theme:e,ownerState:t})=>u({},t.underline==="none"&&{textDecoration:"none"},t.underline==="hover"&&{textDecoration:"none","&:hover":{textDecoration:"underline"}},t.underline==="always"&&u({textDecoration:"underline"},t.color!=="inherit"&&{textDecorationColor:Bg({theme:e,ownerState:t})},{"&:hover":{textDecorationColor:"inherit"}}),t.component==="button"&&{position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"},[`&.${Ng.focusVisible}`]:{outline:"auto"}})),qb=p.forwardRef(function(t,n){const o=G({props:t,name:"MuiLink"}),{className:r,color:i="primary",component:s="a",onBlur:a,onFocus:l,TypographyClasses:c,underline:d="always",variant:f="inherit",sx:h}=o,b=O(o,Lg),{isFocusVisibleRef:m,onBlur:g,onFocus:$,ref:v}=zs(),[R,y]=p.useState(!1),x=$e(n,v),S=E=>{g(E),m.current===!1&&y(!1),a&&a(E)},P=E=>{$(E),m.current===!0&&y(!0),l&&l(E)},k=u({},o,{color:i,component:s,focusVisible:R,underline:d,variant:f}),w=zg(k);return C.jsx(Fg,u({color:i,className:F(w.root,r),classes:c,component:s,onBlur:S,onFocus:P,ref:x,ownerState:k,variant:f,sx:[...Object.keys(la).includes(i)?[]:[{color:i}],...Array.isArray(h)?h:[h]]},b))}),nr=p.createContext({});function jg(e){return V("MuiList",e)}U("MuiList",["root","padding","dense","subheader"]);const Dg=["children","className","component","dense","disablePadding","subheader"],Wg=e=>{const{classes:t,disablePadding:n,dense:o,subheader:r}=e;return K({root:["root",!n&&"padding",o&&"dense",r&&"subheader"]},jg,t)},Ug=M("ul",{name:"MuiList",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.disablePadding&&t.padding,n.dense&&t.dense,n.subheader&&t.subheader]}})(({ownerState:e})=>u({listStyle:"none",margin:0,padding:0,position:"relative"},!e.disablePadding&&{paddingTop:8,paddingBottom:8},e.subheader&&{paddingTop:0})),Hg=p.forwardRef(function(t,n){const o=G({props:t,name:"MuiList"}),{children:r,className:i,component:s="ul",dense:a=!1,disablePadding:l=!1,subheader:c}=o,d=O(o,Dg),f=p.useMemo(()=>({dense:a}),[a]),h=u({},o,{component:s,dense:a,disablePadding:l}),b=Wg(h);return C.jsx(nr.Provider,{value:f,children:C.jsxs(Ug,u({as:s,className:F(b.root,i),ref:n,ownerState:h},d,{children:[c,r]}))})}),ji=U("MuiListItemIcon",["root","alignItemsFlexStart"]),Di=U("MuiListItemText",["root","multiline","dense","inset","primary","secondary"]),Vg=["actions","autoFocus","autoFocusItem","children","className","disabledItemsFocusable","disableListWrap","onKeyDown","variant"];function zo(e,t,n){return e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:n?null:e.firstChild}function Wi(e,t,n){return e===t?n?e.firstChild:e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:n?null:e.lastChild}function ca(e,t){if(t===void 0)return!0;let n=e.innerText;return n===void 0&&(n=e.textContent),n=n.trim().toLowerCase(),n.length===0?!1:t.repeating?n[0]===t.keys[0]:n.indexOf(t.keys.join(""))===0}function Qt(e,t,n,o,r,i){let s=!1,a=r(e,t,t?n:!1);for(;a;){if(a===e.firstChild){if(s)return!1;s=!0}const l=o?!1:a.disabled||a.getAttribute("aria-disabled")==="true";if(!a.hasAttribute("tab
Line truncated
|
||||||
+2
-2
@@ -1,4 +1,4 @@
|
|||||||
var ws=e=>{throw TypeError(e)};var ze=(e,t,s)=>t.has(e)||ws("Cannot "+s);var l=(e,t,s)=>(ze(e,t,"read from private field"),s?s.call(e):t.get(e)),F=(e,t,s)=>t.has(e)?ws("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,s),P=(e,t,s,i)=>(ze(e,t,"write to private field"),i?i.call(e,s):t.set(e,s),s),E=(e,t,s)=>(ze(e,t,"access private method"),s);var Ce=(e,t,s,i)=>({set _(r){P(e,t,r,s)},get _(){return l(e,t,i)}});import{r as C,c as Ii}from"./react-DXd9vB-a.js";import{j as _}from"./mui-CsmJ6if2.js";var ve=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},de=typeof window>"u"||"Deno"in globalThis;function ct(){}function Vi(e,t){return typeof e=="function"?e(t):e}function ts(e){return typeof e=="number"&&e>=0&&e!==1/0}function Zs(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Xt(e,t){return typeof e=="function"?e(t):e}function dt(e,t){return typeof e=="function"?e(t):e}function Fs(e,t){const{type:s="all",exact:i,fetchStatus:r,predicate:n,queryKey:o,stale:a}=e;if(o){if(i){if(t.queryHash!==vs(o,t.options))return!1}else if(!Se(t.queryKey,o))return!1}if(s!=="all"){const h=t.isActive();if(s==="active"&&!h||s==="inactive"&&h)return!1}return!(typeof a=="boolean"&&t.isStale()!==a||r&&r!==t.state.fetchStatus||n&&!n(t))}function _s(e,t){const{exact:s,status:i,predicate:r,mutationKey:n}=e;if(n){if(!t.options.mutationKey)return!1;if(s){if(Ht(t.options.mutationKey)!==Ht(n))return!1}else if(!Se(t.options.mutationKey,n))return!1}return!(i&&t.state.status!==i||r&&!r(t))}function vs(e,t){return((t==null?void 0:t.queryKeyHashFn)||Ht)(e)}function Ht(e){return JSON.stringify(e,(t,s)=>es(s)?Object.keys(s).sort().reduce((i,r)=>(i[r]=s[r],i),{}):s)}function Se(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?!Object.keys(t).some(s=>!Se(e[s],t[s])):!1}function ti(e,t){if(e===t)return e;const s=Cs(e)&&Cs(t);if(s||es(e)&&es(t)){const i=s?e:Object.keys(e),r=i.length,n=s?t:Object.keys(t),o=n.length,a=s?[]:{};let h=0;for(let u=0;u<o;u++){const c=s?u:n[u];(!s&&i.includes(c)||s)&&e[c]===void 0&&t[c]===void 0?(a[c]=void 0,h++):(a[c]=ti(e[c],t[c]),a[c]===e[c]&&e[c]!==void 0&&h++)}return r===o&&h===r?e:a}return t}function Te(e,t){if(!t||Object.keys(e).length!==Object.keys(t).length)return!1;for(const s in e)if(e[s]!==t[s])return!1;return!0}function Cs(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function es(e){if(!Rs(e))return!1;const t=e.constructor;if(t===void 0)return!0;const s=t.prototype;return!(!Rs(s)||!s.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(e)!==Object.prototype)}function Rs(e){return Object.prototype.toString.call(e)==="[object Object]"}function ji(e){return new Promise(t=>{setTimeout(t,e)})}function ss(e,t,s){return typeof s.structuralSharing=="function"?s.structuralSharing(e,t):s.structuralSharing!==!1?ti(e,t):t}function Di(e,t,s=0){const i=[...e,t];return s&&i.length>s?i.slice(1):i}function ki(e,t,s=0){const i=[t,...e];return s&&i.length>s?i.slice(0,-1):i}var ei=Symbol();function si(e,t){return!e.queryFn&&(t!=null&&t.initialPromise)?()=>t.initialPromise:!e.queryFn||e.queryFn===ei?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}var $t,Rt,Zt,Ks,Bi=(Ks=class extends ve{constructor(){super();F(this,$t);F(this,Rt);F(this,Zt);P(this,Zt,t=>{if(!de&&window.addEventListener){const s=()=>t();return window.addEventListener("visibilitychange",s,!1),()=>{window.removeEventListener("visibilitychange",s)}}})}onSubscribe(){l(this,Rt)||this.setEventListener(l(this,Zt))}onUnsubscribe(){var t;this.hasListeners()||((t=l(this,Rt))==null||t.call(this),P(this,Rt,void 0))}setEventListener(t){var s;P(this,Zt,t),(s=l(this,Rt))==null||s.call(this),P(this,Rt,t(i=>{typeof i=="boolean"?this.setFocused(i):this.onFocus()}))}setFocused(t){l(this,$t)!==t&&(P(this,$t,t),this.onFocus())}onFocus(){const t=this.isFocused();this.listeners.forEach(s=>{s(t)})}isFocused(){var t;return typeof l(this,$t)=="boolean"?l(this,$t):((t=globalThis.document)==null?void 0:t.visibilityState)!=="hidden"}},$t=new WeakMap,Rt=new WeakMap,Zt=new WeakMap,Ks),ys=new Bi,te,Et,ee,Ns,$i=(Ns=class extends ve{constructor(){super();F(this,te,!0);F(this,Et);F(this,ee);P(this,ee,t=>{if(!de&&window.addEventListener){const s=()=>t(!0),i=()=>t(!1);return window.addEventListener("online",s,!1),window.addEventListener("offline",i,!1),()=>{window.removeEventListener("online",s),window.removeEventListener("offline",i)}}})}onSubscribe(){l(this,Et)||this.setEventListener(l(this,ee))}onUnsubscribe(){var t;this.hasListeners()||((t=l(this,Et))==null||t.call(this),P(this,Et,void 0))}setEventListener(t){var s;P(this,ee,t),(s=l(this,Et))==null||s.call(this),P(this,Et,t(this.setOnline.bind(this)))}setOnline(t){l(this,te)!==t&&(P(this,te,t),this.listenersLine truncated
|
var ws=e=>{throw TypeError(e)};var ze=(e,t,s)=>t.has(e)||ws("Cannot "+s);var l=(e,t,s)=>(ze(e,t,"read from private field"),s?s.call(e):t.get(e)),F=(e,t,s)=>t.has(e)?ws("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,s),P=(e,t,s,i)=>(ze(e,t,"write to private field"),i?i.call(e,s):t.set(e,s),s),E=(e,t,s)=>(ze(e,t,"access private method"),s);var Ce=(e,t,s,i)=>({set _(r){P(e,t,r,s)},get _(){return l(e,t,i)}});import{r as C,c as Ii}from"./react-DXd9vB-a.js";import{j as _}from"./mui-v3E5hT34.js";var ve=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},de=typeof window>"u"||"Deno"in globalThis;function ct(){}function Vi(e,t){return typeof e=="function"?e(t):e}function ts(e){return typeof e=="number"&&e>=0&&e!==1/0}function Zs(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Xt(e,t){return typeof e=="function"?e(t):e}function dt(e,t){return typeof e=="function"?e(t):e}function Fs(e,t){const{type:s="all",exact:i,fetchStatus:r,predicate:n,queryKey:o,stale:a}=e;if(o){if(i){if(t.queryHash!==vs(o,t.options))return!1}else if(!Se(t.queryKey,o))return!1}if(s!=="all"){const h=t.isActive();if(s==="active"&&!h||s==="inactive"&&h)return!1}return!(typeof a=="boolean"&&t.isStale()!==a||r&&r!==t.state.fetchStatus||n&&!n(t))}function _s(e,t){const{exact:s,status:i,predicate:r,mutationKey:n}=e;if(n){if(!t.options.mutationKey)return!1;if(s){if(Ht(t.options.mutationKey)!==Ht(n))return!1}else if(!Se(t.options.mutationKey,n))return!1}return!(i&&t.state.status!==i||r&&!r(t))}function vs(e,t){return((t==null?void 0:t.queryKeyHashFn)||Ht)(e)}function Ht(e){return JSON.stringify(e,(t,s)=>es(s)?Object.keys(s).sort().reduce((i,r)=>(i[r]=s[r],i),{}):s)}function Se(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?!Object.keys(t).some(s=>!Se(e[s],t[s])):!1}function ti(e,t){if(e===t)return e;const s=Cs(e)&&Cs(t);if(s||es(e)&&es(t)){const i=s?e:Object.keys(e),r=i.length,n=s?t:Object.keys(t),o=n.length,a=s?[]:{};let h=0;for(let u=0;u<o;u++){const c=s?u:n[u];(!s&&i.includes(c)||s)&&e[c]===void 0&&t[c]===void 0?(a[c]=void 0,h++):(a[c]=ti(e[c],t[c]),a[c]===e[c]&&e[c]!==void 0&&h++)}return r===o&&h===r?e:a}return t}function Te(e,t){if(!t||Object.keys(e).length!==Object.keys(t).length)return!1;for(const s in e)if(e[s]!==t[s])return!1;return!0}function Cs(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function es(e){if(!Rs(e))return!1;const t=e.constructor;if(t===void 0)return!0;const s=t.prototype;return!(!Rs(s)||!s.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(e)!==Object.prototype)}function Rs(e){return Object.prototype.toString.call(e)==="[object Object]"}function ji(e){return new Promise(t=>{setTimeout(t,e)})}function ss(e,t,s){return typeof s.structuralSharing=="function"?s.structuralSharing(e,t):s.structuralSharing!==!1?ti(e,t):t}function Di(e,t,s=0){const i=[...e,t];return s&&i.length>s?i.slice(1):i}function ki(e,t,s=0){const i=[t,...e];return s&&i.length>s?i.slice(0,-1):i}var ei=Symbol();function si(e,t){return!e.queryFn&&(t!=null&&t.initialPromise)?()=>t.initialPromise:!e.queryFn||e.queryFn===ei?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}var $t,Rt,Zt,Ks,Bi=(Ks=class extends ve{constructor(){super();F(this,$t);F(this,Rt);F(this,Zt);P(this,Zt,t=>{if(!de&&window.addEventListener){const s=()=>t();return window.addEventListener("visibilitychange",s,!1),()=>{window.removeEventListener("visibilitychange",s)}}})}onSubscribe(){l(this,Rt)||this.setEventListener(l(this,Zt))}onUnsubscribe(){var t;this.hasListeners()||((t=l(this,Rt))==null||t.call(this),P(this,Rt,void 0))}setEventListener(t){var s;P(this,Zt,t),(s=l(this,Rt))==null||s.call(this),P(this,Rt,t(i=>{typeof i=="boolean"?this.setFocused(i):this.onFocus()}))}setFocused(t){l(this,$t)!==t&&(P(this,$t,t),this.onFocus())}onFocus(){const t=this.isFocused();this.listeners.forEach(s=>{s(t)})}isFocused(){var t;return typeof l(this,$t)=="boolean"?l(this,$t):((t=globalThis.document)==null?void 0:t.visibilityState)!=="hidden"}},$t=new WeakMap,Rt=new WeakMap,Zt=new WeakMap,Ks),ys=new Bi,te,Et,ee,Ns,$i=(Ns=class extends ve{constructor(){super();F(this,te,!0);F(this,Et);F(this,ee);P(this,ee,t=>{if(!de&&window.addEventListener){const s=()=>t(!0),i=()=>t(!1);return window.addEventListener("online",s,!1),window.addEventListener("offline",i,!1),()=>{window.removeEventListener("online",s),window.removeEventListener("offline",i)}}})}onSubscribe(){l(this,Et)||this.setEventListener(l(this,ee))}onUnsubscribe(){var t;this.hasListeners()||((t=l(this,Et))==null||t.call(this),P(this,Et,void 0))}setEventListener(t){var s;P(this,ee,t),(s=l(this,Et))==null||s.call(this),P(this,Et,t(this.setOnline.bind(this)))}setOnline(t){l(this,te)!==t&&(P(this,te,t),this.listenersLine truncated
|
||||||
* @license React
|
* @license React
|
||||||
* use-sync-external-store-shim.production.min.js
|
* use-sync-external-store-shim.production.min.js
|
||||||
*
|
*
|
||||||
@@ -14,4 +14,4 @@ var ws=e=>{throw TypeError(e)};var ze=(e,t,s)=>t.has(e)||ws("Cannot "+s);var l=(
|
|||||||
*
|
*
|
||||||
* This source code is licensed under the MIT license found in the
|
* This source code is licensed under the MIT license found in the
|
||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/var $e=C,Rr=Cr;function Er(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var xr=typeof Object.is=="function"?Object.is:Er,Or=Rr.useSyncExternalStore,Lr=$e.useRef,Ar=$e.useEffect,Tr=$e.useMemo,Ir=$e.useDebugValue;Si.useSyncExternalStoreWithSelector=function(e,t,s,i,r){var n=Lr(null);if(n.current===null){var o={hasValue:!1,value:null};n.current=o}else o=n.current;n=Tr(function(){function h(p){if(!u){if(u=!0,c=p,p=i(p),r!==void 0&&o.hasValue){var v=o.value;if(r(v,p))return d=v}return d=p}if(v=d,xr(c,p))return v;var m=i(p);return r!==void 0&&r(v,m)?v:(c=p,d=m)}var u=!1,c,d,f=s===void 0?null:s;return[function(){return h(t())},f===null?void 0:function(){return h(f())}]},[t,s,i,r]);var a=Or(e,n[0],n[1]);return Ar(function(){o.hasValue=!0,o.value=a},[a]),Ir(a),a};bi.exports=Si;var Vr=bi.exports;class bs{constructor(t,s){this.listeners=new Set,this._batching=!1,this._flushing=0,this.subscribe=i=>{var r,n;this.listeners.add(i);const o=(n=(r=this.options)==null?void 0:r.onSubscribe)==null?void 0:n.call(r,i,this);return()=>{this.listeners.delete(i),o==null||o()}},this.setState=i=>{var r,n,o;const a=this.state;this.state=(r=this.options)!=null&&r.updateFn?this.options.updateFn(a)(i):i(a),(o=(n=this.options)==null?void 0:n.onUpdate)==null||o.call(n),this._flush()},this._flush=()=>{if(this._batching)return;const i=++this._flushing;this.listeners.forEach(r=>{this._flushing===i&&r()})},this.batch=i=>{if(this._batching)return i();this._batching=!0,i(),this._batching=!1,this._flush()},this.state=t,this.options=s}}function Ve(e,t=s=>s){return Vr.useSyncExternalStoreWithSelector(e.subscribe,()=>e.state,()=>e.state,t,jr)}function jr(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;const s=Object.keys(e);if(s.length!==Object.keys(t).length)return!1;for(let i=0;i<s.length;i++)if(!Object.prototype.hasOwnProperty.call(t,s[i])||!Object.is(e[s[i]],t[s[i]]))return!1;return!0}const rt="__root__";function Dr(e,t){let s,i,r,n="";for(s in e)if((r=e[s])!==void 0)if(Array.isArray(r))for(i=0;i<r.length;i++)n&&(n+="&"),n+=encodeURIComponent(s)+"="+encodeURIComponent(r[i]);else n&&(n+="&"),n+=encodeURIComponent(s)+"="+encodeURIComponent(r);return""+n}function Ts(e){if(!e)return"";const t=decodeURIComponent(e);return t==="false"?!1:t==="true"?!0:+t*0===0&&+t+""===t?+t:t}function kr(e,t){let s,i;const r={},n=e.split("&");for(;s=n.shift();){const o=s.indexOf("=");if(o!==-1){i=s.slice(0,o);const a=s.slice(o+1);r[i]!==void 0?r[i]=[].concat(r[i],Ts(a)):r[i]=Ts(a)}else i=s,r[i]=""}return r}const Br=Ur(JSON.parse),$r=Qr(JSON.stringify,JSON.parse);function Ur(e){return t=>{t.substring(0,1)==="?"&&(t=t.substring(1));const s=kr(t);for(const i in s){const r=s[i];if(typeof r=="string")try{s[i]=e(r)}catch{}}return s}}function Qr(e,t){function s(i){if(typeof i=="object"&&i!==null)try{return e(i)}catch{}else if(typeof i=="string"&&typeof t=="function")try{return t(i),e(i)}catch{}return i}return i=>{i={...i},Object.keys(i).forEach(n=>{const o=i[n];typeof o>"u"||o===void 0?delete i[n]:i[n]=s(o)});const r=Dr(i).toString();return r?`?${r}`:""}}function je(e){return e[e.length-1]}function Kr(e){return typeof e=="function"}function Jt(e,t){return Kr(e)?e(t):e}function be(e,t){return t.reduce((s,i)=>(s[i]=e[i],s),{})}function pt(e,t){if(e===t)return e;const s=t,i=Vs(e)&&Vs(s);if(i||De(e)&&De(s)){const r=i?e:Object.keys(e),n=r.length,o=i?s:Object.keys(s),a=o.length,h=i?[]:{};let u=0;for(let c=0;c<a;c++){const d=i?c:o[c];(!i&&r.includes(d)||i)&&e[d]===void 0&&s[d]===void 0?(h[d]=void 0,u++):(h[d]=pt(e[d],s[d]),h[d]===e[d]&&e[d]!==void 0&&u++)}return n===a&&u===n?e:h}return s}function De(e){if(!Is(e))return!1;const t=e.constructor;if(typeof t>"u")return!0;const s=t.prototype;return!(!Is(s)||!s.hasOwnProperty("isPrototypeOf"))}function Is(e){return Object.prototype.toString.call(e)==="[object Object]"}function Vs(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function Yt(e,t,s=!1){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(De(e)&&De(t)){const i=Object.keys(e).filter(n=>e[n]!==void 0),r=Object.keys(t).filter(n=>t[n]!==void 0);return!s&&i.length!==r.length?!1:!r.some(n=>!(n in e)||!Yt(e[n],t[n],s))}return Array.isArray(e)&&Array.isArray(t)?e.length!==t.length?!1:!e.some((i,r)=>!Yt(i,t[r],s)):!1}const Je=typeof window<"u"?C.useLayoutEffect:C.useEffect;function Gt(e){let t,s;const i=new Promise((r,n)=>{t=r,s=n});return i.status="pending",i.resolve=r=>{i.status="resolved",i.value=r,t(r),e==null||e(r)},i.reject=r=>{i.status="rejected",s(r)},i}function js(e){const t=C.useRef({value:e,prev:null}),s=t.current.value;return e!==s&&(t.current={value:e,prev:s}),t.current.prev}function Vt(e){return Ue(e.filter(Boolean).join("/"))}function Ue(e){return e.replace(/\/{2,}/g,"/")}function Ss(e){return e==="/"?e:e.replace(/^\/{1,}/,"")}function Bt(e){return e==="/"?e:e.replace(/\/{1,}$/,"")}function Nr(e){return Bt(Ss(e))}function ke(e,t){return e.endsWith("/")&&e!=="/"&&e!==`${t}/`?e.slice(0,-1):e}functLine truncated
|
*/var $e=C,Rr=Cr;function Er(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var xr=typeof Object.is=="function"?Object.is:Er,Or=Rr.useSyncExternalStore,Lr=$e.useRef,Ar=$e.useEffect,Tr=$e.useMemo,Ir=$e.useDebugValue;Si.useSyncExternalStoreWithSelector=function(e,t,s,i,r){var n=Lr(null);if(n.current===null){var o={hasValue:!1,value:null};n.current=o}else o=n.current;n=Tr(function(){function h(p){if(!u){if(u=!0,c=p,p=i(p),r!==void 0&&o.hasValue){var v=o.value;if(r(v,p))return d=v}return d=p}if(v=d,xr(c,p))return v;var m=i(p);return r!==void 0&&r(v,m)?v:(c=p,d=m)}var u=!1,c,d,f=s===void 0?null:s;return[function(){return h(t())},f===null?void 0:function(){return h(f())}]},[t,s,i,r]);var a=Or(e,n[0],n[1]);return Ar(function(){o.hasValue=!0,o.value=a},[a]),Ir(a),a};bi.exports=Si;var Vr=bi.exports;class bs{constructor(t,s){this.listeners=new Set,this._batching=!1,this._flushing=0,this.subscribe=i=>{var r,n;this.listeners.add(i);const o=(n=(r=this.options)==null?void 0:r.onSubscribe)==null?void 0:n.call(r,i,this);return()=>{this.listeners.delete(i),o==null||o()}},this.setState=i=>{var r,n,o;const a=this.state;this.state=(r=this.options)!=null&&r.updateFn?this.options.updateFn(a)(i):i(a),(o=(n=this.options)==null?void 0:n.onUpdate)==null||o.call(n),this._flush()},this._flush=()=>{if(this._batching)return;const i=++this._flushing;this.listeners.forEach(r=>{this._flushing===i&&r()})},this.batch=i=>{if(this._batching)return i();this._batching=!0,i(),this._batching=!1,this._flush()},this.state=t,this.options=s}}function Ve(e,t=s=>s){return Vr.useSyncExternalStoreWithSelector(e.subscribe,()=>e.state,()=>e.state,t,jr)}function jr(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;const s=Object.keys(e);if(s.length!==Object.keys(t).length)return!1;for(let i=0;i<s.length;i++)if(!Object.prototype.hasOwnProperty.call(t,s[i])||!Object.is(e[s[i]],t[s[i]]))return!1;return!0}const rt="__root__";function Dr(e,t){let s,i,r,n="";for(s in e)if((r=e[s])!==void 0)if(Array.isArray(r))for(i=0;i<r.length;i++)n&&(n+="&"),n+=encodeURIComponent(s)+"="+encodeURIComponent(r[i]);else n&&(n+="&"),n+=encodeURIComponent(s)+"="+encodeURIComponent(r);return""+n}function Ts(e){if(!e)return"";const t=decodeURIComponent(e);return t==="false"?!1:t==="true"?!0:+t*0===0&&+t+""===t?+t:t}function kr(e,t){let s,i;const r={},n=e.split("&");for(;s=n.shift();){const o=s.indexOf("=");if(o!==-1){i=s.slice(0,o);const a=s.slice(o+1);r[i]!==void 0?r[i]=[].concat(r[i],Ts(a)):r[i]=Ts(a)}else i=s,r[i]=""}return r}const Br=Ur(JSON.parse),$r=Qr(JSON.stringify,JSON.parse);function Ur(e){return t=>{t.substring(0,1)==="?"&&(t=t.substring(1));const s=kr(t);for(const i in s){const r=s[i];if(typeof r=="string")try{s[i]=e(r)}catch{}}return s}}function Qr(e,t){function s(i){if(typeof i=="object"&&i!==null)try{return e(i)}catch{}else if(typeof i=="string"&&typeof t=="function")try{return t(i),e(i)}catch{}return i}return i=>{i={...i},Object.keys(i).forEach(n=>{const o=i[n];typeof o>"u"||o===void 0?delete i[n]:i[n]=s(o)});const r=Dr(i).toString();return r?`?${r}`:""}}function je(e){return e[e.length-1]}function Kr(e){return typeof e=="function"}function Jt(e,t){return Kr(e)?e(t):e}function be(e,t){return t.reduce((s,i)=>(s[i]=e[i],s),{})}function pt(e,t){if(e===t)return e;const s=t,i=Vs(e)&&Vs(s);if(i||De(e)&&De(s)){const r=i?e:Object.keys(e),n=r.length,o=i?s:Object.keys(s),a=o.length,h=i?[]:{};let u=0;for(let c=0;c<a;c++){const d=i?c:o[c];(!i&&r.includes(d)||i)&&e[d]===void 0&&s[d]===void 0?(h[d]=void 0,u++):(h[d]=pt(e[d],s[d]),h[d]===e[d]&&e[d]!==void 0&&u++)}return n===a&&u===n?e:h}return s}function De(e){if(!Is(e))return!1;const t=e.constructor;if(typeof t>"u")return!0;const s=t.prototype;return!(!Is(s)||!s.hasOwnProperty("isPrototypeOf"))}function Is(e){return Object.prototype.toString.call(e)==="[object Object]"}function Vs(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function Yt(e,t,s=!1){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(De(e)&&De(t)){const i=Object.keys(e).filter(n=>e[n]!==void 0),r=Object.keys(t).filter(n=>t[n]!==void 0);return!s&&i.length!==r.length?!1:!r.some(n=>!(n in e)||!Yt(e[n],t[n],s))}return Array.isArray(e)&&Array.isArray(t)?e.length!==t.length?!1:!e.some((i,r)=>!Yt(i,t[r],s)):!1}const Je=typeof window<"u"?C.useLayoutEffect:C.useEffect;function Gt(e){let t,s;const i=new Promise((r,n)=>{t=r,s=n});return i.status="pending",i.resolve=r=>{i.status="resolved",i.value=r,t(r),e==null||e(r)},i.reject=r=>{i.status="rejected",s(r)},i}function js(e){const t=C.useRef({value:e,prev:null}),s=t.current.value;return e!==s&&(t.current={value:e,prev:s}),t.current.prev}function Vt(e){return Ue(e.filter(Boolean).join("/"))}function Ue(e){return e.replace(/\/{2,}/g,"/")}function Ss(e){return e==="/"?e:e.replace(/^\/{1,}/,"")}function Bt(e){return e==="/"?e:e.replace(/\/{1,}$/,"")}function Nr(e){return Bt(Ss(e))}function ke(e,t){return e.endsWith("/")&&e!=="/"&&e!==`${t}/`?e.slice(0,-1):e}functLine truncated
|
||||||
Vendored
+3
-3
@@ -5,10 +5,10 @@
|
|||||||
<link rel="icon" type="image/svg+xml" href="/phpCourse/exam/dist/vite.svg" />
|
<link rel="icon" type="image/svg+xml" href="/phpCourse/exam/dist/vite.svg" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Vite + React + TS</title>
|
<title>Vite + React + TS</title>
|
||||||
<script type="module" crossorigin src="/phpCourse/exam/dist/assets/index-BhgwoArk.js"></script>
|
<script type="module" crossorigin src="/phpCourse/exam/dist/assets/index-CG0WySTu.js"></script>
|
||||||
<link rel="modulepreload" crossorigin href="/phpCourse/exam/dist/assets/react-DXd9vB-a.js">
|
<link rel="modulepreload" crossorigin href="/phpCourse/exam/dist/assets/react-DXd9vB-a.js">
|
||||||
<link rel="modulepreload" crossorigin href="/phpCourse/exam/dist/assets/mui-CsmJ6if2.js">
|
<link rel="modulepreload" crossorigin href="/phpCourse/exam/dist/assets/mui-v3E5hT34.js">
|
||||||
<link rel="modulepreload" crossorigin href="/phpCourse/exam/dist/assets/tanstack-DXVkKUs1.js">
|
<link rel="modulepreload" crossorigin href="/phpCourse/exam/dist/assets/tanstack-yMrSYl0u.js">
|
||||||
<link rel="modulepreload" crossorigin href="/phpCourse/exam/dist/assets/i18n-DJgSTqOl.js">
|
<link rel="modulepreload" crossorigin href="/phpCourse/exam/dist/assets/i18n-DJgSTqOl.js">
|
||||||
<link rel="stylesheet" crossorigin href="/phpCourse/exam/dist/assets/mui-CKDNpdid.css">
|
<link rel="stylesheet" crossorigin href="/phpCourse/exam/dist/assets/mui-CKDNpdid.css">
|
||||||
<link rel="stylesheet" crossorigin href="/phpCourse/exam/dist/assets/index-D83Ey19k.css">
|
<link rel="stylesheet" crossorigin href="/phpCourse/exam/dist/assets/index-D83Ey19k.css">
|
||||||
|
|||||||
+12
-2
@@ -1,8 +1,10 @@
|
|||||||
{
|
{
|
||||||
"Unauthorized": "Keine Berechtigung",
|
"Unauthorized": "Keine Berechtigung",
|
||||||
|
|
||||||
"NotFound_user:login": "Benutzer existiert nicht",
|
|
||||||
"Unauthorized_login": "Ungültige E-Mail oder Passwort",
|
"Unauthorized_login": "Ungültige E-Mail oder Passwort",
|
||||||
|
"NotFound_user:login": "Benutzer existiert nicht",
|
||||||
|
"MissingField_email:login": "E-Mail darf nicht leer sein",
|
||||||
|
"MissingField_password:login": "Passwort darf nicht leer sein",
|
||||||
|
|
||||||
"Unauthorized_deletePost": "Keine Berechtigung",
|
"Unauthorized_deletePost": "Keine Berechtigung",
|
||||||
"NotFound_post:deletePost": "Post nicht gefunden",
|
"NotFound_post:deletePost": "Post nicht gefunden",
|
||||||
@@ -12,6 +14,12 @@
|
|||||||
"FailedUpdate_Duplicate:username:userUpdate": "Ein Benutzer mit diesem Benutzernamen existiert schon",
|
"FailedUpdate_Duplicate:username:userUpdate": "Ein Benutzer mit diesem Benutzernamen existiert schon",
|
||||||
"FailedUpdate_Duplicate:email:userUpdate": "Ein Benutzer mit dieser E-Mail existiert schon",
|
"FailedUpdate_Duplicate:email:userUpdate": "Ein Benutzer mit dieser E-Mail existiert schon",
|
||||||
|
|
||||||
|
"Unauthorized_newPost": "Keine Berechtigung",
|
||||||
|
"MissingField_content:newPost": "Beitrag darf nicht leer sein",
|
||||||
|
|
||||||
|
"Unauthorized_postUpdate": "Keine Berechtigung",
|
||||||
|
"NotFound_post:postUpdate": "Post nicht gefunden",
|
||||||
|
|
||||||
"username": "Benutzername",
|
"username": "Benutzername",
|
||||||
"email": "E-Mail",
|
"email": "E-Mail",
|
||||||
"password": "Passwort",
|
"password": "Passwort",
|
||||||
@@ -50,5 +58,7 @@
|
|||||||
"Deleting": "Löscht...",
|
"Deleting": "Löscht...",
|
||||||
"Edit data": "Daten ändern",
|
"Edit data": "Daten ändern",
|
||||||
|
|
||||||
"Recent posts": "Letzten Posts"
|
"Recent posts": "Letzte Posts",
|
||||||
|
|
||||||
|
"Post comment": "Beitrag posten"
|
||||||
}
|
}
|
||||||
+12
-2
@@ -1,8 +1,10 @@
|
|||||||
{
|
{
|
||||||
"Unauthorized": "Unauthorized",
|
"Unauthorized": "Unauthorized",
|
||||||
|
|
||||||
"NotFound_user:login": "User does not exist",
|
|
||||||
"Unauthorized_login": "Invalid email or password",
|
"Unauthorized_login": "Invalid email or password",
|
||||||
|
"NotFound_user:login": "User does not exist",
|
||||||
|
"MissingField_email:login": "E-Mail required",
|
||||||
|
"MissingField_password:login": "Password required",
|
||||||
|
|
||||||
"Unauthorized_deletPost": "Unauthorized",
|
"Unauthorized_deletPost": "Unauthorized",
|
||||||
"NotFound_post:deletePost": "Post not found",
|
"NotFound_post:deletePost": "Post not found",
|
||||||
@@ -12,6 +14,12 @@
|
|||||||
"FailedUpdate_Duplicate:userUpdate": "A user with this username already exists",
|
"FailedUpdate_Duplicate:userUpdate": "A user with this username already exists",
|
||||||
"FailedUpdate_Duplicate:email:userUpdate": "A user with this email already exists",
|
"FailedUpdate_Duplicate:email:userUpdate": "A user with this email already exists",
|
||||||
|
|
||||||
|
"Unauthorized_newPost": "Unauthorized",
|
||||||
|
"MissingField_content:newPost": "Content required",
|
||||||
|
|
||||||
|
"Unauthorized_postUpdate": "Unauthorized",
|
||||||
|
"NotFound_post:postUpdate": "Post not found",
|
||||||
|
|
||||||
"username": "username",
|
"username": "username",
|
||||||
"email": "email",
|
"email": "email",
|
||||||
"password": "password",
|
"password": "password",
|
||||||
@@ -51,5 +59,7 @@
|
|||||||
|
|
||||||
"Edit data": "Edit date",
|
"Edit data": "Edit date",
|
||||||
|
|
||||||
"Recent posts": "Recent posts"
|
"Recent posts": "Last posts",
|
||||||
|
|
||||||
|
"Post omment": "Post comment"
|
||||||
}
|
}
|
||||||
Vendored
+1
-1
@@ -4822,7 +4822,7 @@ var drawChart = (function (exports) {
|
|||||||
</script>
|
</script>
|
||||||
<script>
|
<script>
|
||||||
/*<!--*/
|
/*<!--*/
|
||||||
const data = {"version":2,"tree":{"name":"root","children":[{"name":"assets/zustand-Cc7ZFYQr.js","children":[{"name":"\u0000/node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.3.1/node_modules/use-sync-external-store","children":[{"name":"cjs","children":[{"uid":"d86f9726-1","name":"use-sync-external-store-shim.production.min.js?commonjs-exports"},{"uid":"d86f9726-5","name":"use-sync-external-store-shim.production.min.js?commonjs-proxy"},{"name":"use-sync-external-store-shim","children":[{"uid":"d86f9726-13","name":"with-selector.production.min.js?commonjs-exports"},{"uid":"d86f9726-17","name":"with-selector.production.min.js?commonjs-proxy"}]}]},{"name":"shim","children":[{"uid":"d86f9726-7","name":"index.js?commonjs-module"},{"uid":"d86f9726-11","name":"index.js?commonjs-proxy"},{"uid":"d86f9726-19","name":"with-selector.js?commonjs-module"}]}]},{"name":"node_modules/.pnpm","children":[{"name":"use-sync-external-store@1.2.0_react@18.3.1/node_modules/use-sync-external-store","children":[{"name":"cjs","children":[{"uid":"d86f9726-3","name":"use-sync-external-store-shim.production.min.js"},{"name":"use-sync-external-store-shim/with-selector.production.min.js","uid":"d86f9726-15"}]},{"name":"shim","children":[{"uid":"d86f9726-9","name":"index.js"},{"uid":"d86f9726-21","name":"with-selector.js"}]}]},{"name":"zustand@4.5.4_@types+react@18.3.3_react@18.3.1/node_modules/zustand/esm","children":[{"uid":"d86f9726-23","name":"vanilla.mjs"},{"uid":"d86f9726-25","name":"index.mjs"}]}]}]},{"name":"assets/index-BhgwoArk.js","children":[{"name":"\u0000vite/modulepreload-polyfill.js","uid":"d86f9726-27"},{"name":"\u0000/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/client.js?commonjs-exports","uid":"d86f9726-29"},{"name":"node_modules/.pnpm","children":[{"name":"react-dom@18.3.1_react@18.3.1/node_modules/react-dom/client.js","uid":"d86f9726-31"},{"name":"@fontsource+roboto@5.0.13/node_modules/@fontsource/roboto","children":[{"uid":"d86f9726-73","name":"300.css"},{"uid":"d86f9726-75","name":"400.css"},{"uid":"d86f9726-77","name":"500.css"},{"uid":"d86f9726-79","name":"700.css"}]}]},{"name":"src","children":[{"name":"api/Api.ts","uid":"d86f9726-33"},{"name":"components","children":[{"name":"Error","children":[{"uid":"d86f9726-35","name":"Errors.ts"},{"uid":"d86f9726-43","name":"ErrorComponent.tsx"}]},{"name":"Menus","children":[{"name":"Language/LanguageMenu.tsx","uid":"d86f9726-39"},{"name":"User/UserMenu.tsx","uid":"d86f9726-47"}]},{"name":"Forms","children":[{"name":"Login/LoginForm.tsx","uid":"d86f9726-45"},{"name":"UserEdit/UserEditDialog.tsx","uid":"d86f9726-61"}]},{"name":"Header/Header.tsx","uid":"d86f9726-49"},{"name":"Post/Post.tsx","uid":"d86f9726-55"},{"name":"Profile/Profile.tsx","uid":"d86f9726-63"}]},{"uid":"d86f9726-37","name":"i18n.ts"},{"name":"types/Routes.ts","uid":"d86f9726-41"},{"name":"routes","children":[{"uid":"d86f9726-51","name":"__root.tsx"},{"uid":"d86f9726-59","name":"index.tsx"},{"name":"profile","children":[{"uid":"d86f9726-67","name":"index.tsx"},{"uid":"d86f9726-69","name":"$id.tsx"}]}]},{"name":"utils/date.ts","uid":"d86f9726-53"},{"name":"queries","children":[{"uid":"d86f9726-57","name":"postsQuery.ts"},{"uid":"d86f9726-65","name":"profileQuery.ts"}]},{"uid":"d86f9726-71","name":"routeTree.gen.ts"},{"uid":"d86f9726-81","name":"main.tsx"}]},{"uid":"d86f9726-83","name":"index.html"}]},{"name":"assets/i18n-DJgSTqOl.js","children":[{"name":"node_modules/.pnpm","children":[{"name":"void-elements@3.1.0/node_modules/void-elements/index.js","uid":"d86f9726-85"},{"name":"html-parse-stringify@3.0.1/node_modules/html-parse-stringify/dist/html-parse-stringify.module.js","uid":"d86f9726-87"},{"name":"react-i18next@15.0.0_i18next@23.12.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-i18next/dist/es","children":[{"uid":"d86f9726-89","name":"utils.js"},{"uid":"d86f9726-91","name":"unescape.js"},{"uid":"d86f9726-93","name":"defaults.js"},{"uid":"d86f9726-95","name":"i18nInstance.js"},{"uid":"d86f9726-97","name":"TransWithoutContext.js"},{"uid":"d86f9726-99","name":"initReactI18next.js"},{"uid":"d86f9726-101","name":"context.js"},{"uid":"d86f9726-103","name":"Trans.js"},{"uid":"d86f9726-105","name":"useTranslation.js"},{"uid":"d86f9726-107","name":"withTranslation.js"},{"uid":"d86f9726-109","name":"Translation.js"},{"uid":"d86f9726-111","name":"I18nextProvider.js"},{"uid":"d86f9726-113","name":"useSSR.js"},{"uid":"d86f9726-115","name":"withSSR.js"},{"uid":"d86f9726-117","name":"index.js"}]},{"name":"i18next@23.12.2/node_modules/i18next/dist/esm/i18next.js","uid":"d86f9726-119"},{"name":"i18next-browser-languagedetector@8.0.0/node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js","uid":"d86f9726-121"},{"name":"i18next-http-backend@2.5.2/node_modules/i18next-http-backend/esm","children":[{"uid":"d86f9726-123","name":"utils.js"},{"uid":"d86f9726-133","name":"getFetch.cjs"},{"uid":"d86f9726-135","name":"request.js"},{"uidLine truncated
|
const data = {"version":2,"tree":{"name":"root","children":[{"name":"assets/zustand-Cc7ZFYQr.js","children":[{"name":"\u0000/node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.3.1/node_modules/use-sync-external-store","children":[{"name":"cjs","children":[{"uid":"90e1d5f6-1","name":"use-sync-external-store-shim.production.min.js?commonjs-exports"},{"uid":"90e1d5f6-5","name":"use-sync-external-store-shim.production.min.js?commonjs-proxy"},{"name":"use-sync-external-store-shim","children":[{"uid":"90e1d5f6-13","name":"with-selector.production.min.js?commonjs-exports"},{"uid":"90e1d5f6-17","name":"with-selector.production.min.js?commonjs-proxy"}]}]},{"name":"shim","children":[{"uid":"90e1d5f6-7","name":"index.js?commonjs-module"},{"uid":"90e1d5f6-11","name":"index.js?commonjs-proxy"},{"uid":"90e1d5f6-19","name":"with-selector.js?commonjs-module"}]}]},{"name":"node_modules/.pnpm","children":[{"name":"use-sync-external-store@1.2.0_react@18.3.1/node_modules/use-sync-external-store","children":[{"name":"cjs","children":[{"uid":"90e1d5f6-3","name":"use-sync-external-store-shim.production.min.js"},{"name":"use-sync-external-store-shim/with-selector.production.min.js","uid":"90e1d5f6-15"}]},{"name":"shim","children":[{"uid":"90e1d5f6-9","name":"index.js"},{"uid":"90e1d5f6-21","name":"with-selector.js"}]}]},{"name":"zustand@4.5.4_@types+react@18.3.3_react@18.3.1/node_modules/zustand/esm","children":[{"uid":"90e1d5f6-23","name":"vanilla.mjs"},{"uid":"90e1d5f6-25","name":"index.mjs"}]}]}]},{"name":"assets/index-CG0WySTu.js","children":[{"name":"\u0000vite/modulepreload-polyfill.js","uid":"90e1d5f6-27"},{"name":"\u0000/node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/client.js?commonjs-exports","uid":"90e1d5f6-29"},{"name":"node_modules/.pnpm","children":[{"name":"react-dom@18.3.1_react@18.3.1/node_modules/react-dom/client.js","uid":"90e1d5f6-31"},{"name":"@fontsource+roboto@5.0.13/node_modules/@fontsource/roboto","children":[{"uid":"90e1d5f6-79","name":"300.css"},{"uid":"90e1d5f6-81","name":"400.css"},{"uid":"90e1d5f6-83","name":"500.css"},{"uid":"90e1d5f6-85","name":"700.css"}]}]},{"name":"src","children":[{"uid":"90e1d5f6-33","name":"constanst.ts"},{"name":"api/Api.ts","uid":"90e1d5f6-35"},{"name":"components","children":[{"name":"Error","children":[{"uid":"90e1d5f6-37","name":"Errors.ts"},{"uid":"90e1d5f6-45","name":"ErrorComponent.tsx"}]},{"name":"Menus","children":[{"name":"Language/LanguageMenu.tsx","uid":"90e1d5f6-41"},{"name":"User/UserMenu.tsx","uid":"90e1d5f6-49"}]},{"name":"Forms","children":[{"name":"Login/LoginForm.tsx","uid":"90e1d5f6-47"},{"name":"Post/PostForm.tsx","uid":"90e1d5f6-55"}]},{"name":"Header/Header.tsx","uid":"90e1d5f6-51"},{"name":"Dialogs","children":[{"name":"PostEdit/PostEditDialog.tsx","uid":"90e1d5f6-59"},{"name":"UserEdit/UserEditDialog.tsx","uid":"90e1d5f6-67"}]},{"name":"Post/Post.tsx","uid":"90e1d5f6-61"},{"name":"Profile/Profile.tsx","uid":"90e1d5f6-69"}]},{"uid":"90e1d5f6-39","name":"i18n.ts"},{"name":"types/Routes.ts","uid":"90e1d5f6-43"},{"name":"routes","children":[{"uid":"90e1d5f6-53","name":"__root.tsx"},{"uid":"90e1d5f6-65","name":"index.tsx"},{"name":"profile","children":[{"uid":"90e1d5f6-73","name":"index.tsx"},{"uid":"90e1d5f6-75","name":"$id.tsx"}]}]},{"name":"utils/date.ts","uid":"90e1d5f6-57"},{"name":"queries","children":[{"uid":"90e1d5f6-63","name":"postsQuery.ts"},{"uid":"90e1d5f6-71","name":"profileQuery.ts"}]},{"uid":"90e1d5f6-77","name":"routeTree.gen.ts"},{"uid":"90e1d5f6-87","name":"main.tsx"}]},{"uid":"90e1d5f6-89","name":"index.html"}]},{"name":"assets/i18n-DJgSTqOl.js","children":[{"name":"node_modules/.pnpm","children":[{"name":"void-elements@3.1.0/node_modules/void-elements/index.js","uid":"90e1d5f6-91"},{"name":"html-parse-stringify@3.0.1/node_modules/html-parse-stringify/dist/html-parse-stringify.module.js","uid":"90e1d5f6-93"},{"name":"react-i18next@15.0.0_i18next@23.12.2_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-i18next/dist/es","children":[{"uid":"90e1d5f6-95","name":"utils.js"},{"uid":"90e1d5f6-97","name":"unescape.js"},{"uid":"90e1d5f6-99","name":"defaults.js"},{"uid":"90e1d5f6-101","name":"i18nInstance.js"},{"uid":"90e1d5f6-103","name":"TransWithoutContext.js"},{"uid":"90e1d5f6-105","name":"initReactI18next.js"},{"uid":"90e1d5f6-107","name":"context.js"},{"uid":"90e1d5f6-109","name":"Trans.js"},{"uid":"90e1d5f6-111","name":"useTranslation.js"},{"uid":"90e1d5f6-113","name":"withTranslation.js"},{"uid":"90e1d5f6-115","name":"Translation.js"},{"uid":"90e1d5f6-117","name":"I18nextProvider.js"},{"uid":"90e1d5f6-119","name":"useSSR.js"},{"uid":"90e1d5f6-121","name":"withSSR.js"},{"uid":"90e1d5f6-123","name":"index.js"}]},{"name":"i18next@23.12.2/node_modules/i18next/dist/esm/i18next.js","uid":"90e1d5f6-125"},{"name":"i18next-browser-languagedetector@8.0.0/node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js","uid":"90e1d5f6-127"},{"name":"i18next-http-backend@2.5.Line truncated
|
||||||
|
|
||||||
const run = () => {
|
const run = () => {
|
||||||
const width = window.innerWidth;
|
const width = window.innerWidth;
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
{
|
{
|
||||||
"Unauthorized": "Keine Berechtigung",
|
"Unauthorized": "Keine Berechtigung",
|
||||||
|
|
||||||
"NotFound_user:login": "Benutzer existiert nicht",
|
|
||||||
"Unauthorized_login": "Ungültige E-Mail oder Passwort",
|
"Unauthorized_login": "Ungültige E-Mail oder Passwort",
|
||||||
|
"NotFound_user:login": "Benutzer existiert nicht",
|
||||||
|
"MissingField_email:login": "E-Mail darf nicht leer sein",
|
||||||
|
"MissingField_password:login": "Passwort darf nicht leer sein",
|
||||||
|
|
||||||
"Unauthorized_deletePost": "Keine Berechtigung",
|
"Unauthorized_deletePost": "Keine Berechtigung",
|
||||||
"NotFound_post:deletePost": "Post nicht gefunden",
|
"NotFound_post:deletePost": "Post nicht gefunden",
|
||||||
@@ -12,6 +14,12 @@
|
|||||||
"FailedUpdate_Duplicate:username:userUpdate": "Ein Benutzer mit diesem Benutzernamen existiert schon",
|
"FailedUpdate_Duplicate:username:userUpdate": "Ein Benutzer mit diesem Benutzernamen existiert schon",
|
||||||
"FailedUpdate_Duplicate:email:userUpdate": "Ein Benutzer mit dieser E-Mail existiert schon",
|
"FailedUpdate_Duplicate:email:userUpdate": "Ein Benutzer mit dieser E-Mail existiert schon",
|
||||||
|
|
||||||
|
"Unauthorized_newPost": "Keine Berechtigung",
|
||||||
|
"MissingField_content:newPost": "Beitrag darf nicht leer sein",
|
||||||
|
|
||||||
|
"Unauthorized_postUpdate": "Keine Berechtigung",
|
||||||
|
"NotFound_post:postUpdate": "Post nicht gefunden",
|
||||||
|
|
||||||
"username": "Benutzername",
|
"username": "Benutzername",
|
||||||
"email": "E-Mail",
|
"email": "E-Mail",
|
||||||
"password": "Passwort",
|
"password": "Passwort",
|
||||||
@@ -50,5 +58,7 @@
|
|||||||
"Deleting": "Löscht...",
|
"Deleting": "Löscht...",
|
||||||
"Edit data": "Daten ändern",
|
"Edit data": "Daten ändern",
|
||||||
|
|
||||||
"Recent posts": "Letzten Posts"
|
"Recent posts": "Letzte Posts",
|
||||||
|
|
||||||
|
"Post comment": "Beitrag posten"
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
{
|
{
|
||||||
"Unauthorized": "Unauthorized",
|
"Unauthorized": "Unauthorized",
|
||||||
|
|
||||||
"NotFound_user:login": "User does not exist",
|
|
||||||
"Unauthorized_login": "Invalid email or password",
|
"Unauthorized_login": "Invalid email or password",
|
||||||
|
"NotFound_user:login": "User does not exist",
|
||||||
|
"MissingField_email:login": "E-Mail required",
|
||||||
|
"MissingField_password:login": "Password required",
|
||||||
|
|
||||||
"Unauthorized_deletPost": "Unauthorized",
|
"Unauthorized_deletPost": "Unauthorized",
|
||||||
"NotFound_post:deletePost": "Post not found",
|
"NotFound_post:deletePost": "Post not found",
|
||||||
@@ -12,6 +14,12 @@
|
|||||||
"FailedUpdate_Duplicate:userUpdate": "A user with this username already exists",
|
"FailedUpdate_Duplicate:userUpdate": "A user with this username already exists",
|
||||||
"FailedUpdate_Duplicate:email:userUpdate": "A user with this email already exists",
|
"FailedUpdate_Duplicate:email:userUpdate": "A user with this email already exists",
|
||||||
|
|
||||||
|
"Unauthorized_newPost": "Unauthorized",
|
||||||
|
"MissingField_content:newPost": "Content required",
|
||||||
|
|
||||||
|
"Unauthorized_postUpdate": "Unauthorized",
|
||||||
|
"NotFound_post:postUpdate": "Post not found",
|
||||||
|
|
||||||
"username": "username",
|
"username": "username",
|
||||||
"email": "email",
|
"email": "email",
|
||||||
"password": "password",
|
"password": "password",
|
||||||
@@ -51,5 +59,7 @@
|
|||||||
|
|
||||||
"Edit data": "Edit date",
|
"Edit data": "Edit date",
|
||||||
|
|
||||||
"Recent posts": "Recent posts"
|
"Recent posts": "Last posts",
|
||||||
|
|
||||||
|
"Post omment": "Post comment"
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import { PostAuth, PostListAuth, PostListNonAuth } from '../types/Post';
|
import { POST_LIMIT } from '../constanst';
|
||||||
|
import { PostAuth, PostListAuth, PostListNonAuth, PostUpdate } from '../types/Post';
|
||||||
import { User, UserUpdate } from '../types/User';
|
import { User, UserUpdate } from '../types/User';
|
||||||
|
|
||||||
const BASE = 'https://khofmann.userpage.fu-berlin.de/phpCourse/exam/api/';
|
const BASE = 'https://khofmann.userpage.fu-berlin.de/phpCourse/exam/api/';
|
||||||
@@ -43,7 +44,7 @@ class ApiImpl {
|
|||||||
};
|
};
|
||||||
|
|
||||||
public posts = async (page?: number): Promise<PostListNonAuth | PostListAuth> => {
|
public posts = async (page?: number): Promise<PostListNonAuth | PostListAuth> => {
|
||||||
const url = `posts?p=${page ?? 0}&l=9`;
|
const url = `posts?p=${page ?? 0}&l=${POST_LIMIT}`;
|
||||||
|
|
||||||
if (this.token) return await (await this.getAuth(url)).json();
|
if (this.token) return await (await this.getAuth(url)).json();
|
||||||
|
|
||||||
@@ -62,6 +63,14 @@ class ApiImpl {
|
|||||||
return await (await this.patch(`users/${id ?? 'self'}`, data as Record<string, unknown>)).json();
|
return await (await this.patch(`users/${id ?? 'self'}`, data as Record<string, unknown>)).json();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public newPost = async (data: PostUpdate): Promise<PostAuth> => {
|
||||||
|
return await (await this.postAuth(`posts`, data as Record<string, unknown>)).json();
|
||||||
|
};
|
||||||
|
|
||||||
|
public updatePost = async (data: PostUpdate, id: number): Promise<PostAuth> => {
|
||||||
|
return await (await this.patch(`posts/${id}`, data as Record<string, unknown>)).json();
|
||||||
|
};
|
||||||
|
|
||||||
/* Internal */
|
/* Internal */
|
||||||
|
|
||||||
private post = async (endpoint: string, body?: Record<string, unknown>, headers?: HeadersInit) => {
|
private post = async (endpoint: string, body?: Record<string, unknown>, headers?: HeadersInit) => {
|
||||||
|
|||||||
@@ -0,0 +1,175 @@
|
|||||||
|
import {
|
||||||
|
Button,
|
||||||
|
CircularProgress,
|
||||||
|
Dialog,
|
||||||
|
DialogActions,
|
||||||
|
DialogContent,
|
||||||
|
DialogTitle,
|
||||||
|
LinearProgress,
|
||||||
|
TextField,
|
||||||
|
useMediaQuery,
|
||||||
|
useTheme,
|
||||||
|
} from '@mui/material';
|
||||||
|
import { useForm } from '@tanstack/react-form';
|
||||||
|
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||||
|
import { t } from 'i18next';
|
||||||
|
import { FC, FormEvent, useState } from 'react';
|
||||||
|
import Api from '../../../api/Api';
|
||||||
|
import { PostAuth, PostUpdate } from '../../../types/Post';
|
||||||
|
import ErrorComponent from '../../Error/ErrorComponent';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
post: PostAuth;
|
||||||
|
open: boolean;
|
||||||
|
onClose: () => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
const PostEditDialog: FC<Props> = ({ post, open, onClose }) => {
|
||||||
|
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
const [error, setError] = useState<any>();
|
||||||
|
const [characterCount, setCharacterCount] = useState(post.content.length);
|
||||||
|
|
||||||
|
const updateMutation = useMutation({
|
||||||
|
mutationFn: ({ data, id }: { data: PostUpdate; id: number }) => {
|
||||||
|
return Api.updatePost(data, id);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const form = useForm<PostUpdate>({
|
||||||
|
defaultValues: {
|
||||||
|
content: post.content.replaceAll('<br />', ''),
|
||||||
|
},
|
||||||
|
onSubmit: async ({ value }) => {
|
||||||
|
try {
|
||||||
|
updateMutation.mutate(
|
||||||
|
{ data: value, id: post.id },
|
||||||
|
{
|
||||||
|
onSuccess: () => {
|
||||||
|
handleClose();
|
||||||
|
|
||||||
|
queryClient.invalidateQueries({ queryKey: ['posts'] });
|
||||||
|
},
|
||||||
|
onError: setError,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
} catch (error: any) {
|
||||||
|
setError(error);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const theme = useTheme();
|
||||||
|
const fullScreen = useMediaQuery(theme.breakpoints.only('xs'), { noSsr: true });
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
|
const handleClose = () => {
|
||||||
|
form.reset();
|
||||||
|
setError(undefined);
|
||||||
|
onClose();
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Dialog
|
||||||
|
open={open}
|
||||||
|
onClose={handleClose}
|
||||||
|
fullWidth
|
||||||
|
fullScreen={fullScreen}
|
||||||
|
PaperProps={{
|
||||||
|
component: 'form',
|
||||||
|
onSubmit: (e: FormEvent<HTMLFormElement>) => {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
form.handleSubmit();
|
||||||
|
},
|
||||||
|
onKeyDown: (event: React.KeyboardEvent<HTMLFormElement>) => {
|
||||||
|
if (event.key === 'Tab') {
|
||||||
|
event.stopPropagation();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
noValidate: true,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<DialogTitle>{t('Edit post')}</DialogTitle>
|
||||||
|
<DialogContent>
|
||||||
|
<form.Field
|
||||||
|
name="content"
|
||||||
|
validators={{
|
||||||
|
onChange: ({ value }) => (!value ? t('Content required') : undefined),
|
||||||
|
onChangeAsyncDebounceMs: 250,
|
||||||
|
onChangeAsync: async ({ value }) => {
|
||||||
|
return !value && t('Content required');
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
children={(field) => {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<TextField
|
||||||
|
variant="outlined"
|
||||||
|
multiline
|
||||||
|
minRows={3}
|
||||||
|
name={field.name}
|
||||||
|
value={field.state.value}
|
||||||
|
onBlur={field.handleBlur}
|
||||||
|
onChange={(e) => {
|
||||||
|
if (e.target.value.length <= 250) {
|
||||||
|
setCharacterCount(e.target.value.length);
|
||||||
|
field.handleChange(e.target.value);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
size="small"
|
||||||
|
label={t('Comment')}
|
||||||
|
required
|
||||||
|
error={field.state.meta.isTouched && field.state.meta.errors.length > 0}
|
||||||
|
helperText={field.state.meta.isTouched ? field.state.meta.errors.join(',') : ''}
|
||||||
|
autoComplete="off"
|
||||||
|
margin="dense"
|
||||||
|
fullWidth
|
||||||
|
/>
|
||||||
|
<LinearProgress
|
||||||
|
variant="determinate"
|
||||||
|
value={(characterCount / 250) * 100}
|
||||||
|
color={characterCount === 250 ? 'error' : characterCount >= 200 ? 'warning' : 'primary'}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</DialogContent>
|
||||||
|
<DialogActions>
|
||||||
|
<form.Subscribe
|
||||||
|
selector={(state) => [state.canSubmit, state.isSubmitting]}
|
||||||
|
children={([canSubmit]) => (
|
||||||
|
<>
|
||||||
|
<Button
|
||||||
|
variant="outlined"
|
||||||
|
onClick={() => {
|
||||||
|
handleClose();
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{t('Cancel')}
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
type="submit"
|
||||||
|
disabled={!canSubmit || updateMutation.isPending}
|
||||||
|
autoFocus
|
||||||
|
variant="contained"
|
||||||
|
endIcon={updateMutation.isPending && <CircularProgress color="inherit" size="20px" />}
|
||||||
|
>
|
||||||
|
{t('Save')}
|
||||||
|
</Button>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
</DialogActions>
|
||||||
|
{error && (
|
||||||
|
<DialogContent>
|
||||||
|
<ErrorComponent error={error} context="postUpdate" />
|
||||||
|
</DialogContent>
|
||||||
|
)}
|
||||||
|
</Dialog>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default PostEditDialog;
|
||||||
+1
@@ -66,6 +66,7 @@ const UserEditDialog: FC<Props> = ({ user, open, onClose }) => {
|
|||||||
|
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
form.reset();
|
form.reset();
|
||||||
|
setError(undefined);
|
||||||
onClose();
|
onClose();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -13,6 +13,8 @@ interface Props {
|
|||||||
const ErrorComponent: FC<Props> = ({ error, context, color = 'error.main' }) => {
|
const ErrorComponent: FC<Props> = ({ error, context, color = 'error.main' }) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
console.log(error, context);
|
||||||
|
|
||||||
if (!error) return null;
|
if (!error) return null;
|
||||||
|
|
||||||
if (error.code) {
|
if (error.code) {
|
||||||
@@ -21,12 +23,18 @@ const ErrorComponent: FC<Props> = ({ error, context, color = 'error.main' }) =>
|
|||||||
return <Typography color={color}>{t(error.code, { context: `${error.entity}:${context}` })}</Typography>;
|
return <Typography color={color}>{t(error.code, { context: `${error.entity}:${context}` })}</Typography>;
|
||||||
case ERRORS.UNAUTHORIZED:
|
case ERRORS.UNAUTHORIZED:
|
||||||
return <Typography color={color}>{t(error.code, { context })}</Typography>;
|
return <Typography color={color}>{t(error.code, { context })}</Typography>;
|
||||||
case ERRORS.FAILEDUPDATE:
|
case ERRORS.FAILED_UPDATE:
|
||||||
return error.fields.map((field: string, index: number) => (
|
return error.fields.map((field: string, index: number) => (
|
||||||
<Typography key={`error_${field}`} color={color}>
|
<Typography key={`error_${field}`} color={color}>
|
||||||
{t(error.code, { context: `${error.reasons[index]}:${field}:${context}` })}
|
{t(error.code, { context: `${error.reasons[index]}:${field}:${context}` })}
|
||||||
</Typography>
|
</Typography>
|
||||||
));
|
));
|
||||||
|
case ERRORS.MISSING_FIELD:
|
||||||
|
return error.fields.map((field: string) => (
|
||||||
|
<Typography key={`error_${field}`} color={color}>
|
||||||
|
{t(error.code, { context: `${field}:${context}` })}
|
||||||
|
</Typography>
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
export enum ERRORS {
|
export enum ERRORS {
|
||||||
NOT_FOUND = 'NotFound',
|
NOT_FOUND = 'NotFound',
|
||||||
UNAUTHORIZED = 'Unauthorized',
|
UNAUTHORIZED = 'Unauthorized',
|
||||||
FAILEDUPDATE = 'FailedUpdate',
|
FAILED_UPDATE = 'FailedUpdate',
|
||||||
|
MISSING_FIELD = 'MissingField',
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,7 @@ import { useRouter } from '@tanstack/react-router';
|
|||||||
import { FC, useState } from 'react';
|
import { FC, useState } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import Api from '../../../api/Api';
|
import Api from '../../../api/Api';
|
||||||
|
import { Login } from '../../../types/User';
|
||||||
import ErrorComponent from '../../Error/ErrorComponent';
|
import ErrorComponent from '../../Error/ErrorComponent';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
@@ -16,7 +17,7 @@ const LoginForm: FC<Props> = ({ handleClose }) => {
|
|||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
const form = useForm({
|
const form = useForm<Login>({
|
||||||
defaultValues: {
|
defaultValues: {
|
||||||
email: '',
|
email: '',
|
||||||
password: '',
|
password: '',
|
||||||
@@ -74,6 +75,7 @@ const LoginForm: FC<Props> = ({ handleClose }) => {
|
|||||||
type="email"
|
type="email"
|
||||||
autoComplete="username"
|
autoComplete="username"
|
||||||
inputMode="email"
|
inputMode="email"
|
||||||
|
fullWidth
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
@@ -104,6 +106,7 @@ const LoginForm: FC<Props> = ({ handleClose }) => {
|
|||||||
helperText={field.state.meta.isTouched ? field.state.meta.errors.join(',') : ''}
|
helperText={field.state.meta.isTouched ? field.state.meta.errors.join(',') : ''}
|
||||||
type="password"
|
type="password"
|
||||||
autoComplete="password"
|
autoComplete="password"
|
||||||
|
fullWidth
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -0,0 +1,125 @@
|
|||||||
|
import { Box, Button, CircularProgress, LinearProgress, TextField } from '@mui/material';
|
||||||
|
import { useForm } from '@tanstack/react-form';
|
||||||
|
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||||
|
import { FC, useState } from 'react';
|
||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
|
import Api from '../../../api/Api';
|
||||||
|
import { PostUpdate } from '../../../types/Post';
|
||||||
|
import ErrorComponent from '../../Error/ErrorComponent';
|
||||||
|
|
||||||
|
const PostForm: FC = () => {
|
||||||
|
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
const [error, setError] = useState<any>();
|
||||||
|
const [characterCount, setCharacterCount] = useState(0);
|
||||||
|
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
|
const newMutation = useMutation({
|
||||||
|
mutationFn: ({ data }: { data: PostUpdate }) => {
|
||||||
|
return Api.newPost(data);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const form = useForm<PostUpdate>({
|
||||||
|
defaultValues: {
|
||||||
|
content: '',
|
||||||
|
},
|
||||||
|
onSubmit: async ({ value }) => {
|
||||||
|
try {
|
||||||
|
newMutation.mutate(
|
||||||
|
{ data: value },
|
||||||
|
{
|
||||||
|
onSuccess: () => {
|
||||||
|
queryClient.invalidateQueries({ queryKey: ['posts'] });
|
||||||
|
},
|
||||||
|
onError: setError,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
} catch (error: any) {
|
||||||
|
setError(error);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<form
|
||||||
|
onSubmit={(e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
form.handleSubmit();
|
||||||
|
}}
|
||||||
|
onKeyDown={(event) => {
|
||||||
|
if (event.key === 'Tab') {
|
||||||
|
event.stopPropagation();
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
noValidate
|
||||||
|
>
|
||||||
|
<Box sx={{ display: 'grid', gap: 2, padding: 1 }}>
|
||||||
|
<form.Field
|
||||||
|
name="content"
|
||||||
|
validators={{
|
||||||
|
onChange: ({ value }) => (!value ? t('Content required') : undefined),
|
||||||
|
onChangeAsyncDebounceMs: 250,
|
||||||
|
onChangeAsync: async ({ value }) => {
|
||||||
|
return !value && t('Content required');
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
children={(field) => {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<TextField
|
||||||
|
variant="outlined"
|
||||||
|
multiline
|
||||||
|
minRows={3}
|
||||||
|
name={field.name}
|
||||||
|
value={field.state.value}
|
||||||
|
onBlur={field.handleBlur}
|
||||||
|
onChange={(e) => {
|
||||||
|
if (e.target.value.length <= 250) {
|
||||||
|
setCharacterCount(e.target.value.length);
|
||||||
|
field.handleChange(e.target.value);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
size="small"
|
||||||
|
label={t('Comment')}
|
||||||
|
required
|
||||||
|
error={field.state.meta.isTouched && field.state.meta.errors.length > 0}
|
||||||
|
helperText={field.state.meta.isTouched ? field.state.meta.errors.join(',') : ''}
|
||||||
|
autoComplete="off"
|
||||||
|
fullWidth
|
||||||
|
/>
|
||||||
|
<LinearProgress
|
||||||
|
variant="determinate"
|
||||||
|
value={(characterCount / 250) * 100}
|
||||||
|
color={characterCount === 250 ? 'error' : characterCount >= 200 ? 'warning' : 'primary'}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<form.Subscribe
|
||||||
|
selector={(state) => [state.canSubmit, state.isSubmitting]}
|
||||||
|
children={([canSubmit]) => (
|
||||||
|
<>
|
||||||
|
<Button
|
||||||
|
type="submit"
|
||||||
|
disabled={!canSubmit || newMutation.isPending}
|
||||||
|
variant="contained"
|
||||||
|
endIcon={newMutation.isPending && <CircularProgress color="inherit" size="20px" />}
|
||||||
|
>
|
||||||
|
{t('Post comment')}
|
||||||
|
</Button>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
{error && <ErrorComponent error={error} context="newPost" />}
|
||||||
|
</Box>
|
||||||
|
</form>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default PostForm;
|
||||||
@@ -23,6 +23,7 @@ import { useTranslation } from 'react-i18next';
|
|||||||
import Api from '../../api/Api';
|
import Api from '../../api/Api';
|
||||||
import { PostAuth, PostNonAuth } from '../../types/Post';
|
import { PostAuth, PostNonAuth } from '../../types/Post';
|
||||||
import convertDate from '../../utils/date';
|
import convertDate from '../../utils/date';
|
||||||
|
import PostEditDialog from '../Dialogs/PostEdit/PostEditDialog';
|
||||||
import ErrorComponent from '../Error/ErrorComponent';
|
import ErrorComponent from '../Error/ErrorComponent';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
@@ -30,7 +31,8 @@ interface Props {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const Post: FC<Props> = ({ post }) => {
|
const Post: FC<Props> = ({ post }) => {
|
||||||
const [open, setOpen] = useState(false);
|
const [deleteOpen, setDeleteOpen] = useState(false);
|
||||||
|
const [editOpen, setEditOpen] = useState(false);
|
||||||
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
const [error, setError] = useState<any>();
|
const [error, setError] = useState<any>();
|
||||||
|
|
||||||
@@ -86,22 +88,32 @@ const Post: FC<Props> = ({ post }) => {
|
|||||||
subheader={convertDate(post.postedAt)}
|
subheader={convertDate(post.postedAt)}
|
||||||
/>
|
/>
|
||||||
<CardContent>
|
<CardContent>
|
||||||
<Typography>{post.content}</Typography>
|
<Typography>
|
||||||
|
<span dangerouslySetInnerHTML={{ __html: post.content }} />
|
||||||
|
</Typography>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
|
|
||||||
<CardActions>
|
<CardActions>
|
||||||
|
{(Api.isAdmin() || ('id' in post.user && post.user.id === Api.getAuthenticatedUser()?.id)) && (
|
||||||
|
<>
|
||||||
|
<Button size="small" onClick={() => setEditOpen(true)}>
|
||||||
|
{t('Edit')}
|
||||||
|
</Button>
|
||||||
|
<PostEditDialog post={post as PostAuth} open={editOpen} onClose={() => setEditOpen(false)} />
|
||||||
|
</>
|
||||||
|
)}
|
||||||
{Api.isAdmin() && (
|
{Api.isAdmin() && (
|
||||||
<>
|
<>
|
||||||
<Button size="small" color="error" onClick={() => setOpen(true)}>
|
<Button size="small" color="error" onClick={() => setDeleteOpen(true)}>
|
||||||
{t('Delete')}
|
{t('Delete')}
|
||||||
</Button>
|
</Button>
|
||||||
<Dialog open={open} onClose={() => setOpen(false)}>
|
<Dialog open={deleteOpen} onClose={() => setDeleteOpen(false)}>
|
||||||
<DialogTitle>{t('Confirm post delete title')}</DialogTitle>
|
<DialogTitle>{t('Confirm post delete title')}</DialogTitle>
|
||||||
<DialogContent>
|
<DialogContent>
|
||||||
<DialogContentText>{t('Confirm post delete body', { name: post.user.username })}</DialogContentText>
|
<DialogContentText>{t('Confirm post delete body', { name: post.user.username })}</DialogContentText>
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
<DialogActions>
|
<DialogActions>
|
||||||
<Button onClick={() => setOpen(false)} autoFocus variant="contained">
|
<Button onClick={() => setDeleteOpen(false)} autoFocus variant="contained">
|
||||||
{t('No')}
|
{t('No')}
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
@@ -116,7 +128,7 @@ const Post: FC<Props> = ({ post }) => {
|
|||||||
},
|
},
|
||||||
onError: setError,
|
onError: setError,
|
||||||
});
|
});
|
||||||
setOpen(false);
|
setDeleteOpen(false);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{t('Yes')}
|
{t('Yes')}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { FC, useState } from 'react';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { User } from '../../types/User';
|
import { User } from '../../types/User';
|
||||||
import convertDate from '../../utils/date';
|
import convertDate from '../../utils/date';
|
||||||
import UserEditDialog from '../Forms/UserEdit/UserEditDialog';
|
import UserEditDialog from '../Dialogs/UserEdit/UserEditDialog';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
user: User;
|
user: User;
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
export const POST_LIMIT = 15;
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
import { Grid, Pagination, PaginationItem, Snackbar } from '@mui/material';
|
import { Divider, Grid, Pagination, PaginationItem, Snackbar } from '@mui/material';
|
||||||
import { useSuspenseQuery } from '@tanstack/react-query';
|
import { useSuspenseQuery } from '@tanstack/react-query';
|
||||||
import { createFileRoute, Link } from '@tanstack/react-router';
|
import { createFileRoute, Link } from '@tanstack/react-router';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
import Api from '../api/Api';
|
||||||
|
import PostForm from '../components/Forms/Post/PostForm';
|
||||||
import Post from '../components/Post/Post';
|
import Post from '../components/Post/Post';
|
||||||
import { postsQueryOptions } from '../queries/postsQuery';
|
import { postsQueryOptions } from '../queries/postsQuery';
|
||||||
import { ROUTES } from '../types/Routes';
|
import { ROUTES } from '../types/Routes';
|
||||||
@@ -20,6 +22,14 @@ const Home = () => {
|
|||||||
<Post post={post} />
|
<Post post={post} />
|
||||||
</Grid>
|
</Grid>
|
||||||
))}
|
))}
|
||||||
|
<Grid item xs={12}>
|
||||||
|
<Divider variant="middle" />
|
||||||
|
</Grid>
|
||||||
|
{Api.hasAuth() && (
|
||||||
|
<Grid item xs={12}>
|
||||||
|
<PostForm />
|
||||||
|
</Grid>
|
||||||
|
)}
|
||||||
<Grid item xs={12} sx={{ display: 'flex', justifyContent: 'center' }}>
|
<Grid item xs={12} sx={{ display: 'flex', justifyContent: 'center' }}>
|
||||||
<Pagination
|
<Pagination
|
||||||
page={(page ?? 0) + 1}
|
page={(page ?? 0) + 1}
|
||||||
|
|||||||
@@ -27,3 +27,7 @@ export interface PostListAuth {
|
|||||||
pages: number;
|
pages: number;
|
||||||
data: PostNonAuth[];
|
data: PostNonAuth[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface PostUpdate {
|
||||||
|
content?: string;
|
||||||
|
}
|
||||||
@@ -16,3 +16,8 @@ export interface UserUpdate {
|
|||||||
email?: string;
|
email?: string;
|
||||||
password?: string;
|
password?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface Login {
|
||||||
|
email: string;
|
||||||
|
password: string;
|
||||||
|
}
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"composite": true,
|
"composite": true,
|
||||||
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
|
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
|
||||||
"target": "ES2020",
|
"target": "ES2021",
|
||||||
"useDefineForClassFields": true,
|
"useDefineForClassFields": true,
|
||||||
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
"lib": ["ES2021", "DOM", "DOM.Iterable"],
|
||||||
"module": "ESNext",
|
"module": "ESNext",
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user