@orbit-work/ui 0.1.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 (755) hide show
  1. package/README.md +110 -0
  2. package/dist/about-window.cjs +1 -0
  3. package/dist/about-window.d.cts +12 -0
  4. package/dist/about-window.d.ts +12 -0
  5. package/dist/about-window.js +1 -0
  6. package/dist/appearance-D5uQ53j3.d.cts +210 -0
  7. package/dist/appearance-D5uQ53j3.d.ts +210 -0
  8. package/dist/appearance.cjs +1 -0
  9. package/dist/appearance.d.cts +1 -0
  10. package/dist/appearance.d.ts +1 -0
  11. package/dist/appearance.js +1 -0
  12. package/dist/browser-annotation-popup.cjs +1 -0
  13. package/dist/browser-annotation-popup.d.cts +48 -0
  14. package/dist/browser-annotation-popup.d.ts +48 -0
  15. package/dist/browser-annotation-popup.js +1 -0
  16. package/dist/chunk-3KT7IU4X.js +13 -0
  17. package/dist/chunk-5VLBKOG7.cjs +194 -0
  18. package/dist/chunk-7YJY64LZ.js +82 -0
  19. package/dist/chunk-EF2BSN3K.cjs +13 -0
  20. package/dist/chunk-GMMYDILD.cjs +82 -0
  21. package/dist/chunk-VG7FQQ7K.js +194 -0
  22. package/dist/fonts/JetBrainsMono-Medium.ttf +0 -0
  23. package/dist/fonts/JetBrainsMono-Regular.ttf +0 -0
  24. package/dist/fonts/SpaceGrotesk-500-latin-ext.woff2 +0 -0
  25. package/dist/fonts/SpaceGrotesk-500-latin.woff2 +0 -0
  26. package/dist/fonts/SpaceGrotesk-700-latin-ext.woff2 +0 -0
  27. package/dist/fonts/SpaceGrotesk-700-latin.woff2 +0 -0
  28. package/dist/fonts/ibm-plex-mono-latin-400-italic.woff2 +0 -0
  29. package/dist/fonts/ibm-plex-mono-latin-400.woff2 +0 -0
  30. package/dist/fonts/ibm-plex-mono-latin-500.woff2 +0 -0
  31. package/dist/fonts/ibm-plex-mono-latin-ext-400-italic.woff2 +0 -0
  32. package/dist/fonts/ibm-plex-mono-latin-ext-400.woff2 +0 -0
  33. package/dist/fonts/ibm-plex-mono-latin-ext-500.woff2 +0 -0
  34. package/dist/index.cjs +32 -0
  35. package/dist/index.css +1 -0
  36. package/dist/index.d.cts +10345 -0
  37. package/dist/index.d.ts +10345 -0
  38. package/dist/index.js +32 -0
  39. package/dist/orbitwork.css +22134 -0
  40. package/package.json +119 -0
  41. package/src/components/Layout/AppLayout/AppLayout.stories.tsx +246 -0
  42. package/src/components/Layout/AppLayout/AppLayoutSource.test.mjs +37 -0
  43. package/src/components/Layout/AppLayout/index.tsx +122 -0
  44. package/src/components/Layout/Sidebar/index.tsx +13 -0
  45. package/src/components/Layout/SidebarShell/SidebarShell.stories.tsx +676 -0
  46. package/src/components/Layout/SidebarShell/SidebarShellSource.test.mjs +161 -0
  47. package/src/components/Layout/SidebarShell/index.tsx +326 -0
  48. package/src/components/Layout/index.ts +10 -0
  49. package/src/components/composite/ActionBar/ActionBar.stories.tsx +26 -0
  50. package/src/components/composite/ActionBar/index.tsx +31 -0
  51. package/src/components/composite/ActionStatus/ActionStatus.stories.tsx +60 -0
  52. package/src/components/composite/ActionStatus/index.tsx +21 -0
  53. package/src/components/composite/AskQuestionCardView/AskQuestionCardView.stories.tsx +175 -0
  54. package/src/components/composite/AskQuestionCardView/AskQuestionCardViewSource.test.mjs +92 -0
  55. package/src/components/composite/AskQuestionCardView/index.tsx +119 -0
  56. package/src/components/composite/AssistantChannelCard/AssistantChannelCard.stories.tsx +265 -0
  57. package/src/components/composite/AssistantChannelCard/AssistantChannelCardSource.test.mjs +45 -0
  58. package/src/components/composite/AssistantChannelCard/index.tsx +102 -0
  59. package/src/components/composite/AssistantToggleRow/AssistantToggleRow.stories.tsx +197 -0
  60. package/src/components/composite/AssistantToggleRow/index.tsx +35 -0
  61. package/src/components/composite/AttachmentCard/AttachmentCard.stories.tsx +125 -0
  62. package/src/components/composite/AttachmentCard/index.tsx +80 -0
  63. package/src/components/composite/BackButton/BackButton.stories.tsx +93 -0
  64. package/src/components/composite/BackButton/BackButtonSource.test.mjs +29 -0
  65. package/src/components/composite/BackButton/index.tsx +48 -0
  66. package/src/components/composite/Banner/Banner.stories.tsx +180 -0
  67. package/src/components/composite/Banner/BannerSource.test.mjs +67 -0
  68. package/src/components/composite/Banner/index.tsx +125 -0
  69. package/src/components/composite/BeaconIcons/BeaconIcons.stories.tsx +153 -0
  70. package/src/components/composite/BeaconIcons/index.tsx +265 -0
  71. package/src/components/composite/BeaconSpinner/BeaconSpinner.stories.tsx +144 -0
  72. package/src/components/composite/BeaconSpinner/index.tsx +185 -0
  73. package/src/components/composite/CatalogStates/CatalogEmptyState.stories.tsx +108 -0
  74. package/src/components/composite/CatalogStates/CatalogStates.stories.tsx +53 -0
  75. package/src/components/composite/CatalogStates/CatalogStatesSource.test.mjs +149 -0
  76. package/src/components/composite/CatalogStates/index.tsx +113 -0
  77. package/src/components/composite/Charts/Charts.stories.tsx +174 -0
  78. package/src/components/composite/Charts/ChartsSource.test.mjs +111 -0
  79. package/src/components/composite/Charts/index.tsx +385 -0
  80. package/src/components/composite/CodeBlock/CodeBlock.stories.tsx +308 -0
  81. package/src/components/composite/CodeBlock/CodeFaceSource.test.mjs +89 -0
  82. package/src/components/composite/CodeBlock/index.tsx +300 -0
  83. package/src/components/composite/CodeDiff/CodeDiff.stories.tsx +169 -0
  84. package/src/components/composite/CodeDiff/index.tsx +373 -0
  85. package/src/components/composite/CodePreview/CodePreview.stories.tsx +127 -0
  86. package/src/components/composite/CodePreview/CodePreviewSource.test.mjs +43 -0
  87. package/src/components/composite/CodePreview/index.tsx +98 -0
  88. package/src/components/composite/CommandPalette/CommandPalette.stories.tsx +89 -0
  89. package/src/components/composite/CommandPalette/CommandPaletteSource.test.mjs +61 -0
  90. package/src/components/composite/CommandPalette/index.tsx +310 -0
  91. package/src/components/composite/ContentRecommendation/ContentRecommendation.stories.tsx +300 -0
  92. package/src/components/composite/ContentRecommendation/ContentRecommendationSource.test.mjs +48 -0
  93. package/src/components/composite/ContentRecommendation/index.tsx +116 -0
  94. package/src/components/composite/ContextChip/ContextChip.stories.tsx +123 -0
  95. package/src/components/composite/ContextChip/ContextChipSource.test.mjs +24 -0
  96. package/src/components/composite/ContextChip/index.tsx +25 -0
  97. package/src/components/composite/ContextUsageIndicatorView/ContextUsageIndicatorSizeSource.test.mjs +15 -0
  98. package/src/components/composite/ContextUsageIndicatorView/ContextUsageIndicatorView.stories.tsx +110 -0
  99. package/src/components/composite/ContextUsageIndicatorView/ContextUsageLoadingSource.test.mjs +23 -0
  100. package/src/components/composite/ContextUsageIndicatorView/index.tsx +139 -0
  101. package/src/components/composite/Controls/Controls.stories.tsx +227 -0
  102. package/src/components/composite/Controls/index.tsx +15 -0
  103. package/src/components/composite/CreateProjectDialog/CreateProjectDialog.stories.tsx +56 -0
  104. package/src/components/composite/CreateProjectDialog/index.tsx +70 -0
  105. package/src/components/composite/DataManagementSectionView/DataManagementSectionView.stories.tsx +123 -0
  106. package/src/components/composite/DataManagementSectionView/DataManagementSectionViewSource.test.mjs +45 -0
  107. package/src/components/composite/DataManagementSectionView/index.tsx +110 -0
  108. package/src/components/composite/DataTable/DataTable.stories.tsx +159 -0
  109. package/src/components/composite/DataTable/DataTableSource.test.mjs +96 -0
  110. package/src/components/composite/DataTable/index.tsx +373 -0
  111. package/src/components/composite/DetailChrome/DetailChrome.stories.tsx +61 -0
  112. package/src/components/composite/DetailChrome/DetailChromeSource.test.mjs +31 -0
  113. package/src/components/composite/DetailChrome/index.tsx +94 -0
  114. package/src/components/composite/DetailPanel/DetailPanel.stories.tsx +185 -0
  115. package/src/components/composite/DetailPanel/DetailPanelSource.test.mjs +49 -0
  116. package/src/components/composite/DetailPanel/index.tsx +120 -0
  117. package/src/components/composite/DetailScaffold/DetailScaffold.stories.tsx +203 -0
  118. package/src/components/composite/DetailScaffold/DetailScaffoldSource.test.mjs +38 -0
  119. package/src/components/composite/DetailScaffold/index.tsx +114 -0
  120. package/src/components/composite/Dialog/Dialog.stories.tsx +343 -0
  121. package/src/components/composite/Dialog/DialogSource.test.mjs +130 -0
  122. package/src/components/composite/Dialog/index.tsx +333 -0
  123. package/src/components/composite/DropZone/DropZone.stories.tsx +105 -0
  124. package/src/components/composite/DropZone/DropZoneSource.test.mjs +68 -0
  125. package/src/components/composite/DropZone/index.tsx +196 -0
  126. package/src/components/composite/FSelect/FSelect.stories.tsx +64 -0
  127. package/src/components/composite/FSelect/index.tsx +29 -0
  128. package/src/components/composite/FeedbackContextMenuView/FeedbackContextMenuView.stories.tsx +106 -0
  129. package/src/components/composite/FeedbackContextMenuView/index.tsx +51 -0
  130. package/src/components/composite/FeedbackDialogView/FeedbackDialogView.stories.tsx +291 -0
  131. package/src/components/composite/FeedbackDialogView/index.tsx +95 -0
  132. package/src/components/composite/FileReferenceCard/FileReferenceCard.stories.tsx +364 -0
  133. package/src/components/composite/FileReferenceCard/FileReferenceCardSource.test.mjs +48 -0
  134. package/src/components/composite/FileReferenceCard/index.tsx +122 -0
  135. package/src/components/composite/FilterBar/FilterBar.stories.tsx +167 -0
  136. package/src/components/composite/FilterBar/FilterBarSource.test.mjs +75 -0
  137. package/src/components/composite/FilterBar/index.tsx +206 -0
  138. package/src/components/composite/FormField/FormField.stories.tsx +158 -0
  139. package/src/components/composite/FormField/FormFieldSource.test.mjs +56 -0
  140. package/src/components/composite/FormField/index.tsx +219 -0
  141. package/src/components/composite/HomeBackdrop/HomeBackdrop.stories.tsx +54 -0
  142. package/src/components/composite/HomeBackdrop/HomeBackdropSource.test.mjs +50 -0
  143. package/src/components/composite/HomeBackdrop/index.tsx +53 -0
  144. package/src/components/composite/Icons/Icons.stories.tsx +153 -0
  145. package/src/components/composite/Icons/IconsSource.test.mjs +23 -0
  146. package/src/components/composite/Icons/index.tsx +1347 -0
  147. package/src/components/composite/ImageCard/ImageCard.stories.tsx +54 -0
  148. package/src/components/composite/ImageCard/index.tsx +33 -0
  149. package/src/components/composite/ImagePreview/ImagePreview.stories.tsx +172 -0
  150. package/src/components/composite/ImagePreview/ImagePreviewSource.test.mjs +95 -0
  151. package/src/components/composite/ImagePreview/index.tsx +339 -0
  152. package/src/components/composite/ListRow/ListRow.stories.tsx +257 -0
  153. package/src/components/composite/ListRow/ListRowSource.test.mjs +101 -0
  154. package/src/components/composite/ListRow/index.tsx +309 -0
  155. package/src/components/composite/Markdown/Markdown.stories.tsx +192 -0
  156. package/src/components/composite/Markdown/MarkdownSource.test.mjs +126 -0
  157. package/src/components/composite/Markdown/MarkdownStyleSource.test.mjs +152 -0
  158. package/src/components/composite/Markdown/index.tsx +702 -0
  159. package/src/components/composite/MarkdownPreview/MarkdownPreview.stories.tsx +174 -0
  160. package/src/components/composite/MarkdownPreview/MarkdownPreviewTabsSource.test.mjs +31 -0
  161. package/src/components/composite/MarkdownPreview/MarkdownRenderedStyleSource.test.mjs +84 -0
  162. package/src/components/composite/MarkdownPreview/index.tsx +140 -0
  163. package/src/components/composite/MarkdownPreviewModalView/MarkdownPreviewModalView.stories.tsx +104 -0
  164. package/src/components/composite/MarkdownPreviewModalView/index.tsx +85 -0
  165. package/src/components/composite/MessageFeedbackDialog/MessageFeedbackDialog.stories.tsx +66 -0
  166. package/src/components/composite/MessageFeedbackDialog/index.tsx +115 -0
  167. package/src/components/composite/ModelCatalogErrorState/ModelCatalogErrorState.stories.tsx +101 -0
  168. package/src/components/composite/ModelCatalogErrorState/ModelCatalogRetrySource.test.mjs +86 -0
  169. package/src/components/composite/ModelCatalogErrorState/index.tsx +59 -0
  170. package/src/components/composite/ModelModalityFlow/ModelModalityFlow.stories.tsx +224 -0
  171. package/src/components/composite/ModelModalityFlow/ModelModalityFlowSource.test.mjs +56 -0
  172. package/src/components/composite/ModelModalityFlow/index.tsx +113 -0
  173. package/src/components/composite/ModelPickerList/ModelPickerList.stories.tsx +313 -0
  174. package/src/components/composite/ModelPickerList/index.tsx +142 -0
  175. package/src/components/composite/ModelSelect/ModelSelect.stories.tsx +90 -0
  176. package/src/components/composite/ModelSelect/index.tsx +148 -0
  177. package/src/components/composite/ModelsSettingsSectionView/ModelsSettingsSectionView.stories.tsx +170 -0
  178. package/src/components/composite/ModelsSettingsSectionView/index.tsx +139 -0
  179. package/src/components/composite/NativeControls/NativeControls.stories.tsx +386 -0
  180. package/src/components/composite/NativeControls/NativeControlsStyleSource.test.mjs +63 -0
  181. package/src/components/composite/NativeControls/index.tsx +97 -0
  182. package/src/components/composite/NavMenu/NavMenu.stories.tsx +383 -0
  183. package/src/components/composite/NavMenu/NavMenuSource.test.mjs +56 -0
  184. package/src/components/composite/NavMenu/index.tsx +142 -0
  185. package/src/components/composite/NoPlanPanelView/NoPlanPanelView.stories.tsx +344 -0
  186. package/src/components/composite/NoPlanPanelView/NoPlanPanelViewSource.test.mjs +34 -0
  187. package/src/components/composite/NoPlanPanelView/index.tsx +97 -0
  188. package/src/components/composite/OpenWithButton/OpenWithButton.stories.tsx +78 -0
  189. package/src/components/composite/OpenWithButton/index.tsx +46 -0
  190. package/src/components/composite/OrbitworkLogo/OrbitworkLogo.stories.tsx +192 -0
  191. package/src/components/composite/OrbitworkLogo/index.tsx +207 -0
  192. package/src/components/composite/OrbitworkModal/OrbitworkModal.stories.tsx +58 -0
  193. package/src/components/composite/OrbitworkModal/index.tsx +31 -0
  194. package/src/components/composite/PageHead/PageHead.stories.tsx +235 -0
  195. package/src/components/composite/PageHead/PageHeadSource.test.mjs +76 -0
  196. package/src/components/composite/PageHead/index.tsx +128 -0
  197. package/src/components/composite/PlanFeatureIcon/PlanFeatureIcon.stories.tsx +205 -0
  198. package/src/components/composite/PlanFeatureIcon/PlanFeatureIconSource.test.mjs +38 -0
  199. package/src/components/composite/PlanFeatureIcon/index.tsx +48 -0
  200. package/src/components/composite/PlanSettingsSectionView/PlanSettingsSectionView.stories.tsx +231 -0
  201. package/src/components/composite/PlanSettingsSectionView/PlanSettingsSectionViewSource.test.mjs +85 -0
  202. package/src/components/composite/PlanSettingsSectionView/index.tsx +264 -0
  203. package/src/components/composite/Popover/Popover.stories.tsx +175 -0
  204. package/src/components/composite/Popover/PopoverSource.test.mjs +59 -0
  205. package/src/components/composite/Popover/index.tsx +176 -0
  206. package/src/components/composite/PptxRenderer/ElementDispatcher/index.tsx +70 -0
  207. package/src/components/composite/PptxRenderer/PptxChromeStyleSource.test.mjs +36 -0
  208. package/src/components/composite/PptxRenderer/PptxRenderer.stories.tsx +128 -0
  209. package/src/components/composite/PptxRenderer/PptxSlide/index.tsx +48 -0
  210. package/src/components/composite/PptxRenderer/constants.ts +2 -0
  211. package/src/components/composite/PptxRenderer/elements/AudioElement/index.tsx +48 -0
  212. package/src/components/composite/PptxRenderer/elements/ChartElement/index.tsx +172 -0
  213. package/src/components/composite/PptxRenderer/elements/DiagramElement/index.tsx +46 -0
  214. package/src/components/composite/PptxRenderer/elements/GroupElement/index.tsx +28 -0
  215. package/src/components/composite/PptxRenderer/elements/ImageElement/index.tsx +61 -0
  216. package/src/components/composite/PptxRenderer/elements/MathElement/index.tsx +57 -0
  217. package/src/components/composite/PptxRenderer/elements/ShapeElement/index.tsx +327 -0
  218. package/src/components/composite/PptxRenderer/elements/TableElement/index.tsx +90 -0
  219. package/src/components/composite/PptxRenderer/elements/TextElement/index.tsx +57 -0
  220. package/src/components/composite/PptxRenderer/elements/VideoElement/index.tsx +43 -0
  221. package/src/components/composite/PptxRenderer/index.ts +24 -0
  222. package/src/components/composite/PptxRenderer/types.ts +326 -0
  223. package/src/components/composite/PptxRenderer/utils.ts +129 -0
  224. package/src/components/composite/ProjectSelect/ProjectSelect.stories.tsx +112 -0
  225. package/src/components/composite/ProjectSelect/ProjectSelectSource.test.mjs +34 -0
  226. package/src/components/composite/ProjectSelect/index.tsx +155 -0
  227. package/src/components/composite/RadioCard/RadioCard.stories.tsx +130 -0
  228. package/src/components/composite/RadioCard/RadioCardSource.test.mjs +42 -0
  229. package/src/components/composite/RadioCard/index.tsx +171 -0
  230. package/src/components/composite/RowOverflowMenu/RowOverflowMenu.stories.tsx +113 -0
  231. package/src/components/composite/RowOverflowMenu/RowOverflowMenuSource.test.mjs +59 -0
  232. package/src/components/composite/RowOverflowMenu/index.tsx +101 -0
  233. package/src/components/composite/SandboxPermissionPrompt/SandboxPermissionPrompt.stories.tsx +159 -0
  234. package/src/components/composite/SandboxPermissionPrompt/SandboxPermissionPromptSource.test.mjs +71 -0
  235. package/src/components/composite/SandboxPermissionPrompt/index.tsx +157 -0
  236. package/src/components/composite/SearchInput/SearchInput.stories.tsx +127 -0
  237. package/src/components/composite/SearchInput/index.tsx +91 -0
  238. package/src/components/composite/SearchResult/SearchResult.stories.tsx +305 -0
  239. package/src/components/composite/SearchResult/SearchResultSource.test.mjs +45 -0
  240. package/src/components/composite/SearchResult/index.tsx +148 -0
  241. package/src/components/composite/Section/Section.stories.tsx +148 -0
  242. package/src/components/composite/Section/SectionSource.test.mjs +59 -0
  243. package/src/components/composite/Section/index.tsx +105 -0
  244. package/src/components/composite/SelectionBulkBar/SelectionBulkBar.stories.tsx +111 -0
  245. package/src/components/composite/SelectionBulkBar/SelectionBulkBarSource.test.mjs +44 -0
  246. package/src/components/composite/SelectionBulkBar/index.tsx +99 -0
  247. package/src/components/composite/ShareStrip/ShareStrip.stories.tsx +123 -0
  248. package/src/components/composite/ShareStrip/index.tsx +83 -0
  249. package/src/components/composite/ShortcutSheet/ShortcutSheet.stories.tsx +90 -0
  250. package/src/components/composite/ShortcutSheet/ShortcutSheetSource.test.mjs +49 -0
  251. package/src/components/composite/ShortcutSheet/index.tsx +163 -0
  252. package/src/components/composite/SitesArtifactCardView/SitesArtifactCardView.stories.tsx +328 -0
  253. package/src/components/composite/SitesArtifactCardView/SitesArtifactCardViewSource.test.mjs +45 -0
  254. package/src/components/composite/SitesArtifactCardView/index.tsx +100 -0
  255. package/src/components/composite/Skeleton/Skeleton.stories.tsx +188 -0
  256. package/src/components/composite/Skeleton/SkeletonSource.test.mjs +25 -0
  257. package/src/components/composite/Skeleton/index.tsx +152 -0
  258. package/src/components/composite/Splash/Splash.stories.tsx +150 -0
  259. package/src/components/composite/Splash/index.tsx +229 -0
  260. package/src/components/composite/StatusTag/StatusTag.stories.tsx +66 -0
  261. package/src/components/composite/StatusTag/StatusTagSource.test.mjs +64 -0
  262. package/src/components/composite/StatusTag/index.tsx +78 -0
  263. package/src/components/composite/StepList/StepList.stories.tsx +352 -0
  264. package/src/components/composite/StepList/index.tsx +23 -0
  265. package/src/components/composite/Tag/Tag.stories.tsx +279 -0
  266. package/src/components/composite/Tag/TagSource.test.mjs +67 -0
  267. package/src/components/composite/Tag/index.tsx +229 -0
  268. package/src/components/composite/TimePicker/TimePicker.stories.tsx +91 -0
  269. package/src/components/composite/TimePicker/TimePickerSource.test.mjs +98 -0
  270. package/src/components/composite/TimePicker/index.tsx +208 -0
  271. package/src/components/composite/TitleBar/TitleBar.stories.tsx +329 -0
  272. package/src/components/composite/TitleBar/TitleBarSource.test.mjs +140 -0
  273. package/src/components/composite/TitleBar/index.tsx +350 -0
  274. package/src/components/composite/Toast/Toast.stories.tsx +304 -0
  275. package/src/components/composite/Toast/ToastSource.test.mjs +63 -0
  276. package/src/components/composite/Toast/index.tsx +135 -0
  277. package/src/components/composite/Tooltip/Tooltip.stories.tsx +304 -0
  278. package/src/components/composite/Tooltip/TooltipSource.test.mjs +34 -0
  279. package/src/components/composite/Tooltip/index.tsx +204 -0
  280. package/src/components/composite/TranscriptDividers/TranscriptDividers.stories.tsx +160 -0
  281. package/src/components/composite/TranscriptDividers/TranscriptDividersSource.test.mjs +90 -0
  282. package/src/components/composite/TranscriptDividers/index.tsx +352 -0
  283. package/src/components/composite/WCardShell/WCardShell.stories.tsx +228 -0
  284. package/src/components/composite/WCardShell/index.tsx +101 -0
  285. package/src/components/composite/index.ts +81 -0
  286. package/src/components/domain/artifacts/ArtifactPreviewSidebarView/ArtifactPreviewSidebarView.stories.tsx +128 -0
  287. package/src/components/domain/artifacts/ArtifactPreviewSidebarView/ArtifactPreviewSidebarViewSource.test.mjs +69 -0
  288. package/src/components/domain/artifacts/ArtifactPreviewSidebarView/index.tsx +212 -0
  289. package/src/components/domain/artifacts/index.ts +1 -0
  290. package/src/components/domain/browser/BrowserAnnotationPopupView/BrowserAnnotationPopupView.stories.tsx +211 -0
  291. package/src/components/domain/browser/BrowserAnnotationPopupView/BrowserAnnotationPopupViewSource.test.mjs +82 -0
  292. package/src/components/domain/browser/BrowserAnnotationPopupView/index.tsx +235 -0
  293. package/src/components/domain/browser/BrowserDeviceToolbarView/BrowserDeviceToolbarView.stories.tsx +260 -0
  294. package/src/components/domain/browser/BrowserDeviceToolbarView/BrowserDeviceToolbarViewSource.test.mjs +12 -0
  295. package/src/components/domain/browser/BrowserDeviceToolbarView/index.tsx +154 -0
  296. package/src/components/domain/browser/BrowserFindBarView/BrowserFindBarView.stories.tsx +52 -0
  297. package/src/components/domain/browser/BrowserFindBarView/index.tsx +111 -0
  298. package/src/components/domain/browser/BrowserImportDialogView/BrowserImportDialogView.stories.tsx +89 -0
  299. package/src/components/domain/browser/BrowserImportDialogView/index.tsx +155 -0
  300. package/src/components/domain/browser/BrowserLoadErrorView/BrowserLoadErrorView.stories.tsx +197 -0
  301. package/src/components/domain/browser/BrowserLoadErrorView/BrowserLoadErrorViewSource.test.mjs +29 -0
  302. package/src/components/domain/browser/BrowserLoadErrorView/index.tsx +45 -0
  303. package/src/components/domain/browser/BrowserMoreMenuView/BrowserMoreMenuView.stories.tsx +66 -0
  304. package/src/components/domain/browser/BrowserMoreMenuView/index.tsx +268 -0
  305. package/src/components/domain/browser/BrowserNavBarView/BrowserNavBarView.stories.tsx +149 -0
  306. package/src/components/domain/browser/BrowserNavBarView/index.tsx +156 -0
  307. package/src/components/domain/browser/BrowserTabBarView/index.tsx +18 -0
  308. package/src/components/domain/browser/SubAgentPane/SubAgentPane.stories.tsx +96 -0
  309. package/src/components/domain/browser/SubAgentPane/SubAgentPaneSource.test.mjs +48 -0
  310. package/src/components/domain/browser/SubAgentPane/index.tsx +121 -0
  311. package/src/components/domain/browser/TerminalPane/TerminalPane.stories.tsx +95 -0
  312. package/src/components/domain/browser/TerminalPane/TerminalPaneSource.test.mjs +52 -0
  313. package/src/components/domain/browser/TerminalPane/index.tsx +75 -0
  314. package/src/components/domain/browser/WebPreview/WebPreview.stories.tsx +71 -0
  315. package/src/components/domain/browser/WebPreview/index.tsx +141 -0
  316. package/src/components/domain/browser/WebPreviewConsole/WebPreviewConsole.stories.tsx +61 -0
  317. package/src/components/domain/browser/WebPreviewConsole/WebPreviewConsoleSource.test.mjs +66 -0
  318. package/src/components/domain/browser/WebPreviewConsole/index.tsx +239 -0
  319. package/src/components/domain/browser/WebPreviewDialog/WebPreviewDialog.stories.tsx +288 -0
  320. package/src/components/domain/browser/WebPreviewDialog/WebPreviewDialogSource.test.mjs +62 -0
  321. package/src/components/domain/browser/WebPreviewDialog/index.tsx +82 -0
  322. package/src/components/domain/browser/WebPreviewNav/WebPreviewNav.stories.tsx +462 -0
  323. package/src/components/domain/browser/WebPreviewNav/WebPreviewNavSource.test.mjs +353 -0
  324. package/src/components/domain/browser/WebPreviewNav/index.tsx +351 -0
  325. package/src/components/domain/browser/WebPreviewShell/WebPreviewShell.stories.tsx +226 -0
  326. package/src/components/domain/browser/WebPreviewShell/WebPreviewShellSource.test.mjs +172 -0
  327. package/src/components/domain/browser/WebPreviewShell/index.tsx +324 -0
  328. package/src/components/domain/browser/index.ts +45 -0
  329. package/src/components/domain/chat/AgentLoopSegment/AgentLoopSegment.stories.tsx +107 -0
  330. package/src/components/domain/chat/AgentLoopSegment/AgentLoopSegmentSource.test.mjs +45 -0
  331. package/src/components/domain/chat/AgentLoopSegment/index.tsx +29 -0
  332. package/src/components/domain/chat/AgentTurn/AgentTurn.stories.tsx +162 -0
  333. package/src/components/domain/chat/AgentTurn/AgentTurnSource.test.mjs +98 -0
  334. package/src/components/domain/chat/AgentTurn/beaconContext.ts +37 -0
  335. package/src/components/domain/chat/AgentTurn/index.tsx +226 -0
  336. package/src/components/domain/chat/ArtifactCard/ArtifactCard.stories.tsx +127 -0
  337. package/src/components/domain/chat/ArtifactCard/index.tsx +249 -0
  338. package/src/components/domain/chat/Attachment/Attachment.stories.tsx +235 -0
  339. package/src/components/domain/chat/Attachment/AttachmentSource.test.mjs +160 -0
  340. package/src/components/domain/chat/Attachment/index.tsx +857 -0
  341. package/src/components/domain/chat/AuthorizationCard/AuthorizationCard.stories.tsx +53 -0
  342. package/src/components/domain/chat/AuthorizationCard/AuthorizationCardSource.test.mjs +80 -0
  343. package/src/components/domain/chat/AuthorizationCard/index.tsx +89 -0
  344. package/src/components/domain/chat/ChatBubble/ChatBubble.stories.tsx +32 -0
  345. package/src/components/domain/chat/ChatBubble/index.tsx +24 -0
  346. package/src/components/domain/chat/ChatMessage/ChatMessage.stories.tsx +31 -0
  347. package/src/components/domain/chat/ChatMessage/index.tsx +23 -0
  348. package/src/components/domain/chat/ChatR2ReviewSource.test.mjs +98 -0
  349. package/src/components/domain/chat/ChatThinking/ChatThinking.stories.tsx +125 -0
  350. package/src/components/domain/chat/ChatThinking/index.tsx +55 -0
  351. package/src/components/domain/chat/Chatbot/Chatbot.stories.tsx +49 -0
  352. package/src/components/domain/chat/Chatbot/index.tsx +37 -0
  353. package/src/components/domain/chat/Composer/Composer.stories.tsx +227 -0
  354. package/src/components/domain/chat/Composer/ComposerSource.test.mjs +175 -0
  355. package/src/components/domain/chat/Composer/index.tsx +450 -0
  356. package/src/components/domain/chat/Composer/parts/ComposerAudioSpectrum.stories.tsx +203 -0
  357. package/src/components/domain/chat/Composer/parts/ComposerAudioSpectrum.tsx +110 -0
  358. package/src/components/domain/chat/Composer/parts/ComposerAudioSpectrumSource.test.mjs +54 -0
  359. package/src/components/domain/chat/Composer/parts/ComposerAuthorization.stories.tsx +155 -0
  360. package/src/components/domain/chat/Composer/parts/ComposerAuthorization.tsx +108 -0
  361. package/src/components/domain/chat/Composer/parts/ComposerMentions.stories.tsx +76 -0
  362. package/src/components/domain/chat/Composer/parts/ComposerMentions.tsx +83 -0
  363. package/src/components/domain/chat/Composer/parts/ComposerMentionsSource.test.mjs +85 -0
  364. package/src/components/domain/chat/Composer/parts/ComposerMenu.stories.tsx +266 -0
  365. package/src/components/domain/chat/Composer/parts/ComposerMenu.tsx +232 -0
  366. package/src/components/domain/chat/Composer/parts/ComposerMenuPopover.stories.tsx +166 -0
  367. package/src/components/domain/chat/Composer/parts/ComposerMenuPopover.tsx +87 -0
  368. package/src/components/domain/chat/Composer/parts/ComposerMenuPopoverSource.test.mjs +56 -0
  369. package/src/components/domain/chat/Composer/parts/ComposerPopover.stories.tsx +257 -0
  370. package/src/components/domain/chat/Composer/parts/ComposerPopover.tsx +221 -0
  371. package/src/components/domain/chat/Composer/parts/ComposerPopoverSource.test.mjs +71 -0
  372. package/src/components/domain/chat/Composer/parts/ComposerProjectPicker.stories.tsx +260 -0
  373. package/src/components/domain/chat/Composer/parts/ComposerProjectPicker.tsx +246 -0
  374. package/src/components/domain/chat/Composer/parts/ComposerProjectPickerSource.test.mjs +46 -0
  375. package/src/components/domain/chat/Composer/parts/ComposerQueue.stories.tsx +275 -0
  376. package/src/components/domain/chat/Composer/parts/ComposerQueue.tsx +155 -0
  377. package/src/components/domain/chat/Composer/parts/ComposerQueueSource.test.mjs +95 -0
  378. package/src/components/domain/chat/Composer/parts/ComposerVoiceInput.stories.tsx +77 -0
  379. package/src/components/domain/chat/Composer/parts/ComposerVoiceInput.tsx +70 -0
  380. package/src/components/domain/chat/Composer/parts/mountChip.ts +21 -0
  381. package/src/components/domain/chat/ContextUsage/ContextUsage.stories.tsx +62 -0
  382. package/src/components/domain/chat/ContextUsage/index.tsx +69 -0
  383. package/src/components/domain/chat/ExecutionSummary/ExecutionSummary.stories.tsx +238 -0
  384. package/src/components/domain/chat/ExecutionSummary/ExecutionSummarySource.test.mjs +210 -0
  385. package/src/components/domain/chat/ExecutionSummary/index.tsx +487 -0
  386. package/src/components/domain/chat/Message/Message.stories.tsx +264 -0
  387. package/src/components/domain/chat/Message/index.tsx +44 -0
  388. package/src/components/domain/chat/MessageActions/MessageActions.stories.tsx +132 -0
  389. package/src/components/domain/chat/MessageActions/MessageActionsSource.test.mjs +79 -0
  390. package/src/components/domain/chat/MessageActions/index.tsx +186 -0
  391. package/src/components/domain/chat/PlanCard/PlanCard.stories.tsx +87 -0
  392. package/src/components/domain/chat/PlanCard/index.tsx +170 -0
  393. package/src/components/domain/chat/RichContent/RichContent.stories.tsx +102 -0
  394. package/src/components/domain/chat/RichContent/RichContentSource.test.mjs +82 -0
  395. package/src/components/domain/chat/RichContent/index.tsx +465 -0
  396. package/src/components/domain/chat/SubAgentThread/SubAgentThread.stories.tsx +119 -0
  397. package/src/components/domain/chat/SubAgentThread/index.tsx +104 -0
  398. package/src/components/domain/chat/Thinking/Thinking.stories.tsx +196 -0
  399. package/src/components/domain/chat/Thinking/ThinkingInlineSource.test.mjs +154 -0
  400. package/src/components/domain/chat/Thinking/index.tsx +237 -0
  401. package/src/components/domain/chat/ToolCallRow/ToolCallRow.stories.tsx +105 -0
  402. package/src/components/domain/chat/ToolCallRow/ToolCallRowSource.test.mjs +83 -0
  403. package/src/components/domain/chat/ToolCallRow/index.tsx +113 -0
  404. package/src/components/domain/chat/Transcript/Transcript.stories.tsx +296 -0
  405. package/src/components/domain/chat/Transcript/TranscriptSource.test.mjs +189 -0
  406. package/src/components/domain/chat/Transcript/index.tsx +187 -0
  407. package/src/components/domain/chat/TranscriptSpine/TranscriptSpine.stories.tsx +124 -0
  408. package/src/components/domain/chat/TranscriptSpine/index.tsx +245 -0
  409. package/src/components/domain/chat/UserTurn/UserTurn.stories.tsx +176 -0
  410. package/src/components/domain/chat/UserTurn/UserTurnSource.test.mjs +150 -0
  411. package/src/components/domain/chat/UserTurn/index.tsx +194 -0
  412. package/src/components/domain/chat/index.ts +22 -0
  413. package/src/components/domain/desktop/DesktopAccountMenuView/DesktopAccountMenuView.stories.tsx +116 -0
  414. package/src/components/domain/desktop/DesktopAccountMenuView/DesktopAccountMenuViewSource.test.mjs +80 -0
  415. package/src/components/domain/desktop/DesktopAccountMenuView/index.tsx +355 -0
  416. package/src/components/domain/desktop/DesktopAppearanceSettings/DesktopAppearanceSettings.stories.tsx +96 -0
  417. package/src/components/domain/desktop/DesktopAppearanceSettings/DesktopAppearanceSettingsSource.test.mjs +89 -0
  418. package/src/components/domain/desktop/DesktopAppearanceSettings/index.tsx +155 -0
  419. package/src/components/domain/desktop/DesktopAssistantConfigView/DesktopAssistantConfigView.stories.tsx +275 -0
  420. package/src/components/domain/desktop/DesktopAssistantConfigView/DesktopAssistantConfigViewSource.test.mjs +37 -0
  421. package/src/components/domain/desktop/DesktopAssistantConfigView/index.tsx +221 -0
  422. package/src/components/domain/desktop/DesktopCatalogView/DesktopCatalogView.stories.tsx +537 -0
  423. package/src/components/domain/desktop/DesktopCatalogView/DesktopCatalogViewSource.test.mjs +339 -0
  424. package/src/components/domain/desktop/DesktopCatalogView/index.tsx +1074 -0
  425. package/src/components/domain/desktop/DesktopChatBranchDivider/DesktopChatBranchDivider.stories.tsx +58 -0
  426. package/src/components/domain/desktop/DesktopChatBranchDivider/index.tsx +33 -0
  427. package/src/components/domain/desktop/DesktopChatEmptyStateView/DesktopChatEmptyStateView.stories.tsx +75 -0
  428. package/src/components/domain/desktop/DesktopChatEmptyStateView/DesktopChatEmptyStateViewSource.test.mjs +54 -0
  429. package/src/components/domain/desktop/DesktopChatEmptyStateView/index.tsx +64 -0
  430. package/src/components/domain/desktop/DesktopChatHeaderView/DesktopChatHeaderView.stories.tsx +83 -0
  431. package/src/components/domain/desktop/DesktopChatHeaderView/DesktopChatHeaderViewSource.test.mjs +126 -0
  432. package/src/components/domain/desktop/DesktopChatHeaderView/index.tsx +169 -0
  433. package/src/components/domain/desktop/DesktopChatMessageView/DesktopChatMessageView.stories.tsx +170 -0
  434. package/src/components/domain/desktop/DesktopChatMessageView/DesktopChatMessageViewSource.test.mjs +47 -0
  435. package/src/components/domain/desktop/DesktopChatMessageView/index.tsx +213 -0
  436. package/src/components/domain/desktop/DesktopChatTurnView/DesktopChatTurnView.stories.tsx +498 -0
  437. package/src/components/domain/desktop/DesktopChatTurnView/DesktopChatTurnViewSource.test.mjs +187 -0
  438. package/src/components/domain/desktop/DesktopChatTurnView/index.tsx +490 -0
  439. package/src/components/domain/desktop/DesktopComposer/DesktopComposer.stories.tsx +195 -0
  440. package/src/components/domain/desktop/DesktopComposer/DesktopComposerModelPickerSource.test.mjs +132 -0
  441. package/src/components/domain/desktop/DesktopComposer/DesktopComposerMountChipSource.test.mjs +43 -0
  442. package/src/components/domain/desktop/DesktopComposer/DesktopComposerResponsiveSource.test.mjs +44 -0
  443. package/src/components/domain/desktop/DesktopComposer/DesktopMcpFormThemeSource.test.mjs +30 -0
  444. package/src/components/domain/desktop/DesktopComposer/index.tsx +206 -0
  445. package/src/components/domain/desktop/DesktopConnectorDetailView/DesktopConnectorDetailView.stories.tsx +72 -0
  446. package/src/components/domain/desktop/DesktopConnectorDetailView/DesktopConnectorDetailViewSource.test.mjs +81 -0
  447. package/src/components/domain/desktop/DesktopConnectorDetailView/index.tsx +301 -0
  448. package/src/components/domain/desktop/DesktopHomeView/DesktopHomeView.stories.tsx +103 -0
  449. package/src/components/domain/desktop/DesktopHomeView/DesktopHomeViewSource.test.mjs +51 -0
  450. package/src/components/domain/desktop/DesktopHomeView/index.tsx +122 -0
  451. package/src/components/domain/desktop/DesktopLibraryAuthorizationDialog/DesktopLibraryAuthorizationDialog.stories.tsx +55 -0
  452. package/src/components/domain/desktop/DesktopLibraryAuthorizationDialog/index.tsx +156 -0
  453. package/src/components/domain/desktop/DesktopLibraryPageView/DesktopLibraryPageView.stories.tsx +42 -0
  454. package/src/components/domain/desktop/DesktopLibraryPageView/index.tsx +35 -0
  455. package/src/components/domain/desktop/DesktopLoginView/DesktopLoginView.css +75 -0
  456. package/src/components/domain/desktop/DesktopLoginView/DesktopLoginView.stories.tsx +230 -0
  457. package/src/components/domain/desktop/DesktopLoginView/DesktopLoginViewSource.test.mjs +149 -0
  458. package/src/components/domain/desktop/DesktopLoginView/index.tsx +418 -0
  459. package/src/components/domain/desktop/DesktopOnboardingTourView/DesktopOnboardingTourView.stories.tsx +103 -0
  460. package/src/components/domain/desktop/DesktopOnboardingTourView/DesktopOnboardingTourViewSource.test.mjs +57 -0
  461. package/src/components/domain/desktop/DesktopOnboardingTourView/index.tsx +189 -0
  462. package/src/components/domain/desktop/DesktopPet/DesktopPet.fixture.ts +243 -0
  463. package/src/components/domain/desktop/DesktopPet/DesktopPet.stories.tsx +337 -0
  464. package/src/components/domain/desktop/DesktopPet/DesktopPetSource.test.mjs +191 -0
  465. package/src/components/domain/desktop/DesktopPet/index.tsx +591 -0
  466. package/src/components/domain/desktop/DesktopPetSettings/DesktopPetSettings.stories.tsx +159 -0
  467. package/src/components/domain/desktop/DesktopPetSettings/DesktopPetSettingsSource.test.mjs +76 -0
  468. package/src/components/domain/desktop/DesktopPetSettings/index.tsx +140 -0
  469. package/src/components/domain/desktop/DesktopRunStatusView/DesktopRunStatusView.stories.tsx +166 -0
  470. package/src/components/domain/desktop/DesktopRunStatusView/DesktopRunStatusViewSource.test.mjs +51 -0
  471. package/src/components/domain/desktop/DesktopRunStatusView/index.tsx +34 -0
  472. package/src/components/domain/desktop/DesktopSelectionCard/DesktopSelectionCard.stories.tsx +122 -0
  473. package/src/components/domain/desktop/DesktopSelectionCard/DesktopSelectionCardSource.test.mjs +42 -0
  474. package/src/components/domain/desktop/DesktopSelectionCard/index.tsx +75 -0
  475. package/src/components/domain/desktop/DesktopSettingsMemorySection/DesktopSettingsMemorySection.stories.tsx +225 -0
  476. package/src/components/domain/desktop/DesktopSettingsMemorySection/DesktopSettingsMemorySectionSource.test.mjs +105 -0
  477. package/src/components/domain/desktop/DesktopSettingsMemorySection/index.tsx +340 -0
  478. package/src/components/domain/desktop/DesktopSettingsView/DesktopSettingsView.stories.tsx +177 -0
  479. package/src/components/domain/desktop/DesktopSettingsView/DesktopSettingsViewSource.test.mjs +195 -0
  480. package/src/components/domain/desktop/DesktopSettingsView/index.tsx +176 -0
  481. package/src/components/domain/desktop/DesktopShareSelectionBarView/DesktopShareSelectionBarView.stories.tsx +77 -0
  482. package/src/components/domain/desktop/DesktopShareSelectionBarView/DesktopShareSelectionBarViewSource.test.mjs +76 -0
  483. package/src/components/domain/desktop/DesktopShareSelectionBarView/index.tsx +55 -0
  484. package/src/components/domain/desktop/DesktopSidebarView/DesktopSidebarView.stories.tsx +454 -0
  485. package/src/components/domain/desktop/DesktopSidebarView/DesktopSidebarViewSource.test.mjs +386 -0
  486. package/src/components/domain/desktop/DesktopSidebarView/index.tsx +1072 -0
  487. package/src/components/domain/desktop/DesktopSiteReleasesView/DesktopSiteReleasesView.stories.tsx +369 -0
  488. package/src/components/domain/desktop/DesktopSiteReleasesView/DesktopSiteReleasesViewSource.test.mjs +123 -0
  489. package/src/components/domain/desktop/DesktopSiteReleasesView/index.tsx +392 -0
  490. package/src/components/domain/desktop/DesktopSitesListView/DesktopSitesListView.stories.tsx +244 -0
  491. package/src/components/domain/desktop/DesktopSitesListView/DesktopSitesListViewSource.test.mjs +198 -0
  492. package/src/components/domain/desktop/DesktopSitesListView/index.tsx +417 -0
  493. package/src/components/domain/desktop/DesktopSkillsPageView/DesktopSkillsPageView.stories.tsx +230 -0
  494. package/src/components/domain/desktop/DesktopSkillsPageView/DesktopSkillsPageViewSource.test.mjs +149 -0
  495. package/src/components/domain/desktop/DesktopSkillsPageView/index.tsx +235 -0
  496. package/src/components/domain/desktop/DesktopTaskDetailView/index.tsx +111 -0
  497. package/src/components/domain/desktop/DesktopToolCallView/DesktopToolCallListViewSource.test.mjs +302 -0
  498. package/src/components/domain/desktop/DesktopToolCallView/DesktopToolCallView.stories.tsx +409 -0
  499. package/src/components/domain/desktop/DesktopToolCallView/index.tsx +388 -0
  500. package/src/components/domain/desktop/DesktopWorkbenchShell/DesktopWorkbenchShell.stories.tsx +418 -0
  501. package/src/components/domain/desktop/DesktopWorkbenchShell/DesktopWorkbenchShellSource.test.mjs +151 -0
  502. package/src/components/domain/desktop/DesktopWorkbenchShell/index.tsx +167 -0
  503. package/src/components/domain/desktop/DesktopWorkspacePageView/DesktopWorkspacePageView.stories.tsx +135 -0
  504. package/src/components/domain/desktop/DesktopWorkspacePageView/DesktopWorkspacePageViewSource.test.mjs +57 -0
  505. package/src/components/domain/desktop/DesktopWorkspacePageView/index.tsx +114 -0
  506. package/src/components/domain/desktop/DesktopWorkspaceView/DesktopWorkspaceView.stories.tsx +227 -0
  507. package/src/components/domain/desktop/DesktopWorkspaceView/DesktopWorkspaceViewSource.test.mjs +175 -0
  508. package/src/components/domain/desktop/DesktopWorkspaceView/index.tsx +580 -0
  509. package/src/components/domain/desktop/ResourceManagement/ResourceManagement.stories.tsx +19 -0
  510. package/src/components/domain/desktop/ResourceManagement/ResourceManagementSource.test.mjs +54 -0
  511. package/src/components/domain/desktop/ResourceManagement/SharesList.tsx +323 -0
  512. package/src/components/domain/desktop/ResourceManagement/SnapshotViews.tsx +92 -0
  513. package/src/components/domain/desktop/ResourceManagement/SnapshotViewsSource.test.mjs +15 -0
  514. package/src/components/domain/desktop/ResourceManagement/index.tsx +246 -0
  515. package/src/components/domain/desktop/ShareSettingsDialogView/index.tsx +234 -0
  516. package/src/components/domain/desktop/SidePanelEmpty/SidePanelEmpty.stories.tsx +100 -0
  517. package/src/components/domain/desktop/SidePanelEmpty/SidePanelEmptySource.test.mjs +67 -0
  518. package/src/components/domain/desktop/SidePanelEmpty/index.tsx +113 -0
  519. package/src/components/domain/desktop/StarterCapsules/StarterCapsules.stories.tsx +65 -0
  520. package/src/components/domain/desktop/StarterCapsules/StarterCapsulesSource.test.mjs +43 -0
  521. package/src/components/domain/desktop/StarterCapsules/index.tsx +90 -0
  522. package/src/components/domain/desktop/WorkbenchSidePanel/WorkbenchSidePanel.stories.tsx +59 -0
  523. package/src/components/domain/desktop/WorkbenchSidePanel/WorkbenchSidePanelSource.test.mjs +51 -0
  524. package/src/components/domain/desktop/WorkbenchSidePanel/index.tsx +74 -0
  525. package/src/components/domain/desktop/WorkspaceMigrateConfirm/WorkspaceMigrateConfirm.stories.tsx +79 -0
  526. package/src/components/domain/desktop/WorkspaceMigrateConfirm/WorkspaceMigrateConfirmSource.test.mjs +34 -0
  527. package/src/components/domain/desktop/WorkspaceMigrateConfirm/index.tsx +92 -0
  528. package/src/components/domain/desktop/index.ts +64 -0
  529. package/src/components/domain/files/FileBrowser/FileBrowser.stories.tsx +397 -0
  530. package/src/components/domain/files/FileBrowser/FileBrowserSource.test.mjs +75 -0
  531. package/src/components/domain/files/FileBrowser/index.tsx +221 -0
  532. package/src/components/domain/files/FileIcon/FileIcon.stories.tsx +207 -0
  533. package/src/components/domain/files/FileIcon/FileIconSource.test.mjs +39 -0
  534. package/src/components/domain/files/FileIcon/index.tsx +133 -0
  535. package/src/components/domain/files/FilePreviewContentView/FilePreviewContentView.stories.tsx +242 -0
  536. package/src/components/domain/files/FilePreviewContentView/FilePreviewContentViewSource.test.mjs +44 -0
  537. package/src/components/domain/files/FilePreviewContentView/index.tsx +125 -0
  538. package/src/components/domain/files/FileTree/FileTree.stories.tsx +204 -0
  539. package/src/components/domain/files/FileTree/FileTreeSource.test.mjs +18 -0
  540. package/src/components/domain/files/FileTree/index.tsx +106 -0
  541. package/src/components/domain/files/PreviewDialog/PreviewDialog.stories.tsx +178 -0
  542. package/src/components/domain/files/PreviewDialog/PreviewDialogSource.test.mjs +92 -0
  543. package/src/components/domain/files/PreviewDialog/index.tsx +294 -0
  544. package/src/components/domain/files/index.ts +5 -0
  545. package/src/components/domain/index.ts +8 -0
  546. package/src/components/domain/office/CsvPreview/CsvPreview.stories.tsx +264 -0
  547. package/src/components/domain/office/CsvPreview/CsvPreviewSource.test.mjs +77 -0
  548. package/src/components/domain/office/CsvPreview/index.tsx +224 -0
  549. package/src/components/domain/office/OfficePreview/OfficePreview.stories.tsx +265 -0
  550. package/src/components/domain/office/OfficePreview/OfficePreviewDialog.stories.tsx +71 -0
  551. package/src/components/domain/office/OfficePreview/OfficePreviewDialog.tsx +43 -0
  552. package/src/components/domain/office/OfficePreview/OfficePreviewSource.test.mjs +126 -0
  553. package/src/components/domain/office/OfficePreview/index.tsx +782 -0
  554. package/src/components/domain/office/PdfPreview/PdfPreview.stories.tsx +280 -0
  555. package/src/components/domain/office/PdfPreview/PdfPreviewDialog.stories.tsx +61 -0
  556. package/src/components/domain/office/PdfPreview/PdfPreviewDialog.tsx +61 -0
  557. package/src/components/domain/office/PdfPreview/PdfPreviewSource.test.mjs +70 -0
  558. package/src/components/domain/office/PdfPreview/index.tsx +217 -0
  559. package/src/components/domain/office/index.ts +5 -0
  560. package/src/components/domain/skills/McpServerListView/McpServerListView.stories.tsx +510 -0
  561. package/src/components/domain/skills/McpServerListView/McpServerListViewSource.test.mjs +101 -0
  562. package/src/components/domain/skills/McpServerListView/index.tsx +250 -0
  563. package/src/components/domain/skills/SkillAvatarView/SkillAvatarView.stories.tsx +121 -0
  564. package/src/components/domain/skills/SkillAvatarView/SkillAvatarViewSource.test.mjs +67 -0
  565. package/src/components/domain/skills/SkillAvatarView/index.tsx +112 -0
  566. package/src/components/domain/skills/SkillCardView/SkillCardView.stories.tsx +374 -0
  567. package/src/components/domain/skills/SkillCardView/SkillCardViewSource.test.mjs +35 -0
  568. package/src/components/domain/skills/SkillCardView/index.tsx +88 -0
  569. package/src/components/domain/skills/SkillDetailPanelView/SkillDetailPanelView.stories.tsx +113 -0
  570. package/src/components/domain/skills/SkillDetailPanelView/index.tsx +115 -0
  571. package/src/components/domain/skills/SkillDetailView/SkillDetailView.stories.tsx +274 -0
  572. package/src/components/domain/skills/SkillDetailView/index.tsx +121 -0
  573. package/src/components/domain/skills/SkillImportDialogView/SkillImportDialogView.stories.tsx +128 -0
  574. package/src/components/domain/skills/SkillImportDialogView/SkillImportDialogViewSource.test.mjs +11 -0
  575. package/src/components/domain/skills/SkillImportDialogView/index.tsx +147 -0
  576. package/src/components/domain/skills/ToolDetailModalView/ToolDetailModalView.stories.tsx +160 -0
  577. package/src/components/domain/skills/ToolDetailModalView/ToolDetailModalViewSource.test.mjs +99 -0
  578. package/src/components/domain/skills/ToolDetailModalView/index.tsx +160 -0
  579. package/src/components/domain/skills/index.ts +7 -0
  580. package/src/components/domain/tasks/ScheduledTaskCardView/ScheduledTaskCardView.stories.tsx +120 -0
  581. package/src/components/domain/tasks/ScheduledTaskCardView/ScheduledTaskCardViewSource.test.mjs +40 -0
  582. package/src/components/domain/tasks/ScheduledTaskCardView/index.tsx +135 -0
  583. package/src/components/domain/tasks/ScheduledTaskDeleteDialog/ScheduledTaskDeleteDialog.stories.tsx +56 -0
  584. package/src/components/domain/tasks/ScheduledTaskDeleteDialog/ScheduledTaskDeleteDialogSource.test.mjs +35 -0
  585. package/src/components/domain/tasks/ScheduledTaskDeleteDialog/index.tsx +73 -0
  586. package/src/components/domain/tasks/ScheduledTaskDetailView/ScheduledTaskDetailView.stories.tsx +121 -0
  587. package/src/components/domain/tasks/ScheduledTaskDetailView/ScheduledTaskDetailViewSource.test.mjs +115 -0
  588. package/src/components/domain/tasks/ScheduledTaskDetailView/index.tsx +223 -0
  589. package/src/components/domain/tasks/ScheduledTasksSpaceView/ScheduledTasksSpaceView.stories.tsx +526 -0
  590. package/src/components/domain/tasks/ScheduledTasksSpaceView/ScheduledTasksSpaceViewSource.test.mjs +85 -0
  591. package/src/components/domain/tasks/ScheduledTasksSpaceView/index.tsx +118 -0
  592. package/src/components/domain/tasks/index.ts +4 -0
  593. package/src/components/domain/theme/SkinManager.stories.tsx +43 -0
  594. package/src/components/domain/theme/SkinManagerUI.tsx +382 -0
  595. package/src/components/domain/theme/ThemeDemo.stories.tsx +12 -0
  596. package/src/components/domain/theme/ThemeDemo.tsx +224 -0
  597. package/src/components/index.ts +11 -0
  598. package/src/components/primitives/Avatar/Avatar.stories.tsx +170 -0
  599. package/src/components/primitives/Avatar/AvatarSource.test.mjs +37 -0
  600. package/src/components/primitives/Avatar/index.tsx +180 -0
  601. package/src/components/primitives/BackTop/BackTop.stories.tsx +122 -0
  602. package/src/components/primitives/BackTop/BackTopSource.test.mjs +61 -0
  603. package/src/components/primitives/BackTop/index.tsx +93 -0
  604. package/src/components/primitives/Badge/Badge.stories.tsx +376 -0
  605. package/src/components/primitives/Badge/BadgeSource.test.mjs +27 -0
  606. package/src/components/primitives/Badge/index.tsx +65 -0
  607. package/src/components/primitives/Button/Button.stories.tsx +287 -0
  608. package/src/components/primitives/Button/ButtonSource.test.mjs +84 -0
  609. package/src/components/primitives/Button/index.tsx +216 -0
  610. package/src/components/primitives/Card/Card.stories.tsx +186 -0
  611. package/src/components/primitives/Card/CardSource.test.mjs +73 -0
  612. package/src/components/primitives/Card/index.tsx +137 -0
  613. package/src/components/primitives/Checkbox/Checkbox.stories.tsx +79 -0
  614. package/src/components/primitives/Checkbox/CheckboxSource.test.mjs +43 -0
  615. package/src/components/primitives/Checkbox/index.tsx +87 -0
  616. package/src/components/primitives/Chip/Chip.stories.tsx +149 -0
  617. package/src/components/primitives/Chip/ChipSource.test.mjs +73 -0
  618. package/src/components/primitives/Chip/index.tsx +252 -0
  619. package/src/components/primitives/Divider/Divider.stories.tsx +68 -0
  620. package/src/components/primitives/Divider/DividerSource.test.mjs +26 -0
  621. package/src/components/primitives/Divider/index.tsx +65 -0
  622. package/src/components/primitives/Dropdown/Dropdown.stories.tsx +38 -0
  623. package/src/components/primitives/Dropdown/DropdownSource.test.mjs +23 -0
  624. package/src/components/primitives/Dropdown/index.tsx +29 -0
  625. package/src/components/primitives/EmptyState/EmptyState.stories.tsx +159 -0
  626. package/src/components/primitives/EmptyState/EmptyStateSource.test.mjs +169 -0
  627. package/src/components/primitives/EmptyState/index.tsx +185 -0
  628. package/src/components/primitives/ErrorCard/ErrorCard.stories.tsx +50 -0
  629. package/src/components/primitives/ErrorCard/index.tsx +78 -0
  630. package/src/components/primitives/Field/Field.stories.tsx +208 -0
  631. package/src/components/primitives/Field/FieldSource.test.mjs +70 -0
  632. package/src/components/primitives/Field/index.tsx +297 -0
  633. package/src/components/primitives/InlineMessage/InlineMessage.stories.tsx +137 -0
  634. package/src/components/primitives/InlineMessage/InlineMessageSource.test.mjs +50 -0
  635. package/src/components/primitives/InlineMessage/index.tsx +141 -0
  636. package/src/components/primitives/Input/Input.stories.tsx +30 -0
  637. package/src/components/primitives/Input/index.tsx +12 -0
  638. package/src/components/primitives/Keycap/Keycap.stories.tsx +93 -0
  639. package/src/components/primitives/Keycap/KeycapSource.test.mjs +30 -0
  640. package/src/components/primitives/Keycap/index.tsx +67 -0
  641. package/src/components/primitives/Menu/Menu.stories.tsx +416 -0
  642. package/src/components/primitives/Menu/MenuEmptySource.test.mjs +23 -0
  643. package/src/components/primitives/Menu/MenuSource.test.mjs +207 -0
  644. package/src/components/primitives/Menu/index.tsx +922 -0
  645. package/src/components/primitives/Pagination/Pagination.stories.tsx +77 -0
  646. package/src/components/primitives/Pagination/PaginationSource.test.mjs +24 -0
  647. package/src/components/primitives/Pagination/index.tsx +85 -0
  648. package/src/components/primitives/Pagination/pagination.ts +25 -0
  649. package/src/components/primitives/Pagination/paginationModel.test.mjs +18 -0
  650. package/src/components/primitives/ProgressBar/ProgressBar.stories.tsx +103 -0
  651. package/src/components/primitives/ProgressBar/ProgressBarSource.test.mjs +44 -0
  652. package/src/components/primitives/ProgressBar/index.tsx +68 -0
  653. package/src/components/primitives/Radio/Radio.stories.tsx +84 -0
  654. package/src/components/primitives/Radio/RadioSource.test.mjs +38 -0
  655. package/src/components/primitives/Radio/index.tsx +161 -0
  656. package/src/components/primitives/SegmentedControl/SegmentedControl.stories.tsx +110 -0
  657. package/src/components/primitives/SegmentedControl/SegmentedControlSource.test.mjs +75 -0
  658. package/src/components/primitives/SegmentedControl/index.tsx +188 -0
  659. package/src/components/primitives/Select/Select.stories.tsx +158 -0
  660. package/src/components/primitives/Select/SelectSource.test.mjs +94 -0
  661. package/src/components/primitives/Select/index.tsx +364 -0
  662. package/src/components/primitives/Spinner/index.tsx +58 -0
  663. package/src/components/primitives/Switch/Switch.stories.tsx +64 -0
  664. package/src/components/primitives/Switch/SwitchSource.test.mjs +38 -0
  665. package/src/components/primitives/Switch/index.tsx +84 -0
  666. package/src/components/primitives/Tabs/Tabs.stories.tsx +230 -0
  667. package/src/components/primitives/Tabs/TabsSource.test.mjs +91 -0
  668. package/src/components/primitives/Tabs/index.tsx +183 -0
  669. package/src/components/primitives/index.ts +24 -0
  670. package/src/examples/ResourceManagementExample.tsx +119 -0
  671. package/src/examples/SiteWorkbenchExample.tsx +96 -0
  672. package/src/hooks/index.ts +7 -0
  673. package/src/hooks/useClickOutside.ts +20 -0
  674. package/src/hooks/useDragReorder.ts +29 -0
  675. package/src/hooks/useImeAwareEnter.ts +59 -0
  676. package/src/hooks/useImeAwareEnterSource.test.mjs +65 -0
  677. package/src/hooks/useKeyboard.ts +16 -0
  678. package/src/hooks/usePopover.ts +67 -0
  679. package/src/hooks/useSelectedOptionLocator.ts +33 -0
  680. package/src/hooks/useSidebarResize.ts +107 -0
  681. package/src/hooks/useTenantTheme.ts +53 -0
  682. package/src/hooks/useUnifiedTheme.ts +85 -0
  683. package/src/index.ts +6 -0
  684. package/src/lib/InjectedStyleTokenMirrorSource.test.mjs +67 -0
  685. package/src/lib/about-window.test.mjs +46 -0
  686. package/src/lib/about-window.ts +218 -0
  687. package/src/lib/appearance.test.mjs +283 -0
  688. package/src/lib/appearance.ts +46 -0
  689. package/src/lib/browser-annotation-popup.ts +151 -0
  690. package/src/lib/focusTrap.ts +51 -0
  691. package/src/lib/index.ts +5 -0
  692. package/src/lib/shortcut.test.mjs +100 -0
  693. package/src/lib/shortcut.ts +97 -0
  694. package/src/lib/twMergeOw.ts +18 -0
  695. package/src/lib/utils.ts +6 -0
  696. package/src/screens/Browser.stories.tsx +353 -0
  697. package/src/screens/Chat.stories.tsx +808 -0
  698. package/src/screens/Home.stories.tsx +253 -0
  699. package/src/screens/Login.stories.tsx +134 -0
  700. package/src/screens/McpManager.stories.tsx +159 -0
  701. package/src/screens/Onboarding.stories.tsx +155 -0
  702. package/src/screens/ScheduledTasks.stories.tsx +134 -0
  703. package/src/screens/ScreenFrameSource.test.mjs +77 -0
  704. package/src/screens/SettingsAppearance.stories.tsx +117 -0
  705. package/src/screens/SettingsMemory.stories.tsx +128 -0
  706. package/src/screens/SettingsModels.stories.tsx +228 -0
  707. package/src/screens/SettingsSections.stories.tsx +164 -0
  708. package/src/screens/Share.stories.tsx +202 -0
  709. package/src/screens/SharePage.stories.tsx +29 -0
  710. package/src/screens/Sites.stories.tsx +183 -0
  711. package/src/screens/Skills.stories.tsx +83 -0
  712. package/src/screens/Workspace.stories.tsx +191 -0
  713. package/src/screens/_home.tsx +46 -0
  714. package/src/screens/_screen.tsx +355 -0
  715. package/src/screens/_settingsNav.ts +27 -0
  716. package/src/screens/_skillsCatalog.tsx +372 -0
  717. package/src/theme/SkinDenylistSyncSource.test.mjs +124 -0
  718. package/src/theme/__tests__/skins.test.mjs +84 -0
  719. package/src/theme/core/semanticAdapter.ts +116 -0
  720. package/src/theme/core/skin.ts +605 -0
  721. package/src/theme/core/skinScoped.ts +289 -0
  722. package/src/theme/core/tenantTheme.test.mjs +127 -0
  723. package/src/theme/core/tenantTheme.ts +124 -0
  724. package/src/theme/core/types.ts +60 -0
  725. package/src/theme/core/unifiedTheme.ts +157 -0
  726. package/src/theme/index.ts +33 -0
  727. package/src/theme/providers/BrandingProvider.tsx +57 -0
  728. package/src/theme/providers/ThemeProvider.tsx +221 -0
  729. package/src/theme/skinDs2PropertyGate.test.mjs +109 -0
  730. package/src/theme/skins/index.ts +107 -0
  731. package/src/theme/utils/cssSafety.ts +92 -0
  732. package/src/theme/utils/skinManager.ts +159 -0
  733. package/src/theme/utils/themeApplier.ts +75 -0
  734. package/src/tokens/DesktopSurfacesSweep15Source.test.mjs +77 -0
  735. package/src/tokens/SharedStyleSheetsSource.test.mjs +90 -0
  736. package/src/tokens/TailwindThemeSupplySource.test.mjs +129 -0
  737. package/src/tokens/base.ts +199 -0
  738. package/src/tokens/dark.ts +288 -0
  739. package/src/tokens/index.ts +4 -0
  740. package/src/tokens/light.ts +320 -0
  741. package/src/tokens/tailwind.ts +216 -0
  742. package/src/types/desktop-pet.ts +100 -0
  743. package/src/types/file-browser.ts +51 -0
  744. package/src/types/file-tree.ts +34 -0
  745. package/src/types/index.ts +3 -0
  746. package/src/types/xspreadsheet.d.ts +4 -0
  747. package/src/utils/cn.ts +6 -0
  748. package/src/utils/glyphColor.ts +32 -0
  749. package/src/utils/index.ts +4 -0
  750. package/src/utils/localPathInline.test.mjs +45 -0
  751. package/src/utils/localPathInline.ts +49 -0
  752. package/src/utils/markdownFileRefs.test.mjs +88 -0
  753. package/src/utils/markdownFileRefs.ts +140 -0
  754. package/src/utils/office-excel.ts +452 -0
  755. package/src/utils/shiki.ts +156 -0
@@ -0,0 +1,57 @@
1
+ import assert from "node:assert/strict"
2
+ import { readFile } from "node:fs/promises"
3
+ import test from "node:test"
4
+
5
+ const source = await readFile(new URL("./index.tsx", import.meta.url), "utf8")
6
+ const stories = await readFile(new URL("./DesktopOnboardingTourView.stories.tsx", import.meta.url), "utf8")
7
+ const styles = await readFile(new URL("../../../../../styles/onboarding.css", import.meta.url), "utf8")
8
+ /** 注释里点名旧写法作文档,禁令只查代码。 */
9
+ const code = source.replace(/\/\*[\s\S]*?\*\//g, "").replace(/^[ \t]*\/\/.*$/gm, "")
10
+
11
+ /**
12
+ * R2 T5b:引导照原型(template.dc.html 2975–2999)。三处与旧自搓件的分歧逐条锁死:
13
+ * 两层遮罩(旧版只剩挖洞一层)、三钮(旧版四件:✕ + 跳过 + 上一步 + 下一步)、
14
+ * 行末 mono 计数(旧版是三点进度)。
15
+ */
16
+ test("脚部三钮:跳过 ghost / 上一步 secondary(非首步)/ 下一步 primary,末步「开始使用」", () => {
17
+ assert.match(code, /<Button variant="ghost" size="sm" onClick=\{onSkip\}>\s*跳过/)
18
+ assert.match(code, /\{!isFirst && \(\s*<Button variant="secondary" size="sm" onClick=\{onPrev\}>\s*上一步/)
19
+ assert.match(code, /<Button variant="primary" size="sm" onClick=\{isLast \? \(onDone \?\? onSkip\) : onNext\}>/)
20
+ assert.match(code, /\{isLast \? "开始使用" : "下一步"\}/)
21
+ // 旧版的右上 ✕ 与三点进度整族退役
22
+ assert.doesNotMatch(code, /onboarding-tour__close|onboarding-tour__dots|<Close \/>/)
23
+ // 全部 28 高:本件不出现别的 size 档
24
+ assert.doesNotMatch(code, /size="(md|lg)"/)
25
+ })
26
+
27
+ test("两层遮罩与高亮环全走 token:整屏 scrim + 9999px 挖洞(--ow-tour-veil)+ 2px stage-accent 环", () => {
28
+ assert.match(styles, /\.onboarding-tour \{[^}]*background: var\(--ow-scrim\);/s)
29
+ assert.match(styles, /--ow-tour-veil: color-mix\(in srgb, var\(--ow-navy\) 42%, transparent\);/)
30
+ assert.match(styles, /--ow-tour-ring: var\(--ow-stage-accent\);/)
31
+ assert.match(styles, /\.onboarding-tour__ring \{[^}]*box-shadow: 0 0 0 9999px var\(--ow-tour-veil\);/s)
32
+ assert.match(styles, /\.onboarding-tour__ring \{[^}]*border-radius: var\(--ow-radius-sm\);/s)
33
+ // 裸 rgba / 裸 hex 不得出现在样式段里
34
+ assert.doesNotMatch(styles.replace(/\/\*[\s\S]*?\*\//g, ""), /rgba\(|#[0-9a-fA-F]{3,8}\b/)
35
+ })
36
+
37
+ test("环按锚点四边各外扩 4(原型 3947),气泡摆位照 tourGeo:296 宽 · 间距 16", () => {
38
+ assert.match(code, /const RING_PAD = 4/)
39
+ assert.match(code, /const CARD_W = 296/)
40
+ assert.match(code, /const GAP = 16/)
41
+ assert.match(code, /left: anchorRect\.left - RING_PAD/)
42
+ assert.match(code, /width: anchorRect\.width \+ RING_PAD \* 2/)
43
+ })
44
+
45
+ test("计数是读数:件里出「n / 总数」,样式走 mono + tabular-nums", () => {
46
+ assert.match(code, /\{index \+ 1\} \/ \{steps\.length\}/)
47
+ assert.match(styles, /\.onboarding-tour__count \{[^}]*var\(--ow-font-mono\)/s)
48
+ assert.match(styles, /\.onboarding-tour__count \{[^}]*font-variant-numeric: tabular-nums;/s)
49
+ })
50
+
51
+ test("五步文案与锚点键照原型 TOUR(3295–3301)+ R2 锚点契约", () => {
52
+ for (const anchor of ["new-task", "projects", "plugins", "workbench", "composer"]) {
53
+ assert.ok(stories.includes(`id: "${anchor}"`), anchor)
54
+ }
55
+ assert.match(stories, /title: "从这里开始一件事"/)
56
+ assert.match(stories, /title: "这里可以边说边挂"/)
57
+ })
@@ -0,0 +1,189 @@
1
+ "use client"
2
+
3
+ import { useEffect, useLayoutEffect, useRef, useState } from "react"
4
+ import { cn } from "../../../../lib/utils"
5
+ import { Button } from "../../../primitives"
6
+
7
+ /** 一步引导:标题 + 一句正文 + 锚点键(宿主按 `[data-tour-anchor]` 量 rect)。 */
8
+ export type DesktopOnboardingTourStep = {
9
+ /** 锚点键,与 `[data-tour-anchor="…"]` 同名(契约见件头注) */
10
+ id: string
11
+ title: string
12
+ body: string
13
+ }
14
+
15
+ /** 锚点在定位基准里的矩形(真机=viewport 坐标;画框 story=画框内坐标)。 */
16
+ export type DesktopOnboardingTourRect = { left: number; top: number; width: number; height: number }
17
+
18
+ export interface DesktopOnboardingTourViewProps {
19
+ steps: DesktopOnboardingTourStep[]
20
+ /** 当前步下标(受控) */
21
+ index: number
22
+ /** 当前步锚点的矩形;量不到就传 null——气泡回落到居中,环不渲染 */
23
+ anchorRect?: DesktopOnboardingTourRect | null
24
+ onNext: () => void
25
+ onPrev?: () => void
26
+ onSkip: () => void
27
+ /** 末步「开始使用」;不传时回落 onSkip */
28
+ onDone?: () => void
29
+ /** 定位基准:真机 `fixed` 贴 viewport;Screens 画框内用 `absolute` */
30
+ position?: "fixed" | "absolute"
31
+ className?: string
32
+ }
33
+
34
+ /** 气泡宽 296(原型 2977)。 */
35
+ const CARD_W = 296
36
+ /** 气泡摆位用的高度估值(原型 tourGeo L3939 同值:296×210)。 */
37
+ const CARD_H = 210
38
+ /** 气泡与锚点、与视口边的间距(原型 tourGeo 的 G)。 */
39
+ const GAP = 16
40
+ /** 环按锚点四边各外扩这么多(原型 3947:rect ±4)。 */
41
+ const RING_PAD = 4
42
+
43
+ /**
44
+ * DesktopOnboardingTourView — 首启引导(原型 template.dc.html 2975–2999 + 文案 3295–3301)。
45
+ *
46
+ * 受控件:steps / index / anchorRect 全由调用方给,本件只负责画。
47
+ *
48
+ * 形(照原型,R2 T5b 裁决):
49
+ * - **两层遮罩**:整屏一层 `--ow-scrim`(层根自己的底)+ 环的 `0 0 0 9999px` 挖洞层
50
+ * (`--ow-tour-veil`,定义在 styles/onboarding.css,值走 color-mix(--ow-navy 42%),
51
+ * 不写裸 rgba)。两层叠出来的正是原型那张图:环内原样、环外压暗两档。
52
+ * - **环**:2px `--ow-stage-accent` + `--ow-radius-sm`,按锚点 rect 四边各外扩 4
53
+ * (§3「--ow-stage-* 仅登录/引导/分享舞台」;不借 `--ow-beacon`——那是状态极的色,
54
+ * 拿来画装饰环等于在引导屏占掉状态极配额)。
55
+ * - **气泡**:296 宽 · padding 16 · 字段槽 10 · `--ow-radius-lg` · `--ow-popover-bg`
56
+ * · 1px `--ow-border` · `--ow-shadow-modal`;标题 `--ow-fs-subtitle`/500 与计数同一行
57
+ * (计数 mono + tabular-nums,行末 `--ow-text-3`),正文 `--ow-fs-ui`/1.7 `--ow-text-2`。
58
+ * - **脚部三钮**(原型 2985–2994):跳过(ghost)· 弹簧 · 上一步(secondary 描边,
59
+ * 非首步才出)· 下一步 / 末步「开始使用」(primary 实底)。全部 28 高(Button size="sm")。
60
+ * 这一屏是覆盖层、底下那屏的行动极被遮罩挡住,主钮的实底不与它抢配额(§4)。
61
+ *
62
+ * 气泡摆位照原型 tourGeo(L3936–3952):默认贴锚点右侧 16,右边装不下翻到左侧,
63
+ * 仍装不下就夹在视口内;纵向同理;量不到锚点就居中。
64
+ *
65
+ * **锚点契约**(宿主 `useOnboardingTour` 的步表按此对齐,见交接单):
66
+ * `new-task`(新任务导航项)· `projects`(侧栏「项目」眉标)· `plugins`(插件导航项)
67
+ * · `workbench`(工作台导航项)· `composer`(输入框)。
68
+ * 当前树上侧栏给的还是旧键(skills→`discover` / files→`workspace`),改键归 T4 的
69
+ * L3-3-6;本件只认 steps 里写的 id,不关心是谁挂的。
70
+ */
71
+ export function DesktopOnboardingTourView({
72
+ steps,
73
+ index,
74
+ anchorRect,
75
+ onNext,
76
+ onPrev,
77
+ onSkip,
78
+ onDone,
79
+ position = "fixed",
80
+ className,
81
+ }: DesktopOnboardingTourViewProps): React.ReactElement | null {
82
+ const rootRef = useRef<HTMLDivElement>(null)
83
+ const [viewport, setViewport] = useState<{ width: number; height: number } | null>(null)
84
+
85
+ // 摆位要知道基准框有多大:层根是 inset:0,量它即可(fixed 时=viewport,画框里=画框)。
86
+ // 窗口尺寸变了要重量(原型 3589 在 resize 上 forceUpdate):锚点 rect 由调用方重量,
87
+ // 基准框这里自己盯——否则缩窗后气泡按旧视口摆位会落到屏外。
88
+ useLayoutEffect(() => {
89
+ const el = rootRef.current
90
+ if (!el) return
91
+ const measure = () => {
92
+ const rect = el.getBoundingClientRect()
93
+ setViewport({ width: rect.width, height: rect.height })
94
+ }
95
+ measure()
96
+ if (typeof ResizeObserver === "undefined") return
97
+ const observer = new ResizeObserver(measure)
98
+ observer.observe(el)
99
+ return () => observer.disconnect()
100
+ }, [])
101
+
102
+ // Esc = 跳过(原型 3618:关层并记已看过)。本层是 aria-modal 的 dialog,Esc 由它自己收,
103
+ // 不指望底下那屏的什么件正好聚焦。
104
+ useEffect(() => {
105
+ const onKeyDown = (event: KeyboardEvent) => {
106
+ if (event.key !== "Escape") return
107
+ event.preventDefault()
108
+ onSkip()
109
+ }
110
+ document.addEventListener("keydown", onKeyDown)
111
+ return () => document.removeEventListener("keydown", onKeyDown)
112
+ }, [onSkip])
113
+
114
+ const step = steps[index]
115
+ if (!step) return null
116
+ const isFirst = index === 0
117
+ const isLast = index === steps.length - 1
118
+ const card = cardPosition(anchorRect ?? null, viewport)
119
+
120
+ return (
121
+ <div
122
+ ref={rootRef}
123
+ className={cn("onboarding-tour", className)}
124
+ style={{ position }}
125
+ role="dialog"
126
+ aria-modal="true"
127
+ aria-label="新手引导"
128
+ >
129
+ {anchorRect && (
130
+ <div
131
+ aria-hidden="true"
132
+ className="onboarding-tour__ring"
133
+ style={{
134
+ position: "absolute",
135
+ left: anchorRect.left - RING_PAD,
136
+ top: anchorRect.top - RING_PAD,
137
+ width: anchorRect.width + RING_PAD * 2,
138
+ height: anchorRect.height + RING_PAD * 2,
139
+ }}
140
+ />
141
+ )}
142
+ <div className="onboarding-tour__card" style={{ position: "absolute", left: card.left, top: card.top }}>
143
+ <div className="onboarding-tour__head">
144
+ <span className="onboarding-tour__title">{step.title}</span>
145
+ <span className="onboarding-tour__count">
146
+ {index + 1} / {steps.length}
147
+ </span>
148
+ </div>
149
+ <p className="onboarding-tour__body">{step.body}</p>
150
+ <div className="onboarding-tour__foot">
151
+ <Button variant="ghost" size="sm" onClick={onSkip}>
152
+ 跳过
153
+ </Button>
154
+ <span className="onboarding-tour__spacer" />
155
+ {!isFirst && (
156
+ <Button variant="secondary" size="sm" onClick={onPrev}>
157
+ 上一步
158
+ </Button>
159
+ )}
160
+ <Button variant="primary" size="sm" onClick={isLast ? (onDone ?? onSkip) : onNext}>
161
+ {isLast ? "开始使用" : "下一步"}
162
+ </Button>
163
+ </div>
164
+ </div>
165
+ </div>
166
+ )
167
+ }
168
+
169
+ /**
170
+ * 气泡落点(原型 tourGeo L3936–3952 同一套算法):贴锚点右侧 GAP;右边放不下翻到左侧;
171
+ * 还放不下就夹进视口。纵向同理。锚点或基准框任一未知=居中。
172
+ */
173
+ function cardPosition(
174
+ rect: DesktopOnboardingTourRect | null,
175
+ viewport: { width: number; height: number } | null,
176
+ ): { left: number; top: number } {
177
+ if (!viewport) return { left: GAP, top: GAP }
178
+ const { width: vw, height: vh } = viewport
179
+ if (!rect) {
180
+ return { left: Math.max(GAP, (vw - CARD_W) / 2), top: Math.max(GAP, (vh - CARD_H) / 2) }
181
+ }
182
+ let left = rect.left + rect.width + GAP
183
+ if (left + CARD_W + GAP > vw) left = rect.left - CARD_W - GAP
184
+ if (left < GAP) left = Math.max(GAP, Math.min(vw - CARD_W - GAP, rect.left))
185
+ let top = rect.top
186
+ if (top + CARD_H + GAP > vh) top = rect.top - CARD_H - GAP
187
+ if (top < GAP) top = Math.max(GAP, Math.min(vh - CARD_H - GAP, rect.top))
188
+ return { left, top }
189
+ }
@@ -0,0 +1,243 @@
1
+ /**
2
+ * DesktopPet 的**本地** spritesheet fixture(故事专用,不进产物)。
3
+ *
4
+ * 为什么内联 data-uri:故事原先把 `spritesheetPath` 写成 "sprite.png",组件按 petBaseUrl
5
+ * 拼成 `/uidocs/pets/ow-pet/sprite.png`——Storybook 的 staticDirs 下并没有 uidocs 目录,
6
+ * 23 个故事一律 404、形象台全白,默认 networkidle 等待也随之超时。改成内联 data-uri 后
7
+ * 故事不发起任何网络请求(manifest 也走 prop,不 fetch pet.json),既渲得出东西,
8
+ * 也不会有「永不结束的请求」把截图挂死。
9
+ *
10
+ * 图集本身是**构造几何**不是插画:8 列 × 11 行,每格 96×104,单色中性灰(浅/暗两档都读得出)
11
+ * 画一枚圆角身体 + 头顶一颗信标点带短迹 + 两点眼(列位驱动左右看,对应 lookDirections 行)。
12
+ * 逐格微幅上下浮动,让帧动画看得出在走。真宠物形象由宿主 (apps/desktop/resources/pets) 提供。
13
+ */
14
+ export const PET_SPRITE_CELL = { width: 96, height: 104 } as const
15
+ export const PET_SPRITE_GRID = { columns: 8, rows: 11 } as const
16
+
17
+ export const PET_SPRITE_DATA_URI =
18
+ "data:image/png;base64," +
19
+ "iVBORw0KGgoAAAANSUhEUgAAAwAAAAR4CAYAAACxV7GsAAA+20lEQVR42u3d3WorORaA0VNFPW7uAnkIg+/8vp6LIeA2seNy" +
20
+ "VNLW3mtBQ/cZcByV9OlI+Zl//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgFaWWd/46Xy53v/Z1+fH4pEC+gPoDzy2Zpn8z/4c" +
21
+ "QH8A/YH/W7JMfifh8c/BuFN187UO9Af0R39msmab/E7C456Dcaf65msd6A/oj/7MYIs+mZ1m54rQ6Xy5emZjnoNx1x/90R/9" +
22
+ "0R/05xWrR4obCDcQoD/oD9Tpz+axmszPuIGY67m5AUV/0B/Qn7AHAJGAY6JlE9Yf0B/9gZAHgHcXjZ+Cp9Jmai7rD+gP+kPp" +
23
+ "A8Ari8Dkf30cjQLoj/6A/uhPPWumh+ehxlg0ngMV14F5rz+gP/ozy+dkwrCbG4h44+45YB2Y9/oD+vMqvwaUZidh0R8z7p4D" +
24
+ "1oF5rz+gP3tYqDAZN6CA/gB/4SsAMBk3oID+AAAAAAAAAAAAQFnhv2dvz68ee8T3JgL6A+gPBD4AtJj0FgOgP4D+6A/BDwBH" +
25
+ "TnwLYdwzMdZU33itCf0B/dEfB4Adg9xi8Pze4jghMt7MNN/1R39AfzyPjP1ZIg72kYPU++OZ+MLjBmKu8dUf/UF/9MezyN6f" +
26
+ "JdKA9xyUkR/bDYRxdwMRb5z1R3/QH/0x36v0Z6k4+S0CNxBuIGqPuf7oj7WgP/qjP5X7s1Sd/BaBGwg3EKKvP/qjP/qjP/pT" +
27
+ "sT9OnUUXgRsINxCirz/6oz/6oz/6U7M/i4lWbxG4gfAcRF9/fK76oz/mmv7U7c866hOPNsGqhD/aQr//+D2/D7Xyc6g67vqj" +
28
+ "P9aB/ljv+qM/HQ8At59Y1Ml2+74yBinqKb/aZhDlOVQad/0x760D/dEf/dGfAQcA3EC4gXADAfqjP/qD9T7+/XQ5AMxw+s1+" +
29
+ "CnYDYfOtugnrj2egP/pj7uuP/gw4AABuIADrXX8gBgeAAtxAeAaVxx5zX3/0B/3Rn84HgJkGX4hA/PUH0B/9yc5XAMAmIP6g" +
30
+ "P/oDDgCIv00A0B9PEfQnY38cAAAAoJBt5lPZjKc7apn1BuL7fZ/Ol2ultaVNmM/6o09UsI6cwD/9d+/XAdAmQJ9wAOg0gd+d" +
31
+ "gK1eR1Au1+9/IrwORNlctUmfQJ/I3Cc/AyAobhMAfQIo1CcHAJPXbYLbBNAntAkK9anrAeDRD5vs/SGUVq8DbhPQJtAmfaKa" +
32
+ "dfREfnfitXodcJuANoE26ROVbBEm8ujXqRiSn+L7zm1Ci9eBqJusNukT6BM9+9TrcOxnAITEbQKgTwCF+rR5lCax24TctwlG" +
33
+ "GX1Cm0CfbvkKALhNANAmKMRXACDgRjv6dQC0CfLyFQAAAHAAAAAAHAAAAAAHAAAAwAEAAABwAAAAABwAAAAABwAAAMABAAAA" +
34
+ "cAAAAAAcAAAAAAcAAABwAAAAABwA3vX1+bF8//vpfLnOMCi37/P2/QNz0R9Af/SHAQcAAADAAYBO3EAA+qM/oD/60/0AMNND" +
35
+ "EH+wCegPoD9k5isAIP42AdAf/QEHgJohyhoeNxD4i5D+GHv9wRrQH/3pfgB49olGG3ggN/0BrHf9qazrAeD+RBNl0t2/j4w3" +
36
+ "P24gjH3lZ6A/1oD+6I/+6I/+DDoARFwEFSa/GwjQH+tdf9Af/dGfYQeASIug2uR3A+EGItoNhP7oj/7oj/6Y9/rT/zmsVR9G" +
37
+ "1ZOvGwg3EDO8H/0x7p6D/lgH5r3+HGeJuPCPHITeH2+WDWDEGFSMUMTPuepmoD/6oz/6oz/6U7U/S9RF0HJQjn59i0D0Z/3c" +
38
+ "Kz8H/dEf/dEf/dGfqv1ZZlkIrfkdz24g3EDYfPVHf/RHf/THmFfsz1JtIZj4biBswjZf/dEf/dEf/aFyf5YKi8GkdwPhBiLm" +
39
+ "DYT+oD/640noj/44AOAGwngXuoEA/dEf0B8HABIuBpEfHx7PBP1Bf0B/HACg4EZs4wX0B7AYIflmbNMF9AcAAAAAAAAAAAAA" +
40
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBdFkMA8zmdL9f7P/v6/LCeAf0B" +
41
+ "frUaAph/83325wD6A9ya9sTuBgKb78+sA/0B/dEfeGbNMvlfjRNk3nytA/0B/dEf+M2WLUKn8+XqJDzmORj39pupMdUf9Ed/" +
42
+ "0B/9aW3NNPmdhN1AgP7oD+gP+vPcFn0yO83OFSE3EGTaTM1l/QH9IWN/No+U1tGyCQs76I/+gP44ADDpZLZRxNq0/RYO9Af9" +
43
+ "Af2Z9gAgEtB+E7au9Af0R3/gN2vGRWNxUXHzMO/1B/RHf4wWr5hyoriBiDfungPWgXmvP6A/+jPHc5jy/wjMDUSscfccsA7M" +
44
+ "e/0B/dGfeZ6DCUPTk7AIAfoD6E9sq8dJq5OwzRfQH0B/AAAAAAAAAAAADuV7liCwPb967BHfmwjoD+AAAMk3XZsxoD/AtAcA" +
45
+ "NxDYeG3E+gP645kYa5IfANxAIPLt5qvfm64/oD/6Y7wJewBwA5EzRsZ63/geOV69P56N15rQH/3RH/3RHwcANxBuIIz3g3Hu" +
46
+ "OTYjP/ZM811/9Ed/9Ed/PI+M/VkiDrYbCDcQNl+bsP54FvqjP/qjP/qT8ADgBsINhOiPHYPK60B/9Ed/9Ed/9Kdqf0ovfIvA" +
47
+ "DYQ5V3Md6I/+6I/+6I/+VO7PUn3Bu4FwA+FzrvU89Mdz0B/98bnqT/X+rNUn3P3H7/l9YJUjVHXco4a2Svj1x3PQH/3RH/3R" +
48
+ "n84HgKinzWqLIMpzqDTut59b1M3u9n1lfBb64znoj/7oj/7oz4ADgBsIk98NBNa7/ugP+uP96M/Y/qwjBt4NhMlfaROeYe5n" +
49
+ "XwP6oz/6oz+egf7oz4ADAG4g3EAA+gNY7+PfT5cDgBuIWKdfNxBUoj+egf5g7uuP/gw4AID4z3PL6C9CoD/6A7k5ANgExB/Q" +
50
+ "H/0B/SnUn9Xg2wRA/PUH0B/9qcNXAAAAwAGALNxAzPOcvv+J8DqgP25AtQn9ydsfBwAIFKm/LPpWrwOgTZDbNvOpbMbTHbyy" +
51
+ "EZ7Ol+ueOd3qdTwPbQJt0ifyW0dOYDcKQNS/8GgToE84ABx8ozDidQTF93aCNukT6BPV+uRnAATFbcJAj778uvfLsq1eB/QJ" +
52
+ "bYL8fXIAMHndJgTbaN/dGFu9DugT2gS5+9T1h4C/Pj+Wnz65d24UWrwORN1oR79OxfHXJtAmfaKKdcREdqMARP+LjjYB+kRW" +
53
+ "W4SJ7EbBbQJE3GS1SZ9An+jZp17fBuRnAITEbQKgTwCF+rR5lCax2wRAnwDq9MlXAAAAoBAHAAAAcAAAAAAcAAAAAAcAAADA" +
54
+ "AQAAAHAAAAAAHAAAAAAHAAAAwAEAAABwAAAAABwAAAAABwAAAHAAAJr5+vxYvv/9dL5cZ3jPt+/z9v0D+qM/4AAAAAA4APyX" +
55
+ "GwhgFP0B9Ed/GHAAAJvAPJuA+IP+6A84ACD+NgFAfwD9SdSf1UMQf6yBzHNff9Af/TH2+sOAAwDwOLTeD6A/QMoDgBuIcdxA" +
56
+ "xHsOkZ7F/fvIePOjP8Zef/THGtAf/RlwAHADAfE24Qqbr/6A/ljv+sPAA4AbCKfgijcQUddBtc1Xf/RHf/RHf/RHfwYcANxA" +
57
+ "OPG7gYixDqrOe/2x3vVHf/RHf7yff/+WyhOv4uSP+DlXjdCjhX/k59/741kH5r3+6I/+6I9xj/eelqqfuOjH+NwrP4dXTv8t" +
58
+ "xuPo17cOzHv90R/90R/jPtd7CXf6cQPhBsKGcDy/41l/9Ed/9Ed/9Kduf5aoi8ANhBsIz8XGqz/6oz/6oz/6oz9JDwBuINxA" +
59
+ "eBLHrQnjqz/6oz/6oz+eif6EPQC4gXADAfpjvPUH60F/9KfgAcANhBsI0B9jrT9YE+a6/hQ9AJBrIYgRoD+A/jgAkHwx2HQB" +
60
+ "/QH0BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJrIYAt5x" +
61
+ "Ol+u93/29flhPgH6A+hPcKtHSYvJ/+zPAfQH0J843JjQZPLPfhLO8ByMO/pjHegP6M8rfAWAppN/1pNwhudg3NEf60B/QH9e" +
62
+ "sWV6GG4g2k9mYzrXczudL1fPTH/0B/3RH/TnmTXTw3MDgWhZB/oD+qM/8NyWZfLf/u9OwmTZTM1l/QH9QX8ofQDYcwNhEQg7" +
63
+ "6I/+gP6gP4EOAG4g5lw0fgsHlTZTc1l/QH/I2J/NY6XlIhCs18fRKID+6A/ozwh+DSjNNg+bSoxN23NAf9Af0J9npnrDe37K" +
64
+ "XYTIyg2o/oD+GHfPgb+Y6isAbiDADaj+gP4Yd/3hb6acKG4gAP0B9Ed/eM+UPwPgBgLQH0B/9AcAAAAAAAAAAKAg3zPGU3t+" +
65
+ "9dgjvjcR0B9AfxwASD7pbcaA/gD6E7M/YkiXiW8jHvdMjDX6Y03oD+iPAwAvT/wWE9XvLY4TIuON/lgP+gP6s8z8cETnmPE9" +
66
+ "crx6fzwbrzWhP/qjP/qjP+jPBAcANxBjxrnn2Iz82G4gjLv+6I/noj/6Y5wr92epMvEthHgT0CbsBkJ/jLX+6I/66I/+9H8P" +
67
+ "S/SJ7wYi98ZXeRN2AxF/49Uf/fEcjLv+mPcZ38sScfK7gagV3oqbgRuIuJuv/uiP52Dc9ce8z/6elqqfuOjH+pwrPQ83EJ6D" +
68
+ "/uiPz1V/9MdcG/ne1qoP4/7j9fz+uwiiLfgq4Y8WoarrQH+sd/3RH/3Rn8rvZ604+SsugtvPLepmd/u+Mj6LqDcQ1TYD/dEf" +
69
+ "/dEf/dGf6v1Zq05+J2HcQMR9P/oD+qM/+kOSA4AbCKffiKdgzyD32OuPua8/+qM/+qM/Aw8AbiAA611/QH+8H8bqdgBwA0FV" +
70
+ "biA8A/3B3Ncf/aHkAQDhESLQH/0B9Gd8f1YPQfzBJqA/gP7oTx2+AgDibxMA/dEfcAAAAAAcAN7gBiKu0/ly/f4nwuuA/rgB" +
71
+ "1Sf0R3/0KcEBgPhh+stCb/U6APoE6JMDAJ0m77uTr9Xr4LYT9EmbQJ/6rQ8HAHCbAKBNUMg2Oip/+b64Gb+/Dl69Bdgzp1u9" +
72
+ "juehTaBN+kR+68gJ7EZhjEcLfm8IWr0ORPwLjzbpE+gTWfu0jpzA705A39vZfhK/O+lavQ5E2ly1SZ9An8jcp82jNImjvE7V" +
73
+ "Z/BTfN+5TWjxOqBPaBPk75MfAga3CQDaBIV0/QqAGwXIe5sw+/hrE2iTPlHFOmIiu1EAov9FR5sAfSKrLcJEdqMARNxktQnQ" +
74
+ "JzLyMwAAAOAAAAAAOAAAAAAOAAAAgAMAAADgAAAAADgAAAAADgAAAIADAAAA4AAAAAA4AAAAAA4AAADgAAAAADgAMKevz4/l" +
75
+ "+99P58t1hvd8+z5v3z+gP/oD6I8DAAAA4AAAMbiBAPRHf8ABAJuA+IP+6A+gP8P6sxp8mwCIv/4A+qM/dfgKgBAJj7EXf/RH" +
76
+ "fzwD9KfQ3HcAKCraIpjldgTQH0B/Zn8/XQ4AbiDinYIjPYv795Hx5scNhLHXH/2xBvRHf/QnSn98BaCYaIugwubrBgL0x3rX" +
77
+ "H/QnUn/WEQPvBsIiqLj5uoGIMfb6Yx3oj/7oj/5U788aZdG7gai1CKrevLmBsN71R3/0R3+8H/0ZPe8XC75uhB5N/CM//94f" +
78
+ "b5ZxHzEGFee9/uiP/uiPta4/+jPgABBtwlWe/K+cfluMx9GvbzMw7/VHf/RHf4y756A/wQ8AbiDmWwit+R3PbiCqb8L6oz/6" +
79
+ "oz/6oz/lDgBuIGouBOPsBsImrD/6oz/6oz/6U/gA4AaixmIwvm4gZhpz/dEfY60/+kP2/izRB9kNBKJj49Uf0B/90R+SHQDc" +
80
+ "QMBxa8Jc1x/QH/3xTAh7AOixEEx8QH8A/cEBIPliMOkB/QH0BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
81
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4EXLrG/8dL5c7//s6/Nj8UgB/QH0Bx5bs0z+Z38OoD+A/sD/LVkmv5Pw+Odg" +
82
+ "3Km6+VoH+gP6oz8zWbNNfifhcc/BuFN987UO9Af0R39msEWfzE6zc0XodL5cPbMxz8G464/+6I/+6A/684rVI8UNhBsI0B/0" +
83
+ "B+r0Z/NYTeZn3EDM9dzcgKI/6A/oT9gDgEjAMdGyCesP6I/+QMgDwLuLxk/BU2kzNZf1B/QH/aH0AeCVRWDyvz6ORgH0R39A" +
84
+ "f/SnnjXTw/NQYywaz4GK68C81x/QH/2Z5XMyYdjNDUS8cfccsA7Me/0B/XmVXwNKs5Ow6I8Zd88B68C81x/Qnz0sVJiMG1BA" +
85
+ "f4C/8BUAmIwbUEB/AAAAAAAAAAAAoKzw37O351ePPeJ7EwH9AfQHAh8AWkx6iwHQH0B/9IfgB4AjJ76FMO6ZGGuqb7zWhP6A" +
86
+ "/uiPA8COQW4xeH5vcZwQGW9mmu/6oz+gP55Hxv4sEQf7yEHq/fFMfOFxAzHX+OqP/qA/+uNZZO/PEmnAew7KyI/tBsK4u4GI" +
87
+ "N876oz/oj/6Y71X6s1Sc/BaBGwg3ELXHXH/0x1rQH/3Rn8r9WapOfovADYQbCNHXH/3RH/3RH/2p2B+nzqKLwA2EGwjR1x/9" +
88
+ "0R/90R/9qdmfxUSrtwjcQHgOoq8/Plf90R9zTX/q9mcd9YlHm2BVwh9tod9//J7fh1r5OVQdd/3RH+tAf6x3/dGfjgeA208s" +
89
+ "6mS7fV8ZgxT1lF9tM4jyHCqNu/6Y99aB/uiP/ujPgAMAbiDcQLiBAP3RH/3Beh//frocAGY4/WY/BbuBsPlW3YT1xzPQH/0x" +
90
+ "9/VHfwYcAAA3EID1rj8QgwNAAW4gPIPKY4+5rz/6g/7oT+cDwEyDL0Qg/voD6I/+ZOcrAGATEH/QH/0BBwDE3yYA6I+nCPqT" +
91
+ "sT8OAAAAUMg286lsxtMdtcx6A/H9vk/ny7XS2tImzGf90ScqWEdO4J/+u/frAGgToE84AHSawO9OwFavIyiX6/c/EV4Homyu" +
92
+ "2qRPoE9k7pOfARAUtwmAPgEU6pMDgMnrNsFtAugT2gSF+tT1APDoh032/hBKq9cBtwloE2iTPlHNOnoivzvxWr0OuE1Am0Cb" +
93
+ "9IlKtggTefTrVAzJT/F95zahxetA1E1Wm/QJ9Imefep1OPYzAELiNgHQJ4BCfdo8SpPYbULu2wSjjD6hTaBPt3wFANwmAGgT" +
94
+ "FOIrABBwox39OgDaBHn5CgAAADgAAAAADgAAAIADAAAA4AAAAAA4AAAAAA4AAACAAwAAAOAAAAAAOAAAAAAOAAAAgAMAAAA4" +
95
+ "AAAAAA4A7/r6/Fi+//10vlxnGJTb93n7/oG56A+gP/rDgAMAAADgAEAnbiAA/dEf0B/96X4AmOkhiD/YBPQH0B8y8xUAEH+b" +
96
+ "AOiP/oADQM0QZQ2PGwj8RUh/jL3+YA3oj/50PwA8+0SjDTyQm/4A1rv+VNb1AHB/ooky6e7fR8abHzcQxr7yM9Afa0B/9Ed/" +
97
+ "9Ed/Bh0AIi6CCpPfDQToj/WuP+iP/ujPsANApEVQbfK7gXADEe0GQn/0R3/0R3/Me/3p/xzWqg+j6snXDYQbiBnej/4Yd89B" +
98
+ "f6wD815/jrNEXPhHDkLvjzfLBjBiDCpGKOLnXHUz0B/90R/90R/9qdqfJeoiaDkoR7++RSD6s37ulZ+D/uiP/uiP/uhP1f4s" +
99
+ "syyE1vyOZzcQbiBsvvqjP/qjP/pjzCv2Z6m2EEx8NxA2YZuv/uiP/uiP/lC5P0uFxWDSu4FwAxHzBkJ/0B/98ST0R38cAHAD" +
100
+ "YbwL3UCA/ugP6I8DAAkXg8iPD49ngv6gP6A/DgBQcCO28QL6A1iMkHwztukC+gMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
101
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAuiyGA+ZzOl+v9n319fljPgP4Av1oNAcy/+T77cwD9AW5N" +
102
+ "e2J3A4HN92fWgf6A/ugPPLNmmfyvxgkyb77Wgf6A/ugP/GbLFqHT+XJ1Eh7zHIx7+83UmOoP+qM/6I/+tLZmmvxOwm4gQH/0" +
103
+ "B/QH/Xluiz6ZnWbnipAbCDJtpuay/oD+kLE/m0dK62jZhIUd9Ed/QH8cAJh0MtsoYm3afgsH+oP+gP5MewAQCWi/CVtX+gP6" +
104
+ "oz/wmzXjorG4qLh5mPf6A/qjP0aLV0w5UdxAxBt3zwHrwLzXH9Af/ZnjOUz5fwTmBiLWuHsOWAfmvf6A/ujPPM/BhKHpSViE" +
105
+ "AP0B9Ce21eOk1UnY5gvoD6A/AAAAAAAAAAAAh/I9SxDYnl899ojvTQT0B3AAgOSbrs0Y0B9g2gOAGwhsvDZi/QH98UyMNckP" +
106
+ "AG4gEPl289XvTdcf0B/9Md6EPQC4gcgZI2O9b3yPHK/eH8/Ga03oj/7oj/7ojwOAGwg3EMb7wTj3HJuRH3um+a4/+qM/+qM/" +
107
+ "nkfG/iwRB9sNhBsIm69NWH88C/3RH/3RH/1JeABwA+EGQvTHjkHldaA/+qM/+qM/+lO1P6UXvkXgBsKcq7kO9Ed/9Ed/9Ed/" +
108
+ "Kvdnqb7g3UC4gfA513oe+uM56I/++Fz1p3p/1uoT7v7j9/w+sMoRqjruUUNbJfz64znoj/7oj/7oT+cDQNTTZrVFEOU5VBr3" +
109
+ "288t6mZ3+74yPgv98Rz0R3/0R3/0Z8ABwA2Eye8GAutdf/QH/fF+9Gdsf9YRA+8GwuSvtAnPMPezrwH90R/90R/PQH/0Z8AB" +
110
+ "ADcQbiAA/QGs9/Hvp8sBwA1ErNOvGwgq0R/PQH8w9/VHfwYcAED857ll9Bch0B/9gdwcAGwC4g/oj/6A/hTqz2rwbQIg/voD" +
111
+ "6I/+1OErAAAA4ABAFm4g5nlO3/9EeB3QHzeg2oT+5O2PAwAEitRfFn2r1wHQJshtm/lUNuPpDl7ZCE/ny3XPnG71Op6HNoE2" +
112
+ "6RP5rSMnsBsFIOpfeLQJ0CccAA6+URjxOoLieztBm/QJ9IlqffIzAILiNmGgR19+3ftl2VavA/qENkH+PjkAmLxuE4JttO9u" +
113
+ "jK1eB/QJbYLcfer6Q8Bfnx/LT5/cOzcKLV4Hom60o1+n4vhrE2iTPlHFOmIiu1EAov9FR5sAfSKrLcJEdqPgNgEibrLapE+g" +
114
+ "T/TsU69vA/IzAELiNgHQJ4BCfdo8SpPYbQKgTwB1+uQrAAAAUIgDAAAAOAAAAAAOAAAAgAMAAADgAAAAADgAAAAADgAAAIAD" +
115
+ "AAAA4AAAAAA4AAAAAA4AAACAAwAAADgAAM18fX4s3/9+Ol+uM7zn2/d5+/4B/dEfcAAAAAAcAP7LDQQwiv4A+qM/DDgAgE1g" +
116
+ "nk1A/EF/9AccABB/mwCgP4D+JOrP6iGIP9ZA5rmvP+iP/hh7/WHAAQB4HFrvB9AfIOUBwA3EOG4g4j2HSM/i/n1kvPnRH2Ov" +
117
+ "P/pjDeiP/gw4ALiBgHibcIXNV39Af6x3/WHgAcANhFNwxRuIqOug2uarP/qjP/qjP/qjPwMOAG4gnPjdQMRYB1Xnvf5Y7/qj" +
118
+ "P/qjP97Pv39L5YlXcfJH/JyrRujRwj/y8+/98awD815/9Ed/9Me4x3tPS9VPXPRjfO6Vn8Mrp/8W43H061sH5r3+6I/+6I9x" +
119
+ "n+u9hDv9uIFwA2FDOJ7f8aw/+qM/+qM/+lO3P0vUReAGwg2E52Lj1R/90R/90R/90Z+kBwA3EG4gPInj1oTx1R/90R/90R/P" +
120
+ "RH/CHgDcQLiBAP0x3vqD9aA/+lPwAOAGwg0E6I+x1h+sCXNdf4oeAMi1EMQI0B9AfxwASL4YbLqA/gD6AwAAAAAAAAAAAAAA" +
121
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE1kMAe84nS/X+z/7+vwwnwD9AfQn" +
122
+ "uNWjpMXkf/bnAPoD6E8cbkxoMvlnPwlneA7GHf2xDvQH9OcVvgJA08k/60k4w3Mw7uiPdaA/oD+v2DI9DDcQ7SezMZ3ruZ3O" +
123
+ "l6tnpj/6g/7oD/rzzJrp4bmBQLSsA/0B/dEfeG7LMvlv/3cnYbJspuay/oD+oD+UPgDsuYGwCIQd9Ed/QH/Qn0AHADcQcy4a" +
124
+ "v4WDSpupuaw/oD9k7M/msdJyEQjW6+NoFEB/9Af0ZwS/BpRmm4dNJcam7TmgP+gP6M8zU73hPT/lLkJk5QZUf0B/jLvnwF9M" +
125
+ "9RUANxDgBlR/QH+Mu/7wN1NOFDcQgP4A+qM/vGfKnwFwAwHoD6A/+gMAAAAAAAAAAFCQ7xnjqT2/euwR35sI6A+gPw4AJJ/0" +
126
+ "NmNAfwD9idkfMaTLxLcRj3smxhr9sSb0B/THAYCXJ36Lier3FscJkfFGf6wH/QH9WWZ+OKJzzPgeOV69P56N15rQH/3RH/3R" +
127
+ "H/RnggOAG4gx49xzbEZ+bDcQxl1/9Mdz0R/9Mc6V+7NUmfgWQrwJaBN2A6E/xlp/9Ed99Ed/+r+HJfrEdwORe+OrvAm7gYi/" +
128
+ "8eqP/ngOxl1/zPuM72WJOPndQNQKb8XNwA1E3M1Xf/THczDu+mPeZ39PS9VPXPRjfc6VnocbCM9Bf/TH56o/+mOujXxva9WH" +
129
+ "cf/xen7/XQTRFnyV8EeLUNV1oD/Wu/7oj/7oT+X3s1ac/BUXwe3nFnWzu31fGZ9F1BuIapuB/uiP/uiP/uhP9f6sVSe/kzBu" +
130
+ "IOK+H/0B/dEf/SHJAcANhNNvxFOwZ5B77PXH3Ncf/dEf/dGfgQcANxCA9a4/oD/eD2N1OwC4gaAqNxCegf5g7uuP/lDyAIDw" +
131
+ "CBHoj/4A+jO+P6uHIP5gE9AfQH/0pw5fAQDxtwmA/ugPOAAAAAAOAG9wAxHX6Xy5fv8T4XVAf9yA6hP6oz/6lOAAQPww/WWh" +
132
+ "t3odAH0C9MkBgE6T993J1+p1cNsJ+qRNoE/91ocDALhNANAmKGQbHZW/fF/cjN9fB6/eAuyZ061ex/PQJtAmfSK/deQEdqMw" +
133
+ "xqMFvzcErV4HIv6FR5v0CfSJrH1aR07gdyeg7+1sP4nfnXStXgciba7apE+gT2Tu0+ZRmsRRXqfqM/gpvu/cJrR4HdAntAny" +
134
+ "98kPAYPbBABtgkK6fgXAjQLkvU2Yffy1CbRJn6hiHTGR3SgA0f+io02APpHVFmEiu1EAIm6y2gToExn5GQAAAHAAAAAAHAAA" +
135
+ "AAAHAAAAwAEAAABwAAAAABwAAAAABwAAAMABAAAAcAAAAAAcAAAAAAcAAABwAAAAABwAmNPX58fy/e+n8+U6w3u+fZ+37x/Q" +
136
+ "H/0B9McBAAAAcACAGNxAAPqjP+AAgE1A/EF/9AfQn2H9WQ2+TQDEX38A/dGfOnwFQIiEx9iLP/qjP54B+lNo7jsAFBVtEcxy" +
137
+ "OwLoD6A/s7+fLgcANxDxTsGRnsX9+8h48+MGwtjrj/5YA/qjP/oTpT++AlBMtEVQYfN1AwH6Y73rD/oTqT/riIF3A2ERVNx8" +
138
+ "3UDEGHv9sQ70R3/0R3+q92eNsujdQNRaBFVv3txAWO/6oz/6oz/ej/6MnveLBV83Qo8m/pGff++PN8u4jxiDivNef/RHf/TH" +
139
+ "Wtcf/RlwAIg24SpP/ldOvy3G4+jXtxmY9/qjP/qjP8bdc9Cf4AcANxDzLYTW/I5nNxDVN2H90R/90R/90Z9yBwA3EDUXgnF2" +
140
+ "A2ET1h/90R/90R/9KXwAcANRYzEYXzcQM425/uiPsdYf/SF7f5bog+wGAtGx8eoP6I/+6A/JDgBuIOC4NWGu6w/oj/54JoQ9" +
141
+ "APRYCCY+oD+A/uAAkHwxmPSA/gD6AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
142
+ "AAAAAAAAAAAAAAAA8KJl1jd+Ol+u93/29fmxeKSA/gD6A4+tWSb/sz8H0B9Af+D/liyT30l4/HMw7lTdfK0D/QH90Z+ZrNkm" +
143
+ "v5PwuOdg3Km++VoH+gP6oz8z2KJPZqfZuSJ0Ol+untmY52Dc9Ud/9Ed/9Af9ecXqkeIGwg0E6A/6A3X6s3msJvMzbiDmem5u" +
144
+ "QNEf9Af0J+wBQCTgmGjZhPUH9Ed/IOQB4N1F46fgqbSZmsv6A/qD/lD6APDKIjD5Xx9HowD6oz+gP/pTz5rp4XmoMRaN50DF" +
145
+ "dWDe6w/oj/7M8jmZMOzmBiLeuHsOWAfmvf6A/rzKrwGl2UlY9MeMu+eAdWDe6w/ozx4WKkzGDSigP8Bf+AoATMYNKKA/AAAA" +
146
+ "AAAAAAAAUFb479nb86vHHvG9iYD+APoDgQ8ALSa9xQDoD6A/+kPwA8CRE99CGPdMjDXVN15rQn9Af/THAWDHILcYPL+3OE6I" +
147
+ "jDczzXf90R/QH88jY3+WiIN95CD1/ngmvvC4gZhrfPVHf9Af/fEssvdniTTgPQdl5Md2A2Hc3UDEG2f90R/0R3/M9yr9WSpO" +
148
+ "fovADYQbiNpjrj/6Yy3oj/7oT+X+LFUnv0XgBsINhOjrj/7oj/7oj/5U7I9TZ9FF4AbCDYTo64/+6I/+6I/+1OzPYqLVWwRu" +
149
+ "IDwH0dcfn6v+6I+5pj91+7OO+sSjTbAq4Y+20O8/fs/vQ638HKqOu/7oj3WgP9a7/uhPxwPA7ScWdbLdvq+MQYp6yq+2GUR5" +
150
+ "DpXGXX/Me+tAf/RHf/RnwAEANxBuINxAgP7oj/5gvY9/P10OADOcfrOfgt1A2HyrbsL64xnoj/6Y+/qjPwMOAIAbCMB61x+I" +
151
+ "wQGgADcQnkHlscfc1x/9QX/0p/MBYKbBFyIQf/0B9Ed/svMVALAJiD/oj/6AAwDibxMA9MdTBP3J2B8HAAAAKGSb+VQ24+mO" +
152
+ "Wma9gfh+36fz5VppbWkT5rP+6BMVrCMn8E//3ft1ALQJ0CccADpN4HcnYKvXEZTL9fufCK8DUTZXbdIn0Ccy98nPAAiK2wRA" +
153
+ "nwAK9ckBwOR1m+A2AfQJbYJCfep6AHj0wyZ7fwil1euA2wS0CbRJn6hmHT2R3514rV4H3CagTaBN+kQlW4SJPPp1Kobkp/i+" +
154
+ "c5vQ4nUg6iarTfoE+kTPPvU6HPsZACFxmwDoE0ChPm0epUnsNiH3bYJRRp/QJtCnW74CAG4TALQJCvEVAAi40Y5+HQBtgrx8" +
155
+ "BQAAABwAAAAABwAAAMABAAAAcAAAAAAcAAAAAAcAAADAAQAAAHAAAAAAHAAAAAAHAAAAwAEAAAAcAAAAAAeAd319fizf/346" +
156
+ "X64zDMrt+7x9/8Bc9AfQH/1hwAEAAABwAKATNxCA/ugP6I/+dD8AzPQQxB9sAvoD6A+Z+QoAiL9NAPRHf8ABoGaIsobHDQT+" +
157
+ "IqQ/xl5/sAb0R3+6HwCefaLRBh7ITX8A611/Kut6ALg/0USZdPfvI+PNjxsIY1/5GeiPNaA/+qM/+qM/gw4AERdBhcnvBgL0" +
158
+ "x3rXH/RHf/Rn2AEg0iKoNvndQLiBiHYDoT/6oz/6oz/mvf70fw5r1YdR9eTrBsINxAzvR3+Mu+egP9aBea8/x1kiLvwjB6H3" +
159
+ "x5tlAxgxBhUjFPFzrroZ6I/+6I/+6I/+VO3PEnURtByUo1/fIhD9WT/3ys9Bf/RHf/RHf/Snan+WWRZCa37HsxsINxA2X/3R" +
160
+ "H/3RH/0x5hX7s1RbCCa+GwibsM1Xf/RHf/RHf6jcn6XCYjDp3UC4gYh5A6E/6I/+eBL6oz8OALiBMN6FbiBAf/QH9McBgISL" +
161
+ "QeTHh8czQX/QH9AfBwAouBHbeAH9ASxGSL4Z23QB/QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
162
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGCXxRDAfE7ny/X+z74+P6xnQH+AX62GAObffJ/9OYD+ALemPbG7gcDm+zPrQH9Af/QH" +
163
+ "nlmzTP5X4wSZN1/rQH9Af/QHfrNli9DpfLk6CY95Dsa9/WZqTPUH/dEf9Ed/WlszTX4nYTcQoD/6A/qD/jy3RZ/MTrNzRcgN" +
164
+ "BJk2U3NZf0B/yNifzSOldbRswsIO+qM/oD8OAEw6mW0UsTZtv4UD/UF/QH+mPQCIBLTfhK0r/QH90R/4zZpx0VhcVNw8zHv9" +
165
+ "Af3RH6PFK6acKG4g4o2754B1YN7rD+iP/szxHKb8PwJzAxFr3D0HrAPzXn9Af/RnnudgwtD0JCxCgP4A+hPb6nHS6iRs8wX0" +
166
+ "B9AfAAAAAAAAAACAQ/meJQhsz68ee8T3JgL6AzgAQPJN12YM6A8w7QHADQQ2Xhux/oD+eCbGmuQHADcQiHy7+er3pusP6I/+" +
167
+ "GG/CHgDcQOSMkbHeN75Hjlfvj2fjtSb0R3/0R3/0xwHADYQbCOP9YJx7js3Ijz3TfNcf/dEf/dEfzyNjf5aIg+0Gwg2Ezdcm" +
168
+ "rD+ehf7oj/7oj/4kPAC4gXADIfpjx6DyOtAf/dEf/dEf/anan9IL3yJwA2HO1VwH+qM/+qM/+qM/lfuzVF/wbiDcQPicaz0P" +
169
+ "/fEc9Ed/fK76U70/a/UJd//xe34fWOUIVR33qKGtEn798Rz0R3/0R3/0p/MBIOpps9oiiPIcKo377ecWdbO7fV8Zn4X+eA76" +
170
+ "oz/6oz/6M+AA4AbC5HcDgfWuP/qD/ng/+jO2P+uIgXcDYfJX2oRnmPvZ14D+6I/+6I9noD/6M+AAgBsINxCA/gDW+/j30+UA" +
171
+ "4AYi1unXDQSV6I9noD+Y+/qjPwMOACD+89wy+osQ6I/+QG4OADYB8Qf0R39Afwr1ZzX4NgEQf/0B9Ed/6vAVAAAAcAAgCzcQ" +
172
+ "8zyn738ivA7ojxtQbUJ/8vbHAQACReovi77V6wBoE+S2zXwqm/F0B69shKfz5bpnTrd6Hc9Dm0Cb9In81pET2I0CEPUvPNoE" +
173
+ "6BMOAAffKIx4HUHxvZ2gTfoE+kS1PvkZAEFxmzDQoy+/7v2ybKvXAX1CmyB/nxwATF63CcE22nc3xlavA/qENkHuPnX9IeCv" +
174
+ "z4/lp0/unRuFFq8DUTfa0a9Tcfy1CbRJn6hiHTGR3SgA0f+io02APpHVFmEiu1FwmwARN1lt0ifQJ3r2qde3AfkZACFxmwDo" +
175
+ "E0ChPm0epUnsNgHQJ4A6ffIVAAAAKMQBAAAAHAAAAAAHAAAAwAEAAABwAAAAABwAAAAABwAAAMABAAAAcAAAAAAcAAAAAAcA" +
176
+ "AADAAQAAABwAgGa+Pj+W738/nS/XGd7z7fu8ff+A/ugPOAAAAAAOAP/lBgIYRX8A/dEfBhwAwCYwzyYg/qA/+gMOAIi/TQDQ" +
177
+ "H0B/EvVn9RDEH2sg89zXH/RHf4y9/jDgAAA8Dq33A+gPkPIA4AZiHDcQ8Z5DpGdx/z4y3vzoj7HXH/2xBvRHfwYcANxAQLxN" +
178
+ "uMLmqz+gP9a7/jDwAOAGwim44g1E1HVQbfPVH/3RH/3RH/3RnwEHADcQTvxuIGKsg6rzXn+sd/3RH/3RH+/n37+l8sSrOPkj" +
179
+ "fs5VI/Ro4R/5+ff+eNaBea8/+qM/+mPc472npeonLvoxPvfKz+GV03+L8Tj69a0D815/9Ed/9Me4z/Vewp1+3EC4gbAhHM/v" +
180
+ "eNYf/dEf/dEf/anbnyXqInAD4QbCc7Hx6o/+6I/+6I/+6E/SA4AbCDcQnsRxa8L46o/+6I/+6I9noj9hDwBuINxAgP4Yb/3B" +
181
+ "etAf/Sl4AHAD4QYC9MdY6w/WhLmuP0UPAORaCGIE6A+gPw4AJF8MNl1AfwD9AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
182
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAiSyGgHeczpfr/Z99fX6YT4D+APoT3OpR0mLyP/tzAP0B9CcO" +
183
+ "NyY0mfyzn4QzPAfjjv5YB/oD+vMKXwGg6eSf9SSc4TkYd/THOtAf0J9XbJkehhuI9pPZmM713E7ny9Uz0x/9QX/0B/15Zs30" +
184
+ "8NxAIFrWgf6A/ugPPLdlmfy3/7uTMFk2U3NZf0B/0B9KHwD23EBYBMIO+qM/oD/oT6ADgBuIOReN38JBpc3UXNYf0B8y9mfz" +
185
+ "WGm5CATr9XE0CqA/+gP6M4JfA0qzzcOmEmPT9hzQH/QH9OeZqd7wnp9yFyGycgOqP6A/xt1z4C+m+gqAGwhwA6o/oD/GXX/4" +
186
+ "myknihsIQH8A/dEf3jPlzwC4gQD0B9Af/QEAAAAAAAAAACjI94zx1J5fPfaI700E9AfQHwcAkk96mzGgP4D+xOyPGNJl4tuI" +
187
+ "xz0TY43+WBP6A/rjAMDLE7/FRPV7i+OEyHijP9aD/oD+LDM/HNE5ZnyPHK/eH8/Ga03oj/7oj/7oD/ozwQHADcSYce45NiM/" +
188
+ "thsI464/+uO56I/+GOfK/VmqTHwLId4EtAm7gdAfY60/+qM++qM//d/DEn3iu4HIvfFV3oTdQMTfePVHfzwH464/5n3G97JE" +
189
+ "nPxuIGqFt+Jm4AYi7uarP/rjORh3/THvs7+npeonLvqxPudKz8MNhOegP/rjc9Uf/THXRr63terDuP94Pb//LoJoC75K+KNF" +
190
+ "qOo60B/rXX/0R3/0p/L7WStO/oqL4PZzi7rZ3b6vjM8i6g1Etc1Af/RHf/RHf/Snen/WqpPfSRg3EHHfj/6A/uiP/pDkAOAG" +
191
+ "wuk34inYM8g99vpj7uuP/uiP/ujPwAOAGwjAetcf0B/vh7G6HQDcQFCVGwjPQH8w9/VHfyh5AEB4hAj0R38A/Rnfn9VDEH+w" +
192
+ "CegPoD/6U4evAID42wRAf/QHHAAAAAAHgDe4gYjrdL5cv/+J8DqgP25A9Qn90R99SnAAIH6Y/rLQW70OgD4B+uQAQKfJ++7k" +
193
+ "a/U6uO0EfdIm0Kd+68MBANwmAGgTFLKNjspfvi9uxu+vg1dvAfbM6Vav43loE2iTPpHfOnICu1EY49GC3xuCVq8DEf/Co036" +
194
+ "BPpE1j6tIyfwuxPQ93a2n8TvTrpWrwORNldt0ifQJzL3afMoTeIor1P1GfwU33duE1q8DugT2gT5++SHgMFtAoA2QSFdvwLg" +
195
+ "RgHy3ibMPv7aBNqkT1SxjpjIbhSA6H/R0SZAn8hqizCR3SgAETdZbQL0iYz8DAAAADgAAAAADgAAAIADAAAA4AAAAAA4AAAA" +
196
+ "AA4AAACAAwAAAOAAAAAAOAAAAAAOAAAAgAMAAAA4AAAAAA4AzOnr82P5/vfT+XKd4T3fvs/b9w/oj/4A+uMAAAAAOABADG4g" +
197
+ "AP3RH3AAwCYg/qA/+gPoz7D+rAbfJgDirz+A/uhPHb4CIETCY+zFH/3RH88A/Sk09x0Aioq2CGa5HQH0B9Cf2d9PlwOAG4h4" +
198
+ "p+BIz+L+fWS8+XEDYez1R3+sAf3RH/2J0h9fASgm2iKosPm6gQD9sd71B/2J1J91xMC7gbAIKm6+biBijL3+WAf6oz/6oz/V" +
199
+ "+7NGWfRuIGotgqo3b24grHf90R/90R/vR39Gz/vFgq8boUcT/8jPv/fHm2XcR4xBxXmvP/qjP/pjreuP/gw4AESbcJUn/yun" +
200
+ "3xbjcfTr2wzMe/3RH/3RH+PuOehP8AOAG4j5FkJrfsezG4jqm7D+6I/+6I/+6E+5A4AbiJoLwTi7gbAJ64/+6I/+6I/+FD4A" +
201
+ "uIGosRiMrxuImcZcf/THWOuP/pC9P0v0QXYDgejYePUH9Ed/9IdkBwA3EHDcmjDX9Qf0R388E8IeAHosBBMf0B9Af3AASL4Y" +
202
+ "THpAfwD9AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeNEy" +
203
+ "6xs/nS/X+z/7+vxYPFJAfwD9gcfWLJP/2Z8D6A+gP/B/S5bJ7yQ8/jkYd6puvtaB/oD+6M9M1myT30l43HMw7lTffK0D/QH9" +
204
+ "0Z8ZbNEns9PsXBE6nS9Xz2zMczDu+qM/+qM/+oP+vGL1SHED4QYC9Af9gTr92TxWk/kZNxBzPTc3oOgP+gP6E/YAIBJwTLRs" +
205
+ "wvoD+qM/EPIA8O6i8VPwVNpMzWX9Af1Bfyh9AHhlEZj8r4+jUQD90R/QH/2pZ8308DzUGIvGc6DiOjDv9Qf0R39m+ZxMGHZz" +
206
+ "AxFv3D0HrAPzXn9Af17l14DS7CQs+mPG3XPAOjDv9Qf0Zw8LFSbjBhTQH+AvfAUAJuMGFNAfAAAAAAAAAAAAKCv89+zt+dVj" +
207
+ "j/jeREB/AP2BwAeAFpPeYgD0B9Af/SH4AeDIiW8hjHsmxprqG681oT+gP/rjALBjkFsMnt9bHCdExpuZ5rv+6A/oj+eRsT9L" +
208
+ "xME+cpB6fzwTX3jcQMw1vvqjP+iP/ngW2fuzRBrwnoMy8mO7gTDubiDijbP+6A/6oz/me5X+LBUnv0XgBsINRO0x1x/9sRb0" +
209
+ "R3/0p3J/lqqT3yJwA+EGQvT1R3/0R3/0R38q9seps+gicAPhBkL09Ud/9Ed/9Ed/avZnMdHqLQI3EJ6D6OuPz1V/9Mdc05+6" +
210
+ "/VlHfeLRJliV8Edb6Pcfv+f3oVZ+DlXHXX/0xzrQH+tdf/Sn4wHg9hOLOtlu31fGIEU95VfbDKI8h0rjrj/mvXWgP/qjP/oz" +
211
+ "4ACAGwg3EG4gQH/0R3+w3se/ny4HgBlOv9lPwW4gbL5VN2H98Qz0R3/Mff3RnwEHAMANBGC96w/E4ABQgBsIz6Dy2GPu64/+" +
212
+ "oD/60/kAMNPgCxGIv/4A+qM/2fkKANgExB/0R3/AAQDxtwkA+uMpgv5k7I8DAAAAFLLNfCqb8XRHLbPeQHy/79P5cq20trQJ" +
213
+ "81l/9IkK1pET+Kf/7v06ANoE6BMOAJ0m8LsTsNXrCMrl+v1PhNeBKJurNukT6BOZ++RnAATFbQKgTwCF+uQAYPK6TXCbAPqE" +
214
+ "NkGhPnU9ADz6YZO9P4TS6nXAbQLaBNqkT1Szjp7I7068Vq8DbhPQJtAmfaKSLcJEHv06FUPyU3zfuU1o8ToQdZPVJn0CfaJn" +
215
+ "n3odjv0MgJC4TQD0CaBQnzaP0iR2m5D7NsEoo09oE+jTLV8BALcJANoEhfgKAATcaEe/DoA2QV6+AgAAAA4AAACAAwAAAOAA" +
216
+ "AAAAOAAAAAAOAAAAgAMAAADgAAAAADgAAAAADgAAAIADAAAA4AAAAAAOAAAAgAPAu74+P5bvfz+dL9cZBuX2fd6+f2Au+gPo" +
217
+ "j/4w4AAAAAA4ANCJGwhAf/QH9Ed/uh8AZnoI4g82Af0B9IfMfAUAxN8mAPqjP+AAUDNEWcPjBgJ/EdIfY68/WAP6oz/dDwDP" +
218
+ "PtFoAw/kpj+A9a4/lXU9ANyfaKJMuvv3kfHmxw2Esa/8DPTHGtAf/dEf/dGfQQeAiIugwuR3AwH6Y73rD/qjP/oz7AAQaRFU" +
219
+ "m/xuINxARLuB0B/90R/90R/zXn/6P4e16sOoevJ1A+EGYob3oz/G3XPQH+vAvNef4ywRF/6Rg9D7482yAYwYg4oRivg5V90M" +
220
+ "9Ed/9Ed/9Ed/qvZniboIWg7K0a9vEYj+rJ975eegP/qjP/qjP/pTtT/LLAuhNb/j2Q2EGwibr/7oj/7oj/4Y84r9WaotBBPf" +
221
+ "DYRN2OarP/qjP/qjP1Tuz1JhMZj0biDcQMS8gdAf9Ed/PAn90R8HANxAGO9CNxCgP/oD+uMAQMLFIPLjw+OZoD/oD+iPAwAU" +
222
+ "3IhtvID+ABYjJN+MbbqA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
223
+ "AAAAAAAAALDLYghgPqfz5Xr/Z1+fH9YzoD/Ar1ZDAPNvvs/+HEB/gFvTntjdQGDz/Zl1oD+gP/oDz6xZJv+rcYLMm691oD+g" +
224
+ "P/oDv9myReh0vlydhMc8B+PefjM1pvqD/ugP+qM/ra2ZJr+TsBsI0B/9Af1Bf57bok9mp9m5IuQGgkybqbmsP6A/ZOzP5pHS" +
225
+ "Olo2YWEH/dEf0B8HACadzDaKWJu238KB/qA/oD/THgBEAtpvwtaV/oD+6A/8Zs24aCwuKm4e5r3+gP7oj9HiFVNOFDcQ8cbd" +
226
+ "c8A6MO/1B/RHf+Z4DlP+H4G5gYg17p4D1oF5rz+gP/ozz3MwYWh6EhYhQH8A/Ylt9ThpdRK2+QL6A+gPAAAAAAAAAADAoXzP" +
227
+ "EgS251ePPeJ7EwH9ARwAIPmmazMG9AeY9gDgBgIbr41Yf0B/PBNjTfIDgBsIRL7dfPV70/UH9Ed/jDdhDwBuIHLGyFjvG98j" +
228
+ "x6v3x7PxWhP6oz/6oz/64wDgBsINhPF+MM49x2bkx55pvuuP/uiP/uiP55GxP0vEwXYD4QbC5msT1h/PQn/0R3/0R38SHgDc" +
229
+ "QLiBEP2xY1B5HeiP/uiP/uiP/lTtT+mFbxG4gTDnaq4D/dEf/dEf/dGfyv1Zqi94NxBuIHzOtZ6H/ngO+qM/Plf9qd6ftfqE" +
230
+ "u//4Pb8PrHKEqo571NBWCb/+eA76oz/6oz/60/kAEPW0WW0RRHkOlcb99nOLutndvq+Mz0J/PAf90R/90R/9GXAAcANh8ruB" +
231
+ "wHrXH/1Bf7wf/Rnbn3XEwLuBMPkrbcIzzP3sa0B/9Ed/9Mcz0B/9GXAAwA2EGwhAfwDrffz76XIAcAMR6/TrBoJK9Mcz0B/M" +
232
+ "ff3RnwEHABD/eW4Z/UUI9Ed/IDcHAJuA+AP6oz+gP4X6sxp8mwCIv/4A+qM/dfgKAAAAOACQhRuIeZ7T9z8RXgf0xw2oNqE/" +
233
+ "efvjAACBIvWXRd/qdQC0CXLbZj6VzXi6g1c2wtP5ct0zp1u9juehTaBN+kR+68gJ7EYBiPoXHm0C9AkHgINvFEa8jqD43k7Q" +
234
+ "Jn0CfaJan/wMgKC4TRjo0Zdf935ZttXrgD6hTZC/Tw4AJq/bhGAb7bsbY6vXAX1CmyB3n7r+EPDX58fy0yf3zo1Ci9eBqBvt" +
235
+ "6NepOP7aBNqkT1SxjpjIbhSA6H/R0SZAn8hqizCR3Si4TYCIm6w26RPoEz371OvbgPwMgJC4TQD0CaBQnzaP0iR2mwDoE0Cd" +
236
+ "PvkKAAAAFOIAAAAADgAAAIADAAAA4AAAAAA4AAAAAA4AAACAAwAAAOAAAAAAOAAAAAAOAAAAgAMAAADgAAAAAA4AQDNfnx/L" +
237
+ "97+fzpfrDO/59n3evn9Af/QHHAAAAAAHgP9yAwGMoj+A/ugPAw4AYBOYZxMQf9Af/QEHAMTfJgDoD6A/ifqzegjijzWQee7r" +
238
+ "D/qjP8ZefxhwAAAeh9b7AfQHSHkAcAMxjhuIeM8h0rO4fx8Zb370x9jrj/5YA/qjPwMOAG4gIN4mXGHz1R/QH+tdfxh4AHAD" +
239
+ "4RRc8QYi6jqotvnqj/7oj/7oj/7oz4ADgBsIJ343EDHWQdV5rz/Wu/7oj/7oj/fz799SeeJVnPwRP+eqEXq08I/8/Ht/POvA" +
240
+ "vNcf/dEf/THu8d7TUvUTF/0Yn3vl5/DK6b/FeBz9+taBea8/+qM/+mPc53ov4U4/biDcQNgQjud3POuP/uiP/uiP/tTtzxJ1" +
241
+ "EbiBcAPhudh49Ud/9Ed/9Ed/9CfpAcANhBsIT+K4NWF89Ud/9Ed/9Mcz0Z+wBwA3EG4gQH+Mt/5gPeiP/hQ8ALiBcAMB+mOs" +
242
+ "9QdrwlzXn6IHAHItBDEC9AfQHwcAki8Gmy6gP4D+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh/sf" +
243
+ "aQk+QkLwKvsAAAAASUVORK5CYII="