import type { Morfo } from '../types'; import { v } from '../types'; export const fileUploadMorfo = { name: 'FileUpload', kebab: 'file-upload', scope: ['soma'], parts: [ { name: 'Provider', kebab: 'provider', kind: 'public', defaultElement: 'div', optional: false, data: [ { attr: 'data-disabled', severity: 'optional' }, { attr: 'data-invalid', severity: 'optional' }, { attr: 'data-required', severity: 'optional' }, { attr: 'data-empty', severity: 'optional' } ], aria: [] }, { name: 'Label', kebab: 'label', kind: 'public', defaultElement: 'label', optional: true, data: [{ attr: 'data-disabled', severity: 'optional' }], aria: [] }, { name: 'Dropzone', kebab: 'dropzone', kind: 'public', defaultElement: 'div', role: 'button', optional: true, data: [ { attr: 'data-disabled', severity: 'optional' }, { attr: 'data-dragging', severity: 'optional' } ], aria: [ { attr: 'aria-label', value: v.translationRef('#?components.file-upload.dropzone|Upload files'), severity: 'recommended' }, { attr: 'aria-disabled', value: v.propRef('disabled'), severity: 'optional' } ], keyboard: [ { key: 'Enter', action: 'open-file-picker' }, { key: ' ', action: 'open-file-picker' } ] }, { name: 'Trigger', kebab: 'trigger', kind: 'public', defaultElement: 'button', role: 'button', optional: true, data: [{ attr: 'data-disabled', severity: 'optional' }], aria: [ { attr: 'type', value: v.literal('button') }, { attr: 'aria-label', value: v.translationRef('#?components.file-upload.trigger|Select files'), severity: 'recommended' }, { attr: 'aria-disabled', value: v.propRef('disabled'), severity: 'optional' } ] }, { name: 'HiddenInput', kebab: 'hidden-input', kind: 'public', defaultElement: 'input', optional: true, data: [], aria: [{ attr: 'aria-hidden', value: v.literal('true') }] }, { name: 'FileList', kebab: 'file-list', kind: 'public', defaultElement: 'ul', role: 'list', optional: true, data: [], aria: [ { attr: 'aria-label', value: v.translationRef('#?components.file-upload.list|Selected files'), severity: 'recommended' } ] }, { name: 'Item', kebab: 'item', kind: 'public', defaultElement: 'li', role: 'listitem', optional: true, data: [], aria: [] }, { name: 'ItemName', kebab: 'item-name', kind: 'public', defaultElement: 'span', optional: true, data: [], aria: [] }, { name: 'ItemSize', kebab: 'item-size', kind: 'public', defaultElement: 'span', optional: true, data: [], aria: [] }, { name: 'ItemPreview', kebab: 'item-preview', kind: 'public', defaultElement: 'div', optional: true, data: [{ attr: 'data-type' }], aria: [{ attr: 'aria-label', value: v.propRef('fileName'), severity: 'recommended' }] }, { name: 'ItemRemove', kebab: 'item-remove', kind: 'public', defaultElement: 'button', role: 'button', optional: true, data: [{ attr: 'data-disabled', severity: 'optional' }], aria: [ { attr: 'type', value: v.literal('button') }, { attr: 'aria-label', value: v.translationRef('#?components.file-upload.remove|Remove file'), severity: 'recommended' } ] }, { name: 'ItemProgress', kebab: 'item-progress', kind: 'public', defaultElement: 'div', role: 'progressbar', optional: true, data: [], aria: [ { attr: 'aria-valuenow', value: v.propRef('percent') }, { attr: 'aria-valuemin', value: v.literal('0') }, { attr: 'aria-valuemax', value: v.literal('100') }, { attr: 'aria-label', value: v.propRef('fileName'), severity: 'recommended' } ] }, { name: 'ClearTrigger', kebab: 'clear-trigger', kind: 'public', defaultElement: 'button', role: 'button', optional: true, data: [{ attr: 'data-disabled', severity: 'optional' }], aria: [ { attr: 'type', value: v.literal('button') }, { attr: 'aria-label', value: v.translationRef('#?components.file-upload.clear|Clear all'), severity: 'recommended' } ] } ] } as const satisfies Morfo;