@shibui-ui/ui 1.25.1 → 1.26.0
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 +6 -97
- package/dist/index194.js.map +1 -1
- package/dist/index195.js +2 -2
- package/dist/index197.js +18 -2
- package/dist/index197.js.map +1 -1
- package/dist/index198.js +2 -74
- package/dist/index198.js.map +1 -1
- package/dist/index199.js +74 -64
- package/dist/index199.js.map +1 -1
- package/dist/index200.js +2 -2
- package/dist/index201.js +2 -57
- package/dist/index201.js.map +1 -1
- package/dist/index202.js +39 -2
- package/dist/index202.js.map +1 -1
- package/dist/index203.js +2 -2
- package/dist/index204.js +219 -144
- package/dist/index204.js.map +1 -1
- package/dist/index205.js +82 -43
- package/dist/index205.js.map +1 -1
- package/dist/index206.js +2 -51
- package/dist/index206.js.map +1 -1
- package/dist/index207.js +94 -2
- package/dist/index207.js.map +1 -1
- package/dist/index208.js +2 -33
- package/dist/index208.js.map +1 -1
- package/dist/index209.js +268 -2
- package/dist/index209.js.map +1 -1
- package/dist/index210.js +2 -6
- package/dist/index210.js.map +1 -1
- package/dist/index211.js +21 -2
- package/dist/index211.js.map +1 -1
- package/dist/index212.js +2 -260
- package/dist/index212.js.map +1 -1
- package/dist/index213.js +8 -16
- package/dist/index213.js.map +1 -1
- package/dist/index214.js +2 -2
- package/dist/index215.js +15 -2
- package/dist/index215.js.map +1 -1
- package/dist/index216.js +2 -66
- package/dist/index216.js.map +1 -1
- package/dist/index217.js +146 -24
- package/dist/index217.js.map +1 -1
- package/dist/index218.js +2 -2
- package/dist/index219.js +5 -2
- package/dist/index219.js.map +1 -1
- package/dist/index220.js +2 -81
- package/dist/index220.js.map +1 -1
- package/dist/index221.js +6 -78
- package/dist/index221.js.map +1 -1
- package/dist/index222.js +2 -2
- package/dist/index223.js +2 -133
- package/dist/index223.js.map +1 -1
- package/dist/index224.js +92 -2
- package/dist/index224.js.map +1 -1
- package/dist/index225.js +59 -2
- package/dist/index225.js.map +1 -1
- package/dist/index226.js +2 -72
- package/dist/index226.js.map +1 -1
- package/dist/index227.js +97 -94
- package/dist/index227.js.map +1 -1
- package/dist/index228.js +2 -2
- package/dist/index229.js +2 -71
- package/dist/index229.js.map +1 -1
- package/dist/index230.js +74 -2
- package/dist/index230.js.map +1 -1
- package/dist/index231.js +74 -2
- package/dist/index231.js.map +1 -1
- package/dist/index232.js +2 -12
- package/dist/index232.js.map +1 -1
- package/dist/index233.js +53 -5
- package/dist/index233.js.map +1 -1
- package/dist/index234.js +2 -2
- package/dist/index235.js +2 -18
- package/dist/index235.js.map +1 -1
- package/dist/index236.js +162 -2
- package/dist/index236.js.map +1 -1
- package/dist/index237.js +43 -84
- package/dist/index237.js.map +1 -1
- package/dist/index238.js +51 -2
- package/dist/index238.js.map +1 -1
- package/dist/index239.js +2 -2
- package/dist/index240.js +33 -39
- package/dist/index240.js.map +1 -1
- package/dist/index241.js +2 -2
- package/dist/index242.js +5 -236
- package/dist/index242.js.map +1 -1
- package/dist/index243.js +2 -82
- package/dist/index243.js.map +1 -1
- package/dist/index244.js +260 -2
- package/dist/index244.js.map +1 -1
- package/dist/index245.js +16 -93
- package/dist/index245.js.map +1 -1
- package/dist/index246.js +2 -2
- package/dist/index247.js +2 -268
- package/dist/index247.js.map +1 -1
- package/dist/index248.js +66 -2
- package/dist/index248.js.map +1 -1
- package/dist/index249.js +24 -13
- package/dist/index249.js.map +1 -1
- package/dist/index250.js +2 -2
- package/dist/index251.js +2 -9
- package/dist/index251.js.map +1 -1
- package/dist/index252.js +81 -2
- package/dist/index252.js.map +1 -1
- package/dist/index253.js +78 -12
- package/dist/index253.js.map +1 -1
- package/dist/index254.js +2 -2
- package/dist/index255.js +111 -132
- package/dist/index255.js.map +1 -1
- package/dist/index256.js +2 -2
- package/dist/index257.js +2 -5
- package/dist/index257.js.map +1 -1
- package/dist/index258.js +72 -2
- package/dist/index258.js.map +1 -1
- package/dist/index259.js +93 -5
- package/dist/index259.js.map +1 -1
- package/dist/index260.js +2 -2
- package/dist/index261.js +71 -2
- package/dist/index261.js.map +1 -1
- package/dist/index262.js +2 -92
- package/dist/index262.js.map +1 -1
- package/dist/index263.js +2 -59
- package/dist/index263.js.map +1 -1
- package/dist/index264.js +12 -2
- package/dist/index264.js.map +1 -1
- package/dist/index34.js +1 -1
- package/dist/index347.js +1 -1
- package/dist/index352.js +26 -19
- package/dist/index352.js.map +1 -1
- package/dist/index357.js +19 -26
- 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 +1 -1
package/dist/index217.js
CHANGED
|
@@ -1,35 +1,157 @@
|
|
|
1
|
-
import {
|
|
2
|
-
const
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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>`;
|
|
35
|
+
}
|
|
36
|
+
function renderHeader(p) {
|
|
37
|
+
const isGlitch = p.variant === "glitch";
|
|
38
|
+
const isKintsugi = p.variant === "kintsugi";
|
|
39
|
+
return html`
|
|
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>`}
|
|
46
|
+
</div>
|
|
47
|
+
`;
|
|
48
|
+
}
|
|
49
|
+
function renderSearch(p) {
|
|
50
|
+
if (!p.showSearch) return nothing;
|
|
11
51
|
return html`
|
|
12
|
-
<div class="
|
|
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>
|
|
64
|
+
</div>
|
|
65
|
+
`;
|
|
66
|
+
}
|
|
67
|
+
function renderNav(p) {
|
|
68
|
+
const isGlitch = p.variant === "glitch";
|
|
69
|
+
return html`
|
|
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}
|
|
13
79
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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>
|
|
102
|
+
`;
|
|
103
|
+
}
|
|
104
|
+
function renderUser(p) {
|
|
105
|
+
const isDark = p.variant === "dark" || !p.variant;
|
|
106
|
+
return html`
|
|
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)}
|
|
19
110
|
</div>
|
|
20
111
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
aria-label="Cerrar alerta"
|
|
26
|
-
@click="${props.handleClose}"
|
|
27
|
-
>×</button>` : nothing}
|
|
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>
|
|
28
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}
|
|
29
123
|
</div>
|
|
30
124
|
`;
|
|
31
125
|
}
|
|
126
|
+
function sidebarTemplate(p) {
|
|
127
|
+
return html`
|
|
128
|
+
<div
|
|
129
|
+
class="sb-overlay ${p.mobileOpen ? "is-open" : ""}"
|
|
130
|
+
@click="${p.onOverlayClick}"
|
|
131
|
+
aria-hidden="true"
|
|
132
|
+
></div>
|
|
133
|
+
|
|
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>
|
|
145
|
+
|
|
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>
|
|
152
|
+
`;
|
|
153
|
+
}
|
|
32
154
|
export {
|
|
33
|
-
|
|
155
|
+
sidebarTemplate
|
|
34
156
|
};
|
|
35
157
|
//# sourceMappingURL=index217.js.map
|
package/dist/index217.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index217.js","sources":["../src/components/
|
|
1
|
+
{"version":3,"file":"index217.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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"}
|
package/dist/index218.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const alertCss = '@layer tokens,reset,components;@layer reset{:host{display:block;width:100%}*,*:before,*:after{box-sizing:border-box}}@layer components{.alert{padding:var(--lib-space-md) var(--lib-space-lg);border-left:2px solid;display:flex;gap:var(--lib-space-md);align-items:flex-start;width:100%;transition:opacity var(--duration-base) var(--ease-default),transform var(--duration-base) var(--ease-default)}.alert-content{flex:1;min-width:0}.alert-title{font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wider);text-transform:uppercase;margin-bottom:var(--lib-space-xs);line-height:var(--leading-snug)}.alert-body{font-family:var(--lib-font-body);font-size:var(--text-sm);line-height:var(--leading-relaxed)}.alert-close{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:transparent;border:none;cursor:pointer;padding:0;opacity:.5;color:inherit;transition:opacity var(--duration-fast) var(--ease-default);font-size:16px;line-height:1;font-family:var(--lib-font-mono)}.alert-close:hover{opacity:1}:host([type="default"]) .alert,.alert{background:var(--bg-surface);border-color:var(--border-strong)}:host([type="default"]) .alert-title{color:var(--text-secondary)}:host([type="default"]) .alert-body{color:var(--text-secondary)}:host([type="info"]) .alert{background:var(--color-celadon-50);border-color:var(--color-celadon-400)}:host([type="info"]) .alert-title{color:var(--color-celadon-600)}:host([type="info"]) .alert-body{color:var(--color-celadon-500)}:host([type="warning"]) .alert{background:#fffbf0;border-color:var(--color-warning)}:host([type="warning"]) .alert-title{color:var(--color-warning)}:host([type="warning"]) .alert-body{color:#6b5010}:host([type="error"]) .alert{background:#fff8f7;border-color:var(--color-error)}:host([type="error"]) .alert-title{color:var(--color-error)}:host([type="error"]) .alert-body{color:#6b2015}:host([type="success"]) .alert{background:#f5faf6;border-color:var(--color-success)}:host([type="success"]) .alert-title{color:var(--color-success)}:host([type="success"]) .alert-body{color:#1e4a2a}:host([glass]) .alert{background:var(--lib-glass-bg);-webkit-backdrop-filter:var(--lib-glass-filter);backdrop-filter:var(--lib-glass-filter);border:var(--lib-glass-border);border-left-width:2px;box-shadow:var(--lib-glass-shadow);position:relative;overflow:hidden}:host([glass]) .alert:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--lib-glass-shine);pointer-events:none}:host([glass]) .alert-title,:host([glass]) .alert-body{color:var(--lib-glass-text);text-shadow:var(--lib-glass-text-shadow);position:relative;z-index:1}:host([glass]) .alert-close{color:var(--lib-glass-text);position:relative;z-index:1}}';
|
|
1
|
+
const componentCss = '@layer tokens,reset,components;@layer reset{:host{display:block;height:100%}*,*:before,*:after{box-sizing:border-box}a{text-decoration:none}button{font:inherit;cursor:pointer;border:none;background:none}}@layer components{.sidebar{width:var(--lib-sidebar-width, 240px);height:100vh;display:flex;flex-direction:column;flex-shrink:0;position:relative;z-index:var(--z-raised);overflow:hidden;transition:width var(--duration-slow) var(--ease-out),transform var(--duration-slow) var(--ease-out);background:var(--color-washi-950);border-right:1px solid rgb(255,255,255,.07)}.sidebar.is-collapsed{width:64px}:host([variant="light"]) .sidebar{background:var(--bg-elevated);border-right:1px solid var(--border-subtle)}:host([variant="kintsugi"]) .sidebar{background:var(--color-washi-950);border-right:none}:host([variant="kintsugi"]) .sidebar:after{content:"";position:absolute;top:0;right:0;bottom:0;width:2px;background:linear-gradient(180deg,transparent 0%,rgb(184,90,30,.3) 10%,var(--color-kaki-400) 30%,#F5D08A 50%,var(--color-kaki-400) 70%,rgb(184,90,30,.3) 90%,transparent 100%);background-size:100% 200%;animation:sb-kintsugi-seam 5s linear infinite;pointer-events:none;z-index:2}@keyframes sb-kintsugi-seam{0%{background-position:0 -100%}to{background-position:0 100%}}:host([variant="glitch"]) .sidebar{background:var(--color-washi-950);border-right:1px solid rgb(255,255,255,.06);animation:sb-glitch-border 7s steps(1) infinite}:host([variant="glitch"]) .sidebar:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:repeating-linear-gradient(0deg,transparent,transparent 3px,rgb(255,255,255,.015) 3px,rgb(255,255,255,.015) 4px);pointer-events:none;z-index:5;animation:sb-scanline-shift 7s steps(1) infinite}@keyframes sb-glitch-border{0%,88%,to{border-color:#ffffff0f;box-shadow:none}89%{border-color:#d9723466;box-shadow:-2px 0 #d9723433}90%{border-color:#4e94824d;box-shadow:2px 0 #4e948226}91%{border-color:#ffffff0f;box-shadow:none}}@keyframes sb-scanline-shift{0%,87%,to{opacity:1;transform:none}88%{transform:translateY(-3px);opacity:.7}89%{transform:translateY(2px);opacity:.9}90%{transform:none;opacity:1}}.sb-header{height:56px;padding:0 var(--lib-space-md);display:flex;align-items:center;gap:var(--lib-space-sm);flex-shrink:0;border-bottom:1px solid rgb(255,255,255,.06);position:relative;z-index:1;overflow:hidden}:host([variant="light"]) .sb-header{border-bottom-color:var(--color-washi-100)}:host([variant="kintsugi"]) .sb-header{border-bottom-color:#b85a1e1f}.sb-logo-mark{width:28px;height:28px;background:var(--color-kaki-500);display:flex;align-items:center;justify-content:center;font-family:var(--lib-font-display);color:#fff;font-size:1rem;font-weight:300;flex-shrink:0}:host([variant="dark"]) .sb-logo-mark,.sb-logo-mark{background:var(--color-kaki-500);color:#fff}:host([variant="kintsugi"]) .sb-logo-mark{position:relative;background:transparent;border:none;overflow:visible;border-radius:50%}:host([variant="kintsugi"]) .sb-logo-mark:before{content:"";position:absolute;top:-2px;right:-2px;bottom:-2px;left:-2px;border-radius:50%;background:conic-gradient(var(--color-kaki-600),#F5D08A,var(--color-kaki-400),#F5D08A,var(--color-kaki-600));animation:sb-logo-ring 4s linear infinite}:host([variant="kintsugi"]) .sb-logo-mark:after{content:"";position:absolute;top:1px;right:1px;bottom:1px;left:1px;border-radius:50%;background:var(--color-washi-950)}:host([variant="kintsugi"]) .sb-logo-mark span{position:relative;z-index:2;color:var(--color-kaki-400)}@keyframes sb-logo-ring{to{transform:rotate(360deg)}}.sb-brand{font-family:var(--lib-font-display);font-size:1.1rem;font-weight:300;letter-spacing:.08em;white-space:nowrap;overflow:hidden;transition:opacity var(--duration-base) var(--ease-out),width var(--duration-slow) var(--ease-out);color:#faf7f4a6}:host([variant="light"]) .sb-brand{color:var(--text-primary)}:host([variant="kintsugi"]) .sb-brand{color:#faf7f480}:host([variant="glitch"]) .sb-brand{font-family:var(--lib-font-mono);font-size:.75rem;letter-spacing:.2em;color:var(--color-kaki-400)}.sidebar.is-collapsed .sb-brand{opacity:0;width:0;pointer-events:none}.sb-version{margin-left:auto;font-family:var(--lib-font-mono);font-size:8px;letter-spacing:.12em;color:#faf7f426;white-space:nowrap;transition:opacity var(--duration-base)}.sidebar.is-collapsed .sb-version{opacity:0;pointer-events:none}.sb-search{padding:var(--lib-space-sm) var(--lib-space-md);flex-shrink:0;overflow:hidden;transition:max-height var(--duration-slow) var(--ease-out),opacity var(--duration-base);max-height:52px}.sidebar.is-collapsed .sb-search{opacity:0;max-height:0;padding:0;pointer-events:none}.sb-search-inner{display:flex;align-items:center;gap:var(--lib-space-xs);border:1px solid rgb(255,255,255,.08);background:#ffffff0a;padding:0 var(--lib-space-sm);height:30px;transition:border-color var(--duration-base)}.sb-search-inner:focus-within{border-color:#ffffff2e}.sb-search-inner svg{flex-shrink:0;color:#faf7f440}.sb-search-input{flex:1;background:none;border:none;outline:none;font-family:var(--lib-font-mono);font-size:9px;letter-spacing:.1em;color:#faf7f499;width:100%}.sb-search-input::placeholder{color:#faf7f433}.sb-search-kbd{margin-left:auto;font-family:var(--lib-font-mono);font-size:8px;color:#faf7f426;border:1px solid rgb(255,255,255,.1);padding:0 4px;white-space:nowrap;flex-shrink:0}.sb-nav{flex:1;padding:var(--lib-space-md) 0;display:flex;flex-direction:column;position:relative;z-index:1;overflow-y:auto;scrollbar-width:none}.sb-nav::-webkit-scrollbar{display:none}.sb-indicator{position:absolute;left:0;width:2px;background:var(--color-kaki-500);border-radius:0 2px 2px 0;pointer-events:none;opacity:0;transition:top .4s cubic-bezier(.16,1,.3,1),height .4s cubic-bezier(.16,1,.3,1),opacity var(--duration-base)}.sb-indicator.visible{opacity:1}:host([variant="kintsugi"]) .sb-indicator{background:var(--color-kaki-400)}.sidebar.is-collapsed .sb-indicator{display:none}.sb-group{padding:var(--lib-space-sm) var(--lib-space-md) var(--lib-space-xs);font-family:var(--lib-font-mono);font-size:8px;letter-spacing:.22em;text-transform:uppercase;color:#faf7f42e;white-space:nowrap;overflow:hidden;transition:opacity var(--duration-base),max-height var(--duration-slow),padding var(--duration-slow);max-height:32px}:host([variant="light"]) .sb-group{color:var(--color-washi-400)}:host([variant="kintsugi"]) .sb-group{color:#b85a1e59}:host([variant="glitch"]) .sb-group{color:#faf7f426;letter-spacing:.16em}.sidebar.is-collapsed .sb-group{opacity:0;max-height:0;padding-top:0;padding-bottom:0;pointer-events:none}.sb-link{display:flex;align-items:center;gap:var(--lib-space-sm);padding:var(--lib-space-sm) var(--lib-space-md);width:100%;text-align:left;border-left:2px solid transparent;background:transparent;cursor:pointer;position:relative;transition:color var(--duration-fast),background var(--duration-fast),border-color var(--duration-fast);font-family:var(--lib-font-body);font-size:var(--text-sm);color:#faf7f459}:host([variant="light"]) .sb-link{color:var(--color-washi-600)}:host([variant="kintsugi"]) .sb-link{color:#faf7f44d}:host([variant="glitch"]) .sb-link{font-family:var(--lib-font-mono);font-size:9px;letter-spacing:.1em;color:#faf7f440;padding:.45rem var(--lib-space-md)}.sb-link:hover:not(.is-active,[disabled]){color:#faf7f4b3;background:#ffffff0a;border-left-color:#ffffff26}:host([variant="light"]) .sb-link:hover:not(.is-active,[disabled]){color:var(--color-washi-900);background:var(--color-washi-50);border-left-color:var(--color-washi-300)}:host([variant="kintsugi"]) .sb-link:hover:not(.is-active,[disabled]){color:#faf7f499;background:#b85a1e0d}:host([variant="glitch"]) .sb-link:hover:not(.is-active,[disabled]){color:#faf7f499;background:#ffffff08}.sb-link.is-active{color:var(--color-kaki-400);background:#b85a1e1a;border-left-color:var(--color-kaki-500)}:host([variant="light"]) .sb-link.is-active{color:var(--color-kaki-600);background:var(--color-kaki-50);border-left-color:var(--color-kaki-500)}:host([variant="kintsugi"]) .sb-link.is-active{color:var(--color-kaki-400);background:linear-gradient(90deg,rgb(184,90,30,.15),transparent);border-left-color:var(--color-kaki-400)}:host([variant="glitch"]) .sb-link.is-active{color:var(--color-kaki-400);background:#b85a1e14;border-left-color:var(--color-kaki-500)}.sb-link[disabled]{opacity:.4;cursor:not-allowed;pointer-events:none}.sb-link-icon{display:flex;align-items:center;flex-shrink:0;font-size:15px;opacity:.7;transition:opacity var(--duration-base)}.sb-link.is-active .sb-link-icon{opacity:1}.sb-link-prefix{font-size:9px;flex-shrink:0;color:var(--color-kaki-400)}.sb-link:not(.is-active) .sb-link-prefix{opacity:.4;color:inherit}.sb-link-label{white-space:nowrap;overflow:hidden;transition:opacity var(--duration-base),width var(--duration-slow) var(--ease-out)}.sb-badge{margin-left:auto;font-family:var(--lib-font-mono);font-size:8px;padding:1px 6px;letter-spacing:.1em;flex-shrink:0;transition:opacity var(--duration-base)}.sb-badge--kaki{background:var(--color-kaki-500);color:#fff}.sb-badge--muted{background:var(--color-washi-200);color:var(--color-washi-600)}:host([variant="kintsugi"]) .sb-badge--kaki{background:transparent;border:1px solid rgb(184,90,30,.3);color:var(--color-kaki-400)}.sb-badge--dot{width:6px;height:6px;border-radius:50%;background:var(--color-kaki-400);padding:0}:host([variant="glitch"]) .sb-badge--dot{animation:sb-glitch-pulse 2s ease-in-out infinite}@keyframes sb-glitch-pulse{0%,to{opacity:1}50%{opacity:.2}}.sidebar.is-collapsed .sb-link{position:relative;padding:0;height:44px;border-left-color:transparent}.sidebar.is-collapsed .sb-link.is-active{background:#b85a1e26;border-left-color:transparent}:host([variant="light"]) .sidebar.is-collapsed .sb-link.is-active{background:var(--color-kaki-50)}.sidebar.is-collapsed .sb-link-label,.sidebar.is-collapsed .sb-badge,.sidebar.is-collapsed .sb-link-prefix{display:none}.sidebar.is-collapsed .sb-link-icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:17px;opacity:1}.sb-user{padding:var(--lib-space-md);border-top:1px solid rgb(255,255,255,.06);display:flex;align-items:center;gap:var(--lib-space-sm);flex-shrink:0;overflow:hidden;position:relative;z-index:1;transition:padding var(--duration-slow)}:host([variant="light"]) .sb-user{border-top-color:var(--color-washi-100)}:host([variant="kintsugi"]) .sb-user{border-top-color:#b85a1e1f}:host([variant="glitch"]) .sb-user{border-top-color:#ffffff0d}.sidebar.is-collapsed .sb-user{justify-content:center;padding:var(--lib-space-sm)}.sb-user-avatar{width:30px;height:30px;border-radius:50%;background:var(--color-kaki-500);display:flex;align-items:center;justify-content:center;font-family:var(--lib-font-display);color:#fff;font-size:.95rem;flex-shrink:0;overflow:hidden;cursor:pointer}.sb-user-avatar img{width:100%;height:100%;object-fit:cover;border-radius:50%}:host([variant="dark"]) .sb-user-avatar,.sb-user-avatar{background:var(--color-kaki-500);color:#fff}:host([variant="kintsugi"]) .sb-user-avatar{background:#b85a1e40;border:1px solid rgb(184,90,30,.4);color:var(--color-kaki-400)}:host([variant="glitch"]) .sb-user-avatar{background:#b85a1e40;border:1px solid rgb(184,90,30,.35);color:var(--color-kaki-400);font-family:var(--lib-font-mono);font-size:.75rem}.sb-user-info{min-width:0;flex:1;overflow:hidden;transition:opacity var(--duration-base),width var(--duration-slow)}.sidebar.is-collapsed .sb-user-info{opacity:0;width:0;pointer-events:none}.sb-user-name{font-family:var(--lib-font-body);font-size:var(--text-sm);line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#faf7f48c}:host([variant="light"]) .sb-user-name{color:var(--color-washi-800)}:host([variant="kintsugi"]) .sb-user-name{color:#faf7f473}.sb-user-role{font-family:var(--lib-font-mono);font-size:8px;letter-spacing:.1em;text-transform:uppercase;margin-top:1px;color:#faf7f433}:host([variant="light"]) .sb-user-role{color:var(--color-washi-400)}:host([variant="kintsugi"]) .sb-user-role{color:#b85a1e80}.sb-user-action{margin-left:auto;width:26px;height:26px;display:flex;align-items:center;justify-content:center;border:1px solid rgb(255,255,255,.1);color:#faf7f44d;flex-shrink:0;transition:border-color var(--duration-base),color var(--duration-base),background var(--duration-base);cursor:pointer}.sb-user-action:hover{border-color:#fff3;background:#ffffff0d;color:#faf7f4b3}:host([variant="light"]) .sb-user-action{border-color:var(--color-washi-200);color:var(--color-washi-400)}:host([variant="light"]) .sb-user-action:hover{border-color:var(--color-washi-400);background:var(--color-washi-50);color:var(--color-washi-700)}.sb-user-dot{width:6px;height:6px;border-radius:50%;background:var(--color-celadon-400);flex-shrink:0;margin-left:auto}.sidebar.is-collapsed .sb-user-action,.sidebar.is-collapsed .sb-user-dot{display:none}.sb-overlay{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:calc(var(--z-raised) - 1);opacity:0;transition:opacity var(--duration-base)}.sb-toggle{display:none;position:fixed;bottom:var(--lib-space-lg);right:var(--lib-space-lg);z-index:var(--z-modal);width:44px;height:44px;background:var(--color-washi-900);color:var(--color-washi-50);align-items:center;justify-content:center;box-shadow:var(--shadow-lg)}@media(max-width:768px){:host{height:auto}.sidebar{position:fixed;left:0;top:0;bottom:0;height:100dvh;transform:translate(-100%);z-index:var(--z-modal);box-shadow:var(--shadow-xl)}.sidebar.is-open{transform:translate(0)}.sb-toggle{display:flex}.sb-overlay{display:block}.sb-overlay.is-open{opacity:1;pointer-events:auto}}@media(prefers-reduced-motion:reduce){.sidebar,.sb-indicator,:host([variant="kintsugi"]) .sidebar:after,:host([variant="kintsugi"]) .sb-logo-mark:before,:host([variant="glitch"]) .sidebar,:host([variant="glitch"]) .sidebar:before{animation:none!important;transition:none!important}}}';
|
|
2
2
|
export {
|
|
3
|
-
|
|
3
|
+
componentCss as default
|
|
4
4
|
};
|
|
5
5
|
//# sourceMappingURL=index218.js.map
|
package/dist/index219.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import { html } from "lit";
|
|
2
|
+
function staggerTemplate() {
|
|
3
|
+
return html`<slot></slot>`;
|
|
4
|
+
}
|
|
2
5
|
export {
|
|
3
|
-
|
|
6
|
+
staggerTemplate
|
|
4
7
|
};
|
|
5
8
|
//# sourceMappingURL=index219.js.map
|
package/dist/index219.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index219.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"index219.js","sources":["../src/components/organisms/stagger/lib-stagger-container.html.ts"],"sourcesContent":["import { html, TemplateResult } from 'lit';\n\nexport function staggerTemplate(): TemplateResult {\n return html`<slot></slot>`;\n}"],"names":[],"mappings":";AAEO,SAAS,kBAAkC;AAChD,SAAO;AACT;"}
|
package/dist/index220.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 staggerCss = "@layer tokens,reset,components;@layer reset{:host{display:block;width:100%}*,*:before,*:after{box-sizing:border-box}}@layer components{::slotted(*){opacity:0;transform:var(--_stagger-from, translateY(var(--lib-space-lg)));transition:opacity var(--_stagger-duration, var(--duration-slow)) var(--_stagger-ease, var(--ease-out)),transform var(--_stagger-duration, var(--duration-slow)) var(--_stagger-ease, var(--ease-out));transition-delay:var(--_stagger-delay, 0ms);will-change:opacity,transform}:host([visible]) ::slotted(*){opacity:1;transform:none}@media(prefers-reduced-motion:reduce){::slotted(*){transition:none;opacity:1;transform:none}}}";
|
|
81
2
|
export {
|
|
82
|
-
|
|
3
|
+
staggerCss as default
|
|
83
4
|
};
|
|
84
5
|
//# sourceMappingURL=index220.js.map
|
package/dist/index220.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index220.js","sources":[
|
|
1
|
+
{"version":3,"file":"index220.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
package/dist/index221.js
CHANGED
|
@@ -1,84 +1,12 @@
|
|
|
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 stepperTemplate(props) {
|
|
33
3
|
return html`
|
|
34
|
-
<
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
<!-- ← Anterior -->
|
|
39
|
-
<button
|
|
40
|
-
class="pg-btn pg-btn--nav"
|
|
41
|
-
part="btn-prev"
|
|
42
|
-
?disabled="${current === 1}"
|
|
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="stepper-track" role="list" aria-label="Pasos del proceso">
|
|
5
|
+
<slot @slotchange=${props.handleSlotChange}></slot>
|
|
6
|
+
</div>
|
|
79
7
|
`;
|
|
80
8
|
}
|
|
81
9
|
export {
|
|
82
|
-
|
|
10
|
+
stepperTemplate
|
|
83
11
|
};
|
|
84
12
|
//# sourceMappingURL=index221.js.map
|
package/dist/index221.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index221.js","sources":["../src/components/
|
|
1
|
+
{"version":3,"file":"index221.js","sources":["../src/components/organisms/stepper/lib-stepper.html.ts"],"sourcesContent":["import { html, TemplateResult } from 'lit';\n\nexport type LibStepperOrientation = 'horizontal' | 'vertical';\nexport type LibStepperVariant = 'default' | 'minimal' | 'kintsugi';\nexport type LibStepperSize = 'sm' | 'md' | 'lg';\n\nexport interface StepperTemplateProps {\n orientation: LibStepperOrientation;\n handleSlotChange: (e: Event) => void;\n}\n\n/**\n * El stepper es únicamente el contenedor flex + slot.\n * Toda la lógica de estados y el dibujado visual vive en lib-step.\n * @layer components gestiona flex-direction vía :host([orientation=\"vertical\"]).\n */\nexport function stepperTemplate(props: StepperTemplateProps): TemplateResult {\n return html`\n <div class=\"stepper-track\" role=\"list\" aria-label=\"Pasos del proceso\">\n <slot @slotchange=${props.handleSlotChange}></slot>\n </div>\n `;\n}"],"names":[],"mappings":";AAgBO,SAAS,gBAAgB,OAA6C;AAC3E,SAAO;AAAA;AAAA,0BAEiB,MAAM,gBAAgB;AAAA;AAAA;AAGhD;"}
|
package/dist/index222.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const
|
|
1
|
+
const stepperCss = '@layer tokens,reset,components;@layer reset{:host{display:block;width:100%}*,*:before,*:after{box-sizing:border-box}}@layer components{.stepper-track{display:flex;flex-direction:row;align-items:flex-start;width:100%;position:relative}:host([orientation="vertical"]) .stepper-track{flex-direction:column}}';
|
|
2
2
|
export {
|
|
3
|
-
|
|
3
|
+
stepperCss as default
|
|
4
4
|
};
|
|
5
5
|
//# sourceMappingURL=index222.js.map
|