@axenstudio/axen-form 0.1.10 → 0.1.11

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.
Files changed (85) hide show
  1. package/README.md +783 -270
  2. package/dist/core/dateUtils.cjs +7 -3
  3. package/dist/core/dateUtils.d.ts +1 -1
  4. package/dist/core/dateUtils.d.ts.map +1 -1
  5. package/dist/core/dateUtils.js +7 -3
  6. package/dist/core/validation.cjs +4 -1
  7. package/dist/core/validation.d.ts.map +1 -1
  8. package/dist/core/validation.js +4 -1
  9. package/dist/fields/AutocompleteField/AutocompleteField.cjs +32 -32
  10. package/dist/fields/AutocompleteField/AutocompleteField.js +32 -32
  11. package/dist/fields/AutocompleteField/AutocompleteField.module.css.cjs +34 -13
  12. package/dist/fields/AutocompleteField/AutocompleteField.module.css.js +34 -13
  13. package/dist/fields/AutocompleteMultiField/AutocompleteMultiField.cjs +90 -88
  14. package/dist/fields/AutocompleteMultiField/AutocompleteMultiField.d.ts.map +1 -1
  15. package/dist/fields/AutocompleteMultiField/AutocompleteMultiField.js +90 -88
  16. package/dist/fields/AutocompletePredictField/AutocompletePredictField.cjs +81 -64
  17. package/dist/fields/AutocompletePredictField/AutocompletePredictField.d.ts.map +1 -1
  18. package/dist/fields/AutocompletePredictField/AutocompletePredictField.js +81 -64
  19. package/dist/fields/CheckboxField/CheckboxField.module.css.cjs +12 -0
  20. package/dist/fields/CheckboxField/CheckboxField.module.css.js +12 -0
  21. package/dist/fields/ColorField/ColorField.module.css.cjs +12 -0
  22. package/dist/fields/ColorField/ColorField.module.css.js +12 -0
  23. package/dist/fields/DateField/DateField.cjs +56 -4
  24. package/dist/fields/DateField/DateField.d.ts +1 -1
  25. package/dist/fields/DateField/DateField.d.ts.map +1 -1
  26. package/dist/fields/DateField/DateField.js +56 -4
  27. package/dist/fields/DateField/DatePicker.cjs +194 -0
  28. package/dist/fields/DateField/DatePicker.d.ts +11 -0
  29. package/dist/fields/DateField/DatePicker.d.ts.map +1 -0
  30. package/dist/fields/DateField/DatePicker.js +194 -0
  31. package/dist/fields/DateField/DatePicker.module.css.cjs +62 -0
  32. package/dist/fields/DateField/DatePicker.module.css.js +62 -0
  33. package/dist/fields/DateTimeField/DateTimeField.cjs +126 -8
  34. package/dist/fields/DateTimeField/DateTimeField.d.ts +2 -1
  35. package/dist/fields/DateTimeField/DateTimeField.d.ts.map +1 -1
  36. package/dist/fields/DateTimeField/DateTimeField.js +126 -8
  37. package/dist/fields/PasswordField/PasswordField.module.css.cjs +12 -0
  38. package/dist/fields/PasswordField/PasswordField.module.css.js +12 -0
  39. package/dist/fields/RadioField/RadioField.module.css.cjs +12 -0
  40. package/dist/fields/RadioField/RadioField.module.css.js +12 -0
  41. package/dist/fields/SliderField/SliderField.module.css.cjs +15 -3
  42. package/dist/fields/SliderField/SliderField.module.css.js +15 -3
  43. package/dist/fields/SwitchField/SwitchField.module.css.cjs +12 -0
  44. package/dist/fields/SwitchField/SwitchField.module.css.js +12 -0
  45. package/dist/fields/TimeField/TimeField.cjs +60 -5
  46. package/dist/fields/TimeField/TimeField.d.ts +2 -1
  47. package/dist/fields/TimeField/TimeField.d.ts.map +1 -1
  48. package/dist/fields/TimeField/TimeField.js +60 -5
  49. package/dist/fields/TimeField/TimePicker.cjs +182 -0
  50. package/dist/fields/TimeField/TimePicker.d.ts +11 -0
  51. package/dist/fields/TimeField/TimePicker.d.ts.map +1 -0
  52. package/dist/fields/TimeField/TimePicker.js +182 -0
  53. package/dist/fields/TimeField/TimePicker.module.css.cjs +50 -0
  54. package/dist/fields/TimeField/TimePicker.module.css.js +50 -0
  55. package/dist/fields/defaultPlaceholders.cjs +1 -0
  56. package/dist/fields/defaultPlaceholders.d.ts.map +1 -1
  57. package/dist/fields/defaultPlaceholders.js +1 -0
  58. package/dist/fields/fieldBase.module.css.cjs +366 -18
  59. package/dist/fields/fieldBase.module.css.js +366 -18
  60. package/dist/fields/icons.cjs +2 -0
  61. package/dist/fields/icons.d.ts +4 -0
  62. package/dist/fields/icons.d.ts.map +1 -1
  63. package/dist/fields/icons.js +2 -0
  64. package/dist/index.cjs +230 -3
  65. package/dist/index.d.ts +2 -0
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +230 -3
  68. package/dist/layout/Box/Box.module.css.cjs +12 -0
  69. package/dist/layout/Box/Box.module.css.js +12 -0
  70. package/dist/layout/Divider/Divider.module.css.cjs +12 -0
  71. package/dist/layout/Divider/Divider.module.css.js +12 -0
  72. package/dist/layout/Grid/Grid.module.css.cjs +12 -0
  73. package/dist/layout/Grid/Grid.module.css.js +12 -0
  74. package/dist/layout/Stack/Stack.module.css.cjs +12 -0
  75. package/dist/layout/Stack/Stack.module.css.js +12 -0
  76. package/dist/react/AxenForm.cjs +228 -3
  77. package/dist/react/AxenForm.js +228 -3
  78. package/dist/react/fieldGroup.module.css.cjs +12 -0
  79. package/dist/react/fieldGroup.module.css.js +12 -0
  80. package/dist/react/gridCell.module.css.cjs +12 -0
  81. package/dist/react/gridCell.module.css.js +12 -0
  82. package/dist/types.d.ts +1 -0
  83. package/dist/types.d.ts.map +1 -1
  84. package/package.json +4 -9
  85. package/dist/axen-form.css +0 -1057
