@iyulab/data-components 0.9.1 → 0.10.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,32 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.10.0] - 2026-08-03
4
+
5
+ ### Added
6
+
7
+ - **표의 보조 전경을 «표 안에서만» 조절할 수 있다** — 파생 토큰 5단.
8
+
9
+ ```
10
+ --dc-empty-color 빈 상태 안내문 data-view · simple-sheet · rich-table
11
+ --dc-header-color 열 머리 · 행 머리 data-view · simple-sheet
12
+ --dc-muted-color 보조 텍스트 · 라벨 data-view · rich-table
13
+ --dc-icon-color 정렬 표시 · 확장 · 행 메뉴 rich-table
14
+ --dc-readonly-color 읽기 전용 셀 simple-sheet
15
+ ```
16
+
17
+ 종전에는 세 컴포넌트가 보조 전경을 전부 `--u-txt-color-weak` 로 **섀도 안에서 직독**해,
18
+ 문서 전체의 보조 텍스트를 바꾸지 않고는 표만 맞출 방법이 없었다(소비자 토큰 0 · `part` 0).
19
+
20
+ ⚠**기본 렌더는 변하지 않는다.** 다섯 단이 전부 `--u-txt-color-weak` 에서 파생되고
21
+ 다크 대응도 그 역할 토큰이 이미 갖고 있다 — 다크 전용 선언을 더하지 않았다.
22
+
23
+ ★**한 토큰으로 접지 않았다.** 전 컬럼이 읽기 전용인 시트에서는 데이터가 통째로 흐려
24
+ 보이는데, 단이 하나면 *"읽기 전용 셀만 진하게"* 가 원리적으로 불가능해진다.
25
+
26
+ ⚠**컴포넌트가 «읽는» 단만 선언한다** — 다섯을 어디서나 선언하면 소비자가 바꿔도 아무 일이
27
+ 없는 자리가 생긴다. 어느 단이 어디에 있는지는 README 의 표가 정본이고,
28
+ `tests/consumer-tokens.test.ts` 가 **선언과 사용을 양방향으로** 대조한다.
29
+
3
30
  ## [0.9.1] - 2026-08-03
4
31
 
5
32
  ### Fixed
