goodchuck-utils 1.7.1 → 1.9.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/dev/FormDevTools/FormDevTools.d.ts +88 -24
- package/dist/components/dev/FormDevTools/FormDevTools.d.ts.map +1 -1
- package/dist/components/dev/FormDevTools/FormDevTools.js +297 -56
- package/dist/components/dev/FormDevTools/styles.d.ts +2 -0
- package/dist/components/dev/FormDevTools/styles.d.ts.map +1 -1
- package/dist/components/dev/FormDevTools/styles.js +21 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/mock/form.d.ts +41 -0
- package/dist/mock/form.d.ts.map +1 -0
- package/dist/mock/form.js +195 -0
- package/dist/mock/generators.d.ts +112 -0
- package/dist/mock/generators.d.ts.map +1 -0
- package/dist/mock/generators.js +195 -0
- package/dist/mock/index.d.ts +8 -0
- package/dist/mock/index.d.ts.map +1 -0
- package/dist/mock/index.js +9 -0
- package/dist/number/format.d.ts +116 -0
- package/dist/number/format.d.ts.map +1 -0
- package/dist/number/format.js +165 -0
- package/dist/number/index.d.ts +7 -0
- package/dist/number/index.d.ts.map +1 -0
- package/dist/number/index.js +7 -0
- package/package.json +1 -1
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Number Formatting Utilities
|
|
3
|
+
*
|
|
4
|
+
* 숫자 및 가격 포맷팅 관련 유틸리티 함수들
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 숫자를 천 단위 구분자로 포맷팅
|
|
8
|
+
* @param value - 포맷팅할 숫자
|
|
9
|
+
* @param decimals - 소수점 자릿수 (기본값: 0)
|
|
10
|
+
* @param separator - 천 단위 구분자 (기본값: ',')
|
|
11
|
+
* @returns 포맷팅된 문자열
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* formatNumber(1234567) // "1,234,567"
|
|
15
|
+
* formatNumber(1234.56, 2) // "1,234.56"
|
|
16
|
+
* formatNumber(1234.56, 2, '.') // "1.234.56"
|
|
17
|
+
*/
|
|
18
|
+
export declare function formatNumber(value: number | string, decimals?: number, separator?: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* 가격을 포맷팅 (천 단위 구분자 + 통화 기호)
|
|
21
|
+
* @param value - 포맷팅할 가격
|
|
22
|
+
* @param currency - 통화 기호 (기본값: '₩')
|
|
23
|
+
* @param decimals - 소수점 자릿수 (기본값: 0)
|
|
24
|
+
* @param separator - 천 단위 구분자 (기본값: ',')
|
|
25
|
+
* @param position - 통화 기호 위치 (기본값: 'before')
|
|
26
|
+
* @returns 포맷팅된 가격 문자열
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* formatPrice(1234567) // "₩1,234,567"
|
|
30
|
+
* formatPrice(1234.56, '₩', 2) // "₩1,234.56"
|
|
31
|
+
* formatPrice(1234, '$', 0, ',', 'after') // "1,234$"
|
|
32
|
+
*/
|
|
33
|
+
export declare function formatPrice(value: number | string, currency?: string, decimals?: number, separator?: string, position?: 'before' | 'after'): string;
|
|
34
|
+
/**
|
|
35
|
+
* 국제화 통화 포맷팅 (Intl.NumberFormat 사용)
|
|
36
|
+
* @param value - 포맷팅할 금액
|
|
37
|
+
* @param locale - 로케일 (기본값: 'ko-KR')
|
|
38
|
+
* @param currency - 통화 코드 (기본값: 'KRW')
|
|
39
|
+
* @param style - 표시 스타일 (기본값: 'currency')
|
|
40
|
+
* @returns 포맷팅된 통화 문자열
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* formatCurrencyIntl(1234567) // "₩1,234,567"
|
|
44
|
+
* formatCurrencyIntl(1234.56, 'en-US', 'USD') // "$1,234.56"
|
|
45
|
+
* formatCurrencyIntl(1234.56, 'ja-JP', 'JPY') // "¥1,235"
|
|
46
|
+
*/
|
|
47
|
+
export declare function formatCurrencyIntl(value: number | string, locale?: string, currency?: string, style?: 'currency' | 'decimal'): string;
|
|
48
|
+
/**
|
|
49
|
+
* 가격 문자열을 숫자로 변환
|
|
50
|
+
* @param priceString - 가격 문자열 (예: "₩1,234,567" 또는 "1,234.56")
|
|
51
|
+
* @returns 변환된 숫자
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* parsePrice("₩1,234,567") // 1234567
|
|
55
|
+
* parsePrice("1,234.56") // 1234.56
|
|
56
|
+
* parsePrice("$1,234.56") // 1234.56
|
|
57
|
+
*/
|
|
58
|
+
export declare function parsePrice(priceString: string): number;
|
|
59
|
+
/**
|
|
60
|
+
* 할인율 계산
|
|
61
|
+
* @param originalPrice - 원래 가격
|
|
62
|
+
* @param discountedPrice - 할인된 가격
|
|
63
|
+
* @returns 할인율 (퍼센트)
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* calculateDiscount(10000, 8000) // 20
|
|
67
|
+
* calculateDiscount(100, 75) // 25
|
|
68
|
+
*/
|
|
69
|
+
export declare function calculateDiscount(originalPrice: number, discountedPrice: number): number;
|
|
70
|
+
/**
|
|
71
|
+
* 할인 가격 계산
|
|
72
|
+
* @param originalPrice - 원래 가격
|
|
73
|
+
* @param discountPercent - 할인율 (퍼센트)
|
|
74
|
+
* @returns 할인된 가격
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* calculateDiscountedPrice(10000, 20) // 8000
|
|
78
|
+
* calculateDiscountedPrice(100, 25) // 75
|
|
79
|
+
*/
|
|
80
|
+
export declare function calculateDiscountedPrice(originalPrice: number, discountPercent: number): number;
|
|
81
|
+
/**
|
|
82
|
+
* 세금 포함 가격 계산
|
|
83
|
+
* @param price - 세전 가격
|
|
84
|
+
* @param taxRate - 세율 (퍼센트, 기본값: 10)
|
|
85
|
+
* @returns 세금 포함 가격
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* calculatePriceWithTax(10000, 10) // 11000
|
|
89
|
+
* calculatePriceWithTax(100, 20) // 120
|
|
90
|
+
*/
|
|
91
|
+
export declare function calculatePriceWithTax(price: number, taxRate?: number): number;
|
|
92
|
+
/**
|
|
93
|
+
* 세금 제외 가격 계산
|
|
94
|
+
* @param priceWithTax - 세금 포함 가격
|
|
95
|
+
* @param taxRate - 세율 (퍼센트, 기본값: 10)
|
|
96
|
+
* @returns 세전 가격
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* calculatePriceWithoutTax(11000, 10) // 10000
|
|
100
|
+
* calculatePriceWithoutTax(120, 20) // 100
|
|
101
|
+
*/
|
|
102
|
+
export declare function calculatePriceWithoutTax(priceWithTax: number, taxRate?: number): number;
|
|
103
|
+
/**
|
|
104
|
+
* 백분율 포맷팅
|
|
105
|
+
* @param value - 포맷팅할 값 (0-1 또는 0-100)
|
|
106
|
+
* @param decimals - 소수점 자릿수 (기본값: 1)
|
|
107
|
+
* @param isDecimal - 값이 0-1 범위인지 여부 (기본값: false, 0-100 범위)
|
|
108
|
+
* @returns 포맷팅된 퍼센트 문자열
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* formatPercent(0.1234, 1, true) // "12.3%"
|
|
112
|
+
* formatPercent(12.34, 1, false) // "12.3%"
|
|
113
|
+
* formatPercent(50) // "50.0%"
|
|
114
|
+
*/
|
|
115
|
+
export declare function formatPercent(value: number, decimals?: number, isDecimal?: boolean): string;
|
|
116
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/number/format.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,GAAE,MAAU,EACpB,SAAS,GAAE,MAAY,GACtB,MAAM,CAaR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,GAAE,MAAY,EACtB,QAAQ,GAAE,MAAU,EACpB,SAAS,GAAE,MAAY,EACvB,QAAQ,GAAE,QAAQ,GAAG,OAAkB,GACtC,MAAM,CAIR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,MAAM,GAAE,MAAgB,EACxB,QAAQ,GAAE,MAAc,EACxB,KAAK,GAAE,UAAU,GAAG,SAAsB,GACzC,MAAM,CAaR;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAUtD;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAOxF;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAG/F;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,MAAM,CAGjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,MAAM,CAG3F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,MAAU,EACpB,SAAS,GAAE,OAAe,GACzB,MAAM,CAGR"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Number Formatting Utilities
|
|
3
|
+
*
|
|
4
|
+
* 숫자 및 가격 포맷팅 관련 유틸리티 함수들
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 숫자를 천 단위 구분자로 포맷팅
|
|
8
|
+
* @param value - 포맷팅할 숫자
|
|
9
|
+
* @param decimals - 소수점 자릿수 (기본값: 0)
|
|
10
|
+
* @param separator - 천 단위 구분자 (기본값: ',')
|
|
11
|
+
* @returns 포맷팅된 문자열
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* formatNumber(1234567) // "1,234,567"
|
|
15
|
+
* formatNumber(1234.56, 2) // "1,234.56"
|
|
16
|
+
* formatNumber(1234.56, 2, '.') // "1.234.56"
|
|
17
|
+
*/
|
|
18
|
+
export function formatNumber(value, decimals = 0, separator = ',') {
|
|
19
|
+
const num = typeof value === 'string' ? parseFloat(value) : value;
|
|
20
|
+
if (isNaN(num)) {
|
|
21
|
+
return '0';
|
|
22
|
+
}
|
|
23
|
+
const fixed = num.toFixed(decimals);
|
|
24
|
+
const parts = fixed.split('.');
|
|
25
|
+
const integerPart = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, separator);
|
|
26
|
+
const decimalPart = parts[1] ? `.${parts[1]}` : '';
|
|
27
|
+
return integerPart + decimalPart;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 가격을 포맷팅 (천 단위 구분자 + 통화 기호)
|
|
31
|
+
* @param value - 포맷팅할 가격
|
|
32
|
+
* @param currency - 통화 기호 (기본값: '₩')
|
|
33
|
+
* @param decimals - 소수점 자릿수 (기본값: 0)
|
|
34
|
+
* @param separator - 천 단위 구분자 (기본값: ',')
|
|
35
|
+
* @param position - 통화 기호 위치 (기본값: 'before')
|
|
36
|
+
* @returns 포맷팅된 가격 문자열
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* formatPrice(1234567) // "₩1,234,567"
|
|
40
|
+
* formatPrice(1234.56, '₩', 2) // "₩1,234.56"
|
|
41
|
+
* formatPrice(1234, '$', 0, ',', 'after') // "1,234$"
|
|
42
|
+
*/
|
|
43
|
+
export function formatPrice(value, currency = '₩', decimals = 0, separator = ',', position = 'before') {
|
|
44
|
+
const formatted = formatNumber(value, decimals, separator);
|
|
45
|
+
return position === 'before' ? `${currency}${formatted}` : `${formatted}${currency}`;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 국제화 통화 포맷팅 (Intl.NumberFormat 사용)
|
|
49
|
+
* @param value - 포맷팅할 금액
|
|
50
|
+
* @param locale - 로케일 (기본값: 'ko-KR')
|
|
51
|
+
* @param currency - 통화 코드 (기본값: 'KRW')
|
|
52
|
+
* @param style - 표시 스타일 (기본값: 'currency')
|
|
53
|
+
* @returns 포맷팅된 통화 문자열
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* formatCurrencyIntl(1234567) // "₩1,234,567"
|
|
57
|
+
* formatCurrencyIntl(1234.56, 'en-US', 'USD') // "$1,234.56"
|
|
58
|
+
* formatCurrencyIntl(1234.56, 'ja-JP', 'JPY') // "¥1,235"
|
|
59
|
+
*/
|
|
60
|
+
export function formatCurrencyIntl(value, locale = 'ko-KR', currency = 'KRW', style = 'currency') {
|
|
61
|
+
const num = typeof value === 'string' ? parseFloat(value) : value;
|
|
62
|
+
if (isNaN(num)) {
|
|
63
|
+
return '0';
|
|
64
|
+
}
|
|
65
|
+
return new Intl.NumberFormat(locale, {
|
|
66
|
+
style,
|
|
67
|
+
currency,
|
|
68
|
+
minimumFractionDigits: currency === 'KRW' || currency === 'JPY' ? 0 : 2,
|
|
69
|
+
maximumFractionDigits: currency === 'KRW' || currency === 'JPY' ? 0 : 2,
|
|
70
|
+
}).format(num);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 가격 문자열을 숫자로 변환
|
|
74
|
+
* @param priceString - 가격 문자열 (예: "₩1,234,567" 또는 "1,234.56")
|
|
75
|
+
* @returns 변환된 숫자
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* parsePrice("₩1,234,567") // 1234567
|
|
79
|
+
* parsePrice("1,234.56") // 1234.56
|
|
80
|
+
* parsePrice("$1,234.56") // 1234.56
|
|
81
|
+
*/
|
|
82
|
+
export function parsePrice(priceString) {
|
|
83
|
+
if (!priceString || typeof priceString !== 'string') {
|
|
84
|
+
return 0;
|
|
85
|
+
}
|
|
86
|
+
// 통화 기호, 공백, 쉼표 제거
|
|
87
|
+
const cleaned = priceString.replace(/[₩$€£¥,\s]/g, '');
|
|
88
|
+
const parsed = parseFloat(cleaned);
|
|
89
|
+
return isNaN(parsed) ? 0 : parsed;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* 할인율 계산
|
|
93
|
+
* @param originalPrice - 원래 가격
|
|
94
|
+
* @param discountedPrice - 할인된 가격
|
|
95
|
+
* @returns 할인율 (퍼센트)
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* calculateDiscount(10000, 8000) // 20
|
|
99
|
+
* calculateDiscount(100, 75) // 25
|
|
100
|
+
*/
|
|
101
|
+
export function calculateDiscount(originalPrice, discountedPrice) {
|
|
102
|
+
if (originalPrice <= 0) {
|
|
103
|
+
return 0;
|
|
104
|
+
}
|
|
105
|
+
const discount = ((originalPrice - discountedPrice) / originalPrice) * 100;
|
|
106
|
+
return Math.round(discount * 100) / 100; // 소수점 2자리까지
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 할인 가격 계산
|
|
110
|
+
* @param originalPrice - 원래 가격
|
|
111
|
+
* @param discountPercent - 할인율 (퍼센트)
|
|
112
|
+
* @returns 할인된 가격
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* calculateDiscountedPrice(10000, 20) // 8000
|
|
116
|
+
* calculateDiscountedPrice(100, 25) // 75
|
|
117
|
+
*/
|
|
118
|
+
export function calculateDiscountedPrice(originalPrice, discountPercent) {
|
|
119
|
+
const discount = (originalPrice * discountPercent) / 100;
|
|
120
|
+
return Math.round((originalPrice - discount) * 100) / 100;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* 세금 포함 가격 계산
|
|
124
|
+
* @param price - 세전 가격
|
|
125
|
+
* @param taxRate - 세율 (퍼센트, 기본값: 10)
|
|
126
|
+
* @returns 세금 포함 가격
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* calculatePriceWithTax(10000, 10) // 11000
|
|
130
|
+
* calculatePriceWithTax(100, 20) // 120
|
|
131
|
+
*/
|
|
132
|
+
export function calculatePriceWithTax(price, taxRate = 10) {
|
|
133
|
+
const tax = (price * taxRate) / 100;
|
|
134
|
+
return Math.round((price + tax) * 100) / 100;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* 세금 제외 가격 계산
|
|
138
|
+
* @param priceWithTax - 세금 포함 가격
|
|
139
|
+
* @param taxRate - 세율 (퍼센트, 기본값: 10)
|
|
140
|
+
* @returns 세전 가격
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* calculatePriceWithoutTax(11000, 10) // 10000
|
|
144
|
+
* calculatePriceWithoutTax(120, 20) // 100
|
|
145
|
+
*/
|
|
146
|
+
export function calculatePriceWithoutTax(priceWithTax, taxRate = 10) {
|
|
147
|
+
const price = priceWithTax / (1 + taxRate / 100);
|
|
148
|
+
return Math.round(price * 100) / 100;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* 백분율 포맷팅
|
|
152
|
+
* @param value - 포맷팅할 값 (0-1 또는 0-100)
|
|
153
|
+
* @param decimals - 소수점 자릿수 (기본값: 1)
|
|
154
|
+
* @param isDecimal - 값이 0-1 범위인지 여부 (기본값: false, 0-100 범위)
|
|
155
|
+
* @returns 포맷팅된 퍼센트 문자열
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* formatPercent(0.1234, 1, true) // "12.3%"
|
|
159
|
+
* formatPercent(12.34, 1, false) // "12.3%"
|
|
160
|
+
* formatPercent(50) // "50.0%"
|
|
161
|
+
*/
|
|
162
|
+
export function formatPercent(value, decimals = 1, isDecimal = false) {
|
|
163
|
+
const percent = isDecimal ? value * 100 : value;
|
|
164
|
+
return `${percent.toFixed(decimals)}%`;
|
|
165
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/number/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,UAAU,CAAC"}
|