@happyvertical/smrt-svelte 0.30.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 (357) hide show
  1. package/AGENTS.md +317 -0
  2. package/CLAUDE.md +1 -0
  3. package/LICENSE +7 -0
  4. package/README.md +185 -0
  5. package/dist/Provider.svelte +204 -0
  6. package/dist/Provider.svelte.d.ts +73 -0
  7. package/dist/Provider.svelte.d.ts.map +1 -0
  8. package/dist/__tests__/app-state.test.js +156 -0
  9. package/dist/__tests__/warm-clients.test.js +186 -0
  10. package/dist/browser-ai/adapters/llm/factory.d.ts +38 -0
  11. package/dist/browser-ai/adapters/llm/factory.d.ts.map +1 -0
  12. package/dist/browser-ai/adapters/llm/factory.js +91 -0
  13. package/dist/browser-ai/adapters/llm/index.d.ts +7 -0
  14. package/dist/browser-ai/adapters/llm/index.d.ts.map +1 -0
  15. package/dist/browser-ai/adapters/llm/index.js +6 -0
  16. package/dist/browser-ai/adapters/llm/types.d.ts +182 -0
  17. package/dist/browser-ai/adapters/llm/types.d.ts.map +1 -0
  18. package/dist/browser-ai/adapters/llm/types.js +43 -0
  19. package/dist/browser-ai/adapters/llm/webllm.d.ts +33 -0
  20. package/dist/browser-ai/adapters/llm/webllm.d.ts.map +1 -0
  21. package/dist/browser-ai/adapters/llm/webllm.js +225 -0
  22. package/dist/browser-ai/adapters/stt/browser-speech.d.ts +31 -0
  23. package/dist/browser-ai/adapters/stt/browser-speech.d.ts.map +1 -0
  24. package/dist/browser-ai/adapters/stt/browser-speech.js +217 -0
  25. package/dist/browser-ai/adapters/stt/factory.d.ts +49 -0
  26. package/dist/browser-ai/adapters/stt/factory.d.ts.map +1 -0
  27. package/dist/browser-ai/adapters/stt/factory.js +110 -0
  28. package/dist/browser-ai/adapters/stt/index.d.ts +9 -0
  29. package/dist/browser-ai/adapters/stt/index.d.ts.map +1 -0
  30. package/dist/browser-ai/adapters/stt/index.js +8 -0
  31. package/dist/browser-ai/adapters/stt/types.d.ts +154 -0
  32. package/dist/browser-ai/adapters/stt/types.d.ts.map +1 -0
  33. package/dist/browser-ai/adapters/stt/types.js +4 -0
  34. package/dist/browser-ai/adapters/stt/whisper-cpp.d.ts +46 -0
  35. package/dist/browser-ai/adapters/stt/whisper-cpp.d.ts.map +1 -0
  36. package/dist/browser-ai/adapters/stt/whisper-cpp.js +348 -0
  37. package/dist/browser-ai/adapters/stt/whisper-wasm.d.ts +51 -0
  38. package/dist/browser-ai/adapters/stt/whisper-wasm.d.ts.map +1 -0
  39. package/dist/browser-ai/adapters/stt/whisper-wasm.js +380 -0
  40. package/dist/browser-ai/adapters/tts/browser-synthesis.d.ts +42 -0
  41. package/dist/browser-ai/adapters/tts/browser-synthesis.d.ts.map +1 -0
  42. package/dist/browser-ai/adapters/tts/browser-synthesis.js +235 -0
  43. package/dist/browser-ai/adapters/tts/factory.d.ts +53 -0
  44. package/dist/browser-ai/adapters/tts/factory.d.ts.map +1 -0
  45. package/dist/browser-ai/adapters/tts/factory.js +92 -0
  46. package/dist/browser-ai/adapters/tts/index.d.ts +7 -0
  47. package/dist/browser-ai/adapters/tts/index.d.ts.map +1 -0
  48. package/dist/browser-ai/adapters/tts/index.js +6 -0
  49. package/dist/browser-ai/adapters/tts/types.d.ts +140 -0
  50. package/dist/browser-ai/adapters/tts/types.d.ts.map +1 -0
  51. package/dist/browser-ai/adapters/tts/types.js +4 -0
  52. package/dist/browser-ai/capabilities/detector.d.ts +38 -0
  53. package/dist/browser-ai/capabilities/detector.d.ts.map +1 -0
  54. package/dist/browser-ai/capabilities/detector.js +211 -0
  55. package/dist/browser-ai/core/errors.d.ts +62 -0
  56. package/dist/browser-ai/core/errors.d.ts.map +1 -0
  57. package/dist/browser-ai/core/errors.js +92 -0
  58. package/dist/browser-ai/core/index.d.ts +6 -0
  59. package/dist/browser-ai/core/index.d.ts.map +1 -0
  60. package/dist/browser-ai/core/index.js +5 -0
  61. package/dist/browser-ai/core/types.d.ts +115 -0
  62. package/dist/browser-ai/core/types.d.ts.map +1 -0
  63. package/dist/browser-ai/core/types.js +34 -0
  64. package/dist/browser-ai/index.d.ts +12 -0
  65. package/dist/browser-ai/index.d.ts.map +1 -0
  66. package/dist/browser-ai/index.js +16 -0
  67. package/dist/browser-ai/svelte/components/AILoadingOverlay.svelte +77 -0
  68. package/dist/browser-ai/svelte/components/AILoadingOverlay.svelte.d.ts +16 -0
  69. package/dist/browser-ai/svelte/components/AILoadingOverlay.svelte.d.ts.map +1 -0
  70. package/dist/browser-ai/svelte/components/CapabilityGate.svelte +57 -0
  71. package/dist/browser-ai/svelte/components/CapabilityGate.svelte.d.ts +15 -0
  72. package/dist/browser-ai/svelte/components/CapabilityGate.svelte.d.ts.map +1 -0
  73. package/dist/browser-ai/svelte/components/DownloadProgress.svelte +141 -0
  74. package/dist/browser-ai/svelte/components/DownloadProgress.svelte.d.ts +15 -0
  75. package/dist/browser-ai/svelte/components/DownloadProgress.svelte.d.ts.map +1 -0
  76. package/dist/browser-ai/svelte/components/STTTest.svelte +379 -0
  77. package/dist/browser-ai/svelte/components/STTTest.svelte.d.ts +9 -0
  78. package/dist/browser-ai/svelte/components/STTTest.svelte.d.ts.map +1 -0
  79. package/dist/browser-ai/svelte/components/VoiceInput.svelte +200 -0
  80. package/dist/browser-ai/svelte/components/VoiceInput.svelte.d.ts +16 -0
  81. package/dist/browser-ai/svelte/components/VoiceInput.svelte.d.ts.map +1 -0
  82. package/dist/browser-ai/svelte/index.d.ts +15 -0
  83. package/dist/browser-ai/svelte/index.d.ts.map +1 -0
  84. package/dist/browser-ai/svelte/index.js +28 -0
  85. package/dist/browser-ai/ui.d.ts +16 -0
  86. package/dist/browser-ai/ui.d.ts.map +1 -0
  87. package/dist/browser-ai/ui.js +67 -0
  88. package/dist/components/admin/AgentAdminPanel.svelte +111 -0
  89. package/dist/components/admin/AgentAdminPanel.svelte.d.ts +25 -0
  90. package/dist/components/admin/AgentAdminPanel.svelte.d.ts.map +1 -0
  91. package/dist/components/admin/AgentAdminTabs.svelte +280 -0
  92. package/dist/components/admin/AgentAdminTabs.svelte.d.ts +23 -0
  93. package/dist/components/admin/AgentAdminTabs.svelte.d.ts.map +1 -0
  94. package/dist/components/admin/AgentSettingsShell.svelte +257 -0
  95. package/dist/components/admin/AgentSettingsShell.svelte.d.ts +33 -0
  96. package/dist/components/admin/AgentSettingsShell.svelte.d.ts.map +1 -0
  97. package/dist/components/admin/index.d.ts +5 -0
  98. package/dist/components/admin/index.d.ts.map +1 -0
  99. package/dist/components/admin/index.js +6 -0
  100. package/dist/components/forms/AddressInput.svelte +500 -0
  101. package/dist/components/forms/AddressInput.svelte.d.ts +36 -0
  102. package/dist/components/forms/AddressInput.svelte.d.ts.map +1 -0
  103. package/dist/components/forms/CheckboxInput.svelte +208 -0
  104. package/dist/components/forms/CheckboxInput.svelte.d.ts +20 -0
  105. package/dist/components/forms/CheckboxInput.svelte.d.ts.map +1 -0
  106. package/dist/components/forms/DateRangeInput.svelte +628 -0
  107. package/dist/components/forms/DateRangeInput.svelte.d.ts +33 -0
  108. package/dist/components/forms/DateRangeInput.svelte.d.ts.map +1 -0
  109. package/dist/components/forms/DateTimeInput.svelte +521 -0
  110. package/dist/components/forms/DateTimeInput.svelte.d.ts +24 -0
  111. package/dist/components/forms/DateTimeInput.svelte.d.ts.map +1 -0
  112. package/dist/components/forms/FileUpload.svelte +358 -0
  113. package/dist/components/forms/FileUpload.svelte.d.ts +22 -0
  114. package/dist/components/forms/FileUpload.svelte.d.ts.map +1 -0
  115. package/dist/components/forms/Form.svelte +771 -0
  116. package/dist/components/forms/Form.svelte.d.ts +26 -0
  117. package/dist/components/forms/Form.svelte.d.ts.map +1 -0
  118. package/dist/components/forms/FormGroup.svelte +86 -0
  119. package/dist/components/forms/FormGroup.svelte.d.ts +13 -0
  120. package/dist/components/forms/FormGroup.svelte.d.ts.map +1 -0
  121. package/dist/components/forms/FormMicButton.svelte +179 -0
  122. package/dist/components/forms/FormMicButton.svelte.d.ts +10 -0
  123. package/dist/components/forms/FormMicButton.svelte.d.ts.map +1 -0
  124. package/dist/components/forms/Input.svelte +83 -0
  125. package/dist/components/forms/Input.svelte.d.ts +9 -0
  126. package/dist/components/forms/Input.svelte.d.ts.map +1 -0
  127. package/dist/components/forms/MeasurementInput.svelte +505 -0
  128. package/dist/components/forms/MeasurementInput.svelte.d.ts +35 -0
  129. package/dist/components/forms/MeasurementInput.svelte.d.ts.map +1 -0
  130. package/dist/components/forms/MoneyInput.svelte +412 -0
  131. package/dist/components/forms/MoneyInput.svelte.d.ts +30 -0
  132. package/dist/components/forms/MoneyInput.svelte.d.ts.map +1 -0
  133. package/dist/components/forms/NumberInput.svelte +310 -0
  134. package/dist/components/forms/NumberInput.svelte.d.ts +28 -0
  135. package/dist/components/forms/NumberInput.svelte.d.ts.map +1 -0
  136. package/dist/components/forms/PhoneInput.svelte +530 -0
  137. package/dist/components/forms/PhoneInput.svelte.d.ts +22 -0
  138. package/dist/components/forms/PhoneInput.svelte.d.ts.map +1 -0
  139. package/dist/components/forms/SearchInput.svelte +358 -0
  140. package/dist/components/forms/SearchInput.svelte.d.ts +33 -0
  141. package/dist/components/forms/SearchInput.svelte.d.ts.map +1 -0
  142. package/dist/components/forms/Select.svelte +83 -0
  143. package/dist/components/forms/Select.svelte.d.ts +11 -0
  144. package/dist/components/forms/Select.svelte.d.ts.map +1 -0
  145. package/dist/components/forms/SelectInput.svelte +254 -0
  146. package/dist/components/forms/SelectInput.svelte.d.ts +25 -0
  147. package/dist/components/forms/SelectInput.svelte.d.ts.map +1 -0
  148. package/dist/components/forms/TextInput.svelte +415 -0
  149. package/dist/components/forms/TextInput.svelte.d.ts +26 -0
  150. package/dist/components/forms/TextInput.svelte.d.ts.map +1 -0
  151. package/dist/components/forms/Textarea.svelte +85 -0
  152. package/dist/components/forms/Textarea.svelte.d.ts +10 -0
  153. package/dist/components/forms/Textarea.svelte.d.ts.map +1 -0
  154. package/dist/components/forms/TextareaInput.svelte +386 -0
  155. package/dist/components/forms/TextareaInput.svelte.d.ts +26 -0
  156. package/dist/components/forms/TextareaInput.svelte.d.ts.map +1 -0
  157. package/dist/components/forms/Toggle.svelte +217 -0
  158. package/dist/components/forms/Toggle.svelte.d.ts +37 -0
  159. package/dist/components/forms/Toggle.svelte.d.ts.map +1 -0
  160. package/dist/components/forms/__tests__/AddressInput.behavior.test.js +122 -0
  161. package/dist/components/forms/__tests__/CheckboxInput.test.js +92 -0
  162. package/dist/components/forms/__tests__/DateRangeInput.behavior.test.js +135 -0
  163. package/dist/components/forms/__tests__/DateTimeInput.behavior.test.js +103 -0
  164. package/dist/components/forms/__tests__/FileUpload.test.js +90 -0
  165. package/dist/components/forms/__tests__/Form.behavior.test.js +137 -0
  166. package/dist/components/forms/__tests__/Form.test.js +58 -0
  167. package/dist/components/forms/__tests__/FormGroup.test.js +48 -0
  168. package/dist/components/forms/__tests__/FormMicButton.test.js +86 -0
  169. package/dist/components/forms/__tests__/Input.test.js +49 -0
  170. package/dist/components/forms/__tests__/MeasurementInput.behavior.test.js +129 -0
  171. package/dist/components/forms/__tests__/MoneyInput.behavior.test.js +124 -0
  172. package/dist/components/forms/__tests__/NumberInput.behavior.test.js +141 -0
  173. package/dist/components/forms/__tests__/PhoneInput.behavior.test.js +96 -0
  174. package/dist/components/forms/__tests__/SearchInput.test.js +79 -0
  175. package/dist/components/forms/__tests__/Select.test.js +37 -0
  176. package/dist/components/forms/__tests__/SelectInput.behavior.test.js +132 -0
  177. package/dist/components/forms/__tests__/TextInput.behavior.test.js +131 -0
  178. package/dist/components/forms/__tests__/Textarea.test.js +39 -0
  179. package/dist/components/forms/__tests__/TextareaInput.behavior.test.js +96 -0
  180. package/dist/components/forms/__tests__/Toggle.test.js +87 -0
  181. package/dist/components/forms/__tests__/composite-inputs-a11y.test.js +69 -0
  182. package/dist/components/forms/__tests__/form-group-input.fixture.svelte +16 -0
  183. package/dist/components/forms/__tests__/form-group-input.fixture.svelte.d.ts +9 -0
  184. package/dist/components/forms/__tests__/form-group-input.fixture.svelte.d.ts.map +1 -0
  185. package/dist/components/forms/__tests__/form-with-fields.fixture.svelte +33 -0
  186. package/dist/components/forms/__tests__/form-with-fields.fixture.svelte.d.ts +12 -0
  187. package/dist/components/forms/__tests__/form-with-fields.fixture.svelte.d.ts.map +1 -0
  188. package/dist/components/forms/__tests__/rich-inputs-a11y.test.js +87 -0
  189. package/dist/components/forms/index.d.ts +25 -0
  190. package/dist/components/forms/index.d.ts.map +1 -0
  191. package/dist/components/forms/index.js +25 -0
  192. package/dist/components/forms/types.d.ts +33 -0
  193. package/dist/components/forms/types.d.ts.map +1 -0
  194. package/dist/components/forms/types.js +4 -0
  195. package/dist/components/module/ModulePanel.svelte +134 -0
  196. package/dist/components/module/ModulePanel.svelte.d.ts +22 -0
  197. package/dist/components/module/ModulePanel.svelte.d.ts.map +1 -0
  198. package/dist/components/module/index.d.ts +5 -0
  199. package/dist/components/module/index.d.ts.map +1 -0
  200. package/dist/components/module/index.js +4 -0
  201. package/dist/components/workspace/Breadcrumbs.svelte +141 -0
  202. package/dist/components/workspace/Breadcrumbs.svelte.d.ts +21 -0
  203. package/dist/components/workspace/Breadcrumbs.svelte.d.ts.map +1 -0
  204. package/dist/components/workspace/NavTree.svelte +354 -0
  205. package/dist/components/workspace/NavTree.svelte.d.ts +45 -0
  206. package/dist/components/workspace/NavTree.svelte.d.ts.map +1 -0
  207. package/dist/components/workspace/README.md +34 -0
  208. package/dist/components/workspace/RoleShell.svelte +309 -0
  209. package/dist/components/workspace/RoleShell.svelte.d.ts +91 -0
  210. package/dist/components/workspace/RoleShell.svelte.d.ts.map +1 -0
  211. package/dist/components/workspace/WorkspaceShell.svelte +951 -0
  212. package/dist/components/workspace/WorkspaceShell.svelte.d.ts +112 -0
  213. package/dist/components/workspace/WorkspaceShell.svelte.d.ts.map +1 -0
  214. package/dist/components/workspace/__tests__/RoleShell.test.js +772 -0
  215. package/dist/components/workspace/__tests__/WorkspaceShell.test.js +630 -0
  216. package/dist/components/workspace/__tests__/breadcrumbs-helpers.test.js +141 -0
  217. package/dist/components/workspace/__tests__/context-forwarding-harness.svelte +45 -0
  218. package/dist/components/workspace/__tests__/context-forwarding-harness.svelte.d.ts +21 -0
  219. package/dist/components/workspace/__tests__/context-forwarding-harness.svelte.d.ts.map +1 -0
  220. package/dist/components/workspace/__tests__/define-tools-dock.test.js +1010 -0
  221. package/dist/components/workspace/__tests__/harness.svelte +25 -0
  222. package/dist/components/workspace/__tests__/harness.svelte.d.ts +14 -0
  223. package/dist/components/workspace/__tests__/harness.svelte.d.ts.map +1 -0
  224. package/dist/components/workspace/__tests__/index.test.js +37 -0
  225. package/dist/components/workspace/__tests__/manifest-nav-helpers.test.js +24 -0
  226. package/dist/components/workspace/__tests__/manifest-nav.test.js +599 -0
  227. package/dist/components/workspace/__tests__/nav-helpers.test.js +95 -0
  228. package/dist/components/workspace/__tests__/render-harness.svelte +66 -0
  229. package/dist/components/workspace/__tests__/render-harness.svelte.d.ts +32 -0
  230. package/dist/components/workspace/__tests__/render-harness.svelte.d.ts.map +1 -0
  231. package/dist/components/workspace/__tests__/render-tools-dock.test.js +243 -0
  232. package/dist/components/workspace/__tests__/role-shell-bind-harness.svelte +58 -0
  233. package/dist/components/workspace/__tests__/role-shell-bind-harness.svelte.d.ts +16 -0
  234. package/dist/components/workspace/__tests__/role-shell-bind-harness.svelte.d.ts.map +1 -0
  235. package/dist/components/workspace/__tests__/role-shell-switch-harness.svelte +41 -0
  236. package/dist/components/workspace/__tests__/role-shell-switch-harness.svelte.d.ts +13 -0
  237. package/dist/components/workspace/__tests__/role-shell-switch-harness.svelte.d.ts.map +1 -0
  238. package/dist/components/workspace/__tests__/test-icon.svelte +17 -0
  239. package/dist/components/workspace/__tests__/test-icon.svelte.d.ts +19 -0
  240. package/dist/components/workspace/__tests__/test-icon.svelte.d.ts.map +1 -0
  241. package/dist/components/workspace/__tests__/typed-tool-fixture/TypedTool.svelte +38 -0
  242. package/dist/components/workspace/__tests__/typed-tool-fixture/TypedTool.svelte.d.ts +22 -0
  243. package/dist/components/workspace/__tests__/typed-tool-fixture/TypedTool.svelte.d.ts.map +1 -0
  244. package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.d.ts +65 -0
  245. package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.d.ts.map +1 -0
  246. package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.js +115 -0
  247. package/dist/components/workspace/__tests__/typed-tool-fixture/typed-tool-types.d.ts +15 -0
  248. package/dist/components/workspace/__tests__/typed-tool-fixture/typed-tool-types.d.ts.map +1 -0
  249. package/dist/components/workspace/__tests__/typed-tool-fixture/typed-tool-types.js +7 -0
  250. package/dist/components/workspace/__tests__/typed-tool-fixture.test.js +115 -0
  251. package/dist/components/workspace/__tests__/use-harness-orphan.svelte +9 -0
  252. package/dist/components/workspace/__tests__/use-harness-orphan.svelte.d.ts +19 -0
  253. package/dist/components/workspace/__tests__/use-harness-orphan.svelte.d.ts.map +1 -0
  254. package/dist/components/workspace/__tests__/use-harness.svelte +23 -0
  255. package/dist/components/workspace/__tests__/use-harness.svelte.d.ts +8 -0
  256. package/dist/components/workspace/__tests__/use-harness.svelte.d.ts.map +1 -0
  257. package/dist/components/workspace/__tests__/use-tools-dock.test.js +33 -0
  258. package/dist/components/workspace/__tests__/workspace-shell-bind-harness.svelte +43 -0
  259. package/dist/components/workspace/__tests__/workspace-shell-bind-harness.svelte.d.ts +11 -0
  260. package/dist/components/workspace/__tests__/workspace-shell-bind-harness.svelte.d.ts.map +1 -0
  261. package/dist/components/workspace/breadcrumbs-helpers.d.ts +44 -0
  262. package/dist/components/workspace/breadcrumbs-helpers.d.ts.map +1 -0
  263. package/dist/components/workspace/breadcrumbs-helpers.js +88 -0
  264. package/dist/components/workspace/index.d.ts +16 -0
  265. package/dist/components/workspace/index.d.ts.map +1 -0
  266. package/dist/components/workspace/index.js +14 -0
  267. package/dist/components/workspace/manifest-nav.d.ts +200 -0
  268. package/dist/components/workspace/manifest-nav.d.ts.map +1 -0
  269. package/dist/components/workspace/manifest-nav.js +408 -0
  270. package/dist/components/workspace/nav-helpers.d.ts +36 -0
  271. package/dist/components/workspace/nav-helpers.d.ts.map +1 -0
  272. package/dist/components/workspace/nav-helpers.js +60 -0
  273. package/dist/components/workspace/server/__tests__/compose-availability.test.js +383 -0
  274. package/dist/components/workspace/server/__tests__/typed-context-fixture.d.ts +78 -0
  275. package/dist/components/workspace/server/__tests__/typed-context-fixture.d.ts.map +1 -0
  276. package/dist/components/workspace/server/__tests__/typed-context-fixture.js +104 -0
  277. package/dist/components/workspace/server/compose-availability.d.ts +73 -0
  278. package/dist/components/workspace/server/compose-availability.d.ts.map +1 -0
  279. package/dist/components/workspace/server/compose-availability.js +114 -0
  280. package/dist/components/workspace/server/index.d.ts +13 -0
  281. package/dist/components/workspace/server/index.d.ts.map +1 -0
  282. package/dist/components/workspace/server/index.js +11 -0
  283. package/dist/components/workspace/server/types.d.ts +108 -0
  284. package/dist/components/workspace/server/types.d.ts.map +1 -0
  285. package/dist/components/workspace/server/types.js +11 -0
  286. package/dist/components/workspace/tools-dock/ToolsDock.svelte +565 -0
  287. package/dist/components/workspace/tools-dock/ToolsDock.svelte.d.ts +14 -0
  288. package/dist/components/workspace/tools-dock/ToolsDock.svelte.d.ts.map +1 -0
  289. package/dist/components/workspace/tools-dock/define-tools-dock.svelte.d.ts +143 -0
  290. package/dist/components/workspace/tools-dock/define-tools-dock.svelte.d.ts.map +1 -0
  291. package/dist/components/workspace/tools-dock/define-tools-dock.svelte.js +487 -0
  292. package/dist/components/workspace/tools-dock/use-tools-dock.d.ts +41 -0
  293. package/dist/components/workspace/tools-dock/use-tools-dock.d.ts.map +1 -0
  294. package/dist/components/workspace/tools-dock/use-tools-dock.js +50 -0
  295. package/dist/components/workspace/types.d.ts +372 -0
  296. package/dist/components/workspace/types.d.ts.map +1 -0
  297. package/dist/components/workspace/types.js +6 -0
  298. package/dist/hooks/index.d.ts +11 -0
  299. package/dist/hooks/index.d.ts.map +1 -0
  300. package/dist/hooks/index.js +10 -0
  301. package/dist/hooks/useAppState.svelte.d.ts +46 -0
  302. package/dist/hooks/useAppState.svelte.d.ts.map +1 -0
  303. package/dist/hooks/useAppState.svelte.js +59 -0
  304. package/dist/hooks/useAuth.svelte.d.ts +41 -0
  305. package/dist/hooks/useAuth.svelte.d.ts.map +1 -0
  306. package/dist/hooks/useAuth.svelte.js +43 -0
  307. package/dist/hooks/useLLM.svelte.d.ts +69 -0
  308. package/dist/hooks/useLLM.svelte.d.ts.map +1 -0
  309. package/dist/hooks/useLLM.svelte.js +85 -0
  310. package/dist/hooks/useSTT.svelte.d.ts +68 -0
  311. package/dist/hooks/useSTT.svelte.d.ts.map +1 -0
  312. package/dist/hooks/useSTT.svelte.js +97 -0
  313. package/dist/hooks/useSocket.svelte.d.ts +45 -0
  314. package/dist/hooks/useSocket.svelte.d.ts.map +1 -0
  315. package/dist/hooks/useSocket.svelte.js +54 -0
  316. package/dist/hooks/useTTS.svelte.d.ts +65 -0
  317. package/dist/hooks/useTTS.svelte.d.ts.map +1 -0
  318. package/dist/hooks/useTTS.svelte.js +93 -0
  319. package/dist/hooks/useTheme.d.ts +13 -0
  320. package/dist/hooks/useTheme.d.ts.map +1 -0
  321. package/dist/hooks/useTheme.js +16 -0
  322. package/dist/i18n/__tests__/server.spec.js +50 -0
  323. package/dist/i18n/server.d.ts +47 -0
  324. package/dist/i18n/server.d.ts.map +1 -0
  325. package/dist/i18n/server.js +58 -0
  326. package/dist/i18n/strings.forms.d.ts +33 -0
  327. package/dist/i18n/strings.forms.d.ts.map +1 -0
  328. package/dist/i18n/strings.forms.js +54 -0
  329. package/dist/i18n/strings.workspace.d.ts +34 -0
  330. package/dist/i18n/strings.workspace.d.ts.map +1 -0
  331. package/dist/i18n/strings.workspace.js +40 -0
  332. package/dist/index.d.ts +18 -0
  333. package/dist/index.d.ts.map +1 -0
  334. package/dist/index.js +23 -0
  335. package/dist/state/__tests__/warm-clients.test.js +40 -0
  336. package/dist/state/app-state.d.ts +308 -0
  337. package/dist/state/app-state.d.ts.map +1 -0
  338. package/dist/state/app-state.js +64 -0
  339. package/dist/state/app-state.svelte.d.ts +196 -0
  340. package/dist/state/app-state.svelte.d.ts.map +1 -0
  341. package/dist/state/app-state.svelte.js +774 -0
  342. package/dist/state/context.d.ts +23 -0
  343. package/dist/state/context.d.ts.map +1 -0
  344. package/dist/state/context.js +32 -0
  345. package/dist/state/form-context.d.ts +59 -0
  346. package/dist/state/form-context.d.ts.map +1 -0
  347. package/dist/state/form-context.js +31 -0
  348. package/dist/state/form-group-context.d.ts +13 -0
  349. package/dist/state/form-group-context.d.ts.map +1 -0
  350. package/dist/state/form-group-context.js +28 -0
  351. package/dist/state/index.d.ts +9 -0
  352. package/dist/state/index.d.ts.map +1 -0
  353. package/dist/state/index.js +8 -0
  354. package/dist/state/warm-clients.d.ts +136 -0
  355. package/dist/state/warm-clients.d.ts.map +1 -0
  356. package/dist/state/warm-clients.js +231 -0
  357. package/package.json +137 -0
@@ -0,0 +1,309 @@
1
+ <script lang="ts">
2
+ /**
3
+ * RoleShell — opinionated thin wrapper around `WorkspaceShell`, `NavTree`,
4
+ * and `Breadcrumbs` for multi-role admin dashboards.
5
+ *
6
+ * Lifts the `RoleConfig`-driven render pattern that's been duplicated in
7
+ * downstream apps (notably anytown.ai's dashboard) into the framework. Pass
8
+ * a list of `RoleConfig`s + the currently active role id; the shell looks
9
+ * up the role and wires its sections into the sidebar nav and breadcrumb
10
+ * trail. Optional `color` on the role propagates as a `--smrt-role-color`
11
+ * CSS custom property so consumer CSS can theme child components.
12
+ *
13
+ * Pure render layer — no SmrtObject coupling, no manifest access, no
14
+ * SvelteKit imports. Consumers pass `currentPath` explicitly (typically
15
+ * from `page.url.pathname`).
16
+ *
17
+ * **Missing-role behaviour**: in development a thrown error makes the
18
+ * misconfiguration loud and immediate. In production we fall back to the
19
+ * first role in `roles[]` (or, if `roles[]` is empty, a synthetic empty
20
+ * role) so a brief mismatch — role-switch race, SSR hydration with stale
21
+ * data, an empty array before data loads — degrades to a harmless empty
22
+ * shell instead of crashing the component tree. Svelte 5 has no built-in
23
+ * error boundary, so a hard throw inside `$derived.by` would unmount the
24
+ * whole shell. See `happyvertical/smrt#1238` review feedback.
25
+ *
26
+ * See `happyvertical/smrt#1226` (Phase 4b) for design notes. The
27
+ * SmrtObject-aware piece was originally scoped here but has been
28
+ * deferred — this primitive is intentionally cheap and low-blast-radius.
29
+ */
30
+ import { DEV } from 'esm-env';
31
+ import type { Component, Snippet } from 'svelte';
32
+ import Breadcrumbs from './Breadcrumbs.svelte';
33
+ import NavTree from './NavTree.svelte';
34
+ import type { BreadcrumbItem, NavItem, RoleConfig } from './types.js';
35
+ import WorkspaceShell from './WorkspaceShell.svelte';
36
+
37
+ interface Props {
38
+ /** All available roles. Looked up by `id`. */
39
+ roles: RoleConfig[];
40
+ /** Currently active role's id. The shell renders that role's config. */
41
+ currentRole: string;
42
+ /** Current pathname (consumer provides; SvelteKit-agnostic). */
43
+ currentPath: string;
44
+ /** Optional: override the shell title; defaults to the current role's label. */
45
+ title?: string;
46
+ /** Optional: override the shell subtitle; defaults to the current role's description. */
47
+ subtitle?: string;
48
+ /** Optional: small uppercase eyebrow label rendered above the title — passes through to `WorkspaceShell`. */
49
+ eyebrow?: string;
50
+ /** Optional: topbar mode label — passes through. */
51
+ modeLabel?: string;
52
+ /** Optional: topbar mode status — passes through. */
53
+ modeStatus?:
54
+ | 'active'
55
+ | 'offline'
56
+ | 'local-only'
57
+ | 'attention'
58
+ | (string & {});
59
+ /** Optional: topbar mode detail — passes through. */
60
+ modeDetail?: string;
61
+ /** Optional: sidebar collapsed state — passes through to `WorkspaceShell`. */
62
+ collapsed?: boolean;
63
+ /** Optional: sidebar collapse handler — passes through to `WorkspaceShell`. */
64
+ onToggleCollapsed?: () => void;
65
+ /** Optional: whether the collapse toggle should render — passes through. */
66
+ collapsible?: boolean;
67
+ /** Optional: whether the inspector panel is currently shown — passes through. */
68
+ showInspector?: boolean;
69
+ /** Optional: inspector header label — passes through. */
70
+ inspectorTitle?: string;
71
+ /** Optional: inspector close handler — passes through. */
72
+ onCloseInspector?: () => void;
73
+ /** Optional: brand snippet — passes through to `WorkspaceShell`. When omitted, the default brand renders `role.icon` (if any) alongside the resolved title/subtitle. */
74
+ brand?: Snippet;
75
+ /** Optional: sidebar footer (account menu, tenant switcher) — passes through. */
76
+ sidebarFooter?: Snippet;
77
+ /** Optional: topbar actions — passes through. */
78
+ topbarActions?: Snippet;
79
+ /** Optional: inspector panel — passes through. Inspector content only renders when `showInspector` is also true. */
80
+ inspector?: Snippet;
81
+ /** Optional: inspector rail — passes through. */
82
+ inspectorRail?: Snippet;
83
+ /** Required: main content. */
84
+ children: Snippet;
85
+ /**
86
+ * Mobile drawer open state — bindable via Svelte 5 `$bindable`. Pass as
87
+ * `bind:mobileNavOpen={...}` to control externally (e.g. close the drawer
88
+ * after a route change). Defaults to `false`.
89
+ */
90
+ mobileNavOpen?: boolean;
91
+ /** Optional: show breadcrumbs (default: true). */
92
+ showBreadcrumbs?: boolean;
93
+ /**
94
+ * Optional: override the breadcrumb's root crumb. Defaults to
95
+ * `{ label: role.label, href: '/' + role.id }`. Set this when the shell
96
+ * is mounted under a prefix (e.g. `/dashboard/[role]/...`,
97
+ * `/t/:slug/admin`) so the root crumb points at a real route.
98
+ */
99
+ rootCrumb?: BreadcrumbItem;
100
+ /**
101
+ * Optional: pathname prefix to skip when auto-walking breadcrumbs.
102
+ * Forwarded to `<Breadcrumbs startAfter={...}>`. Defaults to `role.id`
103
+ * so a pathname like `/super/tenants` doesn't render a duplicate
104
+ * `Super` crumb alongside the `rootCrumb`. Override when the shell is
105
+ * mounted under a deeper prefix (e.g. `'dashboard/super'` for
106
+ * `/dashboard/[role]/...`), or pass an empty string to opt out of the
107
+ * default skip entirely.
108
+ */
109
+ breadcrumbStartAfter?: string;
110
+ /**
111
+ * Optional: icon renderer for `NavItem.icon` values, forwarded to the
112
+ * inner `<NavTree>`. Pass an icon component (lucide-svelte etc.) when
113
+ * your nav configs use icon *names* rather than emoji glyphs.
114
+ */
115
+ navIconComponent?: Component<{ name: string; size?: number }>;
116
+ /**
117
+ * Optional: extra side-effect to run after a nav link click. The shell
118
+ * always closes the mobile drawer on navigation; this callback fires
119
+ * after that internal close so consumers can layer in analytics,
120
+ * router-store updates, etc. without losing the drawer behaviour.
121
+ */
122
+ onNavigate?: () => void;
123
+ }
124
+
125
+ let {
126
+ roles,
127
+ currentRole,
128
+ currentPath,
129
+ title,
130
+ subtitle,
131
+ eyebrow,
132
+ modeLabel,
133
+ modeStatus,
134
+ modeDetail,
135
+ collapsed,
136
+ onToggleCollapsed,
137
+ collapsible,
138
+ showInspector,
139
+ inspectorTitle,
140
+ onCloseInspector,
141
+ // Renamed locally so the snippet block below can declare `{#snippet brand()}`
142
+ // without shadowing the prop (which would cause `{@render brand()}` to
143
+ // recurse into the new snippet instead of the consumer-supplied one).
144
+ brand: consumerBrand,
145
+ sidebarFooter,
146
+ topbarActions,
147
+ inspector,
148
+ inspectorRail,
149
+ children,
150
+ mobileNavOpen = $bindable(false),
151
+ showBreadcrumbs = true,
152
+ rootCrumb,
153
+ breadcrumbStartAfter,
154
+ navIconComponent,
155
+ onNavigate,
156
+ }: Props = $props();
157
+
158
+ /**
159
+ * Stable empty fallback used when `roles[]` is empty *and* we're in
160
+ * production. Constructed once so identity comparisons stay stable across
161
+ * derivations.
162
+ */
163
+ const EMPTY_ROLE: RoleConfig = {
164
+ id: '',
165
+ label: '',
166
+ sections: [] as NavItem[],
167
+ };
168
+
169
+ const role = $derived.by((): RoleConfig => {
170
+ const found = roles.find((r) => r.id === currentRole);
171
+ if (found) return found;
172
+ // Dev: fail loud so misconfiguration is caught in test/dev. Prod: fall
173
+ // back so a brief mismatch (role-switch race, SSR with stale data,
174
+ // empty array before data loads) degrades to an empty shell rather
175
+ // than crashing the entire component tree. Svelte 5 has no error
176
+ // boundary, so a throw inside $derived.by would unmount the shell.
177
+ if (DEV) {
178
+ throw new Error(
179
+ `[RoleShell] No role found for id "${currentRole}". ` +
180
+ `Available role ids: ${roles.map((r) => r.id).join(', ') || '(none)'}.`,
181
+ );
182
+ }
183
+ return roles[0] ?? EMPTY_ROLE;
184
+ });
185
+
186
+ const resolvedTitle = $derived(title ?? role.label);
187
+ const resolvedSubtitle = $derived(subtitle ?? role.description ?? '');
188
+ const resolvedRootCrumb = $derived(
189
+ rootCrumb ?? { label: role.label, href: `/${role.id}` },
190
+ );
191
+ /**
192
+ * Default the breadcrumb's `startAfter` skip-prefix to the role id when
193
+ * the consumer doesn't supply one. Without this, the auto-walk on a
194
+ * pathname like `/super/tenants` produces `Super Admin / Super /
195
+ * Tenants` — the `rootCrumb` already represents the role, so the bare
196
+ * `/super` segment becomes a duplicate fallback crumb. Skipping
197
+ * through `role.id` collapses that.
198
+ *
199
+ * Consumers mounting the shell under a different prefix (e.g.
200
+ * `/dashboard/[role]/...`) still need to pass an explicit
201
+ * `breadcrumbStartAfter='dashboard/super'` — the default only covers
202
+ * the simpler `/[role]/...` case. Passing an empty string opts out:
203
+ * `??` preserves it because empty string is not nullish.
204
+ */
205
+ const resolvedBreadcrumbStartAfter = $derived(breadcrumbStartAfter ?? role.id);
206
+ /**
207
+ * Set the role-color CSS custom property on the shell wrapper when the
208
+ * role config supplies one. Consumer stylesheets can read this via
209
+ * `var(--smrt-role-color)` (e.g. to recolor active-nav highlights). When
210
+ * omitted the wrapper renders no inline style, which keeps the DOM tidy
211
+ * for SSR snapshots.
212
+ */
213
+ const wrapperStyle = $derived(
214
+ role.color ? `--smrt-role-color: ${role.color};` : undefined,
215
+ );
216
+
217
+ function handleNavigate(): void {
218
+ // Always close the mobile drawer on nav click — this is the behaviour
219
+ // consumers historically wired up by hand. The optional `onNavigate`
220
+ // prop lets them layer in additional side-effects (analytics, store
221
+ // updates, etc.) without losing the close.
222
+ mobileNavOpen = false;
223
+ onNavigate?.();
224
+ }
225
+ </script>
226
+
227
+ <div class="smrt-role-shell" data-role-id={role.id} style={wrapperStyle}>
228
+ <WorkspaceShell
229
+ title={resolvedTitle}
230
+ subtitle={resolvedSubtitle}
231
+ {eyebrow}
232
+ {modeLabel}
233
+ {modeStatus}
234
+ {modeDetail}
235
+ {collapsed}
236
+ {onToggleCollapsed}
237
+ {collapsible}
238
+ {showInspector}
239
+ {inspectorTitle}
240
+ {onCloseInspector}
241
+ {sidebarFooter}
242
+ {topbarActions}
243
+ {inspector}
244
+ {inspectorRail}
245
+ bind:mobileNavOpen
246
+ >
247
+ {#snippet brand()}
248
+ {#if consumerBrand}
249
+ {@render consumerBrand()}
250
+ {:else}
251
+ {#if role.icon}
252
+ <span class="smrt-role-shell-icon" aria-hidden="true">{role.icon}</span>
253
+ {/if}
254
+ {#if resolvedTitle}
255
+ <h1>{resolvedTitle}</h1>
256
+ {/if}
257
+ {#if resolvedSubtitle}
258
+ <p class="subtitle">{resolvedSubtitle}</p>
259
+ {/if}
260
+ {/if}
261
+ {/snippet}
262
+
263
+ {#snippet nav()}
264
+ <NavTree
265
+ items={role.sections}
266
+ {currentPath}
267
+ iconComponent={navIconComponent}
268
+ onNavigate={handleNavigate}
269
+ collapsed={collapsed ?? false}
270
+ />
271
+ {/snippet}
272
+
273
+ {#if showBreadcrumbs}
274
+ <Breadcrumbs
275
+ nav={role.sections}
276
+ pathname={currentPath}
277
+ rootCrumb={resolvedRootCrumb}
278
+ startAfter={resolvedBreadcrumbStartAfter}
279
+ />
280
+ {/if}
281
+ {@render children()}
282
+ </WorkspaceShell>
283
+ </div>
284
+
285
+ <style>
286
+ /*
287
+ * Display: contents lets the WorkspaceShell drive the grid/layout while
288
+ * still giving us a single DOM node to hang `--smrt-role-color` off.
289
+ * The wrapper element exists purely to scope the custom property; it
290
+ * never participates in layout.
291
+ */
292
+ .smrt-role-shell {
293
+ display: contents;
294
+ }
295
+
296
+ /*
297
+ * The default brand snippet renders the role icon as a leading glyph.
298
+ * Sized to match `<h1>` line-height so the icon stays vertically aligned
299
+ * with the title baseline. Consumer-provided `brand` snippets bypass
300
+ * this entirely.
301
+ */
302
+ .smrt-role-shell-icon {
303
+ display: inline-block;
304
+ margin-right: 0.4rem;
305
+ font-size: var(--smrt-typography-title-medium-size, 1.1rem);
306
+ line-height: 1;
307
+ color: var(--smrt-role-color, var(--smrt-color-on-surface, #111827));
308
+ }
309
+ </style>
@@ -0,0 +1,91 @@
1
+ import type { Component, Snippet } from 'svelte';
2
+ import type { BreadcrumbItem, RoleConfig } from './types.js';
3
+ interface Props {
4
+ /** All available roles. Looked up by `id`. */
5
+ roles: RoleConfig[];
6
+ /** Currently active role's id. The shell renders that role's config. */
7
+ currentRole: string;
8
+ /** Current pathname (consumer provides; SvelteKit-agnostic). */
9
+ currentPath: string;
10
+ /** Optional: override the shell title; defaults to the current role's label. */
11
+ title?: string;
12
+ /** Optional: override the shell subtitle; defaults to the current role's description. */
13
+ subtitle?: string;
14
+ /** Optional: small uppercase eyebrow label rendered above the title — passes through to `WorkspaceShell`. */
15
+ eyebrow?: string;
16
+ /** Optional: topbar mode label — passes through. */
17
+ modeLabel?: string;
18
+ /** Optional: topbar mode status — passes through. */
19
+ modeStatus?: 'active' | 'offline' | 'local-only' | 'attention' | (string & {});
20
+ /** Optional: topbar mode detail — passes through. */
21
+ modeDetail?: string;
22
+ /** Optional: sidebar collapsed state — passes through to `WorkspaceShell`. */
23
+ collapsed?: boolean;
24
+ /** Optional: sidebar collapse handler — passes through to `WorkspaceShell`. */
25
+ onToggleCollapsed?: () => void;
26
+ /** Optional: whether the collapse toggle should render — passes through. */
27
+ collapsible?: boolean;
28
+ /** Optional: whether the inspector panel is currently shown — passes through. */
29
+ showInspector?: boolean;
30
+ /** Optional: inspector header label — passes through. */
31
+ inspectorTitle?: string;
32
+ /** Optional: inspector close handler — passes through. */
33
+ onCloseInspector?: () => void;
34
+ /** Optional: brand snippet — passes through to `WorkspaceShell`. When omitted, the default brand renders `role.icon` (if any) alongside the resolved title/subtitle. */
35
+ brand?: Snippet;
36
+ /** Optional: sidebar footer (account menu, tenant switcher) — passes through. */
37
+ sidebarFooter?: Snippet;
38
+ /** Optional: topbar actions — passes through. */
39
+ topbarActions?: Snippet;
40
+ /** Optional: inspector panel — passes through. Inspector content only renders when `showInspector` is also true. */
41
+ inspector?: Snippet;
42
+ /** Optional: inspector rail — passes through. */
43
+ inspectorRail?: Snippet;
44
+ /** Required: main content. */
45
+ children: Snippet;
46
+ /**
47
+ * Mobile drawer open state — bindable via Svelte 5 `$bindable`. Pass as
48
+ * `bind:mobileNavOpen={...}` to control externally (e.g. close the drawer
49
+ * after a route change). Defaults to `false`.
50
+ */
51
+ mobileNavOpen?: boolean;
52
+ /** Optional: show breadcrumbs (default: true). */
53
+ showBreadcrumbs?: boolean;
54
+ /**
55
+ * Optional: override the breadcrumb's root crumb. Defaults to
56
+ * `{ label: role.label, href: '/' + role.id }`. Set this when the shell
57
+ * is mounted under a prefix (e.g. `/dashboard/[role]/...`,
58
+ * `/t/:slug/admin`) so the root crumb points at a real route.
59
+ */
60
+ rootCrumb?: BreadcrumbItem;
61
+ /**
62
+ * Optional: pathname prefix to skip when auto-walking breadcrumbs.
63
+ * Forwarded to `<Breadcrumbs startAfter={...}>`. Defaults to `role.id`
64
+ * so a pathname like `/super/tenants` doesn't render a duplicate
65
+ * `Super` crumb alongside the `rootCrumb`. Override when the shell is
66
+ * mounted under a deeper prefix (e.g. `'dashboard/super'` for
67
+ * `/dashboard/[role]/...`), or pass an empty string to opt out of the
68
+ * default skip entirely.
69
+ */
70
+ breadcrumbStartAfter?: string;
71
+ /**
72
+ * Optional: icon renderer for `NavItem.icon` values, forwarded to the
73
+ * inner `<NavTree>`. Pass an icon component (lucide-svelte etc.) when
74
+ * your nav configs use icon *names* rather than emoji glyphs.
75
+ */
76
+ navIconComponent?: Component<{
77
+ name: string;
78
+ size?: number;
79
+ }>;
80
+ /**
81
+ * Optional: extra side-effect to run after a nav link click. The shell
82
+ * always closes the mobile drawer on navigation; this callback fires
83
+ * after that internal close so consumers can layer in analytics,
84
+ * router-store updates, etc. without losing the drawer behaviour.
85
+ */
86
+ onNavigate?: () => void;
87
+ }
88
+ declare const RoleShell: Component<Props, {}, "mobileNavOpen">;
89
+ type RoleShell = ReturnType<typeof RoleShell>;
90
+ export default RoleShell;
91
+ //# sourceMappingURL=RoleShell.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoleShell.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/RoleShell.svelte.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGjD,OAAO,KAAK,EAAE,cAAc,EAAW,UAAU,EAAE,MAAM,YAAY,CAAC;AAItE,UAAU,KAAK;IACb,8CAA8C;IAC9C,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6GAA6G;IAC7G,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,UAAU,CAAC,EACP,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,WAAW,GACX,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAClB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,4EAA4E;IAC5E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iFAAiF;IACjF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yDAAyD;IACzD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,wKAAwK;IACxK,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iFAAiF;IACjF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iDAAiD;IACjD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oHAAoH;IACpH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iDAAiD;IACjD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8BAA8B;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kDAAkD;IAClD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,SAAS,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAkJD,QAAA,MAAM,SAAS,uCAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}