@iyulab/modern-app 0.2.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/CHANGELOG.md +7 -0
- package/LICENSE +21 -0
- package/README.md +35 -0
- package/dist/app.d.ts +53 -0
- package/dist/app.js +111 -0
- package/dist/components/ProgressBar.d.ts +22 -0
- package/dist/components/ProgressBar.js +54 -0
- package/dist/components/ProgressBar.styles.d.ts +1 -0
- package/dist/components/ProgressBar.styles.js +31 -0
- package/dist/components/SidebarButton.d.ts +29 -0
- package/dist/components/SidebarButton.js +50 -0
- package/dist/components/SidebarButton.styles.d.ts +1 -0
- package/dist/components/SidebarButton.styles.js +62 -0
- package/dist/components/SidebarGroup.d.ts +35 -0
- package/dist/components/SidebarGroup.js +70 -0
- package/dist/components/SidebarGroup.styles.d.ts +1 -0
- package/dist/components/SidebarGroup.styles.js +93 -0
- package/dist/components/SidebarLink.d.ts +42 -0
- package/dist/components/SidebarLink.js +71 -0
- package/dist/components/SidebarLink.styles.d.ts +1 -0
- package/dist/components/SidebarLink.styles.js +58 -0
- package/dist/components/SidebarLogo.d.ts +33 -0
- package/dist/components/SidebarLogo.js +60 -0
- package/dist/components/SidebarLogo.styles.d.ts +1 -0
- package/dist/components/SidebarLogo.styles.js +53 -0
- package/dist/components/SidebarSection.d.ts +30 -0
- package/dist/components/SidebarSection.js +52 -0
- package/dist/components/SidebarSection.styles.d.ts +1 -0
- package/dist/components/SidebarSection.styles.js +44 -0
- package/dist/components/UnsafeContent.d.ts +16 -0
- package/dist/components/UnsafeContent.js +26 -0
- package/dist/components/UnsafeContent.styles.d.ts +1 -0
- package/dist/components/UnsafeContent.styles.js +9 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/internals/ExtendedBaseElement.d.ts +22 -0
- package/dist/internals/ExtendedBaseElement.js +59 -0
- package/dist/internals/observers.d.ts +10 -0
- package/dist/internals/observers.js +6 -0
- package/dist/layouts/SidebarLayout.d.ts +60 -0
- package/dist/layouts/SidebarLayout.js +183 -0
- package/dist/layouts/SidebarLayout.styles.d.ts +1 -0
- package/dist/layouts/SidebarLayout.styles.js +126 -0
- package/dist/layouts/SidebarLayout.types.d.ts +25 -0
- package/dist/types/AppConfigs.d.ts +54 -0
- package/dist/types/AppOptions.d.ts +12 -0
- package/dist/types/AppTypes.d.ts +6 -0
- package/package.json +53 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { css as o } from "lit";
|
|
2
|
+
const e = o`
|
|
3
|
+
:host {
|
|
4
|
+
display: block;
|
|
5
|
+
}
|
|
6
|
+
:host([compact]) button {
|
|
7
|
+
justify-content: center;
|
|
8
|
+
padding: 8px;
|
|
9
|
+
}
|
|
10
|
+
:host([compact]) .label {
|
|
11
|
+
display: none;
|
|
12
|
+
}
|
|
13
|
+
:host([compact]) .toggler {
|
|
14
|
+
display: none;
|
|
15
|
+
}
|
|
16
|
+
:host([compact]) .items {
|
|
17
|
+
display: none;
|
|
18
|
+
}
|
|
19
|
+
:host(:not([compact])[collapsed]) .toggler {
|
|
20
|
+
transform: rotate(-90deg);
|
|
21
|
+
}
|
|
22
|
+
:host(:not([compact])[collapsed]) .items {
|
|
23
|
+
height: 0;
|
|
24
|
+
margin-top: 0;
|
|
25
|
+
opacity: 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.container {
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-direction: column;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
button {
|
|
34
|
+
all: unset;
|
|
35
|
+
position: relative;
|
|
36
|
+
display: flex;
|
|
37
|
+
flex-direction: row;
|
|
38
|
+
justify-content: space-between;
|
|
39
|
+
align-items: center;
|
|
40
|
+
gap: 12px;
|
|
41
|
+
width: 100%;
|
|
42
|
+
padding: 8px 12px;
|
|
43
|
+
color: var(--u-text-color);
|
|
44
|
+
font-family: inherit;
|
|
45
|
+
background: transparent;
|
|
46
|
+
border: none;
|
|
47
|
+
border-radius: 8px;
|
|
48
|
+
transition: all 0.2s ease;
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
}
|
|
51
|
+
button:hover {
|
|
52
|
+
background-color: var(--u-bg-color-hover);
|
|
53
|
+
color: var(--u-text-color-hover);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.icon {
|
|
57
|
+
font-size: 20px;
|
|
58
|
+
color: inherit;
|
|
59
|
+
flex-shrink: 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.label {
|
|
63
|
+
flex: 1;
|
|
64
|
+
color: inherit;
|
|
65
|
+
font-size: 14px;
|
|
66
|
+
font-weight: 600;
|
|
67
|
+
line-height: 20px;
|
|
68
|
+
text-align: left;
|
|
69
|
+
overflow: hidden;
|
|
70
|
+
white-space: nowrap;
|
|
71
|
+
text-overflow: ellipsis;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.toggler {
|
|
75
|
+
font-size: 16px !important;
|
|
76
|
+
transition: transform 0.2s ease;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.items {
|
|
80
|
+
display: flex;
|
|
81
|
+
flex-direction: column;
|
|
82
|
+
margin-left: 32px;
|
|
83
|
+
margin-top: 4px;
|
|
84
|
+
gap: 4px;
|
|
85
|
+
overflow: hidden;
|
|
86
|
+
transition: all 0.3s ease;
|
|
87
|
+
border-left: 2px solid var(--u-border-color-weak);
|
|
88
|
+
padding-left: 8px;
|
|
89
|
+
}
|
|
90
|
+
`;
|
|
91
|
+
export {
|
|
92
|
+
e as styles
|
|
93
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { DirectiveResult } from 'lit/directive.js';
|
|
2
|
+
import { BaseElement } from '@iyulab/components/dist/components/BaseElement.js';
|
|
3
|
+
import { ExtendedBaseElement } from '../internals/ExtendedBaseElement.js';
|
|
4
|
+
import { StyleMap } from '../types/AppTypes.js';
|
|
5
|
+
type ElementParts = 'host' | 'base' | 'icon' | 'label';
|
|
6
|
+
/** 링크 항목 디폴트 타입 */
|
|
7
|
+
export interface SidebarLinkConfig {
|
|
8
|
+
type?: 'link';
|
|
9
|
+
icon?: string;
|
|
10
|
+
label: string | DirectiveResult;
|
|
11
|
+
href: string;
|
|
12
|
+
pattern?: string | URLPattern;
|
|
13
|
+
styles?: StyleMap<ElementParts>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* SidebarLink 컴포넌트는 계층형 네비게이션 아이템을 표시합니다.
|
|
17
|
+
* 아이콘, 레이블, 하위 아이템을 지원합니다.
|
|
18
|
+
*/
|
|
19
|
+
export declare class SidebarLink extends ExtendedBaseElement<ElementParts> {
|
|
20
|
+
static styles: import('lit').CSSResultGroup[];
|
|
21
|
+
static dependencies: Record<string, typeof BaseElement>;
|
|
22
|
+
/** selected 상태 */
|
|
23
|
+
selected: boolean;
|
|
24
|
+
/** 콤팩트 모드 여부 */
|
|
25
|
+
compact: boolean;
|
|
26
|
+
/** 네비게이션 아이템 데이터 */
|
|
27
|
+
icon?: string;
|
|
28
|
+
/** 네비게이션 아이템 데이터 */
|
|
29
|
+
label?: string | DirectiveResult;
|
|
30
|
+
/** 네비게이션 링크 */
|
|
31
|
+
href?: string;
|
|
32
|
+
/** 네비게이션 패턴 매칭 */
|
|
33
|
+
pattern?: string | URLPattern;
|
|
34
|
+
connectedCallback(): void;
|
|
35
|
+
disconnectedCallback(): void;
|
|
36
|
+
render(): import('lit-html').TemplateResult<1>;
|
|
37
|
+
/** 라우트 변경 이벤트 핸들러 */
|
|
38
|
+
private handleRouteBegin;
|
|
39
|
+
/** 라우트 변경 이벤트 핸들러 */
|
|
40
|
+
private handleRouteDone;
|
|
41
|
+
}
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { html as l } from "lit";
|
|
2
|
+
import { property as t } from "lit/decorators.js";
|
|
3
|
+
import { Icon as c } from "@iyulab/components/dist/components/Icon/Icon.js";
|
|
4
|
+
import { ExtendedBaseElement as d } from "../internals/ExtendedBaseElement.js";
|
|
5
|
+
import { styles as h } from "./SidebarLink.styles.js";
|
|
6
|
+
var u = Object.defineProperty, n = (r, i, a, f) => {
|
|
7
|
+
for (var e = void 0, s = r.length - 1, p; s >= 0; s--)
|
|
8
|
+
(p = r[s]) && (e = p(i, a, e) || e);
|
|
9
|
+
return e && u(i, a, e), e;
|
|
10
|
+
};
|
|
11
|
+
class o extends d {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments), this.selected = !1, this.compact = !1, this.handleRouteBegin = (i) => {
|
|
14
|
+
this.selected = !1;
|
|
15
|
+
}, this.handleRouteDone = (i) => {
|
|
16
|
+
this.pattern ||= this.href, this.pattern ? (this.pattern = typeof this.pattern == "string" ? new URLPattern(this.pattern, window.location.origin) : this.pattern, this.selected = this.pattern.test(i.routeInfo.path, window.location.origin)) : this.selected = !1;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
static {
|
|
20
|
+
this.styles = [super.styles, h];
|
|
21
|
+
}
|
|
22
|
+
static {
|
|
23
|
+
this.dependencies = {
|
|
24
|
+
"u-icon": c
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
connectedCallback() {
|
|
28
|
+
super.connectedCallback(), window.addEventListener("route-begin", this.handleRouteBegin), window.addEventListener("route-done", this.handleRouteDone);
|
|
29
|
+
}
|
|
30
|
+
disconnectedCallback() {
|
|
31
|
+
window.removeEventListener("route-begin", this.handleRouteBegin), window.removeEventListener("route-done", this.handleRouteDone), super.disconnectedCallback();
|
|
32
|
+
}
|
|
33
|
+
render() {
|
|
34
|
+
return l`
|
|
35
|
+
<u-link part="base"
|
|
36
|
+
.href=${this.href || "#"}
|
|
37
|
+
?compact=${this.compact}>
|
|
38
|
+
<u-icon part="icon"
|
|
39
|
+
?hidden=${!this.icon}
|
|
40
|
+
?remote=${!0}
|
|
41
|
+
.name=${this.icon}
|
|
42
|
+
></u-icon>
|
|
43
|
+
<span part="label"
|
|
44
|
+
?hidden=${this.compact}>
|
|
45
|
+
${this.label}
|
|
46
|
+
</span>
|
|
47
|
+
</u-link>
|
|
48
|
+
`;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
n([
|
|
52
|
+
t({ type: Boolean, reflect: !0 })
|
|
53
|
+
], o.prototype, "selected");
|
|
54
|
+
n([
|
|
55
|
+
t({ type: Boolean })
|
|
56
|
+
], o.prototype, "compact");
|
|
57
|
+
n([
|
|
58
|
+
t({ type: String })
|
|
59
|
+
], o.prototype, "icon");
|
|
60
|
+
n([
|
|
61
|
+
t({ type: String })
|
|
62
|
+
], o.prototype, "label");
|
|
63
|
+
n([
|
|
64
|
+
t({ type: String })
|
|
65
|
+
], o.prototype, "href");
|
|
66
|
+
n([
|
|
67
|
+
t({ type: String })
|
|
68
|
+
], o.prototype, "pattern");
|
|
69
|
+
export {
|
|
70
|
+
o as SidebarLink
|
|
71
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const styles: import('lit').CSSResult;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { css as o } from "lit";
|
|
2
|
+
const r = o`
|
|
3
|
+
:host {
|
|
4
|
+
display: block;
|
|
5
|
+
border-radius: 8px;
|
|
6
|
+
color: var(--u-text-color);
|
|
7
|
+
text-decoration: none;
|
|
8
|
+
transition: all 0.2s ease;
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
}
|
|
11
|
+
:host(:hover) {
|
|
12
|
+
color: var(--u-text-color-hover);
|
|
13
|
+
background-color: var(--u-bg-color-hover);
|
|
14
|
+
}
|
|
15
|
+
:host([selected]) {
|
|
16
|
+
color: var(--u-text-color-inverse);
|
|
17
|
+
background-color: var(--u-blue-600);
|
|
18
|
+
box-shadow: 0 1px 3px var(--u-shadow-weak);
|
|
19
|
+
}
|
|
20
|
+
:host([selected]:hover) {
|
|
21
|
+
color: var(--u-text-color-inverse);
|
|
22
|
+
background-color: var(--u-blue-700);
|
|
23
|
+
box-shadow: 0 2px 6px var(--u-shadow-normal);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
u-link {
|
|
27
|
+
display: flex;
|
|
28
|
+
flex-direction: row;
|
|
29
|
+
justify-content: flex-start;
|
|
30
|
+
align-items: center;
|
|
31
|
+
gap: 12px;
|
|
32
|
+
padding: 8px 12px;
|
|
33
|
+
}
|
|
34
|
+
u-link[compact] {
|
|
35
|
+
justify-content: center;
|
|
36
|
+
padding: 8px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
u-icon {
|
|
40
|
+
color: inherit;
|
|
41
|
+
font-size: 20px;
|
|
42
|
+
flex-shrink: 0;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
span {
|
|
46
|
+
flex: 1;
|
|
47
|
+
color: inherit;
|
|
48
|
+
font-size: 14px;
|
|
49
|
+
font-weight: 500;
|
|
50
|
+
line-height: 20px;
|
|
51
|
+
overflow: hidden;
|
|
52
|
+
white-space: nowrap;
|
|
53
|
+
text-overflow: ellipsis;
|
|
54
|
+
}
|
|
55
|
+
`;
|
|
56
|
+
export {
|
|
57
|
+
r as styles
|
|
58
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { DirectiveResult } from 'lit/directive.js';
|
|
2
|
+
import { BaseElement } from '@iyulab/components/dist/components/BaseElement.js';
|
|
3
|
+
import { ExtendedBaseElement } from '../internals/ExtendedBaseElement.js';
|
|
4
|
+
import { StyleMap } from '../types/AppTypes.js';
|
|
5
|
+
type ElementParts = 'host' | 'container' | 'image' | 'icon' | 'label';
|
|
6
|
+
/** 로고 설정 */
|
|
7
|
+
export interface SidebarLogoConfig {
|
|
8
|
+
type: 'image' | 'icon';
|
|
9
|
+
image?: string;
|
|
10
|
+
icon?: string;
|
|
11
|
+
label?: string | DirectiveResult;
|
|
12
|
+
styles?: StyleMap<ElementParts>;
|
|
13
|
+
onClick?: (e: MouseEvent) => void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* SidebarLogo 컴포넌트는 사이드바에 표시되는 로고를 나타냅니다.
|
|
17
|
+
*/
|
|
18
|
+
export declare class SidebarLogo extends ExtendedBaseElement<ElementParts> {
|
|
19
|
+
static styles: import('lit').CSSResultGroup[];
|
|
20
|
+
static dependencies: Record<string, typeof BaseElement>;
|
|
21
|
+
/** 콤팩트 모드 여부 */
|
|
22
|
+
compact: boolean;
|
|
23
|
+
/** 로고 타입 */
|
|
24
|
+
type: 'image' | 'icon';
|
|
25
|
+
/** 로고 이미지 URL */
|
|
26
|
+
image?: string;
|
|
27
|
+
/** 로고 아이콘 svg 이름 */
|
|
28
|
+
icon?: string;
|
|
29
|
+
/** 로고 아이콘 텍스트 */
|
|
30
|
+
label?: string | DirectiveResult;
|
|
31
|
+
render(): import('lit-html').TemplateResult<1>;
|
|
32
|
+
}
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { nothing as m, html as n } from "lit";
|
|
2
|
+
import { property as e } from "lit/decorators.js";
|
|
3
|
+
import { Icon as l } from "@iyulab/components/dist/components/icon/Icon.js";
|
|
4
|
+
import { ExtendedBaseElement as y } from "../internals/ExtendedBaseElement.js";
|
|
5
|
+
import { styles as h } from "./SidebarLogo.styles.js";
|
|
6
|
+
var d = Object.defineProperty, i = (r, s, a, g) => {
|
|
7
|
+
for (var t = void 0, p = r.length - 1, c; p >= 0; p--)
|
|
8
|
+
(c = r[p]) && (t = c(s, a, t) || t);
|
|
9
|
+
return t && d(s, a, t), t;
|
|
10
|
+
};
|
|
11
|
+
class o extends y {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments), this.compact = !1, this.type = "icon";
|
|
14
|
+
}
|
|
15
|
+
static {
|
|
16
|
+
this.styles = [super.styles, h];
|
|
17
|
+
}
|
|
18
|
+
static {
|
|
19
|
+
this.dependencies = {
|
|
20
|
+
"u-icon": l
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
render() {
|
|
24
|
+
return n`
|
|
25
|
+
<div class="container" part="container">
|
|
26
|
+
${this.type === "image" && this.image ? n`
|
|
27
|
+
<img part="image"
|
|
28
|
+
src=${this.image}
|
|
29
|
+
alt="App Logo"
|
|
30
|
+
/>` : this.type === "icon" && this.icon ? n`
|
|
31
|
+
<u-icon part="icon"
|
|
32
|
+
.remote=${!0}
|
|
33
|
+
.name=${this.icon}
|
|
34
|
+
></u-icon>` : m}
|
|
35
|
+
<span part="label"
|
|
36
|
+
?hidden=${this.compact || !this.label}>
|
|
37
|
+
${this.label}
|
|
38
|
+
</span>
|
|
39
|
+
</div>
|
|
40
|
+
`;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
i([
|
|
44
|
+
e({ type: Boolean })
|
|
45
|
+
], o.prototype, "compact");
|
|
46
|
+
i([
|
|
47
|
+
e({ type: String })
|
|
48
|
+
], o.prototype, "type");
|
|
49
|
+
i([
|
|
50
|
+
e({ type: String })
|
|
51
|
+
], o.prototype, "image");
|
|
52
|
+
i([
|
|
53
|
+
e({ type: String })
|
|
54
|
+
], o.prototype, "icon");
|
|
55
|
+
i([
|
|
56
|
+
e({ type: String })
|
|
57
|
+
], o.prototype, "label");
|
|
58
|
+
export {
|
|
59
|
+
o as SidebarLogo
|
|
60
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const styles: import('lit').CSSResult;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { css as e } from "lit";
|
|
2
|
+
const t = e`
|
|
3
|
+
:host {
|
|
4
|
+
display: block;
|
|
5
|
+
min-width: 0;
|
|
6
|
+
font-size: 32px;
|
|
7
|
+
color: var(--u-text-color);
|
|
8
|
+
user-select: none;
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
transition: all 0.2s ease;
|
|
11
|
+
}
|
|
12
|
+
:host(:hover) {
|
|
13
|
+
color: var(--u-text-color-hover);
|
|
14
|
+
}
|
|
15
|
+
:host(:active) {
|
|
16
|
+
color: var(--u-text-color-active);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.container {
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-direction: row;
|
|
22
|
+
align-items: center;
|
|
23
|
+
justify-content: flex-start;
|
|
24
|
+
overflow: hidden;
|
|
25
|
+
gap: 8px;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
img {
|
|
29
|
+
width: 100%;
|
|
30
|
+
height: 1em;
|
|
31
|
+
object-fit: contain;
|
|
32
|
+
flex-shrink: 0;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
u-icon {
|
|
36
|
+
font-size: 1em;
|
|
37
|
+
color: inherit;
|
|
38
|
+
flex-shrink: 0;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
span {
|
|
42
|
+
font-size: 0.75em;
|
|
43
|
+
font-weight: 600;
|
|
44
|
+
line-height: inherit;
|
|
45
|
+
color: inherit;
|
|
46
|
+
overflow: hidden;
|
|
47
|
+
white-space: nowrap;
|
|
48
|
+
text-overflow: ellipsis;
|
|
49
|
+
}
|
|
50
|
+
`;
|
|
51
|
+
export {
|
|
52
|
+
t as styles
|
|
53
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { DirectiveResult } from 'lit/directive.js';
|
|
2
|
+
import { BaseElement } from '@iyulab/components/dist/components/BaseElement.js';
|
|
3
|
+
import { ExtendedBaseElement } from '../internals/ExtendedBaseElement.js';
|
|
4
|
+
import { SidebarLinkConfig } from './SidebarLink.js';
|
|
5
|
+
import { SidebarGroupConfig } from './SidebarGroup.js';
|
|
6
|
+
import { StyleMap } from '../types/AppTypes.js';
|
|
7
|
+
type ElementParts = 'host' | 'container' | 'header' | 'title' | 'subtitle' | 'items';
|
|
8
|
+
/** 섹션: 섹션 내에는 그룹 또는 링크들만 허용 */
|
|
9
|
+
export interface SidebarSectionConfig {
|
|
10
|
+
type: 'section';
|
|
11
|
+
title: string | DirectiveResult;
|
|
12
|
+
subTitle?: string | DirectiveResult;
|
|
13
|
+
items: (SidebarGroupConfig | SidebarLinkConfig)[];
|
|
14
|
+
styles?: StyleMap<ElementParts>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* SidebarSection 컴포넌트는 사이드바의 섹션 헤더를 표시합니다.
|
|
18
|
+
*/
|
|
19
|
+
export declare class SidebarSection extends ExtendedBaseElement<ElementParts> {
|
|
20
|
+
static styles: import('lit').CSSResultGroup[];
|
|
21
|
+
static dependencies: Record<string, typeof BaseElement>;
|
|
22
|
+
/** 콤팩트 모드 여부 */
|
|
23
|
+
compact: boolean;
|
|
24
|
+
/** 네비게이션 아이템 데이터 */
|
|
25
|
+
mainTitle?: string | DirectiveResult;
|
|
26
|
+
/** 네비게이션 아이템 데이터 */
|
|
27
|
+
subTitle?: string | DirectiveResult;
|
|
28
|
+
render(): import('lit-html').TemplateResult<1>;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { html as n } from "lit";
|
|
2
|
+
import { property as i } from "lit/decorators.js";
|
|
3
|
+
import { ExtendedBaseElement as d } from "../internals/ExtendedBaseElement.js";
|
|
4
|
+
import { styles as c } from "./SidebarSection.styles.js";
|
|
5
|
+
var m = Object.defineProperty, r = (e, a, o, h) => {
|
|
6
|
+
for (var t = void 0, s = e.length - 1, l; s >= 0; s--)
|
|
7
|
+
(l = e[s]) && (t = l(a, o, t) || t);
|
|
8
|
+
return t && m(a, o, t), t;
|
|
9
|
+
};
|
|
10
|
+
class p extends d {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments), this.compact = !1;
|
|
13
|
+
}
|
|
14
|
+
static {
|
|
15
|
+
this.styles = [super.styles, c];
|
|
16
|
+
}
|
|
17
|
+
static {
|
|
18
|
+
this.dependencies = {};
|
|
19
|
+
}
|
|
20
|
+
render() {
|
|
21
|
+
return n`
|
|
22
|
+
<div class="container" part="container">
|
|
23
|
+
<div class="header" part="header"
|
|
24
|
+
?hidden=${this.compact}>
|
|
25
|
+
<h3 class="title" part="title">
|
|
26
|
+
${this.mainTitle}
|
|
27
|
+
</h3>
|
|
28
|
+
<p class="subtitle" part="subtitle"
|
|
29
|
+
?hidden=${!this.subTitle}>
|
|
30
|
+
${this.subTitle}
|
|
31
|
+
</p>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<div class="items" part="items">
|
|
35
|
+
<slot></slot>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
`;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
r([
|
|
42
|
+
i({ type: Boolean })
|
|
43
|
+
], p.prototype, "compact");
|
|
44
|
+
r([
|
|
45
|
+
i({ type: String })
|
|
46
|
+
], p.prototype, "mainTitle");
|
|
47
|
+
r([
|
|
48
|
+
i({ type: String })
|
|
49
|
+
], p.prototype, "subTitle");
|
|
50
|
+
export {
|
|
51
|
+
p as SidebarSection
|
|
52
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const styles: import('lit').CSSResult;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { css as e } from "lit";
|
|
2
|
+
const o = e`
|
|
3
|
+
:host {
|
|
4
|
+
display: block;
|
|
5
|
+
margin: 8px 0;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.container {
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: column;
|
|
11
|
+
gap: 8px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.header {
|
|
15
|
+
display: flex;
|
|
16
|
+
flex-direction: column;
|
|
17
|
+
gap: 2px;
|
|
18
|
+
padding: 8px 12px 4px;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.title {
|
|
22
|
+
font-size: 12px;
|
|
23
|
+
font-weight: 700;
|
|
24
|
+
color: var(--u-soft-text-color);
|
|
25
|
+
text-transform: uppercase;
|
|
26
|
+
letter-spacing: 0.5px;
|
|
27
|
+
margin: 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.subtitle {
|
|
31
|
+
font-size: 11px;
|
|
32
|
+
color: var(--u-text-color-disabled);
|
|
33
|
+
margin: 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.items {
|
|
37
|
+
display: flex;
|
|
38
|
+
flex-direction: column;
|
|
39
|
+
gap: 2px;
|
|
40
|
+
}
|
|
41
|
+
`;
|
|
42
|
+
export {
|
|
43
|
+
o as styles
|
|
44
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseElement } from '@iyulab/components/dist/components/BaseElement.js';
|
|
2
|
+
/** Raw HTML content */
|
|
3
|
+
export interface UnsafeContentConfig {
|
|
4
|
+
type: 'content';
|
|
5
|
+
content: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* 일반 HTML 콘텐츠를 표시하는 사이드바 컴포넌트
|
|
9
|
+
*/
|
|
10
|
+
export declare class UnsafeContent extends BaseElement {
|
|
11
|
+
static styles: import('lit').CSSResultGroup[];
|
|
12
|
+
static dependencies: Record<string, typeof BaseElement>;
|
|
13
|
+
/** HTML 콘텐츠 */
|
|
14
|
+
content?: string;
|
|
15
|
+
render(): import('lit-html/directive.js').DirectiveResult<typeof import('lit-html/directives/unsafe-html.js').UnsafeHTMLDirective>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { property as i } from "lit/decorators.js";
|
|
2
|
+
import { unsafeHTML as p } from "lit/directives/unsafe-html.js";
|
|
3
|
+
import { BaseElement as f } from "@iyulab/components/dist/components/BaseElement.js";
|
|
4
|
+
import { styles as a } from "./UnsafeContent.styles.js";
|
|
5
|
+
var m = Object.defineProperty, l = (t, s, n, c) => {
|
|
6
|
+
for (var e = void 0, r = t.length - 1, o; r >= 0; r--)
|
|
7
|
+
(o = t[r]) && (e = o(s, n, e) || e);
|
|
8
|
+
return e && m(s, n, e), e;
|
|
9
|
+
};
|
|
10
|
+
class d extends f {
|
|
11
|
+
static {
|
|
12
|
+
this.styles = [super.styles, a];
|
|
13
|
+
}
|
|
14
|
+
static {
|
|
15
|
+
this.dependencies = {};
|
|
16
|
+
}
|
|
17
|
+
render() {
|
|
18
|
+
return p(this.content);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
l([
|
|
22
|
+
i({ type: String })
|
|
23
|
+
], d.prototype, "content");
|
|
24
|
+
export {
|
|
25
|
+
d as UnsafeContent
|
|
26
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const styles: import('lit').CSSResult;
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { PropertyValues } from 'lit';
|
|
2
|
+
import { BaseElement } from '@iyulab/components/dist/components/BaseElement.js';
|
|
3
|
+
import { StyleMap } from '../types/AppTypes';
|
|
4
|
+
/**
|
|
5
|
+
* ExtendedBaseElement - BaseElement를 확장한 클래스
|
|
6
|
+
* - 부분별 스타일링 지원
|
|
7
|
+
*/
|
|
8
|
+
export declare class ExtendedBaseElement<T extends string> extends BaseElement {
|
|
9
|
+
static styles: import('lit').CSSResultGroup;
|
|
10
|
+
static dependencies: Record<string, typeof BaseElement>;
|
|
11
|
+
/** 부분별 스타일 구성 */
|
|
12
|
+
styles?: StyleMap<T>;
|
|
13
|
+
protected updated(changedProperties: PropertyValues): void;
|
|
14
|
+
/**
|
|
15
|
+
* 현재 스타일 구성을 각 파트에 적용, host 포함
|
|
16
|
+
*/
|
|
17
|
+
private applyToParts;
|
|
18
|
+
/**
|
|
19
|
+
* 스타일 객체를 개별 프로퍼티 단위로 적용 (camelCase / kebab-case / custom props 처리)
|
|
20
|
+
*/
|
|
21
|
+
private assignToObject;
|
|
22
|
+
}
|