lapikit 0.7.3 → 0.7.4

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 (67) hide show
  1. package/dist/@types/components.d.ts +1 -7
  2. package/dist/@types/dom.d.ts +4 -3
  3. package/dist/@types/props.d.ts +3 -3
  4. package/dist/animations/ripple.js +8 -2
  5. package/dist/components/accordion/accordion.svelte +192 -228
  6. package/dist/components/accordion/accordion.types.d.ts +5 -7
  7. package/dist/components/accordion/modules/accordion-item.svelte +144 -140
  8. package/dist/components/alert/alert.svelte +246 -293
  9. package/dist/components/alert/alert.types.d.ts +5 -5
  10. package/dist/components/app/app.svelte +25 -43
  11. package/dist/components/appbar/appbar.svelte +205 -190
  12. package/dist/components/appbar/appbar.types.d.ts +6 -6
  13. package/dist/components/aspect-ratio/aspect-ratio.svelte +43 -63
  14. package/dist/components/avatar/avatar.svelte +169 -161
  15. package/dist/components/avatar/avatar.types.d.ts +3 -4
  16. package/dist/components/btn/btn.svelte +431 -465
  17. package/dist/components/btn/btn.types.d.ts +5 -6
  18. package/dist/components/card/card.svelte +24 -23
  19. package/dist/components/card/card.types.d.ts +2 -2
  20. package/dist/components/card/modules/card-content.svelte +4 -1
  21. package/dist/components/card/modules/card-title.svelte +4 -1
  22. package/dist/components/chip/chip.svelte +416 -464
  23. package/dist/components/chip/chip.types.d.ts +5 -5
  24. package/dist/components/dialog/dialog.svelte +174 -171
  25. package/dist/components/dialog/dialog.types.d.ts +6 -6
  26. package/dist/components/dropdown/dropdown.svelte +149 -144
  27. package/dist/components/dropdown/dropdown.types.d.ts +4 -11
  28. package/dist/components/field/field.svelte +474 -0
  29. package/dist/components/field/field.svelte.d.ts +4 -0
  30. package/dist/components/field/field.types.d.ts +46 -0
  31. package/dist/components/field/field.types.js +1 -0
  32. package/dist/components/icon/icon.svelte +67 -96
  33. package/dist/components/icon/icon.types.d.ts +2 -1
  34. package/dist/components/index.d.ts +2 -0
  35. package/dist/components/index.js +1 -0
  36. package/dist/components/list/list.svelte +193 -194
  37. package/dist/components/list/list.types.d.ts +5 -7
  38. package/dist/components/list/modules/list-item.svelte +134 -147
  39. package/dist/components/modal/modal.svelte +239 -222
  40. package/dist/components/modal/modal.types.d.ts +6 -6
  41. package/dist/components/popover/popover.svelte +125 -127
  42. package/dist/components/popover/popover.types.d.ts +4 -11
  43. package/dist/components/separator/separator.svelte +56 -87
  44. package/dist/components/separator/separator.types.d.ts +1 -1
  45. package/dist/components/spacer/spacer.svelte +6 -25
  46. package/dist/components/textfield/textfield.svelte +94 -543
  47. package/dist/components/textfield/textfield.types.d.ts +13 -33
  48. package/dist/components/toolbar/toolbar.svelte +216 -211
  49. package/dist/components/toolbar/toolbar.types.d.ts +8 -9
  50. package/dist/components/tooltip/tooltip.svelte +201 -266
  51. package/dist/components/tooltip/tooltip.types.d.ts +3 -10
  52. package/dist/constants.js +1 -0
  53. package/dist/html-mapped.d.ts +1 -15
  54. package/dist/html-mapped.js +0 -19
  55. package/dist/labs/sheet/sheet.svelte +27 -22
  56. package/dist/utils/color.d.ts +2 -2
  57. package/dist/utils/color.js +2 -1
  58. package/dist/utils/components.d.ts +10 -10
  59. package/dist/utils/components.js +16 -75
  60. package/dist/utils/floating.d.ts +58 -0
  61. package/dist/utils/floating.js +131 -0
  62. package/dist/utils/index.d.ts +1 -0
  63. package/dist/utils/index.js +1 -0
  64. package/package.json +3 -3
  65. package/dist/components/dropdown/dropdown.svelte.js +0 -148
  66. package/dist/components/popover/popover.svelte.js +0 -134
  67. package/dist/components/tooltip/tooltip.svelte.js +0 -131
@@ -1,589 +1,140 @@
1
1
  <script lang="ts">
