@mandujs/core 0.18.10 โ†’ 0.18.12

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mandujs/core",
3
- "version": "0.18.10",
3
+ "version": "0.18.12",
4
4
  "description": "Mandu Framework Core - Spec, Generator, Guard, Runtime",
5
5
  "type": "module",
6
6
  "main": "./src/index.ts",
@@ -202,29 +202,38 @@ export function ManduBadge({
202
202
  }: ManduBadgeProps): React.ReactElement {
203
203
  const character = MANDU_CHARACTERS[state];
204
204
  const stateColor = stateColors[state];
205
+ const [isHovered, setIsHovered] = React.useState(false);
205
206
 
206
207
  const badgeStyle: React.CSSProperties = {
207
208
  display: 'flex',
208
209
  alignItems: 'center',
209
210
  justifyContent: 'center',
210
- gap: '6px',
211
- padding: '8px 12px',
211
+ gap: '8px',
212
+ padding: count > 0 ? '10px 16px' : '0',
213
+ width: count > 0 ? 'auto' : '48px',
214
+ height: '48px',
212
215
  borderRadius: '9999px',
213
216
  backgroundColor: colors.background.dark,
214
- border: `2px solid ${stateColor}`,
217
+ border: `2px solid ${isHovered ? colors.brand.accent : stateColor}`,
215
218
  cursor: 'pointer',
216
- transition: `all ${animation.duration.fast} ${animation.easing.easeOut}`,
217
- boxShadow: colors.background.overlay,
218
- fontSize: '16px',
219
+ transition: `all ${animation.duration.normal} ${animation.easing.spring}`,
220
+ boxShadow: isHovered
221
+ ? `0 8px 24px rgba(8, 6, 18, 0.4), 0 0 0 4px ${stateColor}33`
222
+ : `0 4px 12px rgba(8, 6, 18, 0.3)`,
223
+ fontSize: '22px',
219
224
  userSelect: 'none',
225
+ transform: isHovered ? 'scale(1.08)' : 'scale(1)',
226
+ outline: 'none',
227
+ lineHeight: 1,
220
228
  };
221
229
 
222
230
  const countStyle: React.CSSProperties = {
223
- fontSize: '12px',
224
- fontWeight: 600,
231
+ fontSize: '13px',
232
+ fontWeight: 700,
225
233
  color: stateColor,
226
234
  minWidth: '18px',
227
235
  textAlign: 'center',
236
+ lineHeight: 1,
228
237
  };
229
238
 
230
239
  return (
@@ -232,9 +241,13 @@ export function ManduBadge({
232
241
  data-testid={testIds.badge}
233
242
  style={badgeStyle}
234
243
  onClick={onClick}
244
+ onMouseEnter={() => setIsHovered(true)}
245
+ onMouseLeave={() => setIsHovered(false)}
246
+ onFocus={() => setIsHovered(true)}
247
+ onBlur={() => setIsHovered(false)}
235
248
  aria-label={`Mandu Kitchen: ${character.message}${count > 0 ? `, ${count} issues` : ''}`}
236
249
  >
237
- <span aria-hidden="true">{character.emoji}</span>
250
+ <span aria-hidden="true">๐ŸฅŸ</span>
238
251
  {count > 0 && <span style={countStyle}>{count}</span>}
239
252
  </button>
240
253
  );
@@ -14,21 +14,21 @@ export const colors = {
14
14
  accent: '#E8967A', // ์ƒˆ์šฐ ๋งŒ๋‘ ๋ถ„ํ™
15
15
  },
16
16
  semantic: {
17
- success: '#90EE90',
18
- warning: '#FFD700',
19
- error: '#FF6B6B',
20
- info: '#87CEEB',
17
+ success: '#7EC8A0', // ์„ธ์ด์ง€ ๊ทธ๋ฆฐ (๋”ฐ๋œปํ•œ ํ†ค)
18
+ warning: '#E8B84D', // ์•ฐ๋ฒ„ (๋ถ€๋“œ๋Ÿฌ์šด ๊ฒฝ๊ณ )
19
+ error: '#E86464', // ์†Œํ”„ํŠธ ๋ ˆ๋“œ
20
+ info: '#7AAFC8', // ์Šคํ‹ธ ๋ธ”๋ฃจ (์ฐจ๋ถ„ํ•œ ์ •๋ณด)
21
21
  },
22
22
  background: {
23
- dark: '#1A1A2E',
24
- medium: '#2D2D44',
25
- light: '#3D3D5C',
26
- overlay: 'rgba(0, 0, 0, 0.85)',
23
+ dark: '#1C1B2E', // ๋”ฐ๋œปํ•œ ๋‹คํฌ ์ธ๋””๊ณ 
24
+ medium: '#2A2940', // ๋”ฐ๋œปํ•œ ๋ฏธ๋””์—„
25
+ light: '#3A3854', // ๋”ฐ๋œปํ•œ ๋ผ์ดํŠธ
26
+ overlay: 'rgba(10, 8, 20, 0.88)',
27
27
  },
28
28
  text: {
29
- primary: '#FFFFFF',
30
- secondary: '#B0B0B0',
31
- muted: '#707070',
29
+ primary: '#F0EDE8', // ํฌ๋ฆผ ํ™”์ดํŠธ (๋”ฐ๋œปํ•œ ํ†ค)
30
+ secondary: '#A8A4A0', // ๋”ฐ๋œปํ•œ ๊ทธ๋ ˆ์ด
31
+ muted: '#6B6866', // ๋”ฐ๋œปํ•œ ๋ฎคํŠธ
32
32
  },
33
33
  } as const;
34
34
 
@@ -99,11 +99,11 @@ export const borderWidth = {
99
99
  // ============================================================================
100
100
 
101
101
  export const shadows = {
102
- sm: '0 1px 2px rgba(0, 0, 0, 0.1)',
103
- md: '0 4px 6px rgba(0, 0, 0, 0.15)',
104
- lg: '0 10px 15px rgba(0, 0, 0, 0.2)',
105
- xl: '0 20px 25px rgba(0, 0, 0, 0.25)',
106
- overlay: '0 25px 50px rgba(0, 0, 0, 0.5)',
102
+ sm: '0 1px 3px rgba(8, 6, 18, 0.12)',
103
+ md: '0 4px 8px rgba(8, 6, 18, 0.18)',
104
+ lg: '0 10px 20px rgba(8, 6, 18, 0.24)',
105
+ xl: '0 20px 30px rgba(8, 6, 18, 0.32)',
106
+ overlay: '0 25px 50px rgba(8, 6, 18, 0.5)',
107
107
  } as const;
108
108
 
109
109
  // ============================================================================