@iyulab/modern-app 0.56.1 → 0.57.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 +38 -0
- package/dist/App.js +1 -2
- package/dist/_virtual/{_@oxc-project_runtime@0.154.0 → _@oxc-project_runtime@0.155.0}/helpers/esm/decorate.js +1 -2
- package/dist/_virtual/{_@oxc-project_runtime@0.154.0 → _@oxc-project_runtime@0.155.0}/helpers/esm/decorateMetadata.js +1 -2
- package/dist/components/ActionBar.js +3 -4
- package/dist/components/ActionBar.styles.js +1 -2
- package/dist/components/EmptyState.js +3 -4
- package/dist/components/EmptyState.styles.js +1 -2
- package/dist/components/GroupBox.js +3 -4
- package/dist/components/GroupBox.styles.js +1 -2
- package/dist/components/InfoField.d.ts +5 -0
- package/dist/components/InfoField.js +25 -19
- package/dist/components/InfoField.styles.js +20 -2
- package/dist/components/InfoSection.js +3 -4
- package/dist/components/InfoSection.styles.js +1 -2
- package/dist/components/MasterDetailLayout.js +3 -4
- package/dist/components/MasterDetailLayout.styles.js +1 -2
- package/dist/components/PageHeader.js +3 -4
- package/dist/components/PageHeader.styles.js +1 -2
- package/dist/components/SidebarButton.js +3 -4
- package/dist/components/SidebarButton.styles.js +1 -2
- package/dist/components/SidebarGroup.d.ts +9 -0
- package/dist/components/SidebarGroup.js +17 -14
- package/dist/components/SidebarGroup.styles.js +1 -2
- package/dist/components/SidebarLink.d.ts +6 -0
- package/dist/components/SidebarLink.js +16 -14
- package/dist/components/SidebarLink.styles.js +1 -2
- package/dist/components/SidebarSection.js +3 -4
- package/dist/components/SidebarSection.styles.js +1 -2
- package/dist/components/Timeline.js +2 -3
- package/dist/components/Timeline.styles.js +1 -2
- package/dist/components/TimelineItem.js +3 -4
- package/dist/components/TimelineItem.styles.js +1 -2
- package/dist/components/Wizard.js +3 -4
- package/dist/components/Wizard.styles.js +1 -2
- package/dist/defaultFallback.js +1 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -2
- package/dist/internals/ScreenObserver.js +1 -2
- package/dist/internals/StyledElement.js +3 -4
- package/dist/internals/locale.js +1 -2
- package/dist/internals/nav-icon.js +1 -2
- package/dist/internals/slotted.js +1 -2
- package/dist/layouts/SidebarLayout.d.ts +10 -0
- package/dist/layouts/SidebarLayout.js +27 -9
- package/dist/layouts/SidebarLayout.styles.js +31 -7
- package/dist/layouts/SidebarLayout.types.d.ts +16 -2
- package/dist/layouts/filterSidebarItems.js +1 -2
- package/dist/react.js +1 -2
- package/dist/translate.js +0 -1
- package/dist/unsaved.js +19 -9
- package/package.json +1 -1
- package/skills/modern-app/references/components/info-field.md +22 -0
- package/skills/modern-app/references/layout.md +5 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.57.0] - 2026-10-23
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- **Sidebar `subtitle`** — one line under the app title (what the app is), in the expanded sidebar header. It hides with
|
|
8
|
+
the title when the sidebar is slim; the mobile header keeps one line.
|
|
9
|
+
- **`u-info-field` `visual` slot** — a small picture at the end of the value line (a trend sparkline, a progress ring),
|
|
10
|
+
for KPI tiles. The field gives it a place and draws nothing itself; an empty slot takes no room.
|
|
11
|
+
- **Logo from a registered icon library** — `logo: { icon, lib }`, the same pair the menu items take. A string logo
|
|
12
|
+
could only be found at `u-icon`'s default path. `SidebarLogoIcon` is exported.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- **The sidebar group holding the current screen opens.** A group whose link matches the current address expands when
|
|
17
|
+
it becomes current and folds again when the current screen moves elsewhere — a group the user opened or folded by
|
|
18
|
+
hand stays as they left it. The group header now states its state with `aria-expanded`.
|
|
19
|
+
- Links inside a sidebar group draw no icon unless one is given. The default icon keeps a link visible when the sidebar
|
|
20
|
+
is slim, and inside a group the group's own icon does that.
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- The sidebar header is no taller than its content: the collapse button's icon is 20px, but the size was set on the
|
|
25
|
+
button, so its em-based height and padding grew with it (the header was 85px tall). The header's vertical padding is
|
|
26
|
+
also 12px instead of 16px, and the mobile header matches it.
|
|
27
|
+
- The open mobile panel starts below the mobile header. It used to start at the top of the screen and rely on its own
|
|
28
|
+
header, hidden under the mobile header, being the same height — when the two differed, the first menu item slid
|
|
29
|
+
under the mobile header, and the hidden header's toggle still took keyboard focus. The panel no longer draws that
|
|
30
|
+
duplicate header, and a popover opened inside the panel no longer flips up under the mobile header.
|
|
31
|
+
|
|
32
|
+
## [0.56.2] - 2026-10-17
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- The unsaved-changes guard still asks when its dialog cannot load — a deployment replaced the hashed chunk while a tab
|
|
37
|
+
with an edited form stayed open, or the network is gone. The import failure reached the router as «the guard threw»,
|
|
38
|
+
so the screen stayed and every navigation was silently blocked; it now asks the same question with `window.confirm`
|
|
39
|
+
(and warns). The dialog module also loads when the first screen registers a check, not at the moment of asking.
|
|
40
|
+
|
|
3
41
|
## [0.56.1] - 2026-10-17
|
|
4
42
|
|
|
5
43
|
### Fixed
|
package/dist/App.js
CHANGED
|
@@ -7,7 +7,7 @@ import { setDefaultBaseUrl as a } from "@iyulab/components/dist/utilities/icons.
|
|
|
7
7
|
import { Theme as o } from "@iyulab/components/dist/utilities/Theme.js";
|
|
8
8
|
import { Toast as s } from "@iyulab/components/dist/utilities/Toast.js";
|
|
9
9
|
import { Locale as c } from "@iyulab/components/dist/utilities/Locale.js";
|
|
10
|
-
|
|
10
|
+
// src/App.ts
|
|
11
11
|
var l = "\n:where(body) { margin: 0; }\n@media screen {\n :where(body) { width: 100vw; height: 100vh; }\n}\n", u;
|
|
12
12
|
function d() {
|
|
13
13
|
if (!u) {
|
|
@@ -148,5 +148,4 @@ var f = class l {
|
|
|
148
148
|
return e.appendChild(n), "updateComplete" in n && await n.updateComplete, n;
|
|
149
149
|
}
|
|
150
150
|
}.instance;
|
|
151
|
-
//#endregion
|
|
152
151
|
export { f as app };
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
// \0@oxc-project+runtime@0.155.0/helpers/esm/decorate.js
|
|
2
2
|
function e(e, t, n, r) {
|
|
3
3
|
var i = arguments.length, a = i < 3 ? t : r === null ? r = Object.getOwnPropertyDescriptor(t, n) : r, o;
|
|
4
4
|
if (typeof Reflect == "object" && typeof Reflect.decorate == "function") a = Reflect.decorate(e, t, n, r);
|
|
5
5
|
else for (var s = e.length - 1; s >= 0; s--) (o = e[s]) && (a = (i < 3 ? o(a) : i > 3 ? o(t, n, a) : o(t, n)) || a);
|
|
6
6
|
return i > 3 && a && Object.defineProperty(t, n, a), a;
|
|
7
7
|
}
|
|
8
|
-
//#endregion
|
|
9
8
|
export { e as default };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
// \0@oxc-project+runtime@0.155.0/helpers/esm/decorateMetadata.js
|
|
2
2
|
function e(e, t) {
|
|
3
3
|
if (typeof Reflect == "object" && typeof Reflect.metadata == "function") return Reflect.metadata(e, t);
|
|
4
4
|
}
|
|
5
|
-
//#endregion
|
|
6
5
|
export { e as default };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { slotHasContent as r } from "../internals/slotted.js";
|
|
5
5
|
import { styles as i } from "./ActionBar.styles.js";
|
|
6
6
|
import { html as a } from "lit";
|
|
7
7
|
import { customElement as o, property as s, state as c } from "lit/decorators.js";
|
|
8
|
-
|
|
8
|
+
// src/components/ActionBar.ts
|
|
9
9
|
var l = class extends n {
|
|
10
10
|
constructor(...e) {
|
|
11
11
|
super(...e), this.sticky = !1, this.hasDanger = !1, this.hasSummary = !1;
|
|
@@ -33,5 +33,4 @@ t([s({
|
|
|
33
33
|
type: Boolean,
|
|
34
34
|
reflect: !0
|
|
35
35
|
}), e("design:type", Object)], l.prototype, "sticky", void 0), t([c(), e("design:type", Object)], l.prototype, "hasDanger", void 0), t([c(), e("design:type", Object)], l.prototype, "hasSummary", void 0), l = t([o("u-action-bar")], l);
|
|
36
|
-
//#endregion
|
|
37
36
|
export { l as ActionBar };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { css as e } from "lit";
|
|
2
|
-
|
|
2
|
+
// src/components/ActionBar.styles.ts
|
|
3
3
|
var t = e`
|
|
4
4
|
:host {
|
|
5
5
|
display: flex;
|
|
@@ -71,5 +71,4 @@ var t = e`
|
|
|
71
71
|
padding: var(--u-space-md, 12px) var(--action-bar-padding-inline, 0);
|
|
72
72
|
}
|
|
73
73
|
`;
|
|
74
|
-
//#endregion
|
|
75
74
|
export { t as styles };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { slotHasContent as r } from "../internals/slotted.js";
|
|
5
5
|
import { getLocaleStrings as i } from "../internals/locale.js";
|
|
6
6
|
import { styles as a } from "./EmptyState.styles.js";
|
|
7
7
|
import { html as o, nothing as s } from "lit";
|
|
8
8
|
import { customElement as c, property as l, state as u } from "lit/decorators.js";
|
|
9
|
-
|
|
9
|
+
// src/components/EmptyState.ts
|
|
10
10
|
var d = class extends n {
|
|
11
11
|
constructor(...e) {
|
|
12
12
|
super(...e), this.variant = "no-data", this.title = "", this.description = "", this.locale = "", this.hasActions = !1;
|
|
@@ -68,5 +68,4 @@ t([l({
|
|
|
68
68
|
type: String,
|
|
69
69
|
reflect: !0
|
|
70
70
|
}), e("design:type", Object)], d.prototype, "variant", void 0), t([l({ type: String }), e("design:type", Object)], d.prototype, "title", void 0), t([l({ type: String }), e("design:type", Object)], d.prototype, "description", void 0), t([l({ type: String }), e("design:type", Object)], d.prototype, "locale", void 0), t([u(), e("design:type", Object)], d.prototype, "hasActions", void 0), d = t([c("u-empty-state")], d);
|
|
71
|
-
//#endregion
|
|
72
71
|
export { d as EmptyState };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { css as e } from "lit";
|
|
2
|
-
|
|
2
|
+
// src/components/EmptyState.styles.ts
|
|
3
3
|
var t = e`
|
|
4
4
|
:host {
|
|
5
5
|
display: flex;
|
|
@@ -54,5 +54,4 @@ var t = e`
|
|
|
54
54
|
display: none;
|
|
55
55
|
}
|
|
56
56
|
`;
|
|
57
|
-
//#endregion
|
|
58
57
|
export { t as styles };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { slotHasContent as r } from "../internals/slotted.js";
|
|
5
5
|
import { styles as i } from "./GroupBox.styles.js";
|
|
6
6
|
import { html as a, nothing as o } from "lit";
|
|
7
7
|
import { customElement as s, property as c, state as l } from "lit/decorators.js";
|
|
8
8
|
import { html as u, literal as d } from "lit/static-html.js";
|
|
9
|
-
|
|
9
|
+
// src/components/GroupBox.ts
|
|
10
10
|
var f, p = {
|
|
11
11
|
2: d`h2`,
|
|
12
12
|
3: d`h3`,
|
|
@@ -52,5 +52,4 @@ t([c({ type: String }), e("design:type", Object)], m.prototype, "title", void 0)
|
|
|
52
52
|
type: Number,
|
|
53
53
|
reflect: !0
|
|
54
54
|
}), e("design:type", Object)], m.prototype, "level", void 0), t([l(), e("design:type", Object)], m.prototype, "hasActions", void 0), m = f = t([s("u-group-box")], m);
|
|
55
|
-
//#endregion
|
|
56
55
|
export { m as GroupBox };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { css as e } from "lit";
|
|
2
|
-
|
|
2
|
+
// src/components/GroupBox.styles.ts
|
|
3
3
|
var t = e`
|
|
4
4
|
:host {
|
|
5
5
|
display: block;
|
|
@@ -123,5 +123,4 @@ var t = e`
|
|
|
123
123
|
padding-top: var(--u-space-md, 12px);
|
|
124
124
|
}
|
|
125
125
|
`;
|
|
126
|
-
//#endregion
|
|
127
126
|
export { t as styles };
|
|
@@ -29,10 +29,13 @@ export declare function isBlank(v: unknown): boolean;
|
|
|
29
29
|
*
|
|
30
30
|
* @slot - 값(문자열 `value` 대신 — 슬롯이 이긴다)
|
|
31
31
|
* @slot trend-icon - 추세 줄 앞의 상태 표시(예: 주의 아이콘). 추세 줄이 있을 때(`trend` · `trendLabel`) 그린다.
|
|
32
|
+
* @slot visual - 값과 같은 줄 끝의 작은 그림(추세 미니 차트 · 진행 고리 등). 값을 대신하지 않는다 — 장식이면 `aria-hidden="true"`,
|
|
33
|
+
* 그 자체로 정보면 자기 이름(`role="img"` + `aria-label`)을 준다. 비면 자리를 차지하지 않는다.
|
|
32
34
|
* @csspart label - 라벨
|
|
33
35
|
* @csspart value - 값
|
|
34
36
|
* @csspart unit - 단위
|
|
35
37
|
* @csspart trend - 추세 줄
|
|
38
|
+
* @csspart visual - `visual` 슬롯을 담는 상자
|
|
36
39
|
* @csspart description - 값 아래 보조 줄(값이 비고 `blankReason` 이 있으면 그 사유)
|
|
37
40
|
* @cssprop --info-field-xl-size - `size="xl"` 값의 글자 크기(기본 `--u-text-display-size`)
|
|
38
41
|
*/
|
|
@@ -137,6 +140,8 @@ export declare class InfoField extends StyledElement<ElementParts> {
|
|
|
137
140
|
*/
|
|
138
141
|
private nameSlottedWidgets;
|
|
139
142
|
protected updated(changed: PropertyValues): void;
|
|
143
|
+
/** `visual` 슬롯에 든 것이 있는가 — 비면 그 상자를 그리지 않는다(값 옆에 빈 간격을 남기지 않게). */
|
|
144
|
+
private hasVisual;
|
|
140
145
|
private get hasSlotted();
|
|
141
146
|
private formatValue;
|
|
142
147
|
render(): import('lit-html').TemplateResult<1>;
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { styles as r } from "./InfoField.styles.js";
|
|
5
5
|
import { html as i } from "lit";
|
|
6
|
-
import { customElement as a, property as o } from "lit/decorators.js";
|
|
7
|
-
import { formatCurrency as
|
|
8
|
-
|
|
9
|
-
function
|
|
6
|
+
import { customElement as a, property as o, state as s } from "lit/decorators.js";
|
|
7
|
+
import { formatCurrency as c, formatDate as l, formatNumber as u } from "@iyulab/components/dist/utilities/format.js";
|
|
8
|
+
// src/components/InfoField.ts
|
|
9
|
+
function d(e) {
|
|
10
10
|
return e === "up" ? "positive" : e === "down" ? "negative" : "neutral";
|
|
11
11
|
}
|
|
12
|
-
function
|
|
12
|
+
function f(e) {
|
|
13
13
|
return e == null || typeof e == "string" && e.trim() === "";
|
|
14
14
|
}
|
|
15
|
-
var
|
|
15
|
+
var p = class extends n {
|
|
16
16
|
constructor(...e) {
|
|
17
|
-
super(...e), this.label = "", this.blank = "—", this.numeric = !1, this.size = "default", this.appearance = "plain", this.namedWidgets = /* @__PURE__ */ new WeakMap();
|
|
17
|
+
super(...e), this.label = "", this.blank = "—", this.numeric = !1, this.size = "default", this.appearance = "plain", this.namedWidgets = /* @__PURE__ */ new WeakMap(), this.hasVisual = !1;
|
|
18
18
|
}
|
|
19
19
|
static {
|
|
20
20
|
this.styles = [super.styles, r];
|
|
@@ -36,13 +36,20 @@ var f = class extends n {
|
|
|
36
36
|
return [...this.childNodes].some((e) => e.nodeType === Node.ELEMENT_NODE ? !e.hasAttribute("slot") : e.nodeType === Node.TEXT_NODE && (e.textContent ?? "").trim() !== "");
|
|
37
37
|
}
|
|
38
38
|
formatValue() {
|
|
39
|
-
return this.format === "currency" ? this.currency ?
|
|
39
|
+
return this.format === "currency" ? this.currency ? c(Number(this.value), this.currency) : u(Number(this.value)) : this.format === "number" ? u(Number(this.value)) : this.format === "date" ? l(this.value) : String(this.value);
|
|
40
40
|
}
|
|
41
41
|
render() {
|
|
42
|
-
let e = !this.hasSlotted &&
|
|
42
|
+
let e = !this.hasSlotted && f(this.value), t = e && this.blankReason ? this.blankReason : void 0, n = this.numeric || this.format === "number" || this.format === "currency", r = this.trend !== void 0 || this.trendLabel !== void 0, a = this.tone ?? d(this.trend), o = this.trend === "up" ? "▲" : this.trend === "down" ? "▼" : "", s = !e && this.unit ? i`<span class="unit" part="unit">${this.unit}</span>` : "";
|
|
43
43
|
return i`
|
|
44
44
|
<div class="label" part="label">${this.label}</div>
|
|
45
|
-
<div class="value
|
|
45
|
+
<div class="value-row">
|
|
46
|
+
<div class="value ${n ? "numeric" : ""} ${e ? "blank" : ""} ${t ? "reasoned" : ""} tone-${a}" part="value">${this.hasSlotted ? i`<slot @slotchange=${() => void this.nameSlottedWidgets()}></slot>` : e ? this.blank : this.formatValue()}${s}</div>
|
|
47
|
+
<div class="visual" part="visual" ?hidden=${!this.hasVisual}>
|
|
48
|
+
<slot name="visual" @slotchange=${(e) => {
|
|
49
|
+
this.hasVisual = e.target.assignedElements().length > 0;
|
|
50
|
+
}}></slot>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
46
53
|
${r ? i`
|
|
47
54
|
<div class="trend tone-${a}" part="trend">
|
|
48
55
|
<slot name="trend-icon"></slot>${o ? i`<span aria-hidden="true">${o}</span> ` : ""}${this.trendLabel ?? ""}
|
|
@@ -52,18 +59,17 @@ var f = class extends n {
|
|
|
52
59
|
`;
|
|
53
60
|
}
|
|
54
61
|
};
|
|
55
|
-
t([o({ type: String }), e("design:type", Object)],
|
|
62
|
+
t([o({ type: String }), e("design:type", Object)], p.prototype, "label", void 0), t([o({ type: String }), e("design:type", Object)], p.prototype, "value", void 0), t([o({ type: String }), e("design:type", Object)], p.prototype, "blank", void 0), t([o({ type: Boolean }), e("design:type", Object)], p.prototype, "numeric", void 0), t([o({ type: String }), e("design:type", Object)], p.prototype, "format", void 0), t([o({ type: String }), e("design:type", String)], p.prototype, "currency", void 0), t([o({ type: String }), e("design:type", String)], p.prototype, "unit", void 0), t([o({
|
|
56
63
|
type: String,
|
|
57
64
|
reflect: !0
|
|
58
|
-
}), e("design:type", Object)],
|
|
65
|
+
}), e("design:type", Object)], p.prototype, "size", void 0), t([o({ type: String }), e("design:type", Object)], p.prototype, "trend", void 0), t([o({ type: String }), e("design:type", String)], p.prototype, "trendLabel", void 0), t([o({
|
|
59
66
|
type: String,
|
|
60
67
|
reflect: !0
|
|
61
|
-
}), e("design:type", Object)],
|
|
68
|
+
}), e("design:type", Object)], p.prototype, "tone", void 0), t([o({
|
|
62
69
|
type: String,
|
|
63
70
|
reflect: !0
|
|
64
|
-
}), e("design:type", Object)],
|
|
71
|
+
}), e("design:type", Object)], p.prototype, "appearance", void 0), t([o({
|
|
65
72
|
type: String,
|
|
66
73
|
attribute: "blank-reason"
|
|
67
|
-
}), e("design:type", String)],
|
|
68
|
-
|
|
69
|
-
export { f as InfoField, d as isBlank };
|
|
74
|
+
}), e("design:type", String)], p.prototype, "blankReason", void 0), t([o({ type: String }), e("design:type", String)], p.prototype, "description", void 0), t([s(), e("design:type", Object)], p.prototype, "hasVisual", void 0), p = t([a("u-info-field")], p);
|
|
75
|
+
export { p as InfoField, f as isBlank };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { css as e } from "lit";
|
|
2
|
-
|
|
2
|
+
// src/components/InfoField.styles.ts
|
|
3
3
|
var t = e`
|
|
4
4
|
:host {
|
|
5
5
|
display: block;
|
|
@@ -14,7 +14,26 @@ var t = e`
|
|
|
14
14
|
margin-bottom: var(--u-space-3xs, 2px);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
|
|
18
|
+
.value-row {
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: flex-end;
|
|
21
|
+
justify-content: space-between;
|
|
22
|
+
gap: var(--u-space-sm, 8px);
|
|
23
|
+
min-width: 0;
|
|
24
|
+
}
|
|
25
|
+
.visual {
|
|
26
|
+
flex: none;
|
|
27
|
+
display: flex;
|
|
28
|
+
align-items: flex-end;
|
|
29
|
+
}
|
|
30
|
+
.visual[hidden] {
|
|
31
|
+
display: none;
|
|
32
|
+
}
|
|
33
|
+
|
|
17
34
|
.value {
|
|
35
|
+
flex: 1 1 auto;
|
|
36
|
+
min-width: 0;
|
|
18
37
|
font-size: var(--u-text-body-size, 14px);
|
|
19
38
|
font-weight: var(--u-text-label-weight, 600);
|
|
20
39
|
line-height: var(--u-text-body-leading, 1.6);
|
|
@@ -156,5 +175,4 @@ var t = e`
|
|
|
156
175
|
color: var(--u-txt-color-weak, #616161);
|
|
157
176
|
}
|
|
158
177
|
`;
|
|
159
|
-
//#endregion
|
|
160
178
|
export { t as styles };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { styles as r } from "./InfoSection.styles.js";
|
|
5
5
|
import { html as i } from "lit";
|
|
6
6
|
import { customElement as a, property as o } from "lit/decorators.js";
|
|
7
|
-
|
|
7
|
+
// src/components/InfoSection.ts
|
|
8
8
|
var s = class extends n {
|
|
9
9
|
constructor(...e) {
|
|
10
10
|
super(...e), this.min = 160, this.layout = "grid";
|
|
@@ -22,5 +22,4 @@ t([o({ type: Number }), e("design:type", Object)], s.prototype, "min", void 0),
|
|
|
22
22
|
type: String,
|
|
23
23
|
reflect: !0
|
|
24
24
|
}), e("design:type", Object)], s.prototype, "layout", void 0), s = t([a("u-info-section")], s);
|
|
25
|
-
//#endregion
|
|
26
25
|
export { s as InfoSection };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { css as e } from "lit";
|
|
2
|
-
|
|
2
|
+
// src/components/InfoSection.styles.ts
|
|
3
3
|
var t = e`
|
|
4
4
|
:host {
|
|
5
5
|
display: block;
|
|
@@ -32,5 +32,4 @@ var t = e`
|
|
|
32
32
|
background: var(--u-bg-color, #FFFFFF);
|
|
33
33
|
}
|
|
34
34
|
`;
|
|
35
|
-
//#endregion
|
|
36
35
|
export { t as styles };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { slotHasContent as r } from "../internals/slotted.js";
|
|
5
5
|
import { getLocaleStrings as i } from "../internals/locale.js";
|
|
@@ -8,7 +8,7 @@ import { html as o } from "lit";
|
|
|
8
8
|
import { customElement as s, property as c, state as l } from "lit/decorators.js";
|
|
9
9
|
import "@iyulab/components/dist/components/icon/UIcon.js";
|
|
10
10
|
import "@iyulab/components/dist/components/button/UButton.js";
|
|
11
|
-
|
|
11
|
+
// src/components/MasterDetailLayout.ts
|
|
12
12
|
var u = class extends n {
|
|
13
13
|
constructor(...e) {
|
|
14
14
|
super(...e), this.masterSize = "22rem", this.overlayBreakpoint = 760, this.locale = "", this.hasDetail = !1, this.hasPlaceholder = !1, this.internals = typeof this.attachInternals == "function" ? this.attachInternals() : void 0, this.scroller = null, this.detailFrame = 0, this.scheduleDetailMax = () => {
|
|
@@ -81,5 +81,4 @@ function d(e) {
|
|
|
81
81
|
if (/(auto|scroll|hidden|overlay)/.test(getComputedStyle(t).overflowY)) return t;
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
|
-
//#endregion
|
|
85
84
|
export { u as MasterDetailLayout };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { css as e } from "lit";
|
|
2
|
-
|
|
2
|
+
// src/components/MasterDetailLayout.styles.ts
|
|
3
3
|
var t = e`
|
|
4
4
|
:host {
|
|
5
5
|
display: flex;
|
|
@@ -165,5 +165,4 @@ var t = e`
|
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
167
|
`;
|
|
168
|
-
//#endregion
|
|
169
168
|
export { t as styles };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { slotHasContent as r } from "../internals/slotted.js";
|
|
5
5
|
import { getLocaleStrings as i } from "../internals/locale.js";
|
|
6
6
|
import { styles as a } from "./PageHeader.styles.js";
|
|
7
7
|
import { html as o, nothing as s } from "lit";
|
|
8
8
|
import { customElement as c, property as l, state as u } from "lit/decorators.js";
|
|
9
|
-
|
|
9
|
+
// src/components/PageHeader.ts
|
|
10
10
|
var d = class extends n {
|
|
11
11
|
constructor(...e) {
|
|
12
12
|
super(...e), this.title = "", this.backLabel = "", this.locale = "", this.hasEyebrow = !1, this.hasStatus = !1, this.hasActions = !1;
|
|
@@ -45,5 +45,4 @@ t([l({ type: String }), e("design:type", Object)], d.prototype, "title", void 0)
|
|
|
45
45
|
type: String,
|
|
46
46
|
attribute: "back-label"
|
|
47
47
|
}), e("design:type", Object)], d.prototype, "backLabel", void 0), t([l({ type: String }), e("design:type", Object)], d.prototype, "locale", void 0), t([u(), e("design:type", Object)], d.prototype, "hasEyebrow", void 0), t([u(), e("design:type", Object)], d.prototype, "hasStatus", void 0), t([u(), e("design:type", Object)], d.prototype, "hasActions", void 0), d = t([c("u-page-header")], d);
|
|
48
|
-
//#endregion
|
|
49
48
|
export { d as PageHeader };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { css as e } from "lit";
|
|
2
|
-
|
|
2
|
+
// src/components/PageHeader.styles.ts
|
|
3
3
|
var t = e`
|
|
4
4
|
:host {
|
|
5
5
|
display: flex;
|
|
@@ -111,5 +111,4 @@ var t = e`
|
|
|
111
111
|
display: none;
|
|
112
112
|
}
|
|
113
113
|
`;
|
|
114
|
-
//#endregion
|
|
115
114
|
export { t as styles };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { DEFAULT_NAV_ICON as r } from "../internals/nav-icon.js";
|
|
5
5
|
import { styles as i } from "./SidebarButton.styles.js";
|
|
@@ -8,7 +8,7 @@ import { customElement as o, property as s } from "lit/decorators.js";
|
|
|
8
8
|
import "@iyulab/components/dist/components/icon/UIcon.js";
|
|
9
9
|
import { ifDefined as c } from "lit/directives/if-defined.js";
|
|
10
10
|
import "@iyulab/components/dist/components/avatar/UAvatar.js";
|
|
11
|
-
|
|
11
|
+
// src/components/SidebarButton.ts
|
|
12
12
|
var l = class extends n {
|
|
13
13
|
constructor(...e) {
|
|
14
14
|
super(...e), this.compact = !1, this.expanded = !1;
|
|
@@ -44,5 +44,4 @@ t([s({
|
|
|
44
44
|
type: Boolean,
|
|
45
45
|
reflect: !0
|
|
46
46
|
}), e("design:type", Boolean)], l.prototype, "pressed", void 0), t([s({ type: String }), e("design:type", Object)], l.prototype, "label", void 0), t([s({ type: String }), e("design:type", String)], l.prototype, "haspopup", void 0), t([s({ type: Boolean }), e("design:type", Object)], l.prototype, "expanded", void 0), t([s({ type: Object }), e("design:type", Object)], l.prototype, "avatar", void 0), t([s({ type: String }), e("design:type", Object)], l.prototype, "description", void 0), l = t([o("u-sidebar-button")], l);
|
|
47
|
-
//#endregion
|
|
48
47
|
export { l as SidebarButton };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { css as e } from "lit";
|
|
2
|
-
|
|
2
|
+
// src/components/SidebarButton.styles.ts
|
|
3
3
|
var t = e`
|
|
4
4
|
:host {
|
|
5
5
|
display: block;
|
|
@@ -105,5 +105,4 @@ var t = e`
|
|
|
105
105
|
border: 0;
|
|
106
106
|
}
|
|
107
107
|
`;
|
|
108
|
-
//#endregion
|
|
109
108
|
export { t as styles };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PropertyValues } from 'lit';
|
|
1
2
|
import { DirectiveResult } from 'lit/directive.js';
|
|
2
3
|
import { StyledElement, StyleMap } from '../internals/StyledElement.js';
|
|
3
4
|
import { SidebarLinkConfig } from './SidebarLink.js';
|
|
@@ -31,6 +32,14 @@ export declare class SidebarGroup extends StyledElement<ElementParts> {
|
|
|
31
32
|
lib?: string;
|
|
32
33
|
/** 네비게이션 아이템 데이터 */
|
|
33
34
|
label?: string | DirectiveResult;
|
|
35
|
+
/** 현재 화면 때문에 스스로 펼친 상태인가 — 사용자가 머리를 누르면 그 뒤로는 사용자의 상태다. */
|
|
36
|
+
private openedForCurrent;
|
|
37
|
+
/**
|
|
38
|
+
* 현재 화면을 품은 묶음은 펼친다 — 접힌 채면 «지금 어디인가» 가 메뉴에 보이지 않는다.
|
|
39
|
+
* 그렇게 스스로 연 묶음은 현재 화면이 떠나면 다시 접는다(옮겨 다닐수록 메뉴가 길어지지 않게).
|
|
40
|
+
* 사용자가 연 묶음 · 사용자가 다시 접은 묶음은 건드리지 않는다.
|
|
41
|
+
*/
|
|
42
|
+
protected willUpdate(changed: PropertyValues<this>): void;
|
|
34
43
|
render(): import('lit-html').TemplateResult<1>;
|
|
35
44
|
/** 버튼 클릭 핸들러 */
|
|
36
45
|
private handleButtonClick;
|
|
@@ -1,27 +1,31 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { DEFAULT_NAV_ICON as r } from "../internals/nav-icon.js";
|
|
5
5
|
import { SidebarLink as i } from "./SidebarLink.js";
|
|
6
6
|
import { styles as a } from "./SidebarGroup.styles.js";
|
|
7
|
-
import { html as o } from "lit";
|
|
8
|
-
import { customElement as
|
|
7
|
+
import { html as o, nothing as s } from "lit";
|
|
8
|
+
import { customElement as c, property as l } from "lit/decorators.js";
|
|
9
9
|
import "@iyulab/components/dist/components/icon/UIcon.js";
|
|
10
|
-
|
|
11
|
-
var
|
|
10
|
+
// src/components/SidebarGroup.ts
|
|
11
|
+
var u = class extends n {
|
|
12
12
|
constructor(...e) {
|
|
13
|
-
super(...e), this.compact = !1, this.selected = !1, this.collapsed = !0, this.handleButtonClick = (e) => {
|
|
14
|
-
this.compact ? ((this.shadowRoot?.querySelector("slot")?.assignedElements({ flatten: !0 }).find((e) => e instanceof i))?.renderRoot.querySelector("u-link"))?.click() : this.collapsed = !this.collapsed;
|
|
13
|
+
super(...e), this.compact = !1, this.selected = !1, this.collapsed = !0, this.openedForCurrent = !1, this.handleButtonClick = (e) => {
|
|
14
|
+
this.compact ? ((this.shadowRoot?.querySelector("slot")?.assignedElements({ flatten: !0 }).find((e) => e instanceof i))?.renderRoot.querySelector("u-link"))?.click() : (this.collapsed = !this.collapsed, this.openedForCurrent = !1);
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
static {
|
|
18
18
|
this.styles = [super.styles, a];
|
|
19
19
|
}
|
|
20
|
+
willUpdate(e) {
|
|
21
|
+
e.has("selected") && (this.selected && this.collapsed ? (this.collapsed = !1, this.openedForCurrent = !0) : !this.selected && this.openedForCurrent && (this.collapsed = !0, this.openedForCurrent = !1));
|
|
22
|
+
}
|
|
20
23
|
render() {
|
|
21
24
|
return o`
|
|
22
25
|
<button part="header"
|
|
23
26
|
?compact=${this.compact}
|
|
24
27
|
?selected=${this.selected}
|
|
28
|
+
aria-expanded=${this.compact ? s : String(!this.collapsed)}
|
|
25
29
|
@click=${this.handleButtonClick}>
|
|
26
30
|
<!--
|
|
27
31
|
⚠ ?hidden 을 걸지 않는다. 접힌 상태에서는 라벨과 캐럿이 모두 숨으므로,
|
|
@@ -51,15 +55,14 @@ var l = class extends n {
|
|
|
51
55
|
`;
|
|
52
56
|
}
|
|
53
57
|
};
|
|
54
|
-
t([
|
|
58
|
+
t([l({
|
|
55
59
|
type: Boolean,
|
|
56
60
|
reflect: !0
|
|
57
|
-
}), e("design:type", Boolean)],
|
|
61
|
+
}), e("design:type", Boolean)], u.prototype, "compact", void 0), t([l({
|
|
58
62
|
type: Boolean,
|
|
59
63
|
reflect: !0
|
|
60
|
-
}), e("design:type", Boolean)],
|
|
64
|
+
}), e("design:type", Boolean)], u.prototype, "selected", void 0), t([l({
|
|
61
65
|
type: Boolean,
|
|
62
66
|
reflect: !0
|
|
63
|
-
}), e("design:type", Boolean)],
|
|
64
|
-
|
|
65
|
-
export { l as SidebarGroup };
|
|
67
|
+
}), e("design:type", Boolean)], u.prototype, "collapsed", void 0), t([l({ type: String }), e("design:type", String)], u.prototype, "icon", void 0), t([l({ type: String }), e("design:type", String)], u.prototype, "lib", void 0), t([l({ type: String }), e("design:type", Object)], u.prototype, "label", void 0), u = t([c("u-sidebar-group")], u);
|
|
68
|
+
export { u as SidebarGroup };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { css as e } from "lit";
|
|
2
|
-
|
|
2
|
+
// src/components/SidebarGroup.styles.ts
|
|
3
3
|
var t = e`
|
|
4
4
|
:host {
|
|
5
5
|
display: flex;
|
|
@@ -113,5 +113,4 @@ var t = e`
|
|
|
113
113
|
border: 0;
|
|
114
114
|
}
|
|
115
115
|
`;
|
|
116
|
-
//#endregion
|
|
117
116
|
export { t as styles };
|
|
@@ -65,6 +65,12 @@ export declare class SidebarLink extends StyledElement<ElementParts> {
|
|
|
65
65
|
target?: '_self' | '_blank';
|
|
66
66
|
/** 항목 끝의 건수 — 처리할 일이 있을 때만. `undefined`·빈 문자열이면 그리지 않는다. */
|
|
67
67
|
count?: number | string;
|
|
68
|
+
/**
|
|
69
|
+
* 묶음(`u-sidebar-group`) 안의 링크인가. 기본 아이콘은 사이드바가 접혀 라벨이 숨을 때 항목이 빈 줄이 되지 않게 하는
|
|
70
|
+
* 것인데, 묶음 안 링크는 접히면 묶음 머리가 대신 남는다 — 그래서 아이콘을 주지 않은 묶음 안 링크에는 폴백을 그리지 않는다.
|
|
71
|
+
*/
|
|
72
|
+
private nested;
|
|
73
|
+
connectedCallback(): void;
|
|
68
74
|
render(): import('lit-html').TemplateResult<1>;
|
|
69
75
|
}
|
|
70
76
|
export {};
|