2
- import { useClassName, useElevation, useStyles } from '../../utils';
3
- import { makeComponentProps } from '../../html-mapped';
4
- import Icon from '../icon/icon.svelte';
2
+ import Field from '../field/field.svelte';
5
3
  import type { TextfieldProps } from './textfield.types.js';
6
4
 
7
5
  let {
8
6
  ref = $bindable(),
9
- prepend,
10
- append,
11
- prependInner,
12
- appendInner,
13
7
  value = $bindable(),
14
8
  type = 'text',
15
- density = 'default',
16
- size = 'md',
17
- variant = 'filled',
18
- placeholder,
19
- counter = false,
20
9
  min,
21
10
  max,
22
- prefix,
23
- suffix,
24
- message,
25
- messagePrefix,
26
- messageSuffix,
27
- clearable = false,
28
- persistentClear = false,
29
- disabled = false,
30
- error = false,
31
- errorMessage,
32
- persistentMessage = false,
11
+ counter = false,
33
12
  hideSpinButtons = false,
34
- readonly = false,
35
- color,
36
- background,
37
- rounded = 'md',
38
- class: className = '',
39
- style: styleAttr = '',
13
+ class: className,
14
+ style: styleAttr,
40
15
  's-class': sClass,
41
16
  's-style': sStyle,
42
- name,
43
17
  id,
44
- autocomplete,
45
- inputmode,
18
+ variant,
19
+ size,
20
+ density,
21
+ rounded,
22
+ color,
46
23
  elevation,
24
+ disabled = false,
25
+ readonly = false,
26
+ error = false,
27
+ errorMessage,
28
+ message,
29
+ messagePrefix,
30
+ messageSuffix,
31
+ persistentMessage,
32
+ clearable,
33
+ persistentClear,
34
+ prefix,
35
+ suffix,
36
+ prepend,
37
+ append,
38
+ prependInner,
39
+ appendInner,
47
40
  ...rest
48
41
  }: TextfieldProps = $props();
49
42
 
50
- let { classProps, styleProps, restProps } = $derived(
51
- makeComponentProps(rest as Record<string, unknown>)
52
- );
53
-
54
- let elevationState = $derived(useElevation(elevation));
55
-
56
- let componentClass = $derived(
57
- useClassName({
58
- baseClass: 'kit-textfield',
59
- className: `${className ?? ''}`.trim(),
60
- sClass,
61
- classProps
62
- })
63
- );
64
-
65
- let componentStyle = $derived(
66
- useStyles({
67
- styleAttr,
68
- sStyle,
69
- styleProps
70
- })
71
- );
72
-
73
- let resolvedStyle = $derived(
74
- [
75
- componentStyle,
76
- color ? `--kit-textfield-fg:${color && `var(--kit-color-${color})`}` : '',
77
- background ? `--kit-textfield-bg:${background && `var(--kit-color-${background})`}` : ''
78
- ]
79
- .filter(Boolean)
80
- .join('; ')
81
- );
82
-
83
- let counterValue = $state(0);
84
- let displayMessage = $state(false);
85
- let displayClear = $state(false);
86
43
  let inputRef = $state<HTMLInputElement | null>(null);
87
-
88
- const inputClear = () => {
89
- value = '';
90
- inputRef?.focus();
91
- };
92
-
93
- const handleFocus = () => {
94
- if (!error && !persistentMessage) displayMessage = true;
95
- };
96
-
97
- const handleBlur = () => {
98
- if (!error && !persistentMessage) displayMessage = false;
99
- };
44
+ let text = $derived(`${value ?? ''}`);
100
45
 
