@supernal/interface 1.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 (519) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +165 -0
  3. package/dist/cjs/names/API.js +104 -0
  4. package/dist/cjs/names/API.js.map +1 -0
  5. package/dist/cjs/names/Components.js +104 -0
  6. package/dist/cjs/names/Components.js.map +1 -0
  7. package/dist/cjs/names/Containers.js +99 -0
  8. package/dist/cjs/names/Containers.js.map +1 -0
  9. package/dist/cjs/names/Functions.js +114 -0
  10. package/dist/cjs/names/Functions.js.map +1 -0
  11. package/dist/cjs/names/index.js +118 -0
  12. package/dist/cjs/names/index.js.map +1 -0
  13. package/dist/cjs/src/adapters/ChatUIProvider.js +176 -0
  14. package/dist/cjs/src/adapters/ChatUIProvider.js.map +1 -0
  15. package/dist/cjs/src/adapters/bridge.js +225 -0
  16. package/dist/cjs/src/adapters/bridge.js.map +1 -0
  17. package/dist/cjs/src/adapters/copilotkit/CopilotKitAdapter.js +289 -0
  18. package/dist/cjs/src/adapters/copilotkit/CopilotKitAdapter.js.map +1 -0
  19. package/dist/cjs/src/adapters/copilotkit/index.js +10 -0
  20. package/dist/cjs/src/adapters/copilotkit/index.js.map +1 -0
  21. package/dist/cjs/src/adapters/index.js +63 -0
  22. package/dist/cjs/src/adapters/index.js.map +1 -0
  23. package/dist/cjs/src/adapters/native/NativeAdapter.js +268 -0
  24. package/dist/cjs/src/adapters/native/NativeAdapter.js.map +1 -0
  25. package/dist/cjs/src/adapters/native/index.js +10 -0
  26. package/dist/cjs/src/adapters/native/index.js.map +1 -0
  27. package/dist/cjs/src/adapters/types/index.js +9 -0
  28. package/dist/cjs/src/adapters/types/index.js.map +1 -0
  29. package/dist/cjs/src/ai/ToolExecutor.js +211 -0
  30. package/dist/cjs/src/ai/ToolExecutor.js.map +1 -0
  31. package/dist/cjs/src/ai/ToolMatcher.js +202 -0
  32. package/dist/cjs/src/ai/ToolMatcher.js.map +1 -0
  33. package/dist/cjs/src/ai/index.js +29 -0
  34. package/dist/cjs/src/ai/index.js.map +1 -0
  35. package/dist/cjs/src/architecture/createContainer.js +106 -0
  36. package/dist/cjs/src/architecture/createContainer.js.map +1 -0
  37. package/dist/cjs/src/architecture/initialize.js +125 -0
  38. package/dist/cjs/src/architecture/initialize.js.map +1 -0
  39. package/dist/cjs/src/architecture/registry.js +111 -0
  40. package/dist/cjs/src/architecture/registry.js.map +1 -0
  41. package/dist/cjs/src/background/architecture/ArchitectureInitializer.js +174 -0
  42. package/dist/cjs/src/background/architecture/ArchitectureInitializer.js.map +1 -0
  43. package/dist/cjs/src/background/architecture/Containers.js +46 -0
  44. package/dist/cjs/src/background/architecture/Containers.js.map +1 -0
  45. package/dist/cjs/src/background/architecture/DataContractTypes.js +28 -0
  46. package/dist/cjs/src/background/architecture/DataContractTypes.js.map +1 -0
  47. package/dist/cjs/src/background/architecture/index.js +24 -0
  48. package/dist/cjs/src/background/architecture/index.js.map +1 -0
  49. package/dist/cjs/src/background/navigation/NavigationGraph.js +71 -0
  50. package/dist/cjs/src/background/navigation/NavigationGraph.js.map +1 -0
  51. package/dist/cjs/src/background/navigation/RuntimeTreeBuilder.js +66 -0
  52. package/dist/cjs/src/background/navigation/RuntimeTreeBuilder.js.map +1 -0
  53. package/dist/cjs/src/background/navigation/useComponentTracking.js +20 -0
  54. package/dist/cjs/src/background/navigation/useComponentTracking.js.map +1 -0
  55. package/dist/cjs/src/background/registry/ComponentRegistry.js +340 -0
  56. package/dist/cjs/src/background/registry/ComponentRegistry.js.map +1 -0
  57. package/dist/cjs/src/background/registry/ToolRegistry.js +668 -0
  58. package/dist/cjs/src/background/registry/ToolRegistry.js.map +1 -0
  59. package/dist/cjs/src/browser.js +70 -0
  60. package/dist/cjs/src/browser.js.map +1 -0
  61. package/dist/cjs/src/components/ComponentScanner.js +362 -0
  62. package/dist/cjs/src/components/ComponentScanner.js.map +1 -0
  63. package/dist/cjs/src/components/index.js +24 -0
  64. package/dist/cjs/src/components/index.js.map +1 -0
  65. package/dist/cjs/src/data/TestDataManager.js +187 -0
  66. package/dist/cjs/src/data/TestDataManager.js.map +1 -0
  67. package/dist/cjs/src/data/index.js +23 -0
  68. package/dist/cjs/src/data/index.js.map +1 -0
  69. package/dist/cjs/src/decorators/Component.js +108 -0
  70. package/dist/cjs/src/decorators/Component.js.map +1 -0
  71. package/dist/cjs/src/decorators/ContainerHelpers.js +45 -0
  72. package/dist/cjs/src/decorators/ContainerHelpers.js.map +1 -0
  73. package/dist/cjs/src/decorators/SpecializedTools.js +386 -0
  74. package/dist/cjs/src/decorators/SpecializedTools.js.map +1 -0
  75. package/dist/cjs/src/decorators/Tool.js +700 -0
  76. package/dist/cjs/src/decorators/Tool.js.map +1 -0
  77. package/dist/cjs/src/decorators/ToolHelpers.js +261 -0
  78. package/dist/cjs/src/decorators/ToolHelpers.js.map +1 -0
  79. package/dist/cjs/src/decorators/ToolPreset.js +270 -0
  80. package/dist/cjs/src/decorators/ToolPreset.js.map +1 -0
  81. package/dist/cjs/src/decorators/ToolProvider.js +86 -0
  82. package/dist/cjs/src/decorators/ToolProvider.js.map +1 -0
  83. package/dist/cjs/src/decorators/index.js +44 -0
  84. package/dist/cjs/src/decorators/index.js.map +1 -0
  85. package/dist/cjs/src/execution/DOMExecutor.js +233 -0
  86. package/dist/cjs/src/execution/DOMExecutor.js.map +1 -0
  87. package/dist/cjs/src/execution/PlaywrightExecutor.js +196 -0
  88. package/dist/cjs/src/execution/PlaywrightExecutor.js.map +1 -0
  89. package/dist/cjs/src/exposure/ExposureCollector.js +358 -0
  90. package/dist/cjs/src/exposure/ExposureCollector.js.map +1 -0
  91. package/dist/cjs/src/exposure/index.js +26 -0
  92. package/dist/cjs/src/exposure/index.js.map +1 -0
  93. package/dist/cjs/src/index.js +187 -0
  94. package/dist/cjs/src/index.js.map +1 -0
  95. package/dist/cjs/src/interfaces/StatefulComponent.js +50 -0
  96. package/dist/cjs/src/interfaces/StatefulComponent.js.map +1 -0
  97. package/dist/cjs/src/name-contracts/ContractScanner.js +15 -0
  98. package/dist/cjs/src/name-contracts/ContractScanner.js.map +1 -0
  99. package/dist/cjs/src/name-contracts/RouteContractScanner.js +225 -0
  100. package/dist/cjs/src/name-contracts/RouteContractScanner.js.map +1 -0
  101. package/dist/cjs/src/name-contracts/index.js +15 -0
  102. package/dist/cjs/src/name-contracts/index.js.map +1 -0
  103. package/dist/cjs/src/names/createNames.js +86 -0
  104. package/dist/cjs/src/names/createNames.js.map +1 -0
  105. package/dist/cjs/src/react/hooks/useChatWithContext.js +221 -0
  106. package/dist/cjs/src/react/hooks/useChatWithContext.js.map +1 -0
  107. package/dist/cjs/src/react/index.js +28 -0
  108. package/dist/cjs/src/react/index.js.map +1 -0
  109. package/dist/cjs/src/react/useNavigationHandler.js +88 -0
  110. package/dist/cjs/src/react/useNavigationHandler.js.map +1 -0
  111. package/dist/cjs/src/react/usePersistedState.js +72 -0
  112. package/dist/cjs/src/react/usePersistedState.js.map +1 -0
  113. package/dist/cjs/src/react/useToolBinding.js +110 -0
  114. package/dist/cjs/src/react/useToolBinding.js.map +1 -0
  115. package/dist/cjs/src/routes/RouteContractGenerator.js +119 -0
  116. package/dist/cjs/src/routes/RouteContractGenerator.js.map +1 -0
  117. package/dist/cjs/src/routes/RouteContractsConfig.js +39 -0
  118. package/dist/cjs/src/routes/RouteContractsConfig.js.map +1 -0
  119. package/dist/cjs/src/routes/index.js +20 -0
  120. package/dist/cjs/src/routes/index.js.map +1 -0
  121. package/dist/cjs/src/routes/scanners/NameExtractor.js +193 -0
  122. package/dist/cjs/src/routes/scanners/NameExtractor.js.map +1 -0
  123. package/dist/cjs/src/routes/scanners/NextjsDynamicScanner.js +102 -0
  124. package/dist/cjs/src/routes/scanners/NextjsDynamicScanner.js.map +1 -0
  125. package/dist/cjs/src/routes/scanners/RouteScanner.js +13 -0
  126. package/dist/cjs/src/routes/scanners/RouteScanner.js.map +1 -0
  127. package/dist/cjs/src/storage/LocalStorageAdapter.js +87 -0
  128. package/dist/cjs/src/storage/LocalStorageAdapter.js.map +1 -0
  129. package/dist/cjs/src/storage/StateManager.js +299 -0
  130. package/dist/cjs/src/storage/StateManager.js.map +1 -0
  131. package/dist/cjs/src/storage/StorageAdapter.js +164 -0
  132. package/dist/cjs/src/storage/StorageAdapter.js.map +1 -0
  133. package/dist/cjs/src/storage/index.js +37 -0
  134. package/dist/cjs/src/storage/index.js.map +1 -0
  135. package/dist/cjs/src/testing/BrowserStateInjection.js +130 -0
  136. package/dist/cjs/src/testing/BrowserStateInjection.js.map +1 -0
  137. package/dist/cjs/src/testing/ComponentStateHelpers.js +200 -0
  138. package/dist/cjs/src/testing/ComponentStateHelpers.js.map +1 -0
  139. package/dist/cjs/src/testing/GherkinParser.js +252 -0
  140. package/dist/cjs/src/testing/GherkinParser.js.map +1 -0
  141. package/dist/cjs/src/testing/PlaywrightStateHelpers.js +254 -0
  142. package/dist/cjs/src/testing/PlaywrightStateHelpers.js.map +1 -0
  143. package/dist/cjs/src/testing/TestRunner.js +158 -0
  144. package/dist/cjs/src/testing/TestRunner.js.map +1 -0
  145. package/dist/cjs/src/testing/index.js +46 -0
  146. package/dist/cjs/src/testing/index.js.map +1 -0
  147. package/dist/cjs/src/testing/selectors.js +84 -0
  148. package/dist/cjs/src/testing/selectors.js.map +1 -0
  149. package/dist/cjs/src/tools/SystemTools.js +262 -0
  150. package/dist/cjs/src/tools/SystemTools.js.map +1 -0
  151. package/dist/cjs/src/types/ClassifiedTool.js +50 -0
  152. package/dist/cjs/src/types/ClassifiedTool.js.map +1 -0
  153. package/dist/cjs/src/types/ComponentState.js +30 -0
  154. package/dist/cjs/src/types/ComponentState.js.map +1 -0
  155. package/dist/cjs/src/types/DiscoverableToolProvider.js +9 -0
  156. package/dist/cjs/src/types/DiscoverableToolProvider.js.map +1 -0
  157. package/dist/cjs/src/types/ExposureState.js +25 -0
  158. package/dist/cjs/src/types/ExposureState.js.map +1 -0
  159. package/dist/cjs/src/types/NavigationGraph.js +8 -0
  160. package/dist/cjs/src/types/NavigationGraph.js.map +1 -0
  161. package/dist/cjs/src/types/OperationType.js +49 -0
  162. package/dist/cjs/src/types/OperationType.js.map +1 -0
  163. package/dist/cjs/src/types/StateManagers.js +39 -0
  164. package/dist/cjs/src/types/StateManagers.js.map +1 -0
  165. package/dist/cjs/src/types/Tool.js +41 -0
  166. package/dist/cjs/src/types/Tool.js.map +1 -0
  167. package/dist/cjs/src/types/ToolPermissions.js +54 -0
  168. package/dist/cjs/src/types/ToolPermissions.js.map +1 -0
  169. package/dist/cjs/src/types/ToolResult.js +25 -0
  170. package/dist/cjs/src/types/ToolResult.js.map +1 -0
  171. package/dist/cjs/src/types/index.js +59 -0
  172. package/dist/cjs/src/types/index.js.map +1 -0
  173. package/dist/cjs/src/ui/react/chat/ChatBubble.js +221 -0
  174. package/dist/cjs/src/ui/react/chat/ChatBubble.js.map +1 -0
  175. package/dist/esm/names/API.d.ts +77 -0
  176. package/dist/esm/names/API.d.ts.map +1 -0
  177. package/dist/esm/names/API.js +99 -0
  178. package/dist/esm/names/API.js.map +1 -0
  179. package/dist/esm/names/Components.d.ts +77 -0
  180. package/dist/esm/names/Components.d.ts.map +1 -0
  181. package/dist/esm/names/Components.js +99 -0
  182. package/dist/esm/names/Components.js.map +1 -0
  183. package/dist/esm/names/Containers.d.ts +84 -0
  184. package/dist/esm/names/Containers.d.ts.map +1 -0
  185. package/dist/esm/names/Containers.js +94 -0
  186. package/dist/esm/names/Containers.js.map +1 -0
  187. package/dist/esm/names/Functions.d.ts +87 -0
  188. package/dist/esm/names/Functions.d.ts.map +1 -0
  189. package/dist/esm/names/Functions.js +109 -0
  190. package/dist/esm/names/Functions.js.map +1 -0
  191. package/dist/esm/names/index.d.ts +187 -0
  192. package/dist/esm/names/index.d.ts.map +1 -0
  193. package/dist/esm/names/index.js +99 -0
  194. package/dist/esm/names/index.js.map +1 -0
  195. package/dist/esm/src/adapters/ChatUIProvider.d.ts +76 -0
  196. package/dist/esm/src/adapters/ChatUIProvider.d.ts.map +1 -0
  197. package/dist/esm/src/adapters/ChatUIProvider.js +136 -0
  198. package/dist/esm/src/adapters/ChatUIProvider.js.map +1 -0
  199. package/dist/esm/src/adapters/bridge.d.ts +145 -0
  200. package/dist/esm/src/adapters/bridge.d.ts.map +1 -0
  201. package/dist/esm/src/adapters/bridge.js +218 -0
  202. package/dist/esm/src/adapters/bridge.js.map +1 -0
  203. package/dist/esm/src/adapters/copilotkit/CopilotKitAdapter.d.ts +49 -0
  204. package/dist/esm/src/adapters/copilotkit/CopilotKitAdapter.d.ts.map +1 -0
  205. package/dist/esm/src/adapters/copilotkit/CopilotKitAdapter.js +251 -0
  206. package/dist/esm/src/adapters/copilotkit/CopilotKitAdapter.js.map +1 -0
  207. package/dist/esm/src/adapters/copilotkit/index.d.ts +6 -0
  208. package/dist/esm/src/adapters/copilotkit/index.d.ts.map +1 -0
  209. package/dist/esm/src/adapters/copilotkit/index.js +5 -0
  210. package/dist/esm/src/adapters/copilotkit/index.js.map +1 -0
  211. package/dist/esm/src/adapters/index.d.ts +31 -0
  212. package/dist/esm/src/adapters/index.d.ts.map +1 -0
  213. package/dist/esm/src/adapters/index.js +32 -0
  214. package/dist/esm/src/adapters/index.js.map +1 -0
  215. package/dist/esm/src/adapters/native/NativeAdapter.d.ts +47 -0
  216. package/dist/esm/src/adapters/native/NativeAdapter.d.ts.map +1 -0
  217. package/dist/esm/src/adapters/native/NativeAdapter.js +230 -0
  218. package/dist/esm/src/adapters/native/NativeAdapter.js.map +1 -0
  219. package/dist/esm/src/adapters/native/index.d.ts +6 -0
  220. package/dist/esm/src/adapters/native/index.d.ts.map +1 -0
  221. package/dist/esm/src/adapters/native/index.js +5 -0
  222. package/dist/esm/src/adapters/native/index.js.map +1 -0
  223. package/dist/esm/src/adapters/types/index.d.ts +155 -0
  224. package/dist/esm/src/adapters/types/index.d.ts.map +1 -0
  225. package/dist/esm/src/adapters/types/index.js +8 -0
  226. package/dist/esm/src/adapters/types/index.js.map +1 -0
  227. package/dist/esm/src/ai/ToolExecutor.d.ts +49 -0
  228. package/dist/esm/src/ai/ToolExecutor.d.ts.map +1 -0
  229. package/dist/esm/src/ai/ToolExecutor.js +174 -0
  230. package/dist/esm/src/ai/ToolExecutor.js.map +1 -0
  231. package/dist/esm/src/ai/ToolMatcher.d.ts +61 -0
  232. package/dist/esm/src/ai/ToolMatcher.d.ts.map +1 -0
  233. package/dist/esm/src/ai/ToolMatcher.js +198 -0
  234. package/dist/esm/src/ai/ToolMatcher.js.map +1 -0
  235. package/dist/esm/src/ai/index.d.ts +9 -0
  236. package/dist/esm/src/ai/index.d.ts.map +1 -0
  237. package/dist/esm/src/ai/index.js +13 -0
  238. package/dist/esm/src/ai/index.js.map +1 -0
  239. package/dist/esm/src/architecture/createContainer.d.ts +60 -0
  240. package/dist/esm/src/architecture/createContainer.d.ts.map +1 -0
  241. package/dist/esm/src/architecture/createContainer.js +102 -0
  242. package/dist/esm/src/architecture/createContainer.js.map +1 -0
  243. package/dist/esm/src/architecture/initialize.d.ts +81 -0
  244. package/dist/esm/src/architecture/initialize.d.ts.map +1 -0
  245. package/dist/esm/src/architecture/initialize.js +121 -0
  246. package/dist/esm/src/architecture/initialize.js.map +1 -0
  247. package/dist/esm/src/architecture/registry.d.ts +61 -0
  248. package/dist/esm/src/architecture/registry.d.ts.map +1 -0
  249. package/dist/esm/src/architecture/registry.js +107 -0
  250. package/dist/esm/src/architecture/registry.js.map +1 -0
  251. package/dist/esm/src/background/architecture/ArchitectureInitializer.d.ts +95 -0
  252. package/dist/esm/src/background/architecture/ArchitectureInitializer.d.ts.map +1 -0
  253. package/dist/esm/src/background/architecture/ArchitectureInitializer.js +170 -0
  254. package/dist/esm/src/background/architecture/ArchitectureInitializer.js.map +1 -0
  255. package/dist/esm/src/background/architecture/Containers.d.ts +52 -0
  256. package/dist/esm/src/background/architecture/Containers.d.ts.map +1 -0
  257. package/dist/esm/src/background/architecture/Containers.js +40 -0
  258. package/dist/esm/src/background/architecture/Containers.js.map +1 -0
  259. package/dist/esm/src/background/architecture/DataContractTypes.d.ts +33 -0
  260. package/dist/esm/src/background/architecture/DataContractTypes.d.ts.map +1 -0
  261. package/dist/esm/src/background/architecture/DataContractTypes.js +22 -0
  262. package/dist/esm/src/background/architecture/DataContractTypes.js.map +1 -0
  263. package/dist/esm/src/background/architecture/index.d.ts +12 -0
  264. package/dist/esm/src/background/architecture/index.d.ts.map +1 -0
  265. package/dist/esm/src/background/architecture/index.js +13 -0
  266. package/dist/esm/src/background/architecture/index.js.map +1 -0
  267. package/dist/esm/src/background/navigation/NavigationGraph.d.ts +48 -0
  268. package/dist/esm/src/background/navigation/NavigationGraph.d.ts.map +1 -0
  269. package/dist/esm/src/background/navigation/NavigationGraph.js +67 -0
  270. package/dist/esm/src/background/navigation/NavigationGraph.js.map +1 -0
  271. package/dist/esm/src/background/navigation/RuntimeTreeBuilder.d.ts +30 -0
  272. package/dist/esm/src/background/navigation/RuntimeTreeBuilder.d.ts.map +1 -0
  273. package/dist/esm/src/background/navigation/RuntimeTreeBuilder.js +60 -0
  274. package/dist/esm/src/background/navigation/RuntimeTreeBuilder.js.map +1 -0
  275. package/dist/esm/src/background/navigation/useComponentTracking.d.ts +10 -0
  276. package/dist/esm/src/background/navigation/useComponentTracking.d.ts.map +1 -0
  277. package/dist/esm/src/background/navigation/useComponentTracking.js +17 -0
  278. package/dist/esm/src/background/navigation/useComponentTracking.js.map +1 -0
  279. package/dist/esm/src/background/registry/ComponentRegistry.d.ts +192 -0
  280. package/dist/esm/src/background/registry/ComponentRegistry.d.ts.map +1 -0
  281. package/dist/esm/src/background/registry/ComponentRegistry.js +336 -0
  282. package/dist/esm/src/background/registry/ComponentRegistry.js.map +1 -0
  283. package/dist/esm/src/background/registry/ToolRegistry.d.ts +232 -0
  284. package/dist/esm/src/background/registry/ToolRegistry.d.ts.map +1 -0
  285. package/dist/esm/src/background/registry/ToolRegistry.js +664 -0
  286. package/dist/esm/src/background/registry/ToolRegistry.js.map +1 -0
  287. package/dist/esm/src/browser.d.ts +21 -0
  288. package/dist/esm/src/browser.d.ts.map +1 -0
  289. package/dist/esm/src/browser.js +31 -0
  290. package/dist/esm/src/browser.js.map +1 -0
  291. package/dist/esm/src/components/ComponentScanner.d.ts +99 -0
  292. package/dist/esm/src/components/ComponentScanner.d.ts.map +1 -0
  293. package/dist/esm/src/components/ComponentScanner.js +325 -0
  294. package/dist/esm/src/components/ComponentScanner.js.map +1 -0
  295. package/dist/esm/src/components/index.d.ts +9 -0
  296. package/dist/esm/src/components/index.d.ts.map +1 -0
  297. package/dist/esm/src/components/index.js +8 -0
  298. package/dist/esm/src/components/index.js.map +1 -0
  299. package/dist/esm/src/data/TestDataManager.d.ts +125 -0
  300. package/dist/esm/src/data/TestDataManager.d.ts.map +1 -0
  301. package/dist/esm/src/data/TestDataManager.js +183 -0
  302. package/dist/esm/src/data/TestDataManager.js.map +1 -0
  303. package/dist/esm/src/data/index.d.ts +7 -0
  304. package/dist/esm/src/data/index.d.ts.map +1 -0
  305. package/dist/esm/src/data/index.js +7 -0
  306. package/dist/esm/src/data/index.js.map +1 -0
  307. package/dist/esm/src/decorators/Component.d.ts +59 -0
  308. package/dist/esm/src/decorators/Component.d.ts.map +1 -0
  309. package/dist/esm/src/decorators/Component.js +103 -0
  310. package/dist/esm/src/decorators/Component.js.map +1 -0
  311. package/dist/esm/src/decorators/ContainerHelpers.d.ts +26 -0
  312. package/dist/esm/src/decorators/ContainerHelpers.d.ts.map +1 -0
  313. package/dist/esm/src/decorators/ContainerHelpers.js +42 -0
  314. package/dist/esm/src/decorators/ContainerHelpers.js.map +1 -0
  315. package/dist/esm/src/decorators/SpecializedTools.d.ts +218 -0
  316. package/dist/esm/src/decorators/SpecializedTools.d.ts.map +1 -0
  317. package/dist/esm/src/decorators/SpecializedTools.js +383 -0
  318. package/dist/esm/src/decorators/SpecializedTools.js.map +1 -0
  319. package/dist/esm/src/decorators/Tool.d.ts +210 -0
  320. package/dist/esm/src/decorators/Tool.d.ts.map +1 -0
  321. package/dist/esm/src/decorators/Tool.js +694 -0
  322. package/dist/esm/src/decorators/Tool.js.map +1 -0
  323. package/dist/esm/src/decorators/ToolHelpers.d.ts +74 -0
  324. package/dist/esm/src/decorators/ToolHelpers.d.ts.map +1 -0
  325. package/dist/esm/src/decorators/ToolHelpers.js +219 -0
  326. package/dist/esm/src/decorators/ToolHelpers.js.map +1 -0
  327. package/dist/esm/src/decorators/ToolPreset.d.ts +138 -0
  328. package/dist/esm/src/decorators/ToolPreset.d.ts.map +1 -0
  329. package/dist/esm/src/decorators/ToolPreset.js +259 -0
  330. package/dist/esm/src/decorators/ToolPreset.js.map +1 -0
  331. package/dist/esm/src/decorators/ToolProvider.d.ts +65 -0
  332. package/dist/esm/src/decorators/ToolProvider.d.ts.map +1 -0
  333. package/dist/esm/src/decorators/ToolProvider.js +81 -0
  334. package/dist/esm/src/decorators/ToolProvider.js.map +1 -0
  335. package/dist/esm/src/decorators/index.d.ts +13 -0
  336. package/dist/esm/src/decorators/index.d.ts.map +1 -0
  337. package/dist/esm/src/decorators/index.js +14 -0
  338. package/dist/esm/src/decorators/index.js.map +1 -0
  339. package/dist/esm/src/execution/DOMExecutor.d.ts +43 -0
  340. package/dist/esm/src/execution/DOMExecutor.d.ts.map +1 -0
  341. package/dist/esm/src/execution/DOMExecutor.js +229 -0
  342. package/dist/esm/src/execution/DOMExecutor.js.map +1 -0
  343. package/dist/esm/src/execution/PlaywrightExecutor.d.ts +38 -0
  344. package/dist/esm/src/execution/PlaywrightExecutor.d.ts.map +1 -0
  345. package/dist/esm/src/execution/PlaywrightExecutor.js +192 -0
  346. package/dist/esm/src/execution/PlaywrightExecutor.js.map +1 -0
  347. package/dist/esm/src/exposure/ExposureCollector.d.ts +88 -0
  348. package/dist/esm/src/exposure/ExposureCollector.d.ts.map +1 -0
  349. package/dist/esm/src/exposure/ExposureCollector.js +354 -0
  350. package/dist/esm/src/exposure/ExposureCollector.js.map +1 -0
  351. package/dist/esm/src/exposure/index.d.ts +8 -0
  352. package/dist/esm/src/exposure/index.d.ts.map +1 -0
  353. package/dist/esm/src/exposure/index.js +10 -0
  354. package/dist/esm/src/exposure/index.js.map +1 -0
  355. package/dist/esm/src/index.d.ts +49 -0
  356. package/dist/esm/src/index.d.ts.map +1 -0
  357. package/dist/esm/src/index.js +79 -0
  358. package/dist/esm/src/index.js.map +1 -0
  359. package/dist/esm/src/interfaces/StatefulComponent.d.ts +72 -0
  360. package/dist/esm/src/interfaces/StatefulComponent.d.ts.map +1 -0
  361. package/dist/esm/src/interfaces/StatefulComponent.js +47 -0
  362. package/dist/esm/src/interfaces/StatefulComponent.js.map +1 -0
  363. package/dist/esm/src/name-contracts/ContractScanner.d.ts +61 -0
  364. package/dist/esm/src/name-contracts/ContractScanner.d.ts.map +1 -0
  365. package/dist/esm/src/name-contracts/ContractScanner.js +11 -0
  366. package/dist/esm/src/name-contracts/ContractScanner.js.map +1 -0
  367. package/dist/esm/src/name-contracts/RouteContractScanner.d.ts +30 -0
  368. package/dist/esm/src/name-contracts/RouteContractScanner.d.ts.map +1 -0
  369. package/dist/esm/src/name-contracts/RouteContractScanner.js +188 -0
  370. package/dist/esm/src/name-contracts/RouteContractScanner.js.map +1 -0
  371. package/dist/esm/src/name-contracts/index.d.ts +10 -0
  372. package/dist/esm/src/name-contracts/index.d.ts.map +1 -0
  373. package/dist/esm/src/name-contracts/index.js +10 -0
  374. package/dist/esm/src/name-contracts/index.js.map +1 -0
  375. package/dist/esm/src/names/createNames.d.ts +49 -0
  376. package/dist/esm/src/names/createNames.d.ts.map +1 -0
  377. package/dist/esm/src/names/createNames.js +81 -0
  378. package/dist/esm/src/names/createNames.js.map +1 -0
  379. package/dist/esm/src/react/hooks/useChatWithContext.d.ts +68 -0
  380. package/dist/esm/src/react/hooks/useChatWithContext.d.ts.map +1 -0
  381. package/dist/esm/src/react/hooks/useChatWithContext.js +218 -0
  382. package/dist/esm/src/react/hooks/useChatWithContext.js.map +1 -0
  383. package/dist/esm/src/react/index.d.ts +12 -0
  384. package/dist/esm/src/react/index.d.ts.map +1 -0
  385. package/dist/esm/src/react/index.js +21 -0
  386. package/dist/esm/src/react/index.js.map +1 -0
  387. package/dist/esm/src/react/useNavigationHandler.d.ts +42 -0
  388. package/dist/esm/src/react/useNavigationHandler.d.ts.map +1 -0
  389. package/dist/esm/src/react/useNavigationHandler.js +85 -0
  390. package/dist/esm/src/react/useNavigationHandler.js.map +1 -0
  391. package/dist/esm/src/react/usePersistedState.d.ts +13 -0
  392. package/dist/esm/src/react/usePersistedState.d.ts.map +1 -0
  393. package/dist/esm/src/react/usePersistedState.js +69 -0
  394. package/dist/esm/src/react/usePersistedState.js.map +1 -0
  395. package/dist/esm/src/react/useToolBinding.d.ts +8 -0
  396. package/dist/esm/src/react/useToolBinding.d.ts.map +1 -0
  397. package/dist/esm/src/react/useToolBinding.js +107 -0
  398. package/dist/esm/src/react/useToolBinding.js.map +1 -0
  399. package/dist/esm/src/routes/RouteContractGenerator.d.ts +37 -0
  400. package/dist/esm/src/routes/RouteContractGenerator.d.ts.map +1 -0
  401. package/dist/esm/src/routes/RouteContractGenerator.js +115 -0
  402. package/dist/esm/src/routes/RouteContractGenerator.js.map +1 -0
  403. package/dist/esm/src/routes/RouteContractsConfig.d.ts +93 -0
  404. package/dist/esm/src/routes/RouteContractsConfig.d.ts.map +1 -0
  405. package/dist/esm/src/routes/RouteContractsConfig.js +36 -0
  406. package/dist/esm/src/routes/RouteContractsConfig.js.map +1 -0
  407. package/dist/esm/src/routes/index.d.ts +13 -0
  408. package/dist/esm/src/routes/index.d.ts.map +1 -0
  409. package/dist/esm/src/routes/index.js +13 -0
  410. package/dist/esm/src/routes/index.js.map +1 -0
  411. package/dist/esm/src/routes/scanners/NameExtractor.d.ts +36 -0
  412. package/dist/esm/src/routes/scanners/NameExtractor.d.ts.map +1 -0
  413. package/dist/esm/src/routes/scanners/NameExtractor.js +156 -0
  414. package/dist/esm/src/routes/scanners/NameExtractor.js.map +1 -0
  415. package/dist/esm/src/routes/scanners/NextjsDynamicScanner.d.ts +35 -0
  416. package/dist/esm/src/routes/scanners/NextjsDynamicScanner.d.ts.map +1 -0
  417. package/dist/esm/src/routes/scanners/NextjsDynamicScanner.js +98 -0
  418. package/dist/esm/src/routes/scanners/NextjsDynamicScanner.js.map +1 -0
  419. package/dist/esm/src/routes/scanners/RouteScanner.d.ts +64 -0
  420. package/dist/esm/src/routes/scanners/RouteScanner.d.ts.map +1 -0
  421. package/dist/esm/src/routes/scanners/RouteScanner.js +9 -0
  422. package/dist/esm/src/routes/scanners/RouteScanner.js.map +1 -0
  423. package/dist/esm/src/storage/LocalStorageAdapter.d.ts +29 -0
  424. package/dist/esm/src/storage/LocalStorageAdapter.d.ts.map +1 -0
  425. package/dist/esm/src/storage/LocalStorageAdapter.js +83 -0
  426. package/dist/esm/src/storage/LocalStorageAdapter.js.map +1 -0
  427. package/dist/esm/src/storage/StateManager.d.ts +175 -0
  428. package/dist/esm/src/storage/StateManager.d.ts.map +1 -0
  429. package/dist/esm/src/storage/StateManager.js +295 -0
  430. package/dist/esm/src/storage/StateManager.js.map +1 -0
  431. package/dist/esm/src/storage/StorageAdapter.d.ts +94 -0
  432. package/dist/esm/src/storage/StorageAdapter.d.ts.map +1 -0
  433. package/dist/esm/src/storage/StorageAdapter.js +158 -0
  434. package/dist/esm/src/storage/StorageAdapter.js.map +1 -0
  435. package/dist/esm/src/storage/index.d.ts +12 -0
  436. package/dist/esm/src/storage/index.d.ts.map +1 -0
  437. package/dist/esm/src/storage/index.js +17 -0
  438. package/dist/esm/src/storage/index.js.map +1 -0
  439. package/dist/esm/src/testing/BrowserStateInjection.d.ts +74 -0
  440. package/dist/esm/src/testing/BrowserStateInjection.d.ts.map +1 -0
  441. package/dist/esm/src/testing/BrowserStateInjection.js +126 -0
  442. package/dist/esm/src/testing/BrowserStateInjection.js.map +1 -0
  443. package/dist/esm/src/testing/ComponentStateHelpers.d.ts +121 -0
  444. package/dist/esm/src/testing/ComponentStateHelpers.d.ts.map +1 -0
  445. package/dist/esm/src/testing/ComponentStateHelpers.js +190 -0
  446. package/dist/esm/src/testing/ComponentStateHelpers.js.map +1 -0
  447. package/dist/esm/src/testing/GherkinParser.d.ts +87 -0
  448. package/dist/esm/src/testing/GherkinParser.d.ts.map +1 -0
  449. package/dist/esm/src/testing/GherkinParser.js +248 -0
  450. package/dist/esm/src/testing/GherkinParser.js.map +1 -0
  451. package/dist/esm/src/testing/PlaywrightStateHelpers.d.ts +163 -0
  452. package/dist/esm/src/testing/PlaywrightStateHelpers.d.ts.map +1 -0
  453. package/dist/esm/src/testing/PlaywrightStateHelpers.js +242 -0
  454. package/dist/esm/src/testing/PlaywrightStateHelpers.js.map +1 -0
  455. package/dist/esm/src/testing/TestRunner.d.ts +50 -0
  456. package/dist/esm/src/testing/TestRunner.d.ts.map +1 -0
  457. package/dist/esm/src/testing/TestRunner.js +121 -0
  458. package/dist/esm/src/testing/TestRunner.js.map +1 -0
  459. package/dist/esm/src/testing/index.d.ts +12 -0
  460. package/dist/esm/src/testing/index.d.ts.map +1 -0
  461. package/dist/esm/src/testing/index.js +25 -0
  462. package/dist/esm/src/testing/index.js.map +1 -0
  463. package/dist/esm/src/testing/selectors.d.ts +65 -0
  464. package/dist/esm/src/testing/selectors.d.ts.map +1 -0
  465. package/dist/esm/src/testing/selectors.js +76 -0
  466. package/dist/esm/src/testing/selectors.js.map +1 -0
  467. package/dist/esm/src/tools/SystemTools.d.ts +139 -0
  468. package/dist/esm/src/tools/SystemTools.d.ts.map +1 -0
  469. package/dist/esm/src/tools/SystemTools.js +258 -0
  470. package/dist/esm/src/tools/SystemTools.js.map +1 -0
  471. package/dist/esm/src/types/ClassifiedTool.d.ts +61 -0
  472. package/dist/esm/src/types/ClassifiedTool.d.ts.map +1 -0
  473. package/dist/esm/src/types/ClassifiedTool.js +47 -0
  474. package/dist/esm/src/types/ClassifiedTool.js.map +1 -0
  475. package/dist/esm/src/types/ComponentState.d.ts +207 -0
  476. package/dist/esm/src/types/ComponentState.d.ts.map +1 -0
  477. package/dist/esm/src/types/ComponentState.js +25 -0
  478. package/dist/esm/src/types/ComponentState.js.map +1 -0
  479. package/dist/esm/src/types/DiscoverableToolProvider.d.ts +59 -0
  480. package/dist/esm/src/types/DiscoverableToolProvider.d.ts.map +1 -0
  481. package/dist/esm/src/types/DiscoverableToolProvider.js +8 -0
  482. package/dist/esm/src/types/DiscoverableToolProvider.js.map +1 -0
  483. package/dist/esm/src/types/ExposureState.d.ts +75 -0
  484. package/dist/esm/src/types/ExposureState.d.ts.map +1 -0
  485. package/dist/esm/src/types/ExposureState.js +22 -0
  486. package/dist/esm/src/types/ExposureState.js.map +1 -0
  487. package/dist/esm/src/types/NavigationGraph.d.ts +98 -0
  488. package/dist/esm/src/types/NavigationGraph.d.ts.map +1 -0
  489. package/dist/esm/src/types/NavigationGraph.js +7 -0
  490. package/dist/esm/src/types/NavigationGraph.js.map +1 -0
  491. package/dist/esm/src/types/OperationType.d.ts +45 -0
  492. package/dist/esm/src/types/OperationType.d.ts.map +1 -0
  493. package/dist/esm/src/types/OperationType.js +46 -0
  494. package/dist/esm/src/types/OperationType.js.map +1 -0
  495. package/dist/esm/src/types/StateManagers.d.ts +35 -0
  496. package/dist/esm/src/types/StateManagers.d.ts.map +1 -0
  497. package/dist/esm/src/types/StateManagers.js +36 -0
  498. package/dist/esm/src/types/StateManagers.js.map +1 -0
  499. package/dist/esm/src/types/Tool.d.ts +162 -0
  500. package/dist/esm/src/types/Tool.d.ts.map +1 -0
  501. package/dist/esm/src/types/Tool.js +38 -0
  502. package/dist/esm/src/types/Tool.js.map +1 -0
  503. package/dist/esm/src/types/ToolPermissions.d.ts +73 -0
  504. package/dist/esm/src/types/ToolPermissions.d.ts.map +1 -0
  505. package/dist/esm/src/types/ToolPermissions.js +51 -0
  506. package/dist/esm/src/types/ToolPermissions.js.map +1 -0
  507. package/dist/esm/src/types/ToolResult.d.ts +129 -0
  508. package/dist/esm/src/types/ToolResult.d.ts.map +1 -0
  509. package/dist/esm/src/types/ToolResult.js +22 -0
  510. package/dist/esm/src/types/ToolResult.js.map +1 -0
  511. package/dist/esm/src/types/index.d.ts +47 -0
  512. package/dist/esm/src/types/index.d.ts.map +1 -0
  513. package/dist/esm/src/types/index.js +42 -0
  514. package/dist/esm/src/types/index.js.map +1 -0
  515. package/dist/esm/src/ui/react/chat/ChatBubble.d.ts +23 -0
  516. package/dist/esm/src/ui/react/chat/ChatBubble.d.ts.map +1 -0
  517. package/dist/esm/src/ui/react/chat/ChatBubble.js +184 -0
  518. package/dist/esm/src/ui/react/chat/ChatBubble.js.map +1 -0
  519. package/package.json +118 -0
