@origostudio/origo-design 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/.editorconfig +13 -0
  2. package/.gitattributes +22 -0
  3. package/.perf-baseline.json +12 -0
  4. package/.prettierignore +13 -0
  5. package/.prettierrc +10 -0
  6. package/.vscode/extensions.json +3 -0
  7. package/BRANCH-PROTECTION.md +25 -0
  8. package/CHANGELOG.md +292 -0
  9. package/LICENSE +21 -0
  10. package/README.md +11 -0
  11. package/commitlint.config.js +6 -0
  12. package/dist/packages/cli/CHANGELOG.md +92 -0
  13. package/dist/packages/cli/README.md +11 -0
  14. package/dist/packages/cli/package.json +16 -0
  15. package/dist/packages/cli/package.json.bak +16 -0
  16. package/dist/packages/cli/src/commands/generate/entity.d.ts +2 -0
  17. package/dist/packages/cli/src/commands/generate/entity.js +24 -0
  18. package/dist/packages/cli/src/commands/generate/entity.js.map +1 -0
  19. package/dist/packages/cli/src/commands/generate/index.d.ts +2 -0
  20. package/dist/packages/cli/src/commands/generate/index.js +30 -0
  21. package/dist/packages/cli/src/commands/generate/index.js.map +1 -0
  22. package/dist/packages/cli/src/commands/init.d.ts +5 -0
  23. package/dist/packages/cli/src/commands/init.js +27 -0
  24. package/dist/packages/cli/src/commands/init.js.map +1 -0
  25. package/dist/packages/cli/src/commands/new.d.ts +2 -0
  26. package/dist/packages/cli/src/commands/new.js +24 -0
  27. package/dist/packages/cli/src/commands/new.js.map +1 -0
  28. package/dist/packages/cli/src/commands/validate.d.ts +2 -0
  29. package/dist/packages/cli/src/commands/validate.js +50 -0
  30. package/dist/packages/cli/src/commands/validate.js.map +1 -0
  31. package/dist/packages/cli/src/index.d.ts +11 -0
  32. package/dist/packages/cli/src/index.js +15 -0
  33. package/dist/packages/cli/src/index.js.map +1 -0
  34. package/dist/packages/cli/src/lib/cli.d.ts +1 -0
  35. package/dist/packages/cli/src/lib/cli.js +7 -0
  36. package/dist/packages/cli/src/lib/cli.js.map +1 -0
  37. package/dist/packages/cli/src/lib/generator.d.ts +16 -0
  38. package/dist/packages/cli/src/lib/generator.js +165 -0
  39. package/dist/packages/cli/src/lib/generator.js.map +1 -0
  40. package/dist/packages/cli/src/lib/scaffolding.d.ts +5 -0
  41. package/dist/packages/cli/src/lib/scaffolding.js +87 -0
  42. package/dist/packages/cli/src/lib/scaffolding.js.map +1 -0
  43. package/dist/packages/cli/src/lib/validation.d.ts +4 -0
  44. package/dist/packages/cli/src/lib/validation.js +191 -0
  45. package/dist/packages/cli/src/lib/validation.js.map +1 -0
  46. package/dist/packages/cli/src/main.d.ts +4 -0
  47. package/dist/packages/cli/src/main.js +38 -0
  48. package/dist/packages/cli/src/main.js.map +1 -0
  49. package/dist/packages/cli/src/templates/entity.json +6 -0
  50. package/dist/packages/cli/src/templates/extension.json +8 -0
  51. package/dist/packages/cli/src/templates/index.d.ts +29 -0
  52. package/dist/packages/cli/src/templates/index.js +61 -0
  53. package/dist/packages/cli/src/templates/index.js.map +1 -0
  54. package/dist/packages/cli/src/templates/origo.json +16 -0
  55. package/dist/packages/cli/src/utils/errors.d.ts +15 -0
  56. package/dist/packages/cli/src/utils/errors.js +58 -0
  57. package/dist/packages/cli/src/utils/errors.js.map +1 -0
  58. package/dist/packages/core/CHANGELOG.md +275 -0
  59. package/dist/packages/core/README.md +11 -0
  60. package/dist/packages/core/package.json +21 -0
  61. package/dist/packages/core/package.json.bak +21 -0
  62. package/dist/packages/core/src/extension-api/extension-manager.d.ts +35 -0
  63. package/dist/packages/core/src/extension-api/extension-manager.js +300 -0
  64. package/dist/packages/core/src/extension-api/extension-manager.js.map +1 -0
  65. package/dist/packages/core/src/extension-api/index.d.ts +2 -0
  66. package/dist/packages/core/src/extension-api/index.js +6 -0
  67. package/dist/packages/core/src/extension-api/index.js.map +1 -0
  68. package/dist/packages/core/src/extension-api/types.d.ts +34 -0
  69. package/dist/packages/core/src/extension-api/types.js +3 -0
  70. package/dist/packages/core/src/extension-api/types.js.map +1 -0
  71. package/dist/packages/core/src/index.d.ts +3 -0
  72. package/dist/packages/core/src/index.js +7 -0
  73. package/dist/packages/core/src/index.js.map +1 -0
  74. package/dist/packages/core/src/schemas/capability.schema.json +104 -0
  75. package/dist/packages/core/src/schemas/contract.schema.json +52 -0
  76. package/dist/packages/core/src/schemas/domain.schema.json +47 -0
  77. package/dist/packages/core/src/schemas/entity.schema.json +72 -0
  78. package/dist/packages/core/src/schemas/extension.schema.json +39 -0
  79. package/dist/packages/core/src/schemas/permission.schema.json +21 -0
  80. package/dist/packages/core/src/types/ast.d.ts +17 -0
  81. package/dist/packages/core/src/types/ast.js +3 -0
  82. package/dist/packages/core/src/types/ast.js.map +1 -0
  83. package/dist/packages/core/src/types/domain.d.ts +101 -0
  84. package/dist/packages/core/src/types/domain.js +8 -0
  85. package/dist/packages/core/src/types/domain.js.map +1 -0
  86. package/dist/packages/core/src/types/validation.d.ts +12 -0
  87. package/dist/packages/core/src/types/validation.js +16 -0
  88. package/dist/packages/core/src/types/validation.js.map +1 -0
  89. package/dist/packages/core/src/validator/ast-validator.d.ts +11 -0
  90. package/dist/packages/core/src/validator/ast-validator.js +388 -0
  91. package/dist/packages/core/src/validator/ast-validator.js.map +1 -0
  92. package/dist/packages/core/src/validator/index.d.ts +23 -0
  93. package/dist/packages/core/src/validator/index.js +143 -0
  94. package/dist/packages/core/src/validator/index.js.map +1 -0
  95. package/dist/packages/core/src/validator/serializer.d.ts +11 -0
  96. package/dist/packages/core/src/validator/serializer.js +99 -0
  97. package/dist/packages/core/src/validator/serializer.js.map +1 -0
  98. package/eslint.config.js +114 -0
  99. package/generate_prompts.js +19 -0
  100. package/jest.config.ts +5 -0
  101. package/jest.preset.js +3 -0
  102. package/nx.json +169 -0
  103. package/package.json +115 -0
  104. package/packages/angular-renderer/CHANGELOG.md +274 -0
  105. package/packages/angular-renderer/README.md +11 -0
  106. package/packages/angular-renderer/package.json +20 -0
  107. package/packages/angular-renderer/playwright-ct.config.ts +23 -0
  108. package/packages/angular-renderer/src/adapters/web/adapter.ts +145 -0
  109. package/packages/angular-renderer/src/adapters/web/experience-adapter.service.ts +21 -0
  110. package/packages/angular-renderer/src/components/primitives/button/button.component.html +9 -0
  111. package/packages/angular-renderer/src/components/primitives/button/button.component.pw.ts +19 -0
  112. package/packages/angular-renderer/src/components/primitives/button/button.component.scss +31 -0
  113. package/packages/angular-renderer/src/components/primitives/button/button.component.ts +67 -0
  114. package/packages/angular-renderer/src/components/primitives/primitives.a11y.pw.ts +33 -0
  115. package/packages/angular-renderer/src/components/primitives/text-input/text-input.component.html +10 -0
  116. package/packages/angular-renderer/src/components/primitives/text-input/text-input.component.pw.ts +29 -0
  117. package/packages/angular-renderer/src/components/primitives/text-input/text-input.component.scss +42 -0
  118. package/packages/angular-renderer/src/components/primitives/text-input/text-input.component.ts +84 -0
  119. package/packages/angular-renderer/src/components/primitives/vbox/vbox.component.html +2 -0
  120. package/packages/angular-renderer/src/components/primitives/vbox/vbox.component.pw.ts +19 -0
  121. package/packages/angular-renderer/src/components/primitives/vbox/vbox.component.scss +5 -0
  122. package/packages/angular-renderer/src/components/primitives/vbox/vbox.component.ts +74 -0
  123. package/packages/angular-renderer/src/index.ts +7 -0
  124. package/packages/angular-renderer/src/lib/renderer.component.ts +118 -0
  125. package/packages/angular-renderer/src/lib/renderer.tokens.ts +9 -0
  126. package/packages/angular-renderer/src/lib/test-utils.ts +26 -0
  127. package/packages/angular-renderer/src/lib/theme.provider.ts +83 -0
  128. package/packages/angular-renderer/src/test-setup.ts +8 -0
  129. package/packages/cli/CHANGELOG.md +92 -0
  130. package/packages/cli/README.md +11 -0
  131. package/packages/cli/package.json +16 -0
  132. package/packages/cli/src/commands/generate/entity.ts +20 -0
  133. package/packages/cli/src/commands/generate/index.ts +28 -0
  134. package/packages/cli/src/commands/init.ts +28 -0
  135. package/packages/cli/src/commands/new.ts +22 -0
  136. package/packages/cli/src/commands/validate.ts +47 -0
  137. package/packages/cli/src/index.ts +11 -0
  138. package/packages/cli/src/lib/cli.ts +3 -0
  139. package/packages/cli/src/lib/generator.ts +181 -0
  140. package/packages/cli/src/lib/scaffolding.ts +104 -0
  141. package/packages/cli/src/lib/validation.ts +218 -0
  142. package/packages/cli/src/main.ts +38 -0
  143. package/packages/cli/src/templates/entity.json +6 -0
  144. package/packages/cli/src/templates/extension.json +8 -0
  145. package/packages/cli/src/templates/index.ts +94 -0
  146. package/packages/cli/src/templates/origo.json +16 -0
  147. package/packages/cli/src/utils/errors.ts +80 -0
  148. package/packages/core/CHANGELOG.md +275 -0
  149. package/packages/core/README.md +11 -0
  150. package/packages/core/package-lock.json +1035 -0
  151. package/packages/core/package.json +21 -0
  152. package/packages/core/scripts/generate-types.ts +23 -0
  153. package/packages/core/src/extension-api/extension-manager.ts +378 -0
  154. package/packages/core/src/extension-api/index.ts +2 -0
  155. package/packages/core/src/extension-api/types.ts +37 -0
  156. package/packages/core/src/index.ts +3 -0
  157. package/packages/core/src/schemas/__fixtures__/target-page.json +222 -0
  158. package/packages/core/src/schemas/capability.schema.json +104 -0
  159. package/packages/core/src/schemas/contract.schema.json +52 -0
  160. package/packages/core/src/schemas/domain.schema.json +47 -0
  161. package/packages/core/src/schemas/entity.schema.json +72 -0
  162. package/packages/core/src/schemas/extension.schema.json +39 -0
  163. package/packages/core/src/schemas/permission.schema.json +21 -0
  164. package/packages/core/src/types/ast.ts +20 -0
  165. package/packages/core/src/types/domain.ts +105 -0
  166. package/packages/core/src/types/validation.ts +29 -0
  167. package/packages/core/src/validator/ast-validator.ts +406 -0
  168. package/packages/core/src/validator/index.ts +207 -0
  169. package/packages/core/src/validator/serializer.ts +120 -0
  170. package/packages/core/test/fixtures/target-page.json +87 -0
  171. package/packages/design-tokens/CHANGELOG.md +273 -0
  172. package/packages/design-tokens/README.md +11 -0
  173. package/packages/design-tokens/package.json +25 -0
  174. package/packages/design-tokens/src/build.ts +97 -0
  175. package/packages/design-tokens/src/compile.ts +60 -0
  176. package/packages/design-tokens/src/index.ts +7 -0
  177. package/packages/design-tokens/src/runtime/index.ts +2 -0
  178. package/packages/design-tokens/src/runtime/theme-fetcher.ts +90 -0
  179. package/packages/design-tokens/src/runtime/theme-injector.ts +149 -0
  180. package/packages/design-tokens/src/schemas/base-tokens.schema.json +127 -0
  181. package/packages/design-tokens/src/schemas/semantic-tokens.schema.json +52 -0
  182. package/packages/design-tokens/src/tokens/base.json +46 -0
  183. package/packages/design-tokens/src/tokens/semantic.json +33 -0
  184. package/packages/playground/CHANGELOG.md +12 -0
  185. package/packages/playground/package.json +10 -0
  186. package/packages/playground/public/favicon.ico +0 -0
  187. package/packages/playground/src/app/app.component.html +1 -0
  188. package/packages/playground/src/app/app.component.scss +4 -0
  189. package/packages/playground/src/app/app.component.ts +13 -0
  190. package/packages/playground/src/app/app.config.ts +9 -0
  191. package/packages/playground/src/editor/badl-editor.component.html +1 -0
  192. package/packages/playground/src/editor/badl-editor.component.scss +10 -0
  193. package/packages/playground/src/editor/badl-editor.component.ts +57 -0
  194. package/packages/playground/src/editor/editor.worker.ts +1 -0
  195. package/packages/playground/src/editor/json.worker.ts +1 -0
  196. package/packages/playground/src/editor/monaco-environment.ts +11 -0
  197. package/packages/playground/src/editor/schema-registry.ts +30 -0
  198. package/packages/playground/src/index.html +13 -0
  199. package/packages/playground/src/main.ts +5 -0
  200. package/packages/playground/src/schemas/capability.schema.json +104 -0
  201. package/packages/playground/src/schemas/contract.schema.json +52 -0
  202. package/packages/playground/src/schemas/domain.schema.json +47 -0
  203. package/packages/playground/src/schemas/entity.schema.json +72 -0
  204. package/packages/playground/src/schemas/extension.schema.json +39 -0
  205. package/packages/playground/src/schemas/permission.schema.json +21 -0
  206. package/packages/playground/src/styles.scss +8 -0
  207. package/packages/playground/src/test-setup.ts +146 -0
  208. package/packages/playground/vite.config.ts +12 -0
  209. package/packages/playground/vitest.config.mjs +24 -0
