@axenstudio/axen-form 0.1.12 → 0.1.13

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.
@@ -75,7 +75,7 @@ function DateField({
75
75
  min,
76
76
  max,
77
77
  lang: resolvedLocale,
78
- className: fieldUtils.cx(fieldBase_module.default.input, resolvedIcon && fieldBase_module.default.inputWithIcon, error && fieldBase_module.default.inputError)
78
+ className: fieldUtils.cx(fieldBase_module.default.input, resolvedIcon && fieldBase_module.default.inputWithIcon, !dateValue && fieldBase_module.default.inputPlaceholder, error && fieldBase_module.default.inputError)
79
79
  }
80
80
  );
81
81
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: fieldBase_module.default.wrapper, ref: wrapperRef, style: { position: "relative" }, children: [
@@ -73,7 +73,7 @@ function DateField({
73
73
  min,
74
74
  max,
75
75
  lang: resolvedLocale,
76
- className: cx(styles.input, resolvedIcon && styles.inputWithIcon, error && styles.inputError)
76
+ className: cx(styles.input, resolvedIcon && styles.inputWithIcon, !dateValue && styles.inputPlaceholder, error && styles.inputError)
77
77
  }
78
78
  );
79
79
  return /* @__PURE__ */ jsxs("div", { className: styles.wrapper, ref: wrapperRef, style: { position: "relative" }, children: [
@@ -118,6 +118,7 @@ function DateTimeField({
118
118
  fieldBase_module.default.input,
119
119
  resolvedIcon && fieldBase_module.default.inputWithIcon,
120
120
  fieldBase_module.default.inputWithPicker,
121
+ !dtValue && fieldBase_module.default.inputPlaceholder,
121
122
  error && fieldBase_module.default.inputError
122
123
  )
123
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimeField.d.ts","sourceRoot":"","sources":["../../../src/fields/DateTimeField/DateTimeField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAQvD,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,UAAU,EACV,KAAK,EACL,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,GAAG,EACH,GAAG,EACH,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,WAAW,GACZ,EAAE,QAAQ,CACT,mBAAmB,GAAG;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CACF,2CAyLA"}
1
+ {"version":3,"file":"DateTimeField.d.ts","sourceRoot":"","sources":["../../../src/fields/DateTimeField/DateTimeField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAQvD,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,EACN,KAAK,EACL,UAAU,EACV,KAAK,EACL,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,GAAG,EACH,GAAG,EACH,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,WAAW,GACZ,EAAE,QAAQ,CACT,mBAAmB,GAAG;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CACF,2CA0LA"}
@@ -116,6 +116,7 @@ function DateTimeField({
116
116
  styles.input,
117
117
  resolvedIcon && styles.inputWithIcon,
118
118
  styles.inputWithPicker,
119
+ !dtValue && styles.inputPlaceholder,
119
120
  error && styles.inputError
120
121
  )
121
122
  }
@@ -75,7 +75,7 @@ function TimeField({
75
75
  disabled,
76
76
  readOnly,
77
77
  lang: resolvedLocale,
78
- className: fieldUtils.cx(fieldBase_module.default.input, resolvedIcon && fieldBase_module.default.inputWithIcon, error && fieldBase_module.default.inputError)
78
+ className: fieldUtils.cx(fieldBase_module.default.input, resolvedIcon && fieldBase_module.default.inputWithIcon, !timeValue && fieldBase_module.default.inputPlaceholder, error && fieldBase_module.default.inputError)
79
79
  }
80
80
  );
81
81
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: fieldBase_module.default.wrapper, ref: wrapperRef, style: { position: "relative" }, children: [
@@ -73,7 +73,7 @@ function TimeField({
73
73
  disabled,
74
74
  readOnly,
75
75
  lang: resolvedLocale,
76
- className: cx(styles.input, resolvedIcon && styles.inputWithIcon, error && styles.inputError)
76
+ className: cx(styles.input, resolvedIcon && styles.inputWithIcon, !timeValue && styles.inputPlaceholder, error && styles.inputError)
77
77
  }
78
78
  );
79
79
  return /* @__PURE__ */ jsxs("div", { className: styles.wrapper, ref: wrapperRef, style: { position: "relative" }, children: [
@@ -10,14 +10,14 @@
10
10
  ═══════════════════════════════════════════════ */
11
11
 
12
12
  /* ── Field Wrapper ───────────────────────────── */
13
- ._wrapper_hrx0p_8 {
13
+ ._wrapper_1sk2v_8 {
14
14
  display: flex;
15
15
  flex-direction: column;
16
16
  width: 100%;
17
17
  }
18
18
 
19
19
  /* ── Label ───────────────────────────────────── */
20
- ._label_hrx0p_15 {
20
+ ._label_1sk2v_15 {
21
21
  display: block;
22
22
  font-size: var(--axen-font-size-sm, 0.875rem);
23
23
  font-weight: var(--axen-font-weight-medium, 500);
@@ -27,14 +27,14 @@
27
27
  letter-spacing: 0.01em;
28
28
  }
29
29
 
30
- ._labelRequired_hrx0p_25::after {
30
+ ._labelRequired_1sk2v_25::after {
31
31
  content: ' *';
32
32
  color: var(--axen-color-error, #d32f2f);
33
33
  font-weight: var(--axen-font-weight-bold, 600);
34
34
  }
35
35
 
36
36
  /* ── Input Base ──────────────────────────────── */
37
- ._input_hrx0p_32 {
37
+ ._input_1sk2v_32 {
38
38
  display: block;
39
39
  width: 100%;
40
40
  height: var(--axen-field-height, 2.75rem);
@@ -62,22 +62,22 @@
62
62
  outline: none;
63
63
  }
64
64
 
65
- ._input_hrx0p_32::placeholder {
65
+ ._input_1sk2v_32::placeholder {
66
66
  color: var(--axen-color-text-disabled, #9e9e9e);
67
67
  }
68
68
 
69
- ._input_hrx0p_32:hover:not(:disabled):not(:read-only) {
69
+ ._input_1sk2v_32:hover:not(:disabled):not(:read-only) {
70
70
  border-color: var(--axen-color-border-hover, #888888);
71
71
  }
72
72
 
73
73
  /* Focus ring (keyboard + mouse) */
74
- ._input_hrx0p_32:focus {
74
+ ._input_1sk2v_32:focus {
75
75
  border-color: var(--axen-color-border-focus, var(--axen-color-primary, #1976d2));
76
76
  box-shadow: var(--axen-shadow-focus, 0 0 0 2px rgba(25, 118, 210, 0.5));
77
77
  outline: none;
78
78
  }
79
79
 
80
- ._input_hrx0p_32:disabled {
80
+ ._input_1sk2v_32:disabled {
81
81
  background-color: var(--axen-color-bg-disabled, #f5f5f5);
82
82
  color: var(--axen-color-text-disabled, #9e9e9e);
83
83
  cursor: not-allowed;
@@ -86,35 +86,35 @@
86
86
  /* Scope :read-only to actual text inputs only.
87
87
  <select> and <div> match :read-only by default in modern browsers,
88
88
  which would incorrectly apply the disabled-looking background. */
89
- input._input_hrx0p_32:read-only,
90
- textarea._input_hrx0p_32:read-only {
89
+ input._input_1sk2v_32:read-only,
90
+ textarea._input_1sk2v_32:read-only {
91
91
  background-color: var(--axen-color-bg-disabled, #f5f5f5);
92
92
  }
93
93
 
94
94
  /* Hide native browser picker icons for date/time/datetime inputs.
95
95
  We provide our own custom pickers via DatePicker / TimePicker components,
96
96
  so the native chromium dark-themed popups must not appear. */
97
- ._input_hrx0p_32::-webkit-calendar-picker-indicator {
97
+ ._input_1sk2v_32::-webkit-calendar-picker-indicator {
98
98
  display: none;
99
99
  -webkit-appearance: none;
100
100
  }
101
101
 
102
- ._input_hrx0p_32::-webkit-date-and-time-value {
102
+ ._input_1sk2v_32::-webkit-date-and-time-value {
103
103
  text-align: left;
104
104
  }
105
105
 
106
106
  /* ── Error State ─────────────────────────────── */
107
- ._inputError_hrx0p_102 {
107
+ ._inputError_1sk2v_102 {
108
108
  border-color: var(--axen-color-error, #d32f2f);
109
109
  }
110
110
 
111
- ._inputError_hrx0p_102:focus {
111
+ ._inputError_1sk2v_102:focus {
112
112
  border-color: var(--axen-color-error, #d32f2f);
113
113
  box-shadow: 0 0 0 var(--axen-focus-ring-width, 2px) rgba(211, 47, 47, 0.3);
114
114
  }
115
115
 
116
116
  /* ── Helper Text ─────────────────────────────── */
117
- ._helperText_hrx0p_112 {
117
+ ._helperText_1sk2v_112 {
118
118
  display: block;
119
119
  font-size: var(--axen-font-size-xs, 0.75rem);
120
120
  color: var(--axen-color-text-secondary, #666666);
@@ -122,12 +122,12 @@ textarea._input_hrx0p_32:read-only {
122
122
  line-height: var(--axen-line-height, 1.5);
123
123
  }
124
124
 
125
- ._helperTextError_hrx0p_120 {
125
+ ._helperTextError_1sk2v_120 {
126
126
  color: var(--axen-color-error, #d32f2f);
127
127
  }
128
128
 
129
129
  /* ── Textarea ────────────────────────────────── */
130
- ._textarea_hrx0p_125 {
130
+ ._textarea_1sk2v_125 {
131
131
  height: auto;
132
132
  min-height: calc(var(--axen-field-min-height, 44px) * 2);
133
133
  resize: vertical;
@@ -135,7 +135,7 @@ textarea._input_hrx0p_32:read-only {
135
135
  }
136
136
 
137
137
  /* ── Select ──────────────────────────────────── */
138
- ._select_hrx0p_133 {
138
+ ._select_1sk2v_133 {
139
139
  appearance: none;
140
140
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
141
141
  background-repeat: no-repeat;
@@ -144,7 +144,11 @@ textarea._input_hrx0p_32:read-only {
144
144
  cursor: pointer;
145
145
  }
146
146
 
147
- ._selectPlaceholder_hrx0p_142 {
147
+ ._selectPlaceholder_1sk2v_142 {
148
+ color: var(--axen-color-text-disabled, #9e9e9e);
149
+ }
150
+
151
+ ._inputPlaceholder_1sk2v_146 {
148
152
  color: var(--axen-color-text-disabled, #9e9e9e);
149
153
  }
150
154
 
@@ -152,17 +156,17 @@ textarea._input_hrx0p_32:read-only {
152
156
  See tokens.css for color-scheme: light declaration. */
153
157
 
154
158
  /* ── Input with prefix/suffix ────────────────── */
155
- ._inputGroup_hrx0p_150 {
159
+ ._inputGroup_1sk2v_154 {
156
160
  display: flex;
157
161
  align-items: stretch;
158
162
  }
159
163
 
160
164
  /* ── Icon inside input ───────────────────────── */
161
- ._inputIconWrapper_hrx0p_156 {
165
+ ._inputIconWrapper_1sk2v_160 {
162
166
  position: relative;
163
167
  }
164
168
 
165
- ._fieldIcon_hrx0p_160 {
169
+ ._fieldIcon_1sk2v_164 {
166
170
  position: absolute;
167
171
  left: 0.75rem;
168
172
  top: 50%;
@@ -178,7 +182,7 @@ textarea._input_hrx0p_32:read-only {
178
182
  }
179
183
 
180
184
  /* Clickable variant for icons that open pickers */
181
- ._fieldIconClickable_hrx0p_176 {
185
+ ._fieldIconClickable_1sk2v_180 {
182
186
  position: absolute;
183
187
  left: 0.75rem;
184
188
  top: 50%;
@@ -197,18 +201,18 @@ textarea._input_hrx0p_32:read-only {
197
201
  margin: 0;
198
202
  }
199
203
 
200
- ._fieldIconClickable_hrx0p_176:hover {
204
+ ._fieldIconClickable_1sk2v_180:hover {
201
205
  color: var(--axen-color-primary, #1976d2);
202
206
  }
203
207
 
204
- ._fieldIconClickable_hrx0p_176:focus-visible {
208
+ ._fieldIconClickable_1sk2v_180:focus-visible {
205
209
  outline: var(--axen-focus-ring-width, 2px) solid var(--axen-focus-ring-color);
206
210
  outline-offset: 2px;
207
211
  border-radius: var(--axen-border-radius-sm, 4px);
208
212
  }
209
213
 
210
214
  /* Right-side picker trigger button inside inputIconWrapper */
211
- ._pickerTrigger_hrx0p_206 {
215
+ ._pickerTrigger_1sk2v_210 {
212
216
  position: absolute;
213
217
  right: 0.5rem;
214
218
  top: 50%;
@@ -227,27 +231,27 @@ textarea._input_hrx0p_32:read-only {
227
231
  z-index: 1;
228
232
  }
229
233
 
230
- ._pickerTrigger_hrx0p_206:hover {
234
+ ._pickerTrigger_1sk2v_210:hover {
231
235
  color: var(--axen-color-primary, #1976d2);
232
236
  background-color: var(--axen-color-bg-hover, #fafafa);
233
237
  }
234
238
 
235
- ._pickerTrigger_hrx0p_206:focus-visible {
239
+ ._pickerTrigger_1sk2v_210:focus-visible {
236
240
  outline: var(--axen-focus-ring-width, 2px) solid var(--axen-focus-ring-color);
237
241
  outline-offset: 2px;
238
242
  }
239
243
 
240
244
  /* Input with right-side picker trigger needs extra right padding */
241
- ._inputWithPicker_hrx0p_236 {
245
+ ._inputWithPicker_1sk2v_240 {
242
246
  padding-right: 2.25rem;
243
247
  }
244
248
 
245
- ._inputWithIcon_hrx0p_240 {
249
+ ._inputWithIcon_1sk2v_244 {
246
250
  padding-left: 2.5rem;
247
251
  }
248
252
 
249
- ._inputPrefix_hrx0p_244,
250
- ._inputSuffix_hrx0p_245 {
253
+ ._inputPrefix_1sk2v_248,
254
+ ._inputSuffix_1sk2v_249 {
251
255
  display: flex;
252
256
  align-items: center;
253
257
  padding: 0 var(--axen-space-sm, 0.5rem);
@@ -258,32 +262,32 @@ textarea._input_hrx0p_32:read-only {
258
262
  white-space: nowrap;
259
263
  }
260
264
 
261
- ._inputPrefix_hrx0p_244 {
265
+ ._inputPrefix_1sk2v_248 {
262
266
  border-right: none;
263
267
  border-radius: var(--axen-border-radius, 6px) 0 0 var(--axen-border-radius, 6px);
264
268
  }
265
269
 
266
- ._inputSuffix_hrx0p_245 {
270
+ ._inputSuffix_1sk2v_249 {
267
271
  border-left: none;
268
272
  border-radius: 0 var(--axen-border-radius, 6px) var(--axen-border-radius, 6px) 0;
269
273
  }
270
274
 
271
- ._inputGroupInput_hrx0p_266 {
275
+ ._inputGroupInput_1sk2v_270 {
272
276
  border-radius: 0;
273
277
  }
274
278
 
275
- ._inputPrefix_hrx0p_244 + ._inputGroupInput_hrx0p_266 {
279
+ ._inputPrefix_1sk2v_248 + ._inputGroupInput_1sk2v_270 {
276
280
  border-top-left-radius: 0;
277
281
  border-bottom-left-radius: 0;
278
282
  }
279
283
 
280
- ._inputGroupInput_hrx0p_266:has(+ ._inputSuffix_hrx0p_245) {
284
+ ._inputGroupInput_1sk2v_270:has(+ ._inputSuffix_1sk2v_249) {
281
285
  border-top-right-radius: 0;
282
286
  border-bottom-right-radius: 0;
283
287
  }
284
288
 
285
289
  /* ── Checkbox/Radio/Switch shared ────────────── */
286
- ._inlineWrapper_hrx0p_281 {
290
+ ._inlineWrapper_1sk2v_285 {
287
291
  display: flex;
288
292
  align-items: center;
289
293
  gap: var(--axen-space-sm, 0.5rem);
@@ -291,12 +295,12 @@ textarea._input_hrx0p_32:read-only {
291
295
  cursor: pointer;
292
296
  }
293
297
 
294
- ._inlineWrapper_hrx0p_281:has(:disabled) {
298
+ ._inlineWrapper_1sk2v_285:has(:disabled) {
295
299
  cursor: not-allowed;
296
300
  opacity: 0.6;
297
301
  }
298
302
 
299
- ._inlineLabel_hrx0p_294 {
303
+ ._inlineLabel_1sk2v_298 {
300
304
  font-size: var(--axen-font-size-md, 1rem);
301
305
  color: var(--axen-color-text, #1a1a1a);
302
306
  user-select: none;
@@ -304,34 +308,34 @@ textarea._input_hrx0p_32:read-only {
304
308
 
305
309
  /* ── Responsive: mobile touch targets ────────── */
306
310
  @media (max-width: 599px) {
307
- ._input_hrx0p_32 {
311
+ ._input_1sk2v_32 {
308
312
  font-size: 16px; /* Prevent iOS zoom on focus */
309
313
  min-height: 48px;
310
314
  }
311
315
 
312
- ._inlineWrapper_hrx0p_281 {
316
+ ._inlineWrapper_1sk2v_285 {
313
317
  min-height: 48px;
314
318
  }
315
319
  }
316
320
 
317
321
  /* ── High Contrast Mode ──────────────────────── */
318
322
  @media (prefers-contrast: more) {
319
- ._input_hrx0p_32 {
323
+ ._input_1sk2v_32 {
320
324
  border-width: 2px;
321
325
  }
322
326
 
323
- ._inputError_hrx0p_102 {
327
+ ._inputError_1sk2v_102 {
324
328
  border-width: 3px;
325
329
  }
326
330
 
327
- ._helperTextError_hrx0p_120 {
331
+ ._helperTextError_1sk2v_120 {
328
332
  font-weight: var(--axen-font-weight-bold, 600);
329
333
  }
330
334
  }
331
335
 
332
336
  /* ── Reduced Motion (A11y: WCAG 2.3.3) ──────── */
333
337
  @media (prefers-reduced-motion: reduce) {
334
- ._input_hrx0p_32 {
338
+ ._input_1sk2v_32 {
335
339
  transition: none;
336
340
  }
337
341
  }`));
@@ -343,28 +347,29 @@ textarea._input_hrx0p_32:read-only {
343
347
  })();
344
348
  "use strict";
345
349
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
346
- const wrapper = "_wrapper_hrx0p_8";
347
- const label = "_label_hrx0p_15";
348
- const labelRequired = "_labelRequired_hrx0p_25";
349
- const input = "_input_hrx0p_32";
350
- const inputError = "_inputError_hrx0p_102";
351
- const helperText = "_helperText_hrx0p_112";
352
- const helperTextError = "_helperTextError_hrx0p_120";
353
- const textarea = "_textarea_hrx0p_125";
354
- const select = "_select_hrx0p_133";
355
- const selectPlaceholder = "_selectPlaceholder_hrx0p_142";
356
- const inputGroup = "_inputGroup_hrx0p_150";
357
- const inputIconWrapper = "_inputIconWrapper_hrx0p_156";
358
- const fieldIcon = "_fieldIcon_hrx0p_160";
359
- const fieldIconClickable = "_fieldIconClickable_hrx0p_176";
360
- const pickerTrigger = "_pickerTrigger_hrx0p_206";
361
- const inputWithPicker = "_inputWithPicker_hrx0p_236";
362
- const inputWithIcon = "_inputWithIcon_hrx0p_240";
363
- const inputPrefix = "_inputPrefix_hrx0p_244";
364
- const inputSuffix = "_inputSuffix_hrx0p_245";
365
- const inputGroupInput = "_inputGroupInput_hrx0p_266";
366
- const inlineWrapper = "_inlineWrapper_hrx0p_281";
367
- const inlineLabel = "_inlineLabel_hrx0p_294";
350
+ const wrapper = "_wrapper_1sk2v_8";
351
+ const label = "_label_1sk2v_15";
352
+ const labelRequired = "_labelRequired_1sk2v_25";
353
+ const input = "_input_1sk2v_32";
354
+ const inputError = "_inputError_1sk2v_102";
355
+ const helperText = "_helperText_1sk2v_112";
356
+ const helperTextError = "_helperTextError_1sk2v_120";
357
+ const textarea = "_textarea_1sk2v_125";
358
+ const select = "_select_1sk2v_133";
359
+ const selectPlaceholder = "_selectPlaceholder_1sk2v_142";
360
+ const inputPlaceholder = "_inputPlaceholder_1sk2v_146";
361
+ const inputGroup = "_inputGroup_1sk2v_154";
362
+ const inputIconWrapper = "_inputIconWrapper_1sk2v_160";
363
+ const fieldIcon = "_fieldIcon_1sk2v_164";
364
+ const fieldIconClickable = "_fieldIconClickable_1sk2v_180";
365
+ const pickerTrigger = "_pickerTrigger_1sk2v_210";
366
+ const inputWithPicker = "_inputWithPicker_1sk2v_240";
367
+ const inputWithIcon = "_inputWithIcon_1sk2v_244";
368
+ const inputPrefix = "_inputPrefix_1sk2v_248";
369
+ const inputSuffix = "_inputSuffix_1sk2v_249";
370
+ const inputGroupInput = "_inputGroupInput_1sk2v_270";
371
+ const inlineWrapper = "_inlineWrapper_1sk2v_285";
372
+ const inlineLabel = "_inlineLabel_1sk2v_298";
368
373
  const styles = {
369
374
  wrapper,
370
375
  label,
@@ -376,6 +381,7 @@ const styles = {
376
381
  textarea,
377
382
  select,
378
383
  selectPlaceholder,
384
+ inputPlaceholder,
379
385
  inputGroup,
380
386
  inputIconWrapper,
381
387
  fieldIcon,
@@ -401,6 +407,7 @@ exports.inputError = inputError;
401
407
  exports.inputGroup = inputGroup;
402
408
  exports.inputGroupInput = inputGroupInput;
403
409
  exports.inputIconWrapper = inputIconWrapper;
410
+ exports.inputPlaceholder = inputPlaceholder;
404
411
  exports.inputPrefix = inputPrefix;
405
412
  exports.inputSuffix = inputSuffix;
406
413
  exports.inputWithIcon = inputWithIcon;
@@ -10,14 +10,14 @@
10
10
  ═══════════════════════════════════════════════ */
11
11
 
12
12
  /* ── Field Wrapper ───────────────────────────── */
13
- ._wrapper_hrx0p_8 {
13
+ ._wrapper_1sk2v_8 {
14
14
  display: flex;
15
15
  flex-direction: column;
16
16
  width: 100%;
17
17
  }
18
18
 
19
19
  /* ── Label ───────────────────────────────────── */
20
- ._label_hrx0p_15 {
20
+ ._label_1sk2v_15 {
21
21
  display: block;
22
22
  font-size: var(--axen-font-size-sm, 0.875rem);
23
23
  font-weight: var(--axen-font-weight-medium, 500);
@@ -27,14 +27,14 @@
27
27
  letter-spacing: 0.01em;
28
28
  }
29
29
 
30
- ._labelRequired_hrx0p_25::after {
30
+ ._labelRequired_1sk2v_25::after {
31
31
  content: ' *';
32
32
  color: var(--axen-color-error, #d32f2f);
33
33
  font-weight: var(--axen-font-weight-bold, 600);
34
34
  }
35
35
 
36
36
  /* ── Input Base ──────────────────────────────── */
37
- ._input_hrx0p_32 {
37
+ ._input_1sk2v_32 {
38
38
  display: block;
39
39
  width: 100%;
40
40
  height: var(--axen-field-height, 2.75rem);
@@ -62,22 +62,22 @@
62
62
  outline: none;
63
63
  }
64
64
 
65
- ._input_hrx0p_32::placeholder {
65
+ ._input_1sk2v_32::placeholder {
66
66
  color: var(--axen-color-text-disabled, #9e9e9e);
67
67
  }
68
68
 
69
- ._input_hrx0p_32:hover:not(:disabled):not(:read-only) {
69
+ ._input_1sk2v_32:hover:not(:disabled):not(:read-only) {
70
70
  border-color: var(--axen-color-border-hover, #888888);
71
71
  }
72
72
 
73
73
  /* Focus ring (keyboard + mouse) */
74
- ._input_hrx0p_32:focus {
74
+ ._input_1sk2v_32:focus {
75
75
  border-color: var(--axen-color-border-focus, var(--axen-color-primary, #1976d2));
76
76
  box-shadow: var(--axen-shadow-focus, 0 0 0 2px rgba(25, 118, 210, 0.5));
77
77
  outline: none;
78
78
  }
79
79
 
80
- ._input_hrx0p_32:disabled {
80
+ ._input_1sk2v_32:disabled {
81
81
  background-color: var(--axen-color-bg-disabled, #f5f5f5);
82
82
  color: var(--axen-color-text-disabled, #9e9e9e);
83
83
  cursor: not-allowed;
@@ -86,35 +86,35 @@
86
86
  /* Scope :read-only to actual text inputs only.
87
87
  <select> and <div> match :read-only by default in modern browsers,
88
88
  which would incorrectly apply the disabled-looking background. */
89
- input._input_hrx0p_32:read-only,
90
- textarea._input_hrx0p_32:read-only {
89
+ input._input_1sk2v_32:read-only,
90
+ textarea._input_1sk2v_32:read-only {
91
91
  background-color: var(--axen-color-bg-disabled, #f5f5f5);
92
92
  }
93
93
 
94
94
  /* Hide native browser picker icons for date/time/datetime inputs.
95
95
  We provide our own custom pickers via DatePicker / TimePicker components,
96
96
  so the native chromium dark-themed popups must not appear. */
97
- ._input_hrx0p_32::-webkit-calendar-picker-indicator {
97
+ ._input_1sk2v_32::-webkit-calendar-picker-indicator {
98
98
  display: none;
99
99
  -webkit-appearance: none;
100
100
  }
101
101
 
102
- ._input_hrx0p_32::-webkit-date-and-time-value {
102
+ ._input_1sk2v_32::-webkit-date-and-time-value {
103
103
  text-align: left;
104
104
  }
105
105
 
106
106
  /* ── Error State ─────────────────────────────── */
107
- ._inputError_hrx0p_102 {
107
+ ._inputError_1sk2v_102 {
108
108
  border-color: var(--axen-color-error, #d32f2f);
109
109
  }
110
110
 
111
- ._inputError_hrx0p_102:focus {
111
+ ._inputError_1sk2v_102:focus {
112
112
  border-color: var(--axen-color-error, #d32f2f);
113
113
  box-shadow: 0 0 0 var(--axen-focus-ring-width, 2px) rgba(211, 47, 47, 0.3);
114
114
  }
115
115
 
116
116
  /* ── Helper Text ─────────────────────────────── */
117
- ._helperText_hrx0p_112 {
117
+ ._helperText_1sk2v_112 {
118
118
  display: block;
119
119
  font-size: var(--axen-font-size-xs, 0.75rem);
120
120
  color: var(--axen-color-text-secondary, #666666);
@@ -122,12 +122,12 @@ textarea._input_hrx0p_32:read-only {
122
122
  line-height: var(--axen-line-height, 1.5);
123
123
  }
124
124
 
125
- ._helperTextError_hrx0p_120 {
125
+ ._helperTextError_1sk2v_120 {
126
126
  color: var(--axen-color-error, #d32f2f);
127
127
  }
128
128
 
129
129
  /* ── Textarea ────────────────────────────────── */
130
- ._textarea_hrx0p_125 {
130
+ ._textarea_1sk2v_125 {
131
131
  height: auto;
132
132
  min-height: calc(var(--axen-field-min-height, 44px) * 2);
133
133
  resize: vertical;
@@ -135,7 +135,7 @@ textarea._input_hrx0p_32:read-only {
135
135
  }
136
136
 
137
137
  /* ── Select ──────────────────────────────────── */
138
- ._select_hrx0p_133 {
138
+ ._select_1sk2v_133 {
139
139
  appearance: none;
140
140
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
141
141
  background-repeat: no-repeat;
@@ -144,7 +144,11 @@ textarea._input_hrx0p_32:read-only {
144
144
  cursor: pointer;
145
145
  }
146
146
 
147
- ._selectPlaceholder_hrx0p_142 {
147
+ ._selectPlaceholder_1sk2v_142 {
148
+ color: var(--axen-color-text-disabled, #9e9e9e);
149
+ }
150
+
151
+ ._inputPlaceholder_1sk2v_146 {
148
152
  color: var(--axen-color-text-disabled, #9e9e9e);
149
153
  }
150
154
 
@@ -152,17 +156,17 @@ textarea._input_hrx0p_32:read-only {
152
156
  See tokens.css for color-scheme: light declaration. */
153
157
 
154
158
  /* ── Input with prefix/suffix ────────────────── */
155
- ._inputGroup_hrx0p_150 {
159
+ ._inputGroup_1sk2v_154 {
156
160
  display: flex;
157
161
  align-items: stretch;
158
162
  }
159
163
 
160
164
  /* ── Icon inside input ───────────────────────── */
161
- ._inputIconWrapper_hrx0p_156 {
165
+ ._inputIconWrapper_1sk2v_160 {
162
166
  position: relative;
163
167
  }
164
168
 
165
- ._fieldIcon_hrx0p_160 {
169
+ ._fieldIcon_1sk2v_164 {
166
170
  position: absolute;
167
171
  left: 0.75rem;
168
172
  top: 50%;
@@ -178,7 +182,7 @@ textarea._input_hrx0p_32:read-only {
178
182
  }
179
183
 
180
184
  /* Clickable variant for icons that open pickers */
181
- ._fieldIconClickable_hrx0p_176 {
185
+ ._fieldIconClickable_1sk2v_180 {
182
186
  position: absolute;
183
187
  left: 0.75rem;
184
188
  top: 50%;
@@ -197,18 +201,18 @@ textarea._input_hrx0p_32:read-only {
197
201
  margin: 0;
198
202
  }
199
203
 
200
- ._fieldIconClickable_hrx0p_176:hover {
204
+ ._fieldIconClickable_1sk2v_180:hover {
201
205
  color: var(--axen-color-primary, #1976d2);
202
206
  }
203
207
 
204
- ._fieldIconClickable_hrx0p_176:focus-visible {
208
+ ._fieldIconClickable_1sk2v_180:focus-visible {
205
209
  outline: var(--axen-focus-ring-width, 2px) solid var(--axen-focus-ring-color);
206
210
  outline-offset: 2px;
207
211
  border-radius: var(--axen-border-radius-sm, 4px);
208
212
  }
209
213
 
210
214
  /* Right-side picker trigger button inside inputIconWrapper */
211
- ._pickerTrigger_hrx0p_206 {
215
+ ._pickerTrigger_1sk2v_210 {
212
216
  position: absolute;
213
217
  right: 0.5rem;
214
218
  top: 50%;
@@ -227,27 +231,27 @@ textarea._input_hrx0p_32:read-only {
227
231
  z-index: 1;
228
232
  }
229
233
 
230
- ._pickerTrigger_hrx0p_206:hover {
234
+ ._pickerTrigger_1sk2v_210:hover {
231
235
  color: var(--axen-color-primary, #1976d2);
232
236
  background-color: var(--axen-color-bg-hover, #fafafa);
233
237
  }
234
238
 
235
- ._pickerTrigger_hrx0p_206:focus-visible {
239
+ ._pickerTrigger_1sk2v_210:focus-visible {
236
240
  outline: var(--axen-focus-ring-width, 2px) solid var(--axen-focus-ring-color);
237
241
  outline-offset: 2px;
238
242
  }
239
243
 
240
244
  /* Input with right-side picker trigger needs extra right padding */
241
- ._inputWithPicker_hrx0p_236 {
245
+ ._inputWithPicker_1sk2v_240 {
242
246
  padding-right: 2.25rem;
243
247
  }
244
248
 
245
- ._inputWithIcon_hrx0p_240 {
249
+ ._inputWithIcon_1sk2v_244 {
246
250
  padding-left: 2.5rem;
247
251
  }
248
252
 
249
- ._inputPrefix_hrx0p_244,
250
- ._inputSuffix_hrx0p_245 {
253
+ ._inputPrefix_1sk2v_248,
254
+ ._inputSuffix_1sk2v_249 {
251
255
  display: flex;
252
256
  align-items: center;
253
257
  padding: 0 var(--axen-space-sm, 0.5rem);
@@ -258,32 +262,32 @@ textarea._input_hrx0p_32:read-only {
258
262
  white-space: nowrap;
259
263
  }
260
264
 
261
- ._inputPrefix_hrx0p_244 {
265
+ ._inputPrefix_1sk2v_248 {
262
266
  border-right: none;
263
267
  border-radius: var(--axen-border-radius, 6px) 0 0 var(--axen-border-radius, 6px);
264
268
  }
265
269
 
266
- ._inputSuffix_hrx0p_245 {
270
+ ._inputSuffix_1sk2v_249 {
267
271
  border-left: none;
268
272
  border-radius: 0 var(--axen-border-radius, 6px) var(--axen-border-radius, 6px) 0;
269
273
  }
270
274
 
271
- ._inputGroupInput_hrx0p_266 {
275
+ ._inputGroupInput_1sk2v_270 {
272
276
  border-radius: 0;
273
277
  }
274
278
 
275
- ._inputPrefix_hrx0p_244 + ._inputGroupInput_hrx0p_266 {
279
+ ._inputPrefix_1sk2v_248 + ._inputGroupInput_1sk2v_270 {
276
280
  border-top-left-radius: 0;
277
281
  border-bottom-left-radius: 0;
278
282
  }
279
283
 
280
- ._inputGroupInput_hrx0p_266:has(+ ._inputSuffix_hrx0p_245) {
284
+ ._inputGroupInput_1sk2v_270:has(+ ._inputSuffix_1sk2v_249) {
281
285
  border-top-right-radius: 0;
282
286
  border-bottom-right-radius: 0;
283
287
  }
284
288
 
285
289
  /* ── Checkbox/Radio/Switch shared ────────────── */
286
- ._inlineWrapper_hrx0p_281 {
290
+ ._inlineWrapper_1sk2v_285 {
287
291
  display: flex;
288
292
  align-items: center;
289
293
  gap: var(--axen-space-sm, 0.5rem);
@@ -291,12 +295,12 @@ textarea._input_hrx0p_32:read-only {
291
295
  cursor: pointer;
292
296
  }
293
297
 
294
- ._inlineWrapper_hrx0p_281:has(:disabled) {
298
+ ._inlineWrapper_1sk2v_285:has(:disabled) {
295
299
  cursor: not-allowed;
296
300
  opacity: 0.6;
297
301
  }
298
302
 
299
- ._inlineLabel_hrx0p_294 {
303
+ ._inlineLabel_1sk2v_298 {
300
304
  font-size: var(--axen-font-size-md, 1rem);
301
305
  color: var(--axen-color-text, #1a1a1a);
302
306
  user-select: none;
@@ -304,34 +308,34 @@ textarea._input_hrx0p_32:read-only {
304
308
 
305
309
  /* ── Responsive: mobile touch targets ────────── */
306
310
  @media (max-width: 599px) {
307
- ._input_hrx0p_32 {
311
+ ._input_1sk2v_32 {
308
312
  font-size: 16px; /* Prevent iOS zoom on focus */
309
313
  min-height: 48px;
310
314
  }
311
315
 
312
- ._inlineWrapper_hrx0p_281 {
316
+ ._inlineWrapper_1sk2v_285 {
313
317
  min-height: 48px;
314
318
  }
315
319
  }
316
320
 
317
321
  /* ── High Contrast Mode ──────────────────────── */
318
322
  @media (prefers-contrast: more) {
319
- ._input_hrx0p_32 {
323
+ ._input_1sk2v_32 {
320
324
  border-width: 2px;
321
325
  }
322
326
 
323
- ._inputError_hrx0p_102 {
327
+ ._inputError_1sk2v_102 {
324
328
  border-width: 3px;
325
329
  }
326
330
 
327
- ._helperTextError_hrx0p_120 {
331
+ ._helperTextError_1sk2v_120 {
328
332
  font-weight: var(--axen-font-weight-bold, 600);
329
333
  }
330
334
  }
331
335
 
332
336
  /* ── Reduced Motion (A11y: WCAG 2.3.3) ──────── */
333
337
  @media (prefers-reduced-motion: reduce) {
334
- ._input_hrx0p_32 {
338
+ ._input_1sk2v_32 {
335
339
  transition: none;
336
340
  }
337
341
  }`));
@@ -341,28 +345,29 @@ textarea._input_hrx0p_32:read-only {
341
345
  console.error("vite-plugin-css-injected-by-js", e);
342
346
  }
343
347
  })();
344
- const wrapper = "_wrapper_hrx0p_8";
345
- const label = "_label_hrx0p_15";
346
- const labelRequired = "_labelRequired_hrx0p_25";
347
- const input = "_input_hrx0p_32";
348
- const inputError = "_inputError_hrx0p_102";
349
- const helperText = "_helperText_hrx0p_112";
350
- const helperTextError = "_helperTextError_hrx0p_120";
351
- const textarea = "_textarea_hrx0p_125";
352
- const select = "_select_hrx0p_133";
353
- const selectPlaceholder = "_selectPlaceholder_hrx0p_142";
354
- const inputGroup = "_inputGroup_hrx0p_150";
355
- const inputIconWrapper = "_inputIconWrapper_hrx0p_156";
356
- const fieldIcon = "_fieldIcon_hrx0p_160";
357
- const fieldIconClickable = "_fieldIconClickable_hrx0p_176";
358
- const pickerTrigger = "_pickerTrigger_hrx0p_206";
359
- const inputWithPicker = "_inputWithPicker_hrx0p_236";
360
- const inputWithIcon = "_inputWithIcon_hrx0p_240";
361
- const inputPrefix = "_inputPrefix_hrx0p_244";
362
- const inputSuffix = "_inputSuffix_hrx0p_245";
363
- const inputGroupInput = "_inputGroupInput_hrx0p_266";
364
- const inlineWrapper = "_inlineWrapper_hrx0p_281";
365
- const inlineLabel = "_inlineLabel_hrx0p_294";
348
+ const wrapper = "_wrapper_1sk2v_8";
349
+ const label = "_label_1sk2v_15";
350
+ const labelRequired = "_labelRequired_1sk2v_25";
351
+ const input = "_input_1sk2v_32";
352
+ const inputError = "_inputError_1sk2v_102";
353
+ const helperText = "_helperText_1sk2v_112";
354
+ const helperTextError = "_helperTextError_1sk2v_120";
355
+ const textarea = "_textarea_1sk2v_125";
356
+ const select = "_select_1sk2v_133";
357
+ const selectPlaceholder = "_selectPlaceholder_1sk2v_142";
358
+ const inputPlaceholder = "_inputPlaceholder_1sk2v_146";
359
+ const inputGroup = "_inputGroup_1sk2v_154";
360
+ const inputIconWrapper = "_inputIconWrapper_1sk2v_160";
361
+ const fieldIcon = "_fieldIcon_1sk2v_164";
362
+ const fieldIconClickable = "_fieldIconClickable_1sk2v_180";
363
+ const pickerTrigger = "_pickerTrigger_1sk2v_210";
364
+ const inputWithPicker = "_inputWithPicker_1sk2v_240";
365
+ const inputWithIcon = "_inputWithIcon_1sk2v_244";
366
+ const inputPrefix = "_inputPrefix_1sk2v_248";
367
+ const inputSuffix = "_inputSuffix_1sk2v_249";
368
+ const inputGroupInput = "_inputGroupInput_1sk2v_270";
369
+ const inlineWrapper = "_inlineWrapper_1sk2v_285";
370
+ const inlineLabel = "_inlineLabel_1sk2v_298";
366
371
  const styles = {
367
372
  wrapper,
368
373
  label,
@@ -374,6 +379,7 @@ const styles = {
374
379
  textarea,
375
380
  select,
376
381
  selectPlaceholder,
382
+ inputPlaceholder,
377
383
  inputGroup,
378
384
  inputIconWrapper,
379
385
  fieldIcon,
@@ -400,6 +406,7 @@ export {
400
406
  inputGroup,
401
407
  inputGroupInput,
402
408
  inputIconWrapper,
409
+ inputPlaceholder,
403
410
  inputPrefix,
404
411
  inputSuffix,
405
412
  inputWithIcon,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axenstudio/axen-form",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "description": "Lightweight, config-driven, enterprise-grade React form library. Zero UI dependency. CSS Modules. A11y-aware.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",