{"_id":"@alekstar79/vue3-form-generator","_rev":"5-4bf3f8c88da8abe0faec95ebd254cd66","name":"@alekstar79/vue3-form-generator","dist-tags":{"latest":"1.1.3"},"versions":{"1.0.0":{"name":"@alekstar79/vue3-form-generator","version":"1.0.0","keywords":["vue3","form","generator","typescript","validation","vue-forms","pinia"],"author":{"name":"Aleksey Tarasenko","email":"alekstar79@yandex.ru"},"license":"MIT","_id":"@alekstar79/vue3-form-generator@1.0.0","maintainers":[{"name":"alekstar79","email":"alekstar79@yandex.ru"}],"homepage":"https://github.com/alekstar79/vue3-form-generator#readme","bugs":{"url":"https://github.com/alekstar79/vue3-form-generator/issues"},"dist":{"shasum":"8ec669173c3149fade54736df55ffa470d2b50dc","tarball":"https://registry.npmjs.org/@alekstar79/vue3-form-generator/-/vue3-form-generator-1.0.0.tgz","fileCount":54,"integrity":"sha512-bGzh9icOexGA8kccDZZoiA1K60rLyrP601fhWiS9kUuvwiCyPe65gJ7+4muJAAV9GzTz0Tof8TNy2CESz4TT+w==","signatures":[{"sig":"MEUCIHNaW8mQLndepkY5MU4J4wBlIywignU3Meqfj+tuEJOXAiEAvWockHWi64ny69DS4b8a7HCzc2i3wRfq487S7yTRwug=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1253194},"main":"./lib/index.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/index.es.js","engines":{"node":">=20.19.0"},"exports":{".":{"import":"./lib/index.es.js","require":"./lib/index.umd.js"},"./dist/style.css":"./lib/style.css"},"gitHead":"e7baf53657939d6abb4d0015e26d63163fb51068","private":false,"scripts":{"dev":"vite","test":"vitest","build":"npm run build:demo && npm run build:lib","preview":"vite preview","test:ui":"vitest --ui","test:run":"vitest run","build:lib":"vite build -c vite.lib.config.ts","build:demo":"vite build","test:watch":"vitest --watch","type-check":"vue-tsc --noEmit","build:github":"vite build -c vite.github.config.ts","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build:lib"},"_npmUser":{"name":"alekstar79","email":"alekstar79@yandex.ru"},"repository":{"url":"git+https://github.com/alekstar79/vue3-form-generator.git","type":"git"},"_npmVersion":"10.9.4","description":"Генератор форм для Vue 3 с поддержкой TypeScript, валидации и кастомизации","directories":{},"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.26","sass":"^1.97.1","vite":"^4.4.9","jsdom":"^27.3.0","pinia":"^2.1.6","eslint":"^8.45.0","terser":"^5.44.1","vitest":"^4.0.16","vue-tsc":"^1.8.8","@vitest/ui":"^0.34.6","typescript":"^5.9.3","vue-router":"^4.2.4","@types/node":"^25.0.3","sass-embedded":"^1.97.1","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","@vitejs/plugin-vue":"^4.3.4","vite-plugin-externals":"^0.6.2","@vitest/coverage-istanbul":"4.0.16"},"peerDependencies":{"vue":"^3.5.26","pinia":"^2.1.6","vue-router":"^4.2.4"},"_npmOperationalInternal":{"tmp":"tmp/vue3-form-generator_1.0.0_1766850973984_0.6099254096150457","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@alekstar79/vue3-form-generator","version":"1.1.0","keywords":["vue3","form","generator","typescript","validation","vue-forms","pinia"],"author":{"name":"Aleksey Tarasenko","email":"alekstar79@yandex.ru"},"license":"MIT","_id":"@alekstar79/vue3-form-generator@1.1.0","maintainers":[{"name":"alekstar79","email":"alekstar79@yandex.ru"}],"homepage":"https://github.com/alekstar79/vue3-form-generator#readme","bugs":{"url":"https://github.com/alekstar79/vue3-form-generator/issues"},"dist":{"shasum":"14d138110b514be2e1446fb666b7988d5eff1b7e","tarball":"https://registry.npmjs.org/@alekstar79/vue3-form-generator/-/vue3-form-generator-1.1.0.tgz","fileCount":44,"integrity":"sha512-x3h7/iAO3dpoObeGMlUOuMIK9wOZu8mtyLuufRJHEX+zj+r36w2JbIi9UIpn385kusKIxHNCrbY4d2/WLiLHSw==","signatures":[{"sig":"MEUCIE2YrwW3ISPz54rcOlpCmQdFgt2ikdHxVZKyCpfSFqIDAiEA5rpmZ8y5XBNn6EJq7nRli/Kc4gdYd0t8QGqU1dBZBe8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":169834},"main":"./lib/index.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/index.es.js","engines":{"node":">=20.19.0"},"exports":{".":{"import":"./lib/index.es.js","require":"./lib/index.umd.js"},"./dist/style.css":"./lib/style.css"},"gitHead":"e7baf53657939d6abb4d0015e26d63163fb51068","private":false,"scripts":{"dev":"vite","test":"vitest","build":"npm run build:demo && npm run build:lib","preview":"vite preview","test:ui":"vitest --ui","test:run":"vitest run","build:lib":"vite build -c vite.lib.config.ts","build:demo":"vite build","test:watch":"vitest --watch","type-check":"vue-tsc --noEmit","build:github":"vite build -c vite.github.config.ts","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build:lib"},"_npmUser":{"name":"alekstar79","email":"alekstar79@yandex.ru"},"repository":{"url":"git+https://github.com/alekstar79/vue3-form-generator.git","type":"git"},"_npmVersion":"10.9.4","description":"Генератор форм для Vue 3 с поддержкой TypeScript, валидации и кастомизации","directories":{},"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.26","sass":"^1.97.1","vite":"^4.4.9","jsdom":"^27.3.0","pinia":"^2.1.6","eslint":"^8.45.0","terser":"^5.44.1","vitest":"^4.0.16","vue-tsc":"^1.8.8","@vitest/ui":"^0.34.6","typescript":"^5.9.3","vue-router":"^4.2.4","@types/node":"^25.0.3","sass-embedded":"^1.97.1","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","@vitejs/plugin-vue":"^4.3.4","vite-plugin-externals":"^0.6.2","@vitest/coverage-istanbul":"4.0.16"},"peerDependencies":{"vue":"^3.5.26","pinia":"^2.1.6","vue-router":"^4.2.4"},"_npmOperationalInternal":{"tmp":"tmp/vue3-form-generator_1.1.0_1766859919176_0.5752377710709744","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@alekstar79/vue3-form-generator","version":"1.1.1","keywords":["vue3","form","generator","typescript","validation","vue-forms","pinia"],"author":{"name":"Aleksey Tarasenko","email":"alekstar79@yandex.ru"},"license":"MIT","_id":"@alekstar79/vue3-form-generator@1.1.1","maintainers":[{"name":"alekstar79","email":"alekstar79@yandex.ru"}],"homepage":"https://github.com/alekstar79/vue3-form-generator#readme","bugs":{"url":"https://github.com/alekstar79/vue3-form-generator/issues"},"dist":{"shasum":"bf03b1a93ccefb2c00d0b800d1fa42541804f8ad","tarball":"https://registry.npmjs.org/@alekstar79/vue3-form-generator/-/vue3-form-generator-1.1.1.tgz","fileCount":25,"integrity":"sha512-538BFPYtoXt6WQKcbIvOK8GL0iHm9Gt/M3WqTQ5UgJHW7tUWVHJHNLg5J02qxBxFZRHtBOfX1e6yvSCWowtoJg==","signatures":[{"sig":"MEQCICaskITdGVu94L6rrqs678rEQ37v0rEiiD4JqekqcNRhAiBYX7Lhm5GBUTSDIAakvpWb0MGzM1933HHYJ9VBcvGUtg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115538},"main":"./lib/index.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/index.es.js","engines":{"node":">=20.19.0"},"exports":{".":{"import":"./lib/index.es.js","require":"./lib/index.umd.js"},"./dist/style.css":"./lib/style.css"},"gitHead":"d93fb633269d9edd0365c6b0da75b2d1db4dc642","private":false,"scripts":{"dev":"vite","test":"vitest","build":"npm run build:demo && npm run build:lib","preview":"vite preview","test:ui":"vitest --ui","test:run":"vitest run","build:lib":"vite build -c vite.lib.config.ts","build:demo":"vite build","test:watch":"vitest --watch","type-check":"vue-tsc --noEmit","build:github":"vite build -c vite.github.config.ts","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build:lib"},"_npmUser":{"name":"alekstar79","email":"alekstar79@yandex.ru"},"repository":{"url":"git+https://github.com/alekstar79/vue3-form-generator.git","type":"git"},"_npmVersion":"10.9.4","description":"Генератор форм для Vue 3 с поддержкой TypeScript, валидации и кастомизации","directories":{},"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.26","sass":"^1.97.1","vite":"^4.4.9","jsdom":"^27.3.0","pinia":"^2.1.6","eslint":"^8.45.0","terser":"^5.44.1","vitest":"^4.0.16","vue-tsc":"^1.8.8","@vitest/ui":"^0.34.6","typescript":"^5.9.3","vue-router":"^4.2.4","@types/node":"^25.0.3","sass-embedded":"^1.97.1","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","@vitejs/plugin-vue":"^4.3.4","vite-plugin-externals":"^0.6.2","@vitest/coverage-istanbul":"4.0.16"},"peerDependencies":{"vue":"^3.5.26","pinia":"^2.1.6","vue-router":"^4.2.4"},"_npmOperationalInternal":{"tmp":"tmp/vue3-form-generator_1.1.1_1766860519253_0.9192320450874503","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@alekstar79/vue3-form-generator","version":"1.1.2","keywords":["vue3","form","generator","typescript","validation","vue-forms","pinia"],"author":{"name":"Aleksey Tarasenko","email":"alekstar79@yandex.ru"},"license":"MIT","_id":"@alekstar79/vue3-form-generator@1.1.2","maintainers":[{"name":"alekstar79","email":"alekstar79@yandex.ru"}],"homepage":"https://github.com/alekstar79/vue3-form-generator#readme","bugs":{"url":"https://github.com/alekstar79/vue3-form-generator/issues"},"dist":{"shasum":"205f6bf636b36a3f6de6ea129dc2daff17cd6954","tarball":"https://registry.npmjs.org/@alekstar79/vue3-form-generator/-/vue3-form-generator-1.1.2.tgz","fileCount":25,"integrity":"sha512-IttmIlreqDCyzzBSRycJTXyCbugOjrWI5BFkFGVGnoiNUiPmErZxTjYdq1IkvaXF2lAmn0eGsmpy1ENE0aTh3g==","signatures":[{"sig":"MEUCIFI+ohegBfXzXueB52ydXyThmu8vNOwx28m9N1Ueqn1jAiEAraQFIHM9xNdC1Kjs3xVU9Xburr7dNZ98QJ3rG3CBUJQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115510},"main":"./lib/index.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/index.es.js","engines":{"node":">=20.19.0"},"exports":{".":{"import":"./lib/index.es.js","require":"./lib/index.umd.js"},"./dist/style.css":"./lib/style.css"},"gitHead":"71145fbf3c43cef0aef9a0d582ff24eb93f65d87","private":false,"scripts":{"dev":"vite","test":"vitest","build":"npm run build:demo && npm run build:lib","preview":"vite preview","test:ui":"vitest --ui","test:run":"vitest run","build:lib":"vite build -c vite.lib.config.ts","build:demo":"vite build","test:watch":"vitest --watch","type-check":"vue-tsc --noEmit","build:github":"vite build -c vite.github.config.ts","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build:lib"},"_npmUser":{"name":"alekstar79","email":"alekstar79@yandex.ru"},"repository":{"url":"git+https://github.com/alekstar79/vue3-form-generator.git","type":"git"},"_npmVersion":"10.9.4","description":"Генератор форм для Vue 3 с поддержкой TypeScript, валидации и кастомизации","directories":{},"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.26","sass":"^1.97.1","vite":"^4.4.9","jsdom":"^27.3.0","pinia":"^2.1.6","eslint":"^8.45.0","terser":"^5.44.1","vitest":"^4.0.16","vue-tsc":"^1.8.8","@vitest/ui":"^0.34.6","typescript":"^5.9.3","vue-router":"^4.2.4","@types/node":"^25.0.3","sass-embedded":"^1.97.1","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","@vitejs/plugin-vue":"^4.3.4","vite-plugin-externals":"^0.6.2","@vitest/coverage-istanbul":"4.0.16"},"peerDependencies":{"vue":"^3.5.26","pinia":"^2.1.6"},"_npmOperationalInternal":{"tmp":"tmp/vue3-form-generator_1.1.2_1766861536731_0.4318047868481174","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@alekstar79/vue3-form-generator","version":"1.1.3","type":"module","private":false,"description":"Генератор форм для Vue 3 с поддержкой TypeScript, валидации и кастомизации","author":{"name":"Aleksey Tarasenko","email":"alekstar79@yandex.ru"},"license":"MIT","keywords":["vue3","form","generator","typescript","validation","vue-forms","pinia"],"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/alekstar79/vue3-form-generator.git"},"homepage":"https://github.com/alekstar79/vue3-form-generator#readme","bugs":{"url":"https://github.com/alekstar79/vue3-form-generator/issues"},"main":"./lib/index.umd.cjs","module":"./lib/index.es.js","types":"./lib/index.d.ts","exports":{".":{"import":"./lib/index.es.js","require":"./lib/index.umd.cjs"},"./dist/style.css":"./lib/style.css"},"scripts":{"dev":"vite","build":"npm run build:demo && npm run build:lib","build:github":"vite build -c vite.github.config.ts","build:lib":"vite build -c vite.lib.config.ts","build:demo":"vite build","preview":"vite preview","test":"vitest","test:ui":"vitest --ui","test:run":"vitest run","test:watch":"vitest --watch","test:coverage":"vitest run --coverage","type-check":"vue-tsc --noEmit","prepublishOnly":"npm run build:lib"},"peerDependencies":{"pinia":"^2.1.6","vue":"^3.5.26"},"devDependencies":{"@types/node":"^25.0.3","@vitejs/plugin-vue":"^4.3.4","@vitest/coverage-istanbul":"4.0.16","@vitest/ui":"^0.34.6","@vue/test-utils":"^2.4.6","eslint":"^8.45.0","jsdom":"^27.3.0","pinia":"^2.1.6","sass":"^1.97.1","sass-embedded":"^1.97.1","terser":"^5.44.1","typescript":"^5.9.3","vite":"^4.4.9","vite-plugin-dts":"^4.5.4","vite-plugin-externals":"^0.6.2","vitest":"^4.0.16","vue":"^3.5.26","vue-router":"^4.2.4","vue-tsc":"^1.8.8"},"engines":{"node":">=20.19.0"},"_id":"@alekstar79/vue3-form-generator@1.1.3","gitHead":"71145fbf3c43cef0aef9a0d582ff24eb93f65d87","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-WapUnPI9OGA2J4+dlH2CXM9EcGmJWcUlEKEeilYbklOnTe9bhjxTY9p0I5KJeVMyweJSXrfPdgkfotj/b+bq2Q==","shasum":"9e654780b46bd31d463a3e722ce549f219a16e24","tarball":"https://registry.npmjs.org/@alekstar79/vue3-form-generator/-/vue3-form-generator-1.1.3.tgz","fileCount":35,"unpackedSize":162354,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEIluJX8PfciGuVkWPZqU7B5wog0oddcFpW8dYxZ/QjcAiA+ZAPFz1Y79ANOyzU4brdai9r8TZKebs9io0urcvMNiQ=="}]},"_npmUser":{"name":"alekstar79","email":"alekstar79@yandex.ru"},"directories":{},"maintainers":[{"name":"alekstar79","email":"alekstar79@yandex.ru"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vue3-form-generator_1.1.3_1766862483606_0.5360063644907251"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-27T15:56:13.871Z","modified":"2025-12-27T19:08:03.991Z","1.0.0":"2025-12-27T15:56:14.166Z","1.1.0":"2025-12-27T18:25:19.317Z","1.1.1":"2025-12-27T18:35:19.447Z","1.1.2":"2025-12-27T18:52:16.892Z","1.1.3":"2025-12-27T19:08:03.772Z"},"bugs":{"url":"https://github.com/alekstar79/vue3-form-generator/issues"},"author":{"name":"Aleksey Tarasenko","email":"alekstar79@yandex.ru"},"license":"MIT","homepage":"https://github.com/alekstar79/vue3-form-generator#readme","keywords":["vue3","form","generator","typescript","validation","vue-forms","pinia"],"repository":{"type":"git","url":"git+https://github.com/alekstar79/vue3-form-generator.git"},"description":"Генератор форм для Vue 3 с поддержкой TypeScript, валидации и кастомизации","maintainers":[{"name":"alekstar79","email":"alekstar79@yandex.ru"}],"readme":"# Vue3 Form Generator\n\n[![Vue](https://img.shields.io/badge/Vue-3.4+-green.svg)]()\n[![NPM](https://img.shields.io/npm/v/@alekstar79/vue3-form-generator.svg)](https://www.npmjs.com/package/@alekstar79/vue3-form-generator)\n[![GitHub repo](https://img.shields.io/badge/github-repo-green.svg?style=flat)](https://github.com/alekstar79/vue3-form-generator)\n[![Typescript](https://img.shields.io/badge/TypeScript-Ready-blue?logo=typescript)]()\n[![License](https://img.shields.io/badge/License-MIT-green)]()\n[![Version](https://img.shields.io/badge/Version-3.0.0-orange)]()\n[![Coverage](https://img.shields.io/badge/Coverage-79.6%25-green)]()\n\nГибкий генератор форм для Vue 3 с поддержкой TypeScript, валидацией, состоянием и кастомизацией.\n\n![review](banner.svg)\n\n## 🎮 Demo\n\n- Ознакомьтесь с демонстрацией: [Vue3 Form Generator](https://alekstar79.github.io/vue3-form-generator)\n\nThe demo showcases real-time calendar interactions with locale switching, date selection, and event logging.\n\n<!-- TOC -->\n* [Vue3 Form Generator](#vue3-form-generator)\n  * [🎮 Demo](#-demo)\n  * [🎯 Особенности](#-особенности)\n  * [📦 Установка](#-установка)\n  * [🚀 Быстрый старт](#-быстрый-старт)\n    * [Базовое использование](#базовое-использование)\n  * [📚 Документация](#-документация)\n    * [FormConfig](#formconfig)\n    * [FormField](#formfield)\n    * [Слоты (Slots)](#слоты-slots)\n    * [Управление состоянием через Store](#управление-состоянием-через-store)\n  * [🏗️ Архитектура](#-архитектура)\n  * [🧪 Тестирование](#-тестирование)\n  * [🎨 Кастомизация стилей](#-кастомизация-стилей)\n  * [📱 Responsive дизайн](#-responsive-дизайн)\n  * [♿ Доступность](#-доступность)\n  * [🔒 Безопасность](#-безопасность)\n  * [📈 Производительность](#-производительность)\n  * [📄 Лицензия](#-лицензия)\n<!-- TOC -->\n\n## 🎯 Особенности\n\n✅ **Множество типов полей** - input, select, checkbox, textarea с полной поддержкой атрибутов  \n✅ **Встроенная валидация** - required, minLength, maxLength, pattern с кастомными сообщениями  \n✅ **Управление состоянием** - Pinia store для синхронизации нескольких форм  \n✅ **Кастомизация через слоты** - переопределяйте любую часть формы  \n✅ **TypeScript** - полная типизация для надежности  \n✅ **Производительность** - code splitting, lazy loading, оптимизированный рендеринг  \n✅ **Доступность** - правильная семантика HTML, ARIA атрибуты  \n✅ **Тестирование** - unit тесты с Vitest  \n✅ **Мобильная оптимизация** - responsive дизайн, touch-friendly интерфейс  \n\n## 📦 Установка\n\n```bash\n# Клонирование репозитория\ngit clone vue3-form-generator\ncd vue3-form-generator\n\n# Установка зависимостей\nyarn install\n\n# Запуск dev сервера\nyarn run dev\n\n# Сборка для продакшена\nyarn run build\n\n# Запуск тестов\nyarn test\n```\n\n## 🚀 Быстрый старт\n\n### Базовое использование\n\n```vue\n<template>\n  <FormGenerator\n    :config=\"formConfig\"\n    :model-value=\"formValues\"\n    @update:model-value=\"formValues = $event\"\n    @submit=\"handleSubmit\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport FormGenerator from '@/components/FormGenerator.vue'\nimport type { FormConfig, FormValues } from '@/types'\n\nconst formConfig: FormConfig = {\n  id: 'contact-form',\n  title: 'Контактная форма',\n  fields: [\n    {\n      id: 'name',\n      type: 'input',\n      label: 'Имя',\n      required: true,\n      minLength: 2\n    },\n    {\n      id: 'email',\n      type: 'input',\n      label: 'Email',\n      required: true,\n      pattern: '^[^\\\\s@]+@[^\\\\s@]+\\\\.[^\\\\s@]+$',\n      attributes: { type: 'email' }\n    },\n    {\n      id: 'message',\n      type: 'textarea',\n      label: 'Сообщение',\n      required: true\n    }\n  ]\n}\n\nconst formValues = ref<FormValues>({})\n\nconst handleSubmit = (values: FormValues) => {\n  console.log('Форма отправлена:', values)\n}\n</script>\n```\n\n## 📚 Документация\n\n### FormConfig\n\nОсновная конфигурация формы:\n\n```typescript\ninterface FormConfig {\n  id: string;                  // Уникальный ID формы\n  title?: string;              // Заголовок формы\n  description?: string;        // Описание формы\n  fields: FormField[];         // Массив полей\n  submitLabel?: string;        // Текст кнопки отправки\n  cancelLabel?: string;        // Текст кнопки отмены\n  containerClass?: string;     // CSS класс контейнера\n}\n```\n\n### FormField\n\nКонфигурация отдельного поля:\n\n```typescript\ninterface FormField {\n  id: string;                  // Уникальный ID поля\n  type: 'input' | 'select' | 'checkbox' | 'textarea';\n  label: string;               // Отображаемый label\n  required?: boolean;          // Обязательность заполнения\n  pattern?: string;            // Regex паттерн для валидации\n  errorMessage?: string;       // Кастомное сообщение об ошибке\n  options?: SelectOption[];    // Опции для select\n  placeholder?: string;        // Плейсхолдер\n  disabled?: boolean;          // Отключение поля\n  hint?: string;               // Подсказка для пользователя\n  minLength?: number;          // Минимальная длина\n  maxLength?: number;          // Максимальная длина\n  className?: string;          // CSS классы\n  attributes?: Record<string, any>; // Дополнительные атрибуты\n}\n```\n\n### Слоты (Slots)\n\nКомпонент поддерживает именованные слоты для полной кастомизации:\n\n```vue\n<FormGenerator :config=\"config\">\n  <!-- Кастомный header -->\n  <template #header=\"{ config }\">\n    <custom-header :title=\"config.title\" />\n  </template>\n\n  <!-- Кастомное поле -->\n  <template #field-email-label=\"{ label }\">\n    <span class=\"custom-label\">{{ label }} 📧</span>\n  </template>\n\n  <!-- Кастомная ошибка -->\n  <template #field-email-error=\"{ error }\">\n    <div class=\"custom-error\">⚠️ {{ error }}</div>\n  </template>\n\n  <!-- Кастомные действия -->\n  <template #actions=\"{ submit, cancel }\">\n    <button @click=\"submit\">Отправить</button>\n    <button @click=\"cancel\">Отмена</button>\n  </template>\n</FormGenerator>\n```\n\n### Управление состоянием через Store\n\n```typescript\nimport { useFormStore } from '@/stores/useFormStore'\n\nconst formStore = useFormStore()\n\n// Инициализация формы\nformStore.initializeForm(config, initialValues)\n\n// Получение значений\nconst values = formStore.getFormValues(formId)\n\n// Обновление значения\nformStore.setFieldValue(formId, fieldId, newValue)\n\n// Валидация\nconst isValid = formStore.validateFormByConfig(formId)\n\n// Отправка\nformStore.submitForm(formId)\n\n// История отправок\nconsole.log(formStore.submissionHistory)\n```\n\n## 🏗️ Архитектура\n\n```text\nsrc/\n├──  __tests__/                    # Unit тесты\n├── components/\n│   ├── FormGenerator.vue          # Основной компонент\n│   └── FormField.vue              # Компонент поля\n├── store/\n│   └── useFormStore.ts            # Pinia store\n├── types/\n│   └── form.types.ts              # TypeScript типы\n├── utils/\n│   └── formValidation.ts          # Утилиты валидации\n├── style/\n│   ├── main.scss                  # Глобальные стили\n│   ├── variables.scss             # CSS переменные\n│   └── mixins.scss                # SCSS миксины\n└── views/\n    ├── HomeView.vue               # Главная страница\n    ├── BasicFormDemo.vue          # Пример базовой формы\n    ├── ComplexFormDemo.vue        # Пример сложной формы\n    └── SlotCustomizationDemo.vue  # Пример с слотами\n```\n\n## 🧪 Тестирование\n\n```bash\n# Запуск всех тестов\nyarn test\n\n# Запуск с UI\nyarn run test:ui\n\n# Генерация отчета о покрытии\nyarn run test:coverage\n```\n\n## 🎨 Кастомизация стилей\n\nВсе цвета и размеры определены в `src/style/variables.scss`:\n\n```scss\n$color-primary: #0052cc;\n$color-error: #dc3545;\n$font-size-base: 1rem;\n$spacing-md: 1rem;\n```\n\n## 📱 Responsive дизайн\n\nКомпонент полностью оптимизирован для мобильных устройств:\n- Адаптивные макеты\n- Touch-friendly кнопки и элементы\n- Оптимальные размеры шрифтов для мобильных\n- Предотвращение zoom на iOS при фокусе на input\n\n## ♿ Доступность\n\n- Семантический HTML (labels, form, fieldset)\n- ARIA атрибуты для скринридеров\n- Правильный focus management\n- Кастомные сообщения об ошибках\n- Поддержка навигации по клавиатуре\n\n## 🔒 Безопасность\n\n- Полная типизация TypeScript\n- Валидация на клиенте\n- Правильное экранирование значений\n- Защита от XSS атак\n\n## 📈 Производительность\n\n- Code splitting и lazy loading\n- Оптимизированные компоненты\n- Правильное управление памятью\n- Минимизация перерендеров\n\n## 📄 Лицензия\n\nMIT License\n\n---\n\n**Создано Vue 3 + TypeScript**\n","readmeFilename":"README.md"}