@iyulab/data-components 0.10.0 โ 0.12.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 +125 -0
- package/LICENSE +21 -0
- package/README.md +34 -0
- package/dist/components/simple-sheet/USimpleSheet.js +3 -2
- package/dist/components/simple-sheet/USimpleSheet.styles.js +32 -9
- package/dist/components/u-rich-table/URichTable.d.ts +69 -0
- package/dist/components/u-rich-table/URichTable.js +133 -23
- package/dist/components/u-rich-table/types.d.ts +16 -0
- package/dist/react.d.ts +38 -10
- package/dist/react.js +1 -0
- package/dist/utilities/messages.d.ts +25 -0
- package/dist/utilities/messages.js +29 -0
- package/package.json +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,130 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.12.0] - 2026-08-04
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- ๐ด**`u-rich-table` ์ ์ ์ฒด์ ํ์ด ๋ค๋ฅธ ํ์ด์ง์ ์ ํ์ ์กฐ์ฉํ ํ๊ดดํ๋ค.** ์๋ฒ ํ์ด์ง
|
|
8
|
+
(`totalCount`/`currentPage`/`page-change`)์์ ์ ํ ์ํ๋ ํ์ด์ง๋ฅผ ๋์ด ์ ์ง๋๋๋ฐ,
|
|
9
|
+
์ ์ฒด์ ํ ์ฒดํฌ๋ฐ์ค๋ง ๊ทธ ์ฌ์ค์ ๋ชจ๋ฅด๊ณ ์์๋ค:
|
|
10
|
+
- ์ฒดํฌ ์ํ๋ฅผ **ยซ๋์ ์ ํ ์ == ์ด ํ์ด์ง ํ ์ยป** ๋ก ๊ณ์ฐํ๋ค โ 1ํ์ด์ง๋ฅผ ์ ๋ ์ ํํ๊ณ
|
|
11
|
+
2ํ์ด์ง๋ก ๋์ด๊ฐ๋ฉด **์๋ฌด๊ฒ๋ ๊ณ ๋ฅด์ง ์์๋๋ฐ ์ผ์ ธ ๋ณด์๋ค.**
|
|
12
|
+
- ๊ทธ ์ํ์์ ์ฒดํฌ๋ฐ์ค๋ฅผ ๋๋ฉด ์ ํ ์งํฉ์ **ํต์งธ๋ก ๋น์ ๋ค** โ ์ฌ์ฉ์์๊ฒ๋ *"์ด ํ์ด์ง ํด์ "*
|
|
13
|
+
๋ก ๋ณด์ด๋ ์กฐ์์ด 1ํ์ด์ง์ ์ ํ์ ๋ง์์ด ์ง์ ๋ค.
|
|
14
|
+
- ์ผ๋ ์ชฝ๋ ํฉ์งํฉ์ด ์๋๋ผ **์นํ**์ด์๋ค โ 2ํ์ด์ง์์ ์ ์ฒด์ ํํ๋ฉด 1ํ์ด์ง ์ ํ๋ถ์ด ์ฌ๋ผ์ก๋ค.
|
|
15
|
+
`Ctrl`/`Cmd` + `A` ๋ ๊ฐ์ ๊ฒฝ๋ก์๋ค.
|
|
16
|
+
|
|
17
|
+
โ ์ ์ฒด์ ํ/ํด์ ์ ๋ฒ์๋ฅผ **ํ์ฌ ํ์ด์ง**๋ก ํ์ ํ๋ค(ํฉ์งํฉยท์ฐจ์งํฉ). ์ฒดํฌ๋ฐ์ค์ ๋ถ์์ ๋ถ๋ชจ๊ฐ
|
|
18
|
+
๋ชจ๋ ํ์ฌ ํ์ด์ง ๊ธฐ์ค์ด ๋์ด, ๋ค๋ฅธ ํ์ด์ง์ ์ ํ๋ถ์ด ์ด ํ์ด์ง์ ํ์๋ก ์์ง ์๋๋ค.
|
|
19
|
+
|
|
20
|
+
โ **๋จ์ผ ํ์ด์ง ์ฌ์ฉ(`totalCount = 0`)์์๋ ๋์์ด ์ข
์ ๊ณผ ์์ ํ ๊ฐ๋ค** โ ํ์ฌ ํ์ด์ง๊ฐ
|
|
21
|
+
๊ณง ์ ์ฒด์ด๋ฏ๋ก ํฉ์งํฉยท์ฐจ์งํฉ์ด ์นํยท์ ์ญ์๊ฑฐ์ ์ผ์นํ๋ค.
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- **์ ํ ์งํฉ์ ์ฝ๊ณ ์ธ ์ ์๋ค** โ ์ข
์ ์๋ ์ ํ ์ํ๊ฐ `private` ์ด๋ผ ์๋น์ฑ์ด ยซํด์ ยป์
|
|
26
|
+
ยซ๋ค๋ฅธ ํ์ด์ง์ ์์ยป์ ๊ตฌ๋ถํ ๋ฐฉ๋ฒ์ด ์์๊ณ , ๊ทธ๋์ ์ถ์ ํ ์๋ฐ์ ์์๋ค.
|
|
27
|
+
- **`selectedRowIds`** *(getter)* โ ํ์ด์ง๋ฅผ ๊ฐ๋ก์ง๋ฌ ๋์ ๋ **๋ชจ๋ ** ์ ํ ์๋ณ์.
|
|
28
|
+
`getSelectedRows()` ๋ ํ์ฌ ํ์ด์ง์ ํ ๊ฐ์ฒด๋ง ์ฃผ๋ฏ๋ก(๊ฐ๊ณ ์์ง ์์ ํ์ ๋ง๋ค ์ ์๋ค)
|
|
29
|
+
*"์ฌ๋ฌ ํ์ด์ง์ ๊ฑธ์ณ ๊ณ ๋ฅธ ๋ค ์ผ๊ด ์ฒ๋ฆฌ"* ์๋ ์ด์ชฝ์ด ํ์ํ๋ค. **์ค๋
์ท**์ด๋ผ ๋๋ ค๋ฐ์
|
|
30
|
+
์งํฉ์ ๊ณ ์ณ๋ ๋ด๋ถ ์ํ๊ฐ ํ๋ค๋ฆฌ์ง ์๋๋ค.
|
|
31
|
+
- **`setSelection(ids)`** โ ์ ํ์ ํต์งธ๋ก ๋์ฒดํ๋ค. ํ์ฌ ํ์ด์ง์ ์๋ ์๋ณ์๋ ๋ฐ๋๋ค.
|
|
32
|
+
โ **๊ฐ์ ์งํฉ์ด๋ฉด ์๋ฌด ์ผ๋ ํ์ง ์๋๋ค** โ `selection-change` ๋ฅผ ๋ฐ์ ์ฑ ์ํ๋ฅผ ๊ฐฑ์ ํ๊ณ
|
|
33
|
+
๋ค์ ์ด๊ฒ์ ๋ถ๋ฅด๋ ๋ฐฐ์ ์ด ์์ฐ์ค๋ฌ์ด๋ฐ, ๋ฌด์กฐ๊ฑด ๋ฐ์์ํค๋ฉด ๊ทธ ์๋ฆฌ๊ฐ ๋ฌดํ ๋ฃจํ๊ฐ ๋๋ค.
|
|
34
|
+
- **`clearSelection()`** โ ๋์ ๋ถ๊น์ง ์ ๋ถ ๋น์ด๋ค. ์ ์ฒด์ ํ ์ฒดํฌ๋ฐ์ค๊ฐ ยซ์ด ํ์ด์งยป ๋ฒ์๊ฐ
|
|
35
|
+
๋๋ฉด์ ์ ์ญ ์๊ฑฐ์ ์๋ฆฌ๊ฐ ์์ด์ก๊ณ , ์ผ๊ด ์ฒ๋ฆฌ ํ ์ฑ์ด ์ํ๋ฅผ ๋๋๋ฆฌ๋ ๊ฒฝ๋ก๊ฐ ์ฌ๊ธฐ๋ค.
|
|
36
|
+
- **`selection-change` detail ์ `selectedIds: string[]` ์ถ๊ฐ** โ `selectedRows`(ํ์ฌ ํ์ด์ง)์
|
|
37
|
+
๋๋ํ ๋์ ์๋ณ์๋ฅผ ์ฃ๋๋ค. ๋ ํ๋์ ๊ธธ์ด๊ฐ ๋ค๋ฅธ ๊ฒ์ด ์๋ฒ ํ์ด์ง์์๋ ์ ์์ด๋ค.
|
|
38
|
+
- **`select-all` ์ด๋ฒคํธ** โ ์ฌ์ฉ์๊ฐ ์ ์ฒด์ ํ ์ฒดํฌ๋ฐ์ค๋ฅผ ์กฐ์ํ๋ค๋ **์๋**๋ฅผ ๋ฐ๋ก ์๋ฆฐ๋ค.
|
|
39
|
+
`selection-change` ๋ง์ผ๋ก๋ *"์ธ ํ์ ๊ณจ๋๋ค"* ์ *"์ ์ฒด์ ํ์ ๋๋ ๋ค"* ๊ฐ ๊ตฌ๋ถ๋์ง ์๋๋ฐ,
|
|
40
|
+
์๋ฒ ํ์ด์ง์์ ํ์๋ ์ฑ์ด *"์กฐ๊ฑด์ ๋ง๋ N๊ฑด ์ ๋ถ"* ๋ฅผ ์ ์ํ ์๋ฆฌ๋ค.
|
|
41
|
+
โ **`scope: 'page' | 'all'` ํ๋๋ ๋์ง ์์๋ค** โ ์ด ์ปดํฌ๋ํธ๋ `'all'` ์ ๋ผ ์ ์๋ค.
|
|
42
|
+
์ ์ญ ์ ์ฒด์ ํ์ ์๋ณ์ ๋ชฉ๋ก์ด ์๋๋ผ **์กฐํ ์กฐ๊ฑด**์ด๋ผ ์ปดํฌ๋ํธ๊ฐ ํํํ ์ ์๋ ๊ฒ์ด ์๋๊ณ ,
|
|
43
|
+
๊ฐ์ด ํ๋๋ฟ์ธ ์ ๋์จ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ชจ๋ฅด๋ ๊ฐ๋
์ ์๋ ์ฒํ๋ ํ๋๊ฐ ๋๋ค.
|
|
44
|
+
|
|
45
|
+
### Changed
|
|
46
|
+
|
|
47
|
+
- **์ ํ ๊ฑด์ ๋ผ๋ฒจ์ด ๋ ์ซ์๋ฅผ ๊ตฌ๋ถํด ์๋ฆฐ๋ค** โ ์ ํ์ด ํ์ด์ง๋ฅผ ๊ฐ๋ก์ง๋ฅด๋ฉด
|
|
48
|
+
`4 selected (1 on this page)` ์ฒ๋ผ ๋์ ๊ณผ ์ด ํ์ด์ง ๋ชซ์ ํจ๊ป ๋ธ๋ค. ํ ํ์ด์ง ์์ ๋จธ๋ฌด๋
|
|
49
|
+
๋์์๋ ์ข
์ ๋๋ก `3 selected` ๋ค. ๋ ์ซ์๊ฐ ๋ค๋ฅด๋ค๋ ์ฌ์ค ์์ฒด๊ฐ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ผ ํ๋ค.
|
|
50
|
+
- **์ ํ ๊ฑด์ยทํ์ด์ง ํฌ๊ธฐ ๋ฌธ๊ตฌ๊ฐ ๋ก์ผ์ผ ๋ ์ง์คํธ๋ฆฌ๋ก ์ด์ฃผํ๋ค**(`selected` ยท
|
|
51
|
+
`selectedAcrossPages` ยท `rowsPerPage`). `0.11.0` ์ ์ด์ฃผ๊ฐ ์ค์ฒฉ ํ
ํ๋ฆฟ ์์ ๋ ๊ฑด์
|
|
52
|
+
๋จ๊ฒจ ๋์ด, ๋ค๋ฅธ ๋ฌธ๊ตฌ๊ฐ ์ ๋ถ ์์ด์ธ ํ๊ฒฝ์์ ์ด ๋๋ง ํ๊ตญ์ด๋ก ๋์๋ค.
|
|
53
|
+
|
|
54
|
+
## [0.11.0] - 2026-08-04
|
|
55
|
+
|
|
56
|
+
### Fixed
|
|
57
|
+
|
|
58
|
+
- ๐ด**`LICENSE` ํ์ผ์ด ์์ด ๊ฒ์๋ณธ์ MIT ์๋ฌธ์ด ๋น ์ ธ ์์๋ค.** `package.json` ์ด
|
|
59
|
+
`"license": "MIT"` ๋ฅผ ์ ์ธํ๊ณ `files` ์ `LICENSE` ๋ฅผ ๋์ดํ์ง๋ง ํ์ผ ์์ฒด๊ฐ ์์๋ค
|
|
60
|
+
โ `0.10.0` ๊น์ง์ tarball ์ ๋ผ์ด์ ์ค ์๋ฌธ์ด ๋ค์ด ์์ง ์๋ค. MIT ๋ *"์ ์ ์๊ถ ๊ณ ์ง์
|
|
61
|
+
์ด ํ๊ฐ ๊ณ ์ง๋ฅผ ๋ชจ๋ ์ฌ๋ณธ์ ํฌํจ์์ผ์ผ ํ๋ค"* ๋ ์กฐ๊ฑด๋ถ ํ๊ฐ์ด๋ฏ๋ก, ์๋ฌธ ๋๋ฝ์ ๊ทธ ์กฐ๊ฑด์
|
|
62
|
+
์ค์ค๋ก ์ดํํ์ง ๋ชปํ ์ํ์๋ค. โ `npm view โฆ license` ๊ฐ `MIT` ๋ฅผ ๋ณด์ฌ ์ฃผ๋ ๊ฒ์
|
|
63
|
+
`package.json` ํ๋๋ฅผ ์ฝ์ ๊ฒ์ด์ง **์๋ฌธ์ด ๋ฐฐํฌ๋๋ค๋ ๋ป์ด ์๋๋ค.**
|
|
64
|
+
|
|
65
|
+
### Changed
|
|
66
|
+
|
|
67
|
+
- **`u-rich-table` ์ `_id` ๋ถ์ฌ ๊ฒฝ๊ณ ๊ฐ ์์ด๋ก ์ด์ฃผํ๋ค** โ ๊ฐ๋ฐ์ ๋๋ฉด ์ง๋จ์ด๋ฏ๋ก ๋ก์ผ์ผ
|
|
68
|
+
๋ ์ง์คํธ๋ฆฌ์ ๋ฃ์ง ์๋๋ค(์ฌ์ฉ์๊ฐ ์ฝ๋ ๋ฌธ์์ด์ด ์๋๋ค).
|
|
69
|
+
|
|
70
|
+
- โ **ํ ๋ฌธ๊ตฌ๊ฐ ยซ์์ด ๊ธฐ๋ณธ + ๋ก์ผ์ผ ๋ ์ง์คํธ๋ฆฌยป๋ก ์ด์ฃผํ๋ค** โ ๊ธฐ๋ณธ๊ฐ 7๊ฑด์ด ํ๊ตญ์ด ๋ฆฌํฐ๋ด์ด์๋ค
|
|
71
|
+
(`u-rich-table` 6 ยท `u-simple-sheet` 1).
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
import { Locale } from '@iyulab/components';
|
|
75
|
+
import { messages } from '@iyulab/data-components';
|
|
76
|
+
|
|
77
|
+
Locale.set('ko'); // ๊ฒ์ฆ ๋ฉ์์ง์ ํจ๊ป ์ ํ๋๋ค
|
|
78
|
+
messages.register('ja', { empty: 'ใใผใฟใชใ' }); // ์ธ์ด๋ฅผ ๋ํ๊ฑฐ๋ ๋ฌธ๊ตฌ๋ฅผ ๋ฎ๋๋ค
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
โ **ํ๊ตญ์ด ํ๊ฒฝ์ ์ข
์ ๊ณผ ๊ฐ์ ๋ฌธ๊ตฌ๋ฅผ ๋ณธ๋ค**(๋ด์ฅ `ko` ยท `ko-KR` โ `ko`).
|
|
82
|
+
โ **์๋น์๊ฐ ์ค ๊ฐ์ ์ฌ์ ํ ์ด๊ธด๋ค** โ `emptyMessage` ๋ฑ ํ๋กํผํฐ ๊ณ์ฝ์ ๊ทธ๋๋ก๋ค.
|
|
83
|
+
|
|
84
|
+
โ
**๊ธฐ๋ณธ๊ฐ์ ยซ๋น์ฐ๊ณ ยป ๋ ๋์์ ํด์ํ๋ค.** ํ๋กํผํฐ ์ด๊ธฐ๊ฐ์ ๋ฌธ์์ด์ ๋ฐ์ผ๋ฉด **์์ฑ ์์ ์
|
|
85
|
+
๋ก์ผ์ผ์ ๊ณ ์ **๋ผ ๋์ค์ `Locale.set()` ์ ๋ถ๋ฌ๋ ์ด๋ฏธ ๋ง๋ค์ด์ง ํ๋ ๋ฐ๋ผ์ค์ง ์๋๋ค.
|
|
86
|
+
โ **๋ฐ๋ผ์ ํ๋กํผํฐ๋ฅผ ์ฝ์ผ๋ฉด ๊ธฐ๋ณธ ์ํ์์ `''` ๊ฐ ๋์จ๋ค**(์ข
์ ์๋ ํ๊ตญ์ด ๋ฆฌํฐ๋ด).
|
|
87
|
+
ํ๋ฉด ๋ฌธ๊ตฌ๋ ๋ ๋ ๊ฒฐ๊ณผ๊ฐ ๊ณ์ฝ์ด๋ค.
|
|
88
|
+
|
|
89
|
+
โ
๊ฒ์ฆ ๋ฉ์์ง(`ํ์ ํญ๋ชฉ์
๋๋ค`)๋ **`@iyulab/components` ์ ํค์
**์ ์ด๋ค
|
|
90
|
+
(`Locale.getValue('valueMissing')` ยท 14๋ก์ผ์ผ). ๊ฐ์ ๋ฌธ์ฅ์ ๋ ๊ณณ์ ๋์ง ์๋๋ค.
|
|
91
|
+
|
|
92
|
+
### Requires
|
|
93
|
+
|
|
94
|
+
- `@iyulab/components >= 1.23.0` (`Locale.namespace`).
|
|
95
|
+
|
|
96
|
+
### Added
|
|
97
|
+
|
|
98
|
+
- **`u-simple-sheet` ์ ํ ๋์ดยท์ฌ๋ฐฑยท๊ธ์ ํฌ๊ธฐ๋ฅผ ์๋น์๊ฐ ์ ํ ์ ์๋ค** โ ์กฐ์ ์ 6์ข
.
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
--dc-row-height 24px ์
height ยท line-height (๋ ๋ค)
|
|
102
|
+
--dc-cell-padding-block 0px ์
ยท ํธ์ง ์
๋ ฅ์ ์ธ๋ก ์ฌ๋ฐฑ (ํ ๋์ด์ ๊ฐ์ฐ)
|
|
103
|
+
--dc-cell-padding-inline 6px ใ ๊ฐ๋ก ์ฌ๋ฐฑ
|
|
104
|
+
--dc-font-size 13px ๋ณธ๋ฌธ ์
ยท ํธ์ง ์
๋ ฅ ยท ๋๋กญ๋ค์ด ํญ๋ชฉ
|
|
105
|
+
--dc-header-font-size 12px ์ด ๋จธ๋ฆฌ
|
|
106
|
+
--dc-header-font-weight 600 ใ
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
์ข
์ ์๋ ์น์๊ฐ ์ ๋ถ ๋ฆฌํฐ๋ด์ด๋ผ, ํ ํ๋ฉด์ ํ๊ฐ ์ฌ๋ฟ์ผ ๋ **์ํธ๋ง ๋ค๋ฅธ ๋์ด๋ก ๋จ์๋
|
|
110
|
+
๋ง์ถ ๋ฐฉ๋ฒ์ด ์์๋ค**(๊ณต๊ฐ API ์ ์น์ ๋
ธ๋ธ 0๊ฑด ยท `part` 0๊ฑด). 0.10.0 ์ด ์ฐ ์ ์ถ๊ณผ ๊ฐ์
|
|
111
|
+
์๋ฆฌ์ด๊ณ , ์์ ๋ง์ถ๊ณ ๋์์ผ ๋์ด ์ฐจ์ด๊ฐ ๋๋ฌ๋ ํํ๋ค.
|
|
112
|
+
|
|
113
|
+
โ **ํ ๋์ด์ `line-height` ๋ ํ ํ ํฐ์ด ์ ํ๋ค.** ๋ฐ๋ก ์ด๋ฉด ์๋น์๊ฐ ํ์ชฝ๋ง ๋ฐ๊ฟ ๊ธ์๊ฐ
|
|
114
|
+
์ธ๋ก๋ก ์ด๊ธ๋๋ค โ ๊ทธ ๋ฌถ์์ด ์ด ์ถ์ ์ ์ผํ ์ ์ฝ์ด๋ค.
|
|
115
|
+
|
|
116
|
+
โ **์ ์ถ๊ณผ ๋ฌ๋ฆฌ ์ญํ ํ ํฐ์์ ํ์ํ์ง ์๋๋ค** โ ์ญํ ์ธต์ ์น์ ์ถ์ด ์๋ค. ๊ทธ๋์
|
|
117
|
+
`:host` ๋ฆฌํฐ๋ด ๊ธฐ๋ณธ๊ฐ์ด๊ณ , ์๋น์๋ **์์ ์ ํ์**๋ก ๋ฎ๋๋ค(`:root` ๋ ๋ฟ์ง ์๋๋ค).
|
|
118
|
+
|
|
119
|
+
โ **๊ธฐ๋ณธ ๋ ๋๋ ๋ณํ์ง ์๋๋ค.** ์ ์ธํ์ง ์์ผ๋ฉด ์ข
์ ๊ฐ์ผ๋ก ๊ทธ๋ ค์ง๋ค.
|
|
120
|
+
|
|
121
|
+
โ **์ ์ธ๊ฐ๊ณผ ์ฝํ๋ ํ ๋์ด๋ 1.5px ๋ค๋ฅด๋ค** โ `border-collapse` ๋ก ์ ํ ํ
๋๋ฆฌ๊ฐ ์ฌ์ฉ๊ฐ์
|
|
122
|
+
๋ํด์ง๋ค(`24px` ์ ์ธ โ `25.5px` ๋ก ์ฝํ). 32px ๋ก ๋ง์ถ๋ ค๋ฉด `30.5px` ๋ฅผ ์ ์ธํ๋ค.
|
|
123
|
+
|
|
124
|
+
`tests/browser/simple-sheet-density.browser.test.ts` ๊ฐ **์ค์ ํฌ๋ก๋ฏธ์ ๊ณ์ฐ๊ฐ์ผ๋ก** ํจ๋ ฅ์
|
|
125
|
+
์ฐ๋ค โ ์์ค ๋์กฐ๋ ยซ์ ํ ์์ยป๋ง ์ฆ๋ช
ํ๊ณ , ๋ฌธ์ ์ค์ฝํ ์ ์ธ์ด ์๋์ `:host` ๋ฅผ ์ด๊ธฐ๋์ง๋
|
|
126
|
+
์บ์ค์ผ์ด๋ ๋ฌธ์ ๋ผ ๊ณ์ฐ๊ฐ์ผ๋ก๋ง ๊ฐ๋ฆฐ๋ค.
|
|
127
|
+
|
|
3
128
|
## [0.10.0] - 2026-08-03
|
|
4
129
|
|
|
5
130
|
### Added
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 iyulab
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -190,6 +190,40 @@ u-rich-table { --dc-icon-color: #B0B0B0; }
|
|
|
190
190
|
โ **`0.10.0` ์ ์กฐ์ ์ ๋ง ์ฝ๋๋ค โ ๊ธฐ๋ณธ ๋ ๋๋ ๋ณํ์ง ์์ต๋๋ค.** ๋ค์ฏ ๋จ์ด ์ ๋ถ
|
|
191
191
|
`--u-txt-color-weak` ์์ ํ์๋๋ฉฐ, ๋คํฌ ๋์๋ ๊ทธ ์ญํ ํ ํฐ์ด ์ด๋ฏธ ๊ฐ๊ณ ์์ต๋๋ค.
|
|
192
192
|
|
|
193
|
+
### ์ํธ ๋ฐ๋ยทํ์ดํฌ ์กฐ์ (`u-simple-sheet` ยท 0.11.0~)
|
|
194
|
+
|
|
195
|
+
ํ ํ๋ฉด์ ํ๊ฐ ์ฌ๋ฟ์ผ ๋ **ํ ๋์ด๋ฅผ ์๋ก ๋ง์ถ๊ธฐ ์ํ** ์กฐ์ ์ ์
๋๋ค. ์ ์ถ(์)๊ณผ ๊ฐ์
|
|
196
|
+
์ด์ ๋ก ์ด๋ ธ์ต๋๋ค โ ์ด๋ ๋์ด๊ฐ ์ณ์์ง๋ ์๋น์๊ฐ ์ ํ ์ผ์ธ๋ฐ, ์ข
์ ์๋ ์น์๊ฐ ์ ๋ถ
|
|
197
|
+
๋ฆฌํฐ๋ด์ด๋ผ ์ ํ ๋ฐฉ๋ฒ์ด ์์์ต๋๋ค.
|
|
198
|
+
|
|
199
|
+
| ํ ํฐ | ๊ธฐ๋ณธ๊ฐ | ๋ฌด์์ ์ ํ๋ |
|
|
200
|
+
|---|---|---|
|
|
201
|
+
| `--dc-row-height` | `24px` | ์
`height` ์ `line-height` **๋ ๋ค** |
|
|
202
|
+
| `--dc-cell-padding-block` | `0px` | ์
ยทํธ์ง ์
๋ ฅ์ ์ธ๋ก ์ฌ๋ฐฑ (ํ ๋์ด์ **๊ฐ์ฐ**) |
|
|
203
|
+
| `--dc-cell-padding-inline` | `6px` | ใ ๊ฐ๋ก ์ฌ๋ฐฑ |
|
|
204
|
+
| `--dc-font-size` | `13px` | ๋ณธ๋ฌธ ์
ยท ํธ์ง ์
๋ ฅ ยท ๋๋กญ๋ค์ด ํญ๋ชฉ |
|
|
205
|
+
| `--dc-header-font-size` | `12px` | ์ด ๋จธ๋ฆฌ |
|
|
206
|
+
| `--dc-header-font-weight` | `600` | ใ |
|
|
207
|
+
|
|
208
|
+
```css
|
|
209
|
+
/* โ ์์ ์ ํ์๋ก ๊ฒจ๋๋๋ค โ :root ๋ ๋ฟ์ง ์์ต๋๋ค(์๋ ์ฐธ์กฐ) */
|
|
210
|
+
u-simple-sheet {
|
|
211
|
+
--dc-row-height: 30.5px; /* ์ฝํ๋ ํ ๋์ด 32px */
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
โ **`:root` ๋ก๋ ๋ฟ์ง ์์ต๋๋ค.** ์ปค์คํ
ํ๋กํผํฐ ์์๊ฐ์ ์๋ ๋ฃจํธ์ `:host` ์ ์ธ์
|
|
216
|
+
์ง๋๋ค. ์ ์ถ๊ณผ ๋ฌ๋ฆฌ ์ด ์ฌ์ฏ์ `:host` ์ ๋ฆฌํฐ๋ด ๊ธฐ๋ณธ๊ฐ์ ๊ฐ๊ณ ์์ผ๋ฏ๋ก(์ญํ ์ธต์ ์น์
|
|
217
|
+
์ถ์ด ์์ด ํ์ํ ๊ณณ์ด ์์ต๋๋ค) **์์ ์ ํ์**(`u-simple-sheet { โฆ }`)๋ก ์ ์ธํ์ญ์์ค.
|
|
218
|
+
|
|
219
|
+
โ **์ ์ธ๊ฐ๊ณผ ยซ์ฝํ๋ยป ํ ๋์ด๋ 1.5px ๋ค๋ฆ
๋๋ค.** `border-collapse` ๋ก ์ ํ ํ
๋๋ฆฌ๊ฐ
|
|
220
|
+
์ฌ์ฉ๊ฐ์ ๋ํด์ง๋๋ค โ ๊ธฐ๋ณธ `24px` ์ ์ธ์ด `25.5px` ๋ก ์ฝํ๋๋ค. 32px ๋ก ๋ง์ถ๋ ค๋ฉด
|
|
221
|
+
`30.5px` ๋ฅผ ์ ์ธํ์ญ์์ค. (๊ฐ์ ์ด์ ๋ก **๋น ํ์ ๋ฐ์ดํฐ ํ๋ณด๋ค 1.5px ๋ฎ์ต๋๋ค** โ
|
|
222
|
+
`0.11.0` ์ด์ ๋ถํฐ ๊ทธ๋ฌ๊ณ , ๊ต์ ํ๋ฉด ๊ธฐ๋ณธ ๋ ๋๊ฐ ๋ฐ๋๋ฏ๋ก ์ด ๋ฆด๋ฆฌ์ค์์๋ ๋์์ต๋๋ค.)
|
|
223
|
+
|
|
224
|
+
โ **`0.11.0` ๋ ์กฐ์ ์ ๋ง ์ฝ๋๋ค** โ ์ ์ธํ์ง ์์ผ๋ฉด ์ข
์ ๊ณผ ๊ฐ์ ๊ฐ์ผ๋ก ๊ทธ๋ ค์ง๋๋ค.
|
|
225
|
+
์ด ์ฌ์ฏ์ `u-simple-sheet` ์ ์ฉ์
๋๋ค(`u-data-view`ยท`u-rich-table` ์ ์ฝ์ง ์์ต๋๋ค).
|
|
226
|
+
|
|
193
227
|
### ์๋ ค์ง ์ ์ฝ
|
|
194
228
|
|
|
195
229
|
- **ํ๋ฉด ๋์ด๋ฅผ ๋ปํ๋ ํ ํฐ์ด ์์ต๋๋ค** โ ๋ฐฐ๊ฒฝ ์ญํ ํ ํฐ์ ์ํธ์์ฉ ์ํ ์ด๋ฆ
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/decorateMetadata.js";
|
|
2
2
|
import __decorate from "../../_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/decorate.js";
|
|
3
|
+
import { messages } from "../../utilities/messages.js";
|
|
3
4
|
import { styles } from "./USimpleSheet.styles.js";
|
|
4
5
|
import { html } from "lit";
|
|
5
6
|
import { customElement, property, state } from "lit/decorators.js";
|
|
@@ -25,7 +26,7 @@ var USimpleSheet = class USimpleSheet extends UElement {
|
|
|
25
26
|
this.rows = 20;
|
|
26
27
|
this.cols = 10;
|
|
27
28
|
this.readonly = false;
|
|
28
|
-
this.noMatchMessage = "
|
|
29
|
+
this.noMatchMessage = "";
|
|
29
30
|
this._sel = null;
|
|
30
31
|
this._editing = null;
|
|
31
32
|
this._editVal = "";
|
|
@@ -612,7 +613,7 @@ var USimpleSheet = class USimpleSheet extends UElement {
|
|
|
612
613
|
</div>
|
|
613
614
|
` : noMatch && isStrict ? html`
|
|
614
615
|
<div class="cell-dropdown">
|
|
615
|
-
<div class="dropdown-empty">${this.noMatchMessage}</div>
|
|
616
|
+
<div class="dropdown-empty">${this.noMatchMessage || messages.text("noMatch")}</div>
|
|
616
617
|
</div>
|
|
617
618
|
` : ""}
|
|
618
619
|
` : this._formatValue(value, c, r)}
|
|
@@ -18,6 +18,25 @@ var baseStyles = css`
|
|
|
18
18
|
--dc-header-color: var(--u-txt-color-weak, #757575); /* ์ด ๋จธ๋ฆฌ ยท ํ ๋จธ๋ฆฌ */
|
|
19
19
|
--dc-empty-color: var(--u-txt-color-weak, #757575); /* ๋น ์ํ ์๋ด๋ฌธ */
|
|
20
20
|
--dc-readonly-color: var(--u-txt-color-weak, #757575); /* ์ฝ๊ธฐ ์ ์ฉ ์
*/
|
|
21
|
+
|
|
22
|
+
/* โโ ์๋น์ ์กฐ์ ์ โ ๋ฐ๋ยทํ์ดํฌ โโ
|
|
23
|
+
โ
์ ์ถ(์)๊ณผ ๊ฐ์ ์ด์ ๋ก ์ด์๋ค. ํ ์ ํ ์์ ํ๊ฐ ์ฌ๋ฟ์ผ ๋ ยซ์ด๋ ๋์ด๊ฐ ์ณ์๊ฐยป๋
|
|
24
|
+
์๋น์๊ฐ ์ ํ ์ผ์ธ๋ฐ, ์ด ์ปดํฌ๋ํธ๋ ์น์๊ฐ ์ ๋ถ ๋ฆฌํฐ๋ด์ด๋ผ ์ ํ ๋ฐฉ๋ฒ์ด ์์๋ค.
|
|
25
|
+
โ **ํ ๋์ด์ line-height ๋ ํ ํ ํฐ์ด ์ ํ๋ค.** ๋ฐ๋ก ์ด๋ฉด ์๋น์๊ฐ ํ์ชฝ๋ง ๋ฐ๊ฟ
|
|
26
|
+
๊ธ์๊ฐ ์ธ๋ก๋ก ์ด๊ธ๋๋ค โ ๊ทธ ๋ฌถ์์ด ์ด ์ถ์ ์ ์ผํ ์ ์ฝ์ด๋ค.
|
|
27
|
+
โ **์ฌ๋ฐฑ ์ถ์ ยซ๊ฐ์ฐยป์ด๋ค**: ์ค์ ํ ๋์ด = --dc-row-height + 2ร--dc-cell-padding-block.
|
|
28
|
+
๊ธฐ๋ณธ๊ฐ์ด 0 ์ด๋ผ ์ ์ธํ์ง ์์ผ๋ฉด ์ข
์ ๊ณผ ๊ฐ๋ค.
|
|
29
|
+
โ **์ ์ถ๊ณผ ๋ฌ๋ฆฌ ์ญํ ํ ํฐ์์ ํ์ํ์ง ์๋๋ค** โ ์ญํ ์ธต์ ์น์ ์ถ์ด ์๋ค.
|
|
30
|
+
๊ทธ๋์ ํด๋ฐฑ์ด ์๋๋ผ :host ๋ฆฌํฐ๋ด ๊ธฐ๋ณธ๊ฐ์ด๊ณ , ์๋น์๋ **์์ ์ ํ์**๋ก ๋ฎ๋๋ค
|
|
31
|
+
(:host ์ ์ธ์ ์์๊ฐ์ ์ด๊ธฐ๋ฏ๋ก :root ๋ก๋ ๋ฟ์ง ์๋๋ค).
|
|
32
|
+
โ **์ด ์ปดํฌ๋ํธ๊ฐ ยซ์ฝ๋ยป ๋จ๋ง ์ ์ธํ๋ค** โ ์ ์ถ๊ณผ ๊ฐ์ ๊ท์น์ด๋ค. */
|
|
33
|
+
--dc-row-height: 24px; /* ์
height ยท line-height (๋ฌถ์) */
|
|
34
|
+
--dc-cell-padding-block: 0px; /* ์
ยท ํธ์ง ์
๋ ฅ์ ์ธ๋ก ์ฌ๋ฐฑ (๊ฐ์ฐ) */
|
|
35
|
+
--dc-cell-padding-inline: 6px; /* ใ ๊ฐ๋ก ์ฌ๋ฐฑ */
|
|
36
|
+
--dc-font-size: 13px; /* ๋ณธ๋ฌธ ์
ยท ํธ์ง ์
๋ ฅ ยท ๋๋กญ๋ค์ด ํญ๋ชฉ */
|
|
37
|
+
--dc-header-font-size: 12px; /* ์ด ๋จธ๋ฆฌ */
|
|
38
|
+
--dc-header-font-weight: 600; /* ใ */
|
|
39
|
+
|
|
21
40
|
display: block;
|
|
22
41
|
width: 100%;
|
|
23
42
|
height: 400px;
|
|
@@ -78,8 +97,8 @@ var baseStyles = css`
|
|
|
78
97
|
background: var(--u-neutral-100, #F5F5F5);
|
|
79
98
|
padding: 4px 8px;
|
|
80
99
|
text-align: center;
|
|
81
|
-
font-size:
|
|
82
|
-
font-weight:
|
|
100
|
+
font-size: var(--dc-header-font-size);
|
|
101
|
+
font-weight: var(--dc-header-font-weight);
|
|
83
102
|
color: var(--dc-header-color);
|
|
84
103
|
border-right: 1px solid var(--u-border-color, #E0E0E0);
|
|
85
104
|
border-bottom: 2px solid var(--u-border-color, #E0E0E0);
|
|
@@ -160,18 +179,20 @@ var baseStyles = css`
|
|
|
160
179
|
|
|
161
180
|
/* Data cells */
|
|
162
181
|
.cell {
|
|
163
|
-
padding:
|
|
182
|
+
padding: var(--dc-cell-padding-block) var(--dc-cell-padding-inline);
|
|
164
183
|
border-right: 1px solid var(--u-border-color-weak, #EEEEEE);
|
|
165
184
|
border-bottom: 1px solid var(--u-border-color-weak, #EEEEEE);
|
|
166
|
-
font-size:
|
|
185
|
+
font-size: var(--dc-font-size);
|
|
167
186
|
color: var(--u-txt-color, #212121);
|
|
168
187
|
min-width: 80px;
|
|
169
188
|
overflow: hidden;
|
|
170
189
|
text-overflow: ellipsis;
|
|
171
190
|
white-space: nowrap;
|
|
172
191
|
cursor: cell;
|
|
173
|
-
height
|
|
174
|
-
|
|
192
|
+
/* โ height ๋ ยซ๋น ์
ยป์ ์ ํ๋ค โ ๋ด์ฉ์ด ์๋ ์
์ ๋์ด๋ line-height ๊ฐ ๋ง๋ ๋ค.
|
|
193
|
+
๋ ์ค ํ๋๋ง ๋ฐฐ์ ํ๋ฉด ๋ฐ์ดํฐ ํ๊ณผ ๋น ํ์ ๋์ด๊ฐ ๊ฐ๋ฆฐ๋ค(๋ค๊ฑฐํฐ๋ธ ์ปจํธ๋กค์ด ์ก์ ์๋ฆฌ). */
|
|
194
|
+
height: var(--dc-row-height);
|
|
195
|
+
line-height: var(--dc-row-height);
|
|
175
196
|
vertical-align: middle;
|
|
176
197
|
position: relative;
|
|
177
198
|
box-sizing: border-box;
|
|
@@ -206,8 +227,9 @@ var baseStyles = css`
|
|
|
206
227
|
border: none;
|
|
207
228
|
outline: 2px solid var(--u-blue-500, #2196F3);
|
|
208
229
|
outline-offset: -1px;
|
|
209
|
-
|
|
210
|
-
|
|
230
|
+
/* โ ์
๊ณผ ยซ๊ฐ์ ๊ฐยป์ด์ด์ผ ํ๋ค โ ์ด๊ธ๋๋ฉด ํธ์ง ์ง์
์๊ฐ ๊ธ์๊ฐ ํ๋ค. */
|
|
231
|
+
padding: var(--dc-cell-padding-block) var(--dc-cell-padding-inline);
|
|
232
|
+
font-size: var(--dc-font-size);
|
|
211
233
|
font-family: inherit;
|
|
212
234
|
color: var(--u-txt-color, #212121);
|
|
213
235
|
background: var(--u-bg-color, #FFFFFF);
|
|
@@ -235,7 +257,8 @@ var baseStyles = css`
|
|
|
235
257
|
|
|
236
258
|
.dropdown-item {
|
|
237
259
|
padding: 4px 8px;
|
|
238
|
-
|
|
260
|
+
/* ์
๊ฐ์ ํ๋ณด๋ฅผ ๋ณด์ด๋ ์๋ฆฌ๋ค โ ๋ณธ๋ฌธ ๊ธ์ ์ถ์ ๋ฐ๋ฅธ๋ค. */
|
|
261
|
+
font-size: var(--dc-font-size);
|
|
239
262
|
color: var(--u-txt-color, #212121);
|
|
240
263
|
cursor: pointer;
|
|
241
264
|
white-space: nowrap;
|
|
@@ -40,6 +40,35 @@ export declare class URichTable extends LitElement {
|
|
|
40
40
|
revertRow(_rowId: string): void;
|
|
41
41
|
setRowError(rowId: string, message: string): void;
|
|
42
42
|
clearRowError(rowId: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* ์ ํ๋ ํ์ **์๋ณ์ ์งํฉ** โ ํ์ด์ง๋ฅผ ๊ฐ๋ก์ง๋ฌ ๋์ ๋ ์ ๋ถ.
|
|
45
|
+
*
|
|
46
|
+
* `getSelectedRows()` ๋ ํ์ฌ ํ์ด์ง์ ํ ๊ฐ์ฒด๋ง ๋๋ ค์ฃผ๋ฏ๋ก(๊ฐ๊ณ ์์ง ์์ ํ์ ๋ง๋ค ์ ์๋ค)
|
|
47
|
+
* *"์ฌ๋ฌ ํ์ด์ง์ ๊ฑธ์ณ ๊ณ ๋ฅธ ๋ค ์ผ๊ด ์ฒ๋ฆฌ"* ์๋ ์ด์ชฝ์ด ํ์ํ๋ค.
|
|
48
|
+
*
|
|
49
|
+
* โ **์ค๋
์ท์ด๋ค.** ๋ด๋ถ ์งํฉ์ ๊ทธ๋๋ก ๋๊ธฐ๋ฉด `ReadonlySet` ์ด ํ์
์์ค ์ฝ์์ผ ๋ฟ์ด๋ผ
|
|
50
|
+
* JS ์๋น์๊ฐ `add` ๋ก ๋ด๋ถ ์ํ๋ฅผ **๊ฐฑ์ ์ ํธ ์์ด** ๋ง๊ฐ๋จ๋ฆด ์ ์๋ค. ๋ณต์ ๋น์ฉ์
|
|
51
|
+
* ์ ํ ํฌ๊ธฐ์ ๋น๋กํ๊ณ ๋ฌด์ํ ์์ค์ด๋ค.
|
|
52
|
+
*/
|
|
53
|
+
get selectedRowIds(): ReadonlySet<string>;
|
|
54
|
+
/**
|
|
55
|
+
* ์ ํ์ **ํต์งธ๋ก ๋์ฒด**ํ๋ค โ ํ์ด์ง๋ฅผ ๊ฐ๋ก์ง๋ฅด๋ ๋์ ๋ถ๊น์ง.
|
|
56
|
+
*
|
|
57
|
+
* ์ฑ์ด ์๊ธฐ ์ํ๋ฅผ ์ ๋ณธ์ผ๋ก ์ผ๋ ๊ฒฝ์ฐ(์ธ๋ถ ์ ์ฅยท๋ณต์, ํํฐ ๋ณ๊ฒฝ ์ ์ ๋ฆฌ)์ ์ง์
์ ์ด๋ค.
|
|
58
|
+
* ํ์ฌ ํ์ด์ง์ ์๋ ์๋ณ์๋ฅผ ๋ฃ์ด๋ ๋๋ค โ ๊ทธ ํ์ด์ง๋ก ์ด๋ํ๋ฉด ์ ํ๋ ๊ฒ์ผ๋ก ๋ ๋๋๋ค.
|
|
59
|
+
*
|
|
60
|
+
* โ **๊ฐ์ ์งํฉ์ด๋ฉด ์๋ฌด ์ผ๋ ํ์ง ์๋๋ค.** ์ฑ์ด `selection-change` ๋ฅผ ๋ฐ์ ์๊ธฐ ์ํ๋ฅผ
|
|
61
|
+
* ๊ฐฑ์ ํ๊ณ ๋ค์ ์ด๊ฒ์ ๋ถ๋ฅด๋ ๊ฒ์ด ์์ฐ์ค๋ฌ์ด ๋ฐฐ์ ์ธ๋ฐ, ๋ฌด์กฐ๊ฑด ๋ฐ์์ํค๋ฉด ๊ทธ ์๋ฆฌ๊ฐ
|
|
62
|
+
* **๋ฌดํ ๋ฃจํ**๊ฐ ๋๋ค.
|
|
63
|
+
*/
|
|
64
|
+
setSelection(ids: Iterable<string>): void;
|
|
65
|
+
/**
|
|
66
|
+
* ์ ํ์ **์ ๋ถ** ๋น์ด๋ค โ ํ์ด์ง๋ฅผ ๊ฐ๋ก์ง๋ฅด๋ ๋์ ๋ถ๊น์ง.
|
|
67
|
+
*
|
|
68
|
+
* ์ ์ฒด์ ํ ์ฒดํฌ๋ฐ์ค๋ ยซ์ด ํ์ด์งยป๋ง ๋ค๋ฃจ๋ฏ๋ก ์ ์ญ ์๊ฑฐ์ ์๋ฆฌ๊ฐ ์๋ค. ์ผ๊ด ์ฒ๋ฆฌ๋ฅผ ๋๋ธ ๋ค
|
|
69
|
+
* ์ฑ์ด ์ํ๋ฅผ ๋๋๋ฆฌ๋ ๊ฒฝ๋ก๊ฐ ์ฌ๊ธฐ๋ค. `selection-change` ๋ฅผ ๋ฐ์์ํจ๋ค.
|
|
70
|
+
*/
|
|
71
|
+
clearSelection(): void;
|
|
43
72
|
/**
|
|
44
73
|
* ํ์ ์๋ณ์. ์ ํยทํ์ฅยทํ ์ค๋ฅ ์ํ๊ฐ ์ ๋ถ ์ด ๊ฐ์ผ๋ก ์ถ์ ๋๋ค.
|
|
45
74
|
*
|
|
@@ -52,8 +81,24 @@ export declare class URichTable extends LitElement {
|
|
|
52
81
|
private _rowId;
|
|
53
82
|
private _warnedMissingRowId;
|
|
54
83
|
private _warnMissingRowId;
|
|
84
|
+
/**
|
|
85
|
+
* **ํ์ฌ ํ์ด์ง์** ์ ํ๋ ํ. ์๋ฒ ํ์ด์ง์์ ๋ค๋ฅธ ํ์ด์ง์ ์ ํ๋ถ์ ์ฌ๊ธฐ ์๋ค โ
|
|
86
|
+
* ์ด ์ปดํฌ๋ํธ๊ฐ ๊ฐ๊ณ ์์ง ์์ ํ์ ๋๋ ค์ค ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
87
|
+
* ํ์ด์ง๋ฅผ ๊ฐ๋ก์ง๋ฅด๋ ์ ํ ์งํฉ์ด ํ์ํ๋ฉด {@link selectedRowIds} ๋ฅผ ์ด๋ค.
|
|
88
|
+
*/
|
|
55
89
|
getSelectedRows(): Record<string, unknown>[];
|
|
90
|
+
/** ์ด ํ์ด์ง ํ๋ค์ ์๋ณ์. ์ ์ฒด์ ํ/ํด์ ๊ฐ ยซ์ด ํ์ด์งยป ๋ฒ์์์ ์ ์ํ๋ ๊ฐ์ด๋ค. */
|
|
91
|
+
private _pageRowIds;
|
|
92
|
+
/** ํ์ฌ ํ์ด์ง์์ ์ ํ๋ ํ ์ โ ์ ์ฒด์ ํ ์ฒดํฌ๋ฐ์ค์ ยซ๋ถ์ยป. */
|
|
93
|
+
private get _selectedOnPage();
|
|
56
94
|
render(): TemplateResult;
|
|
95
|
+
/**
|
|
96
|
+
* โ **๋ ์ซ์๋ฅผ ์์ง ์๋๋ค.** ์ฒดํฌ๋ฐ์ค๋ ยซ์ด ํ์ด์งยป๋ฅผ ์ผ๊ณ ๋๋ฏ๋ก ๊ทธ ์ํ๋ ํ์ด์ง ๊ธฐ์ค์ด๊ณ ,
|
|
97
|
+
* ๋ผ๋ฒจ์ ๊ฑด์๋ ํ์ด์ง๋ฅผ ๊ฐ๋ก์ง๋ฅด๋ **๋์ **์ด๋ค. ์ข
์ ์๋ ๋ถ์๋ง ๋์ ์ด๊ณ ๋ถ๋ชจ๊ฐ ํ์ด์ง๋ผ
|
|
98
|
+
* ๋ค๋ฅธ ํ์ด์ง์ ์ ํ๋ถ์ด ์ด ํ์ด์ง์ ์ฒดํฌ ์ํ๋ก ์์ด ๋์๋ค โ ํ์ด์ง 1์ ์ ๋ ์ ํํ๊ณ
|
|
99
|
+
* ๋์ด๊ฐ๋ฉด ํ์ด์ง 2์์ ์๋ฌด๊ฒ๋ ๊ณ ๋ฅด์ง ์์๋๋ฐ ์ฒดํฌ๋ฐ์ค๊ฐ ์ผ์ ธ ๋ณด์๊ณ , ๊ทธ๊ฒ์ ๋๋ฉด
|
|
100
|
+
* ํ์ด์ง 1์ ์ ํ์ด ์กฐ์ฉํ ์ฌ๋ผ์ก๋ค.
|
|
101
|
+
*/
|
|
57
102
|
private _renderToolbar;
|
|
58
103
|
private _renderHeader;
|
|
59
104
|
private _renderFilterRow;
|
|
@@ -62,6 +107,23 @@ export declare class URichTable extends LitElement {
|
|
|
62
107
|
private _renderCellContent;
|
|
63
108
|
private _renderNewRow;
|
|
64
109
|
private _renderPagination;
|
|
110
|
+
/**
|
|
111
|
+
* ์ ์ฒด์ ํ ์ฒดํฌ๋ฐ์ค โ ๋ฒ์๋ **ํ์ฌ ํ์ด์ง**๋ค(ํฉ์งํฉ/์ฐจ์งํฉ, ์นํ์ด ์๋๋ค).
|
|
112
|
+
* ์ข
์ ์๋ ์ผค ๋ `new Set(ํ์ฌ ํ์ด์ง)` ๋ก **์นํ**ํ๊ณ ๋ ๋ `new Set()` ์ผ๋ก **์ ์ญ ์๊ฑฐ**ํด์,
|
|
113
|
+
* ์ด๋ ์ชฝ์ด๋ ๋ค๋ฅธ ํ์ด์ง์ ์ ํ๋ถ์ด ํจ๊ป ๋ ์๊ฐ๋ค. ์ ์ญ ์๊ฑฐ๊ฐ ํ์ํ๋ฉด {@link clearSelection}.
|
|
114
|
+
*
|
|
115
|
+
* ## ์ `select-all` ์ ๋ฐ๋ก ๋ด๋ณด๋ด๋๊ฐ
|
|
116
|
+
*
|
|
117
|
+
* `selection-change` ๋ง์ผ๋ก๋ *"์ฌ์ฉ์๊ฐ ์ธ ํ์ ๊ณจ๋๋ค"* ์ *"์ฌ์ฉ์๊ฐ ์ ์ฒด์ ํ์ ๋๋ ๋ค"* ๊ฐ
|
|
118
|
+
* ๊ตฌ๋ถ๋์ง ์๋๋ค. ์๋ฒ ํ์ด์ง์์ ๊ทธ ๊ตฌ๋ถ์ ์ฑ์ ํ์ํ๋ค โ ์ ์ฒด์ ํ์ ๋๋ฅธ ์๊ฐ์ด
|
|
119
|
+
* *"์ด ์กฐ๊ฑด์ ๋ง๋ N๊ฑด ์ ๋ถ"* ๋ฅผ ์ ์ํ ์๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
120
|
+
*
|
|
121
|
+
* โ **`scope: 'page' | 'all'` ํ๋๋ ๋์ง ์์๋ค.** ์ด ์ปดํฌ๋ํธ๋ `'all'` ์ **๋ผ ์ ์๋ค** โ
|
|
122
|
+
* ๋ค๋ฅธ ํ์ด์ง์ ํ์ ๊ฐ๊ณ ์์ง ์๊ณ , ์๋ฒ ํ์ด์ง์์ ยซ์ ์ญ ์ ์ฒด์ ํยป์ id ๋ชฉ๋ก์ด ์๋๋ผ
|
|
123
|
+
* **์กฐํ ์กฐ๊ฑด**์ด๋ผ ์ปดํฌ๋ํธ๊ฐ ํํํ ์ ์๋ ๊ฒ์ด ์๋๋ค. ๊ฐ์ด ํ๋๋ฟ์ธ ์ ๋์จ์
|
|
124
|
+
* *"๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ชจ๋ฅด๋ ๊ฐ๋
์ ์๋ ์ฒํ๋"* ํ๋๊ฐ ๋๋ค. โ ์ปดํฌ๋ํธ๋ **์๋๋ง** ์๋ฆฌ๊ณ
|
|
125
|
+
* ์ ์ญ ํด์์ ์ฑ์ด ํ๋ค.
|
|
126
|
+
*/
|
|
65
127
|
private _onSelectAll;
|
|
66
128
|
private _onRowSelect;
|
|
67
129
|
private _lastSelectedIndex;
|
|
@@ -83,6 +145,12 @@ export declare class URichTable extends LitElement {
|
|
|
83
145
|
private _getOptionLabel;
|
|
84
146
|
private _getPageNumbers;
|
|
85
147
|
private _moveToNextEditableCell;
|
|
148
|
+
/**
|
|
149
|
+
* โ **๋ ํ๋๊ฐ ์๋ก ๋ค๋ฅธ ๊ฒ์ ์ผ๋ค.** `selectedRows` ๋ **ํ์ฌ ํ์ด์ง์ ํ ๊ฐ์ฒด**์ด๊ณ
|
|
150
|
+
* `selectedIds` ๋ ํ์ด์ง๋ฅผ ๊ฐ๋ก์ง๋ฅด๋ **๋์ ์๋ณ์**๋ค. ์๋ฒ ํ์ด์ง์์ ๋์ ๊ธธ์ด๊ฐ
|
|
151
|
+
* ๋ค๋ฅธ ๊ฒ์ด ์ ์์ด๋ฉฐ, ๊ทธ ์ฐจ์ด๋ฅผ ๊ฐ์ถ ๋ฐฉ๋ฒ์ ์๋ค โ ์ปดํฌ๋ํธ๊ฐ ๋ค๋ฅธ ํ์ด์ง์ ํ์
|
|
152
|
+
* ๊ฐ๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
153
|
+
*/
|
|
86
154
|
private _fireSelectionChange;
|
|
87
155
|
connectedCallback(): void;
|
|
88
156
|
disconnectedCallback(): void;
|
|
@@ -90,6 +158,7 @@ export declare class URichTable extends LitElement {
|
|
|
90
158
|
private _handleCopy;
|
|
91
159
|
private _handlePaste;
|
|
92
160
|
private _moveFocus;
|
|
161
|
+
/** `Ctrl`/`Cmd` + `A` โ ์ ์ฒด์ ํ ์ฒดํฌ๋ฐ์ค์ ๊ฐ์ ๋ฒ์(ํ์ฌ ํ์ด์ง ํฉ์งํฉ)์ฌ์ผ ํ๋ค. */
|
|
93
162
|
private _selectAll;
|
|
94
163
|
static define(tagName?: string): void;
|
|
95
164
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/decorateMetadata.js";
|
|
2
2
|
import __decorate from "../../_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/decorate.js";
|
|
3
|
+
import { messages } from "../../utilities/messages.js";
|
|
3
4
|
import { richTableStyles } from "./styles.js";
|
|
4
5
|
import { parseTSV, toTSV } from "./utils/clipboard.js";
|
|
5
6
|
import { LitElement, html } from "lit";
|
|
6
7
|
import { customElement, property, state } from "lit/decorators.js";
|
|
8
|
+
import { Locale } from "@iyulab/components/dist/utilities/Locale.js";
|
|
7
9
|
//#region src/components/u-rich-table/URichTable.ts
|
|
8
10
|
var URichTable = class URichTable extends LitElement {
|
|
9
11
|
constructor(..._args) {
|
|
@@ -14,12 +16,16 @@ var URichTable = class URichTable extends LitElement {
|
|
|
14
16
|
this.pageSize = 25;
|
|
15
17
|
this.currentPage = 1;
|
|
16
18
|
this.loading = false;
|
|
17
|
-
this.emptyMessage = "
|
|
18
|
-
this.loadingMessage = "
|
|
19
|
-
this.filterPlaceholder = "
|
|
20
|
-
this.filterAllLabel = "
|
|
21
|
-
this.addRowLabel = "
|
|
22
|
-
this.pageInfoFormatter = (total, start, end) =>
|
|
19
|
+
this.emptyMessage = "";
|
|
20
|
+
this.loadingMessage = "";
|
|
21
|
+
this.filterPlaceholder = "";
|
|
22
|
+
this.filterAllLabel = "";
|
|
23
|
+
this.addRowLabel = "";
|
|
24
|
+
this.pageInfoFormatter = (total, start, end) => messages.text("pageInfo", {
|
|
25
|
+
total: total.toLocaleString(),
|
|
26
|
+
start,
|
|
27
|
+
end
|
|
28
|
+
});
|
|
23
29
|
this.selectable = false;
|
|
24
30
|
this.editable = false;
|
|
25
31
|
this.addable = false;
|
|
@@ -96,6 +102,44 @@ var URichTable = class URichTable extends LitElement {
|
|
|
96
102
|
this.rowErrors = next;
|
|
97
103
|
}
|
|
98
104
|
/**
|
|
105
|
+
* ์ ํ๋ ํ์ **์๋ณ์ ์งํฉ** โ ํ์ด์ง๋ฅผ ๊ฐ๋ก์ง๋ฌ ๋์ ๋ ์ ๋ถ.
|
|
106
|
+
*
|
|
107
|
+
* `getSelectedRows()` ๋ ํ์ฌ ํ์ด์ง์ ํ ๊ฐ์ฒด๋ง ๋๋ ค์ฃผ๋ฏ๋ก(๊ฐ๊ณ ์์ง ์์ ํ์ ๋ง๋ค ์ ์๋ค)
|
|
108
|
+
* *"์ฌ๋ฌ ํ์ด์ง์ ๊ฑธ์ณ ๊ณ ๋ฅธ ๋ค ์ผ๊ด ์ฒ๋ฆฌ"* ์๋ ์ด์ชฝ์ด ํ์ํ๋ค.
|
|
109
|
+
*
|
|
110
|
+
* โ **์ค๋
์ท์ด๋ค.** ๋ด๋ถ ์งํฉ์ ๊ทธ๋๋ก ๋๊ธฐ๋ฉด `ReadonlySet` ์ด ํ์
์์ค ์ฝ์์ผ ๋ฟ์ด๋ผ
|
|
111
|
+
* JS ์๋น์๊ฐ `add` ๋ก ๋ด๋ถ ์ํ๋ฅผ **๊ฐฑ์ ์ ํธ ์์ด** ๋ง๊ฐ๋จ๋ฆด ์ ์๋ค. ๋ณต์ ๋น์ฉ์
|
|
112
|
+
* ์ ํ ํฌ๊ธฐ์ ๋น๋กํ๊ณ ๋ฌด์ํ ์์ค์ด๋ค.
|
|
113
|
+
*/
|
|
114
|
+
get selectedRowIds() {
|
|
115
|
+
return new Set(this.selectedIds);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* ์ ํ์ **ํต์งธ๋ก ๋์ฒด**ํ๋ค โ ํ์ด์ง๋ฅผ ๊ฐ๋ก์ง๋ฅด๋ ๋์ ๋ถ๊น์ง.
|
|
119
|
+
*
|
|
120
|
+
* ์ฑ์ด ์๊ธฐ ์ํ๋ฅผ ์ ๋ณธ์ผ๋ก ์ผ๋ ๊ฒฝ์ฐ(์ธ๋ถ ์ ์ฅยท๋ณต์, ํํฐ ๋ณ๊ฒฝ ์ ์ ๋ฆฌ)์ ์ง์
์ ์ด๋ค.
|
|
121
|
+
* ํ์ฌ ํ์ด์ง์ ์๋ ์๋ณ์๋ฅผ ๋ฃ์ด๋ ๋๋ค โ ๊ทธ ํ์ด์ง๋ก ์ด๋ํ๋ฉด ์ ํ๋ ๊ฒ์ผ๋ก ๋ ๋๋๋ค.
|
|
122
|
+
*
|
|
123
|
+
* โ **๊ฐ์ ์งํฉ์ด๋ฉด ์๋ฌด ์ผ๋ ํ์ง ์๋๋ค.** ์ฑ์ด `selection-change` ๋ฅผ ๋ฐ์ ์๊ธฐ ์ํ๋ฅผ
|
|
124
|
+
* ๊ฐฑ์ ํ๊ณ ๋ค์ ์ด๊ฒ์ ๋ถ๋ฅด๋ ๊ฒ์ด ์์ฐ์ค๋ฌ์ด ๋ฐฐ์ ์ธ๋ฐ, ๋ฌด์กฐ๊ฑด ๋ฐ์์ํค๋ฉด ๊ทธ ์๋ฆฌ๊ฐ
|
|
125
|
+
* **๋ฌดํ ๋ฃจํ**๊ฐ ๋๋ค.
|
|
126
|
+
*/
|
|
127
|
+
setSelection(ids) {
|
|
128
|
+
const next = new Set(ids);
|
|
129
|
+
if (next.size === this.selectedIds.size && [...next].every((id) => this.selectedIds.has(id))) return;
|
|
130
|
+
this.selectedIds = next;
|
|
131
|
+
this._fireSelectionChange();
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* ์ ํ์ **์ ๋ถ** ๋น์ด๋ค โ ํ์ด์ง๋ฅผ ๊ฐ๋ก์ง๋ฅด๋ ๋์ ๋ถ๊น์ง.
|
|
135
|
+
*
|
|
136
|
+
* ์ ์ฒด์ ํ ์ฒดํฌ๋ฐ์ค๋ ยซ์ด ํ์ด์งยป๋ง ๋ค๋ฃจ๋ฏ๋ก ์ ์ญ ์๊ฑฐ์ ์๋ฆฌ๊ฐ ์๋ค. ์ผ๊ด ์ฒ๋ฆฌ๋ฅผ ๋๋ธ ๋ค
|
|
137
|
+
* ์ฑ์ด ์ํ๋ฅผ ๋๋๋ฆฌ๋ ๊ฒฝ๋ก๊ฐ ์ฌ๊ธฐ๋ค. `selection-change` ๋ฅผ ๋ฐ์์ํจ๋ค.
|
|
138
|
+
*/
|
|
139
|
+
clearSelection() {
|
|
140
|
+
this.setSelection([]);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
99
143
|
* ํ์ ์๋ณ์. ์ ํยทํ์ฅยทํ ์ค๋ฅ ์ํ๊ฐ ์ ๋ถ ์ด ๊ฐ์ผ๋ก ์ถ์ ๋๋ค.
|
|
100
144
|
*
|
|
101
145
|
* โ `_id` ๋ ์ด ์ปดํฌ๋ํธ๊ฐ **๋ถ์ฌํ์ง ์๋๋ค.** ์๋น์๊ฐ ๋ฃ์ด ์ฃผ์ง ์์ผ๋ฉด ๋ชจ๋ ํ์
|
|
@@ -113,11 +157,24 @@ var URichTable = class URichTable extends LitElement {
|
|
|
113
157
|
_warnMissingRowId() {
|
|
114
158
|
if (this._warnedMissingRowId) return;
|
|
115
159
|
this._warnedMissingRowId = true;
|
|
116
|
-
console.warn("[@iyulab/data-components] u-rich-table:
|
|
160
|
+
console.warn("[@iyulab/data-components] u-rich-table: rows have no `_id`, so selection is tracked by **position**. Re-sorting or re-paging the data moves the selection to a different row. Give every row a unique `_id`.");
|
|
117
161
|
}
|
|
162
|
+
/**
|
|
163
|
+
* **ํ์ฌ ํ์ด์ง์** ์ ํ๋ ํ. ์๋ฒ ํ์ด์ง์์ ๋ค๋ฅธ ํ์ด์ง์ ์ ํ๋ถ์ ์ฌ๊ธฐ ์๋ค โ
|
|
164
|
+
* ์ด ์ปดํฌ๋ํธ๊ฐ ๊ฐ๊ณ ์์ง ์์ ํ์ ๋๋ ค์ค ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
165
|
+
* ํ์ด์ง๋ฅผ ๊ฐ๋ก์ง๋ฅด๋ ์ ํ ์งํฉ์ด ํ์ํ๋ฉด {@link selectedRowIds} ๋ฅผ ์ด๋ค.
|
|
166
|
+
*/
|
|
118
167
|
getSelectedRows() {
|
|
119
168
|
return this.data.filter((row, i) => this.selectedIds.has(this._rowId(row, i)));
|
|
120
169
|
}
|
|
170
|
+
/** ์ด ํ์ด์ง ํ๋ค์ ์๋ณ์. ์ ์ฒด์ ํ/ํด์ ๊ฐ ยซ์ด ํ์ด์งยป ๋ฒ์์์ ์ ์ํ๋ ๊ฐ์ด๋ค. */
|
|
171
|
+
_pageRowIds() {
|
|
172
|
+
return this.data.map((row, i) => this._rowId(row, i));
|
|
173
|
+
}
|
|
174
|
+
/** ํ์ฌ ํ์ด์ง์์ ์ ํ๋ ํ ์ โ ์ ์ฒด์ ํ ์ฒดํฌ๋ฐ์ค์ ยซ๋ถ์ยป. */
|
|
175
|
+
get _selectedOnPage() {
|
|
176
|
+
return this._pageRowIds().reduce((n, id) => n + (this.selectedIds.has(id) ? 1 : 0), 0);
|
|
177
|
+
}
|
|
121
178
|
render() {
|
|
122
179
|
return html`
|
|
123
180
|
${this._renderToolbar()}
|
|
@@ -132,24 +189,36 @@ var URichTable = class URichTable extends LitElement {
|
|
|
132
189
|
${this._renderPagination()}
|
|
133
190
|
`;
|
|
134
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* โ **๋ ์ซ์๋ฅผ ์์ง ์๋๋ค.** ์ฒดํฌ๋ฐ์ค๋ ยซ์ด ํ์ด์งยป๋ฅผ ์ผ๊ณ ๋๋ฏ๋ก ๊ทธ ์ํ๋ ํ์ด์ง ๊ธฐ์ค์ด๊ณ ,
|
|
194
|
+
* ๋ผ๋ฒจ์ ๊ฑด์๋ ํ์ด์ง๋ฅผ ๊ฐ๋ก์ง๋ฅด๋ **๋์ **์ด๋ค. ์ข
์ ์๋ ๋ถ์๋ง ๋์ ์ด๊ณ ๋ถ๋ชจ๊ฐ ํ์ด์ง๋ผ
|
|
195
|
+
* ๋ค๋ฅธ ํ์ด์ง์ ์ ํ๋ถ์ด ์ด ํ์ด์ง์ ์ฒดํฌ ์ํ๋ก ์์ด ๋์๋ค โ ํ์ด์ง 1์ ์ ๋ ์ ํํ๊ณ
|
|
196
|
+
* ๋์ด๊ฐ๋ฉด ํ์ด์ง 2์์ ์๋ฌด๊ฒ๋ ๊ณ ๋ฅด์ง ์์๋๋ฐ ์ฒดํฌ๋ฐ์ค๊ฐ ์ผ์ ธ ๋ณด์๊ณ , ๊ทธ๊ฒ์ ๋๋ฉด
|
|
197
|
+
* ํ์ด์ง 1์ ์ ํ์ด ์กฐ์ฉํ ์ฌ๋ผ์ก๋ค.
|
|
198
|
+
*/
|
|
135
199
|
_renderToolbar() {
|
|
136
|
-
const
|
|
200
|
+
const total = this.selectedIds.size;
|
|
201
|
+
const onPage = this._selectedOnPage;
|
|
202
|
+
const crossesPages = total > onPage;
|
|
137
203
|
return html`
|
|
138
204
|
<div class="toolbar">
|
|
139
205
|
${this.selectable ? html`
|
|
140
206
|
<div class="selection-info">
|
|
141
207
|
<input type="checkbox"
|
|
142
|
-
.checked=${
|
|
143
|
-
.indeterminate=${
|
|
208
|
+
.checked=${this.data.length > 0 && onPage === this.data.length}
|
|
209
|
+
.indeterminate=${onPage > 0 && onPage < this.data.length}
|
|
144
210
|
@change=${this._onSelectAll} />
|
|
145
|
-
${
|
|
211
|
+
${total > 0 ? html`<span>${crossesPages ? messages.text("selectedAcrossPages", {
|
|
212
|
+
count: total,
|
|
213
|
+
onPage
|
|
214
|
+
}) : messages.text("selected", { count: total })}</span>` : ""}
|
|
146
215
|
</div>
|
|
147
|
-
${
|
|
216
|
+
${total > 0 ? html`<slot name="bulk-actions"></slot>` : ""}
|
|
148
217
|
` : ""}
|
|
149
218
|
<div style="flex:1"></div>
|
|
150
219
|
<slot name="toolbar-end"></slot>
|
|
151
220
|
${this.addable ? html`
|
|
152
|
-
<button class="btn btn-success" @click=${this._onAddRowClick}>${this.addRowLabel}</button>
|
|
221
|
+
<button class="btn btn-success" @click=${this._onAddRowClick}>${this.addRowLabel || messages.text("addRow")}</button>
|
|
153
222
|
` : ""}
|
|
154
223
|
</div>
|
|
155
224
|
`;
|
|
@@ -184,10 +253,10 @@ var URichTable = class URichTable extends LitElement {
|
|
|
184
253
|
${this.columns.map((col) => html`
|
|
185
254
|
<td>
|
|
186
255
|
${col.filterable !== false ? col.filterType === "select" && col.options ? html`<select @change=${(e) => this._onFilterChange(col.key, e.target.value)}>
|
|
187
|
-
<option value="">${this.filterAllLabel}</option>
|
|
256
|
+
<option value="">${this.filterAllLabel || messages.text("filterAll")}</option>
|
|
188
257
|
${col.options.map((o) => html`<option value=${o.value}>${o.label}</option>`)}
|
|
189
258
|
</select>` : html`<input
|
|
190
|
-
placeholder=${this.filterPlaceholder}
|
|
259
|
+
placeholder=${this.filterPlaceholder || messages.text("filterPlaceholder")}
|
|
191
260
|
@input=${(e) => this._onFilterChange(col.key, e.target.value)} />` : ""}
|
|
192
261
|
</td>
|
|
193
262
|
`)}
|
|
@@ -196,8 +265,8 @@ var URichTable = class URichTable extends LitElement {
|
|
|
196
265
|
`;
|
|
197
266
|
}
|
|
198
267
|
_renderBody() {
|
|
199
|
-
if (this.loading) return html`<tr><td colspan=${this._colSpan()}><div class="loading-overlay">${this.loadingMessage}</div></td></tr>`;
|
|
200
|
-
if (this.data.length === 0) return html`<tr><td colspan=${this._colSpan()}><div class="empty-message">${this.emptyMessage}</div></td></tr>`;
|
|
268
|
+
if (this.loading) return html`<tr><td colspan=${this._colSpan()}><div class="loading-overlay">${this.loadingMessage || messages.text("loading")}</div></td></tr>`;
|
|
269
|
+
if (this.data.length === 0) return html`<tr><td colspan=${this._colSpan()}><div class="empty-message">${this.emptyMessage || messages.text("empty")}</div></td></tr>`;
|
|
201
270
|
return this.data.map((row, rowIdx) => {
|
|
202
271
|
const rowId = this._rowId(row, rowIdx);
|
|
203
272
|
const isSelected = this.selectedIds.has(rowId);
|
|
@@ -326,16 +395,45 @@ var URichTable = class URichTable extends LitElement {
|
|
|
326
395
|
25,
|
|
327
396
|
50,
|
|
328
397
|
100
|
|
329
|
-
].map((s) => html`<option value=${s} ?selected=${s === this.pageSize}>${s}
|
|
398
|
+
].map((s) => html`<option value=${s} ?selected=${s === this.pageSize}>${messages.text("rowsPerPage", { size: s })}</option>`)}
|
|
330
399
|
</select>
|
|
331
400
|
</div>
|
|
332
401
|
</div>
|
|
333
402
|
`;
|
|
334
403
|
}
|
|
404
|
+
/**
|
|
405
|
+
* ์ ์ฒด์ ํ ์ฒดํฌ๋ฐ์ค โ ๋ฒ์๋ **ํ์ฌ ํ์ด์ง**๋ค(ํฉ์งํฉ/์ฐจ์งํฉ, ์นํ์ด ์๋๋ค).
|
|
406
|
+
* ์ข
์ ์๋ ์ผค ๋ `new Set(ํ์ฌ ํ์ด์ง)` ๋ก **์นํ**ํ๊ณ ๋ ๋ `new Set()` ์ผ๋ก **์ ์ญ ์๊ฑฐ**ํด์,
|
|
407
|
+
* ์ด๋ ์ชฝ์ด๋ ๋ค๋ฅธ ํ์ด์ง์ ์ ํ๋ถ์ด ํจ๊ป ๋ ์๊ฐ๋ค. ์ ์ญ ์๊ฑฐ๊ฐ ํ์ํ๋ฉด {@link clearSelection}.
|
|
408
|
+
*
|
|
409
|
+
* ## ์ `select-all` ์ ๋ฐ๋ก ๋ด๋ณด๋ด๋๊ฐ
|
|
410
|
+
*
|
|
411
|
+
* `selection-change` ๋ง์ผ๋ก๋ *"์ฌ์ฉ์๊ฐ ์ธ ํ์ ๊ณจ๋๋ค"* ์ *"์ฌ์ฉ์๊ฐ ์ ์ฒด์ ํ์ ๋๋ ๋ค"* ๊ฐ
|
|
412
|
+
* ๊ตฌ๋ถ๋์ง ์๋๋ค. ์๋ฒ ํ์ด์ง์์ ๊ทธ ๊ตฌ๋ถ์ ์ฑ์ ํ์ํ๋ค โ ์ ์ฒด์ ํ์ ๋๋ฅธ ์๊ฐ์ด
|
|
413
|
+
* *"์ด ์กฐ๊ฑด์ ๋ง๋ N๊ฑด ์ ๋ถ"* ๋ฅผ ์ ์ํ ์๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
414
|
+
*
|
|
415
|
+
* โ **`scope: 'page' | 'all'` ํ๋๋ ๋์ง ์์๋ค.** ์ด ์ปดํฌ๋ํธ๋ `'all'` ์ **๋ผ ์ ์๋ค** โ
|
|
416
|
+
* ๋ค๋ฅธ ํ์ด์ง์ ํ์ ๊ฐ๊ณ ์์ง ์๊ณ , ์๋ฒ ํ์ด์ง์์ ยซ์ ์ญ ์ ์ฒด์ ํยป์ id ๋ชฉ๋ก์ด ์๋๋ผ
|
|
417
|
+
* **์กฐํ ์กฐ๊ฑด**์ด๋ผ ์ปดํฌ๋ํธ๊ฐ ํํํ ์ ์๋ ๊ฒ์ด ์๋๋ค. ๊ฐ์ด ํ๋๋ฟ์ธ ์ ๋์จ์
|
|
418
|
+
* *"๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ชจ๋ฅด๋ ๊ฐ๋
์ ์๋ ์ฒํ๋"* ํ๋๊ฐ ๋๋ค. โ ์ปดํฌ๋ํธ๋ **์๋๋ง** ์๋ฆฌ๊ณ
|
|
419
|
+
* ์ ์ญ ํด์์ ์ฑ์ด ํ๋ค.
|
|
420
|
+
*/
|
|
335
421
|
_onSelectAll(e) {
|
|
336
|
-
|
|
337
|
-
|
|
422
|
+
const checked = e.target.checked;
|
|
423
|
+
const pageIds = this._pageRowIds();
|
|
424
|
+
const next = new Set(this.selectedIds);
|
|
425
|
+
for (const id of pageIds) if (checked) next.add(id);
|
|
426
|
+
else next.delete(id);
|
|
427
|
+
this.selectedIds = next;
|
|
338
428
|
this._fireSelectionChange();
|
|
429
|
+
this.dispatchEvent(new CustomEvent("select-all", {
|
|
430
|
+
detail: {
|
|
431
|
+
checked,
|
|
432
|
+
pageRowIds: pageIds
|
|
433
|
+
},
|
|
434
|
+
bubbles: true,
|
|
435
|
+
composed: true
|
|
436
|
+
}));
|
|
339
437
|
}
|
|
340
438
|
_onRowSelect(rowId) {
|
|
341
439
|
const next = new Set(this.selectedIds);
|
|
@@ -438,7 +536,7 @@ var URichTable = class URichTable extends LitElement {
|
|
|
438
536
|
let newValue = this.editValue;
|
|
439
537
|
if (col.type === "number") newValue = Number(newValue);
|
|
440
538
|
if (col.required && !newValue && newValue !== 0) {
|
|
441
|
-
this.validationErrors = new Map(this.validationErrors).set(`${rowIndex}-${colIndex}`, "
|
|
539
|
+
this.validationErrors = new Map(this.validationErrors).set(`${rowIndex}-${colIndex}`, Locale.getValue("valueMissing"));
|
|
442
540
|
return;
|
|
443
541
|
}
|
|
444
542
|
if (col.validator) {
|
|
@@ -572,9 +670,18 @@ var URichTable = class URichTable extends LitElement {
|
|
|
572
670
|
const value = this.data[rowIndex]?.[this.columns[colIndex]?.key];
|
|
573
671
|
this._onCellDblClick(rowIndex, colIndex, value);
|
|
574
672
|
}
|
|
673
|
+
/**
|
|
674
|
+
* โ **๋ ํ๋๊ฐ ์๋ก ๋ค๋ฅธ ๊ฒ์ ์ผ๋ค.** `selectedRows` ๋ **ํ์ฌ ํ์ด์ง์ ํ ๊ฐ์ฒด**์ด๊ณ
|
|
675
|
+
* `selectedIds` ๋ ํ์ด์ง๋ฅผ ๊ฐ๋ก์ง๋ฅด๋ **๋์ ์๋ณ์**๋ค. ์๋ฒ ํ์ด์ง์์ ๋์ ๊ธธ์ด๊ฐ
|
|
676
|
+
* ๋ค๋ฅธ ๊ฒ์ด ์ ์์ด๋ฉฐ, ๊ทธ ์ฐจ์ด๋ฅผ ๊ฐ์ถ ๋ฐฉ๋ฒ์ ์๋ค โ ์ปดํฌ๋ํธ๊ฐ ๋ค๋ฅธ ํ์ด์ง์ ํ์
|
|
677
|
+
* ๊ฐ๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
|
|
678
|
+
*/
|
|
575
679
|
_fireSelectionChange() {
|
|
576
680
|
this.dispatchEvent(new CustomEvent("selection-change", {
|
|
577
|
-
detail: {
|
|
681
|
+
detail: {
|
|
682
|
+
selectedRows: this.getSelectedRows(),
|
|
683
|
+
selectedIds: [...this.selectedIds]
|
|
684
|
+
},
|
|
578
685
|
bubbles: true,
|
|
579
686
|
composed: true
|
|
580
687
|
}));
|
|
@@ -614,8 +721,11 @@ var URichTable = class URichTable extends LitElement {
|
|
|
614
721
|
colIndex: newCol
|
|
615
722
|
};
|
|
616
723
|
}
|
|
724
|
+
/** `Ctrl`/`Cmd` + `A` โ ์ ์ฒด์ ํ ์ฒดํฌ๋ฐ์ค์ ๊ฐ์ ๋ฒ์(ํ์ฌ ํ์ด์ง ํฉ์งํฉ)์ฌ์ผ ํ๋ค. */
|
|
617
725
|
_selectAll() {
|
|
618
|
-
|
|
726
|
+
const next = new Set(this.selectedIds);
|
|
727
|
+
for (const id of this._pageRowIds()) next.add(id);
|
|
728
|
+
this.selectedIds = next;
|
|
619
729
|
this._fireSelectionChange();
|
|
620
730
|
}
|
|
621
731
|
static define(tagName = "u-rich-table") {
|
|
@@ -31,8 +31,24 @@ export interface FilterState {
|
|
|
31
31
|
[field: string]: string;
|
|
32
32
|
}
|
|
33
33
|
export interface RichTableEventMap {
|
|
34
|
+
/**
|
|
35
|
+
* โ ๋ ํ๋๊ฐ ์๋ก ๋ค๋ฅธ ๊ฒ์ ์ผ๋ค โ `selectedRows` ๋ **ํ์ฌ ํ์ด์ง์ ํ ๊ฐ์ฒด**,
|
|
36
|
+
* `selectedIds` ๋ ํ์ด์ง๋ฅผ ๊ฐ๋ก์ง๋ฅด๋ **๋์ ์๋ณ์**๋ค. ์๋ฒ ํ์ด์ง์์ ๊ธธ์ด๊ฐ ๋ค๋ฅธ ๊ฒ์ด ์ ์์ด๋ค.
|
|
37
|
+
*/
|
|
34
38
|
'selection-change': CustomEvent<{
|
|
35
39
|
selectedRows: Record<string, unknown>[];
|
|
40
|
+
selectedIds: string[];
|
|
41
|
+
}>;
|
|
42
|
+
/**
|
|
43
|
+
* ์ฌ์ฉ์๊ฐ **์ ์ฒด์ ํ ์ฒดํฌ๋ฐ์ค**๋ฅผ ์กฐ์ํ๋ค. `selection-change` ์ ํจ๊ป ๋ฐ์ํ๋ค.
|
|
44
|
+
*
|
|
45
|
+
* ์ด ์ด๋ฒคํธ๊ฐ ๋ฐ๋ก ์๋ ์ด์ ๋ *"์ธ ํ์ ๊ณจ๋๋ค"* ์ *"์ ์ฒด์ ํ์ ๋๋ ๋ค"* ๋ฅผ ๊ฐ๋ฅด๊ธฐ ์ํด์๋ค โ
|
|
46
|
+
* ์๋ฒ ํ์ด์ง์์ ํ์๋ ์ฑ์ด *"์กฐ๊ฑด์ ๋ง๋ ์ ์ฒด N๊ฑด"* ์ ์ ์ํ ์๋ฆฌ๋ค.
|
|
47
|
+
* `pageRowIds` ๋ ์ด๋ฒ ์กฐ์์ด ๋ํ๊ฑฐ๋ ๋บ **ํ์ฌ ํ์ด์ง์** ์๋ณ์๋ค.
|
|
48
|
+
*/
|
|
49
|
+
'select-all': CustomEvent<{
|
|
50
|
+
checked: boolean;
|
|
51
|
+
pageRowIds: string[];
|
|
36
52
|
}>;
|
|
37
53
|
'row-create': CustomEvent<{
|
|
38
54
|
row: Record<string, unknown>;
|
package/dist/react.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ import { EventName } from '@lit/react';
|
|
|
2
2
|
import { USimpleSheet } from './components/simple-sheet/USimpleSheet';
|
|
3
3
|
import { UDataView } from './components/data-view/UDataView';
|
|
4
4
|
import { URichTable } from './components/u-rich-table/URichTable';
|
|
5
|
-
import { RichTableEventMap } from './components/u-rich-table/types';
|
|
6
5
|
/** USimpleSheet React ๋ํผ โ `change` ์ด๋ฒคํธ๋ `onChange`๋ก ๋
ธ์ถ */
|
|
7
6
|
export declare const USimpleSheetReact: import('@lit/react').ReactWebComponent<USimpleSheet, {
|
|
8
7
|
onChange: EventName<CustomEvent<{
|
|
@@ -13,15 +12,44 @@ export declare const USimpleSheetReact: import('@lit/react').ReactWebComponent<U
|
|
|
13
12
|
export declare const UDataViewReact: import('@lit/react').ReactWebComponent<UDataView, {}>;
|
|
14
13
|
/** URichTable React ๋ํผ โ RichTableEventMap์ ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ onXxx๋ก ๋
ธ์ถ */
|
|
15
14
|
export declare const URichTableReact: import('@lit/react').ReactWebComponent<URichTable, {
|
|
16
|
-
onSelectionChange: EventName<
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
15
|
+
readonly onSelectionChange: EventName<CustomEvent<{
|
|
16
|
+
selectedRows: Record<string, unknown>[];
|
|
17
|
+
selectedIds: string[];
|
|
18
|
+
}>>;
|
|
19
|
+
readonly onSelectAll: EventName<CustomEvent<{
|
|
20
|
+
checked: boolean;
|
|
21
|
+
pageRowIds: string[];
|
|
22
|
+
}>>;
|
|
23
|
+
readonly onRowCreate: EventName<CustomEvent<{
|
|
24
|
+
row: Record<string, unknown>;
|
|
25
|
+
}>>;
|
|
26
|
+
readonly onRowUpdate: EventName<CustomEvent<{
|
|
27
|
+
row: Record<string, unknown>;
|
|
28
|
+
field: string;
|
|
29
|
+
value: unknown;
|
|
30
|
+
oldValue: unknown;
|
|
31
|
+
}>>;
|
|
32
|
+
readonly onRowDelete: EventName<CustomEvent<{
|
|
33
|
+
row: Record<string, unknown>;
|
|
34
|
+
}>>;
|
|
35
|
+
readonly onRowExpand: EventName<CustomEvent<{
|
|
36
|
+
row: Record<string, unknown>;
|
|
37
|
+
expanded: boolean;
|
|
38
|
+
}>>;
|
|
39
|
+
readonly onSortChange: EventName<CustomEvent<{
|
|
40
|
+
field: string;
|
|
41
|
+
direction: "asc" | "desc" | null;
|
|
42
|
+
}>>;
|
|
43
|
+
readonly onFilterChange: EventName<CustomEvent<{
|
|
44
|
+
filters: import('./react').FilterState;
|
|
45
|
+
}>>;
|
|
46
|
+
readonly onPageChange: EventName<CustomEvent<{
|
|
47
|
+
page: number;
|
|
48
|
+
pageSize: number;
|
|
49
|
+
}>>;
|
|
50
|
+
readonly onPaste: EventName<CustomEvent<{
|
|
51
|
+
rows: Record<string, unknown>[];
|
|
52
|
+
}>>;
|
|
25
53
|
}>;
|
|
26
54
|
export { USimpleSheet, UDataView, URichTable };
|
|
27
55
|
export type { SheetColumn } from './components/simple-sheet/USimpleSheet';
|
package/dist/react.js
CHANGED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@iyulab/data-components` ์ ํ๋ฉด ๋ฌธ์์ด โ **์์ด ๊ธฐ๋ณธ + ๋ก์ผ์ผ ๋ ์ง์คํธ๋ฆฌ**.
|
|
3
|
+
*
|
|
4
|
+
* ## ์ ์๊ฒผ๋
|
|
5
|
+
*
|
|
6
|
+
* ํ ์ปดํฌ๋ํธ์ ๊ธฐ๋ณธ ๋ฌธ๊ตฌ๊ฐ **ํ๊ตญ์ด ๋ฆฌํฐ๋ด**์ด์๋ค(์ค์ธก 7๊ฑด). ์๋น์๊ฐ `emptyMessage` ๋ฑ์
|
|
7
|
+
* ๋๊ฒจ ๋ฎ์ ์๋ ์์์ง๋ง, **๋ฎ์ง ์์ผ๋ฉด ํ๊ตญ์ด๊ฐ ๋์จ๋ค** โ ๋ก์ผ์ผ ํ์ค(์์ด ๊ธฐ๋ณธ +
|
|
8
|
+
* ๋ ์ง์คํธ๋ฆฌ)์ ์ฑํํ ๋ฆฌํฌ์์ ๊ทธ๊ฒ์ ๋ฏธ์ด์ฃผ๋ค.
|
|
9
|
+
*
|
|
10
|
+
* ## ๊ธฐ๋ณธ๊ฐ์ ยซ๋น์ยป ๋๊ณ ๋ ๋์์ ํด์ํ๋ค
|
|
11
|
+
*
|
|
12
|
+
* ํ๋กํผํฐ ์ด๊ธฐ๊ฐ์ผ๋ก ๋ฌธ์์ด์ ๋ฐ์ผ๋ฉด **์์ฑ ์์ ์ ๋ก์ผ์ผ์ ๊ณ ์ **๋๋ค โ `Locale.set()` ์
|
|
13
|
+
* ๋์ค์ ๋ถ๋ฅด๋ฉด ์ด๋ฏธ ๋ง๋ค์ด์ง ํ๋ ๋ฐ๋ผ์ค์ง ์๋๋ค. ๊ทธ๋์ ๊ธฐ๋ณธ๊ฐ์ ๋น ๋ฌธ์์ด์ด๊ณ ,
|
|
14
|
+
* ๋ ๋๊ฐ `this.x || messages.text(...)` ๋ก ํด์ํ๋ค.
|
|
15
|
+
*
|
|
16
|
+
* โ **์๋น์๊ฐ ๋ฎ๋ ๊ฒฝ๋ก๋ ๊ทธ๋๋ก๋ค** โ ๊ฐ์ ์ฃผ๋ฉด ๊ทธ ๊ฐ์ด ์ด๊ธด๋ค.
|
|
17
|
+
*
|
|
18
|
+
* ## ๊ฒ์ฆ ๋ฉ์์ง๋ ์ฌ๊ธฐ ๋์ง ์๋๋ค
|
|
19
|
+
*
|
|
20
|
+
* `ํ์ ํญ๋ชฉ์
๋๋ค` ๋ `@iyulab/components` ์ **๊ฒ์ฆ ๋ฉ์์ง ํค์
์ ์ด๋ฏธ ์๊ณ 14๋ก์ผ์ผ์ด
|
|
21
|
+
* ๋ธ๋ ค ์จ๋ค**(`Locale.getValue('valueMissing')`). ๊ฐ์ ๋ฌธ์ฅ์ ์ด ํ์ ๋ณต์ ํ๋ฉด ๋ ๊ณณ์ด
|
|
22
|
+
* ๊ฐ๋ผ์ง๋ค.
|
|
23
|
+
*/
|
|
24
|
+
export type DataMessageKey = 'empty' | 'loading' | 'filterPlaceholder' | 'filterAll' | 'addRow' | 'pageInfo' | 'noMatch' | 'selected' | 'selectedAcrossPages' | 'rowsPerPage';
|
|
25
|
+
export declare const messages: import('@iyulab/components/dist/utilities/Locale.js').LocaleNamespace<DataMessageKey>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Locale } from "@iyulab/components/dist/utilities/Locale.js";
|
|
2
|
+
//#region src/utilities/messages.ts
|
|
3
|
+
var messages = Locale.namespace("@iyulab/data-components");
|
|
4
|
+
messages.register("en", {
|
|
5
|
+
empty: "No data",
|
|
6
|
+
loading: "Loadingโฆ",
|
|
7
|
+
filterPlaceholder: "Filterโฆ",
|
|
8
|
+
filterAll: "All",
|
|
9
|
+
addRow: "+ New row",
|
|
10
|
+
pageInfo: "Showing {start}-{end} of {total}",
|
|
11
|
+
noMatch: "No matching item",
|
|
12
|
+
selected: "{count} selected",
|
|
13
|
+
selectedAcrossPages: "{count} selected ({onPage} on this page)",
|
|
14
|
+
rowsPerPage: "{size} rows"
|
|
15
|
+
});
|
|
16
|
+
messages.register("ko", {
|
|
17
|
+
empty: "๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค",
|
|
18
|
+
loading: "๋ก๋ฉ ์ค...",
|
|
19
|
+
filterPlaceholder: "ํํฐ...",
|
|
20
|
+
filterAll: "์ ์ฒด",
|
|
21
|
+
addRow: "+ ์ ํ",
|
|
22
|
+
pageInfo: "์ ์ฒด {total}๊ฑด ์ค {start}-{end} ํ์",
|
|
23
|
+
noMatch: "์ผ์นํ๋ ํญ๋ชฉ ์์",
|
|
24
|
+
selected: "{count}๊ฑด ์ ํ๋จ",
|
|
25
|
+
selectedAcrossPages: "{count}๊ฑด ์ ํ๋จ (์ด ํ์ด์ง {onPage}๊ฑด)",
|
|
26
|
+
rowsPerPage: "{size}ํ"
|
|
27
|
+
});
|
|
28
|
+
//#endregion
|
|
29
|
+
export { messages };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iyulab/data-components",
|
|
3
3
|
"description": "iyulab data visualization components",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.12.0",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iyulab",
|
|
7
7
|
"web-components",
|
|
@@ -51,14 +51,15 @@
|
|
|
51
51
|
],
|
|
52
52
|
"scripts": {
|
|
53
53
|
"start": "vite",
|
|
54
|
-
"build": "eslint && vite build",
|
|
54
|
+
"build": "npm run typecheck && eslint && vite build",
|
|
55
55
|
"test": "vitest run",
|
|
56
56
|
"test:watch": "vitest",
|
|
57
57
|
"lint": "eslint src/",
|
|
58
|
-
"lint:fix": "eslint src/ --fix"
|
|
58
|
+
"lint:fix": "eslint src/ --fix",
|
|
59
|
+
"typecheck": "tsc --noEmit"
|
|
59
60
|
},
|
|
60
61
|
"dependencies": {
|
|
61
|
-
"@iyulab/components": "^1.
|
|
62
|
+
"@iyulab/components": "^1.23.0",
|
|
62
63
|
"lit": "^3.3.3"
|
|
63
64
|
},
|
|
64
65
|
"peerDependencies": {
|