{"_id":"@terpjs/react-core","_rev":"41-0454286629710ca072efbd5b94362753","name":"@terpjs/react-core","dist-tags":{"latest":"0.30.0"},"versions":{"0.1.0":{"name":"@terpjs/react-core","version":"0.1.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.1.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"f5395297bec635afa2674b2954db07140447b91f","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.1.0.tgz","fileCount":154,"integrity":"sha512-AGkDAremTx4KgJJlhm3tAP3sjDaIQbI7ovu1LxqDavgJP8KOTN5VEx90qWUF+8ufB+p9p6D8YUjxZEJ91naIvg==","signatures":[{"sig":"MEQCIA8PzRqAW7SdQgx6SggHM4HvaNo09fu//7gyWNuHcDbBAiAeGyxTg6OwzSdUsQetrXnqa7LkKHjnSQe/AmPT3ZMVPw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":675834},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"0ceae097e7338617999e7fb621282b5257c8bb6f","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"aitt-npmjs","email":"npmjs@aitt.nl"},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"10.9.8","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@terpjs/contract":"^0.1.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.1.0_1784812015796_0.1551824430273847","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@terpjs/react-core","version":"0.2.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.2.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"8a8776b15960eba2ca02d510f7888d128ffd2f41","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.2.0.tgz","fileCount":154,"integrity":"sha512-eDJ2dIMnlMj1laq3ukUqW6kFTxqtDy8yBB2RdRBQJeNemxIKJcx3s+sOdnNQqvjExO3ML5aHu2UEdU8lizDV7Q==","signatures":[{"sig":"MEUCIQCDjcbZJHKHZRadlGvg8ZlkOOPb0zK9vRi8TqLEpvvCuQIgFQllP4/tnfVRj8wEMJaF1acvr1Qu4P9/Ugh/80LBmwg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":679203},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"c492ff84c5ab07e6e55c62f31cff24dde90b6526","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.1","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@terpjs/contract":"^0.2.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.2.0_1785152304774_0.534316593008666","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@terpjs/react-core","version":"0.3.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.3.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"917456b7f9e8695497291cc6d44ebc49a58ba131","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.3.0.tgz","fileCount":154,"integrity":"sha512-zuvkRlmPSHJqUnWEX0VNiYDvLCE/q71nf/+SsP+P6LjLX68EybH2w7NWL0I+iba4WYoQ/om0ESop80YeTCObsw==","signatures":[{"sig":"MEUCIQCex87FWRMJanYFrp4fGjuxvAGd3SYfQMUFZ8f/8WMdYwIgJkkRP9nirVCKYaAD6qS9brNxlMEhksJ5vyHqncUiRJI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":679203},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"af90a473f501c4a22bcefc6662d4d23a3241da7c","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.1","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@terpjs/contract":"^0.3.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.3.0_1785160915734_0.49419538014920295","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@terpjs/react-core","version":"0.4.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.4.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"32f2758604bcdcd4e49dc3a57ad8fa6f34de23c6","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.4.0.tgz","fileCount":154,"integrity":"sha512-KwY8eOKqQXKuRsnMZKiKQrZj5KOiSUjGKsB34awbmYtX9fpBlCQoVxxIC2j0BFoKsERvxc804sgFhG3d45N2HA==","signatures":[{"sig":"MEQCIDErCOaoSOWis5zKV0jdNSRzz8Z5zda3r+D7gWxvWeg5AiAq9y5ua0ZXF0I9pVkF7PAWfgs9SW0HoopYduNiOfzZvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":679203},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"68294442ac109c898a1d17f5189c9b7c080118f1","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.1","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@terpjs/contract":"^0.4.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.4.0_1785330150358_0.13899975133401132","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@terpjs/react-core","version":"0.5.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.5.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"15a4ae89dd1caca27cd483e02b208a190517233a","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.5.0.tgz","fileCount":154,"integrity":"sha512-KF7hgM6+9NEDd+l+5bp+ODobEqJems7YHreK9oSkMM4y2lwp9jCmN/xghX0jax+YBu5f0lvIGugKnWpvsA/HQQ==","signatures":[{"sig":"MEUCIE20fVBPEBBdARqGxhA/0vdMACBa6U7POEUOtgXThWvQAiEA2f4AuBtDvocChQcSxAJg+06lzshAMQirFP5I5rYkSM0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":679203},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"073370b3daba71ec5f947b055d8a0348e3a4611e","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@terpjs/contract":"^0.5.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.5.0_1785417925005_0.27861595853135435","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@terpjs/react-core","version":"0.5.1","license":"Apache-2.0","_id":"@terpjs/react-core@0.5.1","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"b6bd74057479d8b65def45434915fd963952d296","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.5.1.tgz","fileCount":154,"integrity":"sha512-+APESurrkzc14mUC0x9EIUIKQAnsdHFQLlCnAiV/xRCRRdNpi1QxIcPWuNzVWgP7AGgnWSvCCXhkjQc8ONIcUA==","signatures":[{"sig":"MEYCIQC2xjz4/h2L5u01Lcu4EMziyjWoOoqL8EEdYMezRz1X+QIhAOABRJRKrlLRORfx5wKc8w6rsFYeNCJ94SUKhqyPXmNF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":679203},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"c6fc1a4a07f7c594df5f1f1a62133dfc8c5a7a2c","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@terpjs/contract":"^0.5.1","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.5.1_1785422180519_0.08555744642551133","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@terpjs/react-core","version":"0.5.2","license":"Apache-2.0","_id":"@terpjs/react-core@0.5.2","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"3a14b0117af2bc144df5381da7b47931c5409e90","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.5.2.tgz","fileCount":154,"integrity":"sha512-Fan1KnfD5aZmc4PT2OkxpqftkIvU2ZpyuZ3TuqqXUhr9X5QQQc+8U0JauhQGgsa74TGxNJGPAICGKA+RhIrqHw==","signatures":[{"sig":"MEYCIQDPbTzqbxLrUspK1LRvmWO1asYiksd+H4MvY7UEgqA3JgIhAKuBJtymZShWUZ71PJnLyqfzuqnjgnNqvj4aAlnsv+fP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":679203},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"e3ff3f0517f00fdebb3eaa8cc189324104b858e3","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@terpjs/contract":"^0.5.2","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.5.2_1785489689752_0.20751840412891287","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@terpjs/react-core","version":"0.5.3","license":"Apache-2.0","_id":"@terpjs/react-core@0.5.3","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"0c6f723c8f63e6a28d341cee7266cc46cfd87c33","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.5.3.tgz","fileCount":154,"integrity":"sha512-6hchEztp3mhfkAEdkZW//+TcEYO1LuXRZEW4Ba1IuXrYFVjKj/izALeaNcwB37v8flRQkcjYeODoCai4iW/fOg==","signatures":[{"sig":"MEUCIQC3JaRIZXvBn1zGUNNk2RgobXM/0i1a/N10ULmkKqfX5gIgVmCs8i91TAGKME7HLmtzoWZ1+GNZytjwDqfBg/34LrY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.5.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":679203},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"5b235f3bc9285c32a521dc7dc398b82c689e9965","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@terpjs/contract":"^0.5.3","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.5.3_1785499294494_0.19751933506931585","host":"s3://npm-registry-packages-npm-production"}},"0.5.4":{"name":"@terpjs/react-core","version":"0.5.4","license":"Apache-2.0","_id":"@terpjs/react-core@0.5.4","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"03497c76924309c57ce54bbe03c45c146077c66a","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.5.4.tgz","fileCount":156,"integrity":"sha512-ctiXc31FAYsKwZLQ8AIrcNBdjFbLtnVisap4DBcH+WLYp0NNb4uX7vDTGLziyjQR7OlqzDxn3jX82L6EDjtacQ==","signatures":[{"sig":"MEUCIQCghGwsUCLwtDnv8FrCvSqtPS/z2l/GmcB3hJAq/L1SKwIgLhL7tCMn8be5huiB6/+dBGC2PiHP6V/fr0yptW873Rw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.5.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":688333},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"49131e4e9592a1c6839e04f3d17aa4a2f6405256","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@terpjs/contract":"^0.5.4","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.5.4_1785507281960_0.05770834706270955","host":"s3://npm-registry-packages-npm-production"}},"0.5.5":{"name":"@terpjs/react-core","version":"0.5.5","license":"Apache-2.0","_id":"@terpjs/react-core@0.5.5","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"ad649bbac41c97b0982863d110109ab33f8217c2","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.5.5.tgz","fileCount":156,"integrity":"sha512-3FyFXZPX+gTLmSQQM2lm9zLugcsELWbSSqPKC5yVY+69or1dlp5DVvl8G6VNGhWPH6tG9rhdEwcJEJpFIy+BHg==","signatures":[{"sig":"MEQCIECYgcrU+caRyWPHOf5nsFatnRwZjPMq/gY8Cx0oYEnMAiBqht0KKVqG/1XSPJrCzFEbGFBZFcbSh8ZOAWuGUy6QPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.5.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":688333},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"c7c85c761a64ab85454b450a3cc127af4c45ba1e","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@terpjs/contract":"^0.5.5","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.5.5_1786450946739_0.6889660347783906","host":"s3://npm-registry-packages-npm-production"}},"0.5.6":{"name":"@terpjs/react-core","version":"0.5.6","license":"Apache-2.0","_id":"@terpjs/react-core@0.5.6","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"9409bf91687f455151fc3272f701b326d6509c8f","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.5.6.tgz","fileCount":156,"integrity":"sha512-GmC7/3XBfFr+UP0xZhbj4Sg3zCHN53lwBLRPwXbDBQfVdbDPy9fRED8uhGENBUp1aajB96xW7DrK/8s3PCPm9g==","signatures":[{"sig":"MEUCIDX3x911sTNn1h+KCOiKgw2qmIsOSMS/Mzae4WUVW2YZAiEA79yGbsN1nhLiNGopFOj4/TDBF40jJsM5fJ9lI48/muA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.5.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":688333},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"4c5b9d71d2372958ffb35e3e04ef3e1136211a5a","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@terpjs/contract":"^0.5.6","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.5.6_1786527938420_0.8578507115637282","host":"s3://npm-registry-packages-npm-production"}},"0.5.7":{"name":"@terpjs/react-core","version":"0.5.7","license":"Apache-2.0","_id":"@terpjs/react-core@0.5.7","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"816cdea87caf04239eb7d0d03d9baa86b67df072","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.5.7.tgz","fileCount":156,"integrity":"sha512-asu4xTCQmjqqegNZbbkCgr8MRRDU6TLRbrDUL1h8yve6Gimux0q6FG2kAWMxBrQTXzHr0kNFEDPHrWkCykWNiQ==","signatures":[{"sig":"MEUCIQDa7R8ncrq5E+A9Rgm+2GOtjvkkqNAFaJHh1kh1Fqyc+wIgJnpcW+OwN/oyG1f2IowFXr3gkmOG0tNkeHMBuhaG/sg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.5.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":688333},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"112a8c1c69184e216585b035a8adfb0606bcb762","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.5.7","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.5.7_1786568238126_0.06348767022867108","host":"s3://npm-registry-packages-npm-production"}},"0.5.8":{"name":"@terpjs/react-core","version":"0.5.8","license":"Apache-2.0","_id":"@terpjs/react-core@0.5.8","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"b601649b07cb7772e99480f2b618e53d0b2c298a","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.5.8.tgz","fileCount":156,"integrity":"sha512-QuJt7VEcnEVouH7Lwwnc1QxN49wwFkBkP9xwQL+pLSPEmpGj/6zayGP+t9LJvaBR4fzvBNEBU2iLs6O96leSvw==","signatures":[{"sig":"MEUCIQCX/cgeD/WGlN1J02+RM5783rNVh0NjkbnrO47coKaxDgIgHNMwfkrOJSuylJFgpCBKPjDhqjsSd18MRX4xV4jH26k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.5.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":688333},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"c4e4015d5084762ef8475c5beaa8cb4ede97f977","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@terpjs/contract":"^0.5.8","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.5.8_1786625162418_0.8899785832195679","host":"s3://npm-registry-packages-npm-production"}},"0.5.9":{"name":"@terpjs/react-core","version":"0.5.9","license":"Apache-2.0","_id":"@terpjs/react-core@0.5.9","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"1a6907739ed8d91b668376f1d5353b781b1064e0","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.5.9.tgz","fileCount":156,"integrity":"sha512-VvOSj/YafA84I5kkTijzZkIZZ8UVw8qDo+tiv2xT5dvylDnkpj4YXqPkJKWpLzah9xq0Lr8yVWyjNIyO8RMY9w==","signatures":[{"sig":"MEQCIC0aLzKCyEcqMxNu9TJLeMBJAR3Ow2gm2ICmHwfX4cptAiA04O/KypPwe/58utx9iTBJ2eGODf/pv6w0Z5CkRxXeBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.5.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":688333},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"4d3a985defa08e00eda9a88ae049e3bff132afd5","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@terpjs/contract":"^0.5.9","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.5.9_1786639867377_0.6731130202671585","host":"s3://npm-registry-packages-npm-production"}},"0.5.10":{"name":"@terpjs/react-core","version":"0.5.10","license":"Apache-2.0","_id":"@terpjs/react-core@0.5.10","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"1ddc3a1db2b1a8a38ffad946ea9318b18031fe80","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.5.10.tgz","fileCount":158,"integrity":"sha512-SwNO4NPDRxmKUWQsFLg3EKM4frua0PlijvvcvXlus8VZ3+fHMKnIaCKvMFg3mYk6vhHuGgGDUuhGVGZ1X9T43Q==","signatures":[{"sig":"MEUCIQDOafkNQAn9Hm6/sg5AQ5CojcF0BAfifReI0pz6FU/SVgIgC8xZ+dRG0xe0oFP53AG2XTfdSkNLG4wmdN1U7gBlzHg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.5.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":706317},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"2b5ecb78056f2dbebd5448022de6b8998efb5b95","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"@terpjs/contract":"^0.5.10","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.5.10_1786700704056_0.6205588226270389","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@terpjs/react-core","version":"0.6.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.6.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"74484f295fc1c0f6b325813bfd2cbded686986f6","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.6.0.tgz","fileCount":159,"integrity":"sha512-bFeH4pTKvw2mobA9PgLgG66BWYqjmG20Pw2gr1/eDU3emwKIPtRhNTskYjUvwvtixELo94CiGJkwxawX2w8jzQ==","signatures":[{"sig":"MEUCIQCsUduLX0DG+SzJlg+3XAt80JUSdzcBDXw0CLisZsmZCQIgDf/PTeOin3VWrTwakQveyfPkIFOVkV2nayYD8Qnr4Jo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":719925},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"4ef4c2ceb4289c689678a468ab292f4acde39486","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.6.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.6.0_1786708741692_0.5294485961241491","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@terpjs/react-core","version":"0.6.1","license":"Apache-2.0","_id":"@terpjs/react-core@0.6.1","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"2afd80899deb67ebde745860a6f4ef7945b5a33b","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.6.1.tgz","fileCount":159,"integrity":"sha512-AjbCZwXq8bO3P5mn233jjqjAmUbkuLOK8RQLTMfb53zfdefrO0W7oRURcnTOKcY8vOEQ9EOOlkzwDreYdwIZjw==","signatures":[{"sig":"MEQCIAIg7T3jYnn9IwaXxYBRfo4HEyLaFWgEhU6wYrSmtuoGAiA2X3+XVt6U/QmHpdqQCxbiWkvskqV+8tgHvmlRowzeag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":719925},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"cf6cd8585afc2377ad588916fa2a65252efe10e3","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.6.1","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.6.1_1786722794725_0.050944119257064324","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@terpjs/react-core","version":"0.7.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.7.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"a28b82322a76522a8d7043e48fcdd46f2509f4d9","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.7.0.tgz","fileCount":161,"integrity":"sha512-6vHQhzDfQ7Xr+1KFcFObJK1h95S7kK76ery6mIJFIDruSqCJMLeyDa/pdT3cgbWMwvDfVAkTgE4FiDNThQpXPA==","signatures":[{"sig":"MEQCIHqAvsiBc6ASBLRTQn44wLf3cNHNFlv/LxlrUelb/oGaAiAIgmULEOQgmIf0Z72grkU97b+6zYy5+/6RZgplHUOXOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":741663},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"9a29dd0bee9af462122a35f19bf900c6b63bd268","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.7.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.7.0_1787041385072_0.7561801325540021","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@terpjs/react-core","version":"0.8.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.8.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"abb88ec63c7218269270540b45b8fc89df48cb11","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.8.0.tgz","fileCount":160,"integrity":"sha512-Zzfz7iwzd7H0cVbbUJXlQu06jf4sehyFpcfR4BXCxTJndBT2HCRivvuDIxa0ubBZWz/giB0WfsU0mLPVXs+UFA==","signatures":[{"sig":"MEYCIQDD3dOP1x4Lnwv/eNUTl9AvNzMGdaf2HTUJAfEoQ5G75wIhAOZsdxqEHyfTsSJHS/TvkqNIg0Qz12OMefNFE8K7x1sb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":933630},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"2eb60bce2996f686d1ac0f46bef79b1cd16d8b9d","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.8.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.8.0_1787233199499_0.7324817365933645","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@terpjs/react-core","version":"0.9.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.9.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"12d7a7b41a337dc1c9f98b16c3a97cdaf2f7d35b","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.9.0.tgz","fileCount":163,"integrity":"sha512-YBwr8fsGZVXrt33cME+qrOe3nrxRkpmadrU5hEgyRLpJxkrGcLMjIW4x+mCx1zqFWgunbgzOBr8MC4PVSue/bQ==","signatures":[{"sig":"MEUCIFJymQmYSFGNxAiEsyp1uhiDFIDc1PsDur+6hdY3QGvvAiEAoxbNHIbL7J2/puWPIsA1EMaKfC4ph7y3T2nTrRrqlQ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":988445},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts"},"gitHead":"dd9a1872ffa6ffb26bf1f7f0f518dd6aa811aead","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.9.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^18.3.0 || ^19.0.0","react-dom":"^18.3.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.9.0_1787314082614_0.7971518459092779","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@terpjs/react-core","version":"0.10.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.10.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"77c01236929439ee1007e485197d37270366e7d2","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.10.0.tgz","fileCount":186,"integrity":"sha512-g4+GTtu3cWBgguE/vcWNguqxbSNVpe/B5BYr1rbZ+vyx+fczGnO8vLcvR7+9cvjEBaq63HwwMiaj2qVZDBD4DA==","signatures":[{"sig":"MEQCIDNJSpz0ZoNuxa9bEd6MCI6Dpt1cOrIPtbjgxkK7cYqJAiBdcF1RVWQNsxtPW/yZtWUboiVW06Iz7wqYbx+7pEd3Aw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1511071},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"908b3066259c1e14ce7e3dd16fccf6444f2dd754","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.10.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.10.0_1787653022830_0.8692494861027915","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@terpjs/react-core","version":"0.11.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.11.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"49573ca6eed56bda96d7634555872c25fe4fbdc9","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.11.0.tgz","fileCount":188,"integrity":"sha512-XgIflDETQzvxN5IJIdz77F61s+Vt2OYmb+uwKfoBhg7F0+jtI5/I8WDHYq8qaqFQAsBztwO2ZckvXLRDm9Oq6w==","signatures":[{"sig":"MEUCIDgfGO9Ffa1fU0RLA21wmBLiiIXPPpB3bj6wJ6gBeOAYAiEA4HkbHax7IRtAK+vUeMw+cYfyD/cUax6wOJAkcqTixpw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1556756},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"e6e50668354f459c0c8ccbe3b2b1f59d1d4ef93c","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.11.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.11.0_1787695118587_0.5436998412085357","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@terpjs/react-core","version":"0.12.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.12.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"38c46519c802db70105bf9a3247eb115e21b6f65","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.12.0.tgz","fileCount":188,"integrity":"sha512-w0BMNWE6SKoNXxV3mjEepLm1J1jII6crRt+2zlarNUNwXa8riX3wrjeTg3yNMlRhNsVDn3ESPrTpg/KiHmOuYA==","signatures":[{"sig":"MEUCICWoTjKaFZ8ZcpWbqBW/AjmezaZO7ns0XVAM8zuxO2zXAiEA0Vpr5VFTwXA8t3KENpdsyHOE4q4XK75L4K4skMc5NXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1578053},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"944de8b057fa2143eb4d9f827f35125012668e55","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.12.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.12.0_1788078656173_0.33895052763687206","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@terpjs/react-core","version":"0.13.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.13.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"6acb6787dfbde1c5be58ea2f26ddb410261f0f6a","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.13.0.tgz","fileCount":188,"integrity":"sha512-WDO0OXZGCls4W7FQCdmmpgKAw0ciQPt7YJt1+ppEDwsryqfBephOozCRjh9kW8UjV5VCYiTqDmslK0vaysBJiQ==","signatures":[{"sig":"MEUCIASN5LlCFbbiPQwlmcRDs5ifEb6AyokJXosBHpSTbKEMAiEAtsA9l1mhC5qGN8W4OMcwaEbMEhNnIfJ/KwUSPO0yrn4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1578053},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"621d491621b42f993edb34e9161143ffdc8778a2","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.13.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.13.0_1788184917724_0.8216724957996127","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"@terpjs/react-core","version":"0.13.1","license":"Apache-2.0","_id":"@terpjs/react-core@0.13.1","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"3073374e7a305fbfe9bbd128d67d8f3042ee1d93","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.13.1.tgz","fileCount":188,"integrity":"sha512-Raa9cPyYEFkvtUfYtgUoyoNSvVIBs/Tft8Hnvz99INVqnHM14pnk7AQJ6K8+aUhcSU76ro4y1vXWoFG9/EK3eA==","signatures":[{"sig":"MEUCIQDWpSfpVqFIBC8KSr+iA4WH9KHmsMrU0ztV6uUbVzif6gIgSvXZ8aRnBZIObUg4zkh933ReBgiliuiHYsuy4M32C54=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.13.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1578053},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"c8b4219d617bda8a9a89c88a1bd9ca52e810cfaf","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.13.1","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.13.1_1788216500233_0.24977346445184279","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@terpjs/react-core","version":"0.14.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.14.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"78d522f25fbdb2fc0a50116de5fcf67773fd599a","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.14.0.tgz","fileCount":188,"integrity":"sha512-a4VBcQhxM/Eg8qWufp6sM9TgBSK80AUmrqI9ehzlo+JupofEUEkptEP1CQAEjuiUuNLVHoB5i93E++LRtNfsMg==","signatures":[{"sig":"MEQCIEgEdbLmaPh6QQ7pfPSxlE1JsExpd05h35/d6D8gNiiAAiBLqBz35vI6J+4dOdgwieCYuqrrRsJ9YjGIGM1hkt/alg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1645638},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"d24ef6b38f067a3b8246df7d0a6282b30b78f417","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.14.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.14.0_1788289966799_0.11799770534278786","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@terpjs/react-core","version":"0.15.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.15.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"8e2fadb3c105191ea215b9f16260c86b191c3670","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.15.0.tgz","fileCount":188,"integrity":"sha512-uot73YDGGFpWQY+uxAjtX9GBa8oeRMWsFGGuZPCdA0C00RowiuuFvjz+4SdnmVADPQMASEPEw4LbHJSQNirIxw==","signatures":[{"sig":"MEYCIQCG4+WAdnwTveZjJ6PwwQtBWXITM2yUqUE/1O6L8jjpbgIhAPbNMy4bq7a5o8l9/tvNntVd2BPN+gzljuxsxEG+Eu3a","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1645638},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"9768dbaf8a0652fb63196766259a12be5b9c6fd8","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.15.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.15.0_1788354257782_0.10898192821812147","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@terpjs/react-core","version":"0.16.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.16.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"504893856cac4a8e1f38b7964943bc33a8fb7cc3","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.16.0.tgz","fileCount":188,"integrity":"sha512-aNkC0us0V1kEY1iH9E3FZsP4UByA4136rNCx38ih5Zn3R00VPyIo7MWn1u/IvgUI0w0WpHh8lGcM3LFff99C+A==","signatures":[{"sig":"MEYCIQCfS0KxasqhT2q9bWeq5byiMCZoj2mE5f+mUVXMTsCG8wIhAPStgrLJrMLULlPqVjAVD5HPsGVSH/apQyqOnYzl/jXi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1645638},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"077086aeac6af3abbe4ee9c29e77fca3e5349f52","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.16.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.16.0_1788436467521_0.6833580505141492","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@terpjs/react-core","version":"0.17.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.17.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"b00ed5f31ff4ed33fea2ea5902540e20ee285b10","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.17.0.tgz","fileCount":192,"integrity":"sha512-Bp5R2Ho/HYdp9wpnCEgZXOnMcWlm0SHXEUC2ng/q1qrybEDOscm08UwBDovgSQ2E6RssgNnF6lTiIAV56bcFjA==","signatures":[{"sig":"MEQCIFY2Dv0A+ez+FZw9co17AEDwR18l901jPS7ETk3aHyCwAiAtmd8VyTjJ+NIw9Caaxj87S2MvuOwGADnod/PBVkA6Jw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1722630},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"4da4ea3275724886d08408b575725901f71428a6","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.17.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.17.0_1788556140002_0.25721861391596224","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@terpjs/react-core","version":"0.18.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.18.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"6732b13d3c8fc60aff3c299360e3411cff97b26d","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.18.0.tgz","fileCount":192,"integrity":"sha512-DraOw7j2TbKMZGbyFFnKDANOViqs+n4In+s4E7pXBdk2OajPewUEe2+CIDX+MCW0oA2UYPOCGiQsULSO2lWm5w==","signatures":[{"sig":"MEYCIQDGaCWnrRLWxiSpsQCCd5XjSo0nNkmliEPRQR9iRswXDAIhANqtBzFmNCSQWSWRUSNjLkc8+w9ofmfy26CNvwxEUNt3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1724579},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"20b25706b74432167b11ed0dcce2a9ed58b6602e","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.18.0","@tanstack/react-router":"^1.170.16"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.0","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.17","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^6.0.3","@testing-library/react":"^16.3.2","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.18.0_1788690825434_0.3447032403851191","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@terpjs/react-core","version":"0.19.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.19.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"58808b499f8f05cc3f7ebd330e84927cce13b730","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.19.0.tgz","fileCount":203,"integrity":"sha512-k/qyDMdBNEH3+McTN319m/oMfpiK9ktrbZJ0IV1WX4hnjjTzu6Mv72oR1UIPmSbwskxNtwG0BVhAnfQORviZZQ==","signatures":[{"sig":"MEUCIB31FPDQcTyoKcPnR3+X/1L4/Iik7p7NC1zm4ppCwMDrAiEAsGSskNj0uGeoqUK3CtotoOe8afE3y9RSAt+bckK1Tqw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1844598},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"40d6bd195f37399285620de28f3db83048a158ce","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.19.0","@tanstack/react-router":"^1.170.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","jsdom":"^29.1.1","react":"^19.2.7","vitest":"^4.1.9","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.18","@types/react-dom":"^19.2.7","@vitejs/plugin-react":"^6.1.1","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^6.9.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.19.0_1788863486414_0.8246483271753333","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@terpjs/react-core","version":"0.20.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.20.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"fdae8a40db99dcc76ae9fd014b59472c9037ff94","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.20.0.tgz","fileCount":204,"integrity":"sha512-EUlMkui0RyxKllUT7KqT8fOAnBLhDPv6e0wGIyeb48OPu8xU6eH9Zig4zX1bD0nO+gV7sJrmpI6T/cipeMjS4w==","signatures":[{"sig":"MEQCIE2gT9lSmucrVd3sDBBYx6HiHxLT92DCvawwGGzjn7ZwAiAxPXiQaxKHb35iLzkHIax/3vNEta4lEOnBBLzJ39Pmww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1850712},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"71e77990bb51251deac38f7ed80cbd05b6f89533","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.20.0","@tanstack/react-router":"^1.170.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","jsdom":"^30.0.1","react":"^19.2.7","vitest":"^5.0.0","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.18","@types/react-dom":"^19.2.7","@vitejs/plugin-react":"^6.1.1","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.20.0_1788903303787_0.9835466858129314","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"@terpjs/react-core","version":"0.21.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.21.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"914d792c16d004d127becc4f58938c949758c58f","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.21.0.tgz","fileCount":205,"integrity":"sha512-T1ROJcE4Wq3W0QSi2mxBiBXsIExQqmQvdvmPpMUBRyMz3a1Ls1vA1mFY+k+KWOeEAi2hT+6/E4t1NN1cAQkJfg==","signatures":[{"sig":"MEUCIQCrwW0kWa4MGpmyejwxeoNaUPLpX9sUYFiGrXlofYSVQgIgLRGHh1Eibj69L7XJ/rDcewQ04b7wUwwT3fa0t+swt74=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1861194},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"72727ef6fac11e05599d3b9829659e5e0647fd1a","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.21.0","@tanstack/react-router":"^1.170.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","jsdom":"^30.0.1","react":"^19.2.7","vitest":"^5.0.0","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.18","@types/react-dom":"^19.2.7","@vitejs/plugin-react":"^6.1.1","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.21.0_1789028197647_0.5614354580865999","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"@terpjs/react-core","version":"0.22.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.22.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"610c5eace468f4e62f0c7118d841c666f4431b64","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.22.0.tgz","fileCount":208,"integrity":"sha512-n7ZioBAIVs3/VUZ/TjBfQ0KswiCheD8v8PbYLfmxqy+rftudiOp0Z3JhSwERZLdoSFEV0JeyDJgE2axirL7EGw==","signatures":[{"sig":"MEQCIE8uYKf/lx7bPw9IJfsS4aTAJH5r5T17xrl9WxZwKkrTAiBI8P/BClqc3XzZTv2QlRkX5DV58w9CDb2jOT0YGfInjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1880405},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"446872f6d8152df5d0454ca025d9ed2ee5f97109","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.22.0","@tanstack/react-router":"^1.170.32"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","jsdom":"^30.0.1","react":"^19.2.7","vitest":"^5.0.0","react-dom":"^19.2.7","typescript":"^5.9.3","@types/react":"^19.2.18","@types/react-dom":"^19.2.7","@vitejs/plugin-react":"^6.1.1","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.22.0_1789070384387_0.17185821688360825","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"@terpjs/react-core","version":"0.23.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.23.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"a5ff3d69ca6e729fdebe3e6a2fe0b9e3f020f5ab","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.23.0.tgz","fileCount":208,"integrity":"sha512-5WhkYZB/1lrW0hgzQ10Iu5dsa1G1tO58pzioctercsQfU+NMHhuok4SNeMmZyP+ZHUJ6GbeEyLPhwrJ/hWqZrA==","signatures":[{"sig":"MEUCIQChCiAnOomT0mHId5S0gvsA8Pe8PKulpbryayUhuLKtEAIgJS/vyitAfvlscXlANPi9myfvi9nyEfqw57Q+hJlYs8c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1906726},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"cc35a287b51688ef36d5893a4c48c29a5b5d3f78","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.23.0","@tanstack/react-router":"^1.170.35"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.3.0","jsdom":"^30.0.1","react":"^19.3.0","vitest":"^5.0.0","react-dom":"^19.3.0","typescript":"^5.9.3","@types/react":"^19.3.0","@types/react-dom":"^19.3.0","@vitejs/plugin-react":"^6.1.1","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.23.0_1789557151285_0.17897745766504425","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"@terpjs/react-core","version":"0.24.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.24.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"ce5d8366756700fb3b1ace4e2e1f5e764e4c97fc","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.24.0.tgz","fileCount":208,"integrity":"sha512-HBxbaPkeKTmSXuDsNgsAjd45EqtLR9HXZIyj/Me9GCPsrspj8Wwn+E0lfmg1bcVl0u0e15IjrgXkKcXOWQN9hA==","signatures":[{"sig":"MEUCIFjg3VmOiVOTAa8QHWzMZzG4WF9VXQGMyZlh8tHF+RjKAiEAoAB7e7XXbellDoSLGsH5fCYUrjuZvkvgPkv48/c1ai8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.24.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1906726},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"308edecb5e05274b6ef4601d7896c9d802aaab3b","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.24.0","@tanstack/react-router":"^1.170.35"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.3.0","jsdom":"^30.0.1","react":"^19.3.0","vitest":"^5.0.0","react-dom":"^19.3.0","typescript":"^5.9.3","@types/react":"^19.3.0","@types/react-dom":"^19.3.0","@vitejs/plugin-react":"^6.1.1","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.24.0_1789642105025_0.7747829630111935","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"name":"@terpjs/react-core","version":"0.25.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.25.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"e566970f275fe72e2cce6246c05200cae9f0ac6b","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.25.0.tgz","fileCount":208,"integrity":"sha512-L2mJz9a77QZyhVQj//7jAFCIzXZq2+5+Izl4nzPZLYZq8TC3UNwEFHkUZAbspR68tYR2usiFooWwOL1A+IY2Gw==","signatures":[{"sig":"MEUCIQCpyPHmSQzf+GPoinit1z0EPo1Qtf5jLpHYOLLF9u7XqAIgalbIK2xXb8NCKWhWbfYlTPH1E+MDbb6k6q7QEgDx+e0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDlvenJNN83mmMYiknykCypWZ6TGoXMTIvJ6yOzHv0WNwIhAOKhkQW8VOmAYhpvj9aVynRp1B8naY9rVT0a2T9JZgoI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.25.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1934344},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"fd776d468d952dd5ef6a9f8f6b0f2283e1bc5913","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.25.0","@tanstack/react-router":"^1.170.35"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.3.0","jsdom":"^30.0.1","react":"^19.3.0","vitest":"^5.0.0","react-dom":"^19.3.0","typescript":"^5.9.3","@types/react":"^19.3.0","@types/react-dom":"^19.3.0","@vitejs/plugin-react":"^6.1.1","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.25.0_1789847705719_0.694518965449276","host":"s3://npm-registry-packages-npm-production"}},"0.27.0":{"name":"@terpjs/react-core","version":"0.27.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.27.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"c8cdf8d850f0986b5cfa874404633d96c70a0f02","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.27.0.tgz","fileCount":208,"integrity":"sha512-IMqTenDrA+ufT+VqsN6nfNud0nBpci6oXFXGgpsGpuQ1016ticCHnP5WOEzxIrevEf+pa5JhWTsR8TB0gmJurQ==","signatures":[{"sig":"MEQCIG6eZDc1kpI8pC39gNqQyJyyIiVC88ossg++dWAYcvcIAiAoQAXOZIsfbQMG53KkQSXbLGMm9EHhc3DbpBjq5cJuTw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC7obPzqeRPjRdAYo3yUge1WmkwIoS9yr7ty2qZlE5jZAIhANbN1/i8oihSC55F2TAKNU6KX/whx/EqAWYQpKxl5p0N","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.27.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1943225},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"36f3bcf14bcb85262f27f498bfe4ef3a8e92e47e","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.27.0","@tanstack/react-router":"^1.170.38"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.3.0","jsdom":"^30.1.0","react":"^19.3.0","vitest":"^5.0.0","react-dom":"^19.3.0","typescript":"^5.9.3","@types/react":"^19.3.0","@types/react-dom":"^19.3.0","@vitejs/plugin-react":"^6.1.1","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.27.0_1790263959122_0.4543838490188328","host":"s3://npm-registry-packages-npm-production"}},"0.28.0":{"name":"@terpjs/react-core","version":"0.28.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.28.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"b28e1699cc979587a7778d870556112e33ebed62","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.28.0.tgz","fileCount":214,"integrity":"sha512-4IIUJMhLk0LxpmJCObJ7qgME1uLlP5KMOQOyboaxLAXYNE2NmXCkJwoZfbVYAhIYH99ncmXkMJDtG9lDMrJgrA==","signatures":[{"sig":"MEYCIQCxFKRalokw/QgNs7JGHf3+0pg+HOGcr0jjFb45XI3ngQIhAJRH6HVyrcKZfqJmhneViCuCJ6iJ0sjeDVTjCDgW2GIe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGUHbaq+keVyEw3hjD0kx6fmDZ0oUtmtMbUOjvYdykrkAiA4gwt4T0KR1pcxOXuIvvIH5ueJjiG4EQZ/z0nV139BqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.28.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2063920},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./testing":"./src/testing.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"5e7bccd43afdb51b8f1e9b006a3bd01ca7d1a99e","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.28.0","@tanstack/react-router":"^1.170.38"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.3.0","jsdom":"^30.1.0","react":"^19.3.0","vitest":"^5.0.0","react-dom":"^19.3.0","typescript":"^5.9.3","@types/react":"^19.3.0","@types/react-dom":"^19.3.0","@vitejs/plugin-react":"^6.1.1","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.28.0_1790603906099_0.4059746246114879","host":"s3://npm-registry-packages-npm-production"}},"0.29.0":{"name":"@terpjs/react-core","version":"0.29.0","license":"Apache-2.0","_id":"@terpjs/react-core@0.29.0","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"homepage":"https://github.com/AITT-NL/terp-framework#readme","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"a46c1b3aace22f702a20a5347bacc70b29435d8c","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.29.0.tgz","fileCount":214,"integrity":"sha512-YV6HQ4TnO8MFxjNZTxkWotU0JNsMjgYAoONZLcPh0Z5DLWdgupBrXXGDTPbkTbHADOdekuaQvoosjX8WPHIaxg==","signatures":[{"sig":"MEUCIQCCLRUQJ4A0IbWG2nye9ky/rRvsngEIG3JBrmc8OC1ypQIgUCVilReLjc6IoO6KDTgZZOIrMleB3cmJn9WLyZOQkqU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHhAR0oAWkiY0yPYysJLsA4Tj+OvIf0NSdBMCxIXpLaHAiA+UYWGFQ9rCXeG1OVmsn321rS27a7cWnZAg8/wfupHJA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.29.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2081840},"type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./testing":"./src/testing.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"5012749512add64a92e7c6c96791a9a305d2e2cb","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"@terpjs/contract":"^0.29.0","@tanstack/react-router":"^1.170.38"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.3.0","jsdom":"^30.1.0","react":"^19.3.0","vitest":"^5.0.0","react-dom":"^19.3.0","typescript":"^5.9.3","@types/react":"^19.3.0","@types/react-dom":"^19.3.0","@vitejs/plugin-react":"^6.1.1","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-core_0.29.0_1790628678985_0.8406748954685548","host":"s3://npm-registry-packages-npm-production"}},"0.30.0":{"_id":"@terpjs/react-core@0.30.0","bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"dist":{"shasum":"3f972386c7e329c6ae10bceda8baa809cd23357a","tarball":"https://registry.npmjs.org/@terpjs/react-core/-/react-core-0.30.0.tgz","fileCount":214,"integrity":"sha512-TCvyXXKDqG/DwiR8FZx9+pkZPVVHc1LKtwtd2JePpUDTfvfrVokhe/4SDgpkW77FPaGyOThJ8ZPUsTTjHBaEuw==","signatures":[{"sig":"MEUCIAtxsWkQxOZzQvsx5cigimv5xi1612L7J40uEkcIyuWlAiEAs4mCOXLfWHXvYeGheU5h+5q570f7jUCZg2PDZZho69w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHSGN+O+ESJzQN9jkXVhfEJq6gM5cGWDjqY5BtSNrJ4uAiEAzGqKDvR36STCdnswcFxyIlC/3StOlrf1mA8WwplGPXU="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@terpjs%2freact-core@0.30.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2086872},"name":"@terpjs/react-core","type":"module","types":"./src/index.ts","exports":{".":"./src/index.ts","./testing":"./src/testing.ts","./layout.manifest.json":"./src/layout.manifest.json"},"gitHead":"72c2b6e06f84a59ad8248e79b17514a7e2c5ddb0","license":"Apache-2.0","scripts":{"test":"vitest run","typecheck":"tsc --noEmit"},"version":"0.30.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"8049be29-def5-44e8-b9da-ca9dab6b7d40"}},"homepage":"https://github.com/AITT-NL/terp-framework#readme","repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"_npmVersion":"12.0.2","description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","directories":{},"maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"_nodeVersion":"22.23.3","dependencies":{"@terpjs/contract":"^0.30.0","@tanstack/react-router":"^1.170.38"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.3.0","jsdom":"^30.1.0","react":"^19.3.0","vitest":"^5.0.0","react-dom":"^19.3.0","typescript":"^5.9.3","@types/react":"^19.3.0","@types/react-dom":"^19.3.0","@vitejs/plugin-react":"^6.1.1","@testing-library/react":"^16.3.3","@testing-library/jest-dom":"^7.0.1"},"peerDependencies":{"react":"^19.0.0","react-dom":"^19.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-core_0.30.0_1790935113214_0.9055409072889198"}}},"time":{"created":"2026-07-23T13:06:55.686Z","modified":"2026-10-02T09:58:33.676Z","0.1.0":"2026-07-23T13:06:55.925Z","0.2.0":"2026-07-27T11:38:24.947Z","0.3.0":"2026-07-27T14:01:55.904Z","0.4.0":"2026-07-29T13:02:30.541Z","0.5.0":"2026-07-30T13:25:25.188Z","0.5.1":"2026-07-30T14:36:20.692Z","0.5.2":"2026-07-31T09:21:30.070Z","0.5.3":"2026-07-31T12:01:34.653Z","0.5.4":"2026-07-31T14:14:42.093Z","0.5.5":"2026-08-11T12:22:26.886Z","0.5.6":"2026-08-12T09:45:38.594Z","0.5.7":"2026-08-12T20:57:18.279Z","0.5.8":"2026-08-13T12:46:02.559Z","0.5.9":"2026-08-13T16:51:07.529Z","0.5.10":"2026-08-14T09:45:04.257Z","0.6.0":"2026-08-14T11:59:01.838Z","0.6.1":"2026-08-14T15:53:14.866Z","0.7.0":"2026-08-18T08:23:05.227Z","0.8.0":"2026-08-20T13:39:59.644Z","0.9.0":"2026-08-21T12:08:02.833Z","0.10.0":"2026-08-25T10:17:02.990Z","0.11.0":"2026-08-25T21:58:38.746Z","0.12.0":"2026-08-30T08:30:56.328Z","0.13.0":"2026-08-31T14:01:57.941Z","0.13.1":"2026-08-31T22:48:20.386Z","0.14.0":"2026-09-01T19:12:47.008Z","0.15.0":"2026-09-02T13:04:17.932Z","0.16.0":"2026-09-03T11:54:27.659Z","0.17.0":"2026-09-04T21:09:00.222Z","0.18.0":"2026-09-06T10:33:45.588Z","0.19.0":"2026-09-08T10:31:26.624Z","0.20.0":"2026-09-08T21:35:03.939Z","0.21.0":"2026-09-10T08:16:37.957Z","0.22.0":"2026-09-10T19:59:44.560Z","0.23.0":"2026-09-16T11:12:31.471Z","0.24.0":"2026-09-17T10:48:25.169Z","0.25.0":"2026-09-19T19:55:05.824Z","0.27.0":"2026-09-24T15:32:39.218Z","0.28.0":"2026-09-28T13:58:26.242Z","0.29.0":"2026-09-28T20:51:19.103Z","0.30.0":"2026-10-02T09:58:33.340Z"},"bugs":{"url":"https://github.com/AITT-NL/terp-framework/issues"},"license":"Apache-2.0","homepage":"https://github.com/AITT-NL/terp-framework#readme","repository":{"url":"git+https://github.com/AITT-NL/terp-framework.git","type":"git","directory":"packages/frontend/react-core"},"description":"Terp React stack core — typed @terpjs/contract client provider, auth session, capability gates, TanStack Router adapter, app shell, page archetypes, DataView and token-styled UI primitives. First frontend stack; see README.md for the component catalog.","maintainers":[{"name":"aitt-npmjs","email":"npmjs@aitt.nl"}],"readme":"# @terpjs/react-core\n\nStack A (React) of the Terp frontend contract: the provider/hooks that wire a tree to\n`@terpjs/contract`, the auth session, the app shell + TanStack Router adapter, and the\n**token-styled component surface** every app module composes its screens from.\n\nThis README is the catalog of that surface. Everything listed here is exported from\nthe package root (`import { … } from \"@terpjs/react-core\"`), except the test-setup helper\nunder [Testing components](#testing-components), which has a subpath of its own; each export\nalso carries JSDoc, so your editor shows the same guidance inline. **Never deep-import** from\n`src/` or `dist/` — the boundary lint (`@terpjs/eslint-boundaries`) refuses it.\n\n## Conventions (the lint enforces these)\n\n- **Token-styled primitives only** — raw `<button>` / `<input>` / `<select>` /\n  `<textarea>` are refused; use `Button` / `Input` / `Select` / `Textarea` plus the\n  higher-level form primitives (`Checkbox`, `RadioGroup`, `Switch`).\n- **Generated client + sanctioned realtime only** — raw `fetch` / `XMLHttpRequest` /\n  `WebSocket` / `EventSource` / `navigator.sendBeacon` are refused; use\n  `useTerpClient()` (typed from the backend OpenAPI) and `unwrap` for request/response,\n  or `useRealtimeChannel()` for typed SSE/WebSocket subscriptions. The hook mints a\n  one-use connection ticket through the generated client; bearer tokens never enter URLs.\n- **Design tokens, not inline colours** — style with the CSS variables from\n  `@terpjs/contract` (`var(--color-*)`, `var(--space-*)`, `var(--font-*)`). The full list,\n  with each token's per-theme values and the foreground/background pairings the contrast gate\n  enforces, is published as `@terpjs/contract/tokens.manifest.json` — read it rather than\n  inferring names from the compiled sheet.\n- **The accent is two tokens, and mixing them up is a contrast bug.**\n  `--color-brand-primary` is the accent as a *filled surface*, and the only thing that may sit\n  on it is `--color-brand-primary-contrast`. `--color-fg-accent` is the accent as *ink or a\n  boundary* against one of the app's own surfaces — accent text, a selected-tab underline, a\n  focus ring, a checkbox's `accent-color`. One token cannot do both: in a dark theme the\n  surface use needs a value dark enough to hold a white label and the ink use needs one light\n  enough to read on a dark canvas, and there is no value satisfying both.\n- **Static user-facing text is cataloged** — use an `{id, message}` `UiText`\n  descriptor for text props and `<Trans id message />` for JSX bodies. Plain strings are\n  reserved for dynamic business data, identifiers and product names. The boundary lint\n  refuses bare static copy and checks every id against every target in `frontend/i18n.json`.\n- **Dependency-free UI** — react-core ships no icon/toast/i18n libraries. Glyphs are\n  inline SVG; transient feedback goes through `ToastProvider` / `useToast`.\n- **Security defaults** — `dangerouslySetInnerHTML` and the DOM HTML-injection sinks\n  (`innerHTML` / `outerHTML` / `insertAdjacentHTML` / `document.write`) are refused\n  (render text, or use `Markdown` for rich content); `eval()` / `new Function()` are\n  refused; `javascript:` URLs in `href`/`src` are refused; a static `target=\"_blank\"`\n  link needs `rel=\"noopener\"`.\n\n## Bootstrap & providers\n\n| Export | Use |\n|---|---|\n| `renderTerpApp`, `collectModules`, `withAdminArea` | One-call app bootstrap: glob-import `modules/*/module.tsx`, merge the packaged admin area (opt out with `adminArea: false`, or select sections with `adminArea: { users, groups, audit }`; an app route claiming an admin path overrides that screen), build the router, mount provider + auth gate + shell. Options include `logo` (sidebar brand) and `footer`. |\n| `TerpProvider`, `useAuth`, `useTerpClient` | The context root: session state + the typed API client. Drop to this + `buildAppRouter` when you need full control. |\n| `buildAppRouter`, `DEFAULT_ROLE_RANKS`, `PROFILE_PATH` | TanStack Router adapter: realises stack-agnostic module manifests (routes + nav + roles) into a real router; throws at build time on a route referencing a missing view. Mounts the built-in `ProfileView` at `/profile` unless an app manifest claims that path. |\n| `createAuthClient` | The auth/session contract implementation (login / refresh / currentUser) over the generated client. |\n| `LoginView` | The standard sign-in screen: username/password, plus optional SSO provider buttons via `ssoProviders` and a dev-only credential-fill button via `devCredentials` (gate it on `import.meta.env.DEV`). |\n| `useSso`, `parseSsoCallback`, `fetchSsoAuthorizationUrl`, `completeSsoCallback` | The SSO login seam (ADR 0058): `useSso().begin(provider)` opens an OIDC flow; `TerpProvider` completes the `/auth/callback/{provider}` redirect landing into a normal session on boot. `renderTerpApp({ ssoProviders })` wires the buttons in one line. |\n| `RequireAuth` | Renders children only with a session; pairs with the router so the app mounts only when signed in. |\n| `ThemeProvider`, `ThemeToggle`, `useTheme` | Theming over the shipped palettes — `light`, `dark`, `midnight`, `twilight`, `contrast` — plus `system` to follow the OS preference. Applies `data-theme` on `<html>` (the token stylesheet carries every palette) and persists the choice. `defaultTheme` is how an app ships on a named theme — declare it in `layout-contract.json` so a tool can read and rewrite it, or pass the bootstrap option; both is refused. `renderTerpApp` mounts it for every app; the shell header uses an icon-only, token-themed `variant=\"inline\"` menu. |\n| `LocaleProvider`, `defineAppLocales`, `LanguageSwitcher`, `useLocale`, `LOCALE_EN`, `LOCALE_NL` | The language seam over `UiTextProvider`: `defineAppLocales(i18n, frameworkCatalogs)` validates and merges checked-in app messages with framework chrome, the active locale persists, and the shell offers a picker. Pass `sourceLocale` with `locales`; missing/empty target messages, undocumented source copies, invalid locale selection and a non-English locale without a complete framework-string catalog throw rather than silently falling back. A framework string that counts something (`dataViewResultsRange`, `dataViewSelectAllResults`, `accessUnexplainedRoutes`) is a `PluralText`: one form per plural category, chosen by the count under the active locale's `Intl.PluralRules`, and a catalog must supply exactly the categories its locale uses (`one` and `other` for Dutch; `one`, `few`, `many` and `other` for Polish). `<html lang>` follows the active locale from mount and across every switch. |\n| `UserMenu`, `userInitials` | The signed-in user's menu, pinned by `buildAppRouter` to the bottom of the sidebar: an initials avatar trigger opening the identity block, **Settings** (the built-in profile page) and sign-out. Collapses to the avatar in the icon rail. |\n| `ProfileView` | The built-in profile / settings page (`/profile`): the server-validated identity, theme + language preferences, and sign-out. |\n\n## Authorization gates (UI-side; the backend re-checks)\n\n| Export | Use |\n|---|---|\n| `Authorized`, `useCan` | Gate UI on `can(module, action)` — write buttons, admin panels. |\n| `usePermissions`, `useHasPermission` | The caller's **named** grants from `GET /me` (ADR 0096), for a screen whose write needs `definitions.publish` rather than a rank. `Authorized` takes an optional `permission` alongside `action`; both must pass, as the server's own guard does. Display only — the backend re-checks. |\n| `canPerform`, `DEFAULT_RANK_THRESHOLDS` | The role-rank predicate behind the gate. |\n| `visibleNav` | Filter nav items to what the current user may see. |\n\n## Page archetypes (the three-level screen pattern)\n\nEvery routed view **must** render one of the archetypes (`Page`, or `OverviewPage` /\n`DetailPage` / `HubPage` / `FormPage` / `SettingsPage` / `SplitPage`, which compose it) — `buildAppRouter` refuses an unframed view at\nruntime, fail closed (ADR 0059), so every screen keeps the breadcrumb/title/error frame.\n\n| Export | Use |\n|---|---|\n| `AppShell` | The responsive level-1 frame: a home-linked brand, icon/label nav and account footer. Desktop collapses to a persisted, scrollbar-free rail with one fixed icon slot; mobile becomes a scroll-locking drawer. The sticky header holds the sidebar toggle and icon-only preferences. Router-agnostic link renderers receive framework-owned expanded/collapsed geometry. |\n| Shell geometry (tokens, not props) | `--shell-sidebar-width-expanded` / `-collapsed`, `--shell-header-height`, `--shell-content-max-width`, `--shell-brand-size` and `--shell-gutter` (the content column's inline gutter, read by the app header, `main`, the footer and the page band, and tightened one step below the mobile breakpoint) are published contract tokens: an app moves them from its own unlayered `theme.css` with no prop at all, and the Studio gets them from the manifest. |\n| `logo` / `logoDark` (shell) | The brand mark, rendered in a box of `--shell-brand-size` so an asset larger than the 4rem icon rail is scaled rather than clipped — which is why there is no separate collapsed-mark slot: `logo` is the mark, `title` is the wordmark, and the rail already hides the second. `logoDark` is for a fixed-colour mark that cannot survive a dark theme; both render and the stylesheet shows one, switched on `--appearance-show-light` / `--appearance-show-dark`, which the token build emits from each theme's declared `appearance`. Resolving it in React would be wrong: the theme is `<html data-theme>` and an app may set it with no provider mounted. |\n| `density` (shell) | App-wide `\"comfortable\"` or `\"compact\"`, stamped on the shell root; every control height and cell padding follows by token inheritance. **No default** — omitting it stamps nothing, so an app's own `data-density` on `<html>` still wins. A subtree may override it: a `DataView density=\"comfortable\"` inside a compact shell really is comfortable, because comfortable now has named tokens and a rule rather than being the absence of an attribute. |\n| Skip to content | The shell renders the skip link and owns the landmarks it skips: `main` carries `tabIndex={-1}` and a per-instance id, so activating the link *moves focus* rather than only scrolling and two shells on one page get two distinct targets. It is not rendered while the mobile drawer is open — the drawer is `aria-modal` and its target sits inside the `inert` column. |\n| `defaultDrawerOpen` (shell) | Opens the mobile drawer on mount. A dev/specimen affordance — an app opening it on load shows every mobile user a menu they did not ask for — and the only way to render the drawer's own geometry and backdrop at all, since below the breakpoint the sidebar exists only while the drawer is open. |\n| `headerActions` (shell) | Extra header content before the theme and language controls. Now forwarded by `renderTerpApp` and `buildAppRouter`; it was previously reachable only by dropping to `TerpProvider` + `buildAppRouter` by hand. |\n| `permission` (nav + route) | A named grant from `CurrentUser.permissions`, **ANDed** with `role` — the same composition `Authorized` ships, because a server `Policy` carrying a `Permission` enforces the permission's role floor *and* the grant. Declared on both `NavItem` and `ModuleRoute`, so a hidden link never leaves a reachable route. Fails closed three ways: signed out, unknown name, and an app with no grant capability (empty list). Not a combinator — the server's own `AuthzRef` is one ref per read and one per write, so an any-of could express a gate no `Policy` can declare. |\n| `activeNavPath` / `isNavItemActive` | Which nav item is current, as one predicate. Longest **segment-aligned** match wins across the set, because \"at most one is current\" cannot be decided one link at a time — a router marks every prefix-active link, so `/settings` and `/settings/users` are both current at `/settings/users`. `NavItem.exact` narrows a single item to itself. Search and hash are ignored: a tab's identity is its path, so filtering a list must not unhighlight it. |\n| `groupNav` / `NavGroup` | The app declares named sections (`{ id, label, order }`); modules point items at them with `NavItem.group`, and `NavItem.order` sorts within one. A group spans modules, so no module can own its label or position — which is why this is the one part of the navigation model that is not on a module manifest. Additive: declare none and the sidebar is the flat list it is today. Absent `order` is 0 and the sort is stable (CSS `order` semantics), an item naming an undeclared group falls **open** into the ungrouped bucket rather than vanishing, a group left empty by `role`/`permission` filtering renders nothing at all, and the ungrouped bucket is emitted **last** so the packaged `/admin` entry stays where it already is. A `label: null` group renders no heading — pure positioning. Declare the groups in `layout-contract.json` under `shell.navGroups` (where `label: \"\"` is how a file spells `null`) so a tool can read and rewrite them, or pass the bootstrap option; both is refused. |\n| `navPlacement` (shell) | Where the primary navigation lives on desktop: `\"sidebar\"` (default, stamps nothing) or `\"header\"` — a horizontal row in the header with no sidebar at all, for an app whose destinations are few enough that 15rem of permanent chrome is a tax. The header then *becomes* the sidebar surface, so every `--color-sidebar-*` an app themes carries over and no property is overridden. Below the mobile breakpoint both placements are the drawer. `defaultCollapsed` is `never` under `\"header\"`: with no sidebar there is nothing to collapse. Available on `AppShell`, `buildAppRouter` and `renderTerpApp`. |\n| `contentWidth` (shell) | `\"measured\"` caps routed content at `--shell-content-max-width` while each page's own header keeps the full track — the subheader band. Default `\"full\"` stamps no attribute, so nothing moves until an app asks. Available on `AppShell`, `buildAppRouter` and `renderTerpApp`. |\n| `NavIcon`, `Icon`, `TerpMark`, `ICON_GLYPHS`, `ICON_NAMES` | The dependency-free icon layer. `ICON_NAMES` is published by `@terpjs/contract` as data and `IconName` is derived from it, so `NavItem.icon` and `Icon`'s `name` are **checked names** — a typo is a typecheck error, not a picture of nothing. `NavIcon`'s `name` stays a plain `string` on purpose: its unknown-name behaviour is a designed, visible fallback (the label's initial in a tile), while `Icon` rendered an empty box. The glyph table is held to the name set exhaustively in both directions by `satisfies`, so a glyph without a name or a name without a glyph fails to compile. The bundled catalogue covers common UI, action, object and status glyphs (home, list, folder, users, plus, edit, trash, search, check, x, chevron-{left,right,down}, arrow-left, external, logout, user, bell, key, globe, lock, tag, mail, refresh, filter, download, upload, star, heart, database, code, truck, cart, wallet, map-pin, clock, link, grid, book, briefcase, building, clipboard, layers, send, phone, image, video, music, wrench, zap, …). `TerpMark` is the placeholder brand mark until an app passes its own `logo`. |\n| `Page` | The base routed screen: a band carrying the breadcrumb trail — whose leaf **is** the view's single `h1` — plus `badges`, a `description` lead line and the `actions` cluster, then the body with loading/error slots. The band places by grid area (ADR 0135): a page with badges or a lead line spends a second row on them and the cluster joins them there at no cost in height, which leaves the trail the whole first row; a page with neither keeps the single row. Crumbs ellipsise rather than wrap, and the lead line is shown only above the second cutover. Every page renders a trail, even one of a single crumb, so an overview's title sits where a detail's does. Inside a shell the band bleeds to the content column's edge and takes `--shell-header-height`; a `measure=\"narrow\"` frame keeps the row and drops the chrome. |\n| `HubPage`, `HubCard` | Responsive `auto-fit` landing grid. Cards share equal outer and internal tracks even when descriptions/stats differ; nested hubs use the ordinary breadcrumb contract via `parents`. |\n| `OverviewPage` | A module's top-level listing screen (level 2); detail pages crumb back to it. |\n| `DetailPage` | One record's screen (level 3); breadcrumb trail = ancestors + record title. |\n| `FormPage` | A create-or-edit screen. `measure=\"narrow\"` by default, so the whole frame — header, actions and all — caps at 32rem over a single column of controls. Its body slot takes the form container (`Stack as=\"form\"`), plus `Grid` / `Card` / `Divider` / `Text`; a bare `Field` at the top level is refused, because a run of fields has no `<form>` and cannot be submitted. |\n| `SettingsPage` | Preferences and account screens: `Card` sections, also `measure=\"narrow\"`. No `DataView`, `DetailList` or `Tabs` — a settings screen whose body is a collection is an overview with the wrong chrome. `parents` is optional, unlike `FormPage`'s. |\n| `SplitPage`, `SplitPane` | A list beside the record it selects. The archetype owns the pane row and admits **only** `SplitPane` in it (`HubPage`'s shape, not `DetailPage`'s), so the panes are the governed thing. `listWidth` is a step — `sm` / `md` / `lg` — not a length; a draggable divider waits for the preference seam. Each pane is a named `<section>`, and below the mobile breakpoint they stack list-first, so the reading order and the tab order agree at both widths. |\n| `Breadcrumbs` | The trail itself (used by the archetypes; rarely composed directly). Ancestor crumbs use the router's `Link` by default — `renderLink` is only for rendering outside a Terp router. |\n| `NavLinkContext`, `useNavLink` | The ambient link renderer `buildAppRouter` publishes (and the layout components default to); provide it yourself in a standalone story/test tree or a bespoke shell. |\n| `useRouteParam` | Read one route param, fail closed: the declared param comes back as a string, an undeclared name throws a directive error instead of silently yielding `undefined`. Replaces the unchecked `useParams({ strict: false }) as {…}` cast (ADR 0092). Checked against the generated route table when the app has one. |\n| `useRouteParams` | Read a whole declared route's params, typed exactly: `const { recordId } = useRouteParams(\"/records/:recordId\")`. With a generated route table, a typo in the path *or* a param name is a typecheck error. |\n| `useTerpNavigate` | Navigate by manifest path: `navigate({ to: \"/records/:recordId\", params: { recordId } })`. An undeclared path is a typecheck error and a parameterised route requires its params — a typo'd path used to be a dead link that shipped green. Takes the manifest's `:id` spelling and translates to the router's `$id`. |\n| `useRouteSearch` | Read a declared route's query-string keys, typed: `const { status, page } = useRouteSearch(\"/records\")` (ADR 0096). Every value is `string | undefined`, and an undeclared key is a typecheck error — so a filtered list screen stays inside the checked seam instead of reaching for the router's own `useSearch`. Declare them in the manifest: `search: [\"status\", \"page\"]`. |\n| `ModuleNav` | Secondary horizontal tabs for intra-module sub-pages (real routes, not state). |\n| `PageActions` | The page header's action cluster: `primary`, `secondary` nodes, `secondaryActions` descriptors and an `overflow` menu. The cluster follows the viewport — supporting actions drop to icons alone in the middle region and fold into the overflow menu below the first cutover — while the primary action keeps its label at every width. Only `secondaryActions` can follow the viewport: a `secondary` node's label is inside the caller's tree and can only be shown or hidden. |\n\n### Typed route paths and params (generated, ADR 0092)\n\n`buildAppRouter` realises routes at runtime from manifest data, which leaves TanStack\nRouter's type registry empty: nothing checks a route path or a param name, so a typo'd\npath is a dead link and a typo'd param silently reads `undefined`. The manifests are\nstatic data, so the check is generated from them:\n\n```bash\nnpm --prefix frontend run routes     # or: uv run terp routes\n```\n\n`terp-routes` reads every `src/modules/<name>/module.tsx` manifest and writes a\n**committed** `src/routes.gen.d.ts` that augments `TerpRouteTable`:\n\n```ts\ndeclare module \"@terpjs/react-core\" {\n  interface TerpRouteTable {\n    \"/records\": Record<never, never>;\n    \"/records/:recordId\": { recordId: string };\n  }\n}\n```\n\nFrom then on `useRouteParams(\"/records/:recordId\")` is exact, `useRouteParam` refuses a\nparam no route declares, `useRouteSearch` is keyed to the route's declared query-string\nkeys, and `useTerpNavigate` refuses an undeclared path (or an undeclared `search` key). Regenerate\nafter changing a manifest route — `terp verify`'s `routes-drift` check refuses a stale\ntable and names the command (it runs before the typecheck, so a stale table reads as\n\"regenerate\", not as errors in your own screens). A route whose `path` is not a plain\nstring literal is refused with its file and line rather than silently omitted: a partial\ntable would turn a real path into a type error. Routes a packaged area mounts (the admin\narea) are not keyed — the file stays a pure function of the app's own manifests. Without\na generated file every helper falls back to `string`, so adopting is opt-in: add the\n`routes` script, generate, commit.\n\n### Slot-typed layout contracts (opt-in, ADR 0079)\n\nAn app can ratchet the archetype control further with a named **layout contract**,\ndeclared once in a checked-in `layout-contract.json` next to the frontend sources\n(`{ \"contract\": \"standard\" }`) and read by both halves: the `terp/layout-contract` lint\nrule finds the file on disk, and `main.tsx` imports it —\n`renderTerpApp({ layout })`. The same file carries the palette the app opens on\n(`defaultTheme`) and the shell's own shape under `shell` (`density`, `navPlacement`,\n`contentWidth`, the `navGroups` a module's `NavItem.group` names by id, and the `brand` marks\nas paths), which is what lets a tool read and rewrite those choices instead of them living\nonly in TypeScript. Declaring a key in the file AND\npassing the matching bootstrap option is refused when the router is composed, with both\nsources named; `layoutContract: \"standard\"` on its own still works for an app that would\nrather write code than check in a file. Each governed archetype's body slot then accepts **only** the contract's\ncomponents — `standard`: hub bodies hold `HubCard` only; overview bodies hold\n`DataView` / `ResourceList` / `ModuleNav` / `Stack` / `Card` / `Divider` / `Text` plus\nthe framework states (`EmptyState` / `ErrorState` / `LoadingState` / `Alert`) and\n`ConfirmDialog`; detail bodies hold `DetailList` / `DetailListGroup` / `Stack` / `Tabs` /\n`ModuleNav` / `DataView` / `Card` / `Grid` / `Divider` / `Text` plus the same states. The asymmetry is\ndeliberate and pinned by tests rather than left to the table: `Grid` joins **detail**\nbodies only (an overview body is a collection, and a grid of summary cards is a hub,\nwhich has its own archetype), while `Heading` joins **neither** — a heading in a governed\nbody must own its section, and `Card` is how a section is owned. The plain `Page` stays\nunconstrained (the sanctioned home for a bespoke screen). Only the slot's **direct** children are governed — an allowed\ncontainer's own subtree (a `Card` body, a `Stack` of rows) is the app's to compose.\nEnforcement is two-layer and fail-closed: the lint rule checks static JSX\nchildren; the archetypes verify the rendered DOM (sanctioned components stamp a\n`data-terp` marker) and refuse a non-conforming view with the **same directive\nmessage** — contract, slot, what was found, what is allowed, and the fix — so a\nfailing check tells the author (human or agent) exactly how to build the screen.\n`LAYOUT_CONTRACTS` exports the table; no config means no checks (fully backwards\ncompatible). Every exported archetype must appear in it or name its reason for not\nappearing — an archetype missing from the table is silently ungoverned by both halves,\nwhich used to be a green build. The one opt-out is a justified `// terp-allow-layout-contract: <reason>`\nmarker, counted by the escape-hatch budget.\n\n## Data\n\n| Export | Use |\n|---|---|\n| `DataView` + family | **The single sanctioned surface for data collections**: repository-driven table/card view with search, sorting, pagination, column management, selection + batch actions, row actions, expandable rows, persisted view preferences, and pointer/keyboard row activation for overview-to-detail navigation. See [`src/dataview/README.md`](src/dataview/README.md) for the full guide (client-side and server-side recipes). |\n| `InMemoryDataViewRepository`, `HttpDataViewRepository` | Data repositories (client-side / server-side); `useServerDataView` keeps server query state in the URL. |\n| `InMemoryViewStateRepository`, `LocalStorageViewStateRepository` | Preference persistence seam. |\n| `useResource` | An async collection: rows + loading/error + reload + create-then-reload. |\n| `useRecord` | The singleton counterpart of `useResource` — the one record a detail screen shows: `item` (or `null`) + loading/error + reload + mutate. Deletes the one-element-list wart (`list: async () => [unwrap(…)]` then `items[0]`). |\n| `useRealtimeChannel` | The sanctioned typed SSE/WebSocket seam for the optional realtime capability: mints a short-lived one-use ticket via the authenticated generated client, validates every inbound JSON payload with the channel's runtime type guard, and exposes connection state / last message / WebSocket send. App modules never touch raw transports. |\n| `ResourceList` | The standard simple CRUD list screen: titled section, write-gated create form, loading/error/empty states. Composable — screens needing more render their own React. |\n| `routeFieldErrors` | Split a failure's `fields` into the ones this form renders (`shown`, ready for `Field`'s `error`) and whether anything was `leftover`. The branch that matters is `leftover`: a reason naming a field the form has no input for would otherwise set state nobody reads and suppress the toast on the way out, so the user presses Save and *nothing at all* happens. |\n| `randomUuid` | A cryptographically random v4 UUID in every context. `crypto.randomUUID` is secure-context-only while `lib.dom` declares it unconditionally, so calling it on a plain-http origin is a synchronous `TypeError` that type-checks cleanly and never fires on localhost. Falls back to `crypto.getRandomValues` (not secure-context-gated) for the same entropy, and throws rather than reaching for `Math.random`. Reach for it wherever the client mints an id -- an `Idempotency-Key`, an optimistic row key. |\n| `unwrap`, `unwrapOptional`, `ApiError` | Turn a generated-client result into data-or-throw; `ApiError` carries the envelope's `code` / `status` / `requestId`, plus `fields` — the per-field reasons of a 422, keyed by dotted path, ready to hand to `Field`'s `error` prop (`{}` when the failure names no field). `unwrapOptional` returns `null` on a 404 instead — for resources whose absence is a normal state (a `/latest` snapshot not yet published), the client-side analog of `BaseService.find` beside `get`. |\n| `useFormatDate`, `useFormatDateTime`, `useFormatNumber` (and locale-explicit `formatDate` / `formatDateTime` / `formatNumber`) | Render a date or a number in the **app's** locale. `toLocaleDateString()` with no argument asks the browser, so an app shipping one language renders its own tables in whatever the visitor's OS is set to. The hooks read `LocaleProvider` and are `useCallback`-stable, so a column list built in a `useMemo` can depend on one. An absent or unparseable value renders as an em dash rather than throwing. |\n| `FileUpload`, `useFileDownload` | The files-capability surface (ADR 0056/0057): a token-styled attachment picker that uploads through the typed client, and an authenticated download helper (a raw `<a href>` would carry no bearer token). |\n| `useEndpointDownload`, `saveBlob` | Download an artifact the backend **generates** — an evidence bundle, a CSV export — which has no stored file id (ADR 0096). Goes through the session client, so it carries the base URL and bearer token and rejects a non-2xx instead of saving the error body under the intended filename. |\n\n## Feedback & states\n\n| Export | Use |\n|---|---|\n| `LoadingState`, `InlineSpinner` | Full loading block (announces itself) / compact inline glyph. |\n| `EmptyState` | The standard \"nothing here yet\" block, with an `action` slot for the next step. |\n| `ErrorState`, `describeError` | Human-readable failure block for a caught error. |\n| `ErrorMessagesProvider`, `useErrorMessage` | Map stable backend error codes to copy; falls back to the envelope `detail`. The platform's own codes are worded by the active locale (`errorCode*` in `TerpStrings`), and an app's map wins over them. |\n| `ToastProvider`, `useToast` | Transient success/error feedback (no toast library). |\n| `ConfirmDialog` | Accessible confirmation modal (native `<dialog>`); use before any destructive action. A modal is for a confirmation or an explicit post-action moment — an edit form or a detail view belongs in a routed page, or in an expanded row beside the thing it edits (ADR 0096 §4). |\n\n## Forms & primitives\n\n| Export | Use |\n|---|---|\n| `Button` | Token-styled command: `variant` (primary / secondary / danger / ghost), `size` (sm / md / lg, composing with density), `loading` (spinner in the icon slot, `aria-busy`, and disabled so a second click cannot start the request twice), `fullWidth` to fill the container instead of the label, and an optional leading `icon`. Content-sized by default. |\n| `Input`, `Select`, `Textarea` | Token-styled controls with stable framework typography, independent of surrounding display text (raw elements are lint-refused). Numeric inputs suppress unthemeable browser steppers. `Input type=\"password\"` grows a reveal toggle — the type decides, so there is no second export and no prop; an app could not add one itself, because the toggle needs a positioned wrapper and module files may use neither `style` nor `className`. |\n| `Select` options (`SelectOption<T>`) | Two forms. Pass `options={[{ value, label, disabled? }]}` with `onValueChange` when the choices are data — `T` is inferred from the list, so a closed enum is checked at both ends and the `event.target.value as Status` cast goes away; `placeholder` renders the disabled empty-valued leading row. Or pass `<option>` children as before. The two are mutually exclusive at the type level, so neither can silently ignore the other. |\n| `Combobox` | Accessible autocomplete/typeahead single-select: filterable options, controlled or uncontrolled value, loading state, disabled state, and ARIA combobox/listbox keyboard navigation. |\n| `DatePicker`, `DateRangePicker` | Locale-aware calendar popover controls with keyboard-navigable month grids, min/max bounds, and range selection for ERP date filters. |\n| `Checkbox` | Labelled checkbox with `checked` / `defaultChecked` and boolean `onChange`. |\n| `Radio`, `RadioGroup` | Labelled radio and accessible grouped radio options with controlled or uncontrolled value. |\n| `Switch` | Labelled boolean toggle (`role=\"switch\"`) with `checked` / `defaultChecked` and boolean `onChange`. |\n| `Tabs` | In-page (non-routed) tab set with `tablist` / `tab` / `tabpanel` roles, arrow-key navigation, and controlled or uncontrolled value. |\n| `Avatar` | The initials tile: `from` (an email or a name) or explicit `initials`, and a closed `size` of `sm` (2rem, an account menu) or `md` (3.5rem, a profile header). `aria-hidden`, because the name it abbreviates is always rendered beside it. No `src`: `/me` carries no avatar URL, so an image slot would be a prop with nothing behind it. |\n| `Badge` | Small status pill: `<Badge tone=\"success\">Synced</Badge>` (or `label=\"Synced\"`); `tone`: neutral / info / success / warning / danger. |\n| `Meter` | One bounded value — a quota used, a score against its range — as a bar with the value printed beside it (ADR 0158). The bar **is** the native `<meter>` (`value`, `min` default 0, `max` default 1, and the optional `low` / `high` / `optimum` bands), styled from the sheet, so the browser draws the proportion and nothing renders an inline width. `label` is required and is the meter's **accessible name, not printed**: every place a quantity sits already has a visible caption — a `DetailList` term, a `Card` title, a `HubCard` title — so a meter goes inside one, and the standard layout contract refuses one loose in a body. `format` takes the `Intl.NumberFormatOptions` the `format` helpers take and defaults to a percentage, which is always the **share of the range** (`value={74} max={100}` prints `74%`, not Intl's `7,400%`); any other style prints the value itself, unclamped, so an overrun reads `120%` against a full bar. The printed copy is `aria-hidden` and handed to the element as `aria-valuetext`, so a screen reader hears it once — and so does a `HubCard` link whose stat is a meter. Bands are opt-in: with none the bar is one accent colour, and with any the fill takes success / warning / danger by region — reinforcing the printed value, never replacing words where the judgement matters. |\n| `Tooltip` | Accessible focus/hover tooltip that describes its trigger with `aria-describedby`. |\n| `Popover`, `Menu`, `MenuItem` | Shared anchored overlay and dropdown-menu primitives: body-portaled, viewport-aware panels that escape scroll/table clipping, with outside-click/Escape close, focus return, selected-item semantics, and roving keyboard navigation. |\n| `Alert` | Inline banner for persistent feedback (`tone`: neutral / info / success / warning / danger); warnings and danger announce as `alert`, others as `status`. |\n| `Markdown` | Safe, dependency-free markdown renderer for headings, paragraphs, bold, italic, inline code, code blocks, lists, and safe links; raw HTML is rendered as text and never passed through. |\n| `Field` | Label + control + hint/error wrapper for one form field. The error is announced (`role=\"alert\"`) as well as described, because `aria-describedby` alone is silent for a rejection that arrives after focus has left the control. |\n| `FieldRow` | Several `Field`s side by side, with their labels, their controls and their messages each on a **shared line**. A field is as tall as its label, its control *and* whatever it has to say, so neither flex alignment is right: `align=\"end\"` lines up the messages, so a field that grows a hint lifts its own control above its neighbours' and a bare action button sinks to the depth of the longest error on the row; `align=\"start\"` lines up the labels, which fixes the fields and leaves the button riding above the controls. A flex row can align one **edge** of a box and the thing that has to line up here is a band in the middle of it, so the row owns three rows and each field becomes a `subgrid` of them — the instrument `DetailListGroup` already uses, for the same reason. Anything that is not a field lands on the control line, which is a placement rather than a wrapper, so a remove button keeps its own element and its own name. `gap` moves the **column** gap only: the row gap is each field's internal label-to-control measure, shared by every field on the row. Below the viewport cutover it is one column at full width — three controls and an action do not fit a phone, and that is also where the alignment problem stops existing. |\n| `QuietActions` | A value with an action attached, where the action is **quiet until someone reaches for it** — a copyable identifier, a row's remove, a list item's open. Five copyable digests on one card meant five copy buttons competing with the five values they applied to. The space is **reserved, not collapsed**: the action fades rather than appears, so nothing moves when a pointer arrives. Three things make it safe rather than merely quiet — the resting state sits behind `@media (hover: hover)`, so a touch screen with no hover to reveal anything gets a visible control instead of an invisible tappable one; it reveals on `:focus-within` as well as hover, because opacity does not remove an element from the tab order and a keyboard must never land on something it cannot see; and opacity is not `visibility`, so the action is announced, named and operable throughout. The actions are a slot, the same one `Card` publishes, rather than a convention about which children count. |\n\n## Layout\n\nModules never write `style={}` or CSS — the boundary lint refuses the `style`\nattribute in `src/modules/**`. Layout comes from these primitives (gaps index the\ntoken spacing scale, so spacing is themed centrally):\n\n| Export | Use |\n|---|---|\n| `Stack` | The layout primitive: a flex container with a token gap. Vertical by default (forms, sections); `direction=\"row\"` + `justify` for toolbars; `as=\"form\"` etc. for semantics. `padding` insets on the same token scale; `direction` and `gap` also take a `{ narrow, wide }` pair, which changes over at the one viewport cutover the shell and the DataView already use. |\n| `Grid` | The two-dimensional primitive, and the one that lifts a real ceiling — a two-column form could not be expressed at all before it. `columns` takes a fixed 1–4 or `\"auto\"` (the default), which reflows to whatever the **container** can hold with no breakpoint anywhere; `minColumn` is the track floor for `auto`; `gap` indexes the spacing scale; `align` is a closed four. Renders no inline style. No `span`, and therefore no twelve-column option — a span system needs a child component to carry it. |\n| `Card` | A token-styled frame (a border, a radius and padding — no fill, so the page's canvas shows through) grouping one block of a page — the sanctioned visual separation between sections. Optional header row: `title` (semantic `<h3>`), muted `description`, `actions` slot — and the slot stays on the title's line whether or not there is a description, which took a rule: a content-sized heading is as wide as its longest line, and flex breaks lines on that width before it shrinks anything. `variant=\"plain\"` keeps the heading and drops the box, for a titled region inside something that is already a surface — a section whose body is a `DataView` gets a border inside a border otherwise. There is no separate `Section` or `Surface`: both are this element with declarations removed. |\n| `Divider` | A rule between groups, as a semantic `<hr>` so the separation reaches the accessibility tree — `Separator` under its other name, shipped once. `orientation=\"vertical\"` takes its height from its flex or grid line rather than inventing one, so it works between the items of a row `Stack` and is zero-height in a block parent. |\n| `DetailList` | Token-styled label/value pairs as a semantic `<dl>` (record metadata, expanded-row summaries). A real grid: `layout=\"aligned\"` puts every label in a shared column so the values line up, `\"stacked\"` puts the label above its value, and `columns` takes two pairs per row. Tracks are floored at zero and long values wrap, so a 64-character digest no longer pushes the list past its container. Both non-inline layouts mute their label to the small, regular step — at the value's own size and weight a card of labelled values is a wall of bold text — and space their rows so a pair groups; `gap` moves that distance on the spacing scale, and it is the **row** gap, since the column gap is the label-to-value distance. One pair can leave the shared column with `full`, which spans it across every track with its label above its value — the escape that stops a single wide value (a paragraph, a payload) from forcing the list to split in two, since two lists measure two label columns. `columns` also takes `\"auto\"`, which follows the **container** rather than the viewport: a pair is at least 9rem of label and 13rem of value, each floor capped at a share of the track so one pair always fits a narrow panel instead of overflowing it. The closed one-or-two keep the reflow at the framework's viewport cutover, where `Grid` deliberately does not for a fixed count. |\n| `DetailListGroup` | Several `DetailList`s that share **one** measured label column. A card that shows a record in sections renders a list per section — the sections have their own headings and their own order, and one `<dl>` cannot carry that — and each list then measures its own label column, so the values in each land on a different vertical line: four lists, four gutters, on one card. The group owns the track list and each aligned list inside becomes a `subgrid` of it, so every label in every list is measured against the same track. Explicit rather than something `Card` infers from its children: a card that wants two different label widths has to be able to say so, and a card has no business knowing about `<dl>` tracks. Children other than lists span the whole group (a `Heading` between two sections, a `Divider`), which is the other half of why it is a wrapper. It shares the measure for `layout=\"aligned\"` at the default single column — a `columns={2}` list keeps its own four tracks rather than being quietly folded into two — above the viewport cutover, and it degrades to exactly today's output where `subgrid` is unsupported. |\n| `Heading` | A section heading inside a page body — `h2`–`h4`, with `size` a **separate** choice from `level` so a visually small `h2` is expressible without picking the wrong element. No level 1: `Page` renders the single `h1` of every routed view. |\n| `Text` | Body copy with themeable ink — `tone` (default / muted / subtle), `size`, and an enumerable `measure` that caps the line length in `ch`. What a bare `<p>` in a module cannot be, since a bare element carries no marker for a rule to reach. |\n| `Code` | An identifier or a snippet in the mono family. `block` wraps it in a focusable `<pre>`, which is what preserves the whitespace and what makes a long line scrollable by keyboard. |\n| `Link` | A link with themeable ink, routing in-app paths through the surrounding router and degrading to a plain anchor outside one. An external `newTab` gets `rel=\"noreferrer\"`. The boundary lint refuses a raw in-app `<a href=\"/…\">`; this is the thing to use instead. |\n\n## The packaged admin area\n\nEvery Terp backend mounts the base-profile admin capabilities (users, groups +\naccess grants, audit); react-core ships the UI over them, so every app has a\nworking admin area on day one. `renderTerpApp` injects it by default: one\nadmin-gated **Admin** sidebar entry opens the `/admin` hub, whose cards lead to\nthe overviews; each overview breadcrumbs back to the hub (hub → overview →\ndetail, like every screen). Opt out with `adminArea: false`; ship only the\nscreens whose capabilities the app mounts with a sections object —\n`adminArea: { groups: false }` is the users + audit profile, first-class (a\ndropped section loses its routes, hub card and stat call) — or override a\nsingle screen by claiming its path from an app module.\n\n| Export | Use |\n|---|---|\n| `adminModule` | The whole area as a `TerpModule` (manifest + views) — spread it manually into an L2 `buildAppRouter` composition. |\n| `AdminHub` | `/admin`: cards into users / groups / audit with live totals. |\n| `UsersAdmin`, `UserCreate`, `UserDetail` | `/admin/users`: clickable account overview; `/new`: dedicated provisioning page; `/$userId`: details with header actions and confirmation-gated role, status and password changes. |\n| `GroupsAdmin`, `GroupCreate`, `GroupDetail` | `/admin/groups`: clickable group overview; `/new`: dedicated creation page; `/$groupId`: details with header deletion, member management and permission grants (destructive changes use confirmation dialogs; deletion cascades memberships + grants, ADR 0074). |\n| `AuditLogAdmin` | `/admin/audit`: the append-only trail, rows expanding to identifiers + payload. |\n\n## Localization\n\n| Export | Use |\n|---|---|\n| `UiTextProvider`, `Trans`, `useUiText`, `useStrings`, `resolveUiText`, `DEFAULT_STRINGS` | The `UiText` seam: descriptors for props, `Trans` for body copy, and framework strings through one resolver. `LocaleProvider` is the batteries-included catalog layer and refuses missing target-locale entries. A packaged module's nav label is a `FrameworkText` (`{ framework: \"admin\" }`), which `useUiText` reads from the active `TerpStrings` rather than the app's messages. |\n\n## Testing components\n\nComponent tests run under vitest with `// @vitest-environment jsdom` at the top of the\nfile plus an explicit `afterEach(cleanup)` (the default environment is node). Run:\n\n```bash\nnpm run -w @terpjs/react-core typecheck && npm run -w @terpjs/react-core test\n```\n\njsdom has no `HTMLDialogElement.showModal/close`; `vitest.setup.ts` calls\n`installDialogPolyfill()` from `@terpjs/react-core/testing` to supply them, so components may\nuse the native `<dialog>` freely.\n\n### Testing an app that uses these components\n\nA generated app's `frontend/vitest.setup.ts` installs the same polyfill, so an app's unit test\ncan open a `ConfirmDialog`, click Confirm or Cancel, or press Escape\n(`fireEvent.keyDown(dialog, { key: \"Escape\" })`) and get what a browser would do — including\na pending dialog refusing to close. An app whose setup file predates it, or has diverged from\nthe template's, adds the call itself:\n\n```ts\nimport { installDialogPolyfill } from \"@terpjs/react-core/testing\";\n\ninstallDialogPolyfill();\n```\n\n`@terpjs/react-core/testing` is for test setup only and is not re-exported from the package\nroot, so none of it reaches a production bundle (ADR 0155). What the polyfill does not\nreproduce — focus moving into the dialog and back to its opener, the inert page behind it — is\nthe Playwright suite's to test, in a real browser.\n","readmeFilename":"README.md"}