@ihabdevteam/core 0.20.0 → 0.21.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/dist/components.cjs.js +8 -8
- package/dist/ihabdevteam-core.cjs.js +6 -6
- package/dist/ihabdevteam-core.d.ts +17 -1
- package/dist/packages/core/src/components/SoundCompass.css +5 -1
- package/dist/packages/core/src/components/SoundCompass.d.ts +17 -1
- package/dist/packages/core/src/components/SoundCompass.js +7 -1
- package/package.json +1 -1
|
@@ -5230,7 +5230,23 @@ export declare interface SoundCompassProps {
|
|
|
5230
5230
|
/** 스피커 버튼 크기(px). 기본 40 */
|
|
5231
5231
|
buttonSize?: number;
|
|
5232
5232
|
/** 스피커 버튼에 아이콘을 표시할지 여부. false면 숫자만 가운데 표시. 기본 true */
|
|
5233
|
-
|
|
5233
|
+
/**
|
|
5234
|
+
* 버튼 안에 무엇을 그릴지.
|
|
5235
|
+
*
|
|
5236
|
+
* - `true` — 아이콘과 번호를 함께 (기본)
|
|
5237
|
+
* - `false` — 번호만
|
|
5238
|
+
* - `'answered'` — **답이 정해진 상태에서만 아이콘으로 갈아 끼운다.** 그때는
|
|
5239
|
+
* 번호를 그리지 않는다. 나머지(`idle`·`active`)는 `false` 와 같이 번호만이다.
|
|
5240
|
+
*
|
|
5241
|
+
* `'answered'` 가 가르는 선은 자의적이지 않다. `idle` 과 `active` 는 아이콘이
|
|
5242
|
+
* 둘 다 같은 `Volume2` 라 번호보다 더 말해 주는 것이 없다. `played`·`correct` 의
|
|
5243
|
+
* 체크와 `wrong` 의 가위표만이 번호가 못 하는 말을 한다 — 아이콘이 자리를
|
|
5244
|
+
* 차지할 값을 하는 자리만 바꿔 끼운다.
|
|
5245
|
+
*
|
|
5246
|
+
* 스피커를 번호로 부르는 화면에서 필요하다. `true` 로 켜면 고르지 않은 스피커까지
|
|
5247
|
+
* 아이콘이 붙고 번호가 함께 작아져(실측: 36px → 18px) 번호로 부르는 화면이 무너진다.
|
|
5248
|
+
*/
|
|
5249
|
+
showIcon?: boolean | 'answered';
|
|
5234
5250
|
/**
|
|
5235
5251
|
* `speakers[].shortcut` 배지가 버튼의 어느 모서리에 붙을지. 기본 우상단.
|
|
5236
5252
|
*
|
|
@@ -11,7 +11,11 @@
|
|
|
11
11
|
|
|
12
12
|
/* 상태 색은 **뿌리에** 둔다. 예전에는 버튼 안에 선언돼 있었는데, 울림(pulse)은
|
|
13
13
|
버튼의 형제라 그 변수를 못 봤다 — 울림 색을 상태에 묶자마자 투명하게 나왔다
|
|
14
|
-
(실측: rgba(0,0,0,0)). 버튼과 울림이 함께 보려면 공통 조상에 있어야 한다.
|
|
14
|
+
(실측: rgba(0,0,0,0)). 버튼과 울림이 함께 보려면 공통 조상에 있어야 한다.
|
|
15
|
+
|
|
16
|
+
**덮어쓸 때도 여기나 그 위에 얹어야 한다.** `.sound-compass__speaker-btn` 같은
|
|
17
|
+
버튼 선택자 위에 얹으면 버튼만 바뀌고 울림은 안 따라온다 — 그 자리에서는
|
|
18
|
+
조용히 어긋나므로, 색이 갈려 보이면 이것부터 보라. */
|
|
15
19
|
--scb-idle-bg: var(--color-deepWhite);
|
|
16
20
|
--scb-idle-border: var(--color-whiteLine);
|
|
17
21
|
--scb-idle-fg: var(--color-lightGray);
|
|
@@ -74,7 +74,23 @@ export interface SoundCompassProps {
|
|
|
74
74
|
/** 스피커 버튼 크기(px). 기본 40 */
|
|
75
75
|
buttonSize?: number;
|
|
76
76
|
/** 스피커 버튼에 아이콘을 표시할지 여부. false면 숫자만 가운데 표시. 기본 true */
|
|
77
|
-
|
|
77
|
+
/**
|
|
78
|
+
* 버튼 안에 무엇을 그릴지.
|
|
79
|
+
*
|
|
80
|
+
* - `true` — 아이콘과 번호를 함께 (기본)
|
|
81
|
+
* - `false` — 번호만
|
|
82
|
+
* - `'answered'` — **답이 정해진 상태에서만 아이콘으로 갈아 끼운다.** 그때는
|
|
83
|
+
* 번호를 그리지 않는다. 나머지(`idle`·`active`)는 `false` 와 같이 번호만이다.
|
|
84
|
+
*
|
|
85
|
+
* `'answered'` 가 가르는 선은 자의적이지 않다. `idle` 과 `active` 는 아이콘이
|
|
86
|
+
* 둘 다 같은 `Volume2` 라 번호보다 더 말해 주는 것이 없다. `played`·`correct` 의
|
|
87
|
+
* 체크와 `wrong` 의 가위표만이 번호가 못 하는 말을 한다 — 아이콘이 자리를
|
|
88
|
+
* 차지할 값을 하는 자리만 바꿔 끼운다.
|
|
89
|
+
*
|
|
90
|
+
* 스피커를 번호로 부르는 화면에서 필요하다. `true` 로 켜면 고르지 않은 스피커까지
|
|
91
|
+
* 아이콘이 붙고 번호가 함께 작아져(실측: 36px → 18px) 번호로 부르는 화면이 무너진다.
|
|
92
|
+
*/
|
|
93
|
+
showIcon?: boolean | 'answered';
|
|
78
94
|
/**
|
|
79
95
|
* `speakers[].shortcut` 배지가 버튼의 어느 모서리에 붙을지. 기본 우상단.
|
|
80
96
|
*
|
|
@@ -192,6 +192,12 @@ export default function SoundCompass({ speakers, size = 300, viewT = 0, activeSp
|
|
|
192
192
|
const iconSize = Math.round(Math.max(10, Math.min(56, BTN * 0.38)));
|
|
193
193
|
const numberSize = Math.round(Math.max(7, Math.min(18, BTN * 0.2)));
|
|
194
194
|
const numberOnlySize = Math.round(Math.max(10, Math.min(56, BTN * 0.4)));
|
|
195
|
+
// `'answered'` 는 답이 정해진 자리에서만 아이콘으로 **갈아 끼운다** —
|
|
196
|
+
// 아이콘과 번호를 같이 그리면 90px 버튼에서 둘 다 작아진다.
|
|
197
|
+
const swapped = showIcon === 'answered'
|
|
198
|
+
&& (state === 'played' || state === 'correct' || state === 'wrong');
|
|
199
|
+
const withIcon = showIcon === true || swapped;
|
|
200
|
+
const withNumber = !swapped;
|
|
195
201
|
return (_jsxs("div", { className: "sound-compass__speaker-pos", style: { ...baseStyle, left: x - BTN / 2, top: y - BTN / 2 }, children: [pulse && (_jsx("div", { className: `sound-compass__pulse sound-compass__pulse--${state}`
|
|
196
202
|
+ (pulse === 'once' ? ' sound-compass__pulse--once' : ''), style: {
|
|
197
203
|
width: BTN, height: BTN,
|
|
@@ -202,6 +208,6 @@ export default function SoundCompass({ speakers, size = 300, viewT = 0, activeSp
|
|
|
202
208
|
...(pulseScale !== undefined
|
|
203
209
|
? { ['--sc-pulse-scale']: String(pulseScale) }
|
|
204
210
|
: null),
|
|
205
|
-
} })), _jsxs("button", { type: "button", tabIndex: clickable ? 0 : -1, "aria-disabled": clickable ? undefined : true, onClick: clickable ? () => onSelectSpeaker?.(sp.id) : undefined, className: `sound-compass__speaker-btn sound-compass__speaker-btn--${state}`, style: { width: BTN, height: BTN }, "aria-label": sp.label, children: [
|
|
211
|
+
} })), _jsxs("button", { type: "button", tabIndex: clickable ? 0 : -1, "aria-disabled": clickable ? undefined : true, onClick: clickable ? () => onSelectSpeaker?.(sp.id) : undefined, className: `sound-compass__speaker-btn sound-compass__speaker-btn--${state}`, style: { width: BTN, height: BTN }, "aria-label": sp.label, children: [withIcon && getStateIcon(state, iconSize), withNumber && (_jsx("span", { className: "sound-compass__speaker-number", style: { fontSize: showIcon === true ? numberSize : numberOnlySize }, children: idx + 1 }))] }), sp.shortcut && (_jsx(ShortcutBadge, { keys: sp.shortcut, anchor: shortcutAnchor, className: "sound-compass__speaker-shortcut" }))] }, sp.id));
|
|
206
212
|
})] }) }));
|
|
207
213
|
}
|