{"_id":"@codeenvision/ui-framework","_rev":"4-7d09bf86b8b7230289bdff281d06e18a","name":"@codeenvision/ui-framework","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.0":{"name":"@codeenvision/ui-framework","version":"1.0.0","keywords":["cluster-envision","ui","typescript","components","scss"],"author":{"name":"Cluster Envision"},"license":"MIT","_id":"@codeenvision/ui-framework@1.0.0","maintainers":[{"name":"clusterenvision-web","email":"npm@clusterenvision.com"}],"bin":{"ceui":"dist/cli/index.js"},"dist":{"shasum":"bce698187ff01777b02785e8b7149a2ca2ed587c","tarball":"https://registry.npmjs.org/@codeenvision/ui-framework/-/ui-framework-1.0.0.tgz","fileCount":193,"integrity":"sha512-UtBvogbRBccgidEYTmk84P5pFyG7lS+NmwjpmHgU4Sv9O1D+z7gH1sJMUQQSVUkWcICPshcAT+e63sjVNrFJIA==","signatures":[{"sig":"MEUCIAHvq2T+DIVASYbnboNOAAMmSqkKz9fGzJRBR7UGbzLLAiEA8yoCrO8wnpergQIDEy4NdN3ArW8yhMfjub4FmaPKxOE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2239577},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=20 <25"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","browser":"./dist/browser.js","require":"./dist/index.cjs"},"./lib":{"types":"./dist/lib/index.d.ts","import":"./dist/lib/index.js","require":"./dist/lib/index.cjs"},"./router":{"types":"./dist/runtime/router.d.ts","import":"./dist/runtime/router.js","require":"./dist/runtime/router.cjs"},"./server":{"types":"./dist/runtime/server.d.ts","import":"./dist/runtime/server.js","require":"./dist/runtime/server.cjs"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js","require":"./dist/browser.cjs"},"./lib/dom":{"types":"./dist/lib/dom.d.ts","import":"./dist/lib/dom.js","require":"./dist/lib/dom.cjs"},"./signals":{"types":"./dist/browser-signals.d.ts","import":"./dist/browser-signals.js","require":"./dist/browser-signals.cjs"},"./compiler":{"types":"./dist/compiler/index.d.ts","import":"./dist/compiler/index.js","require":"./dist/compiler/index.cjs"},"./workflow":{"types":"./dist/runtime/workflow/index.d.ts","import":"./dist/runtime/workflow/index.js","require":"./dist/runtime/workflow/index.cjs"},"./lib/icons":{"types":"./dist/lib/icons.d.ts","import":"./dist/lib/icons.js","require":"./dist/lib/icons.cjs"},"./lib/theme":{"types":"./dist/lib/theme.d.ts","import":"./dist/lib/theme.js","require":"./dist/lib/theme.cjs"},"./adapters/vue":{"types":"./dist/runtime/adapters/vue.d.ts","import":"./dist/runtime/adapters/vue.js","require":"./dist/runtime/adapters/vue.cjs"},"./package.json":"./package.json","./adapters/react":{"types":"./dist/runtime/adapters/react.d.ts","import":"./dist/runtime/adapters/react.js","require":"./dist/runtime/adapters/react.cjs"},"./adapters/angular":{"types":"./dist/runtime/adapters/angular.d.ts","import":"./dist/runtime/adapters/angular.js","require":"./dist/runtime/adapters/angular.cjs"},"./components/ai-assistant":{"types":"./dist/runtime/components/ai-assistant.d.ts","import":"./dist/runtime/components/ai-assistant.js","require":"./dist/runtime/components/ai-assistant.cjs"},"./components/ai-summary-card":{"types":"./dist/runtime/components/ai-summary-card.d.ts","import":"./dist/runtime/components/ai-summary-card.js","require":"./dist/runtime/components/ai-summary-card.cjs"}},"gitHead":"d4c107488d232734d92956c89649a77bb2025de2","private":false,"scripts":{"dev":"tsup --config tsup.config.ts --watch","lint":"eslint \"src/**/*.{ts,tsx}\" --max-warnings=0","test":"node ./scripts/run-vitest.mjs","bench":"node ./scripts/run-benchmarks.mjs","build":"cross-env TSUP_WORKERS=1 NODE_OPTIONS=--max-old-space-size=4096 tsup --config tsup.config.ts","test:ci":"npm run test:compiler && npm run test:runtime && npm run test:workflow","docs:api":"typedoc --options typedoc.json","typecheck":"tsc --noEmit","prerelease":"npm run lint && npm run test && npm run build","test:types":"npm run build && tsd","test:runtime":"npm run test -- \"tests/runtime/**/*.spec.ts\" \"tests/signals.spec.ts\" --passWithNoTests","test:compiler":"npm run test -- \"tests/compiler.spec.ts\" \"tests/html-parser.spec.ts\" \"tests/compiler/**/*.spec.ts\" \"tests/html-parser/**/*.spec.ts\" --passWithNoTests","test:workflow":"npm run test -- \"tests/workflow/**/*.spec.ts\" --passWithNoTests","tokens:matrix":"node ./scripts/generate-token-compat-matrix.mjs","compile:examples":"node dist/cli/index.js compile examples/basic-counter","docs:api:publish":"npm run build && npm run docs:api"},"_npmUser":{"name":"clusterenvision-web","email":"npm@clusterenvision.com"},"overrides":{"vite":"8.0.16","esbuild":"0.28.1"},"_npmVersion":"11.13.0","description":"Compile-time first UI framework with CE ecosystem integrations.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"chokidar":"^5.0.0","commander":"^15.0.0","fast-glob":"^3.3.2","picocolors":"^1.1.0","@jridgewell/gen-mapping":"^0.3.5"},"_hasShrinkwrap":false,"devDependencies":{"tsd":"^0.33.0","tsup":"^8.5.1","jsdom":"^29.1.1","eslint":"^10.5.0","vitest":"^4.1.8","typedoc":"^0.28.19","prettier":"^3.8.4","cross-env":"^10.1.0","typescript":"^6.0.3","@types/node":"^25.9.3","typescript-eslint":"^8.61.0","@codeenvision/ui-scss":"file:../ce-ui-scss","eslint-config-prettier":"^10.1.8","typedoc-plugin-markdown":"^4.12.0","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"peerDependencies":{"@codeenvision/ui-scss":"^1.94.2"},"peerDependenciesMeta":{"@codeenvision/ui-scss":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ui-framework_1.0.0_1781967720556_0.33744468057201793","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@codeenvision/ui-framework","version":"1.0.1","keywords":["cluster-envision","codeenvision","Code Envision","Code-Envision","ui","typescript","components","scss"],"author":{"name":"Cluster Envision"},"license":"MIT","_id":"@codeenvision/ui-framework@1.0.1","maintainers":[{"name":"clusterenvision-web","email":"npm@clusterenvision.com"}],"bin":{"ceui":"dist/cli/index.js"},"dist":{"shasum":"f508bab16405c2d320cb4a1319e476a1c6757bac","tarball":"https://registry.npmjs.org/@codeenvision/ui-framework/-/ui-framework-1.0.1.tgz","fileCount":193,"integrity":"sha512-MenIBL0cQHGHL50cV4x91L+Lv+3KJfox1aIp6rR0uMKxMwIye3I6mG48UFwF9xE59lYzRMlZV8jzRfgm7LAzjg==","signatures":[{"sig":"MEUCIFSoVQFgk8yR/fG/Df01+a3Vyo+/TJXFB0kKW1ev6HTYAiEAutV4X/6TQ+6u3i15bEVYbh2xoirJihy6E3mfV70i3Zw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2239637},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=20 <25"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","browser":"./dist/browser.js","require":"./dist/index.cjs"},"./lib":{"types":"./dist/lib/index.d.ts","import":"./dist/lib/index.js","require":"./dist/lib/index.cjs"},"./router":{"types":"./dist/runtime/router.d.ts","import":"./dist/runtime/router.js","require":"./dist/runtime/router.cjs"},"./server":{"types":"./dist/runtime/server.d.ts","import":"./dist/runtime/server.js","require":"./dist/runtime/server.cjs"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js","require":"./dist/browser.cjs"},"./lib/dom":{"types":"./dist/lib/dom.d.ts","import":"./dist/lib/dom.js","require":"./dist/lib/dom.cjs"},"./signals":{"types":"./dist/browser-signals.d.ts","import":"./dist/browser-signals.js","require":"./dist/browser-signals.cjs"},"./compiler":{"types":"./dist/compiler/index.d.ts","import":"./dist/compiler/index.js","require":"./dist/compiler/index.cjs"},"./workflow":{"types":"./dist/runtime/workflow/index.d.ts","import":"./dist/runtime/workflow/index.js","require":"./dist/runtime/workflow/index.cjs"},"./lib/icons":{"types":"./dist/lib/icons.d.ts","import":"./dist/lib/icons.js","require":"./dist/lib/icons.cjs"},"./lib/theme":{"types":"./dist/lib/theme.d.ts","import":"./dist/lib/theme.js","require":"./dist/lib/theme.cjs"},"./adapters/vue":{"types":"./dist/runtime/adapters/vue.d.ts","import":"./dist/runtime/adapters/vue.js","require":"./dist/runtime/adapters/vue.cjs"},"./package.json":"./package.json","./adapters/react":{"types":"./dist/runtime/adapters/react.d.ts","import":"./dist/runtime/adapters/react.js","require":"./dist/runtime/adapters/react.cjs"},"./adapters/angular":{"types":"./dist/runtime/adapters/angular.d.ts","import":"./dist/runtime/adapters/angular.js","require":"./dist/runtime/adapters/angular.cjs"},"./components/ai-assistant":{"types":"./dist/runtime/components/ai-assistant.d.ts","import":"./dist/runtime/components/ai-assistant.js","require":"./dist/runtime/components/ai-assistant.cjs"},"./components/ai-summary-card":{"types":"./dist/runtime/components/ai-summary-card.d.ts","import":"./dist/runtime/components/ai-summary-card.js","require":"./dist/runtime/components/ai-summary-card.cjs"}},"gitHead":"194ac14c147d9346e5b144e921493bda7452f17d","private":false,"scripts":{"dev":"tsup --config tsup.config.ts --watch","lint":"eslint \"src/**/*.{ts,tsx}\" --max-warnings=0","test":"node ./scripts/run-vitest.mjs","bench":"node ./scripts/run-benchmarks.mjs","build":"cross-env TSUP_WORKERS=1 NODE_OPTIONS=--max-old-space-size=4096 tsup --config tsup.config.ts","test:ci":"npm run test:compiler && npm run test:runtime && npm run test:workflow","docs:api":"typedoc --options typedoc.json","typecheck":"tsc --noEmit","prerelease":"npm run lint && npm run test && npm run build","test:types":"npm run build && tsd","test:runtime":"npm run test -- \"tests/runtime/**/*.spec.ts\" \"tests/signals.spec.ts\" --passWithNoTests","test:compiler":"npm run test -- \"tests/compiler.spec.ts\" \"tests/html-parser.spec.ts\" \"tests/compiler/**/*.spec.ts\" \"tests/html-parser/**/*.spec.ts\" --passWithNoTests","test:workflow":"npm run test -- \"tests/workflow/**/*.spec.ts\" --passWithNoTests","tokens:matrix":"node ./scripts/generate-token-compat-matrix.mjs","compile:examples":"node dist/cli/index.js compile examples/basic-counter","docs:api:publish":"npm run build && npm run docs:api"},"_npmUser":{"name":"clusterenvision-web","email":"npm@clusterenvision.com"},"overrides":{"vite":"8.0.16","esbuild":"0.28.1"},"_npmVersion":"11.13.0","description":"Compile-time first UI framework with CE ecosystem integrations.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"chokidar":"^5.0.0","commander":"^15.0.0","fast-glob":"^3.3.2","picocolors":"^1.1.0","@jridgewell/gen-mapping":"^0.3.5"},"_hasShrinkwrap":false,"devDependencies":{"tsd":"^0.33.0","tsup":"^8.5.1","jsdom":"^29.1.1","eslint":"^10.5.0","vitest":"^4.1.8","typedoc":"^0.28.19","prettier":"^3.8.4","cross-env":"^10.1.0","typescript":"^6.0.3","@types/node":"^25.9.3","typescript-eslint":"^8.61.0","@codeenvision/ui-scss":"file:../ce-ui-scss","eslint-config-prettier":"^10.1.8","typedoc-plugin-markdown":"^4.12.0","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"peerDependencies":{"@codeenvision/ui-scss":"1.0.0"},"peerDependenciesMeta":{"@codeenvision/ui-scss":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ui-framework_1.0.1_1781969225935_0.25602024451827776","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@codeenvision/ui-framework","version":"1.0.3","keywords":["cluster-envision","codeenvision","Code Envision","Code-Envision","ui","typescript","components","scss"],"author":{"name":"Cluster Envision"},"license":"MIT","_id":"@codeenvision/ui-framework@1.0.3","maintainers":[{"name":"clusterenvision-web","email":"npm@clusterenvision.com"}],"bin":{"ceui":"dist/cli/index.js"},"dist":{"shasum":"bc565ccecb2458347ec04a23fc0fe821d2f220d8","tarball":"https://registry.npmjs.org/@codeenvision/ui-framework/-/ui-framework-1.0.3.tgz","fileCount":193,"integrity":"sha512-yFgUuzm3o6pIZoPaNwZqySXqxe9DX5FDRRmUl2sRS0FKxjOXPUjpcMPvDBD190kgImN78mlEAhDC3ksS0AcMZw==","signatures":[{"sig":"MEQCIHLq+oe7GDQAFgAUcnUY25kYLUuzYTWl0pKfzxEoRap+AiBSwYvDzVsTcVBuf73gUGS9WGA5FqCIBtmHevm2an0PPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2239626},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=20 <25"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","browser":"./dist/browser.js","require":"./dist/index.cjs"},"./lib":{"types":"./dist/lib/index.d.ts","import":"./dist/lib/index.js","require":"./dist/lib/index.cjs"},"./router":{"types":"./dist/runtime/router.d.ts","import":"./dist/runtime/router.js","require":"./dist/runtime/router.cjs"},"./server":{"types":"./dist/runtime/server.d.ts","import":"./dist/runtime/server.js","require":"./dist/runtime/server.cjs"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js","require":"./dist/browser.cjs"},"./lib/dom":{"types":"./dist/lib/dom.d.ts","import":"./dist/lib/dom.js","require":"./dist/lib/dom.cjs"},"./signals":{"types":"./dist/browser-signals.d.ts","import":"./dist/browser-signals.js","require":"./dist/browser-signals.cjs"},"./compiler":{"types":"./dist/compiler/index.d.ts","import":"./dist/compiler/index.js","require":"./dist/compiler/index.cjs"},"./workflow":{"types":"./dist/runtime/workflow/index.d.ts","import":"./dist/runtime/workflow/index.js","require":"./dist/runtime/workflow/index.cjs"},"./lib/icons":{"types":"./dist/lib/icons.d.ts","import":"./dist/lib/icons.js","require":"./dist/lib/icons.cjs"},"./lib/theme":{"types":"./dist/lib/theme.d.ts","import":"./dist/lib/theme.js","require":"./dist/lib/theme.cjs"},"./adapters/vue":{"types":"./dist/runtime/adapters/vue.d.ts","import":"./dist/runtime/adapters/vue.js","require":"./dist/runtime/adapters/vue.cjs"},"./package.json":"./package.json","./adapters/react":{"types":"./dist/runtime/adapters/react.d.ts","import":"./dist/runtime/adapters/react.js","require":"./dist/runtime/adapters/react.cjs"},"./adapters/angular":{"types":"./dist/runtime/adapters/angular.d.ts","import":"./dist/runtime/adapters/angular.js","require":"./dist/runtime/adapters/angular.cjs"},"./components/ai-assistant":{"types":"./dist/runtime/components/ai-assistant.d.ts","import":"./dist/runtime/components/ai-assistant.js","require":"./dist/runtime/components/ai-assistant.cjs"},"./components/ai-summary-card":{"types":"./dist/runtime/components/ai-summary-card.d.ts","import":"./dist/runtime/components/ai-summary-card.js","require":"./dist/runtime/components/ai-summary-card.cjs"}},"gitHead":"4bfb6e532a7ebfcb75ba7e4caa4c2022bcaf22df","private":false,"scripts":{"dev":"tsup --config tsup.config.ts --watch","lint":"eslint \"src/**/*.{ts,tsx}\" --max-warnings=0","test":"node ./scripts/run-vitest.mjs","bench":"node ./scripts/run-benchmarks.mjs","build":"cross-env TSUP_WORKERS=1 NODE_OPTIONS=--max-old-space-size=4096 tsup --config tsup.config.ts","test:ci":"npm run test:compiler && npm run test:runtime && npm run test:workflow","docs:api":"typedoc --options typedoc.json","typecheck":"tsc --noEmit","prerelease":"npm run lint && npm run test && npm run build","test:types":"npm run build && tsd","test:runtime":"npm run test -- \"tests/runtime/**/*.spec.ts\" \"tests/signals.spec.ts\" --passWithNoTests","test:compiler":"npm run test -- \"tests/compiler.spec.ts\" \"tests/html-parser.spec.ts\" \"tests/compiler/**/*.spec.ts\" \"tests/html-parser/**/*.spec.ts\" --passWithNoTests","test:workflow":"npm run test -- \"tests/workflow/**/*.spec.ts\" --passWithNoTests","tokens:matrix":"node ./scripts/generate-token-compat-matrix.mjs","compile:examples":"node dist/cli/index.js compile examples/basic-counter","docs:api:publish":"npm run build && npm run docs:api"},"_npmUser":{"name":"clusterenvision-web","email":"npm@clusterenvision.com"},"overrides":{"vite":"8.0.16","esbuild":"0.28.1"},"_npmVersion":"11.13.0","description":"Compile-time first UI framework with CE ecosystem integrations.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"chokidar":"^5.0.0","commander":"^15.0.0","fast-glob":"^3.3.2","picocolors":"^1.1.0","@jridgewell/gen-mapping":"^0.3.5"},"_hasShrinkwrap":false,"devDependencies":{"tsd":"^0.33.0","tsup":"^8.5.1","jsdom":"^29.1.1","eslint":"^10.5.0","vitest":"^4.1.8","typedoc":"^0.28.19","prettier":"^3.8.4","cross-env":"^10.1.0","typescript":"^6.0.3","@types/node":"^25.9.3","typescript-eslint":"^8.61.0","@codeenvision/ui-scss":"file:../ce-ui-scss","eslint-config-prettier":"^10.1.8","typedoc-plugin-markdown":"^4.12.0","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"peerDependencies":{"@codeenvision/ui-scss":"^1.0.0"},"peerDependenciesMeta":{"@codeenvision/ui-scss":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ui-framework_1.0.3_1783190479927_0.022367777432713565","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"author":{"name":"Cluster Envision"},"name":"@codeenvision/ui-framework","version":"1.0.5","private":false,"type":"module","description":"Compile-time first UI framework with CE ecosystem integrations.","license":"MIT","main":"dist/index.cjs","module":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20 <25"},"exports":{".":{"types":"./dist/index.d.ts","browser":"./dist/browser.js","import":"./dist/index.js","require":"./dist/index.cjs"},"./compiler":{"types":"./dist/compiler/index.d.ts","import":"./dist/compiler/index.js","require":"./dist/compiler/index.cjs"},"./router":{"types":"./dist/runtime/router.d.ts","import":"./dist/runtime/router.js","require":"./dist/runtime/router.cjs"},"./server":{"types":"./dist/runtime/server.d.ts","import":"./dist/runtime/server.js","require":"./dist/runtime/server.cjs"},"./adapters/angular":{"types":"./dist/runtime/adapters/angular.d.ts","import":"./dist/runtime/adapters/angular.js","require":"./dist/runtime/adapters/angular.cjs"},"./adapters/react":{"types":"./dist/runtime/adapters/react.d.ts","import":"./dist/runtime/adapters/react.js","require":"./dist/runtime/adapters/react.cjs"},"./adapters/vue":{"types":"./dist/runtime/adapters/vue.d.ts","import":"./dist/runtime/adapters/vue.js","require":"./dist/runtime/adapters/vue.cjs"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.js","require":"./dist/browser.cjs"},"./workflow":{"types":"./dist/runtime/workflow/index.d.ts","import":"./dist/runtime/workflow/index.js","require":"./dist/runtime/workflow/index.cjs"},"./components/ai-assistant":{"types":"./dist/runtime/components/ai-assistant.d.ts","import":"./dist/runtime/components/ai-assistant.js","require":"./dist/runtime/components/ai-assistant.cjs"},"./components/ai-summary-card":{"types":"./dist/runtime/components/ai-summary-card.d.ts","import":"./dist/runtime/components/ai-summary-card.js","require":"./dist/runtime/components/ai-summary-card.cjs"},"./signals":{"types":"./dist/browser-signals.d.ts","import":"./dist/browser-signals.js","require":"./dist/browser-signals.cjs"},"./lib":{"types":"./dist/lib/index.d.ts","import":"./dist/lib/index.js","require":"./dist/lib/index.cjs"},"./lib/dom":{"types":"./dist/lib/dom.d.ts","import":"./dist/lib/dom.js","require":"./dist/lib/dom.cjs"},"./lib/icons":{"types":"./dist/lib/icons.d.ts","import":"./dist/lib/icons.js","require":"./dist/lib/icons.cjs"},"./lib/theme":{"types":"./dist/lib/theme.d.ts","import":"./dist/lib/theme.js","require":"./dist/lib/theme.cjs"},"./package.json":"./package.json"},"bin":{"ceui":"dist/cli/index.js"},"scripts":{"build":"cross-env TSUP_WORKERS=1 NODE_OPTIONS=--max-old-space-size=4096 tsup --config tsup.config.ts","dev":"tsup --config tsup.config.ts --watch","docs:api":"typedoc --options typedoc.json","docs:api:publish":"npm run build && npm run docs:api","lint":"eslint \"src/**/*.{ts,tsx}\" --max-warnings=0","test":"node ./scripts/run-vitest.mjs","test:compiler":"npm run test -- \"tests/compiler.spec.ts\" \"tests/html-parser.spec.ts\" \"tests/compiler/**/*.spec.ts\" \"tests/html-parser/**/*.spec.ts\" --passWithNoTests","test:runtime":"npm run test -- \"tests/runtime/**/*.spec.ts\" \"tests/signals.spec.ts\" --passWithNoTests","test:workflow":"npm run test -- \"tests/workflow/**/*.spec.ts\" --passWithNoTests","test:ci":"npm run test:compiler && npm run test:runtime && npm run test:workflow","test:types":"npm run build && tsd","tokens:matrix":"node ./scripts/generate-token-compat-matrix.mjs","bench":"node ./scripts/run-benchmarks.mjs","typecheck":"tsc --noEmit","compile:examples":"node dist/cli/index.js compile examples/basic-counter","prerelease":"npm run lint && npm run test && npm run build"},"dependencies":{"@jridgewell/gen-mapping":"^0.3.5","chokidar":"^5.0.0","commander":"^15.0.0","fast-glob":"^3.3.2","picocolors":"^1.1.0"},"peerDependencies":{"@codeenvision/ui-scss":"^1.0.2"},"peerDependenciesMeta":{"@codeenvision/ui-scss":{"optional":true}},"devDependencies":{"@codeenvision/ui-scss":"file:../ce-ui-scss","@types/node":"^25.9.3","@typescript-eslint/eslint-plugin":"^8.61.0","@typescript-eslint/parser":"^8.61.0","cross-env":"^10.1.0","eslint":"^10.5.0","eslint-config-prettier":"^10.1.8","jsdom":"^29.1.1","prettier":"^3.8.4","tsd":"^0.33.0","tsup":"^8.5.1","typedoc":"^0.28.19","typedoc-plugin-markdown":"^4.12.0","typescript":"^6.0.3","typescript-eslint":"^8.61.0","vitest":"^4.1.8"},"overrides":{"vite":"8.0.16","esbuild":"0.28.1"},"keywords":["cluster-envision","codeenvision","Code Envision","Code-Envision","ui","typescript","components","scss"],"gitHead":"0d69ceafde7d4dd9adf46052e7d7928515de0586","_id":"@codeenvision/ui-framework@1.0.5","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-DN50or3z2i1C7yr9W60rFVIeEJ8w8HUJimGWmO0z6MRqTONJJgol2TupSoEd6samZSPkelKS1Hm5eHvslL499Q==","shasum":"24264e602ad5e78317a94d789dc936f9ab477c45","tarball":"https://registry.npmjs.org/@codeenvision/ui-framework/-/ui-framework-1.0.5.tgz","fileCount":193,"unpackedSize":2239626,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIE7BixJ9cppzYEQjGrYG7MYnd+g79ulDuDBIiEubjYLFAiEAp97INpjdg3dHEO+sysYKgIAkvyyNlBIxr1ozgJ66F8E="}]},"_npmUser":{"name":"clusterenvision-web","email":"npm@clusterenvision.com"},"directories":{},"maintainers":[{"name":"clusterenvision-web","email":"npm@clusterenvision.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ui-framework_1.0.5_1783191040404_0.8800249897176913"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-20T15:02:00.373Z","modified":"2026-07-04T18:50:40.685Z","1.0.0":"2026-06-20T15:02:00.713Z","1.0.1":"2026-06-20T15:27:06.141Z","1.0.3":"2026-07-04T18:41:20.138Z","1.0.5":"2026-07-04T18:50:40.562Z"},"author":{"name":"Cluster Envision"},"license":"MIT","keywords":["cluster-envision","codeenvision","Code Envision","Code-Envision","ui","typescript","components","scss"],"description":"Compile-time first UI framework with CE ecosystem integrations.","maintainers":[{"name":"clusterenvision-web","email":"npm@clusterenvision.com"}],"readme":"# @clusterenvision/ui-framework\n\nA compile-time focused UI framework that powers the CE ecosystem. It blends a component + hooks mental model with Angular-like templates, dependency injection, SSR, and hydration – all optimized through a tiny runtime built on signals.\n\n> Looking for a working example? The `web/ce-lms` starter uses `ce-ui-scss`, pre-registers CE web components, and is Vite-ready for dropping `@clusterenvision/ui-framework` components into a realistic auth flow.\n\n## Highlights\n\n- **CEX single-file components** compiled into optimal DOM instructions.\n- **Signals + hooks** for state, side-effects, async resources, and context.\n- **Hierarchical DI + router + forms** out of the box.\n- **Universal rendering**: render the same component on the server and hydrate on the client.\n- **Tooling**: Vite plugin, tsup build, CLI (`ceui`) for compilation pipelines.\n\n## Styling + component alignment\n\nThis framework expects CE design tokens and web components to be present for a production experience:\n\n- **Tokens (scss 1.94.2)**: import `@clusterenvision/ui-scss/dist/ce-ui.css` into your app shell or bundler entry, or use the CDN `https://unpkg.com/@clusterenvision/ui-scss@1.94.2/dist/ce-ui.css` with SRI. Apply a theme class on `<html>` (e.g., `theme-default`, `theme-dark`).\n- **Web Components (1.1.0)**: register CE elements once at startup:\n  ```ts\n  import { registerDefaultComponents } from '@clusterenvision/ui-webcomponents';\n  import '@clusterenvision/ui-scss/dist/ce-ui.css';\n\n  registerDefaultComponents(); // defines <ce-switch>, <ce-dialog>, etc.\n  ```\n- **CEX + CE WC interop**: CEX templates can render CE web components directly (no wrapper). See `examples/webcomponents-bridge` and the integration test under `tests/runtime/webcomponents-interop.spec.ts`.\n\nProduction hardening: see `docs/PRODUCTION.md` for routing/data/error policies, security headers/CSP, perf budgets, and deployment playbooks. TL;DR for releases: run `npm run lint && npm run test:ci && npm run typecheck && npm run build && npm run bench`, apply CSP and boundary policies per route, and publish only from CI.\n\n## Stack roadmap\n\nFor the unified future work plan across `ce-ui-framework`, `ce-ui-webcomponents`, `ce-ui-scss`, `ce-ui-kit`, and `ce-ui-platform`, see `docs/ce-ui-framework/STACK_ROADMAP.md`.\n\n## Runtime Requirements\n\n- Node.js 20.x LTS (or Node 22.x once the upstream worker leak in Node 25 is fixed). Running the Vitest suite or the CLI on Node 25 currently crashes with `ERR_WORKER_OUT_OF_MEMORY`. Use a version manager such as `nvm`/`fnm` to pin Node 20 when contributing.\n\n## Getting Started\n\n```bash\nnpm install\nnpm run build\nnpx ceui compile examples/basic-counter\n```\n\nAuthor components with `defineComponent`:\n\n```ts\nimport { defineComponent, signal } from '@clusterenvision/ui-framework';\n\nexport const Counter = defineComponent({\n  name: 'Counter',\n  template: `\n    <section class=\"counter\">\n      <h1>Hello {{ props.name }}</h1>\n      <button on:click=\"increment\">Clicks {{ count() }}</button>\n      <p ce:if=\"count() > 5\">Milestone reached!</p>\n    </section>\n  `,\n  setup() {\n    const count = signal(0);\n    const increment = () => count.update(v => v + 1);\n    return { count, increment };\n  }\n});\n```\n\nThen render or hydrate:\n\n```ts\nimport { render } from '@clusterenvision/ui-framework';\n\nrender(Counter, { name: 'CE' }, document.getElementById('app')!);\n```\n\n### Compiler & parser utilities\n\nIf you previously depended on `node-html-parser` to preprocess CE templates, you can now import the built-in parser directly from the compiler bundle:\n\n```ts\nimport {\n  parse,\n  createElement,\n  createTextNode,\n  createCommentNode,\n  createFragment,\n  serialize,\n  walk,\n  isElementNode,\n} from '@clusterenvision/ui-framework/compiler';\n\nconst ast = parse('<section ce:if=\"visible\">Hello</section>', {\n  lowerCaseTagName: false,\n  lowerCaseAttributeName: false,\n});\n\nconst fragment = createFragment([createElement('aside'), createTextNode('scoped docs')]);\nfragment.firstChild?.appendChild(createCommentNode('inline note'));\n\nconst html = serialize([ast, fragment], { pretty: true });\n\nwalk(ast, (node) => {\n  if (isElementNode(node)) {\n    console.log('tag', node.tagName, node.attrs);\n  }\n  return undefined;\n});\n```\n\nThis keeps template tooling in sync with the CE compiler and avoids CommonJS bundles when shipping to Angular, React, or Vite-based demos.\n\n### Parser capabilities\n\n- Returns a real `DocumentFragment` so multiple root nodes are naturally supported.\n- Configurable tag + attribute casing (`lowerCaseTagName`, `lowerCaseAttributeName`).\n- Optional HTML entity decoding (`decodeEntities`) and comment preservation (`preserveComments`).\n- Overridable `voidElements` / `rawTextElements` for custom syntaxes.\n- Helper factories (`createElement`, `createTextNode`, `createCommentNode`, `createFragment`) plus `cloneNode`, `serialize`, and `walk` for AST transforms.\n- Type guards (`isElementNode`, `isTextNode`, `isCommentNode`, `isParentNode`) ensure ergonomic authoring in toolchains.\n\n## Project Scripts\n\n- `npm run build` – bundle via tsup.\n- `npm run dev` – watch mode for hack-and-learn.\n- `npm run test` – Vitest suite for compiler/runtime primitives.\n- `npm run lint` – ESLint (strict TS config).\n\n## CLI\n\nThe `ceui compile` command now supports incremental workflows:\n\n- `ceui compile src/components/**/*.cex --out-dir dist --watch` – recompile on file changes.\n- `--source-map` – emit ESM modules with `.map` files for debugger parity.\n- Scoped `<style>` blocks automatically receive deterministic `data-ce-scope` attributes so emitted CSS stays encapsulated.\n\n## Workflow Orchestrator (Preview)\n\nThe runtime now exposes a hybrid workflow/state-machine engine that runs in both the browser and Node.js. Author definitions via the fluent builder API or load JSON specs, then execute them with pluggable stores, HTTP/database tasks, actor-aware approvals, and retry policies.\n\n```ts\nimport {\n  WorkflowRuntime,\n  InMemoryWorkflowStore,\n  InMemoryDatabaseRegistry,\n  createWorkflow,\n  httpTask,\n  databaseTask,\n  createDefaultTaskMap,\n  createPostgresProvider,\n  DatabaseWorkflowStore\n} from '@clusterenvision/ui-framework/workflow';\n\nconst definition = createWorkflow('order-fulfillment', builder => {\n  builder\n    .step('fetch-inventory', httpTask({ url: 'https://inventory.ce/api/items', parse: 'json', assignResponseTo: 'inventory' }))\n    .onSuccess('persist-order');\n\n  builder\n    .step('persist-order', databaseTask({\n      provider: 'postgres',\n      operation: { type: 'command', text: 'select create_order($1)', parameters: [{ $ref: 'inventory' }] },\n      assignResultTo: 'order'\n    }))\n    .withApproval({ id: 'finance', requiredRoles: ['finance-approver'] });\n});\n\nconst databaseRegistry = new InMemoryDatabaseRegistry();\nconst postgresProvider = createPostgresProvider(pool, 'postgres');\ndatabaseRegistry.register(postgresProvider);\n\nconst runtime = new WorkflowRuntime({\n  store: new DatabaseWorkflowStore({ provider: postgresProvider, dialect: 'postgres' }),\n  services: { databases: databaseRegistry },\n  tasks: createDefaultTaskMap()\n});\n\nawait runtime.run(definition, { actor: { id: 'user-123', roles: ['finance-approver'] } });\n```\n\nHighlights:\n\n- Hybrid definitions (TypeScript DSL + JSON) with deterministic IDs and metadata.\n- Built-in retry policies, approval gates, and execution history persistence.\n- HTTP + database task adapters (MySQL, Postgres, SQLite, Mongo, or any custom provider).\n- In-memory workflow store, logger, background runner, and time service ready for production swaps.\n- Actor-aware approvals with `actor` context injection and role/approver checks.\n- Delay/schedule helpers (`delayTask`, `scheduleTask`) that leverage the time service, scheduler, and background runner.\n\n### Actor Context & Approval Gates\n\nPass an `actor` into `runtime.run` to capture the human/system identity that initiated a workflow. Steps can call `.withApproval({ id: 'finance', requiredRoles: ['finance-approver'] })` to block until an approver with the appropriate role resolves the gate. Provide a custom `ApprovalResolver` to plug in ticketing/notification flows or multi-step approvals.\n\n### Scheduling & Background Tasks\n\nThe default services include a scheduler built on the background runner + time service. Use the provided tasks to pause or defer work:\n\n```ts\nbuilder.step('wait-for-window', delayTask({ seconds: 30 })).onSuccess('notify');\n\nbuilder.step(\n  'notify',\n  scheduleTask({ taskName: 'webhook.dispatch', delayMs: 5_000, payload: { target: 'https://hooks.ce/api' } })\n);\n```\n\nYou can also inject your own `scheduler` implementation to route deferrals to hosted cron/queue systems.\n\n### Persistence\n\n`DatabaseWorkflowStore` serializes workflow state/history into a SQL table (`workflow_instances` by default) using upserts compatible with Postgres, MySQL, and SQLite. The expected schema is:\n\n```sql\nCREATE TABLE workflow_instances (\n  id TEXT PRIMARY KEY,\n  workflow_id TEXT NOT NULL,\n  version TEXT NOT NULL,\n  status TEXT NOT NULL,\n  current_step TEXT NULL,\n  state_json JSON NOT NULL,\n  actor_json JSON NULL,\n  metadata_json JSON NULL,\n  history_json JSON NOT NULL,\n  created_at TEXT NOT NULL,\n  updated_at TEXT NOT NULL\n);\n```\n\nSwap in a custom store if you need to target MongoDB or document databases directly.\n\n#### Mongo Store\n\n```ts\nimport { MongoWorkflowStore } from '@clusterenvision/ui-framework/workflow';\n\nconst mongoStore = new MongoWorkflowStore({ collection: db.collection('workflow_instances'), createIndexes: true });\nconst runtime = new WorkflowRuntime({\n  store: mongoStore,\n  services: { databases: databaseRegistry },\n  tasks: createDefaultTaskMap(),\n});\n```\n\nDocuments stay shape-aligned with the SQL table (state/history serialized as JSON, indexes on `workflowId`, `status`, `updatedAt`).\n\n### Visual DSL Hooks\n\n`workflow/schema.ts` exposes a `VisualWorkflowSchema` with node positions, annotations, and stable IDs so an editor (VS Code, diagram tool, BPMN canvas) can round-trip definitions.\n\n```ts\nimport { workflowToVisualSchema, visualSchemaToWorkflow } from '@clusterenvision/ui-framework/workflow';\n\nconst schema = workflowToVisualSchema(definition);\nschema.nodes[0].position = { x: 100, y: 240 };\nconst updatedDefinition = visualSchemaToWorkflow(schema);\n```\n\n### Database Adapters\n\nBeyond the built-in SQL + Mongo helpers, you can now register:\n\n- `createPrismaProvider` – wraps Prisma clients via `$queryRawUnsafe` / `$executeRawUnsafe`.\n- `createDrizzleProvider` – forwards to Drizzle’s `execute` API.\n- `createSupabaseProvider` – targets Supabase/PostgREST tables or RPC endpoints.\n- `createRestDatabaseProvider` – generic wrapper over any REST backend (e.g., Hasura, custom serverless DB).\n\n### Queue-Based Background Runners\n\n`QueueBackgroundRunner` wires the workflow scheduler to queue systems (BullMQ/Redis, AWS SQS, Azure Storage Queues, or any custom driver). Each driver implements the minimal `QueueDriver` interface so you can plug in enterprise transports while emitting metrics.\n\n```ts\nimport { QueueBackgroundRunner, createBullMqDriver, MetricsConsoleEmitter } from '@clusterenvision/ui-framework/workflow';\n\nconst queueRunner = new QueueBackgroundRunner({\n  driver: createBullMqDriver(queue),\n  metrics: new MetricsConsoleEmitter(),\n});\n\nconst runtime = new WorkflowRuntime({\n  store: mongoStore,\n  services: { background: queueRunner, scheduler: queueRunner },\n  tasks: createDefaultTaskMap(),\n});\n```\n\n### Auth & Policy Integrations\n\n- `actorFromAuth0Claims`, `actorFromCognitoClaims`, `actorFromAzureAdClaims`, `actorFromOidcClaims` map identity tokens into `ActorContext`.\n- `PolicyApprovalResolver` + `RuleBasedPolicyEngine` enable custom policy-as-code enforcement before approvals.\n- Middleware helpers (`requireActorRoles`, `requireActorScopes`, `runAuthMiddleware`) make it easy to guard workflow start or per-step execution.\n- `multiStepApprovalResolver` composes multiple resolvers and `ManualOverrideApprovalResolver` allows humans to unblock via manual overrides.\n\n## Status\n\nEarly alpha. The current codebase focuses on the core runtime, compiler skeleton, CLI, and reference examples. Contributions welcome!\n","readmeFilename":"README.md"}