@@ -0,0 +1,274 @@
1
+ ## 0.0.22 (2026-09-04)
2
+
3
+ ### 🚀 Features
4
+
5
+ - scaffold playground application and e2e testing suite with initial editor component and schema registry ([f097894](https://github.com/OrigoStudio/origo-design/commit/f097894))
6
+ - add GitHub Actions workflow to automate library releases using Nx Release ([3d6651f](https://github.com/OrigoStudio/origo-design/commit/3d6651f))
7
+
8
+ ### ❤️ Thank You
9
+
10
+ - Hardik Patel @hardikpatelse
11
+
12
+ ## 0.0.21 (2026-09-02)
13
+
14
+ ### 🚀 Features
15
+
16
+ - add centralized test registry tool with validation logic, CI integration, and documentation artifacts ([384c1c7](https://github.com/OrigoStudio/origo-design/commit/384c1c7))
17
+ - implement central test registry with validation tools and CI integration ([02cf656](https://github.com/OrigoStudio/origo-design/commit/02cf656))
18
+ - initialize negative testing story and update sprint status tracking ([bbe5fdc](https://github.com/OrigoStudio/origo-design/commit/bbe5fdc))
19
+ - implement CLI framework with validation, testing, and CI/CD workflows ([ff6ce55](https://github.com/OrigoStudio/origo-design/commit/ff6ce55))
20
+ - implement validate command and schema validation logic for BADL files ([4f9e41d](https://github.com/OrigoStudio/origo-design/commit/4f9e41d))
21
+ - implement path traversal guards, remove process termination from library logic, and enable error cause preservation in @origo/cli ([0854f78](https://github.com/OrigoStudio/origo-design/commit/0854f78))
22
+ - initialize web-based editor component and track security remediation tasks in implementation artifacts ([65716bd](https://github.com/OrigoStudio/origo-design/commit/65716bd))
23
+ - document e2e npm verification plan for cli package releases ([22dab4c](https://github.com/OrigoStudio/origo-design/commit/22dab4c))
24
+ - initialize sprint status tracking and retrospective verification story for npm packaging ([c326751](https://github.com/OrigoStudio/origo-design/commit/c326751))
25
+ - add generated bundle for epic7-worker-csp spike ([16ca492](https://github.com/OrigoStudio/origo-design/commit/16ca492))
26
+ - add web worker CSP spike and associated implementation documentation ([ebf5aa4](https://github.com/OrigoStudio/origo-design/commit/ebf5aa4))
27
+ - implement web worker CSP spike with supporting documentation and harness tools ([f57b1e5](https://github.com/OrigoStudio/origo-design/commit/f57b1e5))
28
+ - add technical spike story for Epic 7 web worker CSP validation and ADR planning ([c977487](https://github.com/OrigoStudio/origo-design/commit/c977487))
29
+ - initialize sprint status tracking and create Epic 7 discovery research story ([b37b967](https://github.com/OrigoStudio/origo-design/commit/b37b967))
30
+ - implement entity generator command with template customization and ejection support ([02a3193](https://github.com/OrigoStudio/origo-design/commit/02a3193))
31
+ - implement entity generator command and template ejection logic in CLI ([d7d519a](https://github.com/OrigoStudio/origo-design/commit/d7d519a))
32
+ - implementation of 6-2-local-schema-validation ([45e67f6](https://github.com/OrigoStudio/origo-design/commit/45e67f6))
33
+
34
+ ### ❤️ Thank You
35
+
36
+ - Hardik Patel @hardikpatelse
37
+
38
+ ## 0.0.20 (2026-08-25)
39
+
40
+ ### 🚀 Features
41
+
42
+ - implementation of 6-1-cli-initialization-and-scaffolding ([f6aca9e](https://github.com/OrigoStudio/origo-design/commit/f6aca9e))
43
+
44
+ ### ❤️ Thank You
45
+
46
+ - Hardik Patel @hardikpatelse
47
+
48
+ ## 0.0.19 (2026-08-23)
49
+
50
+ ### 🚀 Features
51
+
52
+ - 5.5-5-define-secure-by-default-boilerplate-templates ([0eb6dde](https://github.com/OrigoStudio/origo-design/commit/0eb6dde))
53
+
54
+ ### ❤️ Thank You
55
+
56
+ - Hardik Patel @hardikpatelse
57
+
58
+ ## 0.0.18 (2026-08-23)
59
+
60
+ ### 🚀 Features
61
+
62
+ - 5.5-4-verify-core-compiler-source-map-preservation ([a3b0d9b](https://github.com/OrigoStudio/origo-design/commit/a3b0d9b))
63
+
64
+ ### 🩹 Fixes
65
+
66
+ - pipeline issue ([c1bbe47](https://github.com/OrigoStudio/origo-design/commit/c1bbe47))
67
+
68
+ ### ❤️ Thank You
69
+
70
+ - Hardik Patel @hardikpatelse
71
+
72
+ ## 0.0.17 (2026-08-21)
73
+
74
+ ### 🚀 Features
75
+
76
+ - 5.5-3-resolve-recursive-schema-resolution-tech-debt ([943e2e7](https://github.com/OrigoStudio/origo-design/commit/943e2e7))
77
+ - 5.5-2-establish-end-to-end-qa-protocols ([d8990ae](https://github.com/OrigoStudio/origo-design/commit/d8990ae))
78
+ - 5.5-2-establish-end-to-end-qa-protocols ([a31d97a](https://github.com/OrigoStudio/origo-design/commit/a31d97a))
79
+
80
+ ### ❤️ Thank You
81
+
82
+ - Hardik Patel @hardikpatelse
83
+
84
+ ## 0.0.16 (2026-08-21)
85
+
86
+ ### 🚀 Features
87
+
88
+ - 5.5-1-create-usability-quickstart-guide ([e740a1a](https://github.com/OrigoStudio/origo-design/commit/e740a1a))
89
+
90
+ ### ❤️ Thank You
91
+
92
+ - Hardik Patel @hardikpatelse
93
+
94
+ ## 0.0.15 (2026-08-20)
95
+
96
+ ### 🚀 Features
97
+
98
+ - code-review 5-5-reactive-state-event-binding ([b235951](https://github.com/OrigoStudio/origo-design/commit/b235951))
99
+ - implementation of 5-5-reactive-state-event-binding ([3a5948a](https://github.com/OrigoStudio/origo-design/commit/3a5948a))
100
+ - story creation 5-5-reactive-state-event-binding ([21104c6](https://github.com/OrigoStudio/origo-design/commit/21104c6))
101
+
102
+ ### ❤️ Thank You
103
+
104
+ - Hardik Patel @hardikpatelse
105
+
106
+ ## 0.0.14 (2026-08-19)
107
+
108
+ ### 🚀 Features
109
+
110
+ - 5-4-design-token-consumption ([c1f64ed](https://github.com/OrigoStudio/origo-design/commit/c1f64ed))
111
+ - add sprint status update and design token consumption story documentation ([49aec07](https://github.com/OrigoStudio/origo-design/commit/49aec07))
112
+
113
+ ### ❤️ Thank You
114
+
115
+ - Hardik Patel @hardikpatelse
116
+
117
+ ## 0.0.13 (2026-08-18)
118
+
119
+ ### 🚀 Features
120
+
121
+ - implement core primitives (Button, VBox, TextInput) with improved property coercion and accessibility support ([1be1def](https://github.com/OrigoStudio/origo-design/commit/1be1def))
122
+ - implement VBox, TextInput, and Button core primitives with accessibility testing and improved adapter coercion ([532417f](https://github.com/OrigoStudio/origo-design/commit/532417f))
123
+
124
+ ### ❤️ Thank You
125
+
126
+ - Hardik Patel @hardikpatelse
127
+
128
+ ## 0.0.12 (2026-08-17)
129
+
130
+ ### 🚀 Features
131
+
132
+ - implement InteractionContract-based OrigoAdapter and transition angular-renderer architecture to web adapter pattern ([1a8ea32](https://github.com/OrigoStudio/origo-design/commit/1a8ea32))
133
+
134
+ ### ❤️ Thank You
135
+
136
+ - Hardik Patel @hardikpatelse
137
+
138
+ ## 0.0.11 (2026-08-14)
139
+
140
+ ### 🚀 Features
141
+
142
+ - initialize changelogs and package manifests for core, design-tokens, and angular-renderer packages ([10455ec](https://github.com/OrigoStudio/origo-design/commit/10455ec))
143
+ - implement angular-renderer package with AST-based dynamic component instantiation and registry support ([500f396](https://github.com/OrigoStudio/origo-design/commit/500f396))
144
+
145
+ ### ❤️ Thank You
146
+
147
+ - Hardik Patel @hardikpatelse
148
+
149
+ ## 0.0.10 (2026-08-14)
150
+
151
+ ### 🚀 Features
152
+
153
+ - implement extension API scaffolding, define Angular signals patterns, and add renderer test utilities ([d2adbed](https://github.com/OrigoStudio/origo-design/commit/d2adbed))
154
+ - mark Epic 4 as complete and record its retrospective action items in sprint status ([37c2caa](https://github.com/OrigoStudio/origo-design/commit/37c2caa))
155
+
156
+ ### ❤️ Thank You
157
+
158
+ - Hardik Patel @hardikpatelse
159
+
160
+ ## 0.0.9 (2026-08-14)
161
+
162
+ ### 🚀 Features
163
+
164
+ - implement extension manager with manifest validation, permission security, and dependency resolution ([154b0d4](https://github.com/OrigoStudio/origo-design/commit/154b0d4))
165
+
166
+ ### ❤️ Thank You
167
+
168
+ - Hardik Patel @hardikpatelse
169
+
170
+ ## 0.0.8 (2026-08-14)
171
+
172
+ ### 🚀 Features
173
+
174
+ - implement formal extension manifest, capability negotiation, and lifecycle management in core extension-api ([808f113](https://github.com/OrigoStudio/origo-design/commit/808f113))
175
+
176
+ ### ❤️ Thank You
177
+
178
+ - Hardik Patel @hardikpatelse
179
+
180
+ ## 0.0.7 (2026-08-14)
181
+
182
+ ### 🚀 Features
183
+
184
+ - implement behavior validation test suite and expand AST validator test coverage ([d4c79ef](https://github.com/OrigoStudio/origo-design/commit/d4c79ef))
185
+ - register behavior validation suite story and update sprint status tracking ([798ec74](https://github.com/OrigoStudio/origo-design/commit/798ec74))
186
+
187
+ ### ❤️ Thank You
188
+
189
+ - Hardik Patel @hardikpatelse
190
+
191
+ ## 0.0.6 (2026-08-13)
192
+
193
+ ### 🚀 Features
194
+
195
+ - implement AST validation engine with support for circular dependency detection and reference integrity checks ([afd48c9](https://github.com/OrigoStudio/origo-design/commit/afd48c9))
196
+ - initialize sprint-status.yaml to track project development and retrospective action items ([66c6cdf](https://github.com/OrigoStudio/origo-design/commit/66c6cdf))
197
+
198
+ ### ❤️ Thank You
199
+
200
+ - Hardik Patel @hardikpatelse
201
+
202
+ ## 0.0.5 (2026-08-13)
203
+
204
+ ### 🚀 Features
205
+
206
+ - **core:** implement security and permissions engine ([d066d90](https://github.com/OrigoStudio/origo-design/commit/d066d90))
207
+ - add story 4.3 for security and permissions engine and update sprint status ([3eb4aae](https://github.com/OrigoStudio/origo-design/commit/3eb4aae))
208
+
209
+ ### ❤️ Thank You
210
+
211
+ - Hardik Patel @hardikpatelse
212
+
213
+ ## 0.0.4 (2026-08-13)
214
+
215
+ ### 🚀 Features
216
+
217
+ - implement semantic AST validator with domain, entity, and contract schema definitions ([e969466](https://github.com/OrigoStudio/origo-design/commit/e969466))
218
+ - update sprint status and initialize story 4-2 contracts and implementations documentation ([4b37c59](https://github.com/OrigoStudio/origo-design/commit/4b37c59))
219
+
220
+ ### ❤️ Thank You
221
+
222
+ - Hardik Patel @hardikpatelse
223
+
224
+ ## 0.0.3 (2026-08-13)
225
+
226
+ ### 🚀 Features
227
+
228
+ - 4-1-capabilities-schema-parsing ([869c872](https://github.com/OrigoStudio/origo-design/commit/869c872))
229
+
230
+ ### ❤️ Thank You
231
+
232
+ - Hardik Patel @hardikpatelse
233
+
234
+ ## 0.0.2 (2026-08-12)
235
+
236
+ ### 🚀 Features
237
+
238
+ - implement defensive AST validation with depth limiting, circular reference detection, and graceful error reporting ([d2f5f98](https://github.com/OrigoStudio/origo-design/commit/d2f5f98))
239
+ - initialize 3-5-3-defensive-ast-traversal story and update sprint status ([4f82702](https://github.com/OrigoStudio/origo-design/commit/4f82702))
240
+ - enforce JSON import standard and document AST validator ([162db09](https://github.com/OrigoStudio/origo-design/commit/162db09))
241
+ - implement automated semantic versioning with Nx release and commitlint enforcement ([5e7a25e](https://github.com/OrigoStudio/origo-design/commit/5e7a25e))
242
+ - implement AST validation engine and documentation for semantic versioning workflow ([838e472](https://github.com/OrigoStudio/origo-design/commit/838e472))
243
+ - implement AST validation engine and associated implementation artifacts ([49cbdf0](https://github.com/OrigoStudio/origo-design/commit/49cbdf0))
244
+ - implement deterministic canonical AST serialization and interfaces in @origo/core ([c35a2c9](https://github.com/OrigoStudio/origo-design/commit/c35a2c9))
245
+ - implement domain and entity schema parser with Ajv-based validation and circular dependency detection in new @origo/core package ([4165b5f](https://github.com/OrigoStudio/origo-design/commit/4165b5f))
246
+ - add design tokens documentation and update Starlight navigation configuration ([ba2404a](https://github.com/OrigoStudio/origo-design/commit/ba2404a))
247
+ - initialize Epic 3 planning and document Epic 2 retrospective findings ([4cc46f9](https://github.com/OrigoStudio/origo-design/commit/4cc46f9))
248
+ - implement runtime theme fetching, injection, and Angular renderer integration to complete the token resolution contract ([87f583e](https://github.com/OrigoStudio/origo-design/commit/87f583e))
249
+ - implement theme-fetcher runtime utility and create angular-renderer package with theme initialization provider ([1d5b7ab](https://github.com/OrigoStudio/origo-design/commit/1d5b7ab))
250
+ - implement secure theme injection with CSS token validation and scope management ([a708825](https://github.com/OrigoStudio/origo-design/commit/a708825))
251
+ - implement runtime theme injector for parsing and applying CSS variables ([969fed5](https://github.com/OrigoStudio/origo-design/commit/969fed5))
252
+ - add astro, @astrojs/starlight, and sharp dependencies to package.json ([1c40a92](https://github.com/OrigoStudio/origo-design/commit/1c40a92))
253
+ - implement design token compilation pipeline with CSS variable parsing and generation ([0ffe822](https://github.com/OrigoStudio/origo-design/commit/0ffe822))
254
+ - **nx-cloud:** setup nx cloud workspace ([ee09042](https://github.com/OrigoStudio/origo-design/commit/ee09042))
255
+ - **design-tokens:** implement css compilation pipeline ([7bd632d](https://github.com/OrigoStudio/origo-design/commit/7bd632d))
256
+ - add script to generate automated LLM review prompts from git diffs ([1ddbd39](https://github.com/OrigoStudio/origo-design/commit/1ddbd39))
257
+ - scaffold @origo/design-tokens package with JSON schema validation and Nx configuration ([ae61244](https://github.com/OrigoStudio/origo-design/commit/ae61244))
258
+ - scaffold @origo/design-tokens library with JSON schema validation and initial token definitions ([efbecc9](https://github.com/OrigoStudio/origo-design/commit/efbecc9))
259
+ - initialize Astro documentation site and relocate internal project scripts to the tools directory. ([1cd8e71](https://github.com/OrigoStudio/origo-design/commit/1cd8e71))
260
+ - add documentation story spec and update epic-1 status to done ([b612ea3](https://github.com/OrigoStudio/origo-design/commit/b612ea3))
261
+ - initialize and populate agent skill definitions, workflows, and technical knowledge resources ([8668c52](https://github.com/OrigoStudio/origo-design/commit/8668c52))
262
+ - initialize Starlight documentation site within the monorepo and add benchmark tools ([9a16b03](https://github.com/OrigoStudio/origo-design/commit/9a16b03))
263
+ - implement performance benchmark harness with regression and SLA gate logic ([350d472](https://github.com/OrigoStudio/origo-design/commit/350d472))
264
+ - implement performance benchmark harness with CI regression gating and SLA validation ([3230ac9](https://github.com/OrigoStudio/origo-design/commit/3230ac9))
265
+ - implement Husky pre-commit hooks and Nx-based lint-staged configuration ([9181885](https://github.com/OrigoStudio/origo-design/commit/9181885))
266
+ - add GitHub Actions CI workflow, Husky pre-commit hooks, and update package.json with necessary configuration ([95b8bf1](https://github.com/OrigoStudio/origo-design/commit/95b8bf1))
267
+ - configure Husky, lint-staged, and GitHub CI workflow for automated quality enforcement ([b6bf597](https://github.com/OrigoStudio/origo-design/commit/b6bf597))
268
+ - initialize Nx monorepo workspace with core configuration and tooling ([fd0665a](https://github.com/OrigoStudio/origo-design/commit/fd0665a))
269
+ - add sprint tracking artifacts and automation script for project bootstrapping ([ddc6149](https://github.com/OrigoStudio/origo-design/commit/ddc6149))
270
+ - document Origo Design functional requirements and architectural scope ([d1e0b7f](https://github.com/OrigoStudio/origo-design/commit/d1e0b7f))
271
+
272
+ ### ❤️ Thank You
273
+
274
+ - Hardik Patel @hardikpatelse
@@ -0,0 +1,11 @@
1
+ # angular-renderer
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build angular-renderer` to build the library.
8
+
9
+ ## Running unit tests
10
+
11
+ Run `nx test angular-renderer` to execute the unit tests via [Jest](https://jestjs.io).
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "angular-renderer",
3
+ "version": "0.0.22",
4
+ "private": true,
5
+ "type": "commonjs",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "dependencies": {
9
+ "@origo/core": "0.0.22",
10
+ "@origo/design-tokens": "0.0.22",
11
+ "tslib": "^2.3.0",
12
+ "@axe-core/playwright": "^4.13.0",
13
+ "@playwright/test": "^1.36.0"
14
+ },
15
+ "peerDependencies": {
16
+ "@angular/common": ">=18.0.0",
17
+ "@angular/core": ">=18.0.0",
18
+ "@angular/platform-browser": ">=18.0.0"
19
+ }
20
+ }
@@ -0,0 +1,23 @@
1
+ import { defineConfig, devices } from '@playwright/experimental-ct-angular';
2
+
3
+ export default defineConfig({
4
+ testDir: './src',
5
+ testMatch: /.*\.pw\.ts/,
6
+ snapshotDir: './__snapshots__',
7
+ timeout: 10 * 1000,
8
+ fullyParallel: true,
9
+ forbidOnly: !!process.env['CI'],
10
+ retries: process.env['CI'] ? 2 : 0,
11
+ workers: process.env['CI'] ? 1 : undefined,
12
+ reporter: 'html',
13
+ use: {
14
+ trace: 'on-first-retry',
15
+ ctPort: 3100,
16
+ },
17
+ projects: [
18
+ {
19
+ name: 'chromium',
20
+ use: { ...devices['Desktop Chrome'] },
21
+ },
22
+ ],
23
+ });
@@ -0,0 +1,145 @@
1
+ import { Injectable, ViewContainerRef, Signal, InputSignal } from '@angular/core';
2
+ import { ASTNode, InteractionContract } from '@origo/core';
3
+
4
+ export interface ContainerComponent {
5
+ viewContainerRef?: ViewContainerRef | Signal<ViewContainerRef>;
6
+ vc?: ViewContainerRef | Signal<ViewContainerRef>;
7
+ }
8
+
9
+ export interface OrigoAdapter<TProps = Record<string, unknown>> {
10
+ /**
11
+ * The core interaction contract driving this adapter.
12
+ */
13
+ contract: InputSignal<InteractionContract<TProps>>;
14
+ }
15
+
16
+ function deepClone<T>(obj: T): T {
17
+ if (obj === null || typeof obj !== 'object') {
18
+ return obj;
19
+ }
20
+ if (Array.isArray(obj)) {
21
+ return obj.map(item => deepClone(item)) as unknown as T;
22
+ }
23
+ const cloned = {} as Record<string, unknown>;
24
+ const typedObj = obj as Record<string, unknown>;
25
+ for (const key in typedObj) {
26
+ if (Object.prototype.hasOwnProperty.call(typedObj, key)) {
27
+ cloned[key] = deepClone(typedObj[key]) as unknown;
28
+ }
29
+ }
30
+ return cloned as unknown as T;
31
+ }
32
+
33
+ /**
34
+ * Validates and coerces runtime properties against a basic schema to ensure
35
+ * primitive components do not crash when given malformed BADL ast properties.
36
+ */
37
+ export function coerceContractProps<T>(
38
+ props: unknown,
39
+ schema?: Record<string, 'string' | 'number' | 'boolean' | 'array' | 'object'>,
40
+ strict = false
41
+ ): T {
42
+ if (!props || typeof props !== 'object' || Array.isArray(props)) {
43
+ return {} as T;
44
+ }
45
+
46
+ const result: Record<string, unknown> = {};
47
+ const inputProps = props as Record<string, unknown>;
48
+
49
+ if (!schema) {
50
+ if (strict) {
51
+ throw new Error('strict mode requires a schema');
52
+ }
53
+ for (const [key, val] of Object.entries(inputProps)) {
54
+ result[key] = deepClone(val);
55
+ }
56
+ return result as T;
57
+ }
58
+
59
+ for (const [key, value] of Object.entries(inputProps)) {
60
+ if (key.startsWith('aria-') || key.startsWith('data-')) {
61
+ result[key] = deepClone(value);
62
+ continue;
63
+ }
64
+
65
+ if (!schema[key]) {
66
+ if (!strict) {
67
+ result[key] = deepClone(value);
68
+ }
69
+ continue;
70
+ }
71
+
72
+ const expectedType = schema[key];
73
+ if (value === undefined || value === null) {
74
+ continue;
75
+ }
76
+
77
+ if (expectedType === 'string') {
78
+ result[key] = String(value);
79
+ } else if (expectedType === 'number') {
80
+ if (value === '' || typeof value === 'boolean') {
81
+ if (strict) throw new Error(`Invalid number for prop '${key}'`);
82
+ continue;
83
+ }
84
+ const num = Number(value);
85
+ if (isNaN(num)) {
86
+ if (strict) throw new Error(`Invalid number for prop '${key}': ${value}`);
87
+ } else {
88
+ result[key] = num;
89
+ }
90
+ } else if (expectedType === 'boolean') {
91
+ if (value === '') {
92
+ result[key] = true;
93
+ } else if (typeof value === 'string') {
94
+ const lower = value.toLowerCase();
95
+ result[key] = !(lower === 'false' || lower === '0' || lower === 'off');
96
+ } else {
97
+ result[key] = Boolean(value);
98
+ }
99
+ } else if (expectedType === 'array') {
100
+ const arr = Array.isArray(value) ? value : [value];
101
+ result[key] = deepClone(arr);
102
+ } else if (expectedType === 'object') {
103
+ if (Array.isArray(value)) {
104
+ if (strict) throw new Error(`Invalid object for prop '${key}'`);
105
+ continue;
106
+ }
107
+ const obj = typeof value === 'object' && value !== null ? value : {};
108
+ result[key] = deepClone(obj);
109
+ } else {
110
+ result[key] = deepClone(value);
111
+ }
112
+ }
113
+
114
+ return result as T;
115
+ }
116
+
117
+ @Injectable({ providedIn: 'root' })
118
+ export class AdapterPipelineService {
119
+ prepareNode(
120
+ node: ASTNode,
121
+ schema?: Record<string, 'string' | 'number' | 'boolean' | 'array' | 'object'>,
122
+ strict = false,
123
+ visited = new Set<string>()
124
+ ): InteractionContract {
125
+ if (visited.has(node.id)) {
126
+ return { id: node.id, type: node.type, props: {} };
127
+ }
128
+ visited.add(node.id);
129
+
130
+ // Translate the raw Canonical ASTNode into a stateless InteractionContract
131
+ const contract: InteractionContract = {
132
+ id: node.id,
133
+ type: node.type,
134
+ props: coerceContractProps(node.props, schema, strict),
135
+ };
136
+
137
+ if (node.children) {
138
+ contract.children = node.children.map(child =>
139
+ this.prepareNode(child, undefined, strict, visited)
140
+ );
141
+ }
142
+
143
+ return contract;
144
+ }
145
+ }
@@ -0,0 +1,21 @@
1
+ import { Injectable } from '@angular/core';
2
+
3
+ @Injectable({ providedIn: 'root' })
4
+ export class WebExperienceAdapterService {
5
+ dispatchCapability(nodeId: string, actionName: string, payload?: unknown): void {
6
+ // In Phase 1, this provides the stateless translation boundary (AD-15).
7
+ // Real dispatching logic to the core BADL engine would be wired here.
8
+ console.debug(
9
+ `[ExperienceAdapter] Dispatched capability '${actionName}' for node '${nodeId}'`,
10
+ payload
11
+ );
12
+ }
13
+
14
+ updateState(nodeId: string, property: string, value: unknown): void {
15
+ // In Phase 1, this provides the stateless translation boundary (AD-15).
16
+ console.debug(
17
+ `[ExperienceAdapter] Updated state for node '${nodeId}', property '${property}'`,
18
+ value
19
+ );
20
+ }
21
+ }
@@ -0,0 +1,9 @@
1
+ <button
2
+ [type]="computedType()"
3
+ [disabled]="computedDisabled()"
4
+ [attr.aria-label]="computedAriaLabel()"
5
+ [attr.aria-describedby]="computedAriaDescribedBy()"
6
+ (click)="onClick()"
7
+ >
8
+ {{ computedLabel() }}
9
+ </button>
@@ -0,0 +1,19 @@
1
+ import { test, expect } from '@playwright/experimental-ct-angular';
2
+ import { ButtonComponent } from './button.component';
3
+ import AxeBuilder from '@axe-core/playwright';
4
+
5
+ test.describe('ButtonComponent Accessibility', () => {
6
+ test('should not have any automatically detectable accessibility issues', async ({
7
+ mount,
8
+ page,
9
+ }) => {
10
+ await mount(ButtonComponent, {
11
+ props: {
12
+ contract: { id: '3', type: 'button', props: { label: 'Submit' } } as never,
13
+ },
14
+ });
15
+
16
+ const accessibilityScanResults = await new AxeBuilder({ page }).analyze();
17
+ expect(accessibilityScanResults.violations).toEqual([]);
18
+ });
19
+ });
@@ -0,0 +1,31 @@
1
+ :host {
2
+ display: inline-block;
3
+ }
4
+ button {
5
+ cursor: pointer;
6
+ background-color: var(--origo-color-surface-primary);
7
+ color: var(--origo-color-text-inverse);
8
+ padding: var(--origo-spacing-container-padding);
9
+ border: none;
10
+ border-radius: var(--origo-radius-sm, 4px);
11
+ box-shadow: var(--origo-shadow-sm, none);
12
+ font-family: var(--origo-typography-button-font-family, inherit);
13
+ font-size: var(--origo-typography-button-font-size, inherit);
14
+ font-weight: var(--origo-typography-button-font-weight, inherit);
15
+ line-height: var(--origo-typography-button-line-height, inherit);
16
+ transition: all 0.2s ease-in-out;
17
+ }
18
+ button:hover:not(:disabled) {
19
+ background-color: var(--origo-color-surface-primary-hover);
20
+ }
21
+ button:active:not(:disabled) {
22
+ background-color: var(--origo-color-surface-primary-active);
23
+ }
24
+ button:focus-visible {
25
+ outline: 2px solid var(--origo-color-focus, #005fcc);
26
+ outline-offset: 2px;
27
+ }
28
+ button:disabled {
29
+ cursor: not-allowed;
30
+ opacity: var(--origo-opacity-disabled, 0.5);
31
+ }
@@ -0,0 +1,67 @@
1
+ import {
2
+ Component,
3
+ input,
4
+ output,
5
+ ChangeDetectionStrategy,
6
+ computed,
7
+ ViewEncapsulation,
8
+ inject,
9
+ } from '@angular/core';
10
+ import { InteractionContract } from '@origo/core';
11
+ import { OrigoAdapter } from '../../../adapters/web/adapter';
12
+ import { WebExperienceAdapterService } from '../../../adapters/web/experience-adapter.service';
13
+
14
+ export interface ButtonProps {
15
+ label?: string;
16
+ disabled?: boolean;
17
+ type?: 'button' | 'submit' | 'reset';
18
+ 'aria-label'?: string;
19
+ 'aria-describedby'?: string;
20
+ }
21
+
22
+ @Component({
23
+ selector: 'origo-button',
24
+ standalone: true,
25
+ templateUrl: './button.component.html',
26
+ styleUrls: ['./button.component.scss'],
27
+ changeDetection: ChangeDetectionStrategy.OnPush,
28
+ encapsulation: ViewEncapsulation.ShadowDom,
29
+ host: {
30
+ '[class.origo-button]': 'true',
31
+ },
32
+ })
33
+ export class ButtonComponent implements OrigoAdapter<ButtonProps> {
34
+ static readonly contractSchema = {
35
+ label: 'string',
36
+ disabled: 'boolean',
37
+ type: 'string',
38
+ };
39
+ static readonly strictContract = false;
40
+
41
+ contract = input.required<InteractionContract<ButtonProps>>();
42
+
43
+ computedLabel = computed(() => this.contract().props?.label ?? 'Button');
44
+ computedDisabled = computed(() => !!this.contract().props?.disabled);
45
+ computedType = computed(() => {
46
+ const type = this.contract().props?.type;
47
+ return type === 'button' || type === 'submit' || type === 'reset' ? type : 'button';
48
+ });
49
+ computedAriaLabel = computed(() => this.contract().props?.['aria-label'] as string | undefined);
50
+ computedAriaDescribedBy = computed(
51
+ () => this.contract().props?.['aria-describedby'] as string | undefined
52
+ );
53
+
54
+ action = output<void>();
55
+
56
+ private experienceAdapter = inject(WebExperienceAdapterService);
57
+
58
+ onClick() {
59
+ if (this.computedDisabled()) return;
60
+
61
+ const id = this.contract().id;
62
+ if (!id) return;
63
+
64
+ this.experienceAdapter.dispatchCapability(id, 'click');
65
+ this.action.emit();
66
+ }
67
+ }
@@ -0,0 +1,33 @@
1
+ import { test, expect } from '@playwright/test';
2
+ import AxeBuilder from '@axe-core/playwright';
3
+
4
+ test.describe('Primitives Accessibility', () => {
5
+ test('Button should not have any automatically detectable accessibility issues', async ({
6
+ page,
7
+ }) => {
8
+ // Assuming a test sandbox or storybook page exists for the primitives.
9
+ // Since we don't have a specific URL, we will create a basic DOM structure with the component.
10
+ await page.setContent(`
11
+ <main>
12
+ <button class="origo-button" aria-label="Accessible Button">Click Me</button>
13
+ </main>
14
+ `);
15
+
16
+ const accessibilityScanResults = await new AxeBuilder({ page }).analyze();
17
+ expect(accessibilityScanResults.violations).toEqual([]);
18
+ });
19
+
20
+ test('TextInput should not have any automatically detectable accessibility issues', async ({
21
+ page,
22
+ }) => {
23
+ await page.setContent(`
24
+ <main>
25
+ <label for="test-input">Test Input</label>
26
+ <input id="test-input" type="text" class="origo-text-input" placeholder="Enter text" />
27
+ </main>
28
+ `);
29
+
30
+ const accessibilityScanResults = await new AxeBuilder({ page }).analyze();
31
+ expect(accessibilityScanResults.violations).toEqual([]);
32
+ });
33
+ });
@@ -0,0 +1,10 @@
1
+ <input
2
+ type="text"
3
+ [value]="value()"
4
+ (input)="onInput($event)"
5
+ [placeholder]="computedPlaceholder()"
6
+ [disabled]="computedDisabled()"
7
+ [readonly]="computedReadonly()"
8
+ [attr.aria-label]="computedAriaLabel()"
9
+ [attr.aria-describedby]="computedAriaDescribedBy()"
10
+ />