@hashrytech/quick-components-kit 0.19.15 → 0.19.17

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,17 @@
1
1
  # @hashrytech/quick-components-kit
2
2
 
3
+ ## 0.19.17
4
+
5
+ ### Patch Changes
6
+
7
+ - feat: Added min and max enforcement
8
+
9
+ ## 0.19.16
10
+
11
+ ### Patch Changes
12
+
13
+ - feat: force positive number to text field property
14
+
3
15
  ## 0.19.15
4
16
 
5
17
  ### Patch Changes
@@ -51,8 +51,10 @@
51
51
  inputmode?: InputMode;
52
52
  min?: number;
53
53
  max?: number;
54
+ step?: number;
54
55
  debounceDelay?: number;
55
- onInput?: (value: string|number) => void;
56
+ forcePositiveNumber?: boolean;
57
+ onInput?: (value: string|number|null) => void;
56
58
  onchange?: (event: Event) => void;
57
59
  onmouseup?: () => void;
58
60
  label?: Snippet;
@@ -88,7 +90,9 @@
88
90
  inputmode,
89
91
  min,
90
92
  max,
93
+ step,
91
94
  debounceDelay=300, //ms
95
+ forcePositiveNumber=false,
92
96
  onchange,
93
97
  onInput,
94
98
  onmouseup,
@@ -128,6 +132,25 @@
128
132
 
129
133
  function handleInput(e: Event) {
130
134
  localValue = (e.target as HTMLInputElement).value;
135
+ if (forcePositiveNumber) {
136
+ localValue = sanitizePositiveNumber(localValue);
137
+ (e.target as HTMLInputElement).value = localValue; // reflect sanitized value in the UI
138
+ }
139
+
140
+ if(max && max > 0){
141
+ if(Number(value) > max){
142
+ localValue = String(max);
143
+ (e.target as HTMLInputElement).value = localValue; // reflect max value in the UI
144
+ }
145
+ }
146
+
147
+ if(min && min > 0){
148
+ if(Number(value) < min){
149
+ localValue = String(min);
150
+ (e.target as HTMLInputElement).value = localValue; // reflect min value in the UI
151
+ }
152
+ }
153
+
131
154
  clearTimeout(debounceTimer);
132
155
  debounceTimer = setTimeout(() => {
133
156
  value = localValue; // sync to bound value after delay
@@ -135,6 +158,27 @@
135
158
  }, debounceDelay);
136
159
  }
137
160
 
161
+ function sanitizePositiveNumber(value: string | number | null): string {
162
+ // Handle null, undefined, or empty string
163
+ if (value === null || value === undefined || value === "") {
164
+ return "1";
165
+ }
166
+
167
+ // Convert to string and strip non-digits
168
+ let v = value.toString().replace(/[^0-9]/g, "") || "1";
169
+
170
+ // Convert to number
171
+ let num = parseInt(v, 10);
172
+
173
+ // If NaN, zero, or negative → force to 1
174
+ if (isNaN(num) || num <= 0) {
175
+ return "1";
176
+ }
177
+
178
+ // Return normalized positive integer as string
179
+ return String(num);
180
+ }
181
+
138
182
  </script>
139
183
 
140
184
  <div class={twMerge("", firstDivClass)}>
@@ -48,8 +48,10 @@ export type TextInputProps = {
48
48
  inputmode?: InputMode;
49
49
  min?: number;
50
50
  max?: number;
51
+ step?: number;
51
52
  debounceDelay?: number;
52
- onInput?: (value: string | number) => void;
53
+ forcePositiveNumber?: boolean;
54
+ onInput?: (value: string | number | null) => void;
53
55
  onchange?: (event: Event) => void;
54
56
  onmouseup?: () => void;
55
57
  label?: Snippet;
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/hashrytech/quick-components-kit.git"
7
7
  },
8
- "version": "0.19.15",
8
+ "version": "0.19.17",
9
9
  "license": "MIT",
10
10
  "author": "Hashry Tech",
11
11
  "files": [