package/README.md CHANGED
@@ -157,6 +157,39 @@ import '@iyulab/components/styles/tokens.css';
157
157
  :root { --u-primary-color: #7B1FA2; }
158
158
  ```
159
159
 
160
+ ### 보조 전경 조절 (0.10.0~)
161
+
162
+ 표의 **보조 전경**(빈 상태 안내문·열 머리·읽기 전용 셀 등)은 역할 토큰
163
+ `--u-txt-color-weak` 에서 파생된 단으로 그려집니다. 그 단을 **표 안에서만** 조절할 수
164
+ 있습니다 — 문서 전체의 보조 텍스트를 건드리지 않고 표만 맞출 때 씁니다.
165
+
166
+ | 토큰 | 무엇을 칠하나 | `u-data-view` | `u-simple-sheet` | `u-rich-table` |
167
+ |---|---|:---:|:---:|:---:|
168
+ | `--dc-empty-color` | 빈 상태 안내문 | ● | ● | ● |
169
+ | `--dc-header-color` | 열 머리 · 행 머리 | ● | ● | |
170
+ | `--dc-muted-color` | 보조 텍스트 · 라벨 | ● | | ● |
171
+ | `--dc-icon-color` | 정렬 표시 · 확장 · 행 메뉴 | | | ● |
172
+ | `--dc-readonly-color` | 읽기 전용 셀 | | ● | |
173
+
174
+ ⚠**빈 칸은 그 컴포넌트가 그 단을 «읽지 않는다»는 뜻**입니다. 값을 줘도 아무 일이
175
+ 일어나지 않습니다 — 읽지 않는 토큰을 선언해 두지 않는 것이 이 패키지의 방침입니다.
176
+
177
+ 커스텀 프로퍼티는 상속되므로 **범위는 선택자로 정합니다**:
178
+
179
+ ```css
180
+ /* 세 표를 한꺼번에 */
181
+ :root { --dc-empty-color: #9AA0A6; }
182
+
183
+ /* 한 컴포넌트만 */
184
+ u-rich-table { --dc-icon-color: #B0B0B0; }
185
+ ```
186
+
187
+ ★**한 토큰으로 접지 않은 이유**: 전 컬럼이 읽기 전용인 시트에서는 데이터가 통째로
188
+ 흐려 보이는데, 단이 하나면 *"읽기 전용 셀만 진하게"* 가 원리적으로 불가능합니다.
189
+
190
+ ⚠**`0.10.0` 은 조절점만 엽니다 — 기본 렌더는 변하지 않습니다.** 다섯 단이 전부
191
+ `--u-txt-color-weak` 에서 파생되며, 다크 대응도 그 역할 토큰이 이미 갖고 있습니다.
192
+
160
193
  ### 알려진 제약
161
194
 
162
195
  - **표면 높이를 뜻하는 토큰이 없습니다** — 배경 역할 토큰은 상호작용 상태 이름
@@ -1,6 +1,22 @@
1
1
  import { css } from "lit";
2
2
  var styles = [css`
3
3
  :host {
4
+
5
+ /* ── 소비자 조절점 — 보조 전경 5단 ──
6
+ ★이 셋의 보조 전경이 전부 --u-txt-color-weak 직독이라 «표 안에서만» 조절할 방법이
7
+ 없었다(소비자 토큰 0 · part 0). 소비앱은 한 제품 안에 표를 넷 두는데, 그중 업스트림
8
+ 표만 조절되지 않으면 나머지에 맞출 수가 없다.
9
+ ⚠**한 토큰으로 접지 않는다** — 실측상 16곳의 역할이 갈리고, 접으면 "읽기 전용 셀만
10
+ 진하게" 같은 요청이 원리적으로 불가능해진다. 그것이 이 요청의 발단이었다.
11
+ ⚠**다크 블록에 다시 선언하지 않는다.** --u-txt-color-weak 자체가 테마 변형이므로
12
+ 시트가 있으면 따라온다. 이 패키지의 다크 블록이 «비어 있는 것»이 목표 상태다.
13
+ ⚠**폴백 리터럴은 라이트 시트 값의 복제다**(루트 tokens:sync 가 대조한다).
14
+ ⚠**이 컴포넌트가 «읽는» 단만 선언한다.** 다섯을 어디서나 선언하면 소비자가
15
+ 바꿔도 아무 일이 없는 자리가 생긴다 — 이 리포가 반복해서 본 «토큰 존재 ≠ 배선»
16
+ 이다. 어느 단이 어디에 있는지는 README 의 표가 정본이다. */
17
+ --dc-muted-color: var(--u-txt-color-weak, #757575); /* 보조 텍스트 · 라벨 */
18
+ --dc-header-color: var(--u-txt-color-weak, #757575); /* 열 머리 · 행 머리 */
19
+ --dc-empty-color: var(--u-txt-color-weak, #757575); /* 빈 상태 안내문 */
4
20
  display: block;
5
21
  width: 100%;
6
22
  }
@@ -40,7 +56,7 @@ var styles = [css`
40
56
 
41
57
  .info {
42
58
  font-size: 0.875rem;
43
- color: var(--u-txt-color-weak, #757575);
59
+ color: var(--dc-muted-color);
44
60
  font-weight: 500;
45
61
  }
46
62
 
@@ -95,7 +111,7 @@ var styles = [css`
95
111
  .card-field .label {
96
112
  font-size: 0.875rem;
97
113
  font-weight: 600;
98
- color: var(--u-txt-color-weak, #757575);
114
+ color: var(--dc-muted-color);
99
115
  min-width: 80px;
100
116
  flex-shrink: 0;
101
117
  }
@@ -147,7 +163,7 @@ var styles = [css`
147
163
  text-align: left;
148
164
  font-size: 0.875rem;
149
165
  font-weight: 600;
150
- color: var(--u-txt-color-weak, #757575);
166
+ color: var(--dc-header-color);
151
167
  border-bottom: 2px solid var(--u-border-color, #E0E0E0);
152
168
  white-space: nowrap;
153
169
  }
@@ -181,7 +197,7 @@ var styles = [css`
181
197
  align-items: center;
182
198
  justify-content: center;
183
199
  min-height: 300px;
184
- color: var(--u-txt-color-weak, #757575);
200
+ color: var(--dc-empty-color);
185
201
  font-size: 1rem;
186
202
  }
187
203
  `];
@@ -2,6 +2,22 @@ import { css, unsafeCSS } from "lit";
2
2
  //#region src/components/simple-sheet/USimpleSheet.styles.ts
3
3
  var baseStyles = css`
4
4
  :host {
5
+
6
+ /* ── 소비자 조절점 — 보조 전경 5단 ──
7
+ ★이 셋의 보조 전경이 전부 --u-txt-color-weak 직독이라 «표 안에서만» 조절할 방법이
8
+ 없었다(소비자 토큰 0 · part 0). 소비앱은 한 제품 안에 표를 넷 두는데, 그중 업스트림
9
+ 표만 조절되지 않으면 나머지에 맞출 수가 없다.
10
+ ⚠**한 토큰으로 접지 않는다** — 실측상 16곳의 역할이 갈리고, 접으면 "읽기 전용 셀만
11
+ 진하게" 같은 요청이 원리적으로 불가능해진다. 그것이 이 요청의 발단이었다.
12
+ ⚠**다크 블록에 다시 선언하지 않는다.** --u-txt-color-weak 자체가 테마 변형이므로
13
+ 시트가 있으면 따라온다. 이 패키지의 다크 블록이 «비어 있는 것»이 목표 상태다.
14
+ ⚠**폴백 리터럴은 라이트 시트 값의 복제다**(루트 tokens:sync 가 대조한다).
15
+ ⚠**이 컴포넌트가 «읽는» 단만 선언한다.** 다섯을 어디서나 선언하면 소비자가
16
+ 바꿔도 아무 일이 없는 자리가 생긴다 — 이 리포가 반복해서 본 «토큰 존재 ≠ 배선»
17
+ 이다. 어느 단이 어디에 있는지는 README 의 표가 정본이다. */
18
+ --dc-header-color: var(--u-txt-color-weak, #757575); /* 열 머리 · 행 머리 */
19
+ --dc-empty-color: var(--u-txt-color-weak, #757575); /* 빈 상태 안내문 */
20
+ --dc-readonly-color: var(--u-txt-color-weak, #757575); /* 읽기 전용 셀 */
5
21
  display: block;
6
22
  width: 100%;
7
23
  height: 400px;
@@ -64,7 +80,7 @@ var baseStyles = css`
64
80
  text-align: center;
65
81
  font-size: 12px;
66
82
  font-weight: 600;
67
- color: var(--u-txt-color-weak, #757575);
83
+ color: var(--dc-header-color);
68
84
  border-right: 1px solid var(--u-border-color, #E0E0E0);
69
85
  border-bottom: 2px solid var(--u-border-color, #E0E0E0);
70
86
  white-space: nowrap;
@@ -124,7 +140,7 @@ var baseStyles = css`
124
140
  text-align: right;
125
141
  padding: 0 6px;
126
142
  font-size: 11px;
127
- color: var(--u-txt-color-weak, #757575);
143
+ color: var(--dc-header-color);
128
144
  /* 예외 — 표면 높이 축이 없다. 행번호 여백은 "비활성"이 아니라 시트 바탕보다
129
145
  한 단 내려간 면이다. --u-bg-color-disabled 를 쓰면 다크에서 바탕(neutral-100)과
130
146
  같은 값이 되어 여백 구분이 사라진다 — 스냅샷이 그것을 잡았다. */
@@ -239,7 +255,7 @@ var baseStyles = css`
239
255
  .dropdown-empty {
240
256
  padding: 6px 8px;
241
257
  font-size: 12px;
242
- color: var(--u-txt-color-weak, #757575);
258
+ color: var(--dc-empty-color);
243
259
  font-style: italic;
244
260
  }
245
261
 
@@ -251,7 +267,7 @@ var baseStyles = css`
251
267
  /* Readonly column/cell */
252
268
  .cell.cell-readonly {
253
269
  background: var(--u-bg-color-disabled, #FAFAFA);
254
- color: var(--u-txt-color-weak, #757575);
270
+ color: var(--dc-readonly-color);
255
271
  cursor: default;
256
272
  }
257
273
 
@@ -2,6 +2,20 @@ import { css } from "lit";
2
2
  //#region src/components/u-rich-table/styles.ts
3
3
  var richTableStyles = css`
4
4
  :host {
5
+ /* ── 소비자 조절점 — 보조 전경 ──
6
+ ★이 패키지 표 셋의 보조 전경이 전부 --u-txt-color-weak 직독이라 «표 안에서만»
7
+ 조절할 방법이 없었다(소비자 토큰 0 · part 0). 소비앱은 한 제품 안에 표를 넷 두는데,
8
+ 그중 업스트림 표만 조절되지 않으면 나머지에 맞출 수가 없다.
9
+ ⚠**한 토큰으로 접지 않는다** — 실측상 역할이 갈리고, 접으면 "읽기 전용 셀만 진하게"
10
+ 같은 요청이 원리적으로 불가능해진다. 그것이 이 요청의 발단이었다.
11
+ ⚠**이 컴포넌트가 «읽는» 단만 선언한다.** 다섯을 어디서나 선언하면 소비자가 바꿔도
12
+ 아무 일이 없는 자리가 생긴다 — 이 리포가 반복해서 본 «토큰 존재 ≠ 배선»이다.
13
+ ⚠**다크 블록에 다시 선언하지 않는다.** --u-txt-color-weak 자체가 테마 변형이므로
14
+ 시트가 있으면 따라온다. 이 패키지의 다크 블록이 «비어 있는 것»이 목표 상태다.
15
+ ⚠**폴백 리터럴은 라이트 시트 값의 복제다**(루트 tokens:sync 가 대조한다). */
16
+ --dc-muted-color: var(--u-txt-color-weak, #757575); /* 보조 텍스트 · 라벨 */
17
+ --dc-icon-color: var(--u-txt-color-weak, #757575); /* 정렬 표시 · 확장 · 행 메뉴 */
18
+ --dc-empty-color: var(--u-txt-color-weak, #757575); /* 빈 상태 안내문 */
5
19
  display: block;
6
20
  font-family: system-ui, -apple-system, sans-serif;
7
21
  font-size: 13px;
@@ -22,7 +36,7 @@ var richTableStyles = css`
22
36
 
23
37
  .toolbar .selection-info {
24
38
  font-size: 12px;
25
- color: var(--u-txt-color-weak, #757575);
39
+ color: var(--dc-muted-color);
26
40
  }
27
41
 
28
42
  .toolbar .search-input {
@@ -80,7 +94,7 @@ var richTableStyles = css`
80
94
 
81
95
  .sort-indicator {
82
96
  font-size: 10px;
83
- color: var(--u-txt-color-weak, #757575);
97
+ color: var(--dc-icon-color);
84
98
  margin-left: 4px;
85
99
  }
86
100
 
@@ -158,7 +172,7 @@ var richTableStyles = css`
158
172
  width: 30px;
159
173
  text-align: center;
160
174
  cursor: pointer;
161
- color: var(--u-txt-color-weak, #757575);
175
+ color: var(--dc-icon-color);
162
176
  }
163
177
 
164
178
  .expand-cell:hover {
@@ -183,7 +197,7 @@ var richTableStyles = css`
183
197
  border-radius: 3px;
184
198
  background: transparent;
185
199
  font-size: 12px;
186
- color: var(--u-txt-color-weak, #757575);
200
+ color: var(--dc-muted-color);
187
201
  outline: none;
188
202
  }
189
203
 
@@ -215,7 +229,7 @@ var richTableStyles = css`
215
229
  background: var(--u-bg-color-raised, #FAFAFA);
216
230
  border-top: 1px solid var(--u-border-color, #E0E0E0);
217
231
  font-size: 12px;
218
- color: var(--u-txt-color-weak, #757575);
232
+ color: var(--dc-muted-color);
219
233
  }
220
234
 
221
235
  .pagination .page-buttons {
@@ -254,7 +268,7 @@ var richTableStyles = css`
254
268
  align-items: center;
255
269
  justify-content: center;
256
270
  padding: 40px;
257
- color: var(--u-txt-color-weak, #757575);
271
+ color: var(--dc-muted-color);
258
272
  }
259
273
 
260
274
  .empty-message {
@@ -262,7 +276,7 @@ var richTableStyles = css`
262
276
  align-items: center;
263
277
  justify-content: center;
264
278
  padding: 40px;
265
- color: var(--u-txt-color-weak, #757575);
279
+ color: var(--dc-empty-color);
266
280
  }
267
281
 
268
282
 
@@ -270,7 +284,7 @@ var richTableStyles = css`
270
284
  .styles.ts 만 훑는 정리로는 보이지 않는 자리다. */
271
285
  .row-menu {
272
286
  cursor: pointer;
273
- color: var(--u-txt-color-weak, #757575);
287
+ color: var(--dc-icon-color);
274
288
  }
275
289
 
276
290
  .row-error-cell {
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.9.1",
4
+ "version": "0.10.0",
5
5
  "keywords": [
6
6
  "iyulab",
7
7
  "web-components",
@@ -78,6 +78,7 @@
78
78
  "@lit/react": "^1.0.8",
79
79
  "@types/node": "^26.1.1",
80
80
  "@types/react": "^19.2.17",
81
+ "@vitest/browser-playwright": "^4.1.10",
81
82
  "eslint": "^9.39.4",
82
83
  "glob": "^13.0.6",
83
84
  "globals": "^17.7.0",