feat: добавить поддержку 20 framework exact modes

Добавлены exact modes:
- vue@vite и vue@webpack
- nuxt@vite и nuxt@webpack
- svelte@vite, svelte@webpack и sveltekit@vite
- angular@application и angular@webpack
- astro@vite
- solid@vite, solid@webpack и solid-start@vite
- preact@vite и preact@webpack
- qwik@vite
- lit@vite и lit@webpack
- alpine@vite и alpine@webpack

Для каждого mode реализованы изолированный adapter, нативный
framework-компонент, declarations, manifest, CSS и внешний asset URL.

Добавлены production integration-стенды с генерацией, typecheck,
сборкой и Playwright-проверкой рендера спрайта и Viewer.

Обновлены Viewer, RU/EN-гайды, README, technical reference и AI skills.
Итоговая матрица включает 29 exact modes.

Проверки:
- 48 unit-тестов
- 29 integration E2E-тестов
This commit is contained in:
2026-07-15 16:56:44 +03:00
parent e54ab4991c
commit 8b3365f957
378 changed files with 21188 additions and 650 deletions

View File

@@ -0,0 +1,79 @@
{
"../../../dist/viewer-element.js": {
"file": "assets/viewer-element-BO6fulPI.js",
"name": "viewer-element",
"src": "../../../dist/viewer-element.js",
"isDynamicEntry": true
},
"_index-AIk5O37p.js": {
"file": "assets/index-AIk5O37p.js",
"name": "index",
"isDynamicEntry": true,
"dynamicImports": [
"../../../dist/viewer-element.js",
"src/sprite/.svg-sprite/svg-sprite.manifest.js"
],
"css": [
"assets/index-BWUdTtCi.css"
],
"assets": [
"assets/sprite-DvsqBNon.svg"
]
},
"_index-BWUdTtCi.css": {
"file": "assets/index-BWUdTtCi.css",
"src": "_index-BWUdTtCi.css"
},
"_server-fns-XxvbTHGR.js": {
"file": "assets/server-fns-XxvbTHGR.js",
"name": "server-fns",
"dynamicImports": [
"src/routes/index.jsx?pick=default&pick=$css",
"src/routes/index.jsx?pick=default&pick=$css",
"src/app.jsx"
]
},
"src/app.jsx": {
"file": "assets/app-Bgr52ZUm.js",
"name": "app",
"src": "src/app.jsx",
"isDynamicEntry": true,
"imports": [
"_server-fns-XxvbTHGR.js"
],
"css": [
"assets/app-BVONibDl.css"
]
},
"src/routes/index.jsx?pick=default&pick=$css": {
"file": "index.js",
"name": "index",
"src": "src/routes/index.jsx?pick=default&pick=$css",
"isEntry": true,
"imports": [
"_index-AIk5O37p.js"
]
},
"src/sprite/.svg-sprite/sprite.svg": {
"file": "assets/sprite-DvsqBNon.svg",
"src": "src/sprite/.svg-sprite/sprite.svg"
},
"src/sprite/.svg-sprite/svg-sprite.manifest.js": {
"file": "assets/svg-sprite.manifest-D0DHYqq2.js",
"name": "svg-sprite.manifest",
"src": "src/sprite/.svg-sprite/svg-sprite.manifest.js",
"isDynamicEntry": true,
"imports": [
"_index-AIk5O37p.js"
]
},
"virtual:$vinxi/handler/server-fns": {
"file": "server-fns.js",
"name": "server-fns",
"src": "virtual:$vinxi/handler/server-fns",
"isEntry": true,
"imports": [
"_server-fns-XxvbTHGR.js"
]
}
}

View File

@@ -0,0 +1 @@
:root{font-family:system-ui,sans-serif;color:#172033;background:#fff}body{margin:0;padding:40px}.viewer{margin-top:32px}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{createComponent as p,ssrElement as n,mergeProps as i,ssr as r,ssrAttribute as c,escape as s,ssrHydrationKey as u}from"solid-js/web";import{splitProps as m,Show as d,onMount as v}from"solid-js";const w="_root_1egzq_3",h="_wrap_1egzq_9",l={root:w,wrap:h},g={check:"check"},f="/_server/assets/sprite-DvsqBNon.svg";var _=["<svg><use","></use></svg>"],k=["<use","></use>"];const y=t=>{const[e,o]=m(t,["icon","wrapped","class"]),a=()=>f+"#"+g[e.icon];return p(d,{get when(){return e.wrapped},get fallback(){return n("svg",i(o,{get class(){return[l.root,e.class].filter(Boolean).join(" ")}}),()=>r(k,c("href",s(a(),!0),!1)),!0)},get children(){return n("span",i(o,{get class(){return[l.wrap,e.class].filter(Boolean).join(" ")}}),()=>r(_,c("href",s(a(),!0),!1)),!0)}})};var S=["<main","><h1>SolidStart + Vite</h1><!--$-->",'<!--/--><div class="viewer"></div></main>'];function H(){let t;return v(async()=>{await import("./viewer-element-BO6fulPI.js");const e=document.createElement("gromlab-sprite-viewer");e.viewerTitle="SolidStart Vite Viewer",e.sources=[()=>import("./svg-sprite.manifest-D0DHYqq2.js")],t.append(e)}),r(S,u(),s(p(y,{"data-testid":"icon","data-app":"solid-start-vite",icon:"check","aria-label":"Check icon",width:64,height:64,style:{"--icon-color-1":"#16a34a"}})))}export{H,f as s};

View File

@@ -0,0 +1 @@
._root_1egzq_3{transition-property:fill,stroke,color;transition-duration:.3s;transition-timing-function:ease}._wrap_1egzq_9{display:inline-flex}._wrap_1egzq_9 svg{width:100%;height:100%;transition-property:fill,stroke,color;transition-duration:.3s;transition-timing-function:ease}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- @generated by @gromlab/svg-sprites. Do not edit. -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><style>:root>svg{display:none}:root>svg:target{display:block}</style><svg viewBox="0 0 24 24" id="check" xmlns="http://www.w3.org/2000/svg"><path fill="var(--icon-color-1, currentColor)" d="M9.2 16.6 4.6 12l-2.1 2.1 6.7 6.7L22 8l-2.1-2.1z" style="transition:fill 0.3s,stroke 0.3s;"/></svg></svg>

After

Width:  |  Height:  |  Size: 475 B

View File

@@ -0,0 +1 @@
import{s as o}from"./index-AIk5O37p.js";import"solid-js/web";import"solid-js";const s={schemaVersion:1,generator:"@gromlab/svg-sprites",name:"icons",usage:{framework:"solid-start",componentName:"IconsIcon",ssr:!0},mode:"solid-start@vite",target:"vite",format:"stack",iconCount:1,spriteUrl:o,icons:[{name:"check",id:"check",viewBox:"0 0 24 24",colors:[{variable:"--icon-color-1",fallback:"currentColor"}]}]};export{s as default,s as spriteManifest};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import"solid-js/web";import"solid-js";import{H as p}from"./assets/index-AIk5O37p.js";export{p as default};

View File

@@ -0,0 +1 @@
import{h as s}from"./assets/server-fns-XxvbTHGR.js";import"cookie-es";import"solid-js";import"solid-js/web";import"solid-js/web/storage";import"h3";import"unctx";import"node:async_hooks";import"radix3";import"seroval";import"seroval-plugins/web";export{s as default};