@shibui-ui/ui 1.25.0 → 1.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index11.js +1 -1
- package/dist/index194.js +97 -6
- package/dist/index194.js.map +1 -1
- package/dist/index195.js +2 -2
- package/dist/index197.js +2 -18
- package/dist/index197.js.map +1 -1
- package/dist/index198.js +74 -2
- package/dist/index198.js.map +1 -1
- package/dist/index199.js +64 -74
- package/dist/index199.js.map +1 -1
- package/dist/index200.js +2 -2
- package/dist/index201.js +57 -2
- package/dist/index201.js.map +1 -1
- package/dist/index202.js +2 -39
- package/dist/index202.js.map +1 -1
- package/dist/index203.js +2 -2
- package/dist/index204.js +144 -219
- package/dist/index204.js.map +1 -1
- package/dist/index205.js +43 -82
- package/dist/index205.js.map +1 -1
- package/dist/index206.js +51 -2
- package/dist/index206.js.map +1 -1
- package/dist/index207.js +2 -94
- package/dist/index207.js.map +1 -1
- package/dist/index208.js +33 -2
- package/dist/index208.js.map +1 -1
- package/dist/index209.js +2 -268
- package/dist/index209.js.map +1 -1
- package/dist/index210.js +6 -2
- package/dist/index210.js.map +1 -1
- package/dist/index211.js +2 -21
- package/dist/index211.js.map +1 -1
- package/dist/index212.js +260 -2
- package/dist/index212.js.map +1 -1
- package/dist/index213.js +16 -8
- package/dist/index213.js.map +1 -1
- package/dist/index214.js +2 -2
- package/dist/index215.js +2 -15
- package/dist/index215.js.map +1 -1
- package/dist/index216.js +66 -2
- package/dist/index216.js.map +1 -1
- package/dist/index217.js +24 -146
- package/dist/index217.js.map +1 -1
- package/dist/index218.js +2 -2
- package/dist/index219.js +2 -5
- package/dist/index219.js.map +1 -1
- package/dist/index220.js +81 -2
- package/dist/index220.js.map +1 -1
- package/dist/index221.js +78 -6
- package/dist/index221.js.map +1 -1
- package/dist/index222.js +2 -2
- package/dist/index223.js +133 -2
- package/dist/index223.js.map +1 -1
- package/dist/index224.js +2 -92
- package/dist/index224.js.map +1 -1
- package/dist/index225.js +2 -59
- package/dist/index225.js.map +1 -1
- package/dist/index226.js +72 -2
- package/dist/index226.js.map +1 -1
- package/dist/index227.js +94 -97
- package/dist/index227.js.map +1 -1
- package/dist/index228.js +2 -2
- package/dist/index229.js +71 -2
- package/dist/index229.js.map +1 -1
- package/dist/index230.js +2 -74
- package/dist/index230.js.map +1 -1
- package/dist/index231.js +2 -74
- package/dist/index231.js.map +1 -1
- package/dist/index232.js +12 -2
- package/dist/index232.js.map +1 -1
- package/dist/index233.js +5 -53
- package/dist/index233.js.map +1 -1
- package/dist/index234.js +2 -2
- package/dist/index235.js +18 -2
- package/dist/index235.js.map +1 -1
- package/dist/index236.js +2 -162
- package/dist/index236.js.map +1 -1
- package/dist/index237.js +84 -43
- package/dist/index237.js.map +1 -1
- package/dist/index238.js +2 -51
- package/dist/index238.js.map +1 -1
- package/dist/index239.js +2 -2
- package/dist/index240.js +39 -33
- package/dist/index240.js.map +1 -1
- package/dist/index241.js +2 -2
- package/dist/index242.js +236 -5
- package/dist/index242.js.map +1 -1
- package/dist/index243.js +82 -2
- package/dist/index243.js.map +1 -1
- package/dist/index244.js +2 -260
- package/dist/index244.js.map +1 -1
- package/dist/index245.js +93 -16
- package/dist/index245.js.map +1 -1
- package/dist/index246.js +2 -2
- package/dist/index247.js +268 -2
- package/dist/index247.js.map +1 -1
- package/dist/index248.js +2 -66
- package/dist/index248.js.map +1 -1
- package/dist/index249.js +13 -24
- package/dist/index249.js.map +1 -1
- package/dist/index250.js +2 -2
- package/dist/index251.js +9 -2
- package/dist/index251.js.map +1 -1
- package/dist/index252.js +2 -81
- package/dist/index252.js.map +1 -1
- package/dist/index253.js +12 -78
- package/dist/index253.js.map +1 -1
- package/dist/index254.js +2 -2
- package/dist/index255.js +132 -111
- package/dist/index255.js.map +1 -1
- package/dist/index256.js +2 -2
- package/dist/index257.js +5 -2
- package/dist/index257.js.map +1 -1
- package/dist/index258.js +2 -72
- package/dist/index258.js.map +1 -1
- package/dist/index259.js +5 -93
- package/dist/index259.js.map +1 -1
- package/dist/index260.js +2 -2
- package/dist/index261.js +2 -71
- package/dist/index261.js.map +1 -1
- package/dist/index262.js +92 -2
- package/dist/index262.js.map +1 -1
- package/dist/index263.js +59 -2
- package/dist/index263.js.map +1 -1
- package/dist/index264.js +2 -12
- package/dist/index264.js.map +1 -1
- package/dist/index34.js +1 -1
- package/dist/index347.js +1 -1
- package/dist/index353.js +14 -32
- package/dist/index353.js.map +1 -1
- package/dist/index354.js +20 -6
- package/dist/index354.js.map +1 -1
- package/dist/index355.js +56 -18
- package/dist/index355.js.map +1 -1
- package/dist/index356.js +55 -57
- package/dist/index356.js.map +1 -1
- package/dist/index357.js +32 -64
- package/dist/index357.js.map +1 -1
- package/dist/index44.js +1 -1
- package/dist/index47.js +1 -1
- package/dist/index49.js +2 -2
- package/dist/index50.js +2 -2
- package/dist/index51.js +2 -2
- package/dist/index52.js +2 -2
- package/dist/index53.js +3 -3
- package/dist/index54.js +2 -2
- package/dist/index55.js +2 -2
- package/dist/index56.js +3 -3
- package/dist/index57.js +2 -2
- package/dist/index58.js +2 -2
- package/dist/index59.js +2 -2
- package/dist/index60.js +2 -2
- package/dist/index61.js +2 -2
- package/dist/index62.js +2 -2
- package/dist/index63.js +2 -2
- package/dist/index64.js +2 -2
- package/dist/index65.js +2 -2
- package/dist/index66.js +1 -1
- package/dist/index67.js +1 -1
- package/dist/index68.js +2 -2
- package/dist/index69.js +2 -2
- package/dist/index70.js +2 -2
- package/dist/index71.js +2 -2
- package/dist/index72.js +2 -2
- package/dist/index73.js +2 -2
- package/dist/index74.js +2 -2
- package/dist/index75.js +2 -2
- package/dist/index76.js +2 -2
- package/dist/index77.js +2 -2
- package/dist/index78.js +2 -2
- package/dist/index79.js +2 -2
- package/dist/index80.js +2 -2
- package/dist/index81.js +2 -2
- package/dist/index82.js +1 -1
- package/dist/index83.js +2 -2
- package/dist/index84.js +2 -2
- package/package.json +4 -4
package/dist/index251.js
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
import { html } from "lit";
|
|
2
|
+
function parallaxTemplate(_ctx) {
|
|
3
|
+
return html`
|
|
4
|
+
<div class="parallax-wrapper" part="wrapper">
|
|
5
|
+
<slot></slot>
|
|
6
|
+
</div>
|
|
7
|
+
`;
|
|
8
|
+
}
|
|
2
9
|
export {
|
|
3
|
-
|
|
10
|
+
parallaxTemplate
|
|
4
11
|
};
|
|
5
12
|
//# sourceMappingURL=index251.js.map
|
package/dist/index251.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index251.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"index251.js","sources":["../src/components/organisms/parallax-container/lib-parallax.html.ts"],"sourcesContent":["import { html, TemplateResult } from 'lit';\nimport type { LibParallaxContainer } from './lib-parallax.component';\n\n// _ctx disponible para futuras extensiones del template (slot named, etc.)\nexport function parallaxTemplate(_ctx: LibParallaxContainer): TemplateResult {\n return html`\n <div class=\"parallax-wrapper\" part=\"wrapper\">\n <slot></slot>\n </div>\n `;\n}"],"names":[],"mappings":";AAIO,SAAS,iBAAiB,MAA4C;AAC3E,SAAO;AAAA;AAAA;AAAA;AAAA;AAKT;"}
|
package/dist/index252.js
CHANGED
|
@@ -1,84 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
function panelWrapClass(p) {
|
|
3
|
-
const classes = ["mo-panel-wrap"];
|
|
4
|
-
if (p.size !== "md") classes.push(`mo-${p.size}`);
|
|
5
|
-
if (p._animate === "slide-up") classes.push("mo-slide-up");
|
|
6
|
-
if (p._animate === "slide-down") classes.push("mo-slide-down");
|
|
7
|
-
if (p.dark) classes.push("mo-dark");
|
|
8
|
-
return classes.join(" ");
|
|
9
|
-
}
|
|
10
|
-
function panelClass(variant) {
|
|
11
|
-
const classes = ["mo-panel"];
|
|
12
|
-
if (variant === "editorial") classes.push("is-editorial");
|
|
13
|
-
if (variant === "danger") classes.push("is-danger");
|
|
14
|
-
return classes.join(" ");
|
|
15
|
-
}
|
|
16
|
-
function iconClass(tone) {
|
|
17
|
-
const classes = ["mo-header-icon"];
|
|
18
|
-
if (tone !== "default") classes.push(`is-${tone}`);
|
|
19
|
-
return classes.join(" ");
|
|
20
|
-
}
|
|
21
|
-
function modalTemplate(p) {
|
|
22
|
-
return html`
|
|
23
|
-
<div
|
|
24
|
-
class="mo-backdrop"
|
|
25
|
-
part="backdrop"
|
|
26
|
-
@click="${p.onBackdropClick}"
|
|
27
|
-
>
|
|
28
|
-
<div
|
|
29
|
-
class="${panelWrapClass(p)}"
|
|
30
|
-
part="panel-wrap"
|
|
31
|
-
role="dialog"
|
|
32
|
-
aria-modal="true"
|
|
33
|
-
aria-labelledby="mo-title"
|
|
34
|
-
@click="${(e) => e.stopPropagation()}"
|
|
35
|
-
>
|
|
36
|
-
<div class="${panelClass(p.variant)}" part="panel">
|
|
37
|
-
|
|
38
|
-
<!-- ── HEADER ── -->
|
|
39
|
-
<div class="mo-header" part="header">
|
|
40
|
-
|
|
41
|
-
<!-- Ícono opcional — tone prop activa el wrapper -->
|
|
42
|
-
${p.iconTone !== null ? html`
|
|
43
|
-
<div class="${iconClass(p.iconTone)}" part="icon">
|
|
44
|
-
<slot name="icon"></slot>
|
|
45
|
-
</div>
|
|
46
|
-
` : nothing}
|
|
47
|
-
|
|
48
|
-
<!-- Título y subtítulo -->
|
|
49
|
-
<div class="mo-header-text">
|
|
50
|
-
<h2 id="mo-title" class="mo-title">${p.heading}</h2>
|
|
51
|
-
${p.subtitle ? html`<p class="mo-subtitle">${p.subtitle}</p>` : nothing}
|
|
52
|
-
</div>
|
|
53
|
-
|
|
54
|
-
<!-- Botón de cierre -->
|
|
55
|
-
<button
|
|
56
|
-
class="mo-close"
|
|
57
|
-
part="close-btn"
|
|
58
|
-
aria-label="Cerrar"
|
|
59
|
-
@click="${p.onClose}"
|
|
60
|
-
>×</button>
|
|
61
|
-
</div>
|
|
62
|
-
|
|
63
|
-
<!-- ── BODY — slot default ── -->
|
|
64
|
-
<div class="mo-body" part="body">
|
|
65
|
-
<slot></slot>
|
|
66
|
-
</div>
|
|
67
|
-
|
|
68
|
-
<!-- ── FOOTER ── -->
|
|
69
|
-
<div class="mo-footer" part="footer">
|
|
70
|
-
${p.footerInfo ? html`
|
|
71
|
-
<span class="mo-footer-info">${p.footerInfo}</span>
|
|
72
|
-
` : nothing}
|
|
73
|
-
<slot name="footer"></slot>
|
|
74
|
-
</div>
|
|
75
|
-
|
|
76
|
-
</div>
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
`;
|
|
80
|
-
}
|
|
1
|
+
const parallaxCss = "@layer tokens,reset,components;@layer reset{:host{display:block;position:relative;overflow:hidden;width:100%}*,*:before,*:after{box-sizing:border-box}}@layer components{.parallax-wrapper{position:relative;width:100%;height:100%}:host([visible]) ::slotted(*){will-change:transform}@media(prefers-reduced-motion:reduce){::slotted(*){will-change:auto!important;transform:none!important}}}";
|
|
81
2
|
export {
|
|
82
|
-
|
|
3
|
+
parallaxCss as default
|
|
83
4
|
};
|
|
84
5
|
//# sourceMappingURL=index252.js.map
|
package/dist/index252.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index252.js","sources":[
|
|
1
|
+
{"version":3,"file":"index252.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
package/dist/index253.js
CHANGED
|
@@ -1,84 +1,18 @@
|
|
|
1
|
-
import { html
|
|
2
|
-
|
|
3
|
-
<svg viewBox="0 0 256 256" fill="currentColor" aria-hidden="true">
|
|
4
|
-
<path d="M165.66,202.34a8,8,0,0,1-11.32,11.32l-80-80a8,8,0,0,1,0-11.32l80-80a8,8,0,0,1,11.32,11.32L91.31,128Z"/>
|
|
5
|
-
</svg>`;
|
|
6
|
-
const chevronRight = html`
|
|
7
|
-
<svg viewBox="0 0 256 256" fill="currentColor" aria-hidden="true">
|
|
8
|
-
<path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z"/>
|
|
9
|
-
</svg>`;
|
|
10
|
-
function buildPageSequence(current, total, siblings) {
|
|
11
|
-
if (total <= 1) return [1];
|
|
12
|
-
const left = Math.max(2, current - siblings);
|
|
13
|
-
const right = Math.min(total - 1, current + siblings);
|
|
14
|
-
const pages = [1];
|
|
15
|
-
if (left > 2) pages.push(null);
|
|
16
|
-
for (let i = left; i <= right; i++) pages.push(i);
|
|
17
|
-
if (right < total - 1) pages.push(null);
|
|
18
|
-
if (total > 1) pages.push(total);
|
|
19
|
-
return pages;
|
|
20
|
-
}
|
|
21
|
-
function paginationTemplate(ctx) {
|
|
22
|
-
const total = ctx.totalPages;
|
|
23
|
-
const current = ctx.currentPage;
|
|
24
|
-
const sequence = buildPageSequence(current, total, ctx.siblings);
|
|
25
|
-
const infoText = ctx.showInfo ? (() => {
|
|
26
|
-
const from = (current - 1) * ctx.itemsPerPage + 1;
|
|
27
|
-
const to = Math.min(current * ctx.itemsPerPage, ctx.totalItems);
|
|
28
|
-
return html`
|
|
29
|
-
<span class="pg-info" part="info">
|
|
30
|
-
${from}–${to} de ${ctx.totalItems}
|
|
31
|
-
</span>`;
|
|
32
|
-
})() : nothing;
|
|
1
|
+
import { html } from "lit";
|
|
2
|
+
function parallaxTextStackTemplate(ctx) {
|
|
33
3
|
return html`
|
|
34
|
-
<
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
aria-label="Página anterior"
|
|
44
|
-
@click="${() => ctx._changePage(current - 1)}"
|
|
45
|
-
>
|
|
46
|
-
${chevronLeft}
|
|
47
|
-
${ctx.size !== "sm" ? html`<span>Ant</span>` : nothing}
|
|
48
|
-
</button>
|
|
49
|
-
|
|
50
|
-
<!-- Números -->
|
|
51
|
-
<div class="pg-numbers" part="numbers" role="list">
|
|
52
|
-
${sequence.map(
|
|
53
|
-
(page) => page === null ? html`<span class="pg-ellipsis" role="listitem" aria-hidden="true">…</span>` : html`
|
|
54
|
-
<button
|
|
55
|
-
class="pg-btn ${page === current ? "pg-btn--active" : ""}"
|
|
56
|
-
part="btn-page${page === current ? " btn-page-active" : ""}"
|
|
57
|
-
role="listitem"
|
|
58
|
-
aria-label="Página ${page}"
|
|
59
|
-
aria-current="${page === current ? "page" : nothing}"
|
|
60
|
-
?disabled="${page === current}"
|
|
61
|
-
@click="${() => ctx._changePage(page)}"
|
|
62
|
-
>${page}</button>`
|
|
63
|
-
)}
|
|
64
|
-
</div>
|
|
65
|
-
|
|
66
|
-
<!-- → Siguiente -->
|
|
67
|
-
<button
|
|
68
|
-
class="pg-btn pg-btn--nav"
|
|
69
|
-
part="btn-next"
|
|
70
|
-
?disabled="${current === total}"
|
|
71
|
-
aria-label="Página siguiente"
|
|
72
|
-
@click="${() => ctx._changePage(current + 1)}"
|
|
73
|
-
>
|
|
74
|
-
${ctx.size !== "sm" ? html`<span>Sig</span>` : nothing}
|
|
75
|
-
${chevronRight}
|
|
76
|
-
</button>
|
|
77
|
-
|
|
78
|
-
</nav>
|
|
4
|
+
<div class="pts-container" part="container">
|
|
5
|
+
${ctx.lines.map((line, i) => html`
|
|
6
|
+
<span
|
|
7
|
+
class="pts-layer ${i % 2 === 0 ? "pts-layer--outline" : "pts-layer--italic"}"
|
|
8
|
+
part="layer layer-${i % 2 === 0 ? "outline" : "italic"}"
|
|
9
|
+
aria-hidden="${i > 0}"
|
|
10
|
+
>${line}</span>
|
|
11
|
+
`)}
|
|
12
|
+
</div>
|
|
79
13
|
`;
|
|
80
14
|
}
|
|
81
15
|
export {
|
|
82
|
-
|
|
16
|
+
parallaxTextStackTemplate
|
|
83
17
|
};
|
|
84
18
|
//# sourceMappingURL=index253.js.map
|
package/dist/index253.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index253.js","sources":["../src/components/
|
|
1
|
+
{"version":3,"file":"index253.js","sources":["../src/components/organisms/parallax-text/lib-parallax-text-stack.html.ts"],"sourcesContent":["import { html, TemplateResult } from 'lit';\nimport type { LibParallaxTextStack } from './lib-parallax-text-stack.component';\n\nexport function parallaxTextStackTemplate(ctx: LibParallaxTextStack): TemplateResult {\n return html`\n <div class=\"pts-container\" part=\"container\">\n ${ctx.lines.map((line, i) => html`\n <span\n class=\"pts-layer ${i % 2 === 0 ? 'pts-layer--outline' : 'pts-layer--italic'}\"\n part=\"layer layer-${i % 2 === 0 ? 'outline' : 'italic'}\"\n aria-hidden=\"${i > 0}\"\n >${line}</span>\n `)}\n </div>\n `;\n}"],"names":[],"mappings":";AAGO,SAAS,0BAA0B,KAA2C;AACnF,SAAO;AAAA;AAAA,QAED,IAAI,MAAM,IAAI,CAAC,MAAM,MAAM;AAAA;AAAA,6BAEN,IAAI,MAAM,IAAI,uBAAuB,mBAAmB;AAAA,8BACvD,IAAI,MAAM,IAAI,YAAY,QAAQ;AAAA,yBACvC,IAAI,CAAC;AAAA,WACnB,IAAI;AAAA,OACR,CAAC;AAAA;AAAA;AAGR;"}
|
package/dist/index254.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const
|
|
1
|
+
const stackCss = '@layer tokens,reset,components;@layer reset{:host{display:block;padding:10vh 0}*,*:before,*:after{box-sizing:border-box}}@layer components{.pts-container{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--lib-space-md)}.pts-layer{display:block;will-change:transform;transition:transform var(--duration-fast) var(--ease-out);white-space:nowrap;line-height:.9;text-transform:uppercase;-webkit-user-select:none;user-select:none}:host([size="sm"]) .pts-layer{font-size:clamp(2rem,6vw,4rem)}:host([size="md"]) .pts-layer{font-size:clamp(3rem,8vw,6rem)}:host([size="lg"]) .pts-layer,:host(:not([size])) .pts-layer{font-size:clamp(4rem,10vw,8rem)}:host([size="xl"]) .pts-layer{font-size:clamp(5rem,13vw,10rem)}:host([size="2xl"]) .pts-layer{font-size:clamp(6rem,16vw,14rem)}.pts-layer--outline{font-family:var(--lib-font-display);font-weight:300;letter-spacing:var(--tracking-tight);-webkit-text-stroke:1px var(--text-primary);color:transparent}.pts-layer--italic{font-family:var(--lib-font-body);font-style:italic;font-weight:400;letter-spacing:var(--tracking-tight);color:var(--text-primary)}:host([color="muted"]) .pts-layer--outline{-webkit-text-stroke-color:var(--text-muted)}:host([color="muted"]) .pts-layer--italic{color:var(--text-muted)}:host([color="kaki"]) .pts-layer--outline{-webkit-text-stroke-color:var(--color-kaki-500)}:host([color="kaki"]) .pts-layer--italic{color:var(--color-kaki-500)}:host([color="celadon"]) .pts-layer--outline{-webkit-text-stroke-color:var(--color-celadon-500)}:host([color="celadon"]) .pts-layer--italic{color:var(--color-celadon-500)}@media(prefers-reduced-motion:reduce){.pts-layer{transition:none;transform:none!important}}}';
|
|
2
2
|
export {
|
|
3
|
-
|
|
3
|
+
stackCss as default
|
|
4
4
|
};
|
|
5
5
|
//# sourceMappingURL=index254.js.map
|
package/dist/index255.js
CHANGED
|
@@ -1,136 +1,157 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { html, nothing } from "lit";
|
|
2
|
+
const svgSearch = html`
|
|
3
|
+
<svg width="11" height="11" viewBox="0 0 16 16" fill="none"
|
|
4
|
+
stroke="currentColor" stroke-width="1.6" stroke-linecap="round">
|
|
5
|
+
<circle cx="7" cy="7" r="5"/><line x1="11" y1="11" x2="14" y2="14"/>
|
|
6
|
+
</svg>`;
|
|
7
|
+
const svgLogout = html`
|
|
8
|
+
<svg width="11" height="11" viewBox="0 0 14 14" fill="none"
|
|
9
|
+
stroke="currentColor" stroke-width="1.6" stroke-linecap="round">
|
|
10
|
+
<path d="M6 2H3a1 1 0 00-1 1v8a1 1 0 001 1h3"/>
|
|
11
|
+
<polyline points="10,4 12,7 10,10"/>
|
|
12
|
+
<line x1="4" y1="7" x2="12" y2="7"/>
|
|
13
|
+
</svg>`;
|
|
14
|
+
const svgMenu = html`
|
|
15
|
+
<svg width="18" height="18" viewBox="0 0 16 16" fill="none"
|
|
16
|
+
stroke="currentColor" stroke-width="1.6" stroke-linecap="round">
|
|
17
|
+
<line x1="2" y1="4" x2="14" y2="4"/>
|
|
18
|
+
<line x1="2" y1="8" x2="14" y2="8"/>
|
|
19
|
+
<line x1="2" y1="12" x2="14" y2="12"/>
|
|
20
|
+
</svg>`;
|
|
21
|
+
const svgClose = html`
|
|
22
|
+
<svg width="18" height="18" viewBox="0 0 14 14" fill="none"
|
|
23
|
+
stroke="currentColor" stroke-width="1.6" stroke-linecap="round">
|
|
24
|
+
<line x1="2" y1="2" x2="12" y2="12"/>
|
|
25
|
+
<line x1="12" y1="2" x2="2" y2="12"/>
|
|
26
|
+
</svg>`;
|
|
27
|
+
function renderBadge(badge) {
|
|
28
|
+
if (badge === void 0 || badge === null || badge === "") return nothing;
|
|
29
|
+
if (badge === "dot") {
|
|
30
|
+
return html`<span class="sb-badge sb-badge--dot" aria-hidden="true"></span>`;
|
|
31
|
+
}
|
|
32
|
+
const n = typeof badge === "number" ? badge : parseInt(String(badge), 10);
|
|
33
|
+
const cls = !isNaN(n) && n > 9 || isNaN(n) ? "sb-badge--kaki" : "sb-badge--muted";
|
|
34
|
+
return html`<span class="sb-badge ${cls}">${badge}</span>`;
|
|
4
35
|
}
|
|
5
|
-
function
|
|
6
|
-
|
|
36
|
+
function renderHeader(p) {
|
|
37
|
+
const isGlitch = p.variant === "glitch";
|
|
38
|
+
const isKintsugi = p.variant === "kintsugi";
|
|
7
39
|
return html`
|
|
8
|
-
<div class="
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
${m.label ? html`<span class="rs-mark-label">${m.label}</span>` : nothing}
|
|
15
|
-
</div>
|
|
16
|
-
`)}
|
|
40
|
+
<div class="sb-header" part="header">
|
|
41
|
+
<div class="sb-logo-mark" part="logo-mark">
|
|
42
|
+
${isKintsugi ? html`<span>${p.logoMark}</span>` : p.logoMark}
|
|
43
|
+
</div>
|
|
44
|
+
${isGlitch ? html`<span class="sb-brand">⌗ ${p.brandName.toUpperCase()}</span>
|
|
45
|
+
<span class="sb-version">v0.1</span>` : html`<span class="sb-brand">${p.brandName}</span>`}
|
|
17
46
|
</div>
|
|
18
47
|
`;
|
|
19
48
|
}
|
|
20
|
-
function
|
|
21
|
-
if (!
|
|
49
|
+
function renderSearch(p) {
|
|
50
|
+
if (!p.showSearch) return nothing;
|
|
22
51
|
return html`
|
|
23
|
-
<div class="
|
|
24
|
-
<
|
|
25
|
-
|
|
52
|
+
<div class="sb-search" part="search">
|
|
53
|
+
<div class="sb-search-inner">
|
|
54
|
+
${svgSearch}
|
|
55
|
+
<input
|
|
56
|
+
class="sb-search-input"
|
|
57
|
+
type="search"
|
|
58
|
+
placeholder="${p.searchPlaceholder}"
|
|
59
|
+
aria-label="Buscar"
|
|
60
|
+
@input="${(e) => p.onSearchInput(e.target.value)}"
|
|
61
|
+
/>
|
|
62
|
+
<span class="sb-search-kbd">⌘K</span>
|
|
63
|
+
</div>
|
|
26
64
|
</div>
|
|
27
65
|
`;
|
|
28
66
|
}
|
|
29
|
-
function
|
|
30
|
-
|
|
67
|
+
function renderNav(p) {
|
|
68
|
+
const isGlitch = p.variant === "glitch";
|
|
31
69
|
return html`
|
|
32
|
-
<
|
|
33
|
-
<
|
|
34
|
-
|
|
70
|
+
<nav class="sb-nav" part="nav" aria-label="Navegación principal">
|
|
71
|
+
<div class="sb-indicator" part="indicator"></div>
|
|
72
|
+
|
|
73
|
+
${p.links.map((link) => html`
|
|
74
|
+
${link.group ? html`
|
|
75
|
+
<div class="sb-group" part="group">
|
|
76
|
+
${isGlitch ? `// ${link.group}` : link.group}
|
|
77
|
+
</div>
|
|
78
|
+
` : nothing}
|
|
79
|
+
|
|
80
|
+
<button
|
|
81
|
+
class="sb-link ${link.id === p.active ? "is-active" : ""}"
|
|
82
|
+
part="link${link.id === p.active ? " link-active" : ""}"
|
|
83
|
+
data-id="${link.id}"
|
|
84
|
+
?disabled="${link.disabled}"
|
|
85
|
+
aria-current="${link.id === p.active ? "page" : nothing}"
|
|
86
|
+
@click="${() => {
|
|
87
|
+
if (!link.disabled) p.onLinkClick(link.id);
|
|
88
|
+
}}"
|
|
89
|
+
>
|
|
90
|
+
<span class="sb-link-icon">
|
|
91
|
+
<lib-icon name="${link.icon}" size="sm"></lib-icon>
|
|
92
|
+
</span>
|
|
93
|
+
|
|
94
|
+
${isGlitch ? html`<span class="sb-link-prefix">›</span>` : nothing}
|
|
95
|
+
|
|
96
|
+
<span class="sb-link-label">${link.label}</span>
|
|
97
|
+
|
|
98
|
+
${renderBadge(link.badge)}
|
|
99
|
+
</button>
|
|
100
|
+
`)}
|
|
101
|
+
</nav>
|
|
35
102
|
`;
|
|
36
103
|
}
|
|
37
|
-
function
|
|
38
|
-
|
|
39
|
-
return html`
|
|
40
|
-
<div class="rs-track-wrap">
|
|
41
|
-
<div class="rs-track">
|
|
42
|
-
<div
|
|
43
|
-
class="rs-fill-dual"
|
|
44
|
-
style="left: ${p.minPct}%; right: ${100 - p.maxPct}%"
|
|
45
|
-
></div>
|
|
46
|
-
</div>
|
|
47
|
-
<input
|
|
48
|
-
type="range"
|
|
49
|
-
class="rs-input-min"
|
|
50
|
-
min=${p.min} max=${p.max} step=${p.step}
|
|
51
|
-
.value=${String(p.valueMin)}
|
|
52
|
-
?disabled=${p.disabled}
|
|
53
|
-
aria-label="Mínimo"
|
|
54
|
-
@input=${p.onInputMin}
|
|
55
|
-
>
|
|
56
|
-
<input
|
|
57
|
-
type="range"
|
|
58
|
-
class="rs-input-max"
|
|
59
|
-
min=${p.min} max=${p.max} step=${p.step}
|
|
60
|
-
.value=${String(p.valueMax)}
|
|
61
|
-
?disabled=${p.disabled}
|
|
62
|
-
aria-label="Máximo"
|
|
63
|
-
@input=${p.onInputMax}
|
|
64
|
-
>
|
|
65
|
-
</div>
|
|
66
|
-
`;
|
|
67
|
-
}
|
|
68
|
-
if (p.vertical) {
|
|
69
|
-
return html`
|
|
70
|
-
<div class="rs-vert-wrap">
|
|
71
|
-
<div class="rs-track-wrap">
|
|
72
|
-
<div class="rs-track">
|
|
73
|
-
<div class="rs-fill" style="width: ${p.pct}%"></div>
|
|
74
|
-
</div>
|
|
75
|
-
<input
|
|
76
|
-
type="range"
|
|
77
|
-
min=${p.min} max=${p.max} step=${p.step}
|
|
78
|
-
.value=${String(p.value)}
|
|
79
|
-
?disabled=${p.disabled}
|
|
80
|
-
@input=${p.onInput}
|
|
81
|
-
>
|
|
82
|
-
</div>
|
|
83
|
-
</div>
|
|
84
|
-
`;
|
|
85
|
-
}
|
|
104
|
+
function renderUser(p) {
|
|
105
|
+
const isDark = p.variant === "dark" || !p.variant;
|
|
86
106
|
return html`
|
|
87
|
-
<div class="
|
|
88
|
-
<div class="
|
|
89
|
-
|
|
107
|
+
<div class="sb-user" part="user">
|
|
108
|
+
<div class="sb-user-avatar" part="user-avatar">
|
|
109
|
+
${p.userAvatar ? html`<img src="${p.userAvatar}" alt="${p.userName}">` : p.userInitials || p.userName.slice(0, 1)}
|
|
90
110
|
</div>
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
111
|
+
|
|
112
|
+
<div class="sb-user-info">
|
|
113
|
+
<div class="sb-user-name">${p.userName}</div>
|
|
114
|
+
${p.userRole ? html`<div class="sb-user-role">${p.userRole}</div>` : nothing}
|
|
115
|
+
</div>
|
|
116
|
+
|
|
117
|
+
${isDark ? html`<span class="sb-user-dot" aria-hidden="true"></span>` : p.showUserAction ? html`
|
|
118
|
+
<button
|
|
119
|
+
class="sb-user-action"
|
|
120
|
+
aria-label="Acción de usuario"
|
|
121
|
+
@click="${p.onUserAction}"
|
|
122
|
+
>${svgLogout}</button>` : nothing}
|
|
99
123
|
</div>
|
|
100
124
|
`;
|
|
101
125
|
}
|
|
102
|
-
function
|
|
103
|
-
const valueDisplay = p.dual ? html`<span class="rs-value">
|
|
104
|
-
${p.valueMin} — ${p.valueMax}
|
|
105
|
-
${p.unit ? html`<span class="rs-value-unit">${p.unit}</span>` : nothing}
|
|
106
|
-
</span>` : html`<span class="rs-value">${renderValue(p.value, p.unit)}</span>`;
|
|
126
|
+
function sidebarTemplate(p) {
|
|
107
127
|
return html`
|
|
108
|
-
<div
|
|
109
|
-
|
|
110
|
-
${
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
${valueDisplay}
|
|
114
|
-
</div>
|
|
115
|
-
` : nothing}
|
|
128
|
+
<div
|
|
129
|
+
class="sb-overlay ${p.mobileOpen ? "is-open" : ""}"
|
|
130
|
+
@click="${p.onOverlayClick}"
|
|
131
|
+
aria-hidden="true"
|
|
132
|
+
></div>
|
|
116
133
|
|
|
117
|
-
|
|
134
|
+
<aside
|
|
135
|
+
class="sidebar
|
|
136
|
+
${p.mobileOpen ? "is-open" : ""}
|
|
137
|
+
${p.collapsed ? "is-collapsed" : ""}"
|
|
138
|
+
part="sidebar"
|
|
139
|
+
>
|
|
140
|
+
${renderHeader(p)}
|
|
141
|
+
${renderSearch(p)}
|
|
142
|
+
${renderNav(p)}
|
|
143
|
+
${renderUser(p)}
|
|
144
|
+
</aside>
|
|
118
145
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
${renderMarks(p.marks, p.pct)}
|
|
127
|
-
|
|
128
|
-
${renderLimits(p.showLimits, p.limitMinText, p.limitMaxText)}
|
|
129
|
-
|
|
130
|
-
</div>
|
|
146
|
+
<button
|
|
147
|
+
class="sb-toggle"
|
|
148
|
+
aria-label="${p.mobileOpen ? "Cerrar menú" : "Abrir menú"}"
|
|
149
|
+
aria-expanded="${p.mobileOpen}"
|
|
150
|
+
@click="${p.onToggleClick}"
|
|
151
|
+
>${p.mobileOpen ? svgClose : svgMenu}</button>
|
|
131
152
|
`;
|
|
132
153
|
}
|
|
133
154
|
export {
|
|
134
|
-
|
|
155
|
+
sidebarTemplate
|
|
135
156
|
};
|
|
136
157
|
//# sourceMappingURL=index255.js.map
|
package/dist/index255.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index255.js","sources":["../src/components/
|
|
1
|
+
{"version":3,"file":"index255.js","sources":["../src/components/organisms/sidebar/lib-sidebar.html.ts"],"sourcesContent":["import { html, nothing, TemplateResult } from 'lit';\nimport type { SidebarLink } from '../../../types';\n\nexport interface SidebarTemplateProps {\n /* Header */\n logoMark: string;\n brandName: string;\n /* Search */\n showSearch: boolean;\n searchPlaceholder: string;\n /* Nav */\n links: SidebarLink[];\n active: string;\n /* User footer */\n userName: string;\n userRole: string;\n userAvatar: string;\n userInitials:string;\n showUserAction: boolean;\n /* State */\n variant: string;\n collapsed: boolean;\n mobileOpen: boolean;\n /* Handlers */\n onLinkClick: (id: string) => void;\n onUserAction: () => void;\n onSearchInput: (q: string) => void;\n onOverlayClick: () => void;\n onToggleClick: () => void;\n}\n\n/* ── SVG icons inline — no lib-icon dependency for shell elements ── */\nconst svgSearch = html`\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 16 16\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\">\n <circle cx=\"7\" cy=\"7\" r=\"5\"/><line x1=\"11\" y1=\"11\" x2=\"14\" y2=\"14\"/>\n </svg>`;\n\nconst svgLogout = html`\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 14 14\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\">\n <path d=\"M6 2H3a1 1 0 00-1 1v8a1 1 0 001 1h3\"/>\n <polyline points=\"10,4 12,7 10,10\"/>\n <line x1=\"4\" y1=\"7\" x2=\"12\" y2=\"7\"/>\n </svg>`;\n\nconst svgMenu = html`\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 16 16\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\">\n <line x1=\"2\" y1=\"4\" x2=\"14\" y2=\"4\"/>\n <line x1=\"2\" y1=\"8\" x2=\"14\" y2=\"8\"/>\n <line x1=\"2\" y1=\"12\" x2=\"14\" y2=\"12\"/>\n </svg>`;\n\nconst svgClose = html`\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 14 14\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\">\n <line x1=\"2\" y1=\"2\" x2=\"12\" y2=\"12\"/>\n <line x1=\"12\" y1=\"2\" x2=\"2\" y2=\"12\"/>\n </svg>`;\n\n/* ── Badge ── */\nfunction renderBadge(badge: string | number | undefined): TemplateResult | typeof nothing {\n if (badge === undefined || badge === null || badge === '') return nothing;\n if (badge === 'dot') {\n return html`<span class=\"sb-badge sb-badge--dot\" aria-hidden=\"true\"></span>`;\n }\n const n = typeof badge === 'number' ? badge : parseInt(String(badge), 10);\n const cls = (!isNaN(n) && n > 9) || isNaN(n) ? 'sb-badge--kaki' : 'sb-badge--muted';\n return html`<span class=\"sb-badge ${cls}\">${badge}</span>`;\n}\n\n/* ── Header ── */\nfunction renderHeader(p: SidebarTemplateProps): TemplateResult {\n const isGlitch = p.variant === 'glitch';\n const isKintsugi = p.variant === 'kintsugi';\n\n return html`\n <div class=\"sb-header\" part=\"header\">\n <div class=\"sb-logo-mark\" part=\"logo-mark\">\n ${isKintsugi\n ? html`<span>${p.logoMark}</span>`\n : p.logoMark}\n </div>\n ${isGlitch\n ? html`<span class=\"sb-brand\">⌗ ${p.brandName.toUpperCase()}</span>\n <span class=\"sb-version\">v0.1</span>`\n : html`<span class=\"sb-brand\">${p.brandName}</span>`}\n </div>\n `;\n}\n\n/* ── Search ── */\nfunction renderSearch(p: SidebarTemplateProps): TemplateResult | typeof nothing {\n if (!p.showSearch) return nothing;\n return html`\n <div class=\"sb-search\" part=\"search\">\n <div class=\"sb-search-inner\">\n ${svgSearch}\n <input\n class=\"sb-search-input\"\n type=\"search\"\n placeholder=\"${p.searchPlaceholder}\"\n aria-label=\"Buscar\"\n @input=\"${(e: Event): void =>\n p.onSearchInput((e.target as HTMLInputElement).value)}\"\n />\n <span class=\"sb-search-kbd\">⌘K</span>\n </div>\n </div>\n `;\n}\n\n/* ── Nav ── */\nfunction renderNav(p: SidebarTemplateProps): TemplateResult {\n const isGlitch = p.variant === 'glitch';\n\n return html`\n <nav class=\"sb-nav\" part=\"nav\" aria-label=\"Navegación principal\">\n <div class=\"sb-indicator\" part=\"indicator\"></div>\n\n ${p.links.map(link => html`\n ${link.group ? html`\n <div class=\"sb-group\" part=\"group\">\n ${isGlitch ? `// ${link.group}` : link.group}\n </div>\n ` : nothing}\n\n <button\n class=\"sb-link ${link.id === p.active ? 'is-active' : ''}\"\n part=\"link${link.id === p.active ? ' link-active' : ''}\"\n data-id=\"${link.id}\"\n ?disabled=\"${link.disabled}\"\n aria-current=\"${link.id === p.active ? 'page' : nothing}\"\n @click=\"${(): void => { if (!link.disabled) p.onLinkClick(link.id); }}\"\n >\n <span class=\"sb-link-icon\">\n <lib-icon name=\"${link.icon}\" size=\"sm\"></lib-icon>\n </span>\n\n ${isGlitch\n ? html`<span class=\"sb-link-prefix\">›</span>`\n : nothing}\n\n <span class=\"sb-link-label\">${link.label}</span>\n\n ${renderBadge(link.badge)}\n </button>\n `)}\n </nav>\n `;\n}\n\n/* ── User footer ── */\nfunction renderUser(p: SidebarTemplateProps): TemplateResult {\n const isDark = p.variant === 'dark' || !p.variant;\n\n return html`\n <div class=\"sb-user\" part=\"user\">\n <div class=\"sb-user-avatar\" part=\"user-avatar\">\n ${p.userAvatar\n ? html`<img src=\"${p.userAvatar}\" alt=\"${p.userName}\">`\n : p.userInitials || p.userName.slice(0, 1)}\n </div>\n\n <div class=\"sb-user-info\">\n <div class=\"sb-user-name\">${p.userName}</div>\n ${p.userRole ? html`<div class=\"sb-user-role\">${p.userRole}</div>` : nothing}\n </div>\n\n ${isDark\n ? html`<span class=\"sb-user-dot\" aria-hidden=\"true\"></span>`\n : p.showUserAction\n ? html`\n <button\n class=\"sb-user-action\"\n aria-label=\"Acción de usuario\"\n @click=\"${p.onUserAction}\"\n >${svgLogout}</button>`\n : nothing}\n </div>\n `;\n}\n\n/* ── Template principal ── */\nexport function sidebarTemplate(p: SidebarTemplateProps): TemplateResult {\n return html`\n <div\n class=\"sb-overlay ${p.mobileOpen ? 'is-open' : ''}\"\n @click=\"${p.onOverlayClick}\"\n aria-hidden=\"true\"\n ></div>\n\n <aside\n class=\"sidebar\n ${p.mobileOpen ? 'is-open' : ''}\n ${p.collapsed ? 'is-collapsed' : ''}\"\n part=\"sidebar\"\n >\n ${renderHeader(p)}\n ${renderSearch(p)}\n ${renderNav(p)}\n ${renderUser(p)}\n </aside>\n\n <button\n class=\"sb-toggle\"\n aria-label=\"${p.mobileOpen ? 'Cerrar menú' : 'Abrir menú'}\"\n aria-expanded=\"${p.mobileOpen}\"\n @click=\"${p.onToggleClick}\"\n >${p.mobileOpen ? svgClose : svgMenu}</button>\n `;\n}"],"names":[],"mappings":"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"}
|