| 4 | const isHexColor = value => typeof value === 'string' && /^#?[0-9a-fA-F]{3,8}$/.test(value); |
| 5 | |
| 6 | const createParser = defaultValue => { |
| 7 | if (typeof defaultValue === 'number') { |
| 8 | return { |
| 9 | parse: v => (v === null || v === '' ? null : Number(v)), |
| 10 | serialize: v => String(v), |
| 11 | eq: (a, b) => a === b |
| 12 | }; |
| 13 | } |
| 14 | if (typeof defaultValue === 'boolean') { |
| 15 | return { |
| 16 | parse: v => (v === null || v === '' ? null : v === 'true'), |
| 17 | serialize: v => String(v), |
| 18 | eq: (a, b) => a === b |
| 19 | }; |
| 20 | } |
| 21 | if (isHexColor(defaultValue)) { |
| 22 | return { |
| 23 | parse: v => (v === null || v === '' ? null : `#${v}`), |
| 24 | serialize: v => v.replace(/^#/, ''), |
| 25 | eq: (a, b) => a === b |
| 26 | }; |
| 27 | } |
| 28 | return { |
| 29 | parse: v => (v === null || v === '' ? null : v), |
| 30 | serialize: v => String(v), |
| 31 | eq: (a, b) => a === b |
| 32 | }; |
| 33 | }; |
| 34 | |
| 35 | export function useComponentProps(defaultProps) { |
| 36 | const defaultPropsRef = useRef(defaultProps); |
no test coverage detected