TYPO3 v15 dev-main snapshot ()

This commit is contained in:
2026-08-10 22:31:14 +02:00
commit ff4622ba97
138 changed files with 9045 additions and 0 deletions
+24
View File
@@ -0,0 +1,24 @@
/*!
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
.dashboard-modal-tabpanel .nav{margin:-15px -15px 0;padding:15px 15px 0}
.dashboard-modal-items{display:grid;gap:var(--typo3-spacing);grid-template-columns:repeat(2,1fr)}
.dashboard-modal-item-block{background-color:var(--typo3-component-bg);border:var(--typo3-component-border-width) solid var(--typo3-component-border-color);border-radius:var(--typo3-component-border-radius);box-shadow:var(--typo3-component-box-shadow);color:var(--typo3-component-color);display:flex;font-weight:400;gap:var(--typo3-spacing);grid-column:span 2;height:100%;padding:var(--typo3-component-padding-y) var(--typo3-component-padding-x);text-align:left}
.dashboard-modal-item-block>*{-webkit-user-select:none;-moz-user-select:none;user-select:none}
.dashboard-modal-item-block:hover{background-color:var(--typo3-component-hover-bg);border:var(--typo3-component-border-width) solid var(--typo3-component-hover-border-color);color:var(--typo3-component-hover-color)}
@media screen and (min-width:768px){
.dashboard-modal-item-block{grid-column:span 1}}
.dashboard-modal-item-checkbox{cursor:pointer;height:0;opacity:0;position:absolute;width:0}
.dashboard-modal-item-checkbox:focus~.dashboard-modal-item-block{background-color:var(--typo3-component-focus-bg);border:var(--typo3-component-border-width) solid var(--typo3-component-focus-border-color);color:var(--typo3-component-focus-color);outline:var(--typo3-outline-width) var(--typo3-outline-style) color-mix(in srgb,var(--typo3-component-focus-border-color),transparent 25%)}
.dashboard-modal-item-checkbox:checked~.dashboard-modal-item-block{background-color:var(--typo3-component-active-bg);border:var(--typo3-component-border-width) solid var(--typo3-component-active-border-color);color:var(--typo3-component-active-color)}
.dashboard-modal-item-checkbox:focus:checked~.dashboard-modal-item-block{outline:var(--typo3-outline-width) var(--typo3-outline-style) color-mix(in srgb,var(--typo3-component-active-border-color),transparent 25%)}
.dashboard-modal-item-title{display:block;font-weight:700}
+84
View File
@@ -0,0 +1,84 @@
/*!
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
.dashboard-header{--dashboard-header-bg:var(--typo3-surface-container-high);--dashboard-header-border-color:var(--typo3-surface-container-highest);background:var(--dashboard-header-bg);border-bottom:1px solid var(--dashboard-header-border-color);margin:calc(var(--module-body-padding-y)*-1) calc(var(--module-body-padding-x)*-1) var(--module-body-padding-y);padding:var(--module-body-padding-y) var(--module-body-padding-x) 0}
.dashboard-header-container{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem;justify-content:space-between}
.dashboard-loader{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}
.dashboard-tabs{align-items:center;display:flex;flex-wrap:wrap;gap:.25rem}
.dashboard-tabs-menu{display:flex;gap:2px;list-style:none;margin:0;padding:0}
.dashboard-tab{--dashboard-header-tab-padding:1rem;--dashboard-header-tab-state-color:initial;--dashboard-header-tab-state-bg:initial;--dashboard-header-tab-border-color:color-mix(in srgb,var(--dashboard-header-tab-bg),var(--dashboard-header-tab-color) var(--typo3-border-mix));--dashboard-header-tab-color:var(--dashboard-header-tab-state-color,var(--module-color));--dashboard-header-tab-bg:var(--dashboard-header-tab-state-bg,color-mix(in srgb,var(--module-bg),var(--dashboard-header-tab-color) 5%));--dashboard-header-tab-hover-color:var(--dashboard-header-tab-color);--dashboard-header-tab-hover-bg:color-mix(in srgb,color-mix(in srgb,var(--module-bg),var(--dashboard-header-tab-color) 5%),var(--dashboard-header-tab-color) 5%);--dashboard-header-tab-focus-color:var(--typo3-state-default-focus-color);--dashboard-header-tab-focus-bg:var(--typo3-state-default-focus-bg);--dashboard-header-tab-active-color:var(--module-color);--dashboard-header-tab-active-bg:var(--module-bg);--dashboard-header-tab-border-radius:var(--typo3-component-border-radius);border:1px solid var(--dashboard-header-tab-border-color);border-radius:var(--dashboard-header-tab-border-radius) var(--dashboard-header-tab-border-radius) 0 0;-webkit-margin-after:-1px;background:var(--dashboard-header-tab-bg);color:var(--dashboard-header-tab-color);display:inline-block;margin-block-end:-1px;outline-offset:-1px;padding:calc(var(--dashboard-header-tab-padding)/1.5) var(--dashboard-header-tab-padding)}
.dashboard-tab:focus,.dashboard-tab:hover{--dashboard-header-tab-state-bg:var(--dashboard-header-tab-hover-bg);isolation:isolate;text-decoration:none}
.dashboard-tab:focus-visible{border-radius:var(--dashboard-header-tab-border-radius);outline:var(--typo3-outline-width) var(--typo3-outline-style) color-mix(in srgb,var(--dashboard-header-tab-color),transparent 50%)}
.dashboard-tab--active{--dashboard-header-tab-state-color:var(--dashboard-header-tab-active-color)!important;--dashboard-header-tab-state-bg:var(--dashboard-header-tab-active-bg)!important;border-bottom-color:var(--dashboard-header-tab-state-bg)}
.dashboard-tab:has(+.btn-dashboard-add-tab){-webkit-margin-end:.25rem;margin-inline-end:.25rem}
.dashboard-empty{position:relative}
.dashboard-empty-content{background-color:var(--typo3-component-bg);border:var(--typo3-component-border-width) dashed var(--typo3-component-border-color);border-radius:var(--typo3-component-border-radius);padding:2.5em;text-align:center}
.dashboard-empty-content h3{font-size:1.5em;margin-bottom:.5em}
.dashboard-empty-content p{font-size:1.25em;margin-bottom:1em}
.dashboard-empty-content>:first-child{margin-top:0}
.dashboard-empty-content>:last-child{margin-bottom:0}
typo3-dashboard{display:block;width:100%}
.dashboard-configuration{margin:.25rem 0}
.dashboard-container{max-width:1600px;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto}
.dashboard-dragging-container>typo3-dashboard-widget{position:fixed}
.dashboard-grid{--gutter:20px;--columns:1;--row-height:200px;display:grid;grid-template-columns:repeat(var(--columns),1fr);grid-gap:var(--gutter);grid-auto-rows:var(--row-height)}
.dashboard-item{--dashboard-item-border-color:transparent;--dashboard-item-border-radius:var(--typo3-component-border-radius);--dashboard-item-bg:transparent;--dashboard-item-active-border-color:var(--typo3-state-primary-border-color);--dashboard-item-active-bg:color-mix(in srgb,transparent,var(--typo3-state-primary-bg) 10%);--col-start:1;--col-span:1;--row-start:1;--row-span:1;background-color:var(--dashboard-item-bg);border-radius:var(--dashboard-item-border-radius);contain:inline-size;grid-column:var(--col-start)/span var(--col-span);grid-row:var(--row-start)/span var(--row-span);outline:1px dashed var(--dashboard-item-border-color);outline-offset:-1px;transition:outline .15s ease-out,background-color .15s ease-out}
@media (prefers-reduced-motion:reduce){
.dashboard-item{transition:none}}
.dashboard-item-content{height:100%;position:relative;width:100%}
.dashboard-item-dragging{--dashboard-item-border-color:var(--dashboard-item-active-border-color);--dashboard-item-bg:var(--dashboard-item-active-bg)}
.btn-dashboard-add-widget{--typo3-btn-padding-y:1rem;--typo3-btn-padding-x:1rem;bottom:24px;box-shadow:var(--typo3-component-box-shadow-flyout);inset-inline-end:24px;position:fixed;z-index:2}
.widget{--widget-padding:1.25rem;--widget-color:var(--typo3-component-color);--widget-bg:var(--typo3-component-bg);--widget-border-width:1px;--widget-border-radius:var(--typo3-component-border-radius);--widget-border-color:color-mix(in srgb,var(--widget-bg),var(--widget-color) var(--typo3-border-mix));--widget-box-shadow:var(--typo3-component-box-shadow);--widget-title-font-size:1rem;--widget-title-line-height:1.25;--widget-title-font-family:var(--typo3-header-font-family);--widget-title-color-state:initial;--widget-title-bg-state:initial;--widget-title-color:var(--widget-color);--widget-title-bg:var(--widget-bg);--widget-action-size:28px;background-color:var(--widget-bg);border:var(--widget-border-width) solid var(--widget-border-color);border-radius:var(--widget-border-radius);box-shadow:var(--widget-box-shadow);color:var(--widget-color);display:flex;flex-direction:column;height:100%;overflow:hidden}
.widget:focus-within .widget-action,.widget:hover .widget-action{opacity:.75}
.widget.widget-selected{--widget-border-color:var(--typo3-state-primary-border-color)}
.widget-loader{flex-grow:1;justify-content:center}
.widget-header,.widget-loader{align-items:center;display:flex}
.widget-header{border-bottom:var(--typo3-component-border-width) solid var(--typo3-component-border-color);cursor:grab;gap:var(--typo3-spacing);justify-content:space-between;padding:var(--typo3-component-padding-y) var(--typo3-component-padding-x)}
.widget-title{display:block;font-family:var(--typo3-header-font-family);font-size:.875rem;font-weight:700;line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.widget-content{display:flex;flex-direction:column;height:100%;-webkit-user-select:text;-moz-user-select:text;user-select:text}
.widget-content-title{background-color:var(--widget-title-bg-state,var(--widget-title-bg));color:var(--widget-title-color-state,var(--widget-title-color));padding:calc(var(--widget-padding)/2) var(--widget-padding);-webkit-padding-end:calc(var(--widget-action-size)*3 + var(--widget-padding));border-bottom:var(--widget-border-width) solid var(--widget-border-color);font-family:var(--widget-title-font-family);font-size:var(--widget-title-font-size);font-weight:700;line-height:var(--widget-title-line-height);padding-inline-end:calc(var(--widget-action-size)*3 + var(--widget-padding))}
.widget-content-title span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.widget-content-title h2{margin-bottom:0}
.widget-content-main{flex-basis:0;flex-grow:1;overflow-y:auto;padding:var(--widget-padding)}
.widget-content-footer{padding:var(--widget-padding);padding-top:0}
.widget-actions{color:var(--widget-title-color-state,var(--widget-title-color));display:flex;inset-inline-end:calc(var(--widget-padding)/2)}
.widget-action{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:none;border-radius:4px;color:inherit;height:var(--widget-action-size);opacity:.5;position:relative;text-align:center;transition:opacity .2s ease-in-out;width:var(--widget-action-size)}
.widget-action:focus,.widget-action:hover{opacity:1!important}
.widget-action:focus,.widget-action:focus-visible{outline:var(--typo3-outline-width) var(--typo3-outline-style) color-mix(in srgb,currentColor,transparent 25%)!important}
.widget-action .icon{inset-inline-start:50%;position:absolute;top:50%;transform:translate(calc(-50%*var(--typo3-position-modifier)),-50%)}
.widget-action-move{cursor:grab}
.widget-chart{height:100%;width:100%}
.widget-edit{text-align:center;width:45px}
.widget-identifier-sys_note_default{--widget-title-bg:var(--typo3-state-default-bg);--widget-title-color:var(--typo3-state-default-color)}
.widget-identifier-sys_note_todos{--widget-title-bg:var(--typo3-state-success-bg);--widget-title-color:var(--typo3-state-success-color)}
.widget-identifier-sys_note_instructions{--widget-title-bg:var(--typo3-state-info-bg);--widget-title-color:var(--typo3-state-info-color)}
.widget-identifier-sys_note_notes{--widget-title-bg:var(--typo3-state-notice-bg);--widget-title-color:var(--typo3-state-notice-color)}
.widget-identifier-sys_note_template{--widget-title-bg:var(--typo3-state-warning-bg);--widget-title-color:var(--typo3-state-warning-color)}
.widget-table-wrapper{margin:calc(var(--widget-padding)*-1)}
.widget-table{margin:0}
.widget-table td:first-child,.widget-table th:first-child{-webkit-padding-start:var(--widget-padding);padding-inline-start:var(--widget-padding)}
.widget-table td:last-child,.widget-table th:last-child{-webkit-padding-end:var(--widget-padding);padding-inline-end:var(--widget-padding)}
.widget-table tbody:last-child tr:last-child td,.widget-table tbody:last-child tr:last-child th{border-bottom:none}
.widget-cta{--widget-cta-padding:8px;--widget-cta-bg:var(--typo3-state-secondary-bg);--widget-cta-color:var(--typo3-state-secondary-color);--widget-cta-hover-bg:var(--typo3-state-primary-hover-bg);--widget-cta-hover-color:var(--typo3-state-primary-hover-color);--widget-cta-focus-bg:var(--typo3-state-primary-focus-bg);--widget-cta-focus-color:var(--typo3-state-primary-focus-color);--widget-cta-border-radius:var(--typo3-component-border-radius);align-items:center;background-color:var(--widget-cta-bg);border-radius:var(--widget-cta-border-radius);color:var(--widget-cta-color);display:flex;justify-content:center;outline-offset:0;padding:var(--widget-cta-padding)}
.widget-cta:hover{--widget-cta-color:var(--widget-cta-hover-color);--widget-cta-bg:var(--widget-cta-hover-bg);text-decoration:none}
.widget-cta:focus{--widget-cta-color:var(--widget-cta-focus-color);--widget-cta-bg:var(--widget-cta-focus-bg);text-decoration:none}
.widget-cta:focus-visible{outline:var(--typo3-outline-width) var(--typo3-outline-style) color-mix(in srgb,var(--widget-cta-bg),transparent 25%)}
.widget-cta-icon{align-items:center;display:flex;height:18px;justify-content:center;width:18px;-webkit-margin-end:12px;color:var(--widget-cta-color);margin-inline-end:12px}
.widget-number{align-items:center;display:flex;height:100%}
.widget-number-icon{align-items:center;display:flex;width:42px;-webkit-margin-end:20px;margin-inline-end:20px}
.widget-number-content{display:flex;flex-direction:column;justify-content:center}
.widget-number-title{font-size:1rem;line-height:1.3;margin-bottom:5px}
.widget-number-number{font-size:24px;font-weight:900;line-height:1.3}
.widget-listgroup{--typo3-list-group-border-radius:0;--typo3-outline-width:2px;margin:calc(var(--widget-padding)*-1)}
.widget-listgroup .list-group-item{-webkit-border-start:0;border-inline-start:0;-webkit-border-end:0;border-inline-end:0;outline-offset:calc(var(--typo3-outline-width)*-1)}
.widget-listgroup .list-group-item:first-child{-webkit-border-before:0;border-block-start:0}
.widget-listgroup .list-group-item:last-child{-webkit-border-after:0;border-block-end:0}
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><path fill="#A4276A" d="M0 0h64v64H0z"/><path opacity=".5" fill="#FFF" d="M40 16h10v-1c0-.5-.5-1-1-1h-9v2z"/><path opacity=".75" fill="#FFF" d="M28 14h10v2H28z"/><path fill="#FFF" d="M40 18H26v-4H15c-.5 0-1 .5-1 1v34c0 .5.5 1 1 1h34c.5 0 1-.5 1-1V18H40z"/><path fill="#A4276A" d="M38 22h8v14h-8z"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#A4276A" d="M18 22h18v14H18z"/><path opacity=".5" fill="#FFF" d="M38 24h8v12h-8z"/><path opacity=".5" fill-rule="evenodd" clip-rule="evenodd" fill="#FFF" d="M36 36H18v-4l6-2 4 2 4-2 4-6z"/><path fill="#A4276A" d="M28 40h18v2H28zM28 44h10v2H28zM18 40h8v6h-8z"/><path opacity=".5" fill="#FFF" d="M18 42h8v4h-8z"/></svg>

After

Width:  |  Height:  |  Size: 728 B

File diff suppressed because one or more lines are too long
@@ -0,0 +1,13 @@
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
import{Chart as t,ArcElement as i,LineElement as c,BarElement as d,PointElement as s,BarController as g,BubbleController as f,DoughnutController as u,LineController as h,PieController as C,PolarAreaController as m,RadarController as p,ScatterController as S,CategoryScale as b,LinearScale as v,LogarithmicScale as w,RadialLinearScale as y,TimeScale as E,TimeSeriesScale as L,Decimation as T,Filler as k,Legend as x,Title as z,Tooltip as D,SubTitle as R}from"chart.js";import B from"@typo3/core/event/regular-event.js";import{DashboardWidgetContentRenderedEvent as M}from"@typo3/dashboard/dashboard.js";class P{constructor(){this.selector=".dashboard-item",this.initialize()}initialize(){t.register(i,c,d,s,g,f,u,h,C,m,p,S,b,v,w,y,E,L,T,k,x,z,D,R),new B(M.eventName,(r,a)=>{r.preventDefault();const e=r.widget.eventdata;if(e===void 0||e.graphConfig===void 0)return;const l=a.querySelector("canvas");let o;if(l!==null&&(o=l.getContext("2d")),o===void 0)return;this.darkModeEnabled()?(e.graphConfig.options.color="#ccc",e.graphConfig.options.borderColor="#000",t.defaults.borderColor="rgba(255,255,255,.1)",t.defaults.color="#ccc"):(e.graphConfig.options.color="#666",e.graphConfig.options.borderColor="#fff",t.defaults.borderColor="rgba(0,0,0,.1)",t.defaults.color="#666");const n=t.getChart(o);if(n){n.data=e.graphConfig.data,n.options=e.graphConfig.options,n.update();return}new t(o,e.graphConfig)}).delegateTo(document,this.selector)}darkModeEnabled(){const r=document.querySelector(this.selector),e=window.getComputedStyle(r).colorScheme;return e==="light only"||e==="light"?!1:e==="dark only"||e==="dark"?!0:window.matchMedia("(prefers-color-scheme: dark)").matches}}var q=new P;export{q as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1,13 @@
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
import{LitElement as f,html as d,nothing as k}from"lit";import{property as m,state as c,customElement as y}from"lit/decorators.js";import{repeat as h}from"lit/directives/repeat.js";import g from"~labels/core.bookmarks";import u,{BookmarkStoreChangedEvent as b}from"@typo3/backend/bookmark/bookmark-store.js";import"@typo3/backend/bookmark/bookmark-manager.js";var l=function(r,t,e,s){var a=arguments.length,o=a<3?t:s===null?s=Object.getOwnPropertyDescriptor(t,e):s,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(r,t,e,s);else for(var p=r.length-1;p>=0;p--)(i=r[p])&&(o=(a<3?i(o):a>3?i(t,e,o):i(t,e))||o);return a>3&&o&&Object.defineProperty(t,e,o),o};let n=class extends f{constructor(){super(...arguments),this.limit=0,this.groupId=null,this.groupedBookmarks=new Map,this.groups=[],this.handleStoreUpdate=()=>{this.syncFromStore()}}connectedCallback(){super.connectedCallback(),document.addEventListener(b,this.handleStoreUpdate),this.syncFromStore()}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener(b,this.handleStoreUpdate)}createRenderRoot(){return this}render(){return this.groupedBookmarks.size===0?d`<p class=dropdown-item-text>${g.get("description")}</p>`:d`<div class=widget-table-wrapper>${h(Array.from(this.groupedBookmarks.entries()),([t])=>t,([t,e])=>this.renderGroup(t,e,this.groupedBookmarks.size>1))}</div>`}async syncFromStore(){this.groupedBookmarks=await u.getGroupedBookmarks({groupId:this.groupId??void 0,limit:this.limit>0?this.limit:void 0,accessibleOnly:!0}),this.groups=await u.getGroups()}renderGroup(t,e,s){const o=this.groups.find(i=>i.id===t)?.label||g.get("notGrouped");return d`<table class="widget-table table table-striped table-hover">${s&&this.groupId===null?d`<thead><tr><th>${o}</th></tr></thead>`:k}<tbody>${h(e,i=>i.id,i=>this.renderBookmarkRow(i))}</tbody></table>`}renderBookmarkRow(t){return d`<tr><td><span class="bookmark-item-column bookmark-item-column-icon" aria-hidden=true> <typo3-backend-icon identifier=${t.iconIdentifier} overlay=${t.iconOverlayIdentifier} size=small></typo3-backend-icon> </span> <a href=${t.href} title=${t.title} @click=${e=>this.handleNavigate(e,t)}><span class="bookmark-item-column bookmark-item-column-title"> ${t.title} </span> </a></td></tr>`}handleNavigate(t,e){t.preventDefault(),u.navigate(e)}};l([m({type:Number})],n.prototype,"limit",void 0),l([m({attribute:"group",converter:{fromAttribute:r=>{if(r===null||r==="")return null;const t=Number(r);return Number.isNaN(t)?r:t},toAttribute:r=>r===null?null:String(r)}})],n.prototype,"groupId",void 0),l([c()],n.prototype,"groupedBookmarks",void 0),l([c()],n.prototype,"groups",void 0),n=l([y("typo3-dashboard-bookmarks-widget")],n);export{n as BookmarksWidgetElement};