@iyulab/modern-app 0.3.4 → 0.3.6

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 CHANGED
@@ -1,107 +1,113 @@
1
1
  # Changelog
2
2
 
3
- ## 0.3.4 (2026-04-01)
3
+ ## [0.3.5] - 2026-04-07
4
4
 
5
- ### Features
6
- - Progress bar now fades in/out with CSS transition on route begin/done
7
- - Progress bar shows error state (red) on `route-error` and auto-dismisses
5
+ ### Changed
6
+ - Updated dependencies: `@iyulab/components` ^1.0.1 ^1.0.3, `@iyulab/router` ^0.7.4 ^0.9.1
8
7
 
9
- ### Documentation
10
- - Added `docs/` topic guides and `skills/modern-app/` agent skill package
11
- - Rewrote `README.md` with accurate API and links to docs/skills
8
+ ## [0.3.4] - 2026-04-01
12
9
 
13
- ## 0.3.3 (2026-04-01)
10
+ ### Added
11
+ - Progress bar fade-in/out with CSS transition tied to `route-begin` and `route-done` events
12
+ - Progress bar error state (red) on `route-error` with auto-dismiss
13
+ - `docs/` topic guides and `skills/modern-app/` agent skill package
14
14
 
15
- ### Fixes
16
- - Fixed missing `u-` prefix in `customElement` registration for `SidebarButton`, `SidebarGroup`, `SidebarLink`, and `SidebarSection` components were referenced as `u-sidebar-*` in the template but registered as `sidebar-*`, causing them not to render
15
+ ### Changed
16
+ - Rewrote `README.md` with accurate API references and links to docs and skills
17
17
 
18
- ## 0.3.2 (2026-04-01)
18
+ ## [0.3.3] - 2026-04-01
19
19
 
20
- ### Breaking Changes
21
- - **`@iyulab/components` major upgrade**: `^0.4.0` `^1.0.0`
20
+ ### Fixed
21
+ - Fixed missing `u-` prefix in `customElement` registration for `SidebarButton`, `SidebarGroup`, `SidebarLink`, and `SidebarSection` — components were referenced as `u-sidebar-*` in templates but registered as `sidebar-*`, causing them not to render
22
+
23
+ ## [0.3.2] - 2026-04-01
24
+
25
+ ### Changed
26
+ - **Breaking:** Upgraded `@iyulab/components` from `^0.4.0` to `^1.0.0`:
22
27
  - `Notifier` → `Toast` API migration
23
- - `AlertType` → `AlertStatus`, `ScreenPosition` → `ToastPosition` type rename
28
+ - `AlertType` → `AlertStatus`, `ScreenPosition` → `ToastPosition` type renames
24
29
  - `IconRegistry` import path: `utilities/IconRegistry.js` → `utilities/icons.js`
25
- - Component import style: `.component.js` → side-effect import (`UIcon.js`, `UButton.js`, etc.)
26
-
27
- ### Refactor
28
- - **Component registration migration**: Removed `static dependencies` pattern → `@customElement` decorator + side-effect import
29
- - **Simplified Toast API**: Removed `private notify()` method from `App` class, each notification method now calls `Toast.notice()`, etc. directly
30
+ - Component import style: `.component.js` → side-effect import (e.g. `UIcon.js`, `UButton.js`)
31
+ - Removed `static dependencies` pattern — switched to `@customElement` decorator with side-effect imports
32
+ - Simplified Toast API: each notification method now calls `Toast.notice()` etc. directly; removed private `notify()` from `App` class
33
+ - Updated dependencies: `i18next` ^25.8.13 ^25.10.10, `vite` ^7.3.1^8.0.3, `@types/node` ^25.3.2 ^25.5.0
30
34
 
31
- ### Fixes
35
+ ### Fixed
32
36
  - Changed `updated()` → `willUpdate()` in `SidebarLayout` to resolve update-in-update anti-pattern
33
- - Switched `SidebarLayout` icon library from inline `sidebar-app` to `bootstrap`, removed inline SVG registration code
34
-
35
- ### Dependencies
36
- - `@iyulab/components` ^0.4.0 → ^1.0.0
37
- - `i18next` ^25.8.13 → ^25.10.10
38
- - `vite` ^7.3.1 → ^8.0.3
39
- - `@types/node` ^25.3.2 → ^25.5.0
40
-
41
- ## 0.3.1 (2026-03-05)
37
+ - Switched `SidebarLayout` icon library from inline `sidebar-app` to `bootstrap`; removed inline SVG registration
42
38
 
43
- ### Breaking Changes
44
- - **Slot-based Outlet structure**: Replaced `<u-outlet>` inside `SidebarLayout` with `<slot>`, and moved `<u-outlet>` to Light DOM in `App`. This allows external CSS to apply correctly during React routing
39
+ ## [0.3.1] - 2026-03-05
45
40
 
46
- ### Changes
47
- - **BaseElement UElement migration**: Changed base class of all components from `BaseElement` to `UElement`
48
- - **SidebarLinkConfig**: Changed `type` property from optional to required
49
- - **Fixed import paths**: Corrected casing for `Theme.js`, `Notifier.js`, etc.
41
+ ### Changed
42
+ - **Breaking:** Replaced `<u-outlet>` inside `SidebarLayout` with `<slot>`; moved `<u-outlet>` to Light DOM in `App` to allow external CSS during React routing
43
+ - Migrated base class of all components from `BaseElement` to `UElement`
44
+ - `SidebarLinkConfig.type` changed from optional to required
45
+ - Corrected import path casing for `Theme.js`, `Notifier.js`, etc.
46
+ - Updated dependencies: `@iyulab/components` ^0.2.0 → ^0.4.0, `@iyulab/router` ^0.6.2 → ^0.7.2, `i18next` ^25.8.0 → ^25.8.13, `@types/node` ^25.0.9 → ^25.3.2
50
47
 
51
- ### Fixes
48
+ ### Fixed
52
49
  - Removed duplicate `color` property in `SidebarButton.styles.ts`
53
50
  - Cleaned up unused callback parameters in `repeat` directive
54
51
 
55
- ### Dependencies
56
- - `@iyulab/components` ^0.2.0 → ^0.4.0
57
- - `@iyulab/router` ^0.6.2 → ^0.7.2
58
- - `i18next` ^25.8.0 ^25.8.13
59
- - `@types/node` ^25.0.9 ^25.3.2
60
-
61
- ## 0.3.0 (2026-01-21)
62
-
63
- ### Breaking Changes
64
- - **Configuration Updates**:
65
- - Renamed `localization` to `i18n`
66
- - Renamed `layout.menu` to `layout.main`
67
- - Changed `logo` type to string (icon name)
68
- - Added `title` property for app title
69
- - Added `iconBasepath` option
70
- - **Mobile layout support**: New mobile states (`mobile`, `mobile-open`) with dedicated mobile header
71
-
72
- ### Removals
73
- - Removed `SidebarLogo` component: Logo is now rendered using `u-icon` component
74
- - Removed `observables.ts`: Replaced MobX observables with native `ScreenObserver` class
75
- - Removed `AppTypes.ts`: Type definitions moved to their respective modules
76
-
77
- ### Improvements
78
- - Improved responsive behavior with screen size observer
79
- - Added route context tracking and active link highlighting
80
- - Improved color scheme and typography
81
- - Enhanced transition animations
82
- - Cleaner layout spacing and gaps
83
- - Improved event handling for route changes and screen resizing
84
- - Enhanced pattern matching for active link detection
85
-
86
- ## 0.2.5 (2026-01-06)
52
+ ## [0.3.0] - 2026-01-21
53
+
54
+ ### Added
55
+ - Mobile layout support with new states (`mobile`, `mobile-open`) and dedicated mobile header
56
+ - Route context tracking and active link highlighting
57
+ - `ScreenObserver` class replacing MobX observables for responsive behavior
58
+ - `title` and `iconBasepath` properties in app configuration
59
+
60
+ ### Changed
61
+ - **Breaking:** `localization` config option renamed to `i18n`
62
+ - **Breaking:** `layout.menu` renamed to `layout.main`
63
+ - **Breaking:** `logo` type changed to string (icon name)
64
+ - Type definitions moved from `AppTypes.ts` to their respective modules
65
+ - Improved color scheme, typography, transition animations, layout spacing, and event handling
66
+
67
+ ### Removed
68
+ - Removed `SidebarLogo` component — logo now rendered via `u-icon`
69
+ - Removed `observables.ts` (replaced by `ScreenObserver`)
70
+ - Removed `AppTypes.ts`
71
+
72
+ ## [0.2.5] - 2026-01-06
73
+
74
+ ### Changed
87
75
  - Updated `@iyulab/components` to v0.1.11
88
76
 
89
- ## 0.2.4 (2025-12-19)
90
- - fix import path, modified correct case-sensitive paths
77
+ ## [0.2.4] - 2025-12-19
78
+
79
+ ### Fixed
80
+ - Fixed case-sensitive import paths
81
+
82
+ ## [0.2.3] - 2025-12-19
83
+
84
+ ### Added
85
+ - `root` option in `AppConfig` to set the application root element
86
+
87
+ ### Changed
88
+ - Updated `@iyulab/components` to v0.1.10
89
+
90
+ ## [0.2.2] - 2025-11-17
91
+
92
+ ### Added
93
+ - `fallback` config option in `AppConfig`
94
+
95
+ ### Changed
96
+ - Improved `route-progress` handling in layout component
97
+
98
+ ## [0.2.1] - 2025-11-13
99
+
100
+ ### Changed
101
+ - `progress` property changed from a value to a function on the `app` instance
102
+ - `locales` option renamed to `localization` in `AppConfig`
91
103
 
92
- ## 0.2.3 (2025-12-19)
93
- - added `root` option in `AppConfig` type to set application root element
94
- - update `@iyulab/components` to v0.1.10
104
+ ### Fixed
105
+ - Fixed component and sidebar style issues
95
106
 
96
- ## 0.2.2 (2025-11-17)
97
- - added `fallback` config in `AppConfig` type
98
- - improved route-progress handling in layout component
107
+ ### Removed
108
+ - Removed `theme` setter property from `app` instance
99
109
 
100
- ## 0.2.1 (2025-11-13)
101
- - Fixed few component and sidebar styles
102
- - removed `theme` setter property in `app` instance
103
- - changed `progress` property to function in `app` instance
104
- - changed name `locales` option to `localization` option in `AppConfig` type
110
+ ## [0.2.0] - 2025-11-12
105
111
 
106
- ## 0.2.0 (2025-11-12)
107
- - Initial library version release
112
+ ### Added
113
+ - Initial release
@@ -1,4 +1,4 @@
1
- //#region \0@oxc-project+runtime@0.122.0/helpers/decorate.js
1
+ //#region \0@oxc-project+runtime@0.130.0/helpers/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.122.0/helpers/decorateMetadata.js
1
+ //#region \0@oxc-project+runtime@0.130.0/helpers/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 { __decorateMetadata as e } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorateMetadata.js";
2
- import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
1
+ import { __decorateMetadata as e } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/decorateMetadata.js";
2
+ import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/decorate.js";
3
3
  import { StyledElement as n } from "../internals/StyledElement.js";
4
4
  import { styles as r } from "./SidebarButton.styles.js";
5
5
  import { html as i } from "lit";
@@ -1,5 +1,5 @@
1
- import { __decorateMetadata as e } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorateMetadata.js";
2
- import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
1
+ import { __decorateMetadata as e } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/decorateMetadata.js";
2
+ import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/decorate.js";
3
3
  import { StyledElement as n } from "../internals/StyledElement.js";
4
4
  import { SidebarLink as r } from "./SidebarLink.js";
5
5
  import { styles as i } from "./SidebarGroup.styles.js";
@@ -1,5 +1,5 @@
1
- import { __decorateMetadata as e } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorateMetadata.js";
2
- import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
1
+ import { __decorateMetadata as e } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/decorateMetadata.js";
2
+ import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/decorate.js";
3
3
  import { StyledElement as n } from "../internals/StyledElement.js";
4
4
  import { styles as r } from "./SidebarLink.styles.js";
5
5
  import { html as i } from "lit";
@@ -1,5 +1,5 @@
1
- import { __decorateMetadata as e } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorateMetadata.js";
2
- import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
1
+ import { __decorateMetadata as e } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/decorateMetadata.js";
2
+ import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/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 { __decorateMetadata as e } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorateMetadata.js";
2
- import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
1
+ import { __decorateMetadata as e } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/decorateMetadata.js";
2
+ import { __decorate as t } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/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
@@ -51,6 +51,8 @@ export declare class SidebarLayout extends StyledElement<SidebarParts> {
51
51
  private handleRouteDone;
52
52
  /** 라우트 에러 핸들러 */
53
53
  private handleRouteError;
54
+ /** .main 키보드 스크롤 핸들러 (WCAG 2.1 SC 2.1.1) */
55
+ private _handleMainKeydown;
54
56
  /** 화면 크기 변경에 따른 사이드바 상태 업데이트 */
55
57
  private handleScreenResize;
56
58
  }
@@ -1,6 +1,6 @@
1
1
  import { app as e } from "../App.js";
2
- import { __decorateMetadata as t } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorateMetadata.js";
3
- import { __decorate as n } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
2
+ import { __decorateMetadata as t } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/decorateMetadata.js";
3
+ import { __decorate as n } from "../_virtual/_@oxc-project_runtime@0.130.0/helpers/decorate.js";
4
4
  import { StyledElement as r } from "../internals/StyledElement.js";
5
5
  import "../components/SidebarSection.js";
6
6
  import "../components/SidebarLink.js";
@@ -31,11 +31,38 @@ var m, h = class extends r {
31
31
  }, this.handleRouteDone = (e) => {
32
32
  this.progressBarEl.value = 100, setTimeout(() => {
33
33
  this.progressBarEl.removeAttribute("visible");
34
- }, 300);
34
+ }, 300), (this.shadowRoot?.querySelector(".main"))?.focus({ preventScroll: !0 });
35
35
  }, this.handleRouteError = (e) => {
36
36
  this.progressBarEl.setAttribute("error", ""), this.progressBarEl.value = 100, setTimeout(() => {
37
37
  this.progressBarEl.removeAttribute("visible"), this.progressBarEl.removeAttribute("error");
38
38
  }, 300);
39
+ }, this._handleMainKeydown = (e) => {
40
+ let t = this.shadowRoot?.querySelector(".main");
41
+ if (!t) return;
42
+ let n = t.clientHeight;
43
+ switch (e.key) {
44
+ case " ":
45
+ case "PageDown":
46
+ t.scrollTop += e.shiftKey ? -n : n;
47
+ break;
48
+ case "PageUp":
49
+ t.scrollTop -= n;
50
+ break;
51
+ case "End":
52
+ t.scrollTop = t.scrollHeight;
53
+ break;
54
+ case "Home":
55
+ t.scrollTop = 0;
56
+ break;
57
+ case "ArrowDown":
58
+ t.scrollTop += 80;
59
+ break;
60
+ case "ArrowUp":
61
+ t.scrollTop -= 80;
62
+ break;
63
+ default: return;
64
+ }
65
+ e.preventDefault();
39
66
  }, this.handleScreenResize = (e) => {
40
67
  let t = e.detail.size;
41
68
  t === "large" ? this.state = "default" : t === "medium" ? this.state = "slim" : t === "small" ? this.state = "mobile" : console.warn("Unknown screen size:", t);
@@ -105,7 +132,7 @@ var m, h = class extends r {
105
132
  </aside>
106
133
 
107
134
  <!-- Main Content -->
108
- <div class="main" part="main" scrollable>
135
+ <div class="main" part="main" scrollable tabindex="-1" @keydown=${this._handleMainKeydown}>
109
136
  <u-progress-bar part="progress"></u-progress-bar>
110
137
 
111
138
  <slot></slot>
@@ -148,6 +148,7 @@ var t = e`
148
148
  flex: 1;
149
149
  background: var(--u-bg-color);
150
150
  overflow: auto;
151
+ outline: none;
151
152
  }
152
153
 
153
154
  .main u-progress-bar {
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.3.4",
4
+ "version": "0.3.6",
5
5
  "keywords": [
6
6
  "iyulab",
7
7
  "web-framework",
@@ -38,15 +38,15 @@
38
38
  "build": "vite build"
39
39
  },
40
40
  "dependencies": {
41
- "@iyulab/components": "^1.0.1",
42
- "@iyulab/router": "^0.7.4",
43
- "i18next": "^25.10.10",
44
- "lit": "^3.3.2"
41
+ "@iyulab/components": "^1.0.6",
42
+ "@iyulab/router": "^0.9.3",
43
+ "i18next": "^26.2.0",
44
+ "lit": "^3.3.3"
45
45
  },
46
46
  "devDependencies": {
47
- "@types/node": "^25.5.0",
47
+ "@types/node": "^25.8.0",
48
48
  "typescript": "^5.9.3",
49
- "vite": "^8.0.3",
50
- "vite-plugin-dts": "^4.5.4"
49
+ "vite": "^8.0.13",
50
+ "vite-plugin-dts": "^5.0.0"
51
51
  }
52
52
  }