@@ -0,0 +1,248 @@
1
+ /**
2
+ * Gherkin Parser
3
+ *
4
+ * Parses Gherkin .feature files and converts them to executable test scenarios.
5
+ * Basic open-source version (Story system is enterprise edition).
6
+ */
7
+ // Story system moved to enterprise edition
8
+ // import { StoryBuilder, StoryDefinition, StoryRegistry } from '../background/stories.js';
9
+ import { ToolRegistry } from '../background/registry/ToolRegistry.js';
10
+ export class GherkinParser {
11
+ /**
12
+ * Parse a Gherkin feature file content
13
+ */
14
+ static parseFeature(content) {
15
+ const lines = content.split('\n').map(l => l.trim()).filter(l => l && !l.startsWith('#'));
16
+ let feature = {
17
+ scenarios: []
18
+ };
19
+ let currentScenario = null;
20
+ let tags = [];
21
+ for (const line of lines) {
22
+ // Parse tags
23
+ if (line.startsWith('@')) {
24
+ tags = line.split(/\s+/).map(t => t.substring(1));
25
+ continue;
26
+ }
27
+ // Parse feature
28
+ if (line.startsWith('Feature:')) {
29
+ feature.name = line.substring(8).trim();
30
+ if (tags.length > 0) {
31
+ feature.tags = tags;
32
+ tags = [];
33
+ }
34
+ continue;
35
+ }
36
+ // Parse scenario
37
+ if (line.startsWith('Scenario:')) {
38
+ if (currentScenario) {
39
+ feature.scenarios.push(currentScenario);
40
+ }
41
+ currentScenario = {
42
+ name: line.substring(9).trim(),
43
+ tags: tags.length > 0 ? tags : undefined,
44
+ steps: []
45
+ };
46
+ tags = [];
47
+ continue;
48
+ }
49
+ // Parse steps
50
+ const stepMatch = line.match(/^(Given|When|Then|And|But)\s+(.+)$/);
51
+ if (stepMatch && currentScenario) {
52
+ const [, keyword, text] = stepMatch;
53
+ currentScenario.steps.push({
54
+ keyword: keyword,
55
+ text
56
+ });
57
+ }
58
+ // Description (lines after Feature: but before Scenario:)
59
+ if (!line.startsWith('Feature:') && !line.startsWith('Scenario:') && !stepMatch && feature.name && !currentScenario) {
60
+ feature.description = (feature.description || '') + line + ' ';
61
+ }
62
+ }
63
+ // Add last scenario
64
+ if (currentScenario) {
65
+ feature.scenarios.push(currentScenario);
66
+ }
67
+ return feature;
68
+ }
69
+ /**
70
+ * Resolve tool IDs from step text using natural language matching
71
+ */
72
+ static resolveSteps(steps) {
73
+ return steps.map(step => {
74
+ // Extract the command text (without Given/When/Then)
75
+ const commandText = step.text.toLowerCase();
76
+ // Try to find matching tool
77
+ const tools = ToolRegistry.searchTools(commandText);
78
+ if (tools.length > 0) {
79
+ // Use best match (first result)
80
+ const tool = tools[0];
81
+ // Extract parameters from step text
82
+ const params = this.extractParameters(step.text, tool.examples || []);
83
+ return {
84
+ ...step,
85
+ toolId: tool.toolId,
86
+ params
87
+ };
88
+ }
89
+ return step;
90
+ });
91
+ }
92
+ /**
93
+ * Extract parameters from step text
94
+ */
95
+ static extractParameters(text, examples) {
96
+ const params = {};
97
+ // Look for quoted strings
98
+ const quotedMatch = text.match(/"([^"]+)"/g);
99
+ if (quotedMatch) {
100
+ params.value = quotedMatch[0].replace(/"/g, '');
101
+ }
102
+ // Look for numbers
103
+ const numberMatch = text.match(/\b\d+\b/);
104
+ if (numberMatch) {
105
+ params.count = parseInt(numberMatch[0]);
106
+ }
107
+ return params;
108
+ }
109
+ /**
110
+ * Convert Gherkin scenario to Story definition
111
+ *
112
+ * NOTE: Story system is part of @supernal/interface-enterprise
113
+ * This method is not available in the open source edition.
114
+ *
115
+ * For enterprise features including story system, visit:
116
+ * https://supernal.ai/enterprise
117
+ */
118
+ static scenarioToStory(scenario, featureName) {
119
+ throw new Error('Story system is part of @supernal/interface-enterprise. ' +
120
+ 'Visit https://supernal.ai/enterprise for more information.');
121
+ }
122
+ /**
123
+ * Convert entire feature to stories and register them
124
+ *
125
+ * NOTE: Story system is part of @supernal/interface-enterprise
126
+ * This method is not available in the open source edition.
127
+ */
128
+ static featureToStories(feature) {
129
+ throw new Error('Story system is part of @supernal/interface-enterprise. ' +
130
+ 'Visit https://supernal.ai/enterprise for more information.');
131
+ }
132
+ /**
133
+ * Generate unique story ID from feature and scenario names
134
+ */
135
+ static generateStoryId(featureName, scenarioName) {
136
+ const cleanFeature = featureName.toLowerCase().replace(/[^a-z0-9]+/g, '-');
137
+ const cleanScenario = scenarioName.toLowerCase().replace(/[^a-z0-9]+/g, '-');
138
+ return `${cleanFeature}-${cleanScenario}`;
139
+ }
140
+ /**
141
+ * Generate Gherkin steps from tools
142
+ * Moved from ToolPromptGenerator for consolidation
143
+ */
144
+ static generateSteps(tools) {
145
+ return tools
146
+ .map(tool => {
147
+ const examples = tool.examples || [tool.name.toLowerCase()];
148
+ return examples
149
+ .map((ex) => ` When I ${ex}`)
150
+ .join('\n');
151
+ })
152
+ .join('\n');
153
+ }
154
+ /**
155
+ * Generate complete Gherkin feature from tool metadata
156
+ * Consolidated from both ToolPromptGenerator and original generateFeature
157
+ */
158
+ static generateFeature(featureName, tools, options) {
159
+ let feature = '';
160
+ // Tags
161
+ if (options?.tags && options.tags.length > 0) {
162
+ feature += options.tags.map(t => `@${t}`).join(' ') + '\n';
163
+ }
164
+ // Feature header
165
+ feature += `Feature: ${featureName}\n`;
166
+ if (options?.description) {
167
+ feature += ` ${options.description}\n`;
168
+ }
169
+ feature += '\n Scenario: AI navigation and interaction\n';
170
+ // Generate steps from tools
171
+ feature += this.generateSteps(tools);
172
+ return feature;
173
+ }
174
+ /**
175
+ * Generate Playwright test from Gherkin feature
176
+ */
177
+ static generatePlaywrightTest(feature) {
178
+ let test = `/**\n`;
179
+ test += ` * ${feature.name} - Generated from Gherkin\n`;
180
+ test += ` */\n\n`;
181
+ test += `import { test, expect } from '@playwright/test';\n`;
182
+ test += `import { StoryExecutor } from '@supernal-interface/core';\n\n`;
183
+ test += `test.describe('${feature.name}', () => {\n`;
184
+ for (const scenario of feature.scenarios) {
185
+ const storyId = this.generateStoryId(feature.name, scenario.name);
186
+ test += ` test('${scenario.name}', async ({ page }) => {\n`;
187
+ test += ` const executor = new StoryExecutor();\n`;
188
+ test += ` const context = { page };\n`;
189
+ test += ` \n`;
190
+ test += ` const result = await executor.executeStory('${storyId}', context);\n`;
191
+ test += ` \n`;
192
+ test += ` expect(result.success).toBe(true);\n`;
193
+ test += ` });\n\n`;
194
+ }
195
+ test += `});\n`;
196
+ return test;
197
+ }
198
+ /**
199
+ * Validate round-trip: Generate → Parse → Generate
200
+ * Ensures parsing and generation are consistent
201
+ */
202
+ static validateRoundTrip(tools, featureName = 'Test Feature') {
203
+ const errors = [];
204
+ // Generate original
205
+ const original = this.generateFeature(featureName, tools);
206
+ // Parse it
207
+ let parsed;
208
+ try {
209
+ parsed = this.parseFeature(original);
210
+ }
211
+ catch (error) {
212
+ return {
213
+ valid: false,
214
+ original,
215
+ parsed: { name: '', scenarios: [] },
216
+ regenerated: '',
217
+ errors: [`Parse error: ${error}`]
218
+ };
219
+ }
220
+ // Regenerate from parsed structure
221
+ const regenerated = this.generateFeature(parsed.name, tools, {
222
+ description: parsed.description,
223
+ tags: parsed.tags
224
+ });
225
+ // Compare (normalized)
226
+ const normalizeGherkin = (str) => str.trim().replace(/\s+/g, ' ').replace(/\n\s*/g, '\n');
227
+ const originalNorm = normalizeGherkin(original);
228
+ const regeneratedNorm = normalizeGherkin(regenerated);
229
+ if (originalNorm !== regeneratedNorm) {
230
+ errors.push('Round-trip failed: Generated text differs after parse');
231
+ }
232
+ // Validate structure
233
+ if (!parsed.name) {
234
+ errors.push('Parsed feature has no name');
235
+ }
236
+ if (parsed.scenarios.length === 0) {
237
+ errors.push('Parsed feature has no scenarios');
238
+ }
239
+ return {
240
+ valid: errors.length === 0,
241
+ original,
242
+ parsed,
243
+ regenerated,
244
+ errors
245
+ };
246
+ }
247
+ }
248
+ //# sourceMappingURL=GherkinParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GherkinParser.js","sourceRoot":"","sources":["../../../../src/testing/GherkinParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Playwright Test Helpers for Browser State Injection
3
+ *
4
+ * Utilities for E2E tests to interact with component state
5
+ * using the browser state injection system.
6
+ *
7
+ * @module PlaywrightStateHelpers
8
+ */
9
+ import { Page } from '@playwright/test';
10
+ /**
11
+ * Set component state in the browser
12
+ *
13
+ * @param page - Playwright page object
14
+ * @param componentName - Component name from @Component decorator
15
+ * @param state - Partial state to merge
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * await setComponentState(page, 'counter', { count: 5 });
20
+ * ```
21
+ */
22
+ export declare function setComponentState(page: Page, componentName: string, state: any): Promise<void>;
23
+ /**
24
+ * Get component state from the browser
25
+ *
26
+ * @param page - Playwright page object
27
+ * @param componentName - Component name from @Component decorator
28
+ * @returns Current component state or undefined
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const state = await getComponentState(page, 'counter');
33
+ * expect(state.count).toBe(5);
34
+ * ```
35
+ */
36
+ export declare function getComponentState<TState = any>(page: Page, componentName: string): Promise<TState | undefined>;
37
+ /**
38
+ * Reset component to initial state
39
+ *
40
+ * @param page - Playwright page object
41
+ * @param componentName - Component name from @Component decorator
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * await resetComponentState(page, 'counter');
46
+ * ```
47
+ */
48
+ export declare function resetComponentState(page: Page, componentName: string): Promise<void>;
49
+ /**
50
+ * Wait for component to be available in the DOM
51
+ *
52
+ * @param page - Playwright page object
53
+ * @param componentName - Component name from @Component decorator
54
+ * @param timeoutMs - Timeout in milliseconds (default: 5000)
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * await waitForComponent(page, 'counter');
59
+ * ```
60
+ */
61
+ export declare function waitForComponent(page: Page, componentName: string, timeoutMs?: number): Promise<void>;
62
+ /**
63
+ * Check if component is available
64
+ *
65
+ * @param page - Playwright page object
66
+ * @param componentName - Component name from @Component decorator
67
+ * @returns True if component is rendered and available
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * const isAvailable = await hasComponent(page, 'counter');
72
+ * ```
73
+ */
74
+ export declare function hasComponent(page: Page, componentName: string): Promise<boolean>;
75
+ /**
76
+ * Set component state from a data contract
77
+ *
78
+ * @param page - Playwright page object
79
+ * @param componentName - Component name
80
+ * @param dataContract - Data contract object (e.g., ExamplesData.counter.state.five)
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * import { ExamplesData } from '@supernal-interface/core';
85
+ *
86
+ * await setComponentStateFromContract(
87
+ * page,
88
+ * 'counter',
89
+ * ExamplesData.counter.state.five
90
+ * );
91
+ * ```
92
+ */
93
+ export declare function setComponentStateFromContract(page: Page, componentName: string, dataContract: any): Promise<void>;
94
+ /**
95
+ * Assert component state matches data contract
96
+ *
97
+ * @param page - Playwright page object
98
+ * @param componentName - Component name
99
+ * @param expectedContract - Expected data contract
100
+ *
101
+ * @example
102
+ * ```typescript
103
+ * await assertComponentStateMatches(
104
+ * page,
105
+ * 'counter',
106
+ * ExamplesData.counter.state.five
107
+ * );
108
+ * ```
109
+ */
110
+ export declare function assertComponentStateMatches(page: Page, componentName: string, expectedContract: any): Promise<void>;
111
+ /**
112
+ * Get component element by name
113
+ *
114
+ * @param page - Playwright page object
115
+ * @param componentName - Component name
116
+ * @returns Locator for the component element
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * const counter = getComponentElement(page, 'counter');
121
+ * await expect(counter).toBeVisible();
122
+ * ```
123
+ */
124
+ export declare function getComponentElement(page: Page, componentName: string): import("playwright-core").Locator;
125
+ /**
126
+ * Initialize test state manager in the browser
127
+ * Call this in beforeEach or at the start of tests
128
+ *
129
+ * @param page - Playwright page object
130
+ *
131
+ * @example
132
+ * ```typescript
133
+ * test.beforeEach(async ({ page }) => {
134
+ * await initializeTestState(page);
135
+ * });
136
+ * ```
137
+ */
138
+ export declare function initializeTestState(page: Page): Promise<void>;
139
+ /**
140
+ * Batch state operations
141
+ * Useful for setting up complex test scenarios
142
+ *
143
+ * @param page - Playwright page object
144
+ * @param operations - Array of state operations
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * await batchStateOperations(page, [
149
+ * { type: 'set', component: 'counter', state: { count: 5 } },
150
+ * { type: 'set', component: 'chat', state: { messages: [] } },
151
+ * { type: 'reset', component: 'form' },
152
+ * ]);
153
+ * ```
154
+ */
155
+ export declare function batchStateOperations(page: Page, operations: Array<{
156
+ type: 'set';
157
+ component: string;
158
+ state: any;
159
+ } | {
160
+ type: 'reset';
161
+ component: string;
162
+ }>): Promise<void>;
163
+ //# sourceMappingURL=PlaywrightStateHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightStateHelpers.d.ts","sourceRoot":"","sources":["../../../../src/testing/PlaywrightStateHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,GAAG,GACT,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,GAAG,GAAG,EAClD,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU7B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,EACrB,SAAS,GAAE,MAAa,GACvB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,GAAG,GAChB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,GAAG,GACpB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,qCAEpE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBnE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,KAAK,CACb;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,GAAG,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CACvC,GACA,OAAO,CAAC,IAAI,CAAC,CAcf"}
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Playwright Test Helpers for Browser State Injection
3
+ *
4
+ * Utilities for E2E tests to interact with component state
5
+ * using the browser state injection system.
6
+ *
7
+ * @module PlaywrightStateHelpers
8
+ */
9
+ /**
10
+ * Set component state in the browser
11
+ *
12
+ * @param page - Playwright page object
13
+ * @param componentName - Component name from @Component decorator
14
+ * @param state - Partial state to merge
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * await setComponentState(page, 'counter', { count: 5 });
19
+ * ```
20
+ */
21
+ export async function setComponentState(page, componentName, state) {
22
+ await page.evaluate(({ component, newState }) => {
23
+ if (!window.__testState__) {
24
+ throw new Error('Test state manager not initialized. Did you forget to call initializeTestStateManager()?');
25
+ }
26
+ window.__testState__.setState(component, newState);
27
+ }, { component: componentName, newState: state });
28
+ }
29
+ /**
30
+ * Get component state from the browser
31
+ *
32
+ * @param page - Playwright page object
33
+ * @param componentName - Component name from @Component decorator
34
+ * @returns Current component state or undefined
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * const state = await getComponentState(page, 'counter');
39
+ * expect(state.count).toBe(5);
40
+ * ```
41
+ */
42
+ export async function getComponentState(page, componentName) {
43
+ return await page.evaluate((component) => {
44
+ if (!window.__testState__) {
45
+ throw new Error('Test state manager not initialized');
46
+ }
47
+ return window.__testState__.getState(component);
48
+ }, componentName);
49
+ }
50
+ /**
51
+ * Reset component to initial state
52
+ *
53
+ * @param page - Playwright page object
54
+ * @param componentName - Component name from @Component decorator
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * await resetComponentState(page, 'counter');
59
+ * ```
60
+ */
61
+ export async function resetComponentState(page, componentName) {
62
+ await page.evaluate((component) => {
63
+ if (!window.__testState__) {
64
+ throw new Error('Test state manager not initialized');
65
+ }
66
+ window.__testState__.resetState(component);
67
+ }, componentName);
68
+ }
69
+ /**
70
+ * Wait for component to be available in the DOM
71
+ *
72
+ * @param page - Playwright page object
73
+ * @param componentName - Component name from @Component decorator
74
+ * @param timeoutMs - Timeout in milliseconds (default: 5000)
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * await waitForComponent(page, 'counter');
79
+ * ```
80
+ */
81
+ export async function waitForComponent(page, componentName, timeoutMs = 5000) {
82
+ await page.evaluate(async ({ component, timeout }) => {
83
+ if (!window.__testState__) {
84
+ throw new Error('Test state manager not initialized');
85
+ }
86
+ await window.__testState__.waitForComponent(component, timeout);
87
+ }, { component: componentName, timeout: timeoutMs });
88
+ }
89
+ /**
90
+ * Check if component is available
91
+ *
92
+ * @param page - Playwright page object
93
+ * @param componentName - Component name from @Component decorator
94
+ * @returns True if component is rendered and available
95
+ *
96
+ * @example
97
+ * ```typescript
98
+ * const isAvailable = await hasComponent(page, 'counter');
99
+ * ```
100
+ */
101
+ export async function hasComponent(page, componentName) {
102
+ return await page.evaluate((component) => {
103
+ if (!window.__testState__) {
104
+ return false;
105
+ }
106
+ return window.__testState__.hasComponent(component);
107
+ }, componentName);
108
+ }
109
+ /**
110
+ * Set component state from a data contract
111
+ *
112
+ * @param page - Playwright page object
113
+ * @param componentName - Component name
114
+ * @param dataContract - Data contract object (e.g., ExamplesData.counter.state.five)
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * import { ExamplesData } from '@supernal-interface/core';
119
+ *
120
+ * await setComponentStateFromContract(
121
+ * page,
122
+ * 'counter',
123
+ * ExamplesData.counter.state.five
124
+ * );
125
+ * ```
126
+ */
127
+ export async function setComponentStateFromContract(page, componentName, dataContract) {
128
+ await setComponentState(page, componentName, dataContract);
129
+ }
130
+ /**
131
+ * Assert component state matches data contract
132
+ *
133
+ * @param page - Playwright page object
134
+ * @param componentName - Component name
135
+ * @param expectedContract - Expected data contract
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * await assertComponentStateMatches(
140
+ * page,
141
+ * 'counter',
142
+ * ExamplesData.counter.state.five
143
+ * );
144
+ * ```
145
+ */
146
+ export async function assertComponentStateMatches(page, componentName, expectedContract) {
147
+ const actualState = await getComponentState(page, componentName);
148
+ if (!actualState) {
149
+ throw new Error(`Component '${componentName}' state is undefined`);
150
+ }
151
+ // Deep equality check
152
+ const actualJson = JSON.stringify(actualState);
153
+ const expectedJson = JSON.stringify(expectedContract);
154
+ if (actualJson !== expectedJson) {
155
+ throw new Error(`Component '${componentName}' state does not match.\n` +
156
+ `Expected: ${expectedJson}\n` +
157
+ `Actual: ${actualJson}`);
158
+ }
159
+ }
160
+ /**
161
+ * Get component element by name
162
+ *
163
+ * @param page - Playwright page object
164
+ * @param componentName - Component name
165
+ * @returns Locator for the component element
166
+ *
167
+ * @example
168
+ * ```typescript
169
+ * const counter = getComponentElement(page, 'counter');
170
+ * await expect(counter).toBeVisible();
171
+ * ```
172
+ */
173
+ export function getComponentElement(page, componentName) {
174
+ return page.locator(`[data-component="${componentName}"]`);
175
+ }
176
+ /**
177
+ * Initialize test state manager in the browser
178
+ * Call this in beforeEach or at the start of tests
179
+ *
180
+ * @param page - Playwright page object
181
+ *
182
+ * @example
183
+ * ```typescript
184
+ * test.beforeEach(async ({ page }) => {
185
+ * await initializeTestState(page);
186
+ * });
187
+ * ```
188
+ */
189
+ export async function initializeTestState(page) {
190
+ await page.evaluate(() => {
191
+ // Force initialize test state manager regardless of NODE_ENV
192
+ if (typeof window !== 'undefined' && !window.__testState__) {
193
+ // Create a minimal test state manager
194
+ window.__testState__ = {
195
+ states: new Map(),
196
+ getState(component) {
197
+ return this.states.get(component);
198
+ },
199
+ setState(component, state) {
200
+ const current = this.states.get(component) || {};
201
+ this.states.set(component, { ...current, ...state });
202
+ },
203
+ resetState(component) {
204
+ this.states.delete(component);
205
+ }
206
+ };
207
+ console.log('[TEST] Test state manager initialized in browser');
208
+ }
209
+ });
210
+ }
211
+ /**
212
+ * Batch state operations
213
+ * Useful for setting up complex test scenarios
214
+ *
215
+ * @param page - Playwright page object
216
+ * @param operations - Array of state operations
217
+ *
218
+ * @example
219
+ * ```typescript
220
+ * await batchStateOperations(page, [
221
+ * { type: 'set', component: 'counter', state: { count: 5 } },
222
+ * { type: 'set', component: 'chat', state: { messages: [] } },
223
+ * { type: 'reset', component: 'form' },
224
+ * ]);
225
+ * ```
226
+ */
227
+ export async function batchStateOperations(page, operations) {
228
+ await page.evaluate((ops) => {
229
+ if (!window.__testState__) {
230
+ throw new Error('Test state manager not initialized');
231
+ }
232
+ for (const op of ops) {
233
+ if (op.type === 'set') {
234
+ window.__testState__.setState(op.component, op.state);
235
+ }
236
+ else if (op.type === 'reset') {
237
+ window.__testState__.resetState(op.component);
238
+ }
239
+ }
240
+ }, operations);
241
+ }
242
+ //# sourceMappingURL=PlaywrightStateHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightStateHelpers.js","sourceRoot":"","sources":["../../../../src/testing/PlaywrightStateHelpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAU,EACV,aAAqB,EACrB,KAAU;IAEV,MAAM,IAAI,CAAC,QAAQ,CACjB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC1B,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAC;QAC9G,CAAC;QACD,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC,EACD,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,CAC9C,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAU,EACV,aAAqB;IAErB,OAAO,MAAM,IAAI,CAAC,QAAQ,CACxB,CAAC,SAAS,EAAE,EAAE;QACZ,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC,EACD,aAAa,CACd,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAU,EACV,aAAqB;IAErB,MAAM,IAAI,CAAC,QAAQ,CACjB,CAAC,SAAS,EAAE,EAAE;QACZ,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC,EACD,aAAa,CACd,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAU,EACV,aAAqB,EACrB,YAAoB,IAAI;IAExB,MAAM,IAAI,CAAC,QAAQ,CACjB,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE;QAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC,EACD,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,CACjD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAU,EACV,aAAqB;IAErB,OAAO,MAAM,IAAI,CAAC,QAAQ,CACxB,CAAC,SAAS,EAAE,EAAE;QACZ,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC,EACD,aAAa,CACd,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,IAAU,EACV,aAAqB,EACrB,YAAiB;IAEjB,MAAM,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,IAAU,EACV,aAAqB,EACrB,gBAAqB;IAErB,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAEjE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,cAAc,aAAa,sBAAsB,CAAC,CAAC;IACrE,CAAC;IAED,sBAAsB;IACtB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAEtD,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,cAAc,aAAa,2BAA2B;YACtD,aAAa,YAAY,IAAI;YAC7B,WAAW,UAAU,EAAE,CACxB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAU,EAAE,aAAqB;IACnE,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,aAAa,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAU;IAClD,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QACvB,6DAA6D;QAC7D,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAE,MAAc,CAAC,aAAa,EAAE,CAAC;YACpE,sCAAsC;YACrC,MAAc,CAAC,aAAa,GAAG;gBAC9B,MAAM,EAAE,IAAI,GAAG,EAAE;gBACjB,QAAQ,CAAC,SAAiB;oBACxB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACpC,CAAC;gBACD,QAAQ,CAAC,SAAiB,EAAE,KAAU;oBACpC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;oBACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;gBACvD,CAAC;gBACD,UAAU,CAAC,SAAiB;oBAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAChC,CAAC;aACF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAU,EACV,UAGC;IAED,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1B,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBACtB,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;YACxD,CAAC;iBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC/B,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC,EAAE,UAAU,CAAC,CAAC;AACjB,CAAC"}