@@ -1,1057 +0,0 @@
1
- /* ═══════════════════════════════════════════════
2
- axen-form CSS Reset
3
- Minimal reset for form elements
4
- ═══════════════════════════════════════════════ */
5
-
6
- *,
7
- *::before,
8
- *::after {
9
- box-sizing: border-box;
10
- }
11
-
12
- /* Reset form element defaults */
13
- input,
14
- textarea,
15
- select,
16
- button {
17
- font-family: inherit;
18
- font-size: inherit;
19
- line-height: inherit;
20
- color: inherit;
21
- margin: 0;
22
- }
23
-
24
- /* Remove default styling from number inputs */
25
- input[type='number']::-webkit-inner-spin-button,
26
- input[type='number']::-webkit-outer-spin-button {
27
- -webkit-appearance: none;
28
- margin: 0;
29
- }
30
-
31
- input[type='number'] {
32
- -moz-appearance: textfield;
33
- appearance: textfield;
34
- }
35
-
36
- /* Remove default date/time input icons if using custom components */
37
- input[type='date']::-webkit-calendar-picker-indicator,
38
- input[type='time']::-webkit-calendar-picker-indicator,
39
- input[type='datetime-local']::-webkit-calendar-picker-indicator {
40
- cursor: pointer;
41
- }
42
-
43
- /* Ensure fieldset/legend reset */
44
- fieldset {
45
- border: none;
46
- padding: 0;
47
- margin: 0;
48
- }
49
-
50
- legend {
51
- padding: 0;
52
- }
53
-
54
- /* Remove textarea resize handle (can be overridden) */
55
- textarea {
56
- resize: vertical;
57
- }
58
-
59
- /* Focus visible only — keyboard navigation (A11y) */
60
- :focus:not(:focus-visible) {
61
- outline: none;
62
- }
63
-
64
- :focus-visible {
65
- outline: var(--axen-focus-ring-width, 2px) solid
66
- var(--axen-focus-ring-color, rgba(25, 118, 210, 0.5));
67
- outline-offset: var(--axen-focus-ring-offset, 2px);
68
- }
69
- /* ═══════════════════════════════════════════════
70
- axen-form Built-in Theme Presets
71
- Applied via data-axen-theme attribute on form
72
- ═══════════════════════════════════════════════ */
73
-
74
- /* ── Default Theme (Blue) ────────────────────── */
75
- [data-axen-theme='default'] {
76
- --axen-color-primary: #1976d2;
77
- --axen-color-primary-hover: #1565c0;
78
- --axen-color-primary-light: #e3f2fd;
79
- --axen-color-input-bg: #f0f7ff;
80
- --axen-color-label: #1565c0;
81
- }
82
-
83
- /* ── Subtle Theme (Gray) ─────────────────────── */
84
- [data-axen-theme='subtle'] {
85
- --axen-color-primary: #546e7a;
86
- --axen-color-primary-hover: #37474f;
87
- --axen-color-primary-light: #eceff1;
88
- --axen-color-input-bg: #f5f5f5;
89
- --axen-color-label: #37474f;
90
- }
91
-
92
- /* ── Green Theme ─────────────────────────────── */
93
- [data-axen-theme='green'] {
94
- --axen-color-primary: #2e7d32;
95
- --axen-color-primary-hover: #1b5e20;
96
- --axen-color-primary-light: #e8f5e9;
97
- --axen-color-input-bg: #f1f8e9;
98
- --axen-color-label: #1b5e20;
99
- }
100
- /* ═══════════════════════════════════════════════
101
- axen-form Design Tokens
102
- CSS Custom Properties — A11y-aware & Responsive
103
- ═══════════════════════════════════════════════ */
104
-
105
- :root {
106
- /* ── Color Palette ─────────────────────────── */
107
- --axen-color-primary: #1976d2;
108
- --axen-color-primary-hover: #1565c0;
109
- --axen-color-primary-light: #e3f2fd;
110
- --axen-color-error: #d32f2f;
111
- --axen-color-error-light: #fdecea;
112
- --axen-color-success: #2e7d32;
113
- --axen-color-warning: #ed6c02;
114
- --axen-color-text: #1a1a1a;
115
- --axen-color-text-secondary: #666666;
116
- --axen-color-text-disabled: #9e9e9e;
117
- --axen-color-border: #d0d5dd;
118
- --axen-color-border-hover: #888888;
119
- --axen-color-border-focus: var(--axen-color-primary);
120
- --axen-color-bg: #ffffff;
121
- --axen-color-bg-disabled: #f5f5f5;
122
- --axen-color-bg-hover: #fafafa;
123
- --axen-color-input-bg: #f0f7ff;
124
- --axen-color-label: var(--axen-color-text);
125
-
126
- /* ── Typography ────────────────────────────── */
127
- --axen-font-family:
128
- -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
129
- --axen-font-size-xs: 0.75rem;
130
- --axen-font-size-sm: 0.875rem;
131
- --axen-font-size-md: 1rem;
132
- --axen-font-size-lg: 1.125rem;
133
- --axen-font-weight-normal: 400;
134
- --axen-font-weight-medium: 500;
135
- --axen-font-weight-bold: 600;
136
- --axen-line-height: 1.5;
137
-
138
- /* ── Spacing ───────────────────────────────── */
139
- --axen-space-xs: 0.25rem;
140
- --axen-space-sm: 0.5rem;
141
- --axen-space-md: 1rem;
142
- --axen-space-lg: 1.5rem;
143
- --axen-space-xl: 2rem;
144
-
145
- /* ── Border & Radius ───────────────────────── */
146
- --axen-border-width: 1px;
147
- --axen-border-radius: 8px;
148
- --axen-border-radius-sm: 4px;
149
- --axen-border-radius-lg: 10px;
150
- --axen-border-radius-pill: 9999px;
151
-
152
- /* ── Focus Ring (A11y: WCAG 2.4.7) ─────────── */
153
- --axen-focus-ring-width: 2px;
154
- --axen-focus-ring-offset: 2px;
155
- --axen-focus-ring-color: rgba(25, 118, 210, 0.5);
156
-
157
- /* ── Field Sizing ──────────────────────────── */
158
- --axen-field-height: 2.75rem;
159
- --axen-field-min-height: 44px; /* A11y: min 44px touch target */
160
- --axen-field-padding-x: 0.75rem;
161
- --axen-field-padding-y: 0.5rem;
162
- --axen-label-margin-bottom: 0.375rem;
163
- --axen-helper-margin-top: 0.25rem;
164
-
165
- /* ── Transitions ───────────────────────────── */
166
- --axen-transition-fast: 150ms ease;
167
- --axen-transition-normal: 200ms ease;
168
-
169
- /* ── Shadows ───────────────────────────────── */
170
- --axen-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);
171
- --axen-shadow-focus: 0 0 0 var(--axen-focus-ring-width) var(--axen-focus-ring-color);
172
-
173
- /* ── Breakpoints (for reference in JS) ─────── */
174
- --axen-bp-sm: 600px;
175
- --axen-bp-md: 900px;
176
- --axen-bp-lg: 1200px;
177
- --axen-bp-xl: 1536px;
178
-
179
- /* ── Z-index layers ────────────────────────── */
180
- --axen-z-dropdown: 100;
181
- --axen-z-tooltip: 200;
182
- }
183
-
184
- /* ── Dark Mode (respects system) ────────────── */
185
- @media (prefers-color-scheme: dark) {
186
- :root {
187
- --axen-color-text: #e0e0e0;
188
- --axen-color-text-secondary: #a0a0a0;
189
- --axen-color-text-disabled: #666666;
190
- --axen-color-border: #555555;
191
- --axen-color-border-hover: #888888;
192
- --axen-color-bg: #1e1e1e;
193
- --axen-color-bg-disabled: #2a2a2a;
194
- --axen-color-bg-hover: #2e2e2e;
195
- --axen-color-primary-light: #1a3a5c;
196
- --axen-color-error-light: #3d1c1c;
197
- --axen-focus-ring-color: rgba(66, 165, 245, 0.6);
198
- }
199
- }
200
-
201
- /* ── High Contrast Mode (A11y) ──────────────── */
202
- @media (prefers-contrast: more) {
203
- :root {
204
- --axen-color-border: #000000;
205
- --axen-color-text: #000000;
206
- --axen-color-text-secondary: #333333;
207
- --axen-border-width: 2px;
208
- --axen-focus-ring-width: 3px;
209
- --axen-focus-ring-color: rgba(0, 0, 0, 0.8);
210
- }
211
- }
212
-
213
- /* ── Reduced Motion (A11y: WCAG 2.3.3) ──────── */
214
- @media (prefers-reduced-motion: reduce) {
215
- :root {
216
- --axen-transition-fast: 0ms;
217
- --axen-transition-normal: 0ms;
218
- }
219
- }
220
- /* ═══════════════════════════════════════════════
221
- axen-form Field Base Styles
222
- Shared styles for all field components
223
- A11y-aware + Responsive
224
- ═══════════════════════════════════════════════ */
225
-
226
- /* ── Field Wrapper ───────────────────────────── */
227
- ._wrapper_1w6h8_8 {
228
- display: flex;
229
- flex-direction: column;
230
- width: 100%;
231
- }
232
-
233
- /* ── Label ───────────────────────────────────── */
234
- ._label_1w6h8_15 {
235
- display: block;
236
- font-size: var(--axen-font-size-sm, 0.875rem);
237
- font-weight: var(--axen-font-weight-medium, 500);
238
- color: var(--axen-color-label, var(--axen-color-text, #1a1a1a));
239
- margin-bottom: var(--axen-label-margin-bottom, 0.375rem);
240
- line-height: var(--axen-line-height, 1.5);
241
- letter-spacing: 0.01em;
242
- }
243
-
244
- ._labelRequired_1w6h8_25::after {
245
- content: ' *';
246
- color: var(--axen-color-error, #d32f2f);
247
- font-weight: var(--axen-font-weight-bold, 600);
248
- }
249
-
250
- /* ── Input Base ──────────────────────────────── */
251
- ._input_1w6h8_32 {
252
- display: block;
253
- width: 100%;
254
- height: var(--axen-field-height, 2.75rem);
255
- min-height: var(--axen-field-min-height, 44px);
256
- padding: var(--axen-field-padding-y, 0.5rem) var(--axen-field-padding-x, 0.75rem);
257
- font-family: var(
258
- --axen-font-family,
259
- -apple-system,
260
- BlinkMacSystemFont,
261
- 'Segoe UI',
262
- Roboto,
263
- 'Helvetica Neue',
264
- Arial,
265
- sans-serif
266
- );
267
- font-size: var(--axen-font-size-md, 1rem);
268
- line-height: var(--axen-line-height, 1.5);
269
- color: var(--axen-color-text, #1a1a1a);
270
- background-color: var(--axen-color-input-bg, var(--axen-color-bg, #ffffff));
271
- border: var(--axen-border-width, 1px) solid var(--axen-color-border, #d0d5dd);
272
- border-radius: var(--axen-border-radius, 8px);
273
- transition:
274
- border-color var(--axen-transition-fast, 150ms ease),
275
- box-shadow var(--axen-transition-fast, 150ms ease);
276
- outline: none;
277
- }
278
-
279
- ._input_1w6h8_32::placeholder {
280
- color: var(--axen-color-text-disabled, #9e9e9e);
281
- }
282
-
283
- ._input_1w6h8_32:hover:not(:disabled):not(:read-only) {
284
- border-color: var(--axen-color-border-hover, #888888);
285
- }
286
-
287
- /* Focus ring (keyboard + mouse) */
288
- ._input_1w6h8_32:focus {
289
- border-color: var(--axen-color-border-focus, var(--axen-color-primary, #1976d2));
290
- box-shadow: var(--axen-shadow-focus, 0 0 0 2px rgba(25, 118, 210, 0.5));
291
- outline: none;
292
- }
293
-
294
- ._input_1w6h8_32:disabled {
295
- background-color: var(--axen-color-bg-disabled, #f5f5f5);
296
- color: var(--axen-color-text-disabled, #9e9e9e);
297
- cursor: not-allowed;
298
- }
299
-
300
- ._input_1w6h8_32:read-only {
301
- background-color: var(--axen-color-bg-disabled, #f5f5f5);
302
- }
303
-
304
- /* ── Error State ─────────────────────────────── */
305
- ._inputError_1w6h8_86 {
306
- border-color: var(--axen-color-error, #d32f2f);
307
- }
308
-
309
- ._inputError_1w6h8_86:focus {
310
- border-color: var(--axen-color-error, #d32f2f);
311
- box-shadow: 0 0 0 var(--axen-focus-ring-width, 2px) rgba(211, 47, 47, 0.3);
312
- }
313
-
314
- /* ── Helper Text ─────────────────────────────── */
315
- ._helperText_1w6h8_96 {
316
- display: block;
317
- font-size: var(--axen-font-size-xs, 0.75rem);
318
- color: var(--axen-color-text-secondary, #666666);
319
- margin-top: var(--axen-helper-margin-top, 0.25rem);
320
- line-height: var(--axen-line-height, 1.5);
321
- }
322
-
323
- ._helperTextError_1w6h8_104 {
324
- color: var(--axen-color-error, #d32f2f);
325
- }
326
-
327
- /* ── Textarea ────────────────────────────────── */
328
- ._textarea_1w6h8_109 {
329
- height: auto;
330
- min-height: calc(var(--axen-field-min-height, 44px) * 2);
331
- resize: vertical;
332
- padding-top: var(--axen-field-padding-x, 0.75rem);
333
- }
334
-
335
- /* ── Select ──────────────────────────────────── */
336
- ._select_1w6h8_117 {
337
- appearance: none;
338
- 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");
339
- background-repeat: no-repeat;
340
- background-position: right 0.75rem center;
341
- padding-right: 2rem;
342
- cursor: pointer;
343
- }
344
-
345
- /* ── Input with prefix/suffix ────────────────── */
346
- ._inputGroup_1w6h8_127 {
347
- display: flex;
348
- align-items: stretch;
349
- }
350
-
351
- /* ── Icon inside input ───────────────────────── */
352
- ._inputIconWrapper_1w6h8_133 {
353
- position: relative;
354
- }
355
-
356
- ._fieldIcon_1w6h8_137 {
357
- position: absolute;
358
- left: 0.75rem;
359
- top: 50%;
360
- transform: translateY(-50%);
361
- width: 1.125rem;
362
- height: 1.125rem;
363
- color: var(--axen-color-text-secondary, #666666);
364
- pointer-events: none;
365
- display: flex;
366
- align-items: center;
367
- justify-content: center;
368
- z-index: 1;
369
- }
370
-
371
- ._inputWithIcon_1w6h8_152 {
372
- padding-left: 2.5rem;
373
- }
374
-
375
- ._inputPrefix_1w6h8_156,
376
- ._inputSuffix_1w6h8_157 {
377
- display: flex;
378
- align-items: center;
379
- padding: 0 var(--axen-space-sm, 0.5rem);
380
- font-size: var(--axen-font-size-sm, 0.875rem);
381
- color: var(--axen-color-text-secondary, #666666);
382
- background-color: var(--axen-color-bg-hover, #fafafa);
383
- border: var(--axen-border-width, 1px) solid var(--axen-color-border, #c4c4c4);
384
- white-space: nowrap;
385
- }
386
-
387
- ._inputPrefix_1w6h8_156 {
388
- border-right: none;
389
- border-radius: var(--axen-border-radius, 6px) 0 0 var(--axen-border-radius, 6px);
390
- }
391
-
392
- ._inputSuffix_1w6h8_157 {
393
- border-left: none;
394
- border-radius: 0 var(--axen-border-radius, 6px) var(--axen-border-radius, 6px) 0;
395
- }
396
-
397
- ._inputGroupInput_1w6h8_178 {
398
- border-radius: 0;
399
- }
400
-
401
- ._inputPrefix_1w6h8_156 + ._inputGroupInput_1w6h8_178 {
402
- border-top-left-radius: 0;
403
- border-bottom-left-radius: 0;
404
- }
405
-
406
- ._inputGroupInput_1w6h8_178:has(+ ._inputSuffix_1w6h8_157) {
407
- border-top-right-radius: 0;
408
- border-bottom-right-radius: 0;
409
- }
410
-
411
- /* ── Checkbox/Radio/Switch shared ────────────── */
412
- ._inlineWrapper_1w6h8_193 {
413
- display: flex;
414
- align-items: center;
415
- gap: var(--axen-space-sm, 0.5rem);
416
- min-height: var(--axen-field-min-height, 44px);
417
- cursor: pointer;
418
- }
419
-
420
- ._inlineWrapper_1w6h8_193:has(:disabled) {
421
- cursor: not-allowed;
422
- opacity: 0.6;
423
- }
424
-
425
- ._inlineLabel_1w6h8_206 {
426
- font-size: var(--axen-font-size-md, 1rem);
427
- color: var(--axen-color-text, #1a1a1a);
428
- user-select: none;
429
- }
430
-
431
- /* ── Responsive: mobile touch targets ────────── */
432
- @media (max-width: 599px) {
433
- ._input_1w6h8_32 {
434
- font-size: 16px; /* Prevent iOS zoom on focus */
435
- min-height: 48px;
436
- }
437
-
438
- ._inlineWrapper_1w6h8_193 {
439
- min-height: 48px;
440
- }
441
- }
442
-
443
- /* ── High Contrast Mode ──────────────────────── */
444
- @media (prefers-contrast: more) {
445
- ._input_1w6h8_32 {
446
- border-width: 2px;
447
- }
448
-
449
- ._inputError_1w6h8_86 {
450
- border-width: 3px;
451
- }
452
-
453
- ._helperTextError_1w6h8_104 {
454
- font-weight: var(--axen-font-weight-bold, 600);
455
- }
456
- }
457
-
458
- /* ── Reduced Motion (A11y: WCAG 2.3.3) ──────── */
459
- @media (prefers-reduced-motion: reduce) {
460
- ._input_1w6h8_32 {
461
- transition: none;
462
- }
463
- }
464
- ._inputWrap_1hzxx_1 {
465
- position: relative;
466
- display: flex;
467
- align-items: center;
468
- }
469
-
470
- ._spinner_1hzxx_7 {
471
- position: absolute;
472
- right: 0.75rem;
473
- width: 16px;
474
- height: 16px;
475
- border: 2px solid var(--axen-color-border);
476
- border-top-color: var(--axen-color-primary);
477
- border-radius: 50%;
478
- animation: _spin_1hzxx_7 0.6s linear infinite;
479
- }
480
-
481
- @keyframes _spin_1hzxx_7 {
482
- to {
483
- transform: rotate(360deg);
484
- }
485
- }
486
-
487
- @media (prefers-reduced-motion: reduce) {
488
- ._spinner_1hzxx_7 {
489
- animation: none;
490
- opacity: 0.6;
491
- }
492
- }
493
-
494
- /* ── Dropdown ────────────────────────────────── */
495
- ._dropdown_1hzxx_32 {
496
- position: absolute;
497
- z-index: var(--axen-z-dropdown);
498
- width: 100%;
499
- max-height: 240px;
500
- margin: 0;
501
- padding: var(--axen-space-xs) 0;
502
- list-style: none;
503
- overflow-y: auto;
504
- background: var(--axen-color-bg);
505
- border: var(--axen-border-width) solid var(--axen-color-border);
506
- border-top: none;
507
- border-radius: 0 0 var(--axen-border-radius) var(--axen-border-radius);
508
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
509
- }
510
-
511
- ._option_1hzxx_48 {
512
- display: flex;
513
- align-items: center;
514
- padding: var(--axen-space-sm) var(--axen-field-padding-x);
515
- font-size: var(--axen-font-size-md);
516
- color: var(--axen-color-text);
517
- cursor: pointer;
518
- min-height: var(--axen-field-min-height);
519
- transition: background-color var(--axen-transition-fast);
520
- }
521
-
522
- ._option_1hzxx_48:hover {
523
- background-color: var(--axen-color-bg-hover);
524
- }
525
-
526
- ._optionActive_1hzxx_63 {
527
- background-color: var(--axen-color-primary-light);
528
- }
529
-
530
- ._optionDisabled_1hzxx_67 {
531
- color: var(--axen-color-text-disabled);
532
- cursor: not-allowed;
533
- }
534
-
535
- ._noResults_1hzxx_72 {
536
- padding: var(--axen-space-sm) var(--axen-field-padding-x);
537
- font-size: var(--axen-font-size-sm);
538
- color: var(--axen-color-text-secondary);
539
- border: var(--axen-border-width) solid var(--axen-color-border);
540
- border-top: none;
541
- border-radius: 0 0 var(--axen-border-radius) var(--axen-border-radius);
542
- background: var(--axen-color-bg);
543
- }
544
-
545
- /* ── Chip (used by multi) ────────────────────── */
546
- ._chipWrap_1hzxx_83 {
547
- display: flex;
548
- flex-wrap: wrap;
549
- gap: var(--axen-space-xs);
550
- padding: var(--axen-space-xs);
551
- }
552
-
553
- ._chip_1hzxx_83 {
554
- display: inline-flex;
555
- align-items: center;
556
- gap: var(--axen-space-xs);
557
- padding: 2px 8px;
558
- font-size: var(--axen-font-size-xs);
559
- color: var(--axen-color-text);
560
- background-color: var(--axen-color-primary-light);
561
- border-radius: var(--axen-border-radius-pill);
562
- max-width: 100%;
563
- white-space: nowrap;
564
- overflow: hidden;
565
- text-overflow: ellipsis;
566
- }
567
-
568
- ._chipRemove_1hzxx_105 {
569
- display: inline-flex;
570
- align-items: center;
571
- justify-content: center;
572
- width: 16px;
573
- height: 16px;
574
- padding: 0;
575
- border: none;
576
- background: transparent;
577
- cursor: pointer;
578
- font-size: 12px;
579
- color: var(--axen-color-text-secondary);
580
- border-radius: 50%;
581
- flex-shrink: 0;
582
- }
583
-
584
- ._chipRemove_1hzxx_105:hover {
585
- background: rgba(0, 0, 0, 0.08);
586
- color: var(--axen-color-text);
587
- }
588
-
589
- ._chipRemove_1hzxx_105:focus-visible {
590
- outline: var(--axen-focus-ring-width) solid var(--axen-focus-ring-color);
591
- }
592
-
593
- /* ── Ghost text (predict) ────────────────────── */
594
- ._predictWrap_1hzxx_131 {
595
- position: relative;
596
- display: flex;
597
- align-items: center;
598
- }
599
-
600
- ._ghostText_1hzxx_137 {
601
- position: absolute;
602
- left: var(--axen-field-padding-x);
603
- top: 50%;
604
- transform: translateY(-50%);
605
- color: var(--axen-color-text-disabled);
606
- font-family: var(--axen-font-family);
607
- font-size: var(--axen-font-size-md);
608
- pointer-events: none;
609
- white-space: nowrap;
610
- overflow: hidden;
611
- }
612
-
613
- ._ghostHidden_1hzxx_150 {
614
- visibility: hidden;
615
- position: absolute;
616
- white-space: pre;
617
- font-family: var(--axen-font-family);
618
- font-size: var(--axen-font-size-md);
619
- }
620
-
621
- /* ── Mobile adjustments ──────────────────────── */
622
- @media (max-width: 599px) {
623
- ._dropdown_1hzxx_32 {
624
- max-height: 200px;
625
- }
626
-
627
- ._option_1hzxx_48 {
628
- min-height: 48px;
629
- padding: var(--axen-space-sm) var(--axen-space-md);
630
- }
631
- }
632
- ._checkboxLabel_1labl_1 {
633
- cursor: pointer;
634
- }
635
-
636
- ._checkbox_1labl_1 {
637
- width: 20px;
638
- height: 20px;
639
- margin: 0;
640
- cursor: pointer;
641
- accent-color: var(--axen-color-primary);
642
- border-radius: var(--axen-border-radius-sm);
643
- }
644
-
645
- ._checkbox_1labl_1:focus-visible {
646
- outline: var(--axen-focus-ring-width) solid var(--axen-focus-ring-color);
647
- outline-offset: var(--axen-focus-ring-offset);
648
- }
649
-
650
- ._checkbox_1labl_1:disabled {
651
- cursor: not-allowed;
652
- }
653
-
654
- /* Mobile: larger touch target */
655
- @media (max-width: 599px) {
656
- ._checkbox_1labl_1 {
657
- width: 24px;
658
- height: 24px;
659
- }
660
- }
661
- ._colorWrap_or7ln_1 {
662
- display: flex;
663
- align-items: center;
664
- gap: var(--axen-space-sm);
665
- min-height: var(--axen-field-min-height);
666
- }
667
-
668
- ._colorInput_or7ln_8 {
669
- width: 44px;
670
- height: 44px;
671
- padding: 2px;
672
- border: var(--axen-border-width) solid var(--axen-color-border);
673
- border-radius: var(--axen-border-radius);
674
- cursor: pointer;
675
- background: none;
676
- }
677
-
678
- ._colorInput_or7ln_8:focus-visible {
679
- outline: var(--axen-focus-ring-width) solid var(--axen-focus-ring-color);
680
- outline-offset: var(--axen-focus-ring-offset);
681
- }
682
-
683
- ._colorInput_or7ln_8:disabled {
684
- opacity: 0.5;
685
- cursor: not-allowed;
686
- }
687
-
688
- ._colorValue_or7ln_28 {
689
- font-size: var(--axen-font-size-sm);
690
- font-family: monospace;
691
- color: var(--axen-color-text-secondary);
692
- text-transform: uppercase;
693
- }
694
- ._inputWrap_1nxa7_1 {
695
- position: relative;
696
- display: flex;
697
- align-items: center;
698
- }
699
-
700
- ._passwordInput_1nxa7_7 {
701
- padding-right: 2.5rem;
702
- }
703
-
704
- ._toggle_1nxa7_11 {
705
- position: absolute;
706
- right: 0.5rem;
707
- display: flex;
708
- align-items: center;
709
- justify-content: center;
710
- width: 2rem;
711
- height: 2rem;
712
- padding: 0;
713
- border: none;
714
- background: transparent;
715
- cursor: pointer;
716
- color: var(--axen-color-text-secondary);
717
- font-size: var(--axen-font-size-lg);
718
- border-radius: var(--axen-border-radius-sm);
719
- transition: color var(--axen-transition-fast);
720
- }
721
-
722
- ._toggle_1nxa7_11:hover:not(:disabled) {
723
- color: var(--axen-color-text);
724
- }
725
-
726
- ._toggle_1nxa7_11:focus-visible {
727
- outline: var(--axen-focus-ring-width) solid var(--axen-focus-ring-color);
728
- outline-offset: var(--axen-focus-ring-offset);
729
- }
730
-
731
- ._toggle_1nxa7_11:disabled {
732
- cursor: not-allowed;
733
- opacity: 0.5;
734
- }
735
- ._radioGroup_1nz5i_1 {
736
- display: flex;
737
- flex-direction: column;
738
- gap: var(--axen-space-xs);
739
- }
740
-
741
- ._radioLabel_1nz5i_7 {
742
- cursor: pointer;
743
- }
744
-
745
- ._radio_1nz5i_1 {
746
- width: 20px;
747
- height: 20px;
748
- margin: 0;
749
- cursor: pointer;
750
- accent-color: var(--axen-color-primary);
751
- }
752
-
753
- ._radio_1nz5i_1:focus-visible {
754
- outline: var(--axen-focus-ring-width) solid var(--axen-focus-ring-color);
755
- outline-offset: var(--axen-focus-ring-offset);
756
- }
757
-
758
- ._radio_1nz5i_1:disabled {
759
- cursor: not-allowed;
760
- }
761
-
762
- /* Mobile: larger touch target */
763
- @media (max-width: 599px) {
764
- ._radio_1nz5i_1 {
765
- width: 24px;
766
- height: 24px;
767
- }
768
- }
769
- ._sliderWrap_84w8t_1 {
770
- display: flex;
771
- align-items: center;
772
- gap: var(--axen-space-md);
773
- min-height: var(--axen-field-min-height);
774
- }
775
-
776
- ._slider_84w8t_1 {
777
- flex: 1;
778
- height: 6px;
779
- appearance: none;
780
- background: var(--axen-color-border);
781
- border-radius: var(--axen-border-radius-pill);
782
- outline: none;
783
- cursor: pointer;
784
- transition: background var(--axen-transition-fast);
785
- }
786
-
787
- ._slider_84w8t_1::-webkit-slider-thumb {
788
- appearance: none;
789
- width: 20px;
790
- height: 20px;
791
- border-radius: 50%;
792
- background: var(--axen-color-primary);
793
- border: 2px solid var(--axen-color-bg);
794
- box-shadow: var(--axen-shadow-sm);
795
- cursor: pointer;
796
- transition:
797
- background var(--axen-transition-fast),
798
- transform var(--axen-transition-fast);
799
- }
800
-
801
- ._slider_84w8t_1::-webkit-slider-thumb:hover {
802
- background: var(--axen-color-primary-hover);
803
- transform: scale(1.15);
804
- }
805
-
806
- ._slider_84w8t_1:focus-visible::-webkit-slider-thumb {
807
- box-shadow: var(--axen-shadow-focus);
808
- }
809
-
810
- ._slider_84w8t_1::-moz-range-thumb {
811
- width: 20px;
812
- height: 20px;
813
- border-radius: 50%;
814
- background: var(--axen-color-primary);
815
- border: 2px solid var(--axen-color-bg);
816
- box-shadow: var(--axen-shadow-sm);
817
- cursor: pointer;
818
- }
819
-
820
- ._slider_84w8t_1:disabled {
821
- opacity: 0.5;
822
- cursor: not-allowed;
823
- }
824
-
825
- ._output_84w8t_57 {
826
- min-width: 2.5em;
827
- text-align: center;
828
- font-size: var(--axen-font-size-sm);
829
- font-weight: var(--axen-font-weight-medium);
830
- color: var(--axen-color-text);
831
- }
832
-
833
- /* Touch target for mobile */
834
- @media (max-width: 599px) {
835
- ._slider_84w8t_1::-webkit-slider-thumb {
836
- width: 28px;
837
- height: 28px;
838
- }
839
-
840
- ._slider_84w8t_1::-moz-range-thumb {
841
- width: 28px;
842
- height: 28px;
843
- }
844
- }
845
- ._switchLabel_1itxk_1 {
846
- cursor: pointer;
847
- }
848
-
849
- ._switchTrack_1itxk_5 {
850
- position: relative;
851
- display: inline-flex;
852
- align-items: center;
853
- width: 44px;
854
- height: 24px;
855
- background-color: var(--axen-color-border);
856
- border-radius: var(--axen-border-radius-pill);
857
- transition: background-color var(--axen-transition-fast);
858
- flex-shrink: 0;
859
- }
860
-
861
- ._switchInput_1itxk_17 {
862
- position: absolute;
863
- width: 100%;
864
- height: 100%;
865
- margin: 0;
866
- padding: 0;
867
- opacity: 0;
868
- cursor: pointer;
869
- }
870
-
871
- ._switchInput_1itxk_17:checked + ._switchThumb_1itxk_27 {
872
- transform: translateX(20px);
873
- }
874
-
875
- ._switchInput_1itxk_17:checked ~ ._switchThumb_1itxk_27 {
876
- transform: translateX(20px);
877
- }
878
-
879
- ._switchTrack_1itxk_5:has(._switchInput_1itxk_17:checked) {
880
- background-color: var(--axen-color-primary);
881
- }
882
-
883
- ._switchInput_1itxk_17:focus-visible ~ ._switchThumb_1itxk_27 {
884
- box-shadow: var(--axen-shadow-focus);
885
- }
886
-
887
- ._switchInput_1itxk_17:disabled {
888
- cursor: not-allowed;
889
- }
890
-
891
- ._switchTrack_1itxk_5:has(._switchInput_1itxk_17:disabled) {
892
- opacity: 0.5;
893
- cursor: not-allowed;
894
- }
895
-
896
- ._switchThumb_1itxk_27 {
897
- position: absolute;
898
- left: 2px;
899
- width: 20px;
900
- height: 20px;
901
- background-color: var(--axen-color-bg);
902
- border-radius: 50%;
903
- box-shadow: var(--axen-shadow-sm);
904
- transition: transform var(--axen-transition-fast);
905
- pointer-events: none;
906
- }
907
-
908
- /* Mobile: larger touch target */
909
- @media (max-width: 599px) {
910
- ._switchTrack_1itxk_5 {
911
- width: 52px;
912
- height: 28px;
913
- }
914
-
915
- ._switchThumb_1itxk_27 {
916
- width: 24px;
917
- height: 24px;
918
- }
919
-
920
- ._switchInput_1itxk_17:checked ~ ._switchThumb_1itxk_27 {
921
- transform: translateX(24px);
922
- }
923
- }
924
- /* ═══════════════════════════════════════════════
925
- axen-form Field Group / Section Styles
926
- ═══════════════════════════════════════════════ */
927
-
928
- ._fieldGroup_1864u_5 {
929
- display: contents; /* Inherit parent grid flow */
930
- }
931
-
932
- ._groupLabel_1864u_9 {
933
- grid-column: 1 / -1;
934
- font-size: var(--axen-font-size-md, 1rem);
935
- font-weight: var(--axen-font-weight-bold, 600);
936
- color: var(--axen-color-primary, #1976d2);
937
- padding-bottom: var(--axen-space-xs, 0.25rem);
938
- border-bottom: 2px solid var(--axen-color-primary-light, #e3f2fd);
939
- margin-top: var(--axen-space-md, 1rem);
940
- margin-bottom: var(--axen-space-xs, 0.25rem);
941
- }
942
-
943
- ._fieldGroup_1864u_5:first-child > ._groupLabel_1864u_9 {
944
- margin-top: 0;
945
- }
946
- /* ═══════════════════════════════════════════════
947
- axen-form Grid Cell — Responsive colSpan
948
- Uses CSS custom properties + media queries
949
- ═══════════════════════════════════════════════ */
950
-
951
- ._cell_s3hwz_6 {
952
- --_col: var(--col-xs, 12);
953
- grid-column: span var(--_col);
954
- min-width: 0; /* Prevent grid blowout from long content */
955
- }
956
-
957
- /* sm ≥ 600px */
958
- @media (min-width: 600px) {
959
- ._cell_s3hwz_6 {
960
- --_col: var(--col-sm, var(--col-xs, 12));
961
- }
962
- }
963
-
964
- /* md ≥ 900px */
965
- @media (min-width: 900px) {
966
- ._cell_s3hwz_6 {
967
- --_col: var(--col-md, var(--col-sm, var(--col-xs, 12)));
968
- }
969
- }
970
-
971
- /* lg ≥ 1200px */
972
- @media (min-width: 1200px) {
973
- ._cell_s3hwz_6 {
974
- --_col: var(--col-lg, var(--col-md, var(--col-sm, var(--col-xs, 12))));
975
- }
976
- }
977
-
978
- /* xl ≥ 1536px */
979
- @media (min-width: 1536px) {
980
- ._cell_s3hwz_6 {
981
- --_col: var(--col-xl, var(--col-lg, var(--col-md, var(--col-sm, var(--col-xs, 12)))));
982
- }
983
- }
984
- ._box_17jtc_1 {
985
- min-width: 0;
986
- }
987
- ._divider_7khjl_1 {
988
- border: none;
989
- margin: 0;
990
- flex-shrink: 0;
991
- }
992
-
993
- ._horizontal_7khjl_7 {
994
- width: 100%;
995
- height: 1px;
996
- background-color: var(--axen-color-border);
997
- }
998
-
999
- ._vertical_7khjl_13 {
1000
- width: 1px;
1001
- height: auto;
1002
- align-self: stretch;
1003
- background-color: var(--axen-color-border);
1004
- }
1005
-
1006
- @media (prefers-contrast: more) {
1007
- ._horizontal_7khjl_7,
1008
- ._vertical_7khjl_13 {
1009
- background-color: var(--axen-color-text);
1010
- }
1011
- }
1012
- /* ═══════════════════════════════════════════════
1013
- Grid Layout — Responsive CSS Grid
1014
- 12-column mobile-first system
1015
- ═══════════════════════════════════════════════ */
1016
-
1017
- ._container_1asbx_6 {
1018
- display: grid;
1019
- width: 100%;
1020
- }
1021
-
1022
- ._item_1asbx_11 {
1023
- min-width: 0; /* Prevent overflow */
1024
- }
1025
-
1026
- /* ── Responsive Breakpoints ──────────────────── */
1027
-
1028
- /* sm ≥ 600px */
1029
- @media (min-width: 600px) {
1030
- ._sm_1asbx_19 {
1031
- grid-column: span var(--axen-grid-sm, 12);
1032
- }
1033
- }
1034
-
1035
- /* md ≥ 900px */
1036
- @media (min-width: 900px) {
1037
- ._md_1asbx_26 {
1038
- grid-column: span var(--axen-grid-md, 12);
1039
- }
1040
- }
1041
-
1042
- /* lg ≥ 1200px */
1043
- @media (min-width: 1200px) {
1044
- ._lg_1asbx_33 {
1045
- grid-column: span var(--axen-grid-lg, 12);
1046
- }
1047
- }
1048
-
1049
- /* xl ≥ 1536px */
1050
- @media (min-width: 1536px) {
1051
- ._xl_1asbx_40 {
1052
- grid-column: span var(--axen-grid-xl, 12);
1053
- }
1054
- }
1055
- ._stack_1m70l_1 {
1056
- min-width: 0;
1057
- }