1
- import { PadlockLockedFillIcon } from '@navikt/aksel-icons' ;
2
1
import cl from 'clsx/lite' ;
3
2
import type { FieldsetHTMLAttributes , ReactNode } from 'react' ;
4
3
import { forwardRef , useContext } from 'react' ;
5
4
6
5
import { ErrorMessage , Label , Paragraph } from '../../Typography' ;
7
- import type { FormFieldProps } from '../useFormField' ;
6
+ import { type FormFieldProps , useFormField } from '../useFormField' ;
8
7
9
8
import { FieldsetContext } from './FieldsetContext' ;
10
- import { useFieldset } from './useFieldset' ;
11
9
12
10
export type FieldsetProps = {
13
11
/** A description of the fieldset. This will appear below the legend. */
@@ -27,7 +25,7 @@ export type FieldsetProps = {
27
25
FieldsetHTMLAttributes < HTMLFieldSetElement > ;
28
26
29
27
export const Fieldset = forwardRef < HTMLFieldSetElement , FieldsetProps > (
30
- ( props , ref ) => {
28
+ function Fieldset ( props , ref ) {
31
29
const {
32
30
children,
33
31
legend,
@@ -38,71 +36,43 @@ export const Fieldset = forwardRef<HTMLFieldSetElement, FieldsetProps>(
38
36
...rest
39
37
} = props ;
40
38
41
- const { fieldsetProps, size, readOnly, errorId, hasError, descriptionId } =
42
- useFieldset ( props ) ;
43
-
44
39
const fieldset = useContext ( FieldsetContext ) ;
40
+ const { inputProps, size, readOnly, errorId, hasError, descriptionId } =
41
+ useFormField ( props , 'fieldset' ) ;
45
42
46
43
return (
47
44
< FieldsetContext . Provider
48
45
value = { {
46
+ disabled : props ?. disabled ,
49
47
error : error ?? fieldset ?. error ,
50
48
errorId : hasError ? errorId : undefined ,
51
- size,
52
- disabled : props ?. disabled ,
53
49
readOnly,
50
+ size,
54
51
} }
55
52
>
56
53
< fieldset
57
- { ...fieldsetProps }
58
- className = { cl (
59
- 'ds-fieldset' ,
60
- ! hideLegend && 'ds-fieldset--spacing' ,
61
- readOnly && 'ds-fieldset--readonly' ,
62
- className ,
63
- ) }
54
+ aria-describedby = { inputProps [ 'aria-describedby' ] }
55
+ aria-invalid = { inputProps [ 'aria-invalid' ] }
56
+ className = { cl ( 'ds-fieldset' , className ) }
57
+ data-hidelegend = { hideLegend || undefined }
58
+ data-readonly = { readOnly || undefined }
64
59
disabled = { props ?. disabled }
65
60
ref = { ref }
66
61
{ ...rest }
67
62
>
68
63
< Label asChild size = { size } >
69
- < legend className = { 'ds-fieldset__legend' } >
70
- < span
71
- className = { cl (
72
- 'ds-fieldset__legend__content' ,
73
- hideLegend && `ds-sr-only` ,
74
- ) }
75
- >
76
- { readOnly && (
77
- < PadlockLockedFillIcon
78
- className = { 'ds-fieldset__readonly__icon' }
79
- aria-hidden
80
- />
81
- ) }
82
- { legend }
83
- </ span >
84
- </ legend >
64
+ < legend > { legend } </ legend >
85
65
</ Label >
86
- { description && (
87
- < Paragraph size = { size } variant = 'short' asChild >
88
- < div
89
- id = { descriptionId }
90
- className = { cl (
91
- 'ds-fieldset__description' ,
92
- 'ds-font-weight--regular' ,
93
- hideLegend && `ds-sr-only` ,
94
- ) }
95
- >
96
- { description }
97
- </ div >
66
+ { ! ! description && (
67
+ < Paragraph id = { descriptionId } size = { size } variant = 'short' >
68
+ { description }
98
69
</ Paragraph >
99
70
) }
100
71
{ children }
101
72
< div
102
- id = { errorId }
103
73
aria-live = 'polite'
104
74
aria-relevant = 'additions removals'
105
- className = { 'ds-fieldset__error-message' }
75
+ id = { errorId }
106
76
>
107
77
{ hasError && < ErrorMessage size = { size } > { error } </ ErrorMessage > }
108
78
</ div >
@@ -111,5 +81,3 @@ export const Fieldset = forwardRef<HTMLFieldSetElement, FieldsetProps>(
111
81
) ;
112
82
} ,
113
83
) ;
114
-
115
- Fieldset . displayName = 'Fieldset' ;
0 commit comments