import type { Morfo } from '../types'; import { v } from '../types'; export const fieldMorfo = { name: 'Field', kebab: 'field', scope: ['soma'], parts: [ { name: 'Provider', kebab: 'provider', archetype: 'provider', kind: 'public', defaultElement: 'div', optional: false, states: ['idle', 'error', 'disabled', 'readonly', 'loading'], data: [ { attr: 'data-state', values: ['idle', 'error', 'disabled', 'readonly', 'loading'] }, { attr: 'data-disabled', severity: 'optional' }, { attr: 'data-readonly', severity: 'optional' }, { attr: 'data-required', severity: 'optional' }, { attr: 'data-invalid', severity: 'optional' }, { attr: 'data-dirty', severity: 'optional' }, { attr: 'data-touched', severity: 'optional' }, { attr: 'data-field-name', severity: 'optional' } ], aria: [] }, { name: 'Label', kebab: 'label', archetype: 'label', kind: 'public', defaultElement: 'label', optional: true, data: [ { attr: 'data-disabled', severity: 'optional' }, { attr: 'data-invalid', severity: 'optional' }, { attr: 'data-required', severity: 'optional' } ], aria: [ { attr: 'for', value: v.partRef('input'), condition: { when: 'part-present', part: 'input' }, severity: 'recommended' } ] }, { name: 'Control', kebab: 'control', kind: 'public', defaultElement: 'div', optional: true, states: ['idle', 'error', 'disabled', 'readonly', 'loading'], data: [ { attr: 'data-state', values: ['idle', 'error', 'disabled', 'readonly', 'loading'] }, { attr: 'data-disabled', severity: 'optional' }, { attr: 'data-invalid', severity: 'optional' } ], aria: [] }, { name: 'Input', kebab: 'input', archetype: 'input', kind: 'public', defaultElement: 'input', optional: true, states: ['idle', 'error', 'disabled', 'readonly', 'loading'], data: [{ attr: 'data-state', values: ['idle', 'error', 'disabled', 'readonly', 'loading'] }], aria: [ { attr: 'type', value: v.propRef('type') }, { attr: 'aria-labelledby', value: v.partRef('label'), condition: { when: 'part-present', part: 'label' }, severity: 'recommended' }, { attr: 'aria-invalid', value: v.propRef('invalid') }, { attr: 'aria-describedby', value: v.partRef('helper-text'), condition: { when: 'part-present', part: 'helper-text' }, severity: 'recommended' }, { attr: 'aria-busy', value: v.literal('true'), severity: 'optional', condition: { when: 'state-equals', state: 'loading', value: 'true' } }, { attr: 'aria-required', value: v.literal('true'), severity: 'optional', condition: { when: 'prop-truthy', prop: 'required' } } ] }, { name: 'HelperText', kebab: 'helper-text', archetype: 'description', kind: 'public', defaultElement: 'div', optional: true, data: [{ attr: 'data-disabled', severity: 'optional' }], aria: [] }, { name: 'ErrorText', kebab: 'error-text', archetype: 'description', kind: 'public', defaultElement: 'div', role: 'alert', optional: true, data: [], aria: [{ attr: 'aria-live', value: v.literal('polite') }] }, { name: 'Prefix', kebab: 'prefix', kind: 'public', defaultElement: 'div', optional: true, data: [], aria: [{ attr: 'aria-hidden', value: v.literal('true') }] }, { name: 'Suffix', kebab: 'suffix', kind: 'public', defaultElement: 'div', optional: true, data: [], aria: [{ attr: 'aria-hidden', value: v.literal('true') }] } ] } as const satisfies Morfo;