101
46
  $effect(() => {
102
- if (persistentMessage || error) displayMessage = true;
103
- else displayMessage = false;
104
- });
105
-
106
- $effect(() => {
107
- const valueStr = value?.toString() || '';
108
-
109
- if (valueStr && typeof max === 'number' && max > 0 && valueStr.length > max) {
110
- const truncated = valueStr.slice(0, max);
111
- if (typeof value === 'number') {
112
- const numValue = Number(truncated);
113
- value = Number.isNaN(numValue) ? 0 : numValue;
114
- } else {
115
- value = truncated;
116
- }
47
+ if (typeof max === 'number' && max > 0 && text.length > max) {
48
+ const truncated = text.slice(0, max);
49
+ value = typeof value === 'number' ? Number(truncated) || 0 : truncated;
117
50
  }
118
-
119
- counterValue = valueStr.length;
120
- });
121
-
122
- $effect(() => {
123
- if (persistentClear) displayClear = true;
124
- else displayClear = !!(`${value ?? ''}`.length > 0);
125
51
  });
126
52
 
127
- let messageValue = $derived(error ? errorMessage || message : message);
53
+ function clear() {
54
+ value = '';
55
+ inputRef?.focus();
56
+ }
128
57
  </script>
129
58
 
130
- <div
131
- bind:this={ref}
132
- class={componentClass}
133
- style={resolvedStyle}
134
- {...restProps}
135
- data-size={size}
136
- data-variant={variant}
137
- data-density={density}
138
- data-disabled={disabled}
139
- data-readonly={readonly}
140
- data-error={error}
59
+ <Field
60
+ bind:ref
61
+ class={['kit-textfield', className]}
62
+ style={styleAttr}
63
+ s-class={sClass}
64
+ s-style={sStyle}
65
+ id={id ?? undefined}
66
+ {variant}
67
+ {size}
68
+ {density}
69
+ {rounded}
70
+ {color}
71
+ {elevation}
72
+ {disabled}
73
+ {readonly}
74
+ {error}
75
+ {errorMessage}
76
+ {message}
77
+ {messagePrefix}
78
+ {messageSuffix}
79
+ {persistentMessage}
80
+ {clearable}
81
+ {persistentClear}
82
+ {prefix}
83
+ {suffix}
84
+ {prepend}
85
+ {append}
86
+ {prependInner}
87
+ {appendInner}
88
+ dirty={text.length > 0}
89
+ counter={counter ? `${text.length}${max ? `/${max}` : ''}` : undefined}
90
+ onclear={clear}
141
91
  data-hide-spin-buttons={type === 'number' && hideSpinButtons}
142
- data-rounded={rounded}
143
- data-with-message={(messageValue || messagePrefix || messageSuffix || counter) && true}
144
92
  >
145
- {#if prepend}
146
- <div class="kit-textfield__prepend">
147
- {@render prepend?.()}
148
- </div>
149
- {/if}
150
-
151
- <div class="kit-textfield__control">
152
- <div
153
- class="kit-textfield__field"
154
- data-elevation={elevationState.base}
155
- data-elevation-hover={elevationState.hover}
156
- data-elevation-active={elevationState.active}
157
- >
158
- {#if variant === 'outline' || variant === 'filled'}
159
- <span class="outline"></span>
160
- {/if}
161
- {#if variant === 'text'}
162
- <span class="line"></span>
163
- {/if}
164
-
165
- {#if prependInner}
166
- <div class="kit-textfield__prepend-inner">
167
- {@render prependInner?.()}
168
- </div>
169
- {/if}
170
-
171
- <div class="kit-textfield__input-wrap">
172
- {#if prefix}
173
- <span class="kit-textfield__prefix">{prefix}</span>
174
- {/if}
175
-
176
- <input
177
- bind:this={inputRef}
178
- bind:value
179
- {id}
180
- {name}
181
- {type}
182
- {placeholder}
183
- {autocomplete}
184
- {inputmode}
185
- size="1"
186
- maxlength={max}
187
- minlength={min}
188
- {disabled}
189
- {readonly}
190
- aria-invalid={error || undefined}
191
- aria-describedby={messageValue ? `${id ?? name ?? 'textfield'}-message` : undefined}
192
- onfocus={handleFocus}
193
- onblur={handleBlur}
194
- />
195
-
196
- {#if suffix}
197
- <span class="kit-textfield__suffix">{suffix}</span>
198
- {/if}
199
- </div>
200
-
201
- {#if clearable}
202
- <button
203
- type="button"
204
- class="kit-textfield__clear"
205
- data-visible={displayClear}
206
- aria-label="Clear input"
207
- onclick={inputClear}
208
- >
209
- <Icon name="mgc_close_circle_fill" />
210
- </button>
211
- {/if}
212
-
213
- {#if appendInner}
214
- <div class="kit-textfield__append-inner">
215
- {@render appendInner?.()}
216
- </div>
217
- {/if}
218
- </div>
219
- </div>
220
-
221
- {#if append}
222
- <div class="kit-textfield__append">
223
- {@render append?.()}
224
- </div>
225
- {/if}
226
-
227
- {#if messageValue || messagePrefix || messageSuffix || counter}
228
- <div class="kit-textfield__message" data-visible={displayMessage}>
229
- <div
230
- class="kit-textfield__message-inner"
231
- data-error={error || undefined}
232
- id={messageValue ? `${id ?? name ?? 'textfield'}-message` : undefined}
233
- >
234
- {#if messagePrefix}
235
- <div class="kit-textfield__message-prefix">{messagePrefix}</div>
236
- {/if}
237
- {#if messageValue}
238
- <div class="kit-textfield__message-text">{messageValue}</div>
239
- {/if}
240
- {#if counter || messageSuffix}
241
- <div class="kit-textfield__message-suffix">
242
- {#if counter}
243
- {counterValue}{max ? `/${max}` : ''}
244
- {:else if messageSuffix}
245
- {messageSuffix}
246
- {/if}
247
- </div>
248
- {/if}
249
- </div>
250
- </div>
251
- {/if}
252
- </div>
93
+ {#snippet children(control)}
94
+ <input
95
+ {...rest}
96
+ {...control}
97
+ bind:this={inputRef}
98
+ bind:value
99
+ class="kit-textfield__input"
100
+ {type}
101
+ size="1"
102
+ minlength={min}
103
+ maxlength={max}
104
+ />
105
+ {/snippet}
106
+ </Field>
253
107
 
254
108
  <style>
255
- button,
256
- input {
257
- font: inherit;
258
- color: inherit;
259
- }
260
-
261
- input {
109
+ .kit-textfield__input {
262
110
  appearance: none;
263
- background: transparent;
264
- border: 0;
265
- padding: 0;
111
+ flex: 1 1 auto;
112
+ width: 100%;
113
+ min-width: 0;
266
114
  margin: 0;
115
+ padding: 0;
116
+ border: 0;
267
117
  outline: none;
118
+ background: transparent;
268
119
  box-shadow: none;
120
+ color: inherit;
121
+ font: inherit;
269
122
  }
270
123
 
271
- button {
272
- appearance: none;
273
- background: none;
274
- border: 0;
275
- padding: 0;
276
- }
277
-
278
- .kit-textfield {
279
- display: grid;
280
- grid-template-columns: auto minmax(0, 1fr) auto;
281
- align-items: start;
282
- column-gap: var(--kit-textfield-gap);
283
- width: 100%;
284
- font-size: var(--kit-textfield-font);
285
- }
286
-
287
- .kit-textfield:not([data-with-message='true']) {
288
- grid-template-areas: 'prepend control append';
289
- grid-template-rows: auto;
290
- }
291
- .kit-textfield[data-with-message='true'] {
292
- grid-template-areas:
293
- 'prepend control append'
294
- '. message .';
295
- grid-template-rows: auto auto;
296
- }
297
-
298
- .kit-textfield[data-disabled='true'] {
299
- opacity: 0.55;
300
- pointer-events: none;
301
- }
302
-
303
- .kit-textfield[data-readonly='true'] input {
124
+ .kit-textfield__input[readonly] {
304
125
  cursor: default;
305
126
  }
306
127
 
307
- .kit-textfield[data-hide-spin-buttons='true'] input[type='number'] {
128
+ :global([data-hide-spin-buttons='true']) .kit-textfield__input[type='number'] {
308
129
  appearance: textfield;
309
130
  -moz-appearance: textfield;
310
131
  }
311
132
 
312
- .kit-textfield[data-hide-spin-buttons='true'] input[type='number']::-webkit-inner-spin-button,
313
- .kit-textfield[data-hide-spin-buttons='true'] input[type='number']::-webkit-outer-spin-button {
133
+ :global([data-hide-spin-buttons='true'])
134
+ .kit-textfield__input[type='number']::-webkit-inner-spin-button,
135
+ :global([data-hide-spin-buttons='true'])
136
+ .kit-textfield__input[type='number']::-webkit-outer-spin-button {
314
137
  appearance: none;
315
- -webkit-appearance: none;
316
138
  margin: 0;
317
139
  }
318
-
319
- /**
320
- * size
321
- * @link nothing...
322
- */
323
- .kit-textfield[data-size='xs'] {
324
- --kit-textfield-h: 24px;
325
- --kit-textfield-p: 8px;
326
- --kit-textfield-gap: var(--kit-space-compact);
327
- --kit-textfield-font: 13px;
328
- }
329
- .kit-textfield[data-size='xs'] :global(.kit-icon[data-size='default']) {
330
- --kit-icon-current-size: 0.875rem;
331
- }
332
- .kit-textfield[data-size='sm'] {
333
- --kit-textfield-h: 32px;
334
- --kit-textfield-p: 10px;
335
- --kit-textfield-gap: var(--kit-space-default);
336
- --kit-textfield-font: 14px;
337
- }
338
- .kit-textfield[data-size='sm'] :global(.kit-icon[data-size='default']) {
339
- --kit-icon-current-size: 1rem;
340
- }
341
-
342
- .kit-textfield[data-size='md'] {
343
- --kit-textfield-h: 40px;
344
- --kit-textfield-p: 12px;
345
- --kit-textfield-gap: var(--kit-space-default);
346
- --kit-textfield-font: 16px;
347
- }
348
- .kit-textfield[data-size='md'] :global(.kit-icon[data-size='default']) {
349
- --kit-icon-current-size: 1.125rem;
350
- }
351
-
352
- .kit-textfield[data-size='lg'] {
353
- --kit-textfield-h: 48px;
354
- --kit-textfield-p: 14px;
355
- --kit-textfield-gap: var(--kit-space-default);
356
- --kit-textfield-font: 16px;
357
- }
358
- .kit-textfield[data-size='lg'] :global(.kit-icon[data-size='default']) {
359
- --kit-icon-current-size: 1.25rem;
360
- }
361
-
362
- .kit-textfield[data-size='xl'] {
363
- --kit-textfield-h: 56px;
364
- --kit-textfield-p: 16px;
365
- --kit-textfield-gap: var(--kit-space-comfortable);
366
- --kit-textfield-font: 17px;
367
- }
368
- .kit-textfield[data-size='xl'] :global(.kit-icon[data-size='default']) {
369
- --kit-icon-current-size: 1.375rem;
370
- }
371
-
372
- /**
373
- * variant
374
- * @link no link
375
- */
376
- .kit-textfield[data-variant='filled'] {
377
- --kit-textfield-bg: var(--kit-color-surface-2);
378
- --kit-textfield-fg: var(--kit-color-text);
379
-
380
- --kit-textfield-hover-bg: color-mix(in oklab, var(---kit-textfield-bg), black 10%);
381
- --kit-textfield-active-bg: color-mix(in oklab, var(--kit-textfield-bg), black 16%);
382
- }
383
- .kit-textfield[data-variant='outline'] {
384
- --kit-textfield-bg: transparent;
385
- --kit-textfield-fg: var(--kit-color-text);
386
- --kit-textfield-bd: var(--kit-textfield-fg);
387
-
388
- --kit-textfield-hover-bg: color-mix(in oklab, var(--kit-textfield-fg), transparent 80%);
389
- --kit-textfield-active-bg: color-mix(in oklab, var(--kit-textfield-fg), transparent 92%);
390
- }
391
- .kit-textfield[data-variant='text'] {
392
- --kit-textfield-bg: transparent;
393
- --kit-textfield-fg: var(--kit-color-text);
394
- --kit-textfield-bd: var(--kit-textfield-fg);
395
-
396
- --kit-textfield-hover-bg: color-mix(in oklab, var(--kit-textfield-fg), transparent 80%);
397
- --kit-textfield-active-bg: color-mix(in oklab, var(--kit-textfield-fg), transparent 92%);
398
- }
399
-
400
- /**
401
- * density
402
- * @link ...
403
- */
404
- .kit-textfield[data-density='compact'] {
405
- --kit-textfield-density-offset: var(--kit-density-compact);
406
- }
407
- .kit-textfield[data-density='default'] {
408
- --kit-textfield-density-offset: var(--kit-density-default);
409
- }
410
- .kit-textfield[data-density='comfortable'] {
411
- --kit-textfield-density-offset: var(--kit-density-comfortable);
412
- }
413
-
414
- /**
415
- * rounded
416
- * @link ...
417
- */
418
- .kit-textfield[data-rounded='0'] {
419
- --kit-textfield-radius: var(--kit-shape-none);
420
- }
421
- .kit-textfield[data-rounded='xs'] {
422
- --kit-textfield-radius: var(--kit-shape-xs);
423
- }
424
- .kit-textfield[data-rounded='sm'] {
425
- --kit-textfield-radius: var(--kit-shape-sm);
426
- }
427
- .kit-textfield[data-rounded='md'] {
428
- --kit-textfield-radius: var(--kit-shape-md);
429
- }
430
- .kit-textfield[data-rounded='lg'] {
431
- --kit-textfield-radius: var(--kit-shape-lg);
432
- }
433
- .kit-textfield[data-rounded='xl'] {
434
- --kit-textfield-radius: var(--kit-shape-xl);
435
- }
436
-
437
- .kit-textfield__prepend,
438
- .kit-textfield__append {
439
- display: flex;
440
- align-items: center;
441
- height: 100%;
442
- }
443
-
444
- .kit-textfield__prepend {
445
- grid-area: prepend;
446
- }
447
-
448
- .kit-textfield__append {
449
- grid-area: append;
450
- }
451
-
452
- .kit-textfield__control {
453
- grid-area: control;
454
- display: flex;
455
- min-width: 0;
456
- }
457
-
458
- .kit-textfield__field {
459
- position: relative;
460
- display: flex;
461
- align-items: center;
462
- gap: var(--kit-textfield-gap);
463
- width: 100%;
464
- min-width: 0;
465
- min-height: calc(var(--kit-textfield-h) + var(--kit-textfield-density-offset) / 2);
466
- padding: 0 calc(var(--kit-textfield-p) + var(--kit-textfield-density-offset) / 2);
467
- border-radius: var(--kit-textfield-radius);
468
- background: var(--kit-textfield-bg);
469
- color: var(--kit-textfield-fg);
470
- font-size: var(--kit-textfield-font);
471
- }
472
-
473
- .kit-textfield__prepend-inner,
474
- .kit-textfield__append-inner {
475
- position: relative;
476
- z-index: 1;
477
- display: inline-flex;
478
- align-items: center;
479
- flex: 0 0 auto;
480
- }
481
-
482
- .kit-textfield__input-wrap {
483
- position: relative;
484
- z-index: 1;
485
- display: flex;
486
- align-items: center;
487
- gap: 6px;
488
- flex: 1 1 auto;
489
- min-width: 0;
490
- width: 100%;
491
- }
492
-
493
- .kit-textfield__input-wrap input {
494
- flex: 1 1 auto;
495
- width: 100%;
496
- min-width: 0;
497
- }
498
-
499
- .kit-textfield__prefix,
500
- .kit-textfield__suffix {
501
- display: inline-flex;
502
- align-items: center;
503
- white-space: nowrap;
504
- color: color-mix(in oklab, currentColor, transparent 20%);
505
- }
506
-
507
- .kit-textfield__clear {
508
- position: relative;
509
- z-index: 1;
510
- display: inline-flex;
511
- align-items: center;
512
- justify-content: center;
513
- flex: 0 0 auto;
514
- cursor: pointer;
515
- opacity: 0;
516
- pointer-events: none;
517
- }
518
-
519
- .kit-textfield__clear[data-visible='true'] {
520
- opacity: 1;
521
- pointer-events: auto;
522
- }
523
-
524
- .kit-textfield .outline,
525
- .kit-textfield .line {
526
- pointer-events: none;
527
- position: absolute;
528
- left: 0;
529
- right: 0;
530
- }
531
-
532
- .kit-textfield .outline {
533
- --outline-color: var(--kit-textfield-bd);
534
- top: 0;
535
- bottom: 0;
536
- }
537
-
538
- .kit-textfield .line {
539
- bottom: 0;
540
- height: 1px;
541
- background: var(--kit-textfield-bd);
542
- }
543
-
544
- .kit-textfield[data-error='true'] .outline {
545
- --outline-color: var(--kit-color-error);
546
- }
547
-
548
- .kit-textfield[data-error='true'] .line {
549
- --kit-textfield-bd: var(--kit-color-error);
550
- }
551
-
552
- .kit-textfield__message {
553
- grid-area: message;
554
- padding-inline: calc(var(--kit-textfield-p) + var(--kit-textfield-density-offset) / 2);
555
- font-size: 12px;
556
- opacity: 0;
557
- }
558
-
559
- .kit-textfield__message[data-visible='true'] {
560
- opacity: 1;
561
- }
562
-
563
- .kit-textfield__message-inner {
564
- display: grid;
565
- grid-template-columns: max-content minmax(0, 1fr) max-content;
566
- gap: var(--kit-textfield-gap);
567
- align-items: start;
568
- min-height: 14px;
569
- }
570
-
571
- .kit-textfield__message-inner[data-error='true'] {
572
- color: var(--kit-color-error);
573
- }
574
-
575
- .kit-textfield__message-prefix,
576
- .kit-textfield__message-suffix {
577
- line-height: 1.2;
578
- }
579
-
580
- .kit-textfield__message-suffix {
581
- align-items: end;
582
- text-align: end;
583
- }
584
-
585
- .kit-textfield__message-text {
586
- line-height: 1.2;
587
- word-break: break-word;
588
- }
589
140
  </style>