| ... | ... |
@@ -1,6 +1,15 @@ |
| 1 | 1 |
:root {
|
| 2 |
- --luumicore-primary: #007bff; |
|
| 3 |
- --luumicore-text-color: #333; |
|
| 2 |
+ --luumicore-primary: #8c124d; |
|
| 3 |
+ --luumicore-primary-tint: color-mix(in srgb, var(--luumicore-primary), #ffffff 85%); |
|
| 4 |
+ --luumicore-secondary: #f0f0f0; |
|
| 5 |
+ --luumicore-tertiary: #ffffff; |
|
| 6 |
+ --luumicore-text-color: #000000; |
|
| 7 |
+ --luumicore-shadow-color: rgba(from #000 r g b / 15%); |
|
| 8 |
+ |
|
| 9 |
+ --luumicore-shadow: .25rem .25rem .25rem var(--luumicore-shadow-color); |
|
| 10 |
+ |
|
| 11 |
+ --luumicore-border-radius: 1rem; |
|
| 12 |
+ --luumicore-element-spacing: 2rem; |
|
| 4 | 13 |
} |
| 5 | 14 |
|
| 6 | 15 |
/* Global styles for the core bundle */ |
| ... | ... |
@@ -3,12 +3,22 @@ import { LitElement, html, css } from 'lit';
|
| 3 | 3 |
export class LuumicoreCard extends LitElement {
|
| 4 | 4 |
static styles = css` |
| 5 | 5 |
:host {
|
| 6 |
+ --luumicore-card-bg: var(--luumicore-secondary, #fff); |
|
| 7 |
+ --luumicore-card-border-color: var(--luumicore-secondary, #fff); |
|
| 8 |
+ --luumicore-card-border-radius: var(--luumicore-border-radius, 1rem); |
|
| 9 |
+ --luumicore-card-shadow: var(--luumicore-shadow, .25rem .25rem 1rem rgba(0,0,0,0.2)); |
|
| 10 |
+ --luumicore-card-spacing: var(--luumicore-element-spacing, 2rem); |
|
| 11 |
+ |
|
| 6 | 12 |
display: block; |
| 7 |
- border: 1px solid var(--luumicore-border-color, #ddd); |
|
| 8 |
- border-radius: var(--luumicore-border-radius, 8px); |
|
| 13 |
+ border: 1px solid var(--luumicore-card-border-color); |
|
| 14 |
+ border-radius: var(--luumicore-card-border-radius); |
|
| 9 | 15 |
overflow: hidden; |
| 10 |
- background-color: var(--luumicore-card-bg, #fff); |
|
| 11 |
- box-shadow: var(--luumicore-shadow, 0 2px 4px rgba(0,0,0,0.1)); |
|
| 16 |
+ background-color: var(--luumicore-card-bg); |
|
| 17 |
+ box-shadow: var(--luumicore-card-shadow); |
|
| 18 |
+ } |
|
| 19 |
+ |
|
| 20 |
+ :host(:not(:last-child)) {
|
|
| 21 |
+ margin-bottom: var(--luumicore-card-spacing); |
|
| 12 | 22 |
} |
| 13 | 23 |
|
| 14 | 24 |
.card-image {
|
| ... | ... |
@@ -1 +1 @@ |
| 1 |
-:root{--luumicore-primary: #007bff;--luumicore-text-color: #333}
|
|
| 1 |
+:root{--luumicore-primary: #8c124d;--luumicore-primary-tint: color-mix(in srgb, var(--luumicore-primary), #ffffff 85%);--luumicore-secondary: #f0f0f0;--luumicore-tertiary: #ffffff;--luumicore-text-color: #000000;--luumicore-shadow-color: rgba(from #000 r g b / 15%);--luumicore-shadow: .25rem .25rem .25rem var(--luumicore-shadow-color);--luumicore-border-radius: 1rem;--luumicore-element-spacing: 2rem}
|
| ... | ... |
@@ -1,6 +1,6 @@ |
| 1 |
-var ft = Object.defineProperty; |
|
| 2 |
-var mt = (r, t, e) => t in r ? ft(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
|
|
| 3 |
-var b = (r, t, e) => mt(r, typeof t != "symbol" ? t + "" : t, e); |
|
| 1 |
+var mt = Object.defineProperty; |
|
| 2 |
+var ft = (r, t, e) => t in r ? mt(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
|
|
| 3 |
+var b = (r, t, e) => ft(r, typeof t != "symbol" ? t + "" : t, e); |
|
| 4 | 4 |
/** |
| 5 | 5 |
* @license |
| 6 | 6 |
* Copyright 2019 Google LLC |
| ... | ... |
@@ -48,7 +48,7 @@ const _t = (r) => new nt(typeof r == "string" ? r : r + "", void 0, Z), D = (r, |
| 48 | 48 |
* Copyright 2017 Google LLC |
| 49 | 49 |
* SPDX-License-Identifier: BSD-3-Clause |
| 50 | 50 |
*/ |
| 51 |
-const { is: At, defineProperty: yt, getOwnPropertyDescriptor: vt, getOwnPropertyNames: bt, getOwnPropertySymbols: Et, getPrototypeOf: St } = Object, m = globalThis, G = m.trustedTypes, xt = G ? G.emptyScript : "", L = m.reactiveElementPolyfillSupport, C = (r, t) => r, V = { toAttribute(r, t) {
|
|
| 51 |
+const { is: At, defineProperty: vt, getOwnPropertyDescriptor: yt, getOwnPropertyNames: bt, getOwnPropertySymbols: Et, getPrototypeOf: St } = Object, f = globalThis, G = f.trustedTypes, xt = G ? G.emptyScript : "", L = f.reactiveElementPolyfillSupport, C = (r, t) => r, V = { toAttribute(r, t) {
|
|
| 52 | 52 |
switch (t) {
|
| 53 | 53 |
case Boolean: |
| 54 | 54 |
r = r ? xt : null; |
| ... | ... |
@@ -77,7 +77,7 @@ const { is: At, defineProperty: yt, getOwnPropertyDescriptor: vt, getOwnProperty
|
| 77 | 77 |
} |
| 78 | 78 |
return e; |
| 79 | 79 |
} }, at = (r, t) => !At(r, t), Q = { attribute: !0, type: String, converter: V, reflect: !1, useDefault: !1, hasChanged: at };
|
| 80 |
-Symbol.metadata ?? (Symbol.metadata = Symbol("metadata")), m.litPropertyMetadata ?? (m.litPropertyMetadata = /* @__PURE__ */ new WeakMap());
|
|
| 80 |
+Symbol.metadata ?? (Symbol.metadata = Symbol("metadata")), f.litPropertyMetadata ?? (f.litPropertyMetadata = /* @__PURE__ */ new WeakMap());
|
|
| 81 | 81 |
let E = class extends HTMLElement {
|
| 82 | 82 |
static addInitializer(t) {
|
| 83 | 83 |
this._$Ei(), (this.l ?? (this.l = [])).push(t); |
| ... | ... |
@@ -88,11 +88,11 @@ let E = class extends HTMLElement {
|
| 88 | 88 |
static createProperty(t, e = Q) {
|
| 89 | 89 |
if (e.state && (e.attribute = !1), this._$Ei(), this.prototype.hasOwnProperty(t) && ((e = Object.create(e)).wrapped = !0), this.elementProperties.set(t, e), !e.noAccessor) {
|
| 90 | 90 |
const s = Symbol(), i = this.getPropertyDescriptor(t, s, e); |
| 91 |
- i !== void 0 && yt(this.prototype, t, i); |
|
| 91 |
+ i !== void 0 && vt(this.prototype, t, i); |
|
| 92 | 92 |
} |
| 93 | 93 |
} |
| 94 | 94 |
static getPropertyDescriptor(t, e, s) {
|
| 95 |
- const { get: i, set: n } = vt(this.prototype, t) ?? { get() {
|
|
| 95 |
+ const { get: i, set: n } = yt(this.prototype, t) ?? { get() {
|
|
| 96 | 96 |
return this[e]; |
| 97 | 97 |
}, set(o) {
|
| 98 | 98 |
this[e] = o; |
| ... | ... |
@@ -281,15 +281,15 @@ let E = class extends HTMLElement {
|
| 281 | 281 |
firstUpdated(t) {
|
| 282 | 282 |
} |
| 283 | 283 |
}; |
| 284 |
-E.elementStyles = [], E.shadowRootOptions = { mode: "open" }, E[C("elementProperties")] = /* @__PURE__ */ new Map(), E[C("finalized")] = /* @__PURE__ */ new Map(), L == null || L({ ReactiveElement: E }), (m.reactiveElementVersions ?? (m.reactiveElementVersions = [])).push("2.1.2");
|
|
| 284 |
+E.elementStyles = [], E.shadowRootOptions = { mode: "open" }, E[C("elementProperties")] = /* @__PURE__ */ new Map(), E[C("finalized")] = /* @__PURE__ */ new Map(), L == null || L({ ReactiveElement: E }), (f.reactiveElementVersions ?? (f.reactiveElementVersions = [])).push("2.1.2");
|
|
| 285 | 285 |
/** |
| 286 | 286 |
* @license |
| 287 | 287 |
* Copyright 2017 Google LLC |
| 288 | 288 |
* SPDX-License-Identifier: BSD-3-Clause |
| 289 | 289 |
*/ |
| 290 |
-const P = globalThis, X = (r) => r, k = P.trustedTypes, Y = k ? k.createPolicy("lit-html", { createHTML: (r) => r }) : void 0, lt = "$lit$", f = `lit$${Math.random().toFixed(9).slice(2)}$`, ht = "?" + f, wt = `<${ht}>`, v = document, U = () => v.createComment(""), O = (r) => r === null || typeof r != "object" && typeof r != "function", J = Array.isArray, Ct = (r) => J(r) || typeof (r == null ? void 0 : r[Symbol.iterator]) == "function", j = `[
|
|
| 290 |
+const P = globalThis, X = (r) => r, k = P.trustedTypes, Y = k ? k.createPolicy("lit-html", { createHTML: (r) => r }) : void 0, lt = "$lit$", m = `lit$${Math.random().toFixed(9).slice(2)}$`, ht = "?" + m, wt = `<${ht}>`, y = document, U = () => y.createComment(""), O = (r) => r === null || typeof r != "object" && typeof r != "function", J = Array.isArray, Ct = (r) => J(r) || typeof (r == null ? void 0 : r[Symbol.iterator]) == "function", j = `[
|
|
| 291 | 291 |
\f\r]`, w = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, tt = /-->/g, et = />/g, g = RegExp(`>|${j}(?:([^\\s"'>=/]+)(${j}*=${j}*(?:[^
|
| 292 |
-\f\r"'\`<>=]|("|')|))|$)`, "g"), st = /'/g, it = /"/g, ct = /^(?:script|style|textarea|title)$/i, Pt = (r) => (t, ...e) => ({ _$litType$: r, strings: t, values: e }), H = Pt(1), S = Symbol.for("lit-noChange"), d = Symbol.for("lit-nothing"), rt = /* @__PURE__ */ new WeakMap(), A = v.createTreeWalker(v, 129);
|
|
| 292 |
+\f\r"'\`<>=]|("|')|))|$)`, "g"), st = /'/g, it = /"/g, ct = /^(?:script|style|textarea|title)$/i, Pt = (r) => (t, ...e) => ({ _$litType$: r, strings: t, values: e }), H = Pt(1), S = Symbol.for("lit-noChange"), d = Symbol.for("lit-nothing"), rt = /* @__PURE__ */ new WeakMap(), A = y.createTreeWalker(y, 129);
|
|
| 293 | 293 |
function dt(r, t) {
|
| 294 | 294 |
if (!J(r) || !r.hasOwnProperty("raw")) throw Error("invalid template strings array");
|
| 295 | 295 |
return Y !== void 0 ? Y.createHTML(t) : t; |
| ... | ... |
@@ -302,7 +302,7 @@ const Ut = (r, t) => {
|
| 302 | 302 |
let c, u, h = -1, p = 0; |
| 303 | 303 |
for (; p < a.length && (o.lastIndex = p, u = o.exec(a), u !== null); ) p = o.lastIndex, o === w ? u[1] === "!--" ? o = tt : u[1] !== void 0 ? o = et : u[2] !== void 0 ? (ct.test(u[2]) && (i = RegExp("</" + u[2], "g")), o = g) : u[3] !== void 0 && (o = g) : o === g ? u[0] === ">" ? (o = i ?? w, h = -1) : u[1] === void 0 ? h = -2 : (h = o.lastIndex - u[2].length, c = u[1], o = u[3] === void 0 ? g : u[3] === '"' ? it : st) : o === it || o === st ? o = g : o === tt || o === et ? o = w : (o = g, i = void 0);
|
| 304 | 304 |
const $ = o === g && r[l + 1].startsWith("/>") ? " " : "";
|
| 305 |
- n += o === w ? a + wt : h >= 0 ? (s.push(c), a.slice(0, h) + lt + a.slice(h) + f + $) : a + f + (h === -2 ? l : $); |
|
| 305 |
+ n += o === w ? a + wt : h >= 0 ? (s.push(c), a.slice(0, h) + lt + a.slice(h) + m + $) : a + m + (h === -2 ? l : $); |
|
| 306 | 306 |
} |
| 307 | 307 |
return [dt(r, n + (r[e] || "<?>") + (t === 2 ? "</svg>" : t === 3 ? "</math>" : "")), s]; |
| 308 | 308 |
}; |
| ... | ... |
@@ -319,11 +319,11 @@ class M {
|
| 319 | 319 |
for (; (i = A.nextNode()) !== null && a.length < l; ) {
|
| 320 | 320 |
if (i.nodeType === 1) {
|
| 321 | 321 |
if (i.hasAttributes()) for (const h of i.getAttributeNames()) if (h.endsWith(lt)) {
|
| 322 |
- const p = u[o++], $ = i.getAttribute(h).split(f), R = /([.?@])?(.*)/.exec(p); |
|
| 322 |
+ const p = u[o++], $ = i.getAttribute(h).split(m), R = /([.?@])?(.*)/.exec(p); |
|
| 323 | 323 |
a.push({ type: 1, index: n, name: R[2], strings: $, ctor: R[1] === "." ? Ht : R[1] === "?" ? Mt : R[1] === "@" ? Nt : z }), i.removeAttribute(h);
|
| 324 |
- } else h.startsWith(f) && (a.push({ type: 6, index: n }), i.removeAttribute(h));
|
|
| 324 |
+ } else h.startsWith(m) && (a.push({ type: 6, index: n }), i.removeAttribute(h));
|
|
| 325 | 325 |
if (ct.test(i.tagName)) {
|
| 326 |
- const h = i.textContent.split(f), p = h.length - 1; |
|
| 326 |
+ const h = i.textContent.split(m), p = h.length - 1; |
|
| 327 | 327 |
if (p > 0) {
|
| 328 | 328 |
i.textContent = k ? k.emptyScript : ""; |
| 329 | 329 |
for (let $ = 0; $ < p; $++) i.append(h[$], U()), A.nextNode(), a.push({ type: 2, index: ++n });
|
| ... | ... |
@@ -333,13 +333,13 @@ class M {
|
| 333 | 333 |
} else if (i.nodeType === 8) if (i.data === ht) a.push({ type: 2, index: n });
|
| 334 | 334 |
else {
|
| 335 | 335 |
let h = -1; |
| 336 |
- for (; (h = i.data.indexOf(f, h + 1)) !== -1; ) a.push({ type: 7, index: n }), h += f.length - 1;
|
|
| 336 |
+ for (; (h = i.data.indexOf(m, h + 1)) !== -1; ) a.push({ type: 7, index: n }), h += m.length - 1;
|
|
| 337 | 337 |
} |
| 338 | 338 |
n++; |
| 339 | 339 |
} |
| 340 | 340 |
} |
| 341 | 341 |
static createElement(t, e) {
|
| 342 |
- const s = v.createElement("template");
|
|
| 342 |
+ const s = y.createElement("template");
|
|
| 343 | 343 |
return s.innerHTML = t, s; |
| 344 | 344 |
} |
| 345 | 345 |
} |
| ... | ... |
@@ -361,7 +361,7 @@ class Ot {
|
| 361 | 361 |
return this._$AM._$AU; |
| 362 | 362 |
} |
| 363 | 363 |
u(t) {
|
| 364 |
- const { el: { content: e }, parts: s } = this._$AD, i = ((t == null ? void 0 : t.creationScope) ?? v).importNode(e, !0);
|
|
| 364 |
+ const { el: { content: e }, parts: s } = this._$AD, i = ((t == null ? void 0 : t.creationScope) ?? y).importNode(e, !0);
|
|
| 365 | 365 |
A.currentNode = i; |
| 366 | 366 |
let n = A.nextNode(), o = 0, l = 0, a = s[0]; |
| 367 | 367 |
for (; a !== void 0; ) {
|
| ... | ... |
@@ -371,7 +371,7 @@ class Ot {
|
| 371 | 371 |
} |
| 372 | 372 |
o !== (a == null ? void 0 : a.index) && (n = A.nextNode(), o++); |
| 373 | 373 |
} |
| 374 |
- return A.currentNode = v, i; |
|
| 374 |
+ return A.currentNode = y, i; |
|
| 375 | 375 |
} |
| 376 | 376 |
p(t) {
|
| 377 | 377 |
let e = 0; |
| ... | ... |
@@ -407,7 +407,7 @@ class N {
|
| 407 | 407 |
this._$AH !== t && (this._$AR(), this._$AH = this.O(t)); |
| 408 | 408 |
} |
| 409 | 409 |
_(t) {
|
| 410 |
- this._$AH !== d && O(this._$AH) ? this._$AA.nextSibling.data = t : this.T(v.createTextNode(t)), this._$AH = t; |
|
| 410 |
+ this._$AH !== d && O(this._$AH) ? this._$AA.nextSibling.data = t : this.T(y.createTextNode(t)), this._$AH = t; |
|
| 411 | 411 |
} |
| 412 | 412 |
$(t) {
|
| 413 | 413 |
var n; |
| ... | ... |
@@ -523,7 +523,7 @@ const Tt = (r, t, e) => {
|
| 523 | 523 |
* Copyright 2017 Google LLC |
| 524 | 524 |
* SPDX-License-Identifier: BSD-3-Clause |
| 525 | 525 |
*/ |
| 526 |
-const y = globalThis; |
|
| 526 |
+const v = globalThis; |
|
| 527 | 527 |
class _ extends E {
|
| 528 | 528 |
constructor() {
|
| 529 | 529 |
super(...arguments), this.renderOptions = { host: this }, this._$Do = void 0;
|
| ... | ... |
@@ -550,10 +550,10 @@ class _ extends E {
|
| 550 | 550 |
} |
| 551 | 551 |
} |
| 552 | 552 |
var ot; |
| 553 |
-_._$litElement$ = !0, _.finalized = !0, (ot = y.litElementHydrateSupport) == null || ot.call(y, { LitElement: _ });
|
|
| 554 |
-const B = y.litElementPolyfillSupport; |
|
| 553 |
+_._$litElement$ = !0, _.finalized = !0, (ot = v.litElementHydrateSupport) == null || ot.call(v, { LitElement: _ });
|
|
| 554 |
+const B = v.litElementPolyfillSupport; |
|
| 555 | 555 |
B == null || B({ LitElement: _ });
|
| 556 |
-(y.litElementVersions ?? (y.litElementVersions = [])).push("4.2.2");
|
|
| 556 |
+(v.litElementVersions ?? (v.litElementVersions = [])).push("4.2.2");
|
|
| 557 | 557 |
class W extends _ {
|
| 558 | 558 |
render() {
|
| 559 | 559 |
return H` |
| ... | ... |
@@ -571,12 +571,22 @@ class W extends _ {
|
| 571 | 571 |
} |
| 572 | 572 |
b(W, "styles", D` |
| 573 | 573 |
:host {
|
| 574 |
+ --luumicore-card-bg: var(--luumicore-secondary, #fff); |
|
| 575 |
+ --luumicore-card-border-color: var(--luumicore-secondary, #fff); |
|
| 576 |
+ --luumicore-card-border-radius: var(--luumicore-border-radius, 1rem); |
|
| 577 |
+ --luumicore-card-shadow: var(--luumicore-shadow, .25rem .25rem 1rem rgba(0,0,0,0.2)); |
|
| 578 |
+ --luumicore-card-spacing: var(--luumicore-element-spacing, 2rem); |
|
| 579 |
+ |
|
| 574 | 580 |
display: block; |
| 575 |
- border: 1px solid var(--luumicore-border-color, #ddd); |
|
| 576 |
- border-radius: var(--luumicore-border-radius, 8px); |
|
| 581 |
+ border: 1px solid var(--luumicore-card-border-color); |
|
| 582 |
+ border-radius: var(--luumicore-card-border-radius); |
|
| 577 | 583 |
overflow: hidden; |
| 578 |
- background-color: var(--luumicore-card-bg, #fff); |
|
| 579 |
- box-shadow: var(--luumicore-shadow, 0 2px 4px rgba(0,0,0,0.1)); |
|
| 584 |
+ background-color: var(--luumicore-card-bg); |
|
| 585 |
+ box-shadow: var(--luumicore-card-shadow); |
|
| 586 |
+ } |
|
| 587 |
+ |
|
| 588 |
+ :host(:not(:last-child)) {
|
|
| 589 |
+ margin-bottom: var(--luumicore-card-spacing); |
|
| 580 | 590 |
} |
| 581 | 591 |
|
| 582 | 592 |
.card-image {
|
| 583 | 593 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,23 @@ |
| 1 |
+<?php |
|
| 2 |
+ |
|
| 3 |
+declare(strict_types=1); |
|
| 4 |
+ |
|
| 5 |
+namespace luumicore\CoreBundle\Controller\Page; |
|
| 6 |
+ |
|
| 7 |
+use Contao\CoreBundle\Controller\Page\AbstractLayoutPageController; |
|
| 8 |
+use Contao\CoreBundle\DependencyInjection\Attribute\AsPage; |
|
| 9 |
+use Contao\CoreBundle\Twig\LayoutTemplate; |
|
| 10 |
+use Contao\LayoutModel; |
|
| 11 |
+use Symfony\Component\HttpFoundation\Request; |
|
| 12 |
+use Symfony\Component\HttpFoundation\Response; |
|
| 13 |
+ |
|
| 14 |
+#[AsPage(type: 'luumicore_dashboard')] |
|
| 15 |
+class DashboardPageController extends AbstractLayoutPageController |
|
| 16 |
+{
|
|
| 17 |
+ protected function getResponse(LayoutTemplate $template, LayoutModel $model, Request $request): Response |
|
| 18 |
+ {
|
|
| 19 |
+ $this->initializeContaoFramework(); |
|
| 20 |
+ dump($this->container); |
|
| 21 |
+ return $template->getResponse(); |
|
| 22 |
+ } |
|
| 23 |
+} |