@iyulab/components 1.47.1 → 1.48.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 CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.48.0] - 2026-09-28
4
+
5
+ ### Changed
6
+
7
+ - **`glob` is now an optional peer dependency instead of a dependency.** Only the build plugin
8
+ `@iyulab/components/plugins/vite-plugin-react-wrapper` uses it, yet every app installing the
9
+ components also installed `glob` and its five transitive packages. Browser apps install none of
10
+ them now. If your build imports that plugin, add `glob` to your `devDependencies`.
11
+
3
12
  ## [1.47.1] - 2026-09-28
4
13
 
5
14
  ### Fixed
@@ -28,8 +28,8 @@ export declare abstract class UOverlayElement extends UElement {
28
28
  contained: boolean;
29
29
  /**
30
30
  * 오버레이 모드
31
- * - `modal` — focus trap, scroll lock, 백드롭 차단 (기본값)
32
- * - `non-modal` — 주변 UI와 자유 상호작용, 배경 투명, scroll lock 없음
31
+ * - `modal` — focus trap, 초기 포커스 배치, scroll lock, 백드롭 차단 (기본값)
32
+ * - `non-modal` — 주변 UI와 자유 상호작용, 배경 투명, scroll lock 없음, 열려도 포커스를 옮기지 않음
33
33
  *
34
34
  * @default 'modal'
35
35
  */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@iyulab/components",
3
3
  "description": "web-components library based on lit-element made by iyulab",
4
- "version": "1.47.1",
4
+ "version": "1.48.0",
5
5
  "keywords": [
6
6
  "iyulab",
7
7
  "components",
@@ -66,13 +66,13 @@
66
66
  "dependencies": {
67
67
  "@floating-ui/dom": "^1.8.0",
68
68
  "focus-trap": "^8.2.2",
69
- "glob": "^13.0.6",
70
69
  "lit": "^3.3.3",
71
70
  "tabbable": "^6.5.0"
72
71
  },
73
72
  "peerDependencies": {
74
73
  "@lit/react": ">=1.0.8",
75
- "react": ">=18.0.0"
74
+ "react": ">=18.0.0",
75
+ "glob": ">=13.0.0"
76
76
  },
77
77
  "peerDependenciesMeta": {
78
78
  "@lit/react": {
@@ -80,6 +80,9 @@
80
80
  },
81
81
  "react": {
82
82
  "optional": true
83
+ },
84
+ "glob": {
85
+ "optional": true
83
86
  }
84
87
  },
85
88
  "devDependencies": {
@@ -89,6 +92,7 @@
89
92
  "@vitest/browser-playwright": "^5.0.0",
90
93
  "eslint": "^10.1.0",
91
94
  "eslint-plugin-lit": "^2.3.1",
95
+ "glob": "^13.0.6",
92
96
  "globals": "^17.7.0",
93
97
  "happy-dom": "^20.10.6",
94
98
  "react": "^19.2.7",
@@ -60,7 +60,7 @@ panel of that size. A short dialog stays short.
60
60
  | `closable` | `boolean` | `false` | ✓ | Show close button |
61
61
  | `placement` | `'top-start'\|'top'\|'top-end'\|'start'\|'center'\|'end'\|'bottom-start'\|'bottom'\|'bottom-end'` | `'center'` | ✓ | Position on screen |
62
62
  | `offset` | `number` | `0` | ✓ | Distance from screen edge in px |
63
- | `mode` | `'modal'\|'non-modal'` | `'modal'` | ✓ | `modal` enables focus-trap |
63
+ | `mode` | `'modal'\|'non-modal'` | `'modal'` | ✓ | `modal` traps focus and places initial focus (`[autofocus]` → first input control → first tabbable, through shadow roots); `non-modal` does neither |
64
64
  | `contained` | `boolean` | `false` | ✓ | Position relative to parent element |
65
65
  | `closeOn` | `string[]` | `['escape','backdrop','button']` | ✓ | Close triggers |
66
66
 
@@ -35,7 +35,7 @@ Side panel that slides in from any screen edge. Extends `UOverlayElement` (focus
35
35
  | `open` | `boolean` | `false` | ✓ | Show/hide state |
36
36
  | `closable` | `boolean` | `false` | ✓ | Show close button |
37
37
  | `placement` | `'left'\|'right'\|'top'\|'bottom'` | `'left'` | ✓ | Slide-in direction |
38
- | `mode` | `'modal'\|'non-modal'` | `'modal'` | ✓ | Focus-trap mode |
38
+ | `mode` | `'modal'\|'non-modal'` | `'modal'` | ✓ | `modal` traps focus and places initial focus; `non-modal` does neither |
39
39
  | `contained` | `boolean` | `false` | ✓ | Contained to parent element |
40
40
  | `closeOn` | `string[]` | `['escape','backdrop','button']` | ✓ | Close triggers |
41
41
 
@@ -92,7 +92,7 @@ whole contract. Measured in a real browser
92
92
 
93
93
  | Requirement | How it is met |
94
94
  |---|---|
95
- | Focus the first input on open, restore the trigger on close | `[autofocus]` → first input control → first tabbable, searched through shadow roots (a form component slotted in works the same); focus is returned by the trap |
95
+ | Focus the first input on open, restore the trigger on close | `mode="modal"` (default): `[autofocus]` → first input control → first tabbable, searched through shadow roots (a form component slotted in works the same); focus is returned by the trap. `mode="non-modal"` moves no focus on open — the page stays interactive, so where focus goes is yours to decide (`element.focus()` after `show`) |
96
96
  | Body scrolls, footer stays visible | `part="body"` is `flex: 1; overflow: auto`; the `footer` slot is `flex-shrink: 0` |
97
97
  | Focus cannot leave the panel | `mode="modal"` (default) activates the focus trap |
98
98
  | `Esc` closes, background scroll is locked | `closeOn` defaults to `['escape','backdrop','button']` |