@sellmate/design-system 1.0.15 → 1.0.16
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/cjs/design-system.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{sd-button_17.cjs.entry.js → sd-button_18.cjs.entry.js} +283 -15
- package/dist/cjs/sd-popover.cjs.entry.js +2 -2
- package/dist/cjs/sd-progress.cjs.entry.js +2 -2
- package/dist/cjs/sd-select-multiple.cjs.entry.js +1 -1
- package/dist/cjs/sd-select-option-group.cjs.entry.js +3 -3
- package/dist/cjs/sd-toggle-button.cjs.entry.js +1 -1
- package/dist/cjs/sd-toggle.cjs.entry.js +1 -1
- package/dist/collection/components/sd-field/sd-field.js +4 -3
- package/dist/collection/components/sd-field/sd-field.js.map +1 -1
- package/dist/collection/components/sd-number-input/sd-number-input.css +4 -25
- package/dist/collection/components/sd-number-input/sd-number-input.js +186 -27
- package/dist/collection/components/sd-number-input/sd-number-input.js.map +1 -1
- package/dist/collection/components/sd-pagination/sd-pagination.js +2 -2
- package/dist/collection/components/sd-popover/sd-popover.js +2 -2
- package/dist/collection/components/sd-portal/sd-portal.js +1 -1
- package/dist/collection/components/sd-progress/sd-progress.js +2 -2
- package/dist/collection/components/sd-select/sd-select-dropdown/sd-select-dropdown.js +2 -2
- package/dist/collection/components/sd-select/sd-select-option/sd-select-option.js +1 -1
- package/dist/collection/components/sd-select/sd-select-search-input/sd-select-search-input.js +3 -3
- package/dist/collection/components/sd-select-multiple/sd-select-multiple.js +1 -1
- package/dist/collection/components/sd-select-multiple-group/sd-select-option-group/sd-select-option-group.js +3 -3
- package/dist/collection/components/sd-textarea/sd-textarea.js +2 -2
- package/dist/collection/components/sd-toggle/sd-toggle.js +1 -1
- package/dist/collection/components/sd-toggle-button/sd-toggle-button.js +1 -1
- package/dist/components/{p-Bgf0RnXW.js → p-B-8YfRUg.js} +5 -5
- package/dist/components/{p-Bgf0RnXW.js.map → p-B-8YfRUg.js.map} +1 -1
- package/dist/components/{p-SUihbngJ.js → p-C2pN-_wD.js} +6 -5
- package/dist/components/p-C2pN-_wD.js.map +1 -0
- package/dist/components/p-CCwNgVmC.js +16 -0
- package/dist/components/p-CCwNgVmC.js.map +1 -0
- package/dist/components/{p-CYr3YYfa.js → p-CFHNnfIq.js} +7 -7
- package/dist/components/{p-CYr3YYfa.js.map → p-CFHNnfIq.js.map} +1 -1
- package/dist/components/{p-CXyVUgP3.js → p-CkzAorp3.js} +8 -8
- package/dist/components/{p-CXyVUgP3.js.map → p-CkzAorp3.js.map} +1 -1
- package/dist/components/{p-CbEUJ3R6.js → p-D16-dM6f.js} +3 -3
- package/dist/components/{p-CbEUJ3R6.js.map → p-D16-dM6f.js.map} +1 -1
- package/dist/components/{p-wRu9w6Gl.js → p-DUh9r-hn.js} +4 -4
- package/dist/components/{p-wRu9w6Gl.js.map → p-DUh9r-hn.js.map} +1 -1
- package/dist/components/{p-B0HvHSm3.js → p-DjZ8vXCq.js} +9 -8
- package/dist/components/p-DjZ8vXCq.js.map +1 -0
- package/dist/components/{p-CYYaSMIB.js → p-Dv4dN3Y5.js} +3 -3
- package/dist/components/{p-CYYaSMIB.js.map → p-Dv4dN3Y5.js.map} +1 -1
- package/dist/components/{p-DQE5-tOR.js → p-xfqZA_70.js} +5 -16
- package/dist/components/p-xfqZA_70.js.map +1 -0
- package/dist/components/sd-date-picker.js +3 -3
- package/dist/components/sd-date-range-picker.js +3 -3
- package/dist/components/sd-field.js +1 -1
- package/dist/components/sd-guide.js +1 -1
- package/dist/components/sd-input.js +1 -1
- package/dist/components/sd-number-input.js +64 -23
- package/dist/components/sd-number-input.js.map +1 -1
- package/dist/components/sd-pagination.js +1 -1
- package/dist/components/sd-popover.js +2 -2
- package/dist/components/sd-portal.js +1 -1
- package/dist/components/sd-progress.js +2 -2
- package/dist/components/sd-select-dropdown.js +1 -1
- package/dist/components/sd-select-multiple-group.js +5 -5
- package/dist/components/sd-select-multiple.js +7 -7
- package/dist/components/sd-select-option-group.js +1 -1
- package/dist/components/sd-select-option.js +1 -1
- package/dist/components/sd-select-search-input.js +1 -1
- package/dist/components/sd-select.js +1 -1
- package/dist/components/sd-table.js +8 -8
- package/dist/components/sd-textarea.js +2 -2
- package/dist/components/sd-toggle-button.js +1 -1
- package/dist/components/sd-toggle.js +1 -1
- package/dist/design-system/design-system.esm.js +1 -1
- package/dist/design-system/p-35a79a70.entry.js +2 -0
- package/dist/design-system/p-559728ad.entry.js +2 -0
- package/dist/design-system/p-559728ad.entry.js.map +1 -0
- package/dist/design-system/{p-cb3dd19f.entry.js → p-c77a42a2.entry.js} +2 -2
- package/dist/design-system/{p-1d6dabd7.entry.js → p-d7258320.entry.js} +2 -2
- package/dist/design-system/{p-44af67a6.entry.js → p-e5272c50.entry.js} +2 -2
- package/dist/design-system/{p-1616a1f6.entry.js → p-e6d39e65.entry.js} +2 -2
- package/dist/design-system/{p-cb502581.entry.js → p-ee96032f.entry.js} +2 -2
- package/dist/esm/design-system.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{sd-button_17.entry.js → sd-button_18.entry.js} +283 -16
- package/dist/esm/sd-popover.entry.js +2 -2
- package/dist/esm/sd-progress.entry.js +2 -2
- package/dist/esm/sd-select-multiple.entry.js +1 -1
- package/dist/esm/sd-select-option-group.entry.js +3 -3
- package/dist/esm/sd-toggle-button.entry.js +1 -1
- package/dist/esm/sd-toggle.entry.js +1 -1
- package/dist/types/components/sd-number-input/sd-number-input.d.ts +12 -3
- package/dist/types/components.d.ts +44 -2
- package/hydrate/index.js +62 -45
- package/hydrate/index.mjs +62 -45
- package/package.json +1 -1
- package/dist/cjs/sd-number-input.cjs.entry.js +0 -262
- package/dist/components/p-B0HvHSm3.js.map +0 -1
- package/dist/components/p-DQE5-tOR.js.map +0 -1
- package/dist/components/p-SUihbngJ.js.map +0 -1
- package/dist/design-system/p-29b74787.entry.js +0 -2
- package/dist/design-system/p-29b74787.entry.js.map +0 -1
- package/dist/design-system/p-390feb8e.entry.js +0 -2
- package/dist/design-system/p-54376630.entry.js +0 -2
- package/dist/design-system/p-54376630.entry.js.map +0 -1
- package/dist/esm/sd-number-input.entry.js +0 -260
- package/dist/esm/sd-number-input.entry.js.map +0 -1
- /package/dist/design-system/{p-390feb8e.entry.js.map → p-35a79a70.entry.js.map} +0 -0
- /package/dist/design-system/{p-cb3dd19f.entry.js.map → p-c77a42a2.entry.js.map} +0 -0
- /package/dist/design-system/{p-1d6dabd7.entry.js.map → p-d7258320.entry.js.map} +0 -0
- /package/dist/design-system/{p-44af67a6.entry.js.map → p-e5272c50.entry.js.map} +0 -0
- /package/dist/design-system/{p-1616a1f6.entry.js.map → p-e6d39e65.entry.js.map} +0 -0
- /package/dist/design-system/{p-cb502581.entry.js.map → p-ee96032f.entry.js.map} +0 -0
|
@@ -1,260 +0,0 @@
|
|
|
1
|
-
import { r as registerInstance, c as createEvent, a as getElement, h } from './index-DqSa0XJ6.js';
|
|
2
|
-
|
|
3
|
-
const sdNumberInputCss = () => `sd-icon{display:inline-block;line-height:0}sd-icon .sd-icon--rotate-90{transform:rotate(90deg)}sd-icon .sd-icon--rotate-180{transform:rotate(180deg)}sd-icon .sd-icon--rotate-270{transform:rotate(270deg)}sd-number-input .sd-number-input-container{display:inline-flex}sd-number-input .sd-number-input{box-sizing:border-box;display:flex;width:var(--input-width, 100%);align-items:center;height:28px;padding:4px 8px;border:1px solid #aaaaaa;border-radius:4px;color:#333333;font-size:12px;line-height:20px;background:white;position:relative}sd-number-input .sd-number-input--hovered{border-color:#0075ff;box-shadow:0 0 4px 0 rgba(0, 113, 255, 0.4)}sd-number-input .sd-number-input.sd-number-input--error{border-color:#fb4444}sd-number-input .sd-number-input.sd-number-input--pass{border-color:#2bce6c}sd-number-input .sd-number-input.sd-number-input--disabled{background-color:#eeeeee !important;border-color:#cccccc !important;cursor:not-allowed !important;box-shadow:none !important}sd-number-input .sd-number-input.sd-number-input--disabled .sd-number-input__input{color:#888888 !important;cursor:not-allowed !important}sd-number-input .sd-number-input .sd-number-input__input{display:block;width:100%;height:20px;line-height:20px;border:none;outline:none;background:transparent;font-size:inherit;color:#333333;margin-left:4px;margin-right:4px;padding-block:0;padding-inline:0;text-align:right}sd-number-input .sd-number-input .sd-number-input__input::placeholder{font-size:12px;height:20px;line-height:20px;color:#aaaaaa}sd-number-input .sd-number-input .sd-number-input__clear-icon{cursor:pointer;margin-left:8px}sd-number-input .sd-number-input .sd-number-input__buttons{padding:4px;display:flex;justify-content:space-between;align-items:center;position:absolute;inset:0;opacity:0;pointer-events:none;transition:opacity 0.2s ease}sd-number-input .sd-number-input .sd-number-input__button{width:20px;height:20px;border:none;border-radius:2px;background-color:#eff6ff;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;margin:0;transition:background-color 0.2s ease}sd-number-input .sd-number-input .sd-number-input__button:hover:not(:disabled){background-color:#e6f1ff}sd-number-input .sd-number-input .sd-number-input__button:disabled{background-color:#eeeeee;cursor:not-allowed}sd-number-input .sd-number-input .sd-number-input__button--decrement{border-bottom-left-radius:0;border-bottom-right-radius:0}sd-number-input .sd-number-input .sd-number-input__button--increment{border-top-left-radius:0;border-top-right-radius:0}sd-number-input .sd-number-input .sd-number-input__label{margin-bottom:8px;font-weight:500;color:#333333}sd-number-input:focus-within .sd-number-input__buttons{opacity:1;pointer-events:auto}sd-number-input:focus-within .sd-number-input{border-color:#0075ff;box-shadow:0 0 4px 0 rgba(0, 113, 255, 0.4)}`;
|
|
4
|
-
|
|
5
|
-
const SdNumberInput = class {
|
|
6
|
-
constructor(hostRef) {
|
|
7
|
-
registerInstance(this, hostRef);
|
|
8
|
-
this.update = createEvent(this, "sdUpdate");
|
|
9
|
-
this.focus = createEvent(this, "sdFocus");
|
|
10
|
-
this.blur = createEvent(this, "sdBlur");
|
|
11
|
-
}
|
|
12
|
-
get el() { return getElement(this); }
|
|
13
|
-
min = Number.NEGATIVE_INFINITY;
|
|
14
|
-
max = Number.POSITIVE_INFINITY;
|
|
15
|
-
step = 1;
|
|
16
|
-
useButton = false;
|
|
17
|
-
useDecimal = false;
|
|
18
|
-
value = null;
|
|
19
|
-
label;
|
|
20
|
-
placeholder = '입력해 주세요.';
|
|
21
|
-
disabled = false;
|
|
22
|
-
width;
|
|
23
|
-
rules;
|
|
24
|
-
autoFocus = false;
|
|
25
|
-
status;
|
|
26
|
-
inputClass = '';
|
|
27
|
-
readonly = false;
|
|
28
|
-
inputStyle = {};
|
|
29
|
-
internalValue = null;
|
|
30
|
-
displayValue = '';
|
|
31
|
-
hovered = false;
|
|
32
|
-
error = false;
|
|
33
|
-
nativeEl = undefined;
|
|
34
|
-
update;
|
|
35
|
-
focus;
|
|
36
|
-
blur;
|
|
37
|
-
formatWithCommas(value) {
|
|
38
|
-
if (value === null || value === undefined)
|
|
39
|
-
return '';
|
|
40
|
-
const isNegative = value < 0;
|
|
41
|
-
const absValue = Math.abs(value);
|
|
42
|
-
const [intPart, decPart] = absValue.toString().split('.');
|
|
43
|
-
const formatted = (+intPart).toLocaleString();
|
|
44
|
-
const result = isNegative ? '-' + formatted : formatted;
|
|
45
|
-
return decPart ? result + '.' + decPart : String(result);
|
|
46
|
-
}
|
|
47
|
-
parseInput(input) {
|
|
48
|
-
if (!input || input.trim() === '')
|
|
49
|
-
return null;
|
|
50
|
-
const cleaned = input.replace(/,/g, '').trim();
|
|
51
|
-
// -로 시작을 할 수 있을 수 있고, 소수점 0.n | .n
|
|
52
|
-
if (!/^-?(\d+\.?\d*|\d*\.\d+)$/.test(cleaned)) {
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
const parsed = parseFloat(cleaned);
|
|
56
|
-
if (isNaN(parsed))
|
|
57
|
-
return null;
|
|
58
|
-
// 소수점 사용 하지 않는데 . 이 있는 경우
|
|
59
|
-
if (!this.useDecimal && cleaned.includes('.')) {
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
return parsed;
|
|
63
|
-
}
|
|
64
|
-
clampMinMax(value) {
|
|
65
|
-
return Math.min(Math.max(value, this.min), this.max);
|
|
66
|
-
}
|
|
67
|
-
updateDisplay() {
|
|
68
|
-
this.displayValue = this.formatWithCommas(this.internalValue);
|
|
69
|
-
}
|
|
70
|
-
isIncrementDisabled() {
|
|
71
|
-
if (this.disabled || this.readonly)
|
|
72
|
-
return true;
|
|
73
|
-
if (this.internalValue !== null) {
|
|
74
|
-
return this.internalValue >= this.max;
|
|
75
|
-
}
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
isDecrementDisabled() {
|
|
79
|
-
if (this.disabled || this.readonly)
|
|
80
|
-
return true;
|
|
81
|
-
if (this.internalValue !== null) {
|
|
82
|
-
return this.internalValue <= this.min;
|
|
83
|
-
}
|
|
84
|
-
return false;
|
|
85
|
-
}
|
|
86
|
-
valueChanged(newValue) {
|
|
87
|
-
if (newValue === null || newValue === '') {
|
|
88
|
-
this.internalValue = null;
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
const parsed = typeof newValue === 'string' ? this.parseInput(newValue) : newValue;
|
|
92
|
-
if (parsed !== null) {
|
|
93
|
-
this.internalValue = this.clampMinMax(parsed);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
this.updateDisplay();
|
|
97
|
-
}
|
|
98
|
-
internalValueChanged(newValue) {
|
|
99
|
-
this.updateDisplay();
|
|
100
|
-
if (newValue !== this.value) {
|
|
101
|
-
this.value = newValue;
|
|
102
|
-
this.update?.emit(newValue);
|
|
103
|
-
}
|
|
104
|
-
if (!this.rules || this.rules.length === 0)
|
|
105
|
-
return;
|
|
106
|
-
this.error = false;
|
|
107
|
-
for (const rule of this.rules) {
|
|
108
|
-
const result = rule(newValue);
|
|
109
|
-
if (result !== true) {
|
|
110
|
-
this.error = true;
|
|
111
|
-
break;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
componentWillLoad() {
|
|
116
|
-
if (this.value !== null && this.value !== undefined) {
|
|
117
|
-
const parsed = typeof this.value === 'string' ? this.parseInput(this.value) : this.value;
|
|
118
|
-
if (parsed !== null) {
|
|
119
|
-
this.internalValue = this.clampMinMax(parsed);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
this.updateDisplay();
|
|
123
|
-
}
|
|
124
|
-
// TODO: 현재 숫자를 크게 넣어서 숫자e+21등의 형식으로 변환되면 값이 바뀌지않음 수정 필요
|
|
125
|
-
handleInput = (event) => {
|
|
126
|
-
const target = event.target;
|
|
127
|
-
const inputValue = target.value;
|
|
128
|
-
if (inputValue === '') {
|
|
129
|
-
this.internalValue = null;
|
|
130
|
-
this.displayValue = '';
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
const commasRemoved = inputValue.replace(/,/g, '');
|
|
134
|
-
// 만약에 소수점 (.) 이 여러개 일 경우
|
|
135
|
-
const decimalCount = (commasRemoved.match(/\./g) || []).length;
|
|
136
|
-
if (decimalCount > 1) {
|
|
137
|
-
target.value = this.displayValue;
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
// 가능: "-", ".", "-." (단순 기호만 있는 경우)
|
|
141
|
-
if (commasRemoved === '-' || commasRemoved === '.' || commasRemoved === '-.') {
|
|
142
|
-
target.value = commasRemoved;
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
// 숫자 뒤에 . 이 있는 경우 (예: "1000.") -> 콤마 포맷 적용 + . 유지
|
|
146
|
-
if (commasRemoved.endsWith('.') && decimalCount === 1) {
|
|
147
|
-
const numberPart = commasRemoved.slice(0, -1);
|
|
148
|
-
const parsed = this.parseInput(numberPart);
|
|
149
|
-
if (parsed !== null) {
|
|
150
|
-
const formatted = this.formatWithCommas(parsed);
|
|
151
|
-
target.value = formatted + '.';
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
const parsed = this.parseInput(commasRemoved);
|
|
156
|
-
if (parsed !== null) {
|
|
157
|
-
if (parsed < this.min) {
|
|
158
|
-
target.value = this.displayValue;
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
if (parsed > this.max) {
|
|
162
|
-
target.value = this.displayValue;
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
this.internalValue = parsed;
|
|
166
|
-
this.displayValue = this.formatWithCommas(parsed);
|
|
167
|
-
target.value = this.displayValue;
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
target.value = this.displayValue;
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
handleFocus = (event) => {
|
|
174
|
-
this.focus?.emit(event);
|
|
175
|
-
};
|
|
176
|
-
handleBlur = (event) => {
|
|
177
|
-
this.updateDisplay();
|
|
178
|
-
if (this.nativeEl) {
|
|
179
|
-
this.nativeEl.value = this.displayValue;
|
|
180
|
-
}
|
|
181
|
-
this.blur?.emit(event);
|
|
182
|
-
};
|
|
183
|
-
handleKeyDown = (event) => {
|
|
184
|
-
if (event.key === 'ArrowUp') {
|
|
185
|
-
event.preventDefault();
|
|
186
|
-
this.handleIncrement();
|
|
187
|
-
}
|
|
188
|
-
else if (event.key === 'ArrowDown') {
|
|
189
|
-
event.preventDefault();
|
|
190
|
-
this.handleDecrement();
|
|
191
|
-
}
|
|
192
|
-
};
|
|
193
|
-
handleIncrement = () => {
|
|
194
|
-
if (this.isIncrementDisabled())
|
|
195
|
-
return;
|
|
196
|
-
const currentVal = this.internalValue ?? this.min ?? 0;
|
|
197
|
-
let nextVal = currentVal + this.step;
|
|
198
|
-
if (nextVal > this.max) {
|
|
199
|
-
nextVal = this.max;
|
|
200
|
-
}
|
|
201
|
-
if (nextVal === currentVal)
|
|
202
|
-
return;
|
|
203
|
-
this.internalValue = nextVal;
|
|
204
|
-
};
|
|
205
|
-
handleDecrement = () => {
|
|
206
|
-
if (this.isDecrementDisabled())
|
|
207
|
-
return;
|
|
208
|
-
const currentVal = this.internalValue ?? this.min ?? 0;
|
|
209
|
-
let nextVal = currentVal - this.step;
|
|
210
|
-
if (nextVal < this.min) {
|
|
211
|
-
nextVal = this.min;
|
|
212
|
-
}
|
|
213
|
-
if (nextVal === currentVal)
|
|
214
|
-
return;
|
|
215
|
-
this.internalValue = nextVal;
|
|
216
|
-
};
|
|
217
|
-
async sdGetNativeElement() {
|
|
218
|
-
return this.nativeEl || null;
|
|
219
|
-
}
|
|
220
|
-
getInputStatus() {
|
|
221
|
-
if (this.disabled)
|
|
222
|
-
return 'sd-number-input--disabled';
|
|
223
|
-
if (this.hovered)
|
|
224
|
-
return 'sd-number-input--hovered';
|
|
225
|
-
if (this.status)
|
|
226
|
-
return `sd-number-input--${this.status}`;
|
|
227
|
-
if (this.error)
|
|
228
|
-
return 'sd-number-input--error';
|
|
229
|
-
return '';
|
|
230
|
-
}
|
|
231
|
-
render() {
|
|
232
|
-
const inputWidth = this.width
|
|
233
|
-
? {
|
|
234
|
-
'--input-width': typeof this.width === 'number' ? `${this.width}px` : this.width,
|
|
235
|
-
}
|
|
236
|
-
: {};
|
|
237
|
-
const inputStyles = {
|
|
238
|
-
textAlign: this.useButton ? 'center' : 'right',
|
|
239
|
-
};
|
|
240
|
-
return (h("div", { key: 'b46cd55c205c9d0f0b7e4af181cbef7cc558f464', class: "sd-number-input-container", style: inputWidth, onFocus: this.handleFocus, onBlur: this.handleBlur }, this.label && h("div", { key: 'f2e0ef64df2132b0efca4bd5d50441f191fcc307', class: "sd-number-input__label" }, this.label), h("label", { key: '98920eb7ee7e07ad4719069201beffdeb3c8510a', class: {
|
|
241
|
-
'sd-number-input': true,
|
|
242
|
-
[this.getInputStatus()]: true,
|
|
243
|
-
'sd-number-input--with-buttons': this.useButton,
|
|
244
|
-
}, onMouseEnter: () => (this.hovered = true), onMouseLeave: () => (this.hovered = false), style: this.inputStyle }, h("input", { key: 'b8ffd42e1a1d3936f6f8b5bf2351b46d31a193ad', ref: el => (this.nativeEl = el), class: `sd-number-input__input ${this.inputClass}`, type: "text", inputMode: "numeric", value: this.displayValue, placeholder: this.placeholder, disabled: this.disabled, readonly: this.readonly, autofocus: this.autoFocus, onInput: this.handleInput, onKeyDown: this.handleKeyDown, style: inputStyles }), this.useButton && (h("div", { key: 'b94de21e7b6b1020daac92cfefe9215444704a43', class: "sd-number-input__buttons" }, h("button", { key: '0a96725cc1c469db6c7520d21df06f757d20ffc6', type: "button", class: {
|
|
245
|
-
'sd-number-input__button': true,
|
|
246
|
-
'sd-number-input__button--decrement': true,
|
|
247
|
-
}, disabled: this.isDecrementDisabled(), onClick: this.handleDecrement, tabindex: -1 }, h("sd-icon", { key: '598f637e2ad3cb46f4c881552dc2812c86964c68', name: "minus", size: 12, color: this.isDecrementDisabled() ? 'grey_45' : 'brilliantblue_70' })), h("button", { key: '03532b7f895aaa6b616739c1a2272c0a517a2140', type: "button", class: {
|
|
248
|
-
'sd-number-input__button': true,
|
|
249
|
-
'sd-number-input__button--increment': true,
|
|
250
|
-
}, disabled: this.isIncrementDisabled(), onClick: this.handleIncrement, tabindex: -1 }, h("sd-icon", { key: 'bd9d565d790305f4153e52a4323dce18559df970', name: "add", size: 12, color: this.isIncrementDisabled() ? 'grey_45' : 'brilliantblue_70' })))))));
|
|
251
|
-
}
|
|
252
|
-
static get watchers() { return {
|
|
253
|
-
"value": ["valueChanged"],
|
|
254
|
-
"internalValue": ["internalValueChanged"]
|
|
255
|
-
}; }
|
|
256
|
-
};
|
|
257
|
-
SdNumberInput.style = sdNumberInputCss();
|
|
258
|
-
|
|
259
|
-
export { SdNumberInput as sd_number_input };
|
|
260
|
-
//# sourceMappingURL=sd-number-input.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sd-number-input.entry.js","sources":["src/components/sd-number-input/sd-number-input.scss?tag=sd-number-input","src/components/sd-number-input/sd-number-input.tsx"],"sourcesContent":["@import 'variables';\n@import '../sd-icon/sd-icon.scss';\n\nsd-number-input {\n .sd-number-input-container {\n display: inline-flex;\n }\n .sd-number-input {\n box-sizing: border-box;\n display: flex;\n width: var(--input-width, 100%);\n align-items: center;\n height: 28px;\n padding: 4px 8px;\n border: 1px solid $grey_55;\n border-radius: 4px;\n color: $grey_90;\n font-size: 12px;\n line-height: 20px;\n background: white;\n position: relative;\n\n &--hovered {\n border-color: $brilliantblue_75;\n box-shadow: 0 0 4px 0 #0071ff66;\n }\n\n &.sd-number-input--error {\n border-color: $red_70;\n }\n\n &.sd-number-input--pass {\n border-color: $green_65;\n }\n\n &.sd-number-input--disabled {\n background-color: $grey_20 !important;\n border-color: $grey_45 !important;\n cursor: not-allowed !important;\n box-shadow: none !important;\n\n .sd-number-input__input {\n color: $grey_65 !important;\n cursor: not-allowed !important;\n }\n }\n\n .sd-number-input__input {\n display: block;\n width: 100%;\n height: 20px;\n line-height: 20px;\n border: none;\n outline: none;\n background: transparent;\n font-size: inherit;\n color: $grey_90;\n margin-left: 4px;\n margin-right: 4px;\n padding-block: 0;\n padding-inline: 0;\n text-align: right;\n\n &::placeholder {\n font-size: 12px;\n height: 20px;\n line-height: 20px;\n color: $grey_55;\n }\n }\n\n .sd-number-input__clear-icon {\n cursor: pointer;\n margin-left: 8px;\n }\n\n .sd-number-input__buttons {\n padding: 4px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n position: absolute;\n inset: 0;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease;\n }\n\n .sd-number-input__button {\n width: 20px;\n height: 20px;\n border: none;\n border-radius: 2px;\n background-color: $brilliantblue_10;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n margin: 0;\n transition: background-color 0.2s ease;\n\n &:hover:not(:disabled) {\n background-color: $brilliantblue_20;\n }\n\n &:disabled {\n background-color: $grey_20;\n cursor: not-allowed;\n }\n\n &--decrement {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n &--increment {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n }\n\n .sd-number-input__label {\n margin-bottom: 8px;\n font-weight: 500;\n color: $grey_90;\n }\n }\n\n &:focus-within {\n .sd-number-input__buttons {\n opacity: 1;\n pointer-events: auto;\n }\n\n .sd-number-input {\n border-color: $brilliantblue_75;\n box-shadow: 0 0 4px 0 #0071ff66;\n }\n }\n}\n","import {\n Component,\n Element,\n Prop,\n State,\n Watch,\n Event,\n EventEmitter,\n h,\n Method,\n} from '@stencil/core';\n\n@Component({\n tag: 'sd-number-input',\n styleUrl: 'sd-number-input.scss',\n})\nexport class SdNumberInput {\n @Element() el!: HTMLElement;\n\n @Prop() min: number = Number.NEGATIVE_INFINITY;\n @Prop() max: number = Number.POSITIVE_INFINITY;\n @Prop() step: number = 1;\n @Prop() useButton: boolean = false;\n @Prop() useDecimal: boolean = false;\n\n @Prop({ mutable: true }) value?: string | number | null = null;\n @Prop() label?: string;\n @Prop() placeholder: string = '입력해 주세요.';\n @Prop() disabled: boolean = false;\n @Prop() width?: number | string;\n @Prop() rules?: Array<(value: string | number | null) => boolean | string>;\n @Prop() autoFocus: boolean = false;\n @Prop() status?: 'default' | 'pass' | 'error';\n @Prop() inputClass: string = '';\n @Prop() readonly: boolean = false;\n @Prop() inputStyle: { [key: string]: string } = {};\n\n @State() private internalValue: number | null = null;\n @State() private displayValue: string = '';\n @State() private hovered: boolean = false;\n @State() private error: boolean = false;\n\n private nativeEl: HTMLInputElement | undefined = undefined;\n\n @Event({ eventName: 'sdUpdate' }) update?: EventEmitter<number | null>;\n @Event({ eventName: 'sdFocus' }) focus?: EventEmitter<Event>;\n @Event({ eventName: 'sdBlur' }) blur?: EventEmitter<Event>;\n\n private formatWithCommas(value: number | null): string {\n if (value === null || value === undefined) return '';\n\n const isNegative = value < 0;\n const absValue = Math.abs(value);\n\n const [intPart, decPart] = absValue.toString().split('.');\n const formatted = (+intPart).toLocaleString();\n\n const result = isNegative ? '-' + formatted : formatted;\n return decPart ? result + '.' + decPart : String(result);\n }\n\n private parseInput(input: string): number | null {\n if (!input || input.trim() === '') return null;\n\n const cleaned = input.replace(/,/g, '').trim();\n\n // -로 시작을 할 수 있을 수 있고, 소수점 0.n | .n\n if (!/^-?(\\d+\\.?\\d*|\\d*\\.\\d+)$/.test(cleaned)) {\n return null;\n }\n\n const parsed = parseFloat(cleaned);\n\n if (isNaN(parsed)) return null;\n\n // 소수점 사용 하지 않는데 . 이 있는 경우\n if (!this.useDecimal && cleaned.includes('.')) {\n return null;\n }\n\n return parsed;\n }\n\n private clampMinMax(value: number): number {\n return Math.min(Math.max(value, this.min), this.max);\n }\n\n private updateDisplay() {\n this.displayValue = this.formatWithCommas(this.internalValue);\n }\n\n private isIncrementDisabled(): boolean {\n if (this.disabled || this.readonly) return true;\n if (this.internalValue !== null) {\n return this.internalValue >= this.max;\n }\n return false;\n }\n\n private isDecrementDisabled(): boolean {\n if (this.disabled || this.readonly) return true;\n if (this.internalValue !== null) {\n return this.internalValue <= this.min;\n }\n return false;\n }\n\n @Watch('value')\n valueChanged(newValue: string | number | null) {\n if (newValue === null || newValue === '') {\n this.internalValue = null;\n } else {\n const parsed = typeof newValue === 'string' ? this.parseInput(newValue) : newValue;\n if (parsed !== null) {\n this.internalValue = this.clampMinMax(parsed);\n }\n }\n this.updateDisplay();\n }\n\n @Watch('internalValue')\n internalValueChanged(newValue: number | null) {\n this.updateDisplay();\n\n if (newValue !== this.value) {\n this.value = newValue;\n this.update?.emit(newValue);\n }\n\n if (!this.rules || this.rules.length === 0) return;\n this.error = false;\n for (const rule of this.rules) {\n const result = rule(newValue);\n if (result !== true) {\n this.error = true;\n break;\n }\n }\n }\n\n componentWillLoad() {\n if (this.value !== null && this.value !== undefined) {\n const parsed = typeof this.value === 'string' ? this.parseInput(this.value) : this.value;\n if (parsed !== null) {\n this.internalValue = this.clampMinMax(parsed);\n }\n }\n this.updateDisplay();\n }\n\n // TODO: 현재 숫자를 크게 넣어서 숫자e+21등의 형식으로 변환되면 값이 바뀌지않음 수정 필요\n private handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const inputValue = target.value;\n\n if (inputValue === '') {\n this.internalValue = null;\n this.displayValue = '';\n return;\n }\n\n const commasRemoved = inputValue.replace(/,/g, '');\n\n // 만약에 소수점 (.) 이 여러개 일 경우\n const decimalCount = (commasRemoved.match(/\\./g) || []).length;\n if (decimalCount > 1) {\n target.value = this.displayValue;\n return;\n }\n\n // 가능: \"-\", \".\", \"-.\" (단순 기호만 있는 경우)\n if (commasRemoved === '-' || commasRemoved === '.' || commasRemoved === '-.') {\n target.value = commasRemoved;\n return;\n }\n\n // 숫자 뒤에 . 이 있는 경우 (예: \"1000.\") -> 콤마 포맷 적용 + . 유지\n if (commasRemoved.endsWith('.') && decimalCount === 1) {\n const numberPart = commasRemoved.slice(0, -1);\n const parsed = this.parseInput(numberPart);\n if (parsed !== null) {\n const formatted = this.formatWithCommas(parsed);\n target.value = formatted + '.';\n return;\n }\n }\n\n const parsed = this.parseInput(commasRemoved);\n\n if (parsed !== null) {\n if (parsed < this.min) {\n target.value = this.displayValue;\n return;\n }\n\n if (parsed > this.max) {\n target.value = this.displayValue;\n return;\n }\n\n this.internalValue = parsed;\n this.displayValue = this.formatWithCommas(parsed);\n target.value = this.displayValue;\n } else {\n target.value = this.displayValue;\n }\n };\n\n private handleFocus = (event: Event) => {\n this.focus?.emit(event);\n };\n\n private handleBlur = (event: Event) => {\n this.updateDisplay();\n if (this.nativeEl) {\n this.nativeEl.value = this.displayValue;\n }\n this.blur?.emit(event);\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.handleIncrement();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.handleDecrement();\n }\n };\n\n private handleIncrement = () => {\n if (this.isIncrementDisabled()) return;\n\n const currentVal = this.internalValue ?? this.min ?? 0;\n let nextVal = currentVal + this.step;\n\n if (nextVal > this.max) {\n nextVal = this.max;\n }\n\n if (nextVal === currentVal) return;\n\n this.internalValue = nextVal;\n };\n\n private handleDecrement = () => {\n if (this.isDecrementDisabled()) return;\n\n const currentVal = this.internalValue ?? this.min ?? 0;\n let nextVal = currentVal - this.step;\n\n if (nextVal < this.min) {\n nextVal = this.min;\n }\n\n if (nextVal === currentVal) return;\n\n this.internalValue = nextVal;\n };\n\n @Method()\n async sdGetNativeElement(): Promise<HTMLInputElement | null> {\n return this.nativeEl || null;\n }\n\n getInputStatus() {\n if (this.disabled) return 'sd-number-input--disabled';\n if (this.hovered) return 'sd-number-input--hovered';\n if (this.status) return `sd-number-input--${this.status}`;\n if (this.error) return 'sd-number-input--error';\n return '';\n }\n\n render() {\n const inputWidth = this.width\n ? {\n '--input-width': typeof this.width === 'number' ? `${this.width}px` : this.width,\n }\n : {};\n\n const inputStyles = {\n textAlign: this.useButton ? 'center' : 'right',\n };\n\n return (\n <div\n class=\"sd-number-input-container\"\n style={inputWidth}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n >\n {this.label && <div class=\"sd-number-input__label\">{this.label}</div>}\n <label\n class={{\n 'sd-number-input': true,\n [this.getInputStatus()]: true,\n 'sd-number-input--with-buttons': this.useButton,\n }}\n onMouseEnter={() => (this.hovered = true)}\n onMouseLeave={() => (this.hovered = false)}\n style={this.inputStyle}\n >\n <input\n ref={el => (this.nativeEl = el)}\n class={`sd-number-input__input ${this.inputClass}`}\n type=\"text\"\n inputMode=\"numeric\"\n value={this.displayValue}\n placeholder={this.placeholder}\n disabled={this.disabled}\n readonly={this.readonly}\n autofocus={this.autoFocus}\n onInput={this.handleInput}\n onKeyDown={this.handleKeyDown}\n style={inputStyles}\n />\n\n {this.useButton && (\n <div class=\"sd-number-input__buttons\">\n <button\n type=\"button\"\n class={{\n 'sd-number-input__button': true,\n 'sd-number-input__button--decrement': true,\n }}\n disabled={this.isDecrementDisabled()}\n onClick={this.handleDecrement}\n tabindex={-1}\n >\n <sd-icon\n name=\"minus\"\n size={12}\n color={this.isDecrementDisabled() ? 'grey_45' : 'brilliantblue_70'}\n />\n </button>\n <button\n type=\"button\"\n class={{\n 'sd-number-input__button': true,\n 'sd-number-input__button--increment': true,\n }}\n disabled={this.isIncrementDisabled()}\n onClick={this.handleIncrement}\n tabindex={-1}\n >\n <sd-icon\n name=\"add\"\n size={12}\n color={this.isIncrementDisabled() ? 'grey_45' : 'brilliantblue_70'}\n />\n </button>\n </div>\n )}\n </label>\n </div>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|