@iyulab/modern-app 0.18.5 → 0.18.7

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.
Files changed (27) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/_virtual/{_@oxc-project_runtime@0.146.0 → _@oxc-project_runtime@0.147.0}/helpers/esm/decorate.js +1 -1
  3. package/dist/_virtual/{_@oxc-project_runtime@0.146.0 → _@oxc-project_runtime@0.147.0}/helpers/esm/decorateMetadata.js +1 -1
  4. package/dist/components/ActionBar.js +2 -2
  5. package/dist/components/EmptyState.js +2 -2
  6. package/dist/components/GroupBox.js +2 -2
  7. package/dist/components/InfoField.js +2 -2
  8. package/dist/components/InfoSection.js +2 -2
  9. package/dist/components/MasterDetailLayout.js +2 -2
  10. package/dist/components/PageHeader.js +2 -2
  11. package/dist/components/SidebarButton.js +10 -9
  12. package/dist/components/SidebarGroup.js +12 -10
  13. package/dist/components/SidebarLink.js +4 -2
  14. package/dist/components/SidebarSection.js +2 -2
  15. package/dist/components/Wizard.js +2 -2
  16. package/dist/internals/StyledElement.js +2 -2
  17. package/dist/layouts/SidebarLayout.js +2 -2
  18. package/dist/layouts/SidebarLayout.styles.js +6 -2
  19. package/package.json +1 -1
  20. package/skills/modern-app/references/components/action-bar.md +9 -0
  21. package/skills/modern-app/references/components/empty-state.md +15 -0
  22. package/skills/modern-app/references/components/group-box.md +14 -0
  23. package/skills/modern-app/references/components/info-field.md +15 -0
  24. package/skills/modern-app/references/components/info-section.md +9 -0
  25. package/skills/modern-app/references/components/master-detail-layout.md +12 -0
  26. package/skills/modern-app/references/components/page-header.md +16 -0
  27. package/skills/modern-app/references/components/wizard.md +18 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.18.7] - 2026-08-27
4
+
5
+ ### Fixed
6
+
7
+ - **`SidebarButton`, `SidebarLink`, and `SidebarGroup` lost their accessible
8
+ name entirely in compact (icon-only) sidebar mode.** Compact mode hides the
9
+ visible text label (`part="label"`), and hiding it also removes it from the
10
+ accessibility tree — with no fallback, a screen reader announced these as
11
+ unnamed buttons/links. When `label` is a plain string, it is now promoted to
12
+ `aria-label` while compact; the visible label still drives the name when
13
+ expanded, so nothing changes there.
14
+
15
+ ## [0.18.6] - 2026-08-24
16
+
17
+ ### Fixed
18
+
19
+ - **`SidebarLayout`'s sidebar and mobile-header backgrounds now fall back to
20
+ `--u-bg-color-raised` instead of `--u-panel-bg-color`.** The sidebar is persistent chrome, not
21
+ a floating overlay (card/menu/dialog) — `--u-panel-bg-color`'s light value is the same white as
22
+ the page background, so an app that never set `--app-sidebar-bg` got a sidebar visually
23
+ indistinguishable from the page (and, since `u-group-box` also read `--u-panel-bg-color`, from
24
+ its own cards too — a three-way collapse). `--u-bg-color-raised` is the token this library
25
+ already documents for chrome surfaces adjacent to the page background, and `u-group-box`
26
+ switched to it in `0.18.2`; the sidebar now matches. Visual change for any consumer relying on
27
+ the unset default — light: sidebar goes from `#FFFFFF` to `#FAFAFA`; dark: `#1E1E1E` to
28
+ `#2A2A2A`, which also fixes the reported card/input collapse (`u-input`'s background stayed on
29
+ `--u-panel-bg-color`, so the sidebar now reads one step lighter than form fields instead of
30
+ identical to them). `--app-sidebar-bg`/`--app-header-bg` overrides still take precedence
31
+ exactly as before.
32
+
3
33
  ## [0.18.5] - 2026-08-23
4
34
 
5
35
  ### Fixed
@@ -1,4 +1,4 @@
1
- //#region \0@oxc-project+runtime@0.146.0/helpers/esm/decorate.js
1
+ //#region \0@oxc-project+runtime@0.147.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);
@@ -1,4 +1,4 @@
1
- //#region \0@oxc-project+runtime@0.146.0/helpers/esm/decorateMetadata.js
1
+ //#region \0@oxc-project+runtime@0.147.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
  }
@@ -1,5 +1,5 @@
1
- import e from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorateMetadata.js";
2
- import t from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
1
+ import e from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorateMetadata.js";
2
+ import t from "../_virtual/_@oxc-project_runtime@0.147.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";
@@ -1,5 +1,5 @@
1
- import e from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorateMetadata.js";
2
- import t from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
1
+ import e from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorateMetadata.js";
2
+ import t from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorate.js";
3
3
  import { StyledElement as n } from "../internals/StyledElement.js";
4
4
  import { getLocaleStrings as r } from "../internals/locale.js";
5
5
  import { slotHasContent as i } from "../internals/slotted.js";
@@ -1,5 +1,5 @@
1
- import e from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorateMetadata.js";
2
- import t from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
1
+ import e from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorateMetadata.js";
2
+ import t from "../_virtual/_@oxc-project_runtime@0.147.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";
@@ -1,5 +1,5 @@
1
- import e from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorateMetadata.js";
2
- import t from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
1
+ import e from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorateMetadata.js";
2
+ import t from "../_virtual/_@oxc-project_runtime@0.147.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";
@@ -1,5 +1,5 @@
1
- import e from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorateMetadata.js";
2
- import t from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
1
+ import e from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorateMetadata.js";
2
+ import t from "../_virtual/_@oxc-project_runtime@0.147.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";
@@ -1,5 +1,5 @@
1
- import e from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorateMetadata.js";
2
- import t from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
1
+ import e from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorateMetadata.js";
2
+ import t from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorate.js";
3
3
  import { StyledElement as n } from "../internals/StyledElement.js";
4
4
  import { getLocaleStrings as r } from "../internals/locale.js";
5
5
  import { slotHasContent as i } from "../internals/slotted.js";
@@ -1,5 +1,5 @@
1
- import e from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorateMetadata.js";
2
- import t from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
1
+ import e from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorateMetadata.js";
2
+ import t from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorate.js";
3
3
  import { StyledElement as n } from "../internals/StyledElement.js";
4
4
  import { getLocaleStrings as r } from "../internals/locale.js";
5
5
  import { slotHasContent as i } from "../internals/slotted.js";
@@ -1,13 +1,13 @@
1
- import e from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorateMetadata.js";
2
- import t from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
1
+ import e from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorateMetadata.js";
2
+ import t from "../_virtual/_@oxc-project_runtime@0.147.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";
6
- import { html as a } from "lit";
7
- import { customElement as o, property as s } from "lit/decorators.js";
6
+ import { html as a, nothing as o } from "lit";
7
+ import { customElement as s, property as c } from "lit/decorators.js";
8
8
  import "@iyulab/components/dist/components/icon/UIcon.js";
9
9
  //#region src/components/SidebarButton.ts
10
- var c = class extends n {
10
+ var l = class extends n {
11
11
  constructor(...e) {
12
12
  super(...e), this.compact = !1;
13
13
  }
@@ -15,8 +15,9 @@ var c = class extends n {
15
15
  this.styles = [super.styles, i];
16
16
  }
17
17
  render() {
18
+ let e = this.compact && typeof this.label == "string" ? this.label : o;
18
19
  return a`
19
- <button part="base" ?compact=${this.compact}>
20
+ <button part="base" ?compact=${this.compact} aria-label=${e}>
20
21
  <u-icon part="icon"
21
22
  .lib=${this.lib}
22
23
  .name=${this.icon}
@@ -29,9 +30,9 @@ var c = class extends n {
29
30
  `;
30
31
  }
31
32
  };
32
- t([s({
33
+ t([c({
33
34
  type: Boolean,
34
35
  reflect: !0
35
- }), e("design:type", Object)], c.prototype, "compact", void 0), t([s({ type: String }), e("design:type", String)], c.prototype, "icon", void 0), t([s({ type: String }), e("design:type", String)], c.prototype, "lib", void 0), t([s({ type: String }), e("design:type", Object)], c.prototype, "label", void 0), c = t([o("u-sidebar-button")], c);
36
+ }), e("design:type", Object)], l.prototype, "compact", void 0), t([c({ type: String }), e("design:type", String)], l.prototype, "icon", void 0), t([c({ type: String }), e("design:type", String)], l.prototype, "lib", void 0), t([c({ type: String }), e("design:type", Object)], l.prototype, "label", void 0), l = t([s("u-sidebar-button")], l);
36
37
  //#endregion
37
- export { c as SidebarButton };
38
+ export { l as SidebarButton };
@@ -1,14 +1,14 @@
1
- import e from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorateMetadata.js";
2
- import t from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
1
+ import e from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorateMetadata.js";
2
+ import t from "../_virtual/_@oxc-project_runtime@0.147.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 s, property as c } from "lit/decorators.js";
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
10
  //#region src/components/SidebarGroup.ts
11
- var l = class extends n {
11
+ var u = class extends n {
12
12
  constructor(...e) {
13
13
  super(...e), this.compact = !1, this.selected = !1, this.collapsed = !0, this.handleButtonClick = (e) => {
14
14
  this.compact ? ((this.shadowRoot?.querySelector("slot")?.assignedElements({ flatten: !0 }).find((e) => e instanceof i))?.renderRoot.querySelector("u-link"))?.click() : this.collapsed = !this.collapsed;
@@ -18,10 +18,12 @@ var l = class extends n {
18
18
  this.styles = [super.styles, a];
19
19
  }
20
20
  render() {
21
+ let e = this.compact && typeof this.label == "string" ? this.label : s;
21
22
  return o`
22
23
  <button part="header"
23
24
  ?compact=${this.compact}
24
25
  ?selected=${this.selected}
26
+ aria-label=${e}
25
27
  @click=${this.handleButtonClick}>
26
28
  <!--
27
29
  ⚠ ?hidden 을 걸지 않는다. 접힌 상태에서는 라벨과 캐럿이 모두 숨으므로,
@@ -51,15 +53,15 @@ var l = class extends n {
51
53
  `;
52
54
  }
53
55
  };
54
- t([c({
56
+ t([l({
55
57
  type: Boolean,
56
58
  reflect: !0
57
- }), e("design:type", Boolean)], l.prototype, "compact", void 0), t([c({
59
+ }), e("design:type", Boolean)], u.prototype, "compact", void 0), t([l({
58
60
  type: Boolean,
59
61
  reflect: !0
60
- }), e("design:type", Boolean)], l.prototype, "selected", void 0), t([c({
62
+ }), e("design:type", Boolean)], u.prototype, "selected", void 0), t([l({
61
63
  type: Boolean,
62
64
  reflect: !0
63
- }), e("design:type", Boolean)], l.prototype, "collapsed", void 0), t([c({ type: String }), e("design:type", String)], l.prototype, "icon", void 0), t([c({ type: String }), e("design:type", String)], l.prototype, "lib", void 0), t([c({ type: String }), e("design:type", Object)], l.prototype, "label", void 0), l = t([s("u-sidebar-group")], l);
65
+ }), 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);
64
66
  //#endregion
65
- export { l as SidebarGroup };
67
+ export { u as SidebarGroup };
@@ -1,5 +1,5 @@
1
- import e from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorateMetadata.js";
2
- import t from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
1
+ import e from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorateMetadata.js";
2
+ import t from "../_virtual/_@oxc-project_runtime@0.147.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 "./SidebarLink.styles.js";
@@ -15,12 +15,14 @@ var l = class extends n {
15
15
  this.styles = [super.styles, i];
16
16
  }
17
17
  render() {
18
+ let e = this.compact && typeof this.label == "string" ? this.label : o;
18
19
  return a`
19
20
  <u-link
20
21
  .href=${this.href || "#"}
21
22
  .navigate=${this.navigate}
22
23
  .target=${this.target}
23
24
  aria-current=${this.selected ? "page" : o}
25
+ aria-label=${e}
24
26
  >
25
27
  <div class="container" part="base" ?compact=${this.compact}>
26
28
  <u-icon part="icon"
@@ -1,5 +1,5 @@
1
- import e from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorateMetadata.js";
2
- import t from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
1
+ import e from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorateMetadata.js";
2
+ import t from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorate.js";
3
3
  import { StyledElement as n } from "../internals/StyledElement.js";
4
4
  import { styles as r } from "./SidebarSection.styles.js";
5
5
  import { html as i } from "lit";
@@ -1,5 +1,5 @@
1
- import e from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorateMetadata.js";
2
- import t from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
1
+ import e from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorateMetadata.js";
2
+ import t from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorate.js";
3
3
  import { StyledElement as n } from "../internals/StyledElement.js";
4
4
  import { getLocaleStrings as r } from "../internals/locale.js";
5
5
  import { styles as i } from "./Wizard.styles.js";
@@ -1,5 +1,5 @@
1
- import e from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorateMetadata.js";
2
- import t from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
1
+ import e from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorateMetadata.js";
2
+ import t from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorate.js";
3
3
  import { property as n } from "lit/decorators.js";
4
4
  import { UElement as r } from "@iyulab/components/dist/components/UElement.js";
5
5
  //#region src/internals/StyledElement.ts
@@ -1,7 +1,7 @@
1
1
  import { app as e } from "../App.js";
2
2
  import { filterSidebarItems as t } from "./filterSidebarItems.js";
3
- import n from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorateMetadata.js";
4
- import r from "../_virtual/_@oxc-project_runtime@0.146.0/helpers/esm/decorate.js";
3
+ import n from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorateMetadata.js";
4
+ import r from "../_virtual/_@oxc-project_runtime@0.147.0/helpers/esm/decorate.js";
5
5
  import { StyledElement as i } from "../internals/StyledElement.js";
6
6
  import { getLocaleStrings as a } from "../internals/locale.js";
7
7
  import "../components/SidebarSection.js";
@@ -76,7 +76,11 @@ var t = e`
76
76
  justify-content: space-between;
77
77
  gap: 8px;
78
78
  height: 100%;
79
- background: var(--app-sidebar-bg, var(--u-panel-bg-color, #FFFFFF));
79
+ /* --u-panel-bg-color 가 아니라 --u-bg-color-raised — 사이드바는 카드·메뉴류의
80
+ "떠 있는 패널"이 아니라 상시 크롬이고, 그 구분이 정확히 두 토큰이 갈리는 지점이다
81
+ (light.css 293~298행 참조). 미설정 시 페이지(--u-bg-color)와 같은 흰색으로 앉아
82
+ 사이드바·페이지·카드 삼중 무구분을 만들던 종전 폴백을 대체한다. */
83
+ background: var(--app-sidebar-bg, var(--u-bg-color-raised, #FAFAFA));
80
84
  color: var(--app-sidebar-fg, var(--u-txt-color, #212121));
81
85
  border-right: 1px solid var(--u-border-color, #E0E0E0);
82
86
  transition: all 0.3s ease;
@@ -124,7 +128,7 @@ var t = e`
124
128
  justify-content: space-between;
125
129
  gap: 12px;
126
130
  padding: 16px;
127
- background: var(--app-header-bg, var(--u-panel-bg-color, #FFFFFF));
131
+ background: var(--app-header-bg, var(--u-bg-color-raised, #FAFAFA));
128
132
  color: var(--app-header-fg, var(--u-txt-color, #212121));
129
133
  border-bottom: 1px solid var(--u-border-color-weak, #EEEEEE);
130
134
  user-select: none;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@iyulab/modern-app",
3
3
  "description": "web-framework by iyulab based on lit-element",
4
- "version": "0.18.5",
4
+ "version": "0.18.7",
5
5
  "keywords": [
6
6
  "iyulab",
7
7
  "web-framework",
@@ -33,6 +33,15 @@ destructive ones separated on the trailing edge.
33
33
  | `main` | Primary action group |
34
34
  | `danger` | Destructive action group |
35
35
 
36
+ ## CSS Custom Properties
37
+
38
+ | Property | Description |
39
+ |----------|-------------|
40
+ | `--u-bg-color` | Background when `sticky` |
41
+ | `--u-border-color-weak` | Top border when `sticky` |
42
+ | `--u-space-sm` | Gap between actions within a group |
43
+ | `--u-space-md` | Host and sticky-mode vertical padding |
44
+
36
45
  ⚠ `sticky` adds **vertical** padding only. It deliberately does not stretch to the container
37
46
  edges with negative margins — that would assume the parent has exactly that much horizontal
38
47
  padding, and when the assumption is wrong the bar overflows and clips its own buttons.
@@ -39,5 +39,20 @@ for both and a user with a filter still applied reads it as *"my data disappeare
39
39
  |------|-------------|
40
40
  | `icon` · `title` · `description` · `actions` | The four regions |
41
41
 
42
+ ## CSS Custom Properties
43
+
44
+ | Property | Description |
45
+ |----------|-------------|
46
+ | `--empty-state-icon-size` | Icon slot font size |
47
+ | `--u-txt-color` | Title color |
48
+ | `--u-txt-color-weak` | Host and description text color |
49
+ | `--u-text-subtitle-size` / `-weight` / `-leading` | Title typography |
50
+ | `--u-text-caption-size` / `-leading` | Description typography |
51
+ | `--u-space-4xl` / `--u-space-xl` | Host padding (vertical / horizontal) |
52
+ | `--u-space-md` | Icon-to-title spacing |
53
+ | `--u-space-2xs` | Title-to-description spacing |
54
+ | `--u-space-lg` | Actions row top spacing |
55
+ | `--u-space-sm` | Gap between actions |
56
+
42
57
  ⚠ Default wording is **English** — register others with `registerLocale('ko', …)`, or pass
43
58
  `title`/`description` per screen.
@@ -39,3 +39,17 @@ a left edge without any consumer CSS.
39
39
  |------|-------------|
40
40
  | `header` · `title` · `actions` | Header row |
41
41
  | `body` | Body wrapper |
42
+
43
+ ## CSS Custom Properties
44
+
45
+ | Property | Description |
46
+ |----------|-------------|
47
+ | `--u-text-subtitle-size` | Title font size |
48
+ | `--u-text-subtitle-weight` | Title font weight |
49
+ | `--u-text-subtitle-leading` | Title line height |
50
+ | `--u-text-subtitle-tracking` | Title letter spacing |
51
+ | `--u-bg-color-raised` | Surface background |
52
+ | `--u-border-color-weak` | Border and header divider color |
53
+ | `--u-radius-2xl` | Corner radius |
54
+ | `--u-shadow-sm` | Drop shadow |
55
+ | `--u-space-sm` / `--u-space-md` / `--u-space-xl` | Header/body spacing |
@@ -53,3 +53,18 @@ lone field it just pushes the value away from its label.
53
53
  | Part | Description |
54
54
  |------|-------------|
55
55
  | `label` · `value` · `trend` | The label, the value, and the (optional) trend indicator |
56
+
57
+ ## CSS Custom Properties
58
+
59
+ | Property | Description |
60
+ |----------|-------------|
61
+ | `--u-text-caption-size` / `-weight` / `-leading` | Label typography |
62
+ | `--u-txt-color-weak` | Label color, and blank-value (`—`) color |
63
+ | `--u-space-3xs` | Label-to-value spacing |
64
+ | `--u-text-body-size` / `-leading` | Value typography at default `size` |
65
+ | `--u-text-label-weight` | Value font weight at default `size` |
66
+ | `--u-text-body-weight` | Value font weight when `blank` |
67
+ | `--u-txt-color` | Value color |
68
+ | `--u-text-title-size` / `-weight` | Value typography when `size="lg"` |
69
+ | `--u-success-color-strong` | `tone="positive"` color (value and trend) |
70
+ | `--u-danger-color-strong` | `tone="negative"` color (value and trend) |
@@ -33,3 +33,12 @@ markup works inside a side panel.
33
33
  | Part | Description |
34
34
  |------|-------------|
35
35
  | `grid` | Grid container |
36
+
37
+ ## CSS Custom Properties
38
+
39
+ | Property | Description |
40
+ |----------|-------------|
41
+ | `--u-space-lg` / `--u-space-xl` | Grid gap (row / column) |
42
+
43
+ ⚠ Column width is set via the `min` property, not a custom property — it's applied as an inline
44
+ style per instance, so a `--info-min` override in a stylesheet would lose to it.
@@ -64,3 +64,15 @@ configurable breakpoint means measuring the host's own width in JavaScript and r
64
64
  | `divider` | Hairline between panes — hidden when there's no detail, or in overlay mode |
65
65
  | `detail` | Detail pane |
66
66
  | `detail-close` | Overlay-mode close button — hidden outside overlay mode |
67
+
68
+ ## CSS Custom Properties
69
+
70
+ | Property | Description |
71
+ |----------|-------------|
72
+ | `--u-border-color-weak` | Divider color |
73
+ | `--u-panel-bg-color` | Detail pane background in overlay mode |
74
+ | `--u-shadow-lg` | Detail pane shadow in overlay mode |
75
+ | `--u-space-sm` | Close-button offset from the overlay edge |
76
+
77
+ ⚠ The master pane's fixed width comes from the `masterSize` property (a CSS length, applied as
78
+ an inline style), not a custom property.
@@ -42,5 +42,21 @@ screens nobody opens.
42
42
  | `title` · `subtitle` | Text elements |
43
43
  | `status` · `actions` | Slot wrappers |
44
44
 
45
+ ## CSS Custom Properties
46
+
47
+ | Property | Description |
48
+ |----------|-------------|
49
+ | `--u-text-display-size` / `-weight` / `-leading` / `-tracking` | Title typography |
50
+ | `--u-txt-color` | Title color |
51
+ | `--u-text-caption-size` / `-weight` / `-leading` | Subtitle typography |
52
+ | `--u-txt-color-weak` | Subtitle color |
53
+ | `--u-link-txt-color` | Back-link color |
54
+ | `--u-text-label-size` / `-weight` | Back-link typography |
55
+ | `--u-space-2xl` | Host bottom margin |
56
+ | `--u-space-md` | Row gap (heading vs. actions) |
57
+ | `--u-space-sm` | Title-row and actions internal gap |
58
+ | `--u-space-2xs` | Title-to-subtitle spacing |
59
+ | `--u-space-3xs` | Back-arrow-to-label spacing |
60
+
45
61
  ⚠ Built-in strings default to **English** — this package is a generic layer and cannot pick a
46
62
  language. Register others with `registerLocale('ko', { back: '뒤로' })`.
@@ -82,3 +82,21 @@ clicked directly (a non-linear/"editable" stepper).
82
82
  | `step` | Each step button (`role="tab"`) |
83
83
  | `panel` | Wrapper around the active step's slotted content (`role="tabpanel"`) |
84
84
  | `actions` | Back/Next (or overridden) action row |
85
+
86
+ ## CSS Custom Properties
87
+
88
+ | Property | Description |
89
+ |----------|-------------|
90
+ | `--u-space-xl` | Indicator-to-content gap |
91
+ | `--u-space-lg` | Gap between content rows |
92
+ | `--u-space-sm` | Indicator step gap, marker-to-label gap, actions row gap |
93
+ | `--u-space-2xs` | Step button vertical padding |
94
+ | `--u-txt-color-weak` | Step label color (default state) |
95
+ | `--u-txt-color-disabled` | Step label color (`disabled`) |
96
+ | `--u-border-color-strong` | Marker border (default state) |
97
+ | `--u-primary-color` | Marker border/text and label color (`active`, `state-done`) |
98
+ | `--u-danger-color` | Marker border/text and label color (`state-error`) |
99
+ | `--u-txt-color-inverse` | Marker text color (`state-done`) |
100
+ | `--u-text-caption-size` | Marker font size |
101
+ | `--u-text-label-weight` | Marker font weight |
102
+ | `--u-text-label-size` | Step label font size |