소스 정보
- 저장소
- aiFabricoCom/fabrico-collections-codex
- 최근 소스 활동
- 2026년 7월 14일 18:53
- 감지된 SKILL.md 언어
- 영어
- 스타
- 2
- 포크
- 0
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/aiFabricoCom/fabrico-collections-codex --skill fabrico-implementing-forms명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Audit AWS cost optimization and tagging compliance.
Audit GCP cost optimization and labeling compliance.
Process discovery materials into Jira-ready epics and user stories, or iterate on an existing backlog.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | fabrico-implementing-forms |
| description | Form architecture, schema validation, and multi-step flows. |
Provides patterns and workflows for building robust, accessible forms with schema-based validation, composable field components, and multi-step form flows.
Define validation rules as a separate schema, co-located with but decoupled from UI code. The schema is the single source of truth for what constitutes valid data. Infer TypeScript types from schemas to eliminate drift between validation rules and form types. Never duplicate type definitions manually — derive them from the schema. Show validation errors at the right moment: on field blur or form submission, not on every keystroke. Help users fix errors rather than frustrate them with premature feedback. After the first validation pass, switch to on-change validation so users see errors clear as they correct them. Every form field must have a visible label. Error messages must be announced to screen readers via `role="alert"` or `aria-live` regions. The form must be fully navigable by keyboard alone — Tab through fields, Enter to submit, Escape to cancel where applicable. Associate error messages with their fields using `aria-describedby`.Use the checklist below and track progress:
Progress:
- [ ] Step 1: Define the data model
- [ ] Step 2: Build field components
- [ ] Step 3: Compose the form
- [ ] Step 4: Handle multi-step flows (if applicable)
- [ ] Step 5: Verify accessibility
Step 1: Define the data model
*.schema.ts or validation/ directory). The schema declares every constraint: required fields, min/max lengths, patterns, custom rules, cross-field dependencies.Step 2: Build field components
Create composable field wrapper components that connect the form library's state to the component library's inputs. Each field wrapper:
<label>, the input element, and an error message container.aria-invalid="true" when the field has an error.aria-describedby pointing to the error message element's id.aria-required="true" for required fields.<input type="file"> visually and use a styled trigger button with aria-label. Display selected file name(s), size, and a remove action. Validate file type and size in the schema — reject invalid files before upload begins.Step 3: Compose the form
Assemble field components into a form:
novalidate attribute to the <form> element when using custom validation — this disables browser-native validation bubbles that conflict with the form library's error display. The schema-based validation from Step 1 replaces the browser's built-in constraints.<form> behavior — do not break it with preventDefault on the wrong element).Step 4: Handle multi-step flows (if applicable)
When a form spans multiple steps or pages:
Step 5: Verify accessibility
Use the fabrico-ensuring-accessibility skill for a thorough audit. At minimum, verify:
<input>, <select>, and <textarea> has an associated <label> element (via for/id pairing or wrapping).role="alert" or are in an aria-live="polite" region so screen readers announce them.aria-required).| Validation mode | When to use | Behavior |
|---|---|---|
| On submit | Simple forms, few fields | Validate all fields on submit, show all errors at once |
| On blur | Complex forms, many required fields | Validate each field when the user leaves it |
| On change (with debounce) | Real-time feedback needed (password strength, username availability) | Validate as user types, debounced to avoid excessive checks |
| Mixed | Best UX for most forms | Validate on blur initially; after the first error, switch to on-change so errors clear immediately when corrected |
| Pattern | Description |
|---|---|
| Inline below field | Error message directly under the invalid field — most common, recommended default |
| Summary at top | List of all errors at the top of the form — useful for long forms, aids screen readers |
| Inline + summary | Both inline and summary — best accessibility (screen reader reads summary, sighted users see inline) |
| Toast/notification | Only for server-side submission errors, never for field-level validation |
Form:
- [ ] Validation schema defined separately from UI
- [ ] TypeScript type inferred from schema (no manual duplication)
- [ ] Every field has a visible label
- [ ] Error messages shown inline below fields
- [ ] Errors announced to screen readers (role="alert" or aria-live)
- [ ] Submit button disabled during submission
- [ ] Server-side errors mapped to specific fields
- [ ] Tab order follows visual layout
- [ ] Form submittable via Enter key
- [ ] Loading state during async submission
| Anti-Pattern | Instead Do |
|---|---|
| Manual validation in event handlers | Use a schema-based validation library |
| Duplicating types between schema and form | Infer types from the schema |
| Showing errors on every keystroke | Use blur or mixed-mode validation |
| Unlabeled inputs (placeholder as label) | Always use visible <label> elements |
| Generic "Form has errors" message | Specific per-field error messages |
| Losing form data on back-navigation | Persist state across steps |
| Ignoring server-side errors | Map API errors to specific form fields |
| Submit button without loading state | Disable button + show spinner during submission |
fabrico-implementing-frontend — for component composition patterns and framework-specific references (form library integration, validation library choice)fabrico-ensuring-accessibility — for WCAG compliance in form fields, labels, and error announcementsfabrico-writing-hooks — for custom form-related hooks/composables (useFormField, useMultiStepForm)fabrico-reviewing-frontend — for form-specific review